videoeditorengine/h263decoder/inc/decmb.h
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* 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 macroblock decoding functions.
*
*/



#ifndef _DECMB_H_
#define _DECMB_H_

/*
 * Includes
 */

#include "epoclib.h"

#include "biblin.h"

#include "block.h"
#include "core.h"
#include "vdcmvc.h"


/*
 * Defines
 */

// unify error codes
#define DMB_BIT_ERR  H263D_OK_BUT_BIT_ERROR
#define DMB_OK H263D_OK
#define DMB_ERR H263D_ERROR


/*
 * Structs and typedefs
 */

/* {{-output"dmbIFrameMBInParam_t_info.txt" -ignore"*" -noCR}}
   This structure is used to pass input parameters to
   the dmbGetAndDecodeIFrameMB function.
   {{-output"dmbIFrameMBInParam_t_info.txt"}} */

/* {{-output"dmbIFrameMBInParam_t.txt"}} */
typedef struct {
   bibBuffer_t *inBuffer;        /* Bit Buffer instance data */


   bibBuffer_t *outBuffer;        /* Out Bit Buffer instance data */
   bibBufferEdit_t *bufEdit;
   int iColorEffect; 
   TBool iGetDecodedFrame; //Do we need to get decoded data.
   int StartByteIndex;
   int StartBitIndex;


   int xPosInMBs;                /* Horizontal position of the macroblock
                                    (in macroblocks), 
                                    0 .. (numMBsInMBLine - 1) */

   int yPosInMBs;                /* Vertical position of the macroblock,
                                    (in macroblocks), 0 .. */

   vdcPictureParam_t *pictParam; /* Picture attributes */

   int fGOBHeaderPresent;        /* 1 if GOB header present */

   int numMBsInSegment;          /* Number of MBs in either GOB or Slice Segment */
   int sliceStartMB;             /* MB address of starting MB of the slice */


} dmbIFrameMBInParam_t;
/* {{-output"dmbIFrameMBInParam_t.txt"}} */


/* {{-output"dmbIFrameMBInOutParam_t_info.txt" -ignore"*" -noCR}}
   This structure is used to pass input parameters to
   the dmbGetAndDecodeIFrameMB function. The function may also modify
   these parameters (or the structures pointed by the parameters).
   {{-output"dmbIFrameMBInOutParam_t_info.txt"}} */

/* {{-output"dmbIFrameMBInOutParam_t.txt"}} */
typedef struct {
   u_char *fCodedMBs;            /* Array for coded macroblock flags in
                                    scan-order, 1 = coded, 0 = not coded */

   int numOfCodedMBs;            /* Number of coded macroblocks */

/*** MPEG-4 REVISION ***/
   int currMBNum;                /* current MB number */
   int currMBNumInVP;            /* current MB in VP */
   
   aicData_t *aicData;           /* MPEG-4 Advanced Intra Coding module 
                                    instance data */
/*** End MPEG-4 REVISION ***/

   int quant;                    /* Current quantizer */

   u_char *yMBInFrame;           /* Pointer to the top-left corner of
                                    the current macroblock in a frame */
   u_char *uBlockInFrame;
   u_char *vBlockInFrame;

   int StartByteIndex;
   int StartBitIndex;

} dmbIFrameMBInOutParam_t;
/* {{-output"dmbIFrameMBInOutParam_t.txt"}} */


/* {{-output"dmbPFrameMBInParam_t_info.txt" -ignore"*" -noCR}}
   This structure is used to pass input parameters to
   the dmbGetAndDecodePFrameMB function.
   {{-output"dmbPFrameMBInParam_t_info.txt"}} */

/* {{-output"dmbPFrameMBInParam_t.txt"}} */
typedef struct {
   bibBuffer_t *inBuffer;        /* Bit Buffer instance data */

   bibBuffer_t *outBuffer;        /* Out Bit Buffer instance data */
   bibBufferEdit_t *bufEdit;
   int iColorEffect; 
   TBool iGetDecodedFrame;
   int StartByteIndex;
   int StartBitIndex;


   int xPosInMBs;                /* Horizontal position of the macroblock
                                    (in macroblocks), 
                                    0 .. (numMBsInMBLine - 1) */

   int yPosInMBs;                /* Vertical position of the macroblock,
                                    (in macroblocks), 0 .. */

   vdcPictureParam_t *pictParam; /* Picture attributes */

   int fGOBHeaderPresent;        /* Non-zero indicates that the GOB header
                                    is present in the GOB to which the current
                                    macroblock belongs */

   u_char *refY;                 /* Reference frame */
   u_char *refU;
   u_char *refV;

   u_char *currPY;               /* Current P (or I) frame */
   u_char *currPU;
   u_char *currPV;


   int numMBsInSegment;          /* Number of MBs in either GOB or Slice Segment */
   int sliceStartMB;             /* MB address of starting MB of the slice */

   int mbOnRightOfBorder;
   int mbOnOfBottomBorder;
   int mbOnLeftOfBorder;

} dmbPFrameMBInParam_t;
/* {{-output"dmbPFrameMBInParam_t.txt"}} */


/* {{-output"dmbPFrameMBInOutParam_t_info.txt" -ignore"*" -noCR}}
   This structure is used to pass input parameters to
   the dmbGetAndDecodePFrameMB function. The function may also modify
   these parameters (or the structures pointed by the parameters).
   {{-output"dmbPFrameMBInOutParam_t_info.txt"}} */

/* {{-output"dmbPFrameMBInOutParam_t.txt"}} */
typedef struct {


   bibBuffer_t *outBuffer;        /* Out Bit Buffer instance data */
   int StartByteIndex;
   int StartBitIndex;


   u_char *fCodedMBs;            /* Array for coded macroblock flags in
                                    scan-order, 1 = coded, 0 = not coded */

   int numOfCodedMBs;            /* Number of coded macroblocks */

/*** MPEG-4 REVISION ***/
   int currMBNum;                /* current MB number */
   int currMBNumInVP;            /* current MB in VP */

   aicData_t *aicData;           /* Advanced Intra Coding module instance data */
/*** End MPEG-4 REVISION ***/

   int quant;                    /* Current quantizer */

   u_char *yMBInFrame;           /* Pointer to the top-left corner of
                                    the current macroblock in a frame */
   u_char *uBlockInFrame;
   u_char *vBlockInFrame;

   mvcData_t *mvcData;           /* Motion Vector Count module instance data */

   blcDiffMB_t *diffMB;          /* Storage for the previous prediction error
                                    blocks */

} dmbPFrameMBInOutParam_t;
/* {{-output"dmbPFrameMBInOutParam_t.txt"}} */


/*
 * Function prototypes
 */

int dmbGetAndDecodeIFrameMB(
   const dmbIFrameMBInParam_t *inParam,
   dmbIFrameMBInOutParam_t *inOutParam,
   u_char fMPEG4, CMPEG4Transcoder *hTranscoder);

int dmbGetAndDecodePFrameMB(
   const dmbPFrameMBInParam_t *inParam,
   dmbPFrameMBInOutParam_t *inOutParam,
   u_char fMPEG4, CMPEG4Transcoder *hTranscoder);

#endif
// End of File