--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedengine/videoprocessor/inc/mp4composer.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,218 @@
+/*
+* 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:
+*
+*/
+
+
+//FC: A wrapper class for mp4composer
+// Based on the CMP4Parser class
+// end FC.
+
+
+#ifndef __MP4COMPOSER_H__
+#define __MP4COMPOSER_H__
+
+// INCLUDES
+
+
+#include "Composer.h"
+#include <mp4lib.h>
+#include "parser.h"
+#include "vedavcedit.h"
+
+// CONSTANTS
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATION
+
+
+/**
+* MP4 -format Composer class
+* ?other_description_lines
+*/
+class CMP4Composer : public CComposer
+ {
+
+ public: // Constants
+
+ enum TFrameType
+ {
+ EFrameTypeNone = 0,
+ EFrameTypeAudio,
+ EFrameTypeVideo
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CMP4Composer();
+
+ /**
+ * Two-phased constructor.(overloaded for Mp4 support)
+ */
+ static CMP4Composer* NewL(const TDesC &aFileName,
+ CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat,
+ CVedAVCEdit *aAvcEdit);
+
+ static CMP4Composer* NewL(RFile* aFileHandle,
+ CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat,
+ CVedAVCEdit *aAvcEdit);
+
+ /**
+ * Destructor.
+ */
+ ~CMP4Composer();
+
+ public: // Functions from base classes
+
+
+ /**
+ * Write a number of frames of requested type from inserted data or file
+ * @param aSrcBuffer SOurce buffer
+ * @param aType Type of frame(s) to write
+ * @param aNumWritten Number of frames actually written
+ * @return TInt error code
+ */
+
+ TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration,
+ TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType);
+
+ TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration,
+ TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType,TInt& aMP4Size,
+ TBool aModeChanged,TBool aFirstFrameOfClip,TInt aMode, TBool aFromEncoder);
+
+ /**
+ * From CComposer composes the stream header.
+ * @param aStreamParameters Common stream parameters
+ * @param aOutputVideoTimeScale Video time scale for output file
+ * @param aOutputAudioTimeScale Audio time scale for output file
+ * @param aAudioFramesInSample Number of audio frames in sample
+ */
+ void ComposeHeaderL(CComposer::TStreamParameters& aStreamParameters,
+ TInt aOutputVideoTimeScale, TInt aOutputAudioTimeScale, TInt aAudioFramesInSample);
+
+ /**
+ * From CComposer Closes the composer instance
+ */
+ TInt Close();
+
+ /**
+ * From CComposer Calculate drive free space
+ */
+ TInt64 DriveFreeSpaceL();
+
+ /**
+ * Get the Composed Buffer
+ */
+ TUint8* GetComposedBuffer();
+
+ /**
+ * Get the Composed Buffer size till now
+ */
+ TUint GetComposedBufferSize();
+
+ TInt GetMp4SpecificSize(TDesC8& aSrcBuf,TBool aModeChange,TInt aStreamMode);
+
+ private:
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL(const TDesC &aFileName,
+ CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat,
+ CVedAVCEdit *aAvcEdit);
+
+ void ConstructL(RFile* aFileHandle,
+ CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat,
+ CVedAVCEdit *aAvcEdit);
+
+ void SetMediaOptions(CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat,
+ TUint& aMediaFlag);
+
+ void SetComposerOptionsL(CParser::TVideoFormat aVideoFormat,
+ CParser::TAudioFormat aAudioFormat);
+
+ TInt GetAVCDecoderSpecificInfoSize(TDesC8& aSrcBuf);
+
+ public: // New Functions
+
+ /**
+ * Writes audio decoder specific info which is required in case of AAC
+ *
+ * @param aSrcBuf - buffer containing the data to be written(decoder specific informtion)
+ */
+ TInt WriteAudioSpecificInfo(HBufC8*& aSrcBuf);
+
+ /**
+ * Writes audio decoder specific info which is required in case of AAC
+ *
+ * @param aSampleRate Output sample rate of the movie
+ * @param aNumChannels Output num. of audio channels
+ */
+ TInt WriteAudioSpecificInfo(TInt aSampleRate, TInt aNumChannels);
+
+ private: // Data
+
+ // The MP4 parser library handle
+ MP4Handle iMP4Handle;
+ mp4_u32 iVideoType;
+ mp4_u32 iAudioType;
+
+ // File server session handle
+ RFs iFS;
+ TBool iFsOpened;
+
+ // Output filename
+ TFileName iOutputMovieFileName;
+
+ // Drive number of the output file
+ TInt iDriveNumber;
+
+ // Remaining free disk space
+ TInt64 iFreeDiskSpace;
+
+ // Counter to check the real free disk space
+ TUint iFreeDiskSpaceCounter;
+
+ TBool iFirstWrite;
+
+ // for compose buffer
+ TUint8 *iComposeBuffer;
+ mp4_u32 iComposedSize;
+
+ // For AVC writing
+ TInt iFrameNumber;
+
+ CVedAVCEdit* iAvcEdit; // Avc editing instance
+
+ RFile* iFileHandle;
+ };
+
+#endif // __MP4COMPOSER_H__
+
+
+// End of File