--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedengine/videoprocessor/inc/mp4demux.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,229 @@
+/*
+* 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:
+*
+*
+*/
+/*
+* ============================================================================
+* Name : Mp4demux.h
+* Part of : Videoplayer
+* Origin :
+* Created : Mon Sep 10 13:48:59 2001 by jykokkon
+* Description:
+*
+* Version :
+* %version: 3 %, %date_modified: Wed Jan 28 15:16:13 2009 % by %derived_by: mkarimak %
+*
+* ---------------------------------------------------------------------------
+* Version history:
+* Template version: 1.02, 21.6.2000 by maparnan
+* <ccm_history>
+*
+* Version: 1, Mon Sep 10 13:49:00 2001 by jykokkon
+* Ref: ?reference_to_reason_doc_if_any (e.g. ActionDb Id)
+* ?change_reason_comment
+*
+* </ccm_history>
+* ============================================================================
+*/
+
+#ifndef __MP4DEMUX_H__
+#define __MP4DEMUX_H__
+
+// INCLUDES
+
+#ifndef __DEMULTIPLEXER_H__
+#include "demultiplexer.h"
+#endif
+
+// FORWARD DECLARATIONS
+
+class CActiveQueue;
+class CStatusMonitor;
+class CMP4Parser;
+
+// CLASS DEFINITIONS
+
+class CMP4Demux : public CDemultiplexer
+ {
+ public: // Constants
+
+ enum TErrorCode
+ {
+ EInternalAssertionFailure = -2300
+ };
+
+ // The type of data in an output channel
+ enum TChannelDataType
+ {
+ EDataNone = 0,
+ EDataAudio,
+ EDataVideo
+ };
+
+ public: // Data structures
+
+ // Demux parameters
+ struct TStreamParameters
+ {
+ TUint iPicturePeriodMs;
+ TUint iAudioFramesInSample;
+ };
+
+ // One output channel
+ struct TOutputChannel
+ {
+ TChannelDataType iDataType;
+ CActiveQueue *iTargetQueue;
+ };
+
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+
+ static CMP4Demux* NewL(CActiveQueue *anInputQueue,
+ TUint aNumChannels, TOutputChannel *aOutputChannels,
+ TStreamParameters *aParameters,
+ CStatusMonitor *aStatusMonitor,
+ CMP4Parser *aParser,
+ TInt aPriority=EPriorityStandard);
+
+ /**
+ * Destructor.
+ */
+ ~CMP4Demux();
+
+ public: // New functions
+
+ /**
+ * Read a number of frames to video queue
+ *
+ * @param aCount Number of frames to read
+ * @return Error code
+ */
+ TInt ReadVideoFrames(TInt aCount);
+
+ public: // Functions from base classes
+
+ /**
+ * From CDemultiplexer Start demultiplexing
+ */
+ void Start();
+
+ /**
+ * From CDemultiplexer Stop demultiplexing
+ */
+ void Stop();
+
+ /**
+ * From CDataProcessor Standard active object running method
+ */
+ void RunL();
+
+ /**
+ * From CDataProcessor Called by the input queue object when
+ * the input stream has ended
+ * @param aUserPointer user data pointer
+ */
+ void StreamEndReached(TAny *aUserPointer);
+
+ /**
+ * From CDataProcessor Cancels any asynchronous requests pending
+ */
+ void DoCancel();
+
+ private: // Internal methods
+
+ /**
+ * C++ default constructor.
+ */
+ CMP4Demux(CActiveQueue *anInputQueue,
+ TUint aNumChannels, TOutputChannel *aOutputChannels,
+ TStreamParameters *aParameters,
+ CStatusMonitor *aStatusMonitor,
+ CMP4Parser *aParser,
+ TInt aPriority);
+
+ /**
+ * Second-phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * Select audio/video frame to be demuxed next
+ * (used when stream is in a local file)
+ */
+ void SetFrameType();
+
+ /**
+ * Get number of free blocks in target queue
+ * @return TUint number of blocks
+ */
+ TUint NumFreeBlocks();
+
+ /**
+ * Get information about next frame from parser
+ * @return TInt error code
+ */
+ TInt GetFrameInfo();
+
+ /**
+ * Read next frame(s) from parser & send them to
+ * decoder
+ * @return TInt error code
+ */
+ TInt ReadAndSendFrames();
+
+ private: // Data
+ CStatusMonitor *iMonitor; // status monitor object
+ CActiveQueue *iInputQueue; // input data queue
+ CMP4Parser *iParser; // MP4 format parser object
+
+ TUint iNumOutputChannels; // the number of output channels used
+ TOutputChannel *iOutputChannels; // the output channels
+
+ TBool iGotFrame; // TRUE if a frame is available
+
+ TUint iBytesDemuxed; // bytes demuxed during current run
+
+ TOutputChannel *iVideoChannel; // the channel used for output space checks
+ TOutputChannel *iAudioChannel; // the channel used for output space checks
+
+ TUint iAudioFramesInSample; // number of audio frames in MP4 sample
+ TUint iPicturePeriodMs; // average coded picture period
+
+ TBool iDemultiplexing; // are we demuxing?
+
+ TUint iFrameLen; // length of next frame to be retrieved
+ TChannelDataType iFrameType; // type of next frame to be retrieved
+
+ TBool iAudioEnd;
+ TBool iVideoEnd;
+ TBool iStreamEnd; // has the stream end been reached?
+ TBool iStreamEndDemuxed; // have we demultiplexed everything up to strem end?
+ TBool iReaderSet; // have we been set as a reader to the input queue?
+ TBool iWriterSet; // have we been set as a writer to the output queues?
+
+ TPtr8 *iInputBlock; // current input queue block
+
+ };
+
+#endif // __MP4DEMUX_H__
+
+// End of File