--- a/videoeditorengine/h263decoder/inc/MPEG4Transcoder.h Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,366 +0,0 @@
-/*
-* 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:
-* Definition for CMPEG4Transcoder, a class for MPEG4 transcoder
-* working at video packet level or MB level.
-*
-*/
-
-
-
-#ifndef __VMPEG4TRANSCODER_H__
-#define __VMPEG4TRANSCODER_H__
-
-
-/*
- * Includes (header files are copied from core_mpeg.cpp)
- */
-#include <e32base.h>
-
-#include <vedcommon.h>
-#include "h263dConfig.h"
-#include "vdc263.h"
-#include "core.h"
-#include "debug.h"
-#include "decblock.h" /* for dblFree and dblLoad */
-#include "decvp_mpeg.h"
-#include "h263dapi.h" /* for H263D_BC_MUX_MODE_SEPARATE_CHANNEL and H263D_ERD_ */
-#include "vdeimb.h"
-#include "viddemux.h"
-#include "vdxint.h"
-#include "vde.h"
-#include "vdemain.h"
-#include "biblin.h"
-#include "mpegcons.h"
-#include "h263dmai.h"
-#include "decpich.h"
-#include "decmbdct.h"
-#include "common.h"
-#include "sync.h"
-#include "vdcaic.h"
-#include "zigzag.h"
-#include "debug.h"
-
-#ifndef VDTASSERT
-// An assertion macro wrapper to clean up the code a bit
-#define VDTASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CMPEG4Transcoder"), EInternalAssertionFailure))
-#endif
-
-
-
-/* Get information about video bitstream */
-int vdtGetVideoBitstreamInfo(bibBuffer_t *inBuffer, vdeDecodeParamters_t *aInfoOut, int *aByteIndex, int *aBitIndex);
-
-/* Finds the error resilience bit in MPEG-4 VOL and change it, if necessary, to make it Regular Resynchronization mode */
-TBool vdtChangeVosHeaderRegResyncL(TPtrC8& aInputBuffer, TUint aBufferSize);
-
-
-#define DefaultTimeIncResolution 3000/1001
-
-// unify error codes
-#define TX_OK H263D_OK
-#define TX_ERR H263D_ERROR
-
-/*
-* CopyEditVop
-*
-*
-* Parameters:
-* hInstance instance handle
-*
-* Function:
-* This function copies the VOP header with edited time stamps of the VOP.
-*
-* Params
-* @param hInstance is handle instance itself
-* @param aNrBytesToSkip number of bytes to jump over in the beginning of output buffer (e.g. MPEG4 VOS header)
-* @param inBuffer is the input buffer
-* @param aDecoderInfo structure with decode params
-*/
-
-int CopyEditVop(vdeHInstance_t hInstance, int aNrOfBytesToSkip, bibBuffer_t * inBuffer, vdeDecodeParamters_t *aDecoderInfo);
-
-
-
-
-/*
-* CopyEditVideoPacket
-*
-*
-* Parameters:
-*
-* Function:
-* This function copies the video packet with edited time stamps, if HEC is enabled
-*
-* Returns:
-* Success or failure
-*/
-int CopyEditVideoPacket(bibBuffer_t* inBuffer,
- bibBuffer_t* outBuffer,
- bibBufferEdit_t* aBufEdit,
- vdcInstance_t * vdcTemp,
- vdeDecodeParamters_t *aDecoderInfo,
- vdxVopHeader_t* vopheader,
- int* aSncCode,
- int* startByteIndex,
- int* startBitIndex);
-
-
-
-
-
-/*
- * Classes
- */
-
-/* General transcoding class
- * contains all necessary transcoding information
- * accessible from various points in the decoder module
- */
-class CMPEG4Transcoder : public CBase
-{
-public:
-
- static CMPEG4Transcoder* NewL (const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer);
-
- /* Destructor */
- ~CMPEG4Transcoder();
-
- /* Indicates whether we need to do MPEG4 bitstream transcoding */
- int SetTranscoding(vdeDecodeParamters_t *aDecoderInfo);
-
- /* Copy the VOP Header to output buffer */
- void VOPHeaderEnded(int aStartByteIndex, int aStartBitIndex,
- int aQuant, int aPicType, int aFrameNum, int aVOPNotCoded);
- /* One VOP ended */
- void VOPEnded();
- /* Record the position before one video packet is processed */
- void BeginOneVideoPacket(dvpVPInParam_t *aVPin);
- /* Record the position before the content of the video packet is processed (called after retreiving the video packet) */
- void AfterVideoPacketHeader(dvpVPInOutParam_t *aVPInfo);
- /* Called after one video packet's contents are retrieved */
- void OneVPEnded();
- /* Add one IMB instance for I macroblock */
- void OneIMBDataStartedDataPartitioned(vdxIMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum);
- /* Add one PMB instance for P macroblock */
- void OnePMBDataStartedDataPartitioned(vdxPMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum);
- /* Records the position of vop_time_increment_resolution bit */
- void MPEG4TimerResolution(int aStartByteIndex, int aStartBitIndex);
- /* Creates a new H263 macroblock */
- int ConstructH263MBData(dmdPParam_t *aParam, int aNewMCBPCLen, int aNewMCBPC);
- /* Transcode one H263 MB to one MPEG4 MB */
- void H263ToMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC);
- /* fills the reconstructed DCAC values for INTRA block */
- void AddOneBlockDCACrecon(int aIndex, int *aDCAC);
- /* Record MB parameters before the content of the MB is processed (called after retreiving the MB layer) */
- void AfterMBLayer(int aUpdatedQp);
- /* returns first frame QP */
- inline int GetRefQP() { return iRefQuant; }
-
-
- /* returns 1 if we need the decoded frame */
- int NeedDecodedYUVFrame();
- /* Record the position before one MB is processed */
- void BeginOneMB(int aMBNum);
- /* Record the position before one block in MB is processed */
- void BeginOneBlock(int aIndex);
- /* Start one IMB (called after the MB header is read) */
- void OneIMBDataStarted(vdxIMBListItem_t *aMBInstance);
- /* Start one PMB (called after the MB header is read) */
- void OnePMBDataStarted(vdxPMBListItem_t *aMBInstance);
- /* Input one block data to current MB */
- void AddOneBlockDataToMB(int aBlockIndex, int *aBlockData);
- /* Indicates if escape vlc coding is used in one block */
- void H263EscapeCoding(int aIndex, int fEscapeCodeUsed);
- /* Records the position of resnc_marker_disable bit */
- void ErrorResilienceInfo(vdxVolHeader_t *header, int aByte, int aBit);
- /* Constructs the VOS header */
- void ConstructVOSHeader(int aMPEG4, vdeDecodeParamters_t *aDecoderInfo);
- /* Called after one H263 GOB or slice header is parsed */
- void H263GOBSliceHeaderEnded(vdxGOBHeader_t *aH263GOBHeader, vdxSliceHeader_t *aH263SliceHeader);
- /* Called after one H263 picture header is parsed */
- int H263PictureHeaderEnded(dphOutParam_t *aH263PicHeader, dphInOutParam_t *aInfo);
- /* Called before one H.63 GOB or slice header is parsed */
- void H263GOBSliceHeaderBegin();
- /* Called after one H263 GOB or Slice ends */
- void H263OneGOBSliceEnded(int nextExpectedMBNum);
- /* Called after one GOB (slice) that has GOB header (except the first GOB) ends */
- void H263OneGOBSliceWithHeaderEnded();
- /* Transcodes one macroblock (may include dequantization, requantization, and re-encoding) */
- int TranscodingOneMB(dmdPParam_t *aParam);
-
-private:
- /* Constructors */
- CMPEG4Transcoder(const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer);
-
- /*Constructl to allocate necessary resources*/
- void ConstructL();
-
- // main functions to perform transcoding for one macroblock
- /* Transcode MB - rearranges data partitioned bitstream data to regular */
- void ConstructRegularMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC);
- /* Resets the DCs for U/V blocks in intra MB */
- void ResetMPEG4IntraDcUV();
- /* Recontruct IMB partitions for color effect when we are not doing format transcoding */
- void ReconstructIMBPartitions();
- /* Recontruct PMB partitions for color effect when we are not doing format transcoding */
- void ReconstructPMBPartitions();
- /* Evaluate Chrominance DC Scaler from QP for MPEG4 */
- int GetMpeg4DcScalerUV(int aQP);
- /* Evaluate IntraDC Coefficients for U,V blocks for MPEG4 */
- void GetMPEG4IntraDcCoeffUV(TInt aValue, TInt& aSize, TInt& aSizeCode,
- TInt& aSizeCodeLength, TInt& aValueCode, TInt& aValueCodeLength);
-
-
-
-private:
-
- /* Output data buffer */
- bibBuffer_t *iOutBuffer;
- /* Operation modes */
- TVedVideoBitstreamMode iBitStreamMode;
-
- /*
- When we do mode translation for MPEG4, the target mode may be MPEG4Resyn or H263
- but for H263, when we do mode translation, the target mode is always MPG4Resyn
- */
-
-/* Member variables */
-
- /* Indicates the direction for MPEG4 mode translation */
- int iTargetFormat;
-
- /* Input data buffer */
- bibBuffer_t *iInBuffer;
-
- /* Indicates if we need to do transcoding for current MB */
- int iDoTranscoding;
-
- /* Indicates if we need to do MPEG4 bitstream conversion */
- int iDoModeTranscoding;
-
- /* Special Effect (Black and White) paramter */
- int iColorEffect;
-
- /* color tone U,V value parameter */
- TInt iColorToneU;
- TInt iColorToneV;
-
- /* Information we know about this frame and MB */
-
- /* current VOP coding type */
- int iVopCodingType;
-
- /* number of MBs in one VOP */
- int iNumMBsInOneVOP;
-
- /* indicates if stuffing bits have been used */
- int8 iStuffingBitsUsed;
-
-
- /* Only valid with resync_marker
- Information includes:
- MB number, quant_scale, StartByteIndex, StartBitIndex ...
- */
- /* Contains CurMBNum, quant, frame number, etc */
- dvpVPInOutParam_t *iCurVPInOut;
- /* Contains picture type, etc */
- dvpVPInParam_t *iCurVPIn;
- /* VOL header */
- vdxVolHeader_t iVOLHeader;
-
- /* position pointers at different levels */
- int iVPStartByteIndex, iVPStartBitIndex;
- int iVPHeaderEndByteIndex, iVPHeaderEndBitIndex;
- int iTimeResolutionByteIndex, iTimeResolutionBitIndex;
- /* Array to store the DCT data */
- int iDCTBlockData[BLOCK_COEFF_SIZE * 6]; /* YUV components */
- int **iH263DCData; /* Intra DC matrix for H263 -> MPEG4 transcoding */
-
- dlst_t *iMBList;
- tMBInfo* h263mbi; /* one frame MB information for MPEG4 to H263 transcoding */
- int iPreQuant; /* last QUANT, used in MPEG4 to H263 transcoding */
-
- /* used for color toning for MPEG4 */
- u_char *iMBType; /* array indicating MB type for all MBs in VOP */
- int iRefQuant; /* reference QP derived from 1st VOP of MPEG4 */
- int iCurQuant; /* current QP */
- int iDcScaler; /* DC Scaler for iRefQuant */
-
-
- int *iH263MBVPNum; /* matrix recording the video packet number for each MB */
-
- int iShortHeaderEndByteIndex , iShortHeaderEndBitIndex;
-
- /* iMBStartByteIndex, iMBStartBitIndex also record the postion
- right after the VP header when video packet is used
- */
- int iMBStartByteIndex, iMBStartBitIndex;
-
- /* Positions of each block data including INTRA DC if it exists
- except for data partioning, in which it only indicates the ACs or DCTs
- */
- int iBlockStartByteIndex[6], iBlockStartBitIndex[6];
- int iBlockEndByteIndex[6], iBlockEndBitIndex[6];
- int iErrorResilienceStartByteIndex, iErrorResilienceStartBitIndex;
-
- /*Added for Time Res 30000 */
- int iOutputMpeg4TimeIncResolution;
-
- /* Processing data member */
- const vdeInstance_t *iVDEInstance;
-
- /* Instance for current processing MB */
- vdxIMBListItem_t *iCurIMBinstance;
- vdxPMBListItem_t *iCurPMBinstance;
-
- /* Temporary edit buffer */
- bibBufferEdit_t bufEdit;
-
- /* Current and last processed MB */
- int iCurMBNum;
-
- /* Last output MB number */
- int iLastMBNum;
-
- /* current MB number in current video packet */
- int iCurMBNumInVP;
-
- /* MB coding type: INTRA or INTER */
- int iMBCodingType;
-
- /* Specific members only for H.263! */
- int iGOBSliceStartByteIndex;
- int iGOBSliceStartBitIndex;
- int iGOBSliceHeaderEndByteIndex;
- int iGOBSliceHeaderEndBitIndex;
-
- /* Index of video packet in MPEG4 */
- int iVideoPacketNumInMPEG4;
- /* Number of MBs in picture width */
- int iMBsinWidth;
- /* Number of MBs in one GOB */
- int iNumMBsInGOB;
- /* Indicates if its the first frame */
- unsigned char fFirstFrameInH263;
- /* Indicates if escape vlc coding is used */
- int iEscapeCodeUsed[6];
-
-};
-
-
-
-#endif /* __VMPEG4TRANSCODER_H__ */
-