diff -r 000000000000 -r 951a5db380a0 videoeditorengine/h263decoder/inc/core.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/h263decoder/inc/core.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - Initial contribution +* +* Contributors: +* Ixonos Plc +* +* Description: +* Internal header for the core module of the Video Decoder Core. +* +*/ + + +#ifndef _CORE_H_ +#define _CORE_H_ + +#include "vdcmvc.h" +#include "vdcaic.h" +#include "vdeims.h" +#include "viddemux.h" + +#include "biblin.h" + + +/* + * Defines + */ + +#define vdcMalloc malloc +#define vdcCalloc calloc +#define vdcRealloc realloc +#define vdcDealloc free + +#ifndef vdcAssert +#define vdcAssert(exp) assert(exp); +#endif + + +/* + * Structs and typedefs + */ + +/* {{-output"vdcPictureParam_t_info.txt" -ignore"*" -noCR}} + vdcPictureParam_t is used to store the attributes for one picture. + {{-output"vdcPictureParam_t_info.txt"}} */ + +/* {{-output"vdcPictureParam_t.txt"}} */ +typedef struct { + int tr; /* the TR field or a combination of ETR and TR + if ETR is used */ + + int trd; /* Difference between present and previous tr */ + + int prevTR; /* TR of the previous frame */ + + /* The following three fields correspond to the flags in the PTYPE field */ + int fSplitScreenIndicator; + int fDocumentCameraIndicator; + int fFullPictureFreezeRelease; + + int pictureType; /* Picture type is one of the following: + VDX_PIC_TYPE_I INTRA + VDX_PIC_TYPE_P INTER + VDX_PIC_TYPE_PB PB (Annex G) + VDX_PIC_TYPE_IPB Improved PB + VDX_PIC_TYPE_B B (Annex O) + VDX_PIC_TYPE_EI EI (Annex O) + VDX_PIC_TYPE_EP EP (Annex O) */ + + int fPLUSPTYPE; /* 0 = no PLUSPTYPE, 1 = PLUSPTYPE exists */ + + int cpm; /* The CPM field */ + int psbi; /* The PSBI field, valid only if cpm == 1 */ + + /* The following two fields are relevant if picture type indicates + a PB frame */ + int trb; /* The TRB field */ + int dbquant; /* The DBQUANT field */ + + int lumWidth; /* the width and height of the luminance */ + int lumHeight; /* image to display (divisible with 4) */ + + int lumMemWidth; /* the width and height of the luminance */ + int lumMemHeight; /* image in memory (divisible with 16) */ + + /* The following six fields are relevant only if fSS is off */ + int numGOBs; /* Number of GOBs in picture */ + int fLastGOBSizeDifferent; /* Flag indicating different size of last GOB */ + int numMBsInGOB; /* Number of macroblocks in other GOBs than + the last one */ + int numMBsInLastGOB; /* Number of macroblocks in last GOB */ + int numMBLinesInGOB; /* Number of macroblock lines in one GOB */ + int numMBsInMBLine; /* Number of macroblocks in macroblock line */ + + /* The following six fields are relevant only if fSS is on */ + int mbaFieldWidth; /* MBA Field width */ + int mbaMaxValue; /* MBA maximum value. See Table K.2/H.263 */ + int swiFieldWidth; /* SWI Field width */ + int swiMaxValue; /* SWI maximum value. See Table K.3/H.263 */ + + int fUMV; /* Unrestricted Motion Vector Mode */ + int fSAC; /* Syntax-based Arithmetic Coding Mode */ + int fAP; /* Advanced Prediction Mode */ + + int fRPR; /* Reference Picture Resampling Mode */ + int fRRU; /* Reduced-Resolution Update Mode */ + int rtype; /* Rounding type (RTYPE) */ + + int elnum; /* Enhancement layer number */ + + int fCustomSourceFormat; /* Flag indicating if custom source format + is used */ + + int fAIC; /* Advanced INTRA Coding Mode */ + int fDF; /* Deblocking Filter Mode */ + int fSS; /* Slice Structured Mode */ + int fRPS; /* Reference Picture Selection Mode, + Note: always valid and therefore should be + the same as instance->fRPS after decoding + the first picture header. */ + int fISD; /* Independent Segment Decoding Mode */ + int fAIV; /* Alternate INTER VLC Mode */ + int fMQ; /* Modified Quantization Mode */ + + /* Picture Clock Frequence (PCF) fields */ + int fCustomPCF; /* 0 = CIF PCF, 1 = custom PCF */ + int pcfRate; /* PCF = pcfRate / pcfScale Hz */ + int pcfScale; + + /* The following field is relevant only if fUMV is on with fPLUSPTYPE */ + int fUMVLimited; /* 0 = motion vector range is not limited, + 1 = motion vector range is limited + according to Annex D */ + + int fMVsOverPictureBoundaries; + /* 0 = prediction over picture boundaries is + disallowed, + 1 = prediction over picture boundaries is + allowed */ + + /* The MPEG-4 Video Object Layer (VOL) parameters */ +/*** MPEG-4 REVISION ***/ + + int vo_id; /* VO Id */ + int vol_id; /* VO Id */ + + u_char error_res_disable; /* VOL disable error resilence mode */ + u_char reversible_vlc; /* VOL reversible VLCs */ + u_char data_partitioned; /* VOL data partitioning */ + + int time_increment_resolution; /* resolution of the time increment + in the VOP header */ + + /* The in H.263 not existing MPEG-4 Video Object Plane (VOP) parameters */ + + int mod_time_base; /* VOP modulo time base (absolute) */ + int time_base_incr; /* time base increment of the current VOP + (used in HEC of Video Packet Header, + when time_base_incr of the VOP is + retransmitted */ + int time_inc; /* VOP time increment + (relative to last mod_time_base) */ + int intra_dc_vlc_thr; + int fcode_forward; + u_char fixed_vop_rate; /* fixed vop rate indication, added for transcoding */ +/*** End MPEG-4 REVISION ***/ + +} vdcPictureParam_t; +/* {{-output"vdcPictureParam_t.txt"}} */ + + +/* {{-output"vdcInstance_t_info.txt" -ignore"*" -noCR}} + vdcInstance_t holds the instance data for a Video Decoder Core instance. + This structure is used to keep track of the internal state of + a VDC instance. + {{-output"vdcInstance_t_info.txt"}} */ + +/* {{-output"vdcInstance_t.txt"}} */ +typedef struct { + vdeImsItem_t *currFrame; /* Current P/I frame (image store item) */ + vdeImsItem_t *bFrame; /* Current B frame (of PB, image store item) */ + /* NULL pointer indicates that the frames are + not valid. */ + + vdcPictureParam_t pictureParam; + /* Picture parameters for the current picture */ + + int32 frameNum; /* Frame number */ + int32 frameNumForBFrame; /* Frame number for B frame */ + + int gfid; /* GOB Frame ID */ + vdxPictureHeader_t *prevPicHeader; /* Header of the previous picture */ + int fPrevPicHeaderReliable; /* if header is not 100% reliable, it is better not to compare it with the next header */ + + mvcData_t mvcData; /* Storage for motion vector data */ + +/*** MPEG-4 REVISION ***/ + + aicData_t aicData; /* Storage AC/DC reconstruction*/ + + char *user_data; /* User Data */ + int user_data_length; + +/*** End MPEG-4 REVISION ***/ + + u_int32 nOfDecodedFrames; /* Counter for (partially) successfully decoded frames */ + u_char fIntraGot; /* non-zero = INTRA frame has been decoded */ + u_char fEOS; /* 1 if EOS has been reached, 0 otherwise */ + + int fRPS; /* Reference Picture Selection in use? + At first, set to zero in vdcOpen. + Then, modified according to the bitstream. */ + + int rpsMode; /* both/either/neither ACK and/or/nor NACK, + VDX_RPS_MODE_XXX */ + + int fIgnoreRPSBufferUpdate;/* 0 = segment buffering in FIFO mode as normally + 1 = decoded pictures are not put into + reference segment buffers */ + + int numAnnexNScalabilityLayers; + /* -1 = no frames decoded yet, + 0 = Nokia-proprietary Annex N scalability + layers not in use, + 2.. = number of scalability layers */ + + int fGFIDShouldChange; /* 1, if GFID should change, 0 otherwise */ + + vdeIms_t *imageStore; /* Pointer to image store */ + + void *hParent; /* typeless handle to vdeInstance_t */ + + u_int32 snapshotStartCallback; /* function pointer to a function informing w + the beginning of a snapshot */ + + u_int32 snapshotEndCallback; /* function pointer to a function informing + the end of a snapshot */ + + int snapshotStatus; /* snapshot transmission status */ + + u_int32 reportPictureSizeCallback; /* callback function for informing + frame size */ + +} vdcInstance_t; +/* {{-output"vdcInstance_t.txt"}} */ + + +/* + * Function prototypes + */ + +VDC_INLINE int VDC_MIN(int a, int b) {return a < b ? a : b;} +VDC_INLINE int VDC_MAX(int a, int b) {return a > b ? a : b;} + + +#endif + +// End of file