Home | History | Annotate | Download | only in include
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 #ifndef _MP4DEC_API_H_
     19 #define _MP4DEC_API_H_
     20 
     21 #include "m4vh263_decoder_pv_types.h"
     22 
     23 // #define PV_TOLERATE_VOL_ERRORS
     24 #define PV_MEMORY_POOL
     25 
     26 #ifndef _PV_TYPES_
     27 #define _PV_TYPES_
     28 
     29 typedef uint Bool;
     30 
     31 #define PV_CODEC_INIT  0
     32 #define PV_CODEC_STOP  1
     33 #endif
     34 
     35 #define PV_TRUE  1
     36 #define PV_FALSE 0
     37 
     38 /* flag for post-processing  4/25/00 */
     39 
     40 #ifdef DEC_NOPOSTPROC
     41 #undef PV_POSTPROC_ON   /* enable compilation of post-processing code */
     42 #else
     43 #define PV_POSTPROC_ON
     44 #endif
     45 
     46 #define PV_NO_POST_PROC 0
     47 #define PV_DEBLOCK 1
     48 #define PV_DERING  2
     49 
     50 
     51 
     52 #include "visual_header.h" // struct VolInfo is defined
     53 
     54 
     55 /**@name Structure and Data Types
     56  * These type definitions specify the input / output from the PVMessage
     57  * library.
     58  */
     59 
     60 /*@{*/
     61 /* The application has to allocate space for this structure */
     62 typedef struct tagOutputFrame
     63 {
     64     uint8       *data;          /* pointer to output YUV buffer */
     65     uint32      timeStamp;      /* time stamp */
     66 } OutputFrame;
     67 
     68 typedef struct tagApplicationData
     69 {
     70     int layer;          /* current video layer */
     71     void *object;       /* some optional data field */
     72 } applicationData;
     73 
     74 /* Application controls, this structed shall be allocated */
     75 /*    and initialized in the application.                 */
     76 typedef struct tagvideoDecControls
     77 {
     78     /* The following fucntion pointer is copied to BitstreamDecVideo structure  */
     79     /*    upon initialization and never used again. */
     80     int (*readBitstreamData)(uint8 *buf, int nbytes_required, void *appData);
     81     applicationData appData;
     82 
     83     uint8 *outputFrame;
     84     void *videoDecoderData;     /* this is an internal pointer that is only used */
     85     /* in the decoder library.   */
     86 #ifdef PV_MEMORY_POOL
     87     int32 size;
     88 #endif
     89     int nLayers;
     90     /* pointers to VOL data for frame-based decoding. */
     91     uint8 *volbuf[2];           /* maximum of 2 layers for now */
     92     int32 volbuf_size[2];
     93 
     94 } VideoDecControls;
     95 
     96 typedef enum
     97 {
     98     H263_MODE = 0, MPEG4_MODE, UNKNOWN_MODE
     99 } MP4DecodingMode;
    100 
    101 typedef enum
    102 {
    103     MP4_I_FRAME, MP4_P_FRAME, MP4_B_FRAME, MP4_BAD_FRAME
    104 } MP4FrameType;
    105 
    106 typedef struct tagVopHeaderInfo
    107 {
    108     int     currLayer;
    109     uint32  timestamp;
    110     MP4FrameType    frameType;
    111     int     refSelCode;
    112     int16       quantizer;
    113 } VopHeaderInfo;
    114 
    115 /*--------------------------------------------------------------------------*
    116  * VideoRefCopyInfo:
    117  * OMAP DSP specific typedef structure, to support the user (ARM) copying
    118  * of a Reference Frame into the Video Decoder.
    119  *--------------------------------------------------------------------------*/
    120 typedef struct tagVideoRefCopyInfoPtr
    121 {
    122     uint8   *yChan;             /* The Y component frame the user can copy a new reference to */
    123     uint8   *uChan;             /* The U component frame the user can copy a new reference to */
    124     uint8   *vChan;             /* The V component frame the user can copy a new reference to */
    125     uint8   *currentVop;        /* The Vop for video the user can copy a new reference to */
    126 } VideoRefCopyInfoPtr;
    127 
    128 typedef struct tagVideoRefCopyInfoData
    129 {
    130     int16   width;              /* Width */
    131     int16   height;             /* Height */
    132     int16   realWidth;          /* Non-padded width, not a multiple of 16. */
    133     int16   realHeight;         /* Non-padded height, not a multiple of 16. */
    134 } VideoRefCopyInfoData;
    135 
    136 typedef struct tagVideoRefCopyInfo
    137 {
    138     VideoRefCopyInfoData data;
    139     VideoRefCopyInfoPtr ptrs;
    140 } VideoRefCopyInfo;
    141 
    142 /*@}*/
    143 
    144 #ifdef __cplusplus
    145 extern "C"
    146 {
    147 #endif
    148 
    149 
    150     OSCL_IMPORT_REF Bool    PVInitVideoDecoder(VideoDecControls *decCtrl, uint8 *volbuf[], int32 *volbuf_size, int nLayers, int width, int height, MP4DecodingMode mode);
    151     Bool    PVAllocVideoData(VideoDecControls *decCtrl, int width, int height, int nLayers);
    152     OSCL_IMPORT_REF Bool    PVCleanUpVideoDecoder(VideoDecControls *decCtrl);
    153     Bool    PVResetVideoDecoder(VideoDecControls *decCtrl);
    154     OSCL_IMPORT_REF void    PVSetReferenceYUV(VideoDecControls *decCtrl, uint8 *refYUV);
    155     Bool    PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp);
    156     Bool    PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp);
    157     OSCL_IMPORT_REF Bool    PVDecodeVideoFrame(VideoDecControls *decCtrl, uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint use_ext_timestamp[], uint8* currYUV);
    158     Bool    PVDecodeVopHeader(VideoDecControls *decCtrl, uint8 *buffer[], uint32 timestamp[], int32 buffer_size[], VopHeaderInfo *header_info, uint use_ext_timestamp[], uint8 *currYUV);
    159     Bool    PVDecodeVopBody(VideoDecControls *decCtrl, int32 buffer_size[]);
    160     void    PVDecPostProcess(VideoDecControls *decCtrl, uint8 *outputYUV);
    161     OSCL_IMPORT_REF void    PVGetVideoDimensions(VideoDecControls *decCtrl, int32 *display_width, int32 *display_height);
    162     OSCL_IMPORT_REF void    PVGetBufferDimensions(VideoDecControls *decCtrl, int32 *buf_width, int32 *buf_height);
    163     OSCL_IMPORT_REF void    PVSetPostProcType(VideoDecControls *decCtrl, int mode);
    164     uint32  PVGetVideoTimeStamp(VideoDecControls *decoderControl);
    165     int     PVGetDecBitrate(VideoDecControls *decCtrl);
    166     int     PVGetDecFramerate(VideoDecControls *decCtrl);
    167     uint8   *PVGetDecOutputFrame(VideoDecControls *decCtrl);
    168     int     PVGetLayerID(VideoDecControls *decCtrl);
    169     int32   PVGetDecMemoryUsage(VideoDecControls *decCtrl);
    170     OSCL_IMPORT_REF MP4DecodingMode PVGetDecBitstreamMode(VideoDecControls *decCtrl);
    171     Bool    PVExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size);
    172     int32   PVLocateFrameHeader(uint8 *video_buffer, int32 vop_size);
    173     int32   PVLocateH263FrameHeader(uint8 *video_buffer, int32 vop_size);
    174     Bool    PVGetVolInfo(VideoDecControls *decCtrl, VolInfo *pVolInfo); // BX 6/24/04
    175     Bool    IsIntraFrame(VideoDecControls *decoderControl);
    176 
    177 #ifdef __cplusplus
    178 }
    179 #endif
    180 #endif /* _MP4DEC_API_H_ */
    181 
    182