videoeditorengine/avcedit/inc/vedavceditimp.h
changeset 0 951a5db380a0
--- /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