/** Header file for Playback application. This file is the header file that define the API and data type for Playback application. @file PlaybackTsk.h @ingroup mIAPPPlay @note Nothing. Copyright Novatek Microelectronics Corp. 2012. All rights reserved. */ #ifndef _PLAYBACKAPI_H #define _PLAYBACKAPI_H #include "hdal.h" #include "hd_type.h" #include "kwrap/type.h" #if _TODO #include "ExifDef.h" #endif /** @addtogroup mIAPPPlay */ //@{ //------------------------------------------------------------------------------ // Definitions //------------------------------------------------------------------------------ /** @name Playback file format The format and attribute of file. @note For _PLAY_OBJ::uiPlayFileFmt. */ //@{ #define PBFMT_UNKNOWN 0x00000000 ///< File format: Unknown #define PBFMT_JPG 0x00000001 ///< File format: JPEG #define PBFMT_WAV 0x00000002 ///< File format: WAV #define PBFMT_AVI 0x00000004 ///< File format: AVI #define PBFMT_ASF 0x00000008 ///< File format: ASF #define PBFMT_RAW 0x00000010 ///< File format: RAW #define PBFMT_JPGMEMO 0x00000010 ///< File attribute: JPEG with Voice-Memo #define PBFMT_MP4 0x00000020 ///< File format: MP4 #define PBFMT_READONLY 0x00000040 ///< File attribute: Read only #define PBFMT_MPG 0x00000080 ///< File format: MPEG #define PBFMT_MOVMJPG 0x00000100 ///< File format: MOV with motion JPEG #define PBFMT_TS 0x00000200 ///< File format: TS #define PB_SUPPORT_FMT (PBFMT_JPG|PBFMT_WAV|PBFMT_AVI|PBFMT_MOVMJPG|PBFMT_ASF|PBFMT_MPG|PBFMT_TS) ///< Default file format for Playback //@} /** @name Playback image orientation @note For #PBPRMID_ROTATE_DIR. */ //@{ #define PLAY_ROTATE_DIR_UNKNOWN 0xFF ///< Rotation direction: Initialed (unknown) #define PLAY_ROTATE_DIR_0 PLAY_ROTATE_DIR_UNKNOWN #define PLAY_ROTATE_DIR_90 0x00 ///< Rotation direction: 90 deg #define PLAY_ROTATE_DIR_180 0x01 ///< Rotation direction: 180 deg #define PLAY_ROTATE_DIR_270 0x02 ///< Rotation direction: 270 deg #define PLAY_ROTATE_DIR_HOR 0x03 ///< Rotation direction: Horizontal #define PLAY_ROTATE_DIR_VER 0x04 ///< Rotation direction: Vertical //@} /** @name Playback photo display direction @note For #PBPRMID_DISP_DIRECTION. */ //@{ #define PB_DISPDIR_HORIZONTAL 0x01 ///< set display direction to Horizontal #define PB_DISPDIR_VERTICAL 0x02 ///< set display direction to Vertical //@} /** @name Playback function Enable Flag @note For #PBPRMID_EN_FLAGS. */ //@{ #define PB_ENABLE_KEEP_ASPECT_RATIO 0x00000001 ///< Keep aspect ratio (letterboxing or pillarboxing) #define PB_ENABLE_SHOW_BACKGROUND_IN_THUMB 0x00000002 ///< Show background in thumbnail mode #define PB_ENABLE_SEARCH_FILE_WITHOUT_DCF 0x00000004 ///< Search file without DCF #define PB_ENABLE_SHOW_BG_IN_MOVIE 0x00000008 ///< Show background in Movie file #define PB_ENABLE_SHOW_BG_IN_BADFILE 0x00000010 ///< Show background in Bad file #define PB_ENABLE_PLAY_FILE_BY_DATE 0x00000020 ///< Play file by date #define PB_ENABLE_THUMB_WITH_DIFF_FOLDER 0x00000040 ///< Thumbnail with diff folder #define PB_ENABLE_TV_PLUGIN 0x00000080 ///< Represent TV in plun in #define PB_ENABLE_SPEEDUP_SCREENNAIL 0x00000100 ///< Represent screennail is appended after primary image //@} /** @name Playback thumbnail mode showing method @note For #PBPRMID_THUMB_SHOW_METHOD. */ //@{ #define PB_SHOW_THUMBNAIL_ONE_BY_ONE 0x00000001 ///< Show thumbnail image one bye one #define PB_SHOW_THUMBNAIL_IN_THE_SAME_TIME 0x00000002 ///< Show thumbnail image in the same time //@} /** @name Playback task state @note For #PBPRMID_PLAYBACK_STATUS. */ //@{ #define PB_STA_UNKNOWN 0x00000000 ///< Unknow #define PB_STA_NOIMAGE 0x00000001 ///< No image #define PB_STA_ERR_FILE 0x00000002 ///< Error file #define PB_STA_ERR_DECODE 0x00000004 ///< Decode error #define PB_STA_ERR_WRITE 0x00000008 ///< Write error #define PB_STA_DONE 0x00000010 ///< Done #define PB_STA_BUSY 0x00000020 ///< Busy #define PB_STA_STANDBY 0x00000040 ///< Standby #define PB_STA_INITFAIL 0x00000080 ///< Init fail #define PB_STA_ERR_TASK 0x00000100 ///< Task doesn't start //@} /** @name Playback single view command @note For _PLAY_SINGLE_OBJ::PlayCommand. */ //@{ #define PB_SINGLE_CURR 0x01 ///< Play current image #define PB_SINGLE_NEXT 0x02 ///< Play next image #define PB_SINGLE_PREV 0x04 ///< Play previous image #define PB_SINGLE_PRIMARY 0x08 ///< Play screennail image, or primary image #define PB_SINGLE_THUMB 0x40 ///< Play thumbnail image only #define PB_SINGLE_NO_HIDDEN 0x80 ///< Play primary image only //@} /** @name Playback thumbnails view command @note For _PLAY_BROWSER_OBJ::BrowserCommand. */ //@{ #define PB_BROWSER_CURR 0x01 ///< Browse current thumbnail page #define PB_BROWSER_NEXT 0x02 ///< Browse next thumbnail page #define PB_BROWSER_PREV 0x04 ///< Browse previous thumbnail page #define PB_BROWSER_THUMB 0x40 ///< Browse thumbnail image only //@} /** @name Playback zooming command @note For PB_PlayZoomMode(), PB_PlayZoomPanMode(). */ //@{ #define PLAYZOOM_IN 0x01 ///< Zoom in #define PLAYZOOM_OUT 0x02 ///< Zoom out #define PLAYZOOM_UP 0x04 ///< Zoom - scroll up #define PLAYZOOM_DOWN 0x08 ///< Zoom - scroll down #define PLAYZOOM_LEFT 0x10 ///< Zoom - scroll left #define PLAYZOOM_RIGHT 0x20 ///< Zoom - scroll right #define PLAYZOOM_USER 0x40 ///< User defined zooming command //@} /** @name Playback mode @note For PBPRMID_PLAYBACK_MODE. */ //@{ #define PLAYMODE_THUMB 9 ///< Thumbnail mode #define PLAYMODE_PRIMARY 10 ///< Single view mode: JPEG #define PLAYMODE_AVI 11 ///< Single view mode: AVI #define PLAYMODE_ROTATE 12 ///< Rotae display #define PLAYMODE_WAV 13 ///< Single view mode: WAV #define PLAYMODE_ASF 14 ///< Single view mode: ASF #define PLAYMODE_MPG 16 ///< Single view mode: MPEG #define PLAYMODE_MOVMJPG 17 ///< Single view mode: Motion JPEG #define PLAYMODE_ONLYTHUMB 33 ///< First decode always decode only thumbnail #define PLAYMODE_PICBRIDGE 55 ///< Picture bridge mode #define PLAYMODE_USERJPGOUT 77 ///< User JPEG mode #define PLAYMODE_UNKNOWN 99 ///< Initial mode when Playback is started //@} #define PB_DISPSRV_DRAW 0x00000001 #define PB_DISPSRV_FLIP 0x00000002 #define PB_DISPSRV_PUSH 0x00000004 #define PB_DISPSRV_DRAW_MASK 0x0000000F #define PB_DISPSRV_SUSPEND 0x00000010 #define PB_DISPSRV_SUS_MASK 0x000000F0 //------------------------------------------------------------------------------ // Enumerations //------------------------------------------------------------------------------ /** Playback show specific file in video1/video2 @note For _PLAY_SPECFILE_OBJ::PlayFileVideo. */ typedef enum { PLAY_SPEC_FILE_IN_VIDEO_1, ///<0, Display in video1 PLAY_SPEC_FILE_IN_VIDEO_2 ///<1, Display in video2 } PB_SPEC_VDO; /** Playback show specific file with/wo clear buffer @note For _PLAY_SPECFILE_OBJ::PlayFileClearBuf. */ typedef enum { PLAY_SPEC_FILE_WITH_CLEAR_BUF, ///<0, Clear buffer PLAY_SPEC_FILE_WITH_NOT_CLEAR_BUF ///<1, Not clear buffer } PB_SPEC_CLR; /** Playback parameters enumeration @note For PB_GetParam(), PB_SetParam(). */ typedef enum _PB_PRMID { PBPRMID_FILE_ATTR_LOCK = 0x01, ///< File attribute: Read Only PBPRMID_JPEG_WITH_VOICE = 0x02, ///< JPEG with Voice-Memo PBPRMID_PLAYBACK_MODE = 0x10, ///< Current Playback mode PBPRMID_PLAYBACK_STATUS = 0x11, ///< Current status of playback task PBPRMID_PLAYBACK_OBJ = 0x12, ///< Pointer to a playback object setting structure PBPRMID_INFO_IMG = 0x13, ///< Pointer to the current image configuration structure PBPRMID_INFO_VDO = 0x14, ///< Pointer to the current video configuration structure PBPRMID_ROTATE_DIR = 0x15, ///< Current image rotation direction PBPRMID_MAX_PANELSZ = 0x16, ///< MAX panel size for Playback PBPRMID_EN_FLAGS = 0x17, ///< Function Enable flag of Playback PBPRMID_BG_COLOR = 0x18, ///< Default background color PBPRMID_VID_DECRYPT_KEY = 0x19, ///< Video decryption key PBPRMID_JPG_DECRYPT_KEY = 0x1A, ///< JPG decryption key PBPRMID_JPG_DECRYPT_LEN = 0x1B, ///< JPG decryption length PBPRMID_VID_DECRYPT_MODE = 0x1C, ///< Video decryption mode. 1:AES128 2:AES256 PBPRMID_VID_DECRYPT_POS = 0x1D, ///< Video decryption pos. refer to PB_DECRYPT_TYPE PBPRMID_THUMB_CURR_IDX = 0x20, ///< Current browsed file index in current Thumbnail page PBPRMID_THUMB_CURR_NUM = 0x21, ///< Current decoded-thumb-file numbers in current Thumbnail page PBPRMID_THUMB_FMT_ARRAY = 0x22, ///< Pointer to an array of file formats of current Thumbnail page PBPRMID_THUMB_DEC_ARRAY = 0x23, ///< Pointer to an array of decoded results of current Thumbnail page PBPRMID_THUMB_SEQ_ARRAY = 0x24, ///< Pointer to an array of file sequence IDs of current Thumbnail page PBPRMID_THUMB_VDO_LTH_ARRAY = 0x25, ///< Pointer to an array of video times of current Thumbnail page PBPRMID_THUMB_SHOW_METHOD = 0x26, ///< Thumbnail mode showing method (#PB_SHOW_THUMBNAIL_ONE_BY_ONE/#PB_SHOW_THUMBNAIL_IN_THE_SAME_TIME) PBPRMID_THUMB_LAYOUT_ARRAY = 0x27, ///< Pointer to an array of configuration the playback thumbnails mode appearance PBPRMID_THUMB_LAYOUT_ARRAY2 = 0x28, ///< Pointer to an array of configuration the playback thumbnails mode appearance for dual view PBPRMID_ZOOM_INDEX = 0x30, ///< Current zoom-table-index PBPRMID_ZOOM_LVL_TBL = 0x31, ///< Pointer to a Zooming Level Table PBPRMID_PAN_CURX = 0x32, ///< Current X addr - left top corner of PBZoom sub-image relative to the main image left top corner ( (0,0) point) PBPRMID_PAN_CURY = 0x33, ///< Current Y addr - left top corner of PBZoom sub-image relative to the main image left top corner ( (0,0) point) PBPRMID_PAN_MAXX = 0x34, ///< MAX X addr - the MAX PBZoom image scrolling range PBPRMID_PAN_MAXY = 0x35, ///< MAX Y addr - the MAX PBZoom image scrolling range PBPRMID_NAMEID_FILE = 0x40, ///< Current DCF file ID PBPRMID_NAMEID_DIR = 0x41, ///< Current DCF directory ID PBPRMID_DATABUF_ADDR = 0x42, ///< Current data buffer address PBPRMID_DATABUF_SIZE = 0x43, ///< Current data buffer size PBPRMID_CURR_FILEPATH = 0x44, ///< Current file path PBPRMID_CURR_FILESEQ = 0x45, ///< Current file sequence PBPRMID_CURR_FILESIZE = 0x46, ///< Current file size PBPRMID_CURR_FILEFMT = 0x47, ///< Current file format PBPRMID_TOTAL_FILE_COUNT = 0x48, ///< Total File count PBPRMID_DISP_DIRECTION = 0x50, ///< Display direction (#PB_DISPDIR_HORIZONTAL/#PB_DISPDIR_VERTICAL) PBPRMID_AUTO_ROTATE = 0x51, ///< Auto-rotate image according to EXIF-Orientation (TRUE/FALSE) PBPRMID_SLIDE_SPEED_TBL = 0x60, ///< Pointer to a Slide Speed Table for slide effect functions PBPRMID_DUAL_DISP = 0x70, ///< Dual display PBPRMID_SRC_SIZE = 0x71, ///< Source video size (PUSIZE structure) PBPRMID_SRC_REGION = 0x72, ///< Source video region (PIRECT structure) PBPRMID_DST_REGION = 0x73, ///< Destination video region (PIRECT structure) PBPRMID_VDO_WIN_ARRAY = 0x74, ///< Pointer to an array of video window (PURECT structure) PBPRMID_VDO_RECT_ARRAY = 0x75, ///< Pointer to an array of 1st video rectangle (PURECT structure) PBPRMID_THUMB_RECT = 0x76, ///< Pointer to an array of thumb nail layout rectangle (PURECT structure) PBPRMID_THUMB_WIDTH_ARRAY = 0x77, ///< Pointer to an array of thumb nail width PBPRMID_THUMB_HEIGHT_ARRAY = 0x78, ///< Pointer to an array of thumb nail height PBPRMID_EXIF_EXIST = 0x79, ///< Current file exists EXIF PBPRMID_EXIF_ORIENT = 0x7A, ///< Current file EXIF orientation PBPRMID_FILEDB_HANDLE = 0x90, ///< File handle to communicate with file DB PBPRMID_FILELIST_OBJ = 0x91, ///< File List Object pointer PBPRMID_DEC_IMG_CALLBACK = 0x92, ///< Callback function for decoding image files PBPRMID_DEC_VIDEO_CALLBACK = 0x93, ///< Callback function for decoding video files PBPRMID_CFG4NEXT_CALLBACK = 0x94, ///< Callback function for doing something before trigger next (DspSrv) PBPRMID_DISP_TRIG_CALLBACK = 0x95, ///< Callback function for handling display event PBPRMID_ONDRAW_CALLBACK = 0x96, ///< Callback function for drawing video frame PBPRMID_MAX_FILE_SIZE = 0x97, ///< Max File Size by project PBPRMID_MAX_RAW_SIZE = 0x98, ///< Max decode YUV size PBPRMID_MAX_DECODE_WIDTH = 0x99, ///< Decode max width PBPRMID_MAX_DECODE_HEIGHT = 0x9A, ///< Decode max height PBPRMID_PIXEL_FORMAT = 0x9B, ///< VDOUT pixel by project PBPRMID_HD_VIDEODEC_PATH = 0x9C, ///< Set/Get the hd_videodec path from ImageApp_Play PBPRMID_FILE_BUF_HD_INFO = 0x9D, ///< Get HDAL common file buffer info PBPRMID_EXIF_BUF_HD_INFO = 0x9E, ///< Get HDAL common exif buffer info PBPRMID_INFO_IMG_HDBUF = 0x9F, ///< Get HDAL common raw buffer info ENUM_DUMMY4WORD(PB_PRMID) } PB_PRMID; /** Playback error code. */ typedef enum _PB_ERR { PBERR_OK = 0x00, ///< Operation succeeded PBERR_NOT_SUPPORT = 0xF0, ///< Unsupported function PBERR_PAR = 0xF1, ///< Parameters are not valid PBERR_FAIL = 0xFF, ///< Operation failed ENUM_DUMMY4WORD(PB_ERR) } PB_ERR; /** Playback wait mode. @note For PB_WaitCommandFinish(). */ typedef enum _PB_WAIT_MODE { PB_WAIT_NOWAIT = 0x00, ///< No wait PB_WAIT_INFINITE = 0xFF, ///< Wait until operations completed ENUM_DUMMY4WORD(PB_WAIT_MODE) } PB_WAIT_MODE; /** Playback edit image operation. @note For _PB_EDIT_CONFIG::Operation. */ typedef enum _PB_EDIT_IMAGE { PBEDIT_RESIZE, ///< Resize image to specific size and save file PBEDIT_REQTY, ///< Re-quality for the current image and save file PBEDIT_ROTATE, ///< Update current JPEG EXIF-Orientation tag and save file PBEDIT_ROTATE_DISP, ///< Rotate image for display only PBEDIT_CROP, ///< Crop the opened image and save as a new file PBEDIT_CUSTOMIZE_DISP, ///< Set Customize effect for display only PBEDIT_CUSTOMIZE, ///< Set Customize effect and save file PBEDIT_CUSTOMIZE_PARA, ///< Set Customize parameters (if necessary) ENUM_DUMMY4WORD(PB_EDIT_IMAGE) } PB_EDIT_IMAGE; /** Playback screen control type. Screen control to sync display with OSD. @note For PB_ScreenControl(). */ typedef enum { PB_LOCK_SCREEN = 0, ///< The result of image operation will not show on display PB_FLUSH_SCREEN = 1, ///< Show the result of image operation on display ENUM_DUMMY4WORD(PB_SCREEN_CTRL_TYPE) } PB_SCREEN_CTRL_TYPE; /** Type of the file to be loaded. @note For PB_QuasiLoadFile(). */ typedef enum _PB_FILE_TYPE { PB_FILE_JPEG = 0, ///< The primary image of JPEG file PB_FILE_JPEG_THUMBNAIL, ///< The thumbnail image of JPEG file PB_FILE_SCREENNAIL, ///< The screennail image of JPEG file PB_FILE_AVI, ///< The 1st frame of AVI file PB_FILE_AVI_THUMBNAIL, ///< The thumbnail image of AVI file ENUM_DUMMY4WORD(PB_FILE_TYPE) } PB_FILE_TYPE; /** Display index There are two display engines have be supported. @note For PB_ConfigVdoWIN(), PB_Set1stVideoFrame(). */ typedef enum _PB_DISP_IDX { PBDISP_IDX_PRI = 0, ///< primary display PBDISP_IDX_SEC, ///< secondary display PBDISP_IDX_MAX, ENUM_DUMMY4WORD(PB_DISP_IDX) } PB_DISP_IDX; /** Playback decoding image type. This info indicates Playback module is decoding thumbnail or primary image. @note For PB_DECIMG_CB. */ typedef enum { PB_DECIMG_THUMBNAIL, ///< Playback module is decoding thumbnail image. PB_DECIMG_PRIMARY, ///< Playback module is decoding primary image. ENUM_DUMMY4WORD(PB_DECIMG_TYPE) } PB_DECIMG_TYPE; typedef enum { PB_KEEPAR_NONE, // scale to full screen PB_KEEPAR_PILLARBOXING, // add vertical mattes PB_KEEPAR_LETTERBOXING, // add horizontal mattes ENUM_DUMMY4WORD(PB_KEEPAR) } PB_KEEPAR; typedef enum { PB_VIEW_STATE_NONE = 0, PB_VIEW_STATE_SINGLE, PB_VIEW_STATE_ROTATE, PB_VIEW_STATE_SPEZOOM, PB_VIEW_STATE_THUMB, PB_VIEW_STATE_BYPASS, ENUM_DUMMY4WORD(PB_VIEW_STATE) } PB_VIEW_STATE; typedef enum { PB_SET_FLG_BROWSER_END = 0, PB_SET_FLG_DRAW_END, PB_SET_FLG_TRIGGER, ENUM_DUMMY4WORD(PB_SET_FLG) } PB_SET_FLG; typedef enum { PB_DEC_PRIMARY, ///< decode primary image PB_DEC_THUMBNAIL, ///< decode thumbnail, or decode primary image PB_DEC_HIDDEN, ///< decode hidden thumb, or decode primary image PB_DEC_THUMB_ONLY, ///< decode thumbnail only } PB_JPG_DEC_TYPE; typedef enum _PB_JPG_YUV_FORMAT { PB_JPG_FMT_YUV211 = 0, ///< YCbCr 2h11 PB_JPG_FMT_YUV422 = 0, ///< YCbCr 2h11 PB_JPG_FMT_YUV420 = 1, ///< YCbCr 411 PB_JPG_FMT_YUV211V = 3, ///< YCbCr 2v11 // PB_JPG_FMT_YUV100 = 4, ///< YCbCr 100 (Y plane only) ENUM_DUMMY4WORD(PB_JPG_YUV_FORMAT) } PB_JPG_YUV_FORMAT; typedef struct _PB_HD_COM_BUF{ UINT32 pa; UINT32 va; UINT32 blk_size; HD_COMMON_MEM_VB_BLK blk; //block ID }PB_HD_COM_BUF, *PPB_HD_COM_BUF; typedef enum { PB_DECRYPT_TYPE_NONE = 0x00000000, PB_DECRYPT_TYPE_CONTAINER = 0x00000001, PB_DECRYPT_TYPE_I_FRAME = 0x00000002, PB_DECRYPT_TYPE_P_FRAME = 0x00000004, PB_DECRYPT_TYPE_ALL_FRAME = 0x00000006, ENUM_DUMMY4WORD(PB_DECRYPT_TYPE) } PB_DECRYPT_TYPE; typedef enum { PB_DECRYPT_MODE_AES128 = 2, PB_DECRYPT_MODE_AES256 = 3, ENUM_DUMMY4WORD(PB_DECRYPT_MODE) } PB_DECRYPT_MODE; //------------------------------------------------------------------------------ // Function prototype //------------------------------------------------------------------------------ /** Callback function prototype for decoding image file. The callback function is invoked everytime the image file is playbacked. User could decide where the image file should be decoded by returning TRUE or not by returning FLASE. */ typedef BOOL (*PB_DECIMG_CB)(PB_DECIMG_TYPE DecType); /** Callback function prototype for decoding video file. The callback function is invoked everytime the video file is playbacked. User could decide where the video file should be decoded by returning TRUE or not by returning FLASE. */ typedef BOOL (*PB_DECVIDEO_CB)(UINT32 uiUserDataAddr, UINT32 uiUserDataSize); /** Callback function prototype for doing something before DspSrv tirgger next image. The callback function is invoked everytime the image/video is playbacked. User could rotate image or do other operations before DspSrv tirgger next image. */ typedef void (*PB_CFG4NEXT_CB)(void); /** Callback function prototype for triggering next display. The callback function is invoked everytime next display is needed to be triggered. User could keep source image and tirgger display task to draw the next image. */ typedef void (*PB_DISPTRIG_CB)(HD_VIDEO_FRAME *pimg_buf, BOOL trigger_draw); /** Callback function prototype for drawing the image buffer that to be displayed. The callback function is invoked everytime next display is needed to be triggered. User could decide how to process the source image. */ typedef void (*PB_ONDRAW_CB)(PB_VIEW_STATE view_state, HD_VIDEO_FRAME *pHdVdoFrame); //------------------------------------------------------------------------------ // Structures //------------------------------------------------------------------------------ /** The configuration object for Playback (PB_Open). @note For PB_Open(). */ typedef struct _PLAY_OBJ { UINT32 uiMemoryAddr; ///< Memory buffer starting address UINT32 uiMemorySize; ///< Memory buffer size UINT32 uiPlayFileFmt; ///< File format for playback of still image & video } PLAY_OBJ, *PPLAY_OBJ; /** Playback Edit Image configuration. Configuration structure, containing the ID of the operation and its parameters. @note -# For PB_EditImage(). -# Unless stated differently the values of puiParam[] should always be zero. */ typedef struct _PB_EDIT_CONFIG { PB_EDIT_IMAGE Operation; ///< The image editing operation ID UINT32 puiParam[4]; ///< The parameters for the specific editing operation } PB_EDIT_CONFIG, *PPB_EDIT_CONFIG; /** The command object for single view. Structure for playback mode command object. @note For PB_PlaySingleMode(). */ typedef struct _PLAY_SINGLE_OBJ { UINT32 PlayCommand; ///< Playback single view command UINT8 JumpOffset; ///< The jump-offset of read next/previous file(s) } PLAY_SINGLE_OBJ, *PPLAY_SINGLE_OBJ; /** The command object for thumbnails view. Structure for thumbnail mode command object. @note For PB_PlayBrowserMode(). */ typedef struct _PLAY_BROWSER_OBJ { UINT8 BrowserCommand; ///< Playback thumbnails view command UINT8 HorNums; ///< How many images in horizontal direction, HorNums * VerNums must <= 25 UINT8 VerNums; ///< How many images in vertical direction, HorNums * VerNums must <= 25 UINT32 slideEffectFunc; ///< Slide effect function, refer to SlideEffect.h UINT8 JumpOffset; ///< The jump-offset of read next/previous file(s) BOOL bReDecodeImages; ///< Used to re-decode all thumb images or not ///< - @b FALSE: It means #JumpOffset is still in the same page ///< - @b TRUE: It means Playback has to decode all images in another page } PLAY_BROWSER_OBJ, *PPLAY_BROWSER_OBJ; /** The command object for display specific file. Structure for showing specific file in specific video layer (#PB_SPEC_VDO) and specific size. @note For PB_PlaySpecFile(). */ typedef struct _PLAY_SPECFILE_OBJ { PB_SPEC_VDO PlayFileVideo; ///< Playback show specific file in video1/video2 #PB_SPEC_VDO PB_SPEC_CLR PlayFileClearBuf; ///< Playback show specific file with/wo clear buffer #PB_SPEC_CLR URECT PlayRect; ///< Pointer of the rectangle array of frame buffer layout BOOL bDisplayWoReDec; ///< For accelerating 2nd same specific file ///< - @b FALSE: Force current image to re-decode for display ///< - @b TRUE: Draw image w/o re-decode it for accelerating 2nd same specific file } PLAY_SPECFILE_OBJ, *PPLAY_SPECFILE_OBJ; /** The configuration object for capturing screen. Structure for capturing screen to specific image size. @note For PB_CaptureScreen(). */ typedef struct _PB_LOGO_INFO { UINT32 uiDstWidth; ///< [in] The width of captured image ('0' is special case: using panel width) UINT32 uiDstHeight; ///< [in] The height of captured image ('0' is special case: using panel height) UINT32 uiFileSize; ///< [in] The upper bound size of JPEG file ('0' is special case: the file size isn't limited) ///< [out] The size of captured JPEG file UINT32 uiFileAddr; ///< [out] The starting address of captured JPEG file } PB_LOGO_INFO, *PPB_LOGO_INFO; /** Structure for coordinate System Convertion */ typedef struct { UINT32 uiGlobalCoordX; ///< [in] global coordinate x => ex. (140, 0, 320, 240) UINT32 uiGlobalCoordY; ///< [in] global coordinate y UINT32 uiGlobalCoordW; ///< [in] global coordinate width UINT32 uiGlobalCoordH; ///< [in] global coordinate height UINT32 uiGlobalCoord_RngW; ///< [in] global coordinate range width => ex. (0, 0, ,640, 240) UINT32 uiGlobalCoord_RngH; ///< [in] global coordinate range height UINT32 uiClientCoord_OriX; ///< [in] client coordinate origin x => ex. (10, 60, 320, 120) UINT32 uiClientCoord_OriY; ///< [in] client coordinate origin y UINT32 uiClientCoord_RngW; ///< [in] client coordinate range width UINT32 uiClientCoord_RngH; ///< [in] client coordinate range height URECT *prcOut; ///< [out] output coordinate } COORDSYS_CONV, *PCOORDSYS_CONV; //------------------------------------------------------------------------------ // Export Functions //------------------------------------------------------------------------------ /** Install Playback task, flag and semaphore ID @return void */ extern void PB_InstallID(void); //------------------------------------------------------------------------------ // Export Functions //------------------------------------------------------------------------------ /** Uninstall Playback task, flag and semaphore ID @return void */ extern void PB_UninstallID(void); /** Open Playback mode. Open playback mode and start playback task. @param[in] pPlayObj Pointer of the configuration object for Playback: #_PLAY_OBJ @return - @b PBERR_OK: Success. - @b PBERR_FAIL: Fail. Example: @code { PLAY_OBJ PlayObj; PlayObj.uiMemoryAddr = 0x80000000; PlayObj.uiMemorySize = 0x00200000; PlayObj.uiPlayFileFmt = (PBFMT_JPG | PBFMT_AVI); PB_Open(&PlayObj); } @endcode */ extern PB_ERR PB_Open(PPLAY_OBJ pPlayObj); /** Close Playback mode. Close playback mode and terminate playback task. @param[in] TimeOut Playback wait mode @return - @b PBERR_OK: Success. - @b PBERR_FAIL: Fail. */ extern PB_ERR PB_Close(PB_WAIT_MODE TimeOut); /** Get Playback parameter. To get the value of a specific Playback parameter. @param[in] ParamID The identifier of the Playback parameter to be set. @param[in,out] puiVal Pointer where to write the value read from the Playback for the specific parameter. @return - @b PBERR_OK: Success. - @b PBERR_PAR: Parameters are not valid. */ extern PB_ERR PB_GetParam(PB_PRMID ParamID, UINT32 *puiVal); /** Set Playback parameter. To set a specific value to some Playback parameters. @param[in] ParamID The identifier of the Playback parameter to be set. @param[in] uiValue The value to be set to the specific Playback parameter. @return - @b PBERR_OK: Success. - @b PBERR_PAR: Parameters are not valid. */ extern PB_ERR PB_SetParam(PB_PRMID ParamID, UINT32 uiValue); /** Wait Playback command finish. Wait to last command of Playback be finished. @param[in] TimeOut Playback wait mode: #_PB_WAIT_MODE. @return - @b Task state: Playback task state according to the responsive state. */ extern INT32 PB_WaitCommandFinish(PB_WAIT_MODE TimeOut); //-------------------------[ Async Functions ]---------------------------- /** Edit image. This function executes an image editing operation. @note -# Image editing is allowed only in Playback mode of JPEG file format -# This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] pConfig Pointer to the Playback Edit Image configuration structure: #_PB_EDIT_CONFIG. - @b Operation - The operation to be performed: - @b #PBEDIT_RESIZE - @b puiParam[0] Width of the output image size. - @b puiParam[1] Height of the output image size. - @b puiParam[2] If overwrite the currently file. - @b #PBEDIT_ROTATE - @b puiParam[0] JPEG EXIF-Orientation. - @b puiParam[1] If display the edited image after the change is applied. - @b puiParam[2] If overwrite the currently file. - @b #PBEDIT_ROTATE_DISP - @b puiParam[0] JPEG EXIF-Orientation. - @b #PBEDIT_CROP - @b puiParam[0] Horizontal start of the cropping boundaries. - @b puiParam[1] Vertical start of the cropping boundaries. - @b puiParam[2] Width of the cropping boundaries. - @b puiParam[3] Height of the cropping boundaries. - @b #PBEDIT_CUSTOMIZE_DISP - @b puiParam[0] The Customize Edit function pointer. - @b puiParam[1] The required size of working buffer. - @b #PBEDIT_CUSTOMIZE - @b puiParam[0] The Customize Edit function pointer. - @b puiParam[1] The required size of working buffer. - @b puiParam[2] If overwrite the currently file. @return - @b PBERR_OK: Success. - @b PBERR_PAR: Invalid parameter(s). - @b PBERR_NOT_SUPPORT: Unsupported operation. Example: @code { PB_EDIT_CONFIG Config = {0}; Config.Operation = PBEDIT_RESIZE; Config.puiParam[0] = 640; Config.puiParam[1] = 480; Config.puiParam[2] = FALSE; PB_EditImage(&Config); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern PB_ERR PB_EditImage(PPB_EDIT_CONFIG pConfig); /** Play single image. Display single image and a first frame of video clips. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] pPlaySingleObj Pointer of the command object for single view: #_PLAY_SINGLE_OBJ. @return void. */ extern void PB_PlaySingleMode(PPLAY_SINGLE_OBJ pPlaySingleObj); /** Browse the image in thumbnails view. Display a Thumbnail page drawing thumbnail images and first frames of video clip. @note -# The horizontal images number * vertical images number can't exceed 25. -# This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] pPlayBrowserObj Pointer of the command object for thumbnails view: #_PLAY_BROWSER_OBJ. @return - @b PBERR_OK: The job is sent to playback task and you have to wait for the result. - @b PBERR_PAR: Invalid parameter(s). - @b PB_STA_DONE: This command is done. */ extern INT32 PB_PlayBrowserMode(PPLAY_BROWSER_OBJ pPlayBrowserObj); /** Do Playback image zooming. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] PlayCommand Playback zooming command (#PLAYZOOM_IN/#PLAYZOOM_OUT..). @return void. Example: @code { PB_PlayZoomMode(PLAYZOOM_IN); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern void PB_PlayZoomMode(UINT32 PlayCommand); /** Do Playback image scrolling. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] PlayCommand Playback zooming command (#PLAYZOOM_UP/#PLAYZOOM_DOWN/#PLAYZOOM_LEFT/#PLAYZOOM_RIGHT). @param[in] MoveOffsetX Horizontal scrolling offset. @param[in] MoveOffsetY Vertical scrolling offset. @return - @b PBERR_OK: The job is sent to playback task and you have to wait for the result. - @b PBERR_PAR: Invalid parameter(s). - @b PB_STA_DONE: This command is done, can not be scrolling anymore. Example: @code { PB_PlayZoomPanMode(PLAYZOOM_UP, 20, 60); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern INT32 PB_PlayZoomPanMode(UINT32 PlayCommand, UINT32 MoveOffsetX, UINT32 MoveOffsetY); /** Do Playback digital zoom by user setting. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] LeftUp_X the start-Left-Up-pixel-X of this picture @param[in] LeftUp_Y the start-Left-Up-pixel-Y of this picture @param[in] RightDown_X the end-Right-Down-pixel-X of this picture @param[in] RightDown_Y the end-Right-Down-pixel-Y of this picture @return - @b PBERR_OK: The job is sent to playback task and you have to wait for the result. - @b PBERR_PAR: Invalid parameter(s). Example: @code { PB_PlayZoomUserSetting(0, 0, 160, 120); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern INT32 PB_PlayZoomUserSetting(UINT32 LeftUp_X, UINT32 LeftUp_Y, UINT32 RightDown_X, UINT32 RightDown_Y); /** Display spec file in video1/video2 and spec size. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] pPlayFileObj Pointer of the command object for display specific file: #_PLAY_SPECFILE_OBJ. @return void. */ extern void PB_PlaySpecFile(PPLAY_SPECFILE_OBJ pPlayFileObj); /** Capture screen to specific image size. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in,out] pPBLogoInfo Pointer to the configuration object for capturing screen: #_PB_LOGO_INFO. @return void. Example: @code { PB_LOGO_INFO LogoInfo = {0}; LogoInfo.uiDstWidth = 640; LogoInfo.uiDstHeight = 480; LogoInfo.uiFileSize = 38400; PB_CaptureScreen(&LogoInfo); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern void PB_CaptureScreen(PPB_LOGO_INFO pPBLogoInfo); /** Do opening specific file. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] PlayDirId The DCF directory ID. @param[in] PlayFileId The DCF file ID. @return void. Example: @code { PB_OpenSpecFile(100, 33); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern void PB_OpenSpecFile(UINT32 PlayDirId, UINT32 PlayFileId); /** Do opening specific file by sequence ID. @note This API is an Async Function (Means: need to call #PB_WaitCommandFinish() to wait for the operation to finish). @param[in] uiSeqID The file sequence ID. @param[in] bOnlyQuery Only query file but doesn't read all file data. @return void. Example: @code { PB_OpenSpecFileBySeq(3, FALSE); PB_WaitCommandFinish(PB_WAIT_INFINITE); } @endcode */ extern void PB_OpenSpecFileBySeq(UINT32 uiSeqID, BOOL bOnlyQuery); /** Using this API to check if a drawable file (JPEG, MJPEG, etc) can be displayed successfully without actually displaying it. @param[in] FileType The type of the file to be loaded: #_PB_FILE_TYPE. @return - @b PBERR_OK: Success. - @b PBERR_FAIL: Fail. Example: @code { PB_ERR LoadRslt; PB_OpenSpecFileBySeq(1, FALSE); PB_WaitCommandFinish(PB_WAIT_INFINITE); LoadRslt = PB_QuasiLoadFile(PB_FILE_JPEG); } @endcode */ extern PB_ERR PB_QuasiLoadFile(PB_FILE_TYPE FileType); //-----------------------------[ setting ]------------------------------------- /** Set BRC (Bit Rate Control) parameters for re-encoding PRIMARY image in Playback mode. @param[in] uiCompressRatio Target bitstream compressed ratio. @param[in] uiUpBoundRatio Upper bound ratio of target size. @param[in] uiLowBoundRatio Lower bound ratio of target size. @param[in] uiLimitCnt The maximum times to re-encode. @return void. */ extern void PB_SetExpectJPEGSize(UINT32 uiCompressRatio, UINT32 uiUpBoundRatio, UINT32 uiLowBoundRatio, UINT32 uiLimitCnt); /** Set video output window (draw image in this specific area). @param[in] DispIdx Display index: #_PB_DISP_IDX. @param[in] pRect Pointer to the rectangle of video window @return void */ extern void PB_ConfigVdoWIN(PB_DISP_IDX DispIdx, PURECT pRect); /** Update the first video frame object. @param[in] DispIdx Display index: #_PB_DISP_IDX. @param[in] pRect Pointer to the rectangle of the display position for 1st video clip frame @return void. */ extern void PB_Set1stVideoFrame(PB_DISP_IDX DispIdx, PURECT pRect); //-----------------------------[ others ]------------------------------------- /** Control the operation result to show on display immediately or not. @note This API is only valid for one PB operation. @param[in] CtrlType Playback screen control type: #PB_SCREEN_CTRL_TYPE. @return void. Example: @code { PB_ScreenControl(PB_LOCK_SCREEN); PB_PlayZoomMode(PLAYZOOM_IN); PB_WaitCommandFinish(PB_WAIT_INFINITE); // Update OSD here.. PB_ScreenControl(PB_FLUSH_SCREEN); } @endcode */ extern void PB_ScreenControl(PB_SCREEN_CTRL_TYPE CtrlType); //-----------------------------[ system ]------------------------------------- /** Enter Sleep mode @return void */ extern void PB_Sleep(void); /** Leave Sleep mode @return void */ extern void PB_Wakeup(void); /** Pause DMA @return void */ extern void PB_PauseDMA(void); /** Resume DMA @return void */ extern void PB_ResumeDMA(void); /** Pause Display @param[in] bWaitFinish If wait until operations completed. @return void */ extern void PB_PauseDisp(BOOL bWaitFinish); /** Resume Display @param[in] bWaitFinish If wait until operations completed. @return void */ extern void PB_ResumeDisp(BOOL bWaitFinish); /** Change display size for TV/LCD. @param[in] uiDisp_w The width of the display target. @param[in] uiDisp_h The height of the display target. @return void */ extern void PB_ChangeDisplaySize(UINT32 uiDisp_w, UINT32 uiDisp_h); #if 0 extern BOOL PB_DispSrv_OnLock(UINT32 *puiLocked, VDO_FRAME *pImg); #else extern BOOL PB_LockThumb(UINT32 uiIdx); #endif extern BOOL PB_UnlockThumb(UINT32 uiIdx); extern void PB_SetPBFlag(PB_SET_FLG flag); extern INT32 PB_GetImageRatioTrans(UINT32 ImageWidth, UINT32 ImageHeight, UINT32 DisplayWidth, UINT32 DisplayHeight); extern void PB_CoordSysConvert(PCOORDSYS_CONV pCSConv); extern void PB_SeekCurrent(void); //*****[ Will REMOVE the following code when FileList merged with FileDB ]****** // // [Sort by date] // #define PLAY_FILE_ALL 0 #define PLAY_FILE_BY_DAY 1 #define PLAY_FILE_BY_MONTH 2 #define PLAY_FILE_BY_YEAR 3 #define PB_GET_DAY_FROM_DATE(x) (x & 0x1F) #define PB_GET_MONTH_FROM_DATE(x) ((x >> 5) & 0x0F) #define PB_GET_YEAR_FROM_DATE(x) (((x >> 9) & 0x7F)+1980) typedef enum { PLAYDATE_INDEX_TO_1ST, PLAYDATE_INDEX_TO_CURR, PLAYDATE_INDEX_TO_LAST, PLAYDATE_INDEX_MAX } PLAYDATE_INDEX; extern void PB_PlayDeletByDate(UINT32 Year, UINT32 Month, UINT32 Day); extern UINT32 PB_SetBuffForFileDB(UINT32 u32MemAddr, UINT32 u32MaxFileNum); extern INT32 PB_PlayByDateInit(void); extern void PB_PlayByDateUnInit(void); extern UINT16 PB_GetTotalPlayDay(void); extern UINT16 PB_GetFirstPlayDay(void); extern UINT16 PB_GetLastPlayDay(void); extern UINT16 PB_GetNextPlayDay(void); extern UINT16 PB_GetPrevPlayDay(void); extern UINT16 PB_GetCurrPlayDay(void); extern UINT16 PB_GetCurrPlayDaySeq(void); extern UINT16 PB_GetCurrPlayYearSeq(void); extern UINT16 PB_GetCurrPlayDaySeqInThisYear(void); extern UINT16 PB_GetPlayDaysNuminYear(UINT16 SpecYear); extern UINT16 PB_GetTotalPlayMonth(void); extern UINT16 PB_GetFirstPlayMonth(void); extern UINT16 PB_GetNextPlayMonth(void); extern UINT16 PB_GetPrevPlayMonth(void); extern UINT16 PB_GetTotalPlayYear(void); extern UINT16 PB_GetFirstPlayYear(void); extern UINT16 PB_GetNextPlayYear(void); extern UINT16 PB_GetPrevPlayYear(void); extern UINT16 PB_GetTotalFilesNumOfSpecDate(void); extern void PB_SetPlayDate(UINT32 DateType, UINT16 Date, PLAYDATE_INDEX CurrIdxTo); extern void PB_SetPlayDateToPrev(void); extern void PB_SetPlayDateToNext(void); //*********[ Will REMOVE above code when FileList merged with FileDB ]********** //@} #endif