?? mp4vdec.c
字號:
#define MP4VDEC_GLOBALS#include "../fmpeg4_driver/fmpeg4.h"#include "portab.h"#include "mp4vdec.h"#include "decoder.h"//#include "utils/mem_transfer.h"#include "mp4.h"#include "bitstream/bitstream.h"#include "local_mem.h"#include "me.h"int32_tMp4VDec_Init(FMP4_DEC_PARAM * ptParam, void ** pptDecHandle){ return decoder_create(ptParam, pptDecHandle);}uint32_tMp4VDec_QueryEmptyBuffer (void * ptDecHandle){ DECODER * dec = (DECODER *)ptDecHandle; return dec->u32BS_buf_sz - dec->u32BS_buf_sz_remain;}uint32_tMp4VDec_QueryFilledBuffer (void * ptDecHandle){ DECODER * dec = (DECODER *)ptDecHandle; return dec->u32BS_buf_sz_remain;}int32_tMp4VDec_FillBuffer(void * ptDecHandle, uint8_t * ptBuf, uint32_t u32BufSize){ DECODER * dec = (DECODER *)ptDecHandle; if (dec->pfnSemWait) dec->pfnSemWait (dec->pvSemaphore); if (u32BufSize > (dec->u32BS_buf_sz - dec->u32BS_buf_sz_remain)) return FARADAY_ERR_FAIL; if ((dec->u32BS_buf_sz_remain) && (dec->pu8BS_start_virt != dec->pu8BS_ptr_virt)) memcpy(dec->pu8BS_start_virt, dec->pu8BS_ptr_virt, dec->u32BS_buf_sz_remain); if (u32BufSize) memcpy(dec->pu8BS_start_virt + dec->u32BS_buf_sz_remain, ptBuf, u32BufSize); dec->pu8BS_ptr_virt = dec->pu8BS_start_virt; dec->pu8BS_ptr_phy = dec->pu8BS_start_phy; dec->u32BS_buf_sz_remain += u32BufSize; if (dec->pfnSemSignal) dec->pfnSemSignal(dec->pvSemaphore); return FARADAY_ERR_OK;}voidMp4VDec_InvalidBS (void * ptDecHandle){ DECODER * dec = (DECODER *)ptDecHandle; if (dec->pfnSemWait) dec->pfnSemWait (dec->pvSemaphore); dec->pu8BS_ptr_virt = dec->pu8BS_start_virt; dec->pu8BS_ptr_phy = dec->pu8BS_start_phy; dec->u32BS_buf_sz_remain = 0; if (dec->pfnSemSignal) dec->pfnSemSignal(dec->pvSemaphore);}voidMp4VDec_EndOfData (void * ptDecHandle){ DECODER * dec = (DECODER *)ptDecHandle; dec->bBS_end_of_data = TRUE;}voidMp4VDec_SetOutputAddr (void * ptDecHandle, uint8_t * pu8output_phy, uint8_t * pu8output_u_phy, uint8_t * pu8output_v_phy){ DECODER * dec = (DECODER *)ptDecHandle; dec->output_base_phy = pu8output_phy;#if (OUTPUT_FMT == OUTPUT_FMT_YUV) dec->output_base_u_phy = pu8output_u_phy; dec->output_base_u_phy = pu8output_v_phy;#endif}int32_tMp4VDec_OneFrame(void * ptDecHandle, FMP4_DEC_RESULT * ptResult){ return decoder_decode(ptDecHandle, ptResult);}voidMp4VDec_Release(void * ptDecHandle){ decoder_destroy(ptDecHandle);}// init decoder (except first run) for every different bitstreamvoidMp4VDec_Reinit(void * ptDecHandle){ DECODER * dec = (DECODER *)ptDecHandle; dec->bBS_end_of_data = FALSE; // for auto setting dec->width = 0; dec->height = 0; dec->output_stride = 0; dec->output_height = 0; dec->data_partitioned=0; dec->h263 = 0; dec->reversible_vlc = 0; dec->interlacing = 0; dec->time_inc_bits = 0; dec->low_delay = 0; dec->frames = -1; dec->time = dec->time_base = dec->last_time_base = 0;}voidMp4VDec_AssignBS_VPE(void * ptDecHandle, uint8_t * ptBuf, uint32_t u32BufSize){ DECODER * dec = (DECODER *)ptDecHandle; dec->pu8BS_ptr_virt = dec->pu8BS_start_virt = dec->pu8BS_ptr_phy = dec->pu8BS_start_virt = ptBuf; dec->u32BS_buf_sz_remain = u32BufSize;}voidMp4VDec_Add_BS_VPE(void * ptDecHandle, uint32_t u32BufSize){ DECODER * dec = (DECODER *)ptDecHandle; dec->u32BS_buf_sz_remain += u32BufSize;}uint8_t *Mp4VDec_Got_BS_ptrv_VPE(void * ptDecHandle){ return (((DECODER *)ptDecHandle)->pu8BS_ptr_virt);}voidMp4VDec_AssignRefBase_VPE(void * ptDecHandle, uint8_t * y_phy, uint8_t * u_phy, uint8_t * v_phy){ DECODER * dec = (DECODER *)ptDecHandle; dec->refn.y_phy = y_phy; dec->refn.u_phy = u_phy; dec->refn.v_phy = v_phy;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -