videoeditorengine/avcedit/inc/vedavcedit.h
changeset 0 951a5db380a0
--- /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 <e32base.h>
+
+/**
+*  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