--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/inc/viddemux.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,1068 @@
+/*
+* 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:
+* Header for the video demultiplexer module.
+*
+*/
+
+
+#ifndef _VIDDEMUX_H_
+#define _VIDDEMUX_H_
+
+#include "epoclib.h"
+
+#include "biblin.h"
+
+#include "dlist.h"
+#include "vdc263.h" /* for vdxPictureHeader_t and vdxSEI_t */
+class CMPEG4Transcoder;
+
+
+/*
+ * Defines
+ */
+
+/* General return values */
+// unify error codes
+#define VDX_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR /* Handled portion of the bistream
+ contains a bit error */
+#define VDX_OK H263D_OK /* Everything ok */
+#define VDX_ERR H263D_ERROR /* Everything ok */
+#define VDX_ERR_NOT_SUPPORTED H263D_ERROR /* Some bit combination (in header)
+ occurs which is not supported by the
+ implementetion */
+#define VDX_ERR_BIB H263D_ERROR /* Bit Buffer module returned an error */
+
+/* Picture types */
+#define VDX_PIC_TYPE_I 0
+#define VDX_PIC_TYPE_P 1
+#define VDX_PIC_TYPE_PB 8
+#define VDX_PIC_TYPE_IPB 2
+#define VDX_PIC_TYPE_B 3
+#define VDX_PIC_TYPE_EI 4
+#define VDX_PIC_TYPE_EP 5
+#define VDX_VOP_TYPE_I 0 /* MPEG-4 Intra Picture */
+#define VDX_VOP_TYPE_P 1 /* MPEG-4 Inter Picture */
+#define VDX_VOP_NOT_CODED -1 /* MPEG-4 Not Coded Picture
+ (only the time_increment is present) */
+
+/* Reference Picture Selection modes */
+#define VDX_RPS_MODE_NO_MSGS 0
+#define VDX_RPS_MODE_ACK 1
+#define VDX_RPS_MODE_NACK 2
+#define VDX_RPS_MODE_BOTH_MSGS 3
+
+/* Macroblock classes */
+#define VDX_MB_INTER 1
+#define VDX_MB_INTRA 2
+
+#define MAX_USER_DATA_LENGTH 512 /* The maximum allocated memory for
+ user data (UD). Only this much of the UD
+ from the bitstream is stored */
+
+/*
+ * Typedefs
+ */
+
+/*
+ * vdxVolHeader_t
+ */
+
+/* {{-output"vdxVolHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetVolHeader function uses this structure to return VOL header data.
+ /MPEG-4/
+ {{-output"vdxVolHeader_t_info.txt"}} */
+
+/* {{-output"vdxVolHeader_t.txt"}} */
+typedef struct {
+
+ int profile_level; /* Indicates the Level (1,2 or 3) of the Simple
+ Profile the Video Object conforms to */
+ int vo_priority; /* Priority assigned to the Video Object
+ a value between 1(lowest)-7(highest).
+ If not in the bitstream, set to zero */
+
+ int vo_id; /* id of the Video Object */
+ int vol_id; /* id of the Video Object Layer */
+ int random_accessible_vol;
+ /* set to 1 if all the VOPs in the stream are
+ I-VOP. */
+ int pixel_aspect_ratio; /* see. MPEG-4 visual spec. pp. 71 */
+
+ int time_increment_resolution;
+ /* Resolution to interpret the time_increment
+ fields in the VOP headers */
+
+ int lumWidth; /* Frame width of the Y component in pixels */
+ int lumHeight; /* Frame height of the Y component in pixels */
+
+ u_char error_res_disable;/* Flag ON if no resynchronization markers are
+ used inside frames.
+ When OFF it doesn't mean they ARE used. */
+ u_char data_partitioned; /* Flag indicating if data partitioning inside
+ a VP is used or not. */
+ u_char reversible_vlc; /* flag indicating the usage of reversible
+ VLC codes */
+
+ /* the following parameters concern the input video signal,
+ see MPEG-4 visual spec. pp. 66-70, and "Note" in viddemux_mpeg.c
+ Not used in the current implementatnion. */
+ int video_format;
+ int video_range;
+ int colour_primaries;
+ int transfer_characteristics;
+ int matrix_coefficients;
+
+ /* the following parameters are used in the Video Buffering Verifier
+ (Annex D) to monitor the input bit buffer, complexity, memory buffer
+ used in the decoding process. The conformance of a stream can be checked
+ using these parameters.
+ Not used in the current implementatnion. */
+ u_int32 bit_rate;
+ u_int32 vbv_buffer_size;
+ u_int32 vbv_occupancy;
+
+ char *user_data; /* User Data if available */
+ int user_data_length; /* Length of the recieved user data */
+ u_char fixed_vop_rate; /* fixed vop rate indication, added for transcoding */
+} vdxVolHeader_t;
+/* {{-output"vdxVolHeader_t.txt"}} */
+
+/*
+ * vdxGovHeader_t
+ */
+
+/* {{-output"vdxGovHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetGovHeader function uses this structure to return GOV header data.
+ /MPEG-4/
+ {{-output"vdxGovHeader_t_info.txt"}} */
+
+/* {{-output"vdxGovHeader_t.txt"}} */
+typedef struct {
+ int time_stamp; /* The time stamp value in the GOV Header */
+
+ u_char closed_gov; /* only important if B-VOPs can be in the stream */
+ u_char broken_link; /* only important if B-VOPs can be in the stream */
+
+ char *user_data; /* User Data if available */
+ int user_data_length; /* Length of the recieved user data */
+} vdxGovHeader_t;
+/* {{-output"vdxGovHeader_t.txt"}} */
+
+
+/*
+ * vdxGetVopHeaderInputParam_t
+ */
+
+/* {{-output"vdxGetVopHeaderInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetVopHeader function. /MPEG-4/
+ {{-output"vdxGetVopHeaderInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetVopHeaderInputParam_t.txt"}} */
+typedef struct {
+
+ int time_increment_resolution; /* resolution of the time increment field */
+
+} vdxGetVopHeaderInputParam_t;
+/* {{-output"vdxGetVopHeaderInputParam_t.txt"}} */
+
+
+/*
+ * vdxVopHeader_t
+ */
+
+/* {{-output"vdxVopHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetVopHeader function uses this structure to return the picture
+ header parameters. /MPEG-4/
+ {{-output"vdxVopHeader_t_info.txt"}} */
+
+/* {{-output"vdxVopHeader_t.txt"}} */
+typedef struct {
+ int time_base_incr; /* Increment of the modulo time base from the
+ previous VOP or GOV header in seconds */
+ int time_inc; /* Time increment value of the current VOP,
+ plus the modulo time base = absolute time */
+
+ u_char vop_coded; /* Flag: 1 - VOP coded;
+ 0 - VOP not coded/skipped */
+ int coding_type; /* VOP coding type is one of the following:
+ VDX_VOP_TYPE_I MPEG-4 INTRA
+ VDX_VOP_TYPE_P MPEG-4 INTER */
+
+ int rounding_type; /* Rounding of the sub-pixel predictor
+ calculations: 0 or 1. */
+
+ int intra_dc_vlc_thr; /* QP dependent switch control of coding the
+ Intra DC coefficient as separate/optimized or
+ as the other Intra AC. (0..7) */
+ int quant; /* Initial Quantizer value */
+
+ int fcode_forward; /* For P-VOPs Motion Vector range control
+ 1: [-16,16] .. 7:[-1024,1024] */
+} vdxVopHeader_t;
+/* {{-output"vdxVopHeader_t.txt"}} */
+
+
+/*
+ * vdxGetVideoPacketHeaderInputParam_t
+ */
+
+/* {{-output"vdxGetVideoPacketHeaderInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetVideoPacketHeader function. /MPEG-4/
+ {{-output"vdxGetVideoPacketHeaderInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetVideoPacketHeaderInputParam_t.txt"}} */
+typedef struct {
+
+ int fcode_forward; /* used for determining the resync_marker
+ length */
+ int time_increment_resolution; /* resolution of the time increment field */
+
+ int numOfMBs; /* Number of MBs in a VOP */
+
+} vdxGetVideoPacketHeaderInputParam_t;
+/* {{-output"vdxGetVideoPacketHeaderInputParam_t.txt"}} */
+
+
+/*
+ * vdxVideoPacketHeader_t
+ */
+
+/* {{-output"vdxVideoPacketHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetVideoPacketHeader function uses this structure to return the
+ Number of the immediately following MB in the VOP and optionally confirm
+ header parameters. /MPEG-4/
+ {{-output"vdxVideoPacketHeader_t_info.txt"}} */
+
+/* {{-output"vdxVideoPacketHeader_t.txt"}} */
+typedef struct {
+
+ int currMBNum; /* Number of the immediately following MB */
+ int quant; /* Quantizer used for the following MB */
+
+ u_char fHEC; /* Flag for header extension code */
+
+ int time_base_incr; /* Increment of the modulo time base from the
+ previous VOP or GOV header in seconds */
+ int time_inc; /* Time increment value of the current VOP,
+ plus the modulo time base = absolute time */
+
+ int coding_type; /* VOP coding type is one of the following:
+ VDX_VOP_TYPE_I MPEG-4 INTRA
+ VDX_VOP_TYPE_P MPEG-4 INTER */
+
+ int intra_dc_vlc_thr; /* QP dependent switch control of coding the
+ Intra DC coefficient as separate/optimized or
+ as the other Intra AC. (0..7) */
+
+ int fcode_forward; /* For P-VOPs Motion Vector range control
+ 1: [-16,16] .. 7:[-1024,1024] */
+} vdxVideoPacketHeader_t;
+/* {{-output"vdxVideoPacketHeader_t.txt"}} */
+
+
+/*
+ * vdxGetPictureHeaderInputParam_t
+ */
+
+/* {{-output"vdxGetPictureHeaderInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetPictureHeader function.
+ {{-output"vdxGetPictureHeaderInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetPictureHeaderInputParam_t.txt"}} */
+typedef struct {
+ int numStuffBits; /* Number of stuffing bits before PSC */
+
+ int fCustomPCF; /* Non-zero if custom picture clock frequency
+ is allowed. Otherwise zero. */
+
+ int fScalabilityMode; /* Non-zero if the Temporal, SNR, and Spatial
+ Scalability mode (Annex O) is in use.
+ Otherwise zero. */
+
+ int fRPS; /* Non-zero if the Refence Picture Selection
+ mode (Annex N) is in use. Otherwise zero. */
+
+ bibFlushBits_t flushBits; /* Pointers for bit buffer functions. */
+ bibGetBits_t getBits; /* Needed to provide a possibly different */
+ bibShowBits_t showBits; /* input mechanism for normal reading from
+ incoming bit-stream and for parsing
+ a picture header copy */
+} vdxGetPictureHeaderInputParam_t;
+/* {{-output"vdxGetPictureHeaderInputParam_t.txt"}} */
+
+
+/*
+ * vdxPictureHeader_t
+ * Defined in vdc263.h because Video Decoder Core exports the data structure.
+ */
+
+
+/*
+ * vdxSEI_t
+ * Defined in vdc263.h because Video Decoder Core exports the data structure.
+ */
+
+
+/*
+ * vdxGetGOBHeaderInputParam_t
+ */
+
+/* {{-output"vdxGetGOBHeaderInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetGOBHeader function.
+ {{-output"vdxGetGOBHeaderInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetGOBHeaderInputParam_t.txt"}} */
+typedef struct {
+ int numStuffBits; /* Number of stuffing bits before PSC */
+
+ int fCustomPCF; /* Non-zero if custom picture clock frequency
+ is allowed. Otherwise zero. */
+
+ int fCPM; /* Non-zero if the Continuous Presence
+ Multipoint feature (Annex C) is in use.
+ Otherwise zero. */
+
+ int fRPS; /* Non-zero if the Refence Picture Selection
+ mode (Annex N) is in use. Otherwise zero. */
+} vdxGetGOBHeaderInputParam_t;
+/* {{-output"vdxGetGOBHeaderInputParam_t.txt"}} */
+
+
+/*
+ * vdxGOBHeader_t
+ */
+
+/* {{-output"vdxGOBHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetGOBHeader function uses this structure to return the GOB
+ header parameters.
+ {{-output"vdxGOBHeader_t_info.txt"}} */
+
+/* {{-output"vdxGOBHeader_t.txt"}} */
+typedef struct {
+ int gn; /* Group Number (GN) field */
+
+ int gfid; /* GOB Frame ID (GFID) field */
+
+ int gquant; /* Quantizer Information (GQUANT) field */
+
+ /* If CPM (Annex C) is in use */
+ int gsbi; /* GOB Sub-Bitstream Indicator (GSBI) field */
+
+ /* If the Reference Picture Selection mode is in use */
+ int tri; /* Temporal Reference Indicator (TRI) field */
+ int trpi; /* Temporal Reference for Prediction
+ Indicator (TRPI) field */
+
+ /* If tri == 1 */
+ int tr; /* Temporal Reference (TR) field */
+
+ /* If trpi == 1 */
+ int trp; /* Temporal Reference for Prediction (TRP)
+ field */
+} vdxGOBHeader_t;
+/* {{-output"vdxGOBHeader_t.txt"}} */
+
+
+/*
+ * vdxGetSliceHeaderInputParam_t
+ */
+
+/* {{-output"vdxGetSliceHeaderInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetSliceHeader function.
+ {{-output"vdxGetSliceHeaderInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetSliceHeaderInputParam_t.txt"}} */
+typedef struct {
+ int sliceHeaderAfterPSC; /* If the slice follows a PSC, the value
+ should be 1 */
+
+ int numStuffBits; /* Number of stuffing bits before SSC */
+
+ int fCPM; /* Non-zero if the Continuous Presence
+ Multipoint feature (Annex C) is in use.
+ Otherwise zero. */
+
+ int fRPS; /* Non-zero if the Refence Picture Selection
+ mode (Annex N) is in use. Otherwise zero. */
+
+ int mbaFieldWidth; /* MBA Field width */
+ int mbaMaxValue; /* MBA maximum value. See Table K.2/H.263 */
+
+ int fRectangularSlices; /* 0 = free-running slices,
+ 1 = rectangular slices */
+
+ int swiFieldWidth; /* SWI Field width */
+ int swiMaxValue; /* SWI maximum value. See Table K.3/H.263 */
+} vdxGetSliceHeaderInputParam_t;
+/* {{-output"vdxGetSliceHeaderInputParam_t.txt"}} */
+
+/*
+ * vdxSliceHeader_t
+ */
+
+/* {{-output"vdxSliceHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetSliceHeader function uses this structure to return the Slice
+ header parameters.
+ {{-output"vdxSliceHeader_t_info.txt"}} */
+
+/* {{-output"vdxSliceHeader_t.txt"}} */
+typedef struct {
+ /* If CPM (Annex C) is in use */
+ int ssbi; /* Slice Sub-Bitstream Indicator (SSBI) */
+
+ int gn; /* Group Number (GN) field */
+
+ int sbn; /* Sub-Bitstream number */
+
+ int mba; /* Macroblock Address (MBA) */
+
+ /* If not the slice just after the PSC */
+ int squant; /* Quantizer Inforation (SQUANT) */
+
+ /* If fRectangularSlices */
+ int swi; /* Slice Width Indication in Macroblocks (SWI)*/
+
+ int gfid; /* GOB Frame ID (GFID) field */
+ /* If the Reference Picture Selection mode is in use */
+ int tri; /* Temporal Reference Indicator (TRI) field */
+ int trpi; /* Temporal Reference for Prediction
+ Indicator (TRPI) field */
+
+ /* If tri == 1 */
+ int tr; /* Temporal Reference (TR) field */
+
+ /* If trpi == 1 */
+ int trp; /* Temporal Reference for Prediction (TRP)
+ field */
+
+} vdxSliceHeader_t;
+/* {{-output"vdxSliceHeader_t.txt"}} */
+
+/*
+ * vdxGetIMBLayerInputParam_t
+ */
+
+/* {{-output"vdxGetIMBLayerInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetIMBLayer function.
+ {{-output"vdxGetIMBLayerInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetIMBLayerInputParam_t.txt"}} */
+typedef struct {
+ int fMQ; /* Modified Quantization */
+ int quant; /* Current QUANT */
+ int fAIC; /* Advanced Intra Coding Flag */
+ int fSS; /* Slice Structured Mode Flag */
+ u_char fMPEG4; /* MPEG4 or H.263 */
+} vdxGetIMBLayerInputParam_t;
+/* {{-output"vdxGetIMBLayerInputParam_t.txt"}} */
+
+
+/*
+ * vdxGetDataPartitionedIMBLayerInputParam_t
+ */
+
+/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetDataPartitionedIMBLayer function. /MPEG-4/
+ {{-output"vdxGetDataPartitionedIMBLayerInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t.txt"}} */
+typedef struct {
+ int intra_dc_vlc_thr;
+ int quant; /* Current QUANT */
+} vdxGetDataPartitionedIMBLayerInputParam_t;
+/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t.txt"}} */
+
+
+/*
+ * vdxIMBLayer_t
+ */
+
+/* {{-output"vdxIMBLayer_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetIMBLayer function uses this structure to return
+ the macroblock header parameters.
+ {{-output"vdxIMBLayer_t_info.txt"}} */
+
+/* {{-output"vdxIMBLayer_t.txt"}} */
+typedef struct {
+ int mcbpc; /* Macroblock type and the coded block
+ pattern for chrominance */
+
+ int cbpc; /* Coded Block Pattern for Chrominance,
+ bit 1 is for U and bit 0 is for V,
+ use vdxIsUCoded and vdxIsVCoded macros
+ to access this value */
+
+ int cbpy; /* Coded Block Pattern for Luminance,
+ bit 3 is for block 1, ...,
+ bit 0 is for block 4,
+ use vdxIsYCoded macro to access this
+ value */
+
+/*** MPEG-4 REVISION ***/
+ u_char ac_pred_flag; /* "1" AC prediction used, "0" not */
+/*** End MPEG-4 REVISION ***/
+
+ int quant; /* New (possibly updated) QUANT */
+
+ int predMode; /* Prediction Mode used in Annex I
+ 0 (DC Only)
+ 1 (Vertical DC&AC)
+ 2 (Horizontal DC&AC) */
+
+ int mbType; /* 0..5, see table 9/H.263 */
+
+} vdxIMBLayer_t;
+/* {{-output"vdxIMBLayer_t.txt"}} */
+
+
+/*
+ * vdxGetPPBMBLayerInputParam_t
+ */
+
+/* {{-output"vdxGetPPBMBLayerInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetPPBMBLayer function.
+ {{-output"vdxGetPPBMBLayerInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetPPBMBLayerInputParam_t.txt"}} */
+typedef struct {
+ int pictureType; /* Picture type is one of the following:
+ VDX_PIC_TYPE_P INTER
+ VDX_PIC_TYPE_PB PB (Annex G)
+ VDX_PIC_TYPE_IPB Improved PB */
+
+ /* See the description of vdxPictureHeader_t for the following flags. */
+ int fPLUSPTYPE;
+ int fUMV;
+ int fAP;
+ int fDF;
+ int fMQ;
+
+ int fCustomSourceFormat; /* Flag indicating if custom source format
+ is used */
+
+
+/*** MPEG-4 REVISION ***/
+ u_char fMPEG4; /* MPEG4 or H.263 */
+ int f_code;
+/*** End MPEG-4 REVISION ***/
+
+ int quant; /* Current QUANT */
+
+ int fFirstMBOfPicture; /* Non-zero if the macroblock is the first
+ (top-left) one of the picture */
+
+ int fAIC; /* Advanced Intra Coding Flag */
+} vdxGetPPBMBLayerInputParam_t;
+/* {{-output"vdxGetPPBMBLayerInputParam_t.txt"}} */
+
+
+/*
+ * vdxGetDataPartitionedPMBLayerInputParam_t
+ */
+
+/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to pass input parameters to
+ the vdxGetDataPartitionedPMBLayer function. /MPEG-4/
+ {{-output"vdxGetDataPartitionedPMBLayerInputParam_t_info.txt"}} */
+
+/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t.txt"}} */
+typedef struct {
+ int intra_dc_vlc_thr;
+ int quant; /* Current QUANT */
+ int f_code;
+} vdxGetDataPartitionedPMBLayerInputParam_t;
+/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t.txt"}} */
+
+
+/*
+ * vdxPPBMBLayer_t
+ */
+
+/* {{-output"vdxPPBMBLayer_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetPPBMBLayer function uses this structure to return
+ the macroblock header parameters.
+ {{-output"vdxPPBMBLayer_t_info.txt"}} */
+
+/* {{-output"vdxPPBMBLayer_t.txt"}} */
+typedef struct {
+ int mcbpc; /* Macroblock type and the coded block
+ pattern for chrominance */
+
+ int fCodedMB; /* 1 if the macroblock is coded.
+ Otherwise 0. */
+
+ int mbType; /* 0..5, see table 9/H.263 */
+
+ int mbClass; /* VDX_MB_INTRA or VDX_MB_INTER */
+
+ int cbpc; /* Coded Block Pattern for Chrominance,
+ bit 1 is for U and bit 0 is for V,
+ use vdxIsUCoded and vdxIsVCoded macros
+ to access this value */
+
+ int cbpy; /* Coded Block Pattern for Luminance,
+ bit 3 is for block 1, ...,
+ bit 0 is for block 4,
+ use vdxIsYCoded macro to access this
+ value */
+
+ int cbpb; /* Coded Block Pattern for B-blocks,
+ bit 5 is for block 1, ...,
+ bit 0 is for block 6 */
+
+/*** MPEG-4 REVISION ***/
+ u_char ac_pred_flag; /* "1" AC prediction used, "0" not */
+/*** End MPEG-4 REVISION ***/
+
+ int quant; /* New (possibly updated) QUANT */
+
+ int numMVs; /* Number of motion vectors for the MB,
+ 0 if MVD is not in the stream,
+ 1 if MVD but not MVD2-4 is in the stream,
+ 4 if MVD and MVD2-4 is in the stream */
+
+ /* Only the number of MVs indicated in the numMVs member is valid
+ in the following arrays. */
+ int mvdx[4]; /* Horizontal components of MVD1-4,
+ index to table 14/H.263 */
+ int mvdy[4]; /* Vertical components of MVD1-4,
+ index to table 14/H.263 */
+
+ int fMVDB; /* 1 = MVDB exists in the bitstream,
+ i.e. mvdbx and mvdby are valid */
+
+ int mvdbx; /* Horizontal components of MVDB,
+ index to table 14/H.263 */
+ int mvdby; /* Vertical components of MVDB,
+ index to table 14/H.263 */
+ int predMode; /* Prediction Mode used in Annex I
+ 0 (DC Only)
+ 1 (Vertical DC&AC)
+ 2 (Horizontal DC&AC) */
+ int IPBPredMode; /* Prediction Modes used in annex M
+ 0 Bidirectional prediction
+ 1 Forward prediction
+ 2 Backward prediction */
+} vdxPPBMBLayer_t;
+/* {{-output"vdxPPBMBLayer_t.txt"}} */
+
+
+/*
+ * vdxIMBListItem_t
+ */
+
+/* {{-output"vdxIMBListItem_t_info.txt" -ignore"*" -noCR}}
+ List Item which is used to build a queue of Intra MBs during the data
+ partitioned decoding of an I-VOP. /MPEG-4/
+ The vdxGetDataPartitionedIMBLayer function uses this structure.
+ {{-output"vdxIMBListItem_t_info.txt"}} */
+
+/* {{-output"vdxIMBListItem_t.txt"}} */
+
+
+/* Data item recording for data partitioned transcoding */
+#ifndef VDT_OPERATION
+#define VDT_OPERATION
+#define VDT_SET_START_POSITION(mb,item,byte,bit) \
+{\
+ (mb)->DataItemStartByteIndex[(item)] = (byte);\
+ (mb)->DataItemStartBitIndex[(item)] = (bit);\
+}
+
+#define VDT_SET_END_POSITION(mb,item,byte,bit) \
+{\
+ (mb)->DataItemEndByteIndex[(item)] = (byte);\
+ (mb)->DataItemEndBitIndex[(item)] = (bit);\
+}
+#endif
+
+
+
+typedef struct {
+ DLST_ITEM_SKELETON
+
+/* for data partitioned transcoding
+ array ordering: 0: mcbpc, 1: dquant, 2: cbpy, 3: ac_pred_flag, 4~9: intraDCs, 10: mv, 11: mb stuffing
+ */
+ int mcbpc;
+ int DataItemStartByteIndex[12];
+ int DataItemStartBitIndex[12];
+ int DataItemEndByteIndex[12];
+ int DataItemEndBitIndex[12];
+ int dquant;
+
+ int DC[6]; /* DC component */
+ int quant; /* QUANT */
+ int cbpc; /* Coded Block Pattern for Chrominance */
+ int cbpy; /* Coded Block Pattern for Luminance */
+ u_char ac_pred_flag; /* "1" AC prediction used, "0" not */
+ u_char switched; /* intra_dc_vlc_thr indicated switch
+ to Intra AC VLC coding of the DC coeff
+ intstead of the usual DC VLC coding
+ at this QP */
+} vdxIMBListItem_t;
+/* {{-output"vdxIMBListItem_t.txt"}} */
+
+
+/*
+ * vdxPMBListItem_t
+ */
+
+/* {{-output"vdxPMBListItem_t_info.txt" -ignore"*" -noCR}}
+ List Item which is used to build a queue of Inter MBs during the data
+ partitioned decoding of a P-VOP. /MPEG-4/
+ The vdxGetDataPartitionedPMBLayer function uses this structure.
+ {{-output"vdxPMBListItem_t_info.txt"}} */
+
+/* {{-output"vdxPMBListItem_t.txt"}} */
+typedef struct {
+ DLST_ITEM_SKELETON
+/* for data partitioned transcoding
+ array ordering: 0: mcbpc, 1: dquant, 2: cbpy, 3: ac_pred_flag, 4~9: intraDCs, 10: mv, 11: mb stuffing
+ */
+ int mcbpc;
+ int DataItemStartByteIndex[12];
+ int DataItemStartBitIndex[12];
+ int DataItemEndByteIndex[12];
+ int DataItemEndBitIndex[12];
+ int dquant;
+ int mv_x[4]; /* horizontal componenet of 1-4 MVs */
+ int mv_y[4]; /* vertical componenet of 1-4 MVs */
+
+ u_char fCodedMB; /* 1 if the macroblock is coded.
+ Otherwise 0. */
+ int mbType; /* 0..5, see table 9/H.263 */
+ int mbClass; /* VDX_MB_INTRA or VDX_MB_INTER */
+ int DC[6]; /* DC component */
+ int quant; /* QUANT */
+ int cbpc; /* Coded Block Pattern for Chrominance */
+ int cbpy; /* Coded Block Pattern for Luminance */
+ u_char ac_pred_flag; /* "1" AC prediction used, "0" not */
+ u_char switched; /* intra_dc_vlc_thr indicated switch
+ to Intra AC VLC coding of the DC coeff
+ intstead of the usual DC VLC coding
+ at this QP */
+ int numMVs; /* Number of motion vectors for the MB */
+ int mvx[4]; /* horizontal componenet of 1-4 MVs */ // actually it is dMV
+ int mvy[4]; /* vertical componenet of 1-4 MVs */
+} vdxPMBListItem_t;
+/* {{-output"vdxPMBListItem_t.txt"}} */
+
+
+/*
+ * Macros
+ */
+
+/* These arrays are intialized in viddemux.c and needed in the vdxIsYXCoded
+ macros. */
+extern const int vdxBlockIndexToCBPYMask[5];
+extern const int vdxYBlockIndexToCBPBMask[5];
+
+/* {{-output"vdxIsXCoded.txt"}} */
+/*
+ * vdxIsYCoded
+ * vdxIsUCoded
+ * vdxIsVCoded
+ * vdxIsYBCoded
+ * vdxIsUBCoded
+ * vdxIsVBCoded
+ *
+ * Parameters:
+ * for vdxIsYCoded:
+ * cbpy coded block for luminance
+ * blockIndex index for luminance block 1..4
+ *
+ * for vdxIsUCoded and vdxIsVCoded:
+ * cbpc coded block pattern for chrominance
+ *
+ * for vdxIsXBCoded:
+ * cbpb coded block pattern for B blocks
+ * blockIndex index for B luminance block 1..4
+ *
+ * Function:
+ * This macros access the coded block bit patterns.
+ *
+ * Returns:
+ * 0 if the requested block is not coded
+ * non-zero if the requested block is coded
+ *
+ */
+
+#define vdxIsYCoded(cbpy, blockIndex) \
+ ((cbpy) & vdxBlockIndexToCBPYMask[(blockIndex)])
+
+#define vdxIsUCoded(cbpc) ((cbpc) & 2)
+#define vdxIsVCoded(cbpc) ((cbpc) & 1)
+
+#define vdxIsYBCoded(cbpb, blockIndex) \
+ ((cbpb) & vdxYBlockIndexToCBPBMask[(blockIndex)])
+
+#define vdxIsUBCoded(cbpb) ((cbpb) & 2)
+#define vdxIsVBCoded(cbpb) ((cbpb) & 1)
+/* {{-output"vdxIsXCoded.txt"}} */
+
+
+/*
+ * Function prototypes
+ */
+
+/* Picture Layer Global Functions */
+class CMPEG4Transcoder;
+
+int vdxGetVolHeader(
+ bibBuffer_t *inBuffer,
+ vdxVolHeader_t *header,
+ int *bitErrorIndication,
+ int getInfo, int *aByteIndex, int *aBitIndex,
+ CMPEG4Transcoder *hTranscoder);
+
+int vdxGetGovHeader(
+ bibBuffer_t *inBuffer,
+ vdxGovHeader_t *header,
+ int *bitErrorIndication);
+
+int vdxGetVopHeader(
+ bibBuffer_t *inBuffer,
+ const vdxGetVopHeaderInputParam_t *inpParam,
+ vdxVopHeader_t *header,
+ int * ModuloByteIndex,
+ int * ModuloBitIndex,
+ int * TimeIncByteIndex,
+ int * TimeIncBitIndex,
+ int *bitErrorIndication);
+
+int vdxGetPictureHeader(
+ bibBuffer_t *inBuffer,
+ const vdxGetPictureHeaderInputParam_t *inpParam,
+ vdxPictureHeader_t *header,
+ int *bitErrorIndication);
+
+int vdxFlushSEI(
+ bibBuffer_t *inBuffer,
+ int *bitErrorIndication);
+
+int vdxGetSEI(
+ bibBuffer_t *inBuffer,
+ int *ftype,
+ int *dsize,
+ u_char *parameterData,
+ int *fLast,
+ int *bitErrorIndication);
+
+int vdxGetAndParseSEI(
+ bibBuffer_t *inBuffer,
+ int fPLUSPTYPE,
+ int numScalabilityLayers,
+ vdxSEI_t *sei,
+ int *bitErrorIndication);
+
+int vdxGetUserData(bibBuffer_t *inBuffer,
+ char *user_data, int *user_data_length,
+ int *bitErrorIndication);
+
+/* GOB/Video Packet Layer Global Functions */
+
+int vdxGetGOBHeader(
+ bibBuffer_t *inBuffer,
+ const vdxGetGOBHeaderInputParam_t *inpParam,
+ vdxGOBHeader_t *header,
+ int *bitErrorIndication,
+ int aColorEffect,
+ int* aStartByteIndex,
+ int* aStartBitIndex,
+ CMPEG4Transcoder *hTranscoder);
+
+int vdxGetVideoPacketHeader(
+ bibBuffer_t *inBuffer,
+ const vdxGetVideoPacketHeaderInputParam_t *inpParam,
+ vdxVideoPacketHeader_t *header,
+ int *bitErrorIndication);
+
+/* Slice Layer Global Functions*/
+
+int vdxGetSliceHeader(
+ bibBuffer_t *inBuffer,
+ const vdxGetSliceHeaderInputParam_t *inpParam,
+ vdxSliceHeader_t *header,
+ int *bitErrorIndication);
+
+void vdxGetMBAandSWIValues(
+ int width,
+ int height,
+ int fRRU,
+ int *mbaFieldWidth,
+ int *mbaMaxValue,
+ int *swiFieldWidth,
+ int *swiMaxValue);
+
+/* Macroblock Layer Global Functions */
+
+
+int vdxGetIMBLayer(
+ bibBuffer_t *inBuffer,
+ bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit,
+ int aColorEffect,
+ int *StartByteIndex,
+ int *StartBitIndex,
+ TBool aGetDecodedFrame,
+ const vdxGetIMBLayerInputParam_t *inpParam,
+ vdxIMBLayer_t *outParam,
+ int *bitErrorIndication,
+ CMPEG4Transcoder *hTranscoder);
+
+
+int vdxGetPPBMBLayer(
+ bibBuffer_t *inBuffer,
+ bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit,
+ int aColorEffect,
+ int *aStartByteIndex,
+ int *aStartBitIndex,
+ TBool aGetDecodedFrame,
+ int *bwMBType,
+ const vdxGetPPBMBLayerInputParam_t *inpParam,
+ vdxPPBMBLayer_t *outParam,
+ int *bitErrorIndication,
+ CMPEG4Transcoder *hTranscoder);
+
+
+int vdxGetDataPartitionedIMBLayer_Part1(
+ bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit,
+ int aColorEffect, int *aStartByteIndex, int *aStartBitIndex,
+ CMPEG4Transcoder *hTranscoder,
+ const vdxGetDataPartitionedIMBLayerInputParam_t *inpParam,
+ dlst_t *MBList,
+ int *bitErrorIndication);
+
+int vdxGetDataPartitionedIMBLayer_Part2(
+ bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit,
+ int aColorEffect, int *aStartByteIndex, int *aStartBitIndex,
+ dlst_t *MBList,
+ int numMBsInVP,
+ int *bitErrorIndication);
+
+int vdxGetDataPartitionedPMBLayer_Part1(
+ bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit,
+ int aColorEffect, int *aStartByteIndex, int *aStartBitIndex,
+ const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam,
+ dlst_t *MBList,
+ int *bitErrorIndication);
+
+int vdxGetDataPartitionedPMBLayer_Part2(
+ bibBuffer_t *inBuffer,
+ bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit,
+ int aColorEffect, int *aStartByteIndex, int *aStartBitIndex,
+ CMPEG4Transcoder *hTranscoder,
+ const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam,
+ dlst_t *MBList,
+ int *bitErrorIndication);
+
+/* Block Layer Global Functions */
+
+int vdxGetIntraDCTBlock(
+ bibBuffer_t *inBuffer,
+ int fCodedBlock,
+ int *block,
+ int *bitErrorIndication,
+ int fMQ,
+ int qp);
+
+int vdxGetIntraDC(
+ bibBuffer_t *inBuffer,
+ bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit,
+ int aColorEffect,
+ int *aStartByteIndex,
+ int *aStartBitIndex,
+ int compnum,
+ int *IntraDCSize,
+ int *IntraDCDelta,
+ int *bitErrorIndication);
+
+int vdxGetMPEGIntraDCTBlock(
+ bibBuffer_t *inBuffer,
+ int startIndex,
+ int *block,
+ int *bitErrorIndication);
+
+int vdxGetDCTBlock(
+ bibBuffer_t *inBuffer,
+ int startIndex,
+ u_char fMPEG4EscapeCodes,
+ int *block,
+ int *bitErrorIndication,
+ int fMQ,
+ int qp,
+ int *fEscapeCodeUsed);
+
+int vdxGetAdvIntraDCTBlock(
+ bibBuffer_t *inBuffer,
+ int fCodedBlock,
+ int *block,
+ int *bitErrorIndication,
+ int predMode,
+ int fMQ,
+ int qp);
+
+int vdxGetAdvDCTBlock(
+ bibBuffer_t *inBuffer,
+ int startIndex,
+ int *block,
+ int *bitErrorIndication,
+ int predMode,
+ int fMQ,
+ int qp);
+
+int vdxGetRVLCDCTBlock(
+ bibBuffer_t *inBuffer,
+ int startIndex,
+ int fIntraBlock,
+ int *block,
+ int *bitErrorIndication);
+
+int vdxGetRVLCDCTBlockBackwards(
+ bibBuffer_t *inBuffer,
+ int startIndex,
+ int fIntraBlock,
+ int *block,
+ int *bitErrorIndication);
+
+
+
+int vdxChangeBlackAndWhiteHeaderIntraIMB(bibBufferEdit_t *bufEdit,
+ int mcbpcIndex,
+ int StartByteIndex,
+ int StartBitIndex);
+
+int vdxChangeBlackAndWhiteHeaderInterPMB(bibBufferEdit_t *bufEdit,
+ int mcbpcIndex,
+ int StartByteIndex,
+ int StartBitIndex);
+
+
+
+#endif
+// End of File