diff -r 000000000000 -r 951a5db380a0 videoeditorengine/avcedit/inc/vedavcedit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/avcedit/inc/vedavcedit.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,181 @@ +/* +* 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 defining the AVC editing API. +* +* +*/ + + + +#ifndef VEDAVCEDIT_H +#define VEDAVCEDIT_H + +#include + +/** +* CVedAVCEdit abstract base class for AVC editing class +* +* @lib vedAVCEdit +* @since +*/ +class CVedAVCEdit : public CBase + { + + public: // Constants + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * + */ + IMPORT_C static CVedAVCEdit* NewL(); + + /** + * Destructor. + */ + virtual ~CVedAVCEdit(); + + public: // New functions + + /* + * Add MDF specific NAL headers to input AVC frame + * + * @param aBuf Input/output buffer + * @param aFrameLen Input/output frame length + * @param aDecInfoSize Decoder specific info size + * @param aFirstFrame ETrue for first frame in sequence + */ + virtual void ProcessAVCBitStreamL(TDes8& aBuf, TInt& aFrameLen, TInt aDecInfoSize, TBool aFirstFrame) = 0; + + /* + * Calculate default value for no. of buffered frames according to + * H.264 spec Annex A + * + * @param aLevel AVC level + * @param aResolution Video resolution + */ + virtual TInt GetMaxAVCFrameBuffering(TInt aLevel, TSize aResolution) = 0; + + /* + * Get input bitstream level from SPS. Note: SPS Nal unit must be at the + * beginning of the input buffer + * + * @param aBuf Input buffer containing SPS + * @param aLevel Output: Baseline profile level + */ + virtual TInt GetLevel(TDesC8& aBuf, TInt& aLevel) = 0; + + /* + * Get input bitstream video resolution from SPS. Note: SPS Nal unit must + * be at the beginning of the input buffer + * + * @param aBuf Input buffer containing SPS + * @param aResolution Output: Resolution + */ + virtual TInt GetResolution(TDesC8& aBuf, TSize& aResolution) = 0; + +#ifdef VIDEOEDITORENGINE_AVC_EDITING + + /* + * Convert AVC specific decoder config info to AVCDecoderConfigurationRecord -format + * + * @param aSrcBuf Source buffer containing SPS/PPS NAL units in AVC MDF buffer format + * @param aDstBuf Destination buffer for AVCDecoderConfigurationRecord + */ + virtual void ConvertAVCHeaderL(TDesC8& aSrcBuf, TDes8& aDstBuf ) = 0; + + /* + * Save SPS/PPS NAL units from AVCDecoderConfigurationRecord + * for later use + * + * @param aBuf Input buffer containing AVCDecoderConfigurationRecord + */ + virtual void SaveAVCDecoderConfigurationRecordL(TDes8& aBuf, TBool aFromEncoder) = 0; + + /* + * Update slice header information: frame number and PPS id + * + * @param aBuf Buffer containing input frame + * @param aContainsDCR ETrue if AVC decoder config. record is included + * @param aFromEncoder ETrue if frame comes from the encoder + */ + virtual TInt ParseFrame(HBufC8*& aBuf, TBool aContainsDCR, TBool aFromEncoder) = 0; + + /* + * Constructs AVCDecoderConfigurationRecord for the whole sequence, taking + * into account all input DCR's + * + * @param aDstBuf Destination buffer for AVCDecoderConfigurationRecord + * @param aLevel Level output sequence + */ + virtual void ConstructAVCDecoderConfigurationRecordL( TDes8& aDstBuf ) = 0; + + /* + * Set length of NAL size field of output sequence + * + * @param aSize Length of size field in bytes + */ + virtual void SetNALLengthSize( TInt aSize ) = 0; + + /* + * Set output level for constructing AVCDecoderConfigurationRecord + * + * @param aLevel Output level + */ + virtual void SetOutputLevel(TInt aLevel) = 0; + + /* + * Check if encoding is required until the next IDR unit + * + */ + virtual TBool EncodeUntilIDR() = 0; + + /* + * Check if NAL unit is an IDR NAL + * + * @param aNalBuf buffer containing NAL unit + */ + virtual TBool IsNALUnitIDR( TDes8& aNalBuf ) = 0; + + /* + * Store PPS id from the current slice + * + * @param aNalBuf buffer containing NAL unit + */ + virtual void StoreCurrentPPSId( TDes8& aNalBuf ) = 0; + + /* + * Generate a not coded frame + * + * @param aNalBuf buffer containing NAL unit + */ + virtual TInt GenerateNotCodedFrame( TDes8& aNalBuf, TUint aFrameNumber ) = 0; + + /* + * Modify the frame number of the NAL unit + * + * @param aNalBuf buffer containing NAL unit + */ + virtual void ModifyFrameNumber( TDes8& aNalBuf, TUint aFrameNumber ) = 0; +#endif + +}; + + +#endif + +// End of File