340 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/////////////////////////////////////////////////////////////////
 | 
						|
/*
 | 
						|
    Copyright (c) 2013~  Novatek Microelectronics Corporation
 | 
						|
 | 
						|
    @file LviewNvtAPI.h
 | 
						|
 | 
						|
    @version
 | 
						|
 | 
						|
    @date
 | 
						|
 | 
						|
*//////////////////////////////////////////////////////////////////
 | 
						|
#ifndef _LVIEWNVTAPI_H
 | 
						|
#define _LVIEWNVTAPI_H
 | 
						|
 | 
						|
/**
 | 
						|
    Video format for LviewNvt.
 | 
						|
*/
 | 
						|
typedef enum _LVIEW_VIDEO_FORMAT {
 | 
						|
	LVIEWNVT_VIDEO_FORMAT_422 = 0,                ///< YCbCr 422, UV packed.
 | 
						|
	LVIEWNVT_VIDEO_FORMAT_420,                    ///< YCbCr 420, UV packed.
 | 
						|
	ENUM_DUMMY4WORD(LVIEWNVT_VIDEO_FORMAT)
 | 
						|
} LVIEWNVT_VIDEO_FORMAT;
 | 
						|
 | 
						|
/**
 | 
						|
    Video frame rate.
 | 
						|
*/
 | 
						|
typedef enum _LVIEW_VIDEO_FRAMERATE {
 | 
						|
	LVIEWNVT_VIDEO_FRAMERATE_30 = 30,             ///< Video frame rate 30
 | 
						|
	LVIEWNVT_VIDEO_FRAMERATE_24 = 24,             ///< Video frame rate 24
 | 
						|
	LVIEWNVT_VIDEO_FRAMERATE_15 = 15,             ///< Video frame rate 15
 | 
						|
	LVIEWNVT_VIDEO_FRAMERATE_12 = 12,             ///< Video frame rate 12
 | 
						|
	ENUM_DUMMY4WORD(LVIEW_VIDEO_FRAMERATE)
 | 
						|
} LVIEW_VIDEO_FRAMERATE;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Video Codec for LviewNvt.
 | 
						|
*/
 | 
						|
typedef enum _LVIEW_VIDEO_CODEC {
 | 
						|
	LVIEWNVT_VIDEO_CODEC_MJPG = 0,                ///< Video codec using MJPG
 | 
						|
	LVIEWNVT_VIDEO_CODEC_H264,                    ///< Video codec using H264
 | 
						|
	LVIEWNVT_VIDEO_CODEC_MAX,                     ///< Max count.
 | 
						|
	ENUM_DUMMY4WORD(LVIEW_VIDEO_CODEC)
 | 
						|
} LVIEW_VIDEO_CODEC;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Audio sampling rate
 | 
						|
*/
 | 
						|
typedef enum _LVIEWNVT_AUD_SR {
 | 
						|
	LVIEWNVT_AUD_SR_08K   = 8000,                 ///< audio sample rate 8  KHz
 | 
						|
	LVIEWNVT_AUD_SR_16K   = 16000,                ///< audio sample rate 16 KHz
 | 
						|
	LVIEWNVT_AUD_SR_24K   = 24000,                ///< audio sample rate 24 KHz
 | 
						|
	LVIEWNVT_AUD_SR_32K   = 32000,                ///< audio sample rate 32 KHz
 | 
						|
	ENUM_DUMMY4WORD(LVIEWNVT_AUD_SR)
 | 
						|
} LVIEWNVT_AUD_SR;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Audio channel
 | 
						|
*/
 | 
						|
typedef enum _LVIEWNVT_AUD_CH {
 | 
						|
	LVIEWNVT_AUD_CH_LEFT,                         ///< Left
 | 
						|
	LVIEWNVT_AUD_CH_RIGHT,                        ///< Right
 | 
						|
	LVIEWNVT_AUD_CH_STEREO,                       ///< Stereo
 | 
						|
	LVIEWNVT_AUD_CH_MONO,                         ///< Mono two channel
 | 
						|
	ENUM_DUMMY4WORD(LVIEWNVT_AUD_CH)
 | 
						|
} LVIEWNVT_AUD_CH;
 | 
						|
 | 
						|
/**
 | 
						|
     @name audio bit per sample
 | 
						|
*/
 | 
						|
//@{
 | 
						|
#define LVIEWNVT_AUD_16BIT_PER_SAMPLE       16      ///< audio 16 bit per sample
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
     @name audio slice count per second
 | 
						|
*/
 | 
						|
//@{
 | 
						|
#define LVIEWNVT_AUD_SLICE_COUNT_MIN        4       ///< audio min slice count per second.
 | 
						|
#define LVIEWNVT_AUD_SLICE_COUNT_MAX      100       ///< audio max slice count per second.
 | 
						|
//@}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Callback functions prototype that LviewNvt task used.
 | 
						|
 | 
						|
    These definitions are used in the structure LVIEWNVT_INFO and would be used during LviewNvt_Open() to specify the
 | 
						|
    LviewNvt_VideoTsk needed callback function.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef UINT32(*LVIEWNVT_STARTVIDEOCB)(UINT32 videoWidth, UINT32 videoHeight, LVIEWNVT_VIDEO_FORMAT videoFmt);  ///< Callback for starting video.
 | 
						|
typedef UINT32(*LVIEWNVT_GETVIDEOBUFCB)(UINT32 *yAddr, UINT32 *cbAddr, UINT32 *crAddr, UINT32 *lineOfsY);       ///< Callback for getting video buffer.
 | 
						|
typedef UINT32(*LVIEWNVT_STOPVIDEOCB)(void);                                                                    ///< Callback for stopping video.
 | 
						|
typedef UINT32(*LVIEWNVT_FRAMECB)(UINT32 frameIdx, MEM_RANGE *frameBuf);                                        ///< Callback for each video frame.
 | 
						|
typedef UINT32(*LVIEWNVT_AUDIOCB)(UINT32 audioIdx, MEM_RANGE *audioBuf);                                        ///< Callback for each audio slice.
 | 
						|
typedef UINT32(*LVIEWNVT_DRAWCB)(UINT32  yAddr, UINT32 cbAddr, UINT32 crAddr, UINT32 lineOfsY);                 ///< Callback for draw image.
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    Callback functions prototype that live view daemon used.
 | 
						|
 | 
						|
    These definitions are used in the structure LVIEWNVT_DAEMON_INFO and would be used during LviewNvt_StartDaemon() to specify the
 | 
						|
    live view daemon needed callback function.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef UINT32(*LVIEWD_GETJPGCB)(UINT32 *jpgAddr, UINT32 *jpgSize);
 | 
						|
typedef void (*LVIEWD_SERVER_EVENT_CB)(UINT32 status);
 | 
						|
//@}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Init parameters for LviewNvt module.
 | 
						|
 | 
						|
    This structure is used in LviewNvt_Open() to specify the LviewNvt_VideoTsk task needed information for normal working
 | 
						|
    and user customization callback.
 | 
						|
*/
 | 
						|
typedef struct {
 | 
						|
	UINT32                  workMemAdr;          ///< work buffer address
 | 
						|
	UINT32                  workMemSize;         ///< work buffer size
 | 
						|
	LVIEW_VIDEO_CODEC       videoCodec;          ///< Video Codec using. Default value is LVIEWNVT_VIDEO_CODEC_MIPG.
 | 
						|
	UINT32                  targetSize;          ///< stream target size(Byte/Sec). Default value is 0x180000. (1.5MB)
 | 
						|
	LVIEW_VIDEO_FRAMERATE   frameRate;           ///< streaming frame rate. Default value is 30.
 | 
						|
	UINT32                  imgWidth;            ///< image width. Default value is 640.
 | 
						|
	UINT32                  imgHeight;           ///< image height. Default value is 480.
 | 
						|
	UINT32                  H2643DNRlevel;       ///< H.264 3DNR settings (0 to 7). 0 is disabled and 7 is strongest. Default value is 0.
 | 
						|
	UINT32                  MJPGQueueFrameNum;   ///< Queue MJPG number , default value is 5.
 | 
						|
	LVIEWNVT_STARTVIDEOCB   fpStartVideoCB;      ///< Callback function to start video
 | 
						|
	LVIEWNVT_GETVIDEOBUFCB  fpGetVideoBufCB;     ///< Callback function to get video source buffer for encoding
 | 
						|
	LVIEWNVT_STOPVIDEOCB    fpStopVideoCB;       ///< Callback function to stop video buffer
 | 
						|
	LVIEWNVT_FRAMECB        fpFrameCB;           ///< Callback function of frame video data output
 | 
						|
	BOOL                    isSupportAudio;      ///< If live view streaming support audio
 | 
						|
	LVIEWNVT_AUD_SR         audioSampleRate;     ///< Audio sampling rate
 | 
						|
	LVIEWNVT_AUD_CH         audioChannel;        ///< Audio channel
 | 
						|
	UINT32                  audioBitPerSample;   ///< Audio bit per sample
 | 
						|
	UINT32                  audioSliceCount;     ///< Audio slice count per second.
 | 
						|
	LVIEWNVT_AUDIOCB        fpAudioCB;           ///< Callback function of audio data output
 | 
						|
	LVIEWNVT_DRAWCB         fpDrawCB;            ///< Callback function for draw image on frame (ex: data stamp)
 | 
						|
} LVIEWNVT_INFO;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Init parameters for start http live view daemon.
 | 
						|
 | 
						|
*/
 | 
						|
typedef struct {
 | 
						|
	LVIEWD_GETJPGCB         getJpg;              ///<  get jpg function handler
 | 
						|
	LVIEWD_SERVER_EVENT_CB  serverEvent;         ///<  notify the status
 | 
						|
	UINT32                  portNum;             ///<  server port number
 | 
						|
	UINT32                  threadPriority;      ///<  server thread priority
 | 
						|
	UINT32                  frameRate;           ///<  live view streaming frame rate, default is 30
 | 
						|
	UINT32                  sockbufSize;         ///<  socket buffer size
 | 
						|
	UINT32                  is_ssl;              ///<  if use ssl
 | 
						|
	UINT32                  timeoutCnt;          ///<  timeout counter for send & receive , time base is 0.5 sec
 | 
						|
	UINT32                  tos;                 ///<  type of service
 | 
						|
	MEM_RANGE               bitstream_mem_range; ///<  bitstream memory range
 | 
						|
	UINT32                  is_push_mode;        ///<  if push mode
 | 
						|
	void                   *arg;                 ///<  reserved for future use
 | 
						|
} LVIEWNVT_DAEMON_INFO;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Init parameters for start http live view daemon.
 | 
						|
 | 
						|
*/
 | 
						|
typedef struct {
 | 
						|
	UINT32                  addr;               ///<  frame address
 | 
						|
	UINT32                  size;               ///<  frame size
 | 
						|
} LVIEWNVT_FRAME_INFO;
 | 
						|
 | 
						|
/*-----------------------------------
 | 
						|
    functions declare
 | 
						|
-----------------------------------*/
 | 
						|
 | 
						|
/**
 | 
						|
     Install LviewNvt flag and semaphore id.
 | 
						|
 | 
						|
*/
 | 
						|
extern void       LviewNvt_InstallID(void) _SECTION(".kercfg_text");
 | 
						|
 | 
						|
/**
 | 
						|
     Calculate LviewNvt required buffer size.
 | 
						|
 | 
						|
     Calculate LviewNvt required buffer size.
 | 
						|
 | 
						|
     @return the required buffer size.
 | 
						|
*/
 | 
						|
//extern UINT32     LviewNvt_CalcBuffSize(LVIEW_VIDEO_CODEC  videoCodec);
 | 
						|
 | 
						|
/**
 | 
						|
    Open LviewNvt video task.
 | 
						|
 | 
						|
    This is the LviewNvt video task initial function.
 | 
						|
 | 
						|
    @param[in] pInfo:  Init info for LviewNvt.
 | 
						|
 | 
						|
    @return
 | 
						|
        - @b E_OK: initial success.
 | 
						|
        - @b E_PAR: the initial parameter has some error.
 | 
						|
 | 
						|
    Example:
 | 
						|
    @code
 | 
						|
    {
 | 
						|
        LVIEWNVT_INFO      LViewInfo = {0};
 | 
						|
        UINT32 TargetRate = 0x180000, uiPoolAddr;
 | 
						|
 | 
						|
        uiPoolAddr = SxCmd_GetTempMem(0x1000000);
 | 
						|
        LViewInfo.workMemAdr    = uiPoolAddr;
 | 
						|
        LViewInfo.workMemSize   = TargetRate*2;
 | 
						|
        LViewInfo.targetSize      = TargetRate;
 | 
						|
        LViewInfo.frameRate       = 30;
 | 
						|
        LViewInfo.imgWidth        = 640;
 | 
						|
        LViewInfo.imgHeight       = 480;
 | 
						|
        LViewInfo.MJPGQueueFrameNum = 2;
 | 
						|
 | 
						|
        LViewInfo.videoCodec   = LVIEWNVT_VIDEO_CODEC_MJPG;
 | 
						|
        LViewInfo.fpGetVideoBufCB = xExamLviewNvt_GetVideoBufCB;
 | 
						|
        LviewNvt_Open(&LViewInfo);
 | 
						|
 | 
						|
    @endcode
 | 
						|
 | 
						|
 | 
						|
*/
 | 
						|
extern INT32     LviewNvt_Open(LVIEWNVT_INFO *pInfo);
 | 
						|
 | 
						|
/**
 | 
						|
    Close LviewNvt video task.
 | 
						|
 | 
						|
*/
 | 
						|
extern void       LviewNvt_Close(void);
 | 
						|
 | 
						|
/*
 | 
						|
    Start liveview data streaming encoding.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
*/
 | 
						|
extern INT32      LviewNvt_Start(void);
 | 
						|
 | 
						|
/*
 | 
						|
    Stop liveview data streaming encoding.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
 | 
						|
*/
 | 
						|
extern INT32      LviewNvt_Stop(void);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
    Get current liveview streaming JPG buffer address & size.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
 | 
						|
    Example:
 | 
						|
    @code
 | 
						|
    {
 | 
						|
        MEM_RANGE  JpgBuf;
 | 
						|
        int        ret;
 | 
						|
        UINT32     jpgAddr, jpgSize;
 | 
						|
 | 
						|
        ret = LviewNvt_getCurDecJpgBuf(&JpgBuf);
 | 
						|
        if (ret == E_OK)
 | 
						|
        {
 | 
						|
            jpgAddr = JpgBuf.Addr;
 | 
						|
            jpgSize = JpgBuf.Size;
 | 
						|
            ret = TRUE;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            jpgAddr = 0;
 | 
						|
            jpgSize = 0;
 | 
						|
            ret = FALSE;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    @endcode
 | 
						|
 | 
						|
*/
 | 
						|
extern ER         LviewNvt_getCurDecJpgBuf(MEM_RANGE *pJpgBuf);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
    Start http live view daemon.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
 | 
						|
    Example:
 | 
						|
    @code
 | 
						|
    {
 | 
						|
        LVIEWNVT_DAEMON_INFO   lviewObj = {0};
 | 
						|
 | 
						|
        lviewObj.getJpg = (LVIEWD_GETJPGCB)UIAppHttp_getJpg;
 | 
						|
        lviewObj.serverEvent =(LVIEWD_SERVER_EVENT_CB)UIAppHttp_notifyStatus;
 | 
						|
        lviewObj.portNum = 8192;
 | 
						|
        // set http live view server thread priority
 | 
						|
        lviewObj.threadPriority = 6;
 | 
						|
        // set motion jpg bitstream memory range
 | 
						|
        lviewObj.bitstream_mem_range.Addr = 0x66000000;
 | 
						|
	    lviewObj.bitstream_mem_range.Size = 0x00300000;
 | 
						|
        // live view streaming frame rate
 | 
						|
        lviewObj.frameRate = 30;
 | 
						|
        // socket buffer size
 | 
						|
        lviewObj.sockbufSize = 40960;
 | 
						|
        LviewNvt_StartDaemon(&lviewObj);
 | 
						|
    }
 | 
						|
    @endcode
 | 
						|
*/
 | 
						|
extern ER      LviewNvt_StartDaemon(LVIEWNVT_DAEMON_INFO   *daemonInfo);
 | 
						|
 | 
						|
/*
 | 
						|
    Stop http live view daemon.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
 | 
						|
*/
 | 
						|
extern ER      LviewNvt_StopDaemon(void);
 | 
						|
 | 
						|
/*
 | 
						|
    Push frame to lview server.
 | 
						|
 | 
						|
    @return
 | 
						|
         - @b E_OK: The operation is success.
 | 
						|
         - @b E_SYS: has some error.
 | 
						|
 | 
						|
*/
 | 
						|
extern ER      LviewNvt_PushFrame(LVIEWNVT_FRAME_INFO *frame_info);
 | 
						|
 | 
						|
 | 
						|
#endif  // _LVIEWVIDEOTSK_H
 | 
						|
 |