| /* ------------------------------------------------------------------ |
| * Copyright (C) 1998-2009 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| #ifndef _MP4DEC_API_H_ |
| #define _MP4DEC_API_H_ |
| |
| #include "m4vh263_decoder_pv_types.h" |
| |
| // #define PV_TOLERATE_VOL_ERRORS |
| #define PV_MEMORY_POOL |
| |
| #ifndef _PV_TYPES_ |
| #define _PV_TYPES_ |
| |
| typedef uint Bool; |
| |
| #define PV_CODEC_INIT 0 |
| #define PV_CODEC_STOP 1 |
| #endif |
| |
| #define PV_TRUE 1 |
| #define PV_FALSE 0 |
| |
| /* flag for post-processing 4/25/00 */ |
| |
| #ifdef DEC_NOPOSTPROC |
| #undef PV_POSTPROC_ON /* enable compilation of post-processing code */ |
| #else |
| #define PV_POSTPROC_ON |
| #endif |
| |
| #define PV_NO_POST_PROC 0 |
| #define PV_DEBLOCK 1 |
| #define PV_DERING 2 |
| |
| |
| |
| #include "visual_header.h" // struct VolInfo is defined |
| |
| |
| /**@name Structure and Data Types |
| * These type definitions specify the input / output from the PVMessage |
| * library. |
| */ |
| |
| /*@{*/ |
| /* The application has to allocate space for this structure */ |
| typedef struct tagOutputFrame |
| { |
| uint8 *data; /* pointer to output YUV buffer */ |
| uint32 timeStamp; /* time stamp */ |
| } OutputFrame; |
| |
| typedef struct tagApplicationData |
| { |
| int layer; /* current video layer */ |
| void *object; /* some optional data field */ |
| } applicationData; |
| |
| /* Application controls, this structed shall be allocated */ |
| /* and initialized in the application. */ |
| typedef struct tagvideoDecControls |
| { |
| /* The following fucntion pointer is copied to BitstreamDecVideo structure */ |
| /* upon initialization and never used again. */ |
| int (*readBitstreamData)(uint8 *buf, int nbytes_required, void *appData); |
| applicationData appData; |
| |
| uint8 *outputFrame; |
| void *videoDecoderData; /* this is an internal pointer that is only used */ |
| /* in the decoder library. */ |
| #ifdef PV_MEMORY_POOL |
| int32 size; |
| #endif |
| int nLayers; |
| /* pointers to VOL data for frame-based decoding. */ |
| uint8 *volbuf[2]; /* maximum of 2 layers for now */ |
| int32 volbuf_size[2]; |
| |
| } VideoDecControls; |
| |
| typedef enum |
| { |
| H263_MODE = 0, MPEG4_MODE, UNKNOWN_MODE |
| } MP4DecodingMode; |
| |
| typedef enum |
| { |
| MP4_I_FRAME, MP4_P_FRAME, MP4_B_FRAME, MP4_BAD_FRAME |
| } MP4FrameType; |
| |
| typedef struct tagVopHeaderInfo |
| { |
| int currLayer; |
| uint32 timestamp; |
| MP4FrameType frameType; |
| int refSelCode; |
| int16 quantizer; |
| } VopHeaderInfo; |
| |
| /*--------------------------------------------------------------------------* |
| * VideoRefCopyInfo: |
| * OMAP DSP specific typedef structure, to support the user (ARM) copying |
| * of a Reference Frame into the Video Decoder. |
| *--------------------------------------------------------------------------*/ |
| typedef struct tagVideoRefCopyInfoPtr |
| { |
| uint8 *yChan; /* The Y component frame the user can copy a new reference to */ |
| uint8 *uChan; /* The U component frame the user can copy a new reference to */ |
| uint8 *vChan; /* The V component frame the user can copy a new reference to */ |
| uint8 *currentVop; /* The Vop for video the user can copy a new reference to */ |
| } VideoRefCopyInfoPtr; |
| |
| typedef struct tagVideoRefCopyInfoData |
| { |
| int16 width; /* Width */ |
| int16 height; /* Height */ |
| int16 realWidth; /* Non-padded width, not a multiple of 16. */ |
| int16 realHeight; /* Non-padded height, not a multiple of 16. */ |
| } VideoRefCopyInfoData; |
| |
| typedef struct tagVideoRefCopyInfo |
| { |
| VideoRefCopyInfoData data; |
| VideoRefCopyInfoPtr ptrs; |
| } VideoRefCopyInfo; |
| |
| /*@}*/ |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| |
| OSCL_IMPORT_REF Bool PVInitVideoDecoder(VideoDecControls *decCtrl, uint8 *volbuf[], int32 *volbuf_size, int nLayers, int width, int height, MP4DecodingMode mode); |
| Bool PVAllocVideoData(VideoDecControls *decCtrl, int width, int height, int nLayers); |
| OSCL_IMPORT_REF Bool PVCleanUpVideoDecoder(VideoDecControls *decCtrl); |
| Bool PVResetVideoDecoder(VideoDecControls *decCtrl); |
| OSCL_IMPORT_REF void PVSetReferenceYUV(VideoDecControls *decCtrl, uint8 *refYUV); |
| Bool PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp); |
| Bool PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp); |
| OSCL_IMPORT_REF Bool PVDecodeVideoFrame(VideoDecControls *decCtrl, uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint use_ext_timestamp[], uint8* currYUV); |
| Bool PVDecodeVopHeader(VideoDecControls *decCtrl, uint8 *buffer[], uint32 timestamp[], int32 buffer_size[], VopHeaderInfo *header_info, uint use_ext_timestamp[], uint8 *currYUV); |
| Bool PVDecodeVopBody(VideoDecControls *decCtrl, int32 buffer_size[]); |
| void PVDecPostProcess(VideoDecControls *decCtrl, uint8 *outputYUV); |
| OSCL_IMPORT_REF void PVGetVideoDimensions(VideoDecControls *decCtrl, int32 *display_width, int32 *display_height); |
| OSCL_IMPORT_REF void PVGetBufferDimensions(VideoDecControls *decCtrl, int32 *buf_width, int32 *buf_height); |
| OSCL_IMPORT_REF void PVSetPostProcType(VideoDecControls *decCtrl, int mode); |
| uint32 PVGetVideoTimeStamp(VideoDecControls *decoderControl); |
| int PVGetDecBitrate(VideoDecControls *decCtrl); |
| int PVGetDecFramerate(VideoDecControls *decCtrl); |
| uint8 *PVGetDecOutputFrame(VideoDecControls *decCtrl); |
| int PVGetLayerID(VideoDecControls *decCtrl); |
| int32 PVGetDecMemoryUsage(VideoDecControls *decCtrl); |
| OSCL_IMPORT_REF MP4DecodingMode PVGetDecBitstreamMode(VideoDecControls *decCtrl); |
| Bool PVExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size); |
| int32 PVLocateFrameHeader(uint8 *video_buffer, int32 vop_size); |
| int32 PVLocateH263FrameHeader(uint8 *video_buffer, int32 vop_size); |
| Bool PVGetVolInfo(VideoDecControls *decCtrl, VolInfo *pVolInfo); // BX 6/24/04 |
| Bool IsIntraFrame(VideoDecControls *decoderControl); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif /* _MP4DEC_API_H_ */ |
| |