javauis/mmapi_qt/audiostreaming/inc.emc/cmmastreamhandler.h
changeset 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/audiostreaming/inc.emc/cmmastreamhandler.h	Fri May 14 15:47:24 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+* Description:  Streams data from Java to controller
+*
+*/
+
+#ifndef CMMASTREAMHANDLER_H
+#define CMMASTREAMHANDLER_H
+
+//  INCLUDES
+#include "cmmastreamrequest.h"
+#include "mmmastreamrequestlistener.h"
+#include "mmmastreamhandlerlistener.h"
+#include <MDUChunkDataObserver.h>
+#include <MetaDataUtility.h>
+
+//EMC
+#include "StreamControl.h"
+#include "MMControlFactory.h"
+#include "DataBufferSource.h"
+#include "DataBuffer.h"
+#include "SinkControl.h"
+#include "StreamControlObserver.h"
+#include "SourceControlObserver.h"
+
+
+using namespace multimedia;
+using multimedia ::MStreamControl;
+using multimedia ::MDataBufferSource;
+using multimedia ::MDataBuffer;
+using multimedia ::CMultimediaFactory;
+using multimedia ::MSinkControl;
+using multimedia::MSourceControlObserver;
+using multimedia::MStreamControlObserver;
+using multimedia::MBufferProcessedEvent;
+
+//End EMC
+
+
+// CONSTANTS
+const TInt KMMAStreamHandlerBufferCount = 2;
+
+class CMMADataSourceStream;
+
+//  CLASS DECLARATION
+/**
+* This class read data from CMMADataSourceStream and writes it to
+* controller.
+*/
+NONSHARABLE_CLASS(CMMAStreamHandler): public CBase, public MControlObserver,
+        public MMMAStreamRequestListener, public MMDUChunkDataObserver
+{
+private:
+    // Streams internal state
+    enum TMMAStreamState
+    {
+        EMMAStreamPrepare = 0,
+        EMMAStreamPaused,
+        EMMAStreamStart,
+        EMMAStreamStarted,
+        EMMAStreamEof
+    };
+
+    // chunk data processed state
+    enum TMMAProcessedState
+    {
+        EMMANoneProcessed = 0,
+        EMMAMetaDataProcessed,
+        EMMABufferProcessed,
+        EMMABothProcessed
+    };
+
+public: // Construction
+    /**
+    * Creates new player.
+    */
+    static CMMAStreamHandler* NewL(
+        MMMAStreamHandlerListener& aListener,
+        MStreamControl& aMStreamControl,
+        MDataBufferSource& aMDataBufferSource,
+        CMultimediaFactory& aFactory,
+        CMetaDataUtility& aMetaDataUtility);
+
+    //   Destructor
+    ~CMMAStreamHandler();
+
+protected:
+    //   C++ constructor
+    CMMAStreamHandler(MMMAStreamHandlerListener& aResolver,
+                      MStreamControl& aMStreamControl,
+                      MDataBufferSource& aMDataBufferSource,
+                      CMultimediaFactory& aFactory,
+                      CMetaDataUtility& aMetaDataUtility);
+    void ConstructL();
+
+protected: // New methods
+
+public: // New methods
+    /**
+     * Prepares stream to play.
+     */
+    void Prepare(const TDesC8& aMimeType);
+
+    /**
+     * Stops handling requests. After this call data received from source
+     * stream will be buffered until StartL is called.
+     */
+    void Pause();
+
+    /**
+             * Stops handling requests and frees already read data
+             * without playing it.
+             */
+    void Stop();
+
+    /**
+     * Starts handling requests
+     */
+    void Start();
+
+    /**
+     * Sets source stream to read
+     */
+    void SetSourceStream(CMMADataSourceStream* aSourceStream);
+
+public: // From MMMAStreamRequestListener
+    void WriteComplete(CMMAStreamRequest* aRequest);
+    void ReadComplete(CMMAStreamRequest* aRequest);
+    void HandleError(CMMAStreamRequest* aRequest,
+                     TInt aError);
+
+public: // from MControlObserver
+    void Event(MControl* aControl,
+               TUint aEventType,
+               TAny* aEventObject);
+    TBool LastBufferWritten();
+
+public: // from MMDUChunkDataObserver
+    void HandleChunkDataProcessed(TInt aError);
+    void HandleChunkDataReadyToBeParsed();
+    void HandleChunkDataComplete(TInt aError);
+
+private:
+    /**
+     * Writes request to controller
+     */
+    void WriteRequest(CMMAStreamRequest* aRequest);
+
+private: // data
+    // Owned write requests
+    RPointerArray< CMMAStreamRequest > iRequests;
+
+    CMMAStreamRequest* iCurrentRequest;
+
+    // not owned source stream
+    CMMADataSourceStream* iSourceStream;
+
+    // EMC
+    // not owned
+    MStreamControl& iMStreamControl;
+    MDataBufferSource& iMDataBufferSource;
+    CMultimediaFactory& iFactory;
+
+    // owned
+    MDataBuffer *iBuffer;
+    TBool iLastBufferWritten;
+    //
+
+    // not owned listener
+    MMMAStreamHandlerListener& iListener;
+
+    // not owned
+    CMetaDataUtility& iMetaDataUtility;
+
+    // Stream's state
+    TMMAStreamState iState;
+
+    // Processed state of current chunk data
+    TMMAProcessedState iProcessedState;
+
+    // tells if metadata parsing can be started
+    TBool iMetaDataReadyToBeParsed;
+
+    // to be removed once MDU supports all the reqd formats
+    TBool iMimeTypeSupportedByMDU;
+};
+
+#endif // CMMASTREAMHANDLER_H