13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------ 23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo 33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License. 63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at 73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * http://www.apache.org/licenses/LICENSE-2.0 93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software 113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied. 143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions 153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License. 163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * ------------------------------------------------------------------- 173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */ 183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef _MP4DEC_API_H_ 193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define _MP4DEC_API_H_ 203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "m4vh263_decoder_pv_types.h" 223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 235c36fc8701eb7468c268c47dae5dba58dbd8e83eAndreas Huber// #define PV_TOLERATE_VOL_ERRORS 243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MEMORY_POOL 253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef _PV_TYPES_ 273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define _PV_TYPES_ 283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef uint Bool; 303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_CODEC_INIT 0 323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_CODEC_STOP 1 333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_TRUE 1 363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_FALSE 0 373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* flag for post-processing 4/25/00 */ 393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef DEC_NOPOSTPROC 413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#undef PV_POSTPROC_ON /* enable compilation of post-processing code */ 423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#else 433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_POSTPROC_ON 443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_NO_POST_PROC 0 473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_DEBLOCK 1 483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_DERING 2 493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "visual_header.h" // struct VolInfo is defined 533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/**@name Structure and Data Types 563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * These type definitions specify the input / output from the PVMessage 573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * library. 583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */ 593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*@{*/ 613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* The application has to allocate space for this structure */ 623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagOutputFrame 633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *data; /* pointer to output YUV buffer */ 653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 timeStamp; /* time stamp */ 663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} OutputFrame; 673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagApplicationData 693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int layer; /* current video layer */ 713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong void *object; /* some optional data field */ 723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} applicationData; 733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* Application controls, this structed shall be allocated */ 753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* and initialized in the application. */ 763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagvideoDecControls 773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* The following fucntion pointer is copied to BitstreamDecVideo structure */ 793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* upon initialization and never used again. */ 803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int (*readBitstreamData)(uint8 *buf, int nbytes_required, void *appData); 813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong applicationData appData; 823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *outputFrame; 843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong void *videoDecoderData; /* this is an internal pointer that is only used */ 853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* in the decoder library. */ 863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_MEMORY_POOL 873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 size; 883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nLayers; 903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* pointers to VOL data for frame-based decoding. */ 913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *volbuf[2]; /* maximum of 2 layers for now */ 923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 volbuf_size[2]; 933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VideoDecControls; 953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef enum 973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong H263_MODE = 0, MPEG4_MODE, UNKNOWN_MODE 993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} MP4DecodingMode; 1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef enum 1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong MP4_I_FRAME, MP4_P_FRAME, MP4_B_FRAME, MP4_BAD_FRAME 1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} MP4FrameType; 1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVopHeaderInfo 1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int currLayer; 1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 timestamp; 1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong MP4FrameType frameType; 1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int refSelCode; 1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 quantizer; 1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VopHeaderInfo; 1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*--------------------------------------------------------------------------* 1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * VideoRefCopyInfo: 1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * OMAP DSP specific typedef structure, to support the user (ARM) copying 1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * of a Reference Frame into the Video Decoder. 1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *--------------------------------------------------------------------------*/ 1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVideoRefCopyInfoPtr 1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *yChan; /* The Y component frame the user can copy a new reference to */ 1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *uChan; /* The U component frame the user can copy a new reference to */ 1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *vChan; /* The V component frame the user can copy a new reference to */ 1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *currentVop; /* The Vop for video the user can copy a new reference to */ 1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VideoRefCopyInfoPtr; 1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVideoRefCopyInfoData 1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 width; /* Width */ 1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 height; /* Height */ 1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 realWidth; /* Non-padded width, not a multiple of 16. */ 1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 realHeight; /* Non-padded height, not a multiple of 16. */ 1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VideoRefCopyInfoData; 1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVideoRefCopyInfo 1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong VideoRefCopyInfoData data; 1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong VideoRefCopyInfoPtr ptrs; 1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VideoRefCopyInfo; 1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*@}*/ 1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus 1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongextern "C" 1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF Bool PVInitVideoDecoder(VideoDecControls *decCtrl, uint8 *volbuf[], int32 *volbuf_size, int nLayers, int width, int height, MP4DecodingMode mode); 1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVAllocVideoData(VideoDecControls *decCtrl, int width, int height, int nLayers); 1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF Bool PVCleanUpVideoDecoder(VideoDecControls *decCtrl); 1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVResetVideoDecoder(VideoDecControls *decCtrl); 1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF void PVSetReferenceYUV(VideoDecControls *decCtrl, uint8 *refYUV); 1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp); 1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp); 1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF Bool PVDecodeVideoFrame(VideoDecControls *decCtrl, uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint use_ext_timestamp[], uint8* currYUV); 1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVDecodeVopHeader(VideoDecControls *decCtrl, uint8 *buffer[], uint32 timestamp[], int32 buffer_size[], VopHeaderInfo *header_info, uint use_ext_timestamp[], uint8 *currYUV); 1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVDecodeVopBody(VideoDecControls *decCtrl, int32 buffer_size[]); 1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong void PVDecPostProcess(VideoDecControls *decCtrl, uint8 *outputYUV); 1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF void PVGetVideoDimensions(VideoDecControls *decCtrl, int32 *display_width, int32 *display_height); 162b9ff4b4f631239a6a37fe6588e025cb387150c0eAndreas Huber OSCL_IMPORT_REF void PVGetBufferDimensions(VideoDecControls *decCtrl, int32 *buf_width, int32 *buf_height); 1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF void PVSetPostProcType(VideoDecControls *decCtrl, int mode); 1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 PVGetVideoTimeStamp(VideoDecControls *decoderControl); 1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int PVGetDecBitrate(VideoDecControls *decCtrl); 1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int PVGetDecFramerate(VideoDecControls *decCtrl); 1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *PVGetDecOutputFrame(VideoDecControls *decCtrl); 1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int PVGetLayerID(VideoDecControls *decCtrl); 1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 PVGetDecMemoryUsage(VideoDecControls *decCtrl); 1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong OSCL_IMPORT_REF MP4DecodingMode PVGetDecBitstreamMode(VideoDecControls *decCtrl); 1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size); 1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 PVLocateFrameHeader(uint8 *video_buffer, int32 vop_size); 1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 PVLocateH263FrameHeader(uint8 *video_buffer, int32 vop_size); 1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool PVGetVolInfo(VideoDecControls *decCtrl, VolInfo *pVolInfo); // BX 6/24/04 1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Bool IsIntraFrame(VideoDecControls *decoderControl); 1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus 1783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} 1793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 1803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif /* _MP4DEC_API_H_ */ 1813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 182