vtprotocolplugins/DisplaySink/inc/CDisplaySink.h
changeset 18 d9b6a8729acd
parent 4 6dc066157ed4
child 23 c378a0498b84
child 27 dcbddbbaf8fd
--- a/vtprotocolplugins/DisplaySink/inc/CDisplaySink.h	Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,671 +0,0 @@
-/*
-* Copyright (c) 2004 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:    DisplaySink subsystem.
-*
-*/
-
-
-
-
-#ifndef CDISPLAYSINK_H
-#define CDISPLAYSINK_H
-
-//  INCLUDE FILES
-
-#include <bldvariant.hrh>
-#include <e32base.h>
-#include <mmfutilities.h>
-#include <mmfdatasource.h>
-#include <mmfdatasink.h>
-#include <fbs.h>
-#include <mvtprotocolhandler.h>
-
-#include "mdisplaysink.h"
-
-// CONSTANTS
-
-// QCIF size
-#define QCIF TSize( 176, 144 )
-
-// Number of bitmap sets (big/small) in array
-const TInt KBitmapTableCount = 2;
-
-// FORWARD DECLARATIONS
-
-class CDisplaySink;
-class CVTYUVFbsBitmapConverter;
-class CVtCallback;
-class CVtImageIYUV;
-class CMMFDataBuffer;
-class CVtFrameQueue;
-
-// CLASS DECLARATION
-
-/**
-* CVtFrameQueue
-*
-* Storage class for DisplaySink. Used in situations where EmptyBufferL() is
-* called and there's no available bitmaps (or buffers). This class will
-* hold one buffer until next SetBitmapAvailable() is called. Instance operates
-* in protocol thread's active scheduler.
-*
-*  @lib DisplaySink.lib
-*/
-NONSHARABLE_CLASS( CVtFrameQueue ) : public CActive
-    {
-
-public: // new methods
-    /**
-    * C++ constructor.
-    */
-    CVtFrameQueue();
-
-    /**
-    * Adds this to protocol thread's active scheduler.
-    */
-    TInt ThreadLogon();
-
-    /**
-    * Releases stored buffer, when sink is stopped.
-    */
-    void SinkStoppedL();
-
-    /**
-    * Deques from protocol thread's active scheduler.
-    */
-    void ThreadLogoff();
-
-    /**
-    * Stores buffer & supplier.
-    */
-    void Store( MVTVideoSource& aSupplier, CMMFDataBuffer* aBuffer, TSize aFrameSize, TPtr8& aPtr );
-
-    /**
-    * Returns ETrue if buffer is being stored, EFalse otherwise.
-    */
-    TBool IsStored() const;
-
-    /**
-    * Returns stored buffer.
-    */
-    TVtMMFDataBuffer Buffer();
-
-    /**
-    * Releases stored buffer. Supplier's BufferEmptiedL() is called. Call
-    * is executed in protocol thread's context.
-    */
-    void Release();
-
-private:
-
-    /**
-    * Calls BufferEmptiedL() for supplier. This call always happens in protocol
-    * thread context.
-    * @param aBuffer Pointer reference to a buffer to be released.
-    */
-    void DoReleaseBufferL( CMMFDataBuffer*& aBuffer );
-
-private: // from CActive
-    /**
-    * @see CActive::RunL
-    */
-    void RunL();
-
-    /**
-    * @see CActive::DoCancel
-    */
-    void DoCancel();
-
-private:
-    // Stored supplier
-    MVTVideoSource* iSupplier;
-    // Stored buffer
-    CMMFDataBuffer* iBuffer;
-    
-    TSize iFrameSize;
-    TPtr8* iPtr;
-    // Pre-opened thread object that is used for signalling the delayed
-    // BufferEmptiedL() call
-    RThread iThread;
-    // Buffer to be released on next RunL()
-    CMMFDataBuffer* iReleaseBuffer;
-    };
-
-/**
-* CVtCallback
-*
-*
-*  @lib DisplaySink.lib
-*/
-NONSHARABLE_CLASS( CVtCallback ) : public CActive
-    {
-
-private:
-
-    /**
-    * Callback type. Currently only size changes are supported. If new callback
-    * types are needed, add them here.
-    */
-    enum TCallBackType
-        {
-        EVideoFrameSizeChanged
-        };
-
-public:
-
-    /**
-    * C++ constructor.
-    */
-    CVtCallback( MDisplaySinkObserver& aObserver );
-
-    /**
-    * C++ destructor.
-    */
-    ~CVtCallback();
-
-    /**
-    * Video frame size has been changed. Old and new size are given as
-    * parameter.
-    */
-    void VideoFrameSizeChangedL( const TSize& aFrom, const TSize& aTo );
-
-    /**
-    * Returns callback result.
-    */
-    TInt Result() const;
-
-    /**
-    * Boolean variable that tells wether or not call back has been served.
-    */
-    TBool Completed() const;
-
-private:
-
-    /**
-    * Issues callback. Because callback receiver can be in same or different
-    * thread this is made as own function that checks whether or not other
-    * thread needs to be signalled.
-    */
-    void IssueCallbackL();
-
-private: // from CActive
-
-    /**
-    * See CActive documentation.
-    */
-    void RunL();
-
-    /**
-    * See CActive documentation.
-    */
-    void DoCancel();
-
-    /**
-    * See CActive documentation.
-    */
-    TInt RunError( TInt aError );
-
-private:
-
-    // Owner thread's id
-    TThreadId iOwnThreadId;
-
-    // Pointer to observer
-    MDisplaySinkObserver* iObserver;
-
-    // Callback type
-    TCallBackType iCallBackType;
-
-    // Old size
-    TSize iFrom;
-
-    // New size
-    TSize iTo;
-
-    // Callback result
-    TInt iResult;
-
-    // Has callback been completed?
-    TBool iCompleted;
-    };
-
-
-/**
-*  MVTVideoSink interface implementation
-*
-*  @lib DisplaySink.lib
-*/
-NONSHARABLE_CLASS( CDisplaySink ) : public CBase, public MDisplaySink,
-    public MVTVideoSink
-{
-protected: // inner classes
-
-    // Structure containing bitmap related data
-    class TBitmapEntry
-        {
-    public: // data
-
-        // ETrue if this bitmap entry is free
-        TBool iIsFree;
-        };
-
-private:  // from MDisplaySink
-
-    /**
-    * @see MDisplaySink::Destroy
-    */
-    void Destroy();
-
-    /**
-    * @see MDisplaySink::SetBitmapAvailable
-    */
-    void SetBitmapAvailable( TBitmapNo aBitmapNo );
-
-    /**
-    * @see MDisplaySink::Release
-    */
-    void Release();
-
-    /**
-    * @see MDisplaySink::UpdateSinkParamsL
-    */
-    void UpdateSinkParamsL( const TDisplaySinkParams& aParams, TBool& aUpdated );
-
-    /**
-    * @see MDisplaySink::Pause
-    */
-    void Pause();
-
-    /**
-    * @see MDisplaySink::Resume
-    */
-    void Resume();
-
-    /**
-    * @see MDisplaySink::operator MVTVideoSink&
-    */
-    operator MVTVideoSink&();
-
-    /**
-    * @see MDisplaySink::NextFrame
-    */
-    void NextFrame();
-
-private:  // from MVTVideoSink
-    /**
-    * From MVTVideoOutput. See MVTVideoOutput for description.
-    */
-    virtual void SetFormatL( const TDesC8& aFormat );
-
-    /**
-    * From MVTVideoOutput. See MVTVideoOutput for description.
-    */
-    virtual void SetVideoFrameSizeL( const TSize& aSize );
-
-    /**
-    * From MVTVideoOutput. See MVTVideoOutput for description.
-    */
-    virtual void GetVideoFrameSizeL( TSize& aSize ) const;
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual void EmptyBufferL(
-        TVtMMFDataBuffer aDataBuffer,
-        MVTVideoSource* aSupplier,
-        TMediaId aMediaId );
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual void BufferFilledL( CMMFBuffer* aBuffer );
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TBool CanCreateSinkBuffer();
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual CMMFBuffer* CreateSinkBufferL(
-        TMediaId aMediaId,
-        TBool &aReference );
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler );
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual void SinkThreadLogoff();
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TInt SinkPrimeL();
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TInt SinkPlayL();
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TInt SinkPauseL();
-
-    /**
-    * From MVTVideoSink. See MVTVideoSink for description.
-    */
-    virtual TInt SinkStopL();
-
-private:
-    const RArray<TDesC8* >& GetMultimediaTypesL() const;
-
-
-protected: // Constructors and destructor
-
-    /**
-    * C++ default constructor.
-    */
-    CDisplaySink();
-
-    /**
-    * Destructor.
-    */
-    ~CDisplaySink();
-
-protected:    // New functions
-
-    /**
-    * By default Symbian 2nd phase constructor is private.
-    * @param "aParams" Initialization parameters.
-    * @param "aInitData" Initialization parameters. Not used.
-    * @exception Can leave with one of the system wide error codes.
-    */
-    void ConstructL( TDisplaySinkParams& aParams, const TDesC8& aInitData );
-
-    /**
-    * Thread logon that may leave. This will be trapped and possible
-    * error code is returned to the caller of SinkThreadLogon().
-    * @exception Can leave with one of the system wide error codes.
-    */
-    void SinkThreadLogonL();
-
-    /**
-    * Sets limit for displaysink frame rate.
-    */
-    void SetFrameRateLimit(
-        TDisplaySinkParams::TFrameRateLimit aFrameRateLimit );
-
-    /**
-    * Resets frame rate limitter.
-    */
-    void ResetFrameRateLimitter();
-
-    /**
-    * Does frame rate limitter validation and also checks if sink is paused.
-    */
-    TBool IsOkToSendFrame();
-
-    /**
-    * Opens fbs session and sets flag, if open succeeds.
-    */
-    void FbsConnectL();
-
-    /**
-    * Opens VT engine thread.
-    */
-    void ThreadOpenL();
-
-    /**
-    * Closes fbs session (if open succeeded earlier).
-    */
-    void FbsDisconnect();
-
-    /**
-    * Closes VT thread (if open succeeded earlier).
-    */
-    void ThreadClose();
-
-    /**
-    * Cleanup operation for SinkThradLogon.
-    */
-    static void SinkThreadLogonCleanup( TAny* aPtr );
-
-private: // new methods implemented in derived classes
-
-    /**
-    * Called from ConstructL() to allow inherited classes to do their own
-    * construction.
-    */
-    virtual void BaseConstructL( TDisplaySinkParams& aParams,
-        const TDesC8& aInitData ) = 0;
-
-    /**
-    * Converts image. Calls DoConvertL() to do the task.
-    * @return KErrNone or one of the system wide error codes.
-    */
-    virtual TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ) = 0;
-
-    /**
-    * Called from SinkThreadLogonL().
-    */
-    virtual void BaseSinkThreadLogonL() = 0;
-
-    /**
-    * Called from SinkThreadLogogg().
-    */
-    virtual void BaseSinkThreadLogoff() = 0;
-
-    /**
-    * Called from UpdateSinkParamsL().
-    */
-    virtual void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ) = 0;
-
-    /**
-    * Updates sink params.
-    * @exception May leave with one of the system wide error codes (e.g. in
-    * out of memory situaton).
-    */
-    virtual void BaseDoUpdateParamsL() = 0;
-
-    /**
-    * Called when video frame size is set.
-    * @exception May leave with one of the system wide error codes (e.g. in
-    * out of memory situaton).
-    */
-    virtual void BaseSetVideoFrameSizeL( const TSize& aSize ) = 0;
-
-    /**
-    * Returns ETrue if given frame size matches with expected frame size.
-    * Implemented in derived classes because in some cases (e.g. when rotation
-    * is enabled), size calculation is more complicated.
-    */
-    virtual TBool BaseSizesMatch( const TSize& aSize ) = 0;
-
-    /**
-    * Returns reference to TBitmapEntry.
-    */
-    virtual TBitmapEntry& BitmapEntry( TInt aIndex ) = 0;
-
-    /**
-    * EmptyBuffer handling.
-    */
-    virtual void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ) = 0;
-
-    /**
-    * Bitmap availability handling.
-    */
-    virtual void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) = 0;
-
-    /**
-    * Called when source frame size changes.
-    */
-    virtual void BaseVideoFrameSizeChangedL( const TSize& aNewSize ) = 0;
-
-protected:    // Data
-
-    // Video source that provides buffer filled with video frame(s)
-    MVTVideoSource* iSupplier;
-
-    // Event handler to notify events
-    MAsyncEventHandler* iEventHandler;
-
-    // Buffer containing video frame(s) and to be converted
-    CMMFBuffer* iBuffer;
-
-    // Sink data type code as fourCC code
-    TFourCC iSinkFourCC;
-
-    // Sink state enumeration
-    enum TState
-        {
-        EStopped,
-        EPrimed,
-        EPlaying
-        };
-
-    // Sink state
-    TState iState;
-
-    // Array of MIME types supported by sink
-    RArray<TDesC8* > iVTMimeTypes;
-
-    // Video frame size
-    TSize iFrameSize;
-
-    // Thread ID of thread to notify after video frame is converted
-    TThreadId iThreadId;
-
-    // Handle to thread to notify after video frame is converted
-    RThread iThread;
-
-    // Pointer to iStatus member of the Active Object to notify
-    // after video frame is converted
-    TRequestStatus* iRequestStatusPtr;
-
-    // Critical section to serialize access to iBitmapTable
-    RCriticalSection iBitmapCS;
-
-    // Semaphore to force thread context switch after video frame
-    // is converted
-    RSemaphore iSync;
-
-    
-    // This is set to ETrue when new params are set, this pointer
-    // is also used as flag when parameter update is requested.
-    TBool* iParamsUpdated;
-
-    // This flag variable will be set to ETrue when sink parameters
-    // need to be updated (e.g. when frame size changes from QCIF
-    // to Sub QCIF or vice versa)
-    TBool iWaitingForUpdate;
-
-    // Contains expected frame size (this is taken from given bitmaps).
-    TSize iExpectedFrameSize;
-
-    // Active object that will call callbacks to VT engine in VT
-    // engine's thread context.
-    CVtCallback* iVTSignaller;
-
-    // If ETrue, sink does not convert data that is given to it
-    TBool iReleased;
-
-    // Output MIME type holder
-    TBuf8< 128 > iYuv420PlanarDesc;
-
-    // Frame rate interval in milliseconds
-    TInt iFrameRateInterval;
-
-    // Time since last frame was sent (in milliseconds)
-    TInt iMilliSecondsSinceLastFrame;
-
-    // Time stamp for last frame sent
-    TTime iLastFrameTime;
-
-    // When paused remote video will no be sent to VT engine
-    TBool iPaused;
-
-    // DisplaySink params flags
-    TUint32 iDSFlags;
-
-    // Is set to ETrue when SinkThreadLogon() is called.
-    TUint32 iInitFlags;
-
-    // Initialization flags
-    enum TInitFlags
-        {
-        // This flag is set, when SinkThreadLogon() is called
-        ESinkThreadLogonCalled = ( 1 << 0 ),
-
-        // This flag is set, when FbsSession has been connected
-        EFbsSessionConnected = ( 1 << 1 ),
-
-        // This flag is set, when handle to Sink Thread has been opened
-        EThreadOpened = ( 1 << 2 )
-        };
-
-    // Frame queue for holding for holding frames until target conversion
-    // buffer is ready.
-    CVtFrameQueue* iVideoFrameQueue;
-
-    // friend classes
-
-
-    };
-
-/**
-*  Safe cleanup for synchronization primitives.
-*
-*  @lib DisplaySink.lib
-*/
-template < class T >
-class CleanupSignal
-	{
-public:
-    static void PushL( T& aPtr );
-private:
-    static void Signal( TAny *aPtr );
-	};
-
-template < class T >
-void CleanupSignal< T >::PushL( T& aRef )
-	{
-    CleanupStack::PushL( TCleanupItem( &Signal, &aRef ) );
-    }
-
-template < class T >
-void CleanupSignal< T >::Signal( TAny *aPtr )
-	{
-    static_cast< T* >( aPtr )->Signal();
-    }
-
-/**
-* Pushes signalable object into cleanup stack.
-*/
-template < class T >
-void CleanupSignalPushL( T& aRef )
-    {
-    CleanupSignal< T >::PushL( aRef );
-    }
-
-#endif      // CDISPLAYSINK_H
-
-// End of File
-
-