diff -r 000000000000 -r 951a5db380a0 videoeditorengine/avcedit/inc/vedavceditimp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/avcedit/inc/vedavceditimp.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,176 @@ +/* +* 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: +* A header file for implementation class of AVC editing API. +* +*/ + + + +#ifndef VEDAVCEDITIMP_H +#define VEDAVCEDITIMP_H + +// INCLUDES +#include "avcdapi.h" +#include "vedavcedit.h" + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* CTranscoder Implementation class +* @lib VEDAVCEDIT.LIB +* @since +*/ + +NONSHARABLE_CLASS(CVedAVCEditImp) : public CVedAVCEdit +{ + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVedAVCEditImp* NewL(); + + /** + * Destructor. + */ + ~CVedAVCEditImp(); + + public: // Functions from CVedAVCEdit + + /** + * From CVedAVCEdit Add MDF specific NAL headers to input AVC frame + */ + void ProcessAVCBitStreamL(TDes8& aBuf, TInt& aFrameLen, TInt aDecInfoSize, TBool aFirstFrame); + + /** + * From CVedAVCEdit Calculate default value for max no. of buffered frames + */ + TInt GetMaxAVCFrameBuffering(TInt aLevel, TSize aResolution); + + /** + * From CVedAVCEdit Get input bitstream level from SPS + */ + TInt GetLevel(TDesC8& aBuf, TInt& aLevel); + + /** + * From CVedAVCEdit Get input bitstream resolution from SPS + */ + TInt GetResolution(TDesC8& aBuf, TSize& aResolution); + +#ifdef VIDEOEDITORENGINE_AVC_EDITING + + /** + * From CVedAVCEdit Convert AVC decoder config info to AVCDecoderConfigurationRecord -format + */ + void ConvertAVCHeaderL(TDesC8& aSrcBuf, TDes8& aDstBuf ); + + /** + * From CVedAVCEdit Save SPS/PPS NAL units from AVCDecoderConfigurationRecord + */ + void SaveAVCDecoderConfigurationRecordL(TDes8& aBuf, TBool aFromEncoder); + + /** + * From CVedAVCEdit Update slice header information: frame number and PPS id + */ + TInt ParseFrame(HBufC8*& aBuf, TBool aContainsDCR, TBool aFromEncoder); + + /** + * From CVedAVCEdit Constructs AVCDecoderConfigurationRecord for the output sequence + */ + void ConstructAVCDecoderConfigurationRecordL( TDes8& aDstBuf ); + + /** + * From CVedAVCEdit Set length of NAL size field of output sequence + */ + void inline SetNALLengthSize( TInt aSize ) { iNalLengthSize = aSize; } + + /** + * From CVedAVCEdit Set output level for constructing AVCDecoderConfigurationRecord + */ + void inline SetOutputLevel(TInt aLevel) { iOutputLevel = aLevel; } + + /** + * From CVedAVCEdit Check if encoding is required until the next IDR unit + */ + TBool EncodeUntilIDR(); + + /** + * From CVedAVCEdit Check if NAL unit is an IDR NAL + */ + TBool IsNALUnitIDR( TDes8& aNalBuf ); + + /** + * From CVedAVCEdit Store PPS id from current slice + */ + void StoreCurrentPPSId( TDes8& aNalBuf ); + + /** + * From CVedAVCEdit Generate a not coded frame + */ + TInt GenerateNotCodedFrame( TDes8& aNalBuf, TUint aFrameNumber ); + + /** + * From CVedAVCEdit Modify the frame number of the NAL unit + */ + void ModifyFrameNumber( TDes8& aNalBuf, TUint aFrameNumber ); + +private: // Private methods + + /* + * Saves one SPS/PPS NAL unit for later use + * + * @param aBuf Input buffer containing AVCDecoderConfigurationRecord + */ + TInt ParseOneNAL(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder); + + TInt ParseParameterSet(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder); +#endif + + private: + + /** + * C++ default constructor. + */ + CVedAVCEditImp(); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: // Data + + avcdDecoder_t* iAvcDecoder; // For parsing AVC content / for CD operations + + TInt iFrameLengthBytes; // no. of bytes used for length field + +#ifdef VIDEOEDITORENGINE_AVC_EDITING + + TInt iNalLengthSize; // The number of bytes used to signal NAL unit's length + + TInt iOutputLevel; // output level + +#endif + +}; + + +#endif + +// End of File