diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CDisplaySinkDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CDisplaySinkDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,197 @@ +/* +* 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 CDISPLAYSINKDSA_H +#define CDISPLAYSINKDSA_H + +// INCLUDE FILES + +#include "CDisplaySink.h" +#include "TDisplaySinkParamsDSA.h" + +// CLASS DECLARATION + +/** +* Displaysink implementation for Direct Screen access. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( CDisplaySinkDSA ) : public CDisplaySink, + public MVtImageRotatorObserver + { +public: // static constructor + + /** + * Static constructor that may leave. + */ + static CDisplaySinkDSA* NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + +private: // constructors and destructor + + /** + * C++ default constructor. + */ + CDisplaySinkDSA(); + + /** + * destructor + */ + ~CDisplaySinkDSA(); + +private: // from CDisplaySink + + /** + * @see CDisplaySink::BaseConstructL + */ + void BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + + /** + * @see CDisplaySink::BaseConvert + */ + TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ); + + /** + * @see CDisplaySink::BaseSinkThreadLogonL + */ + void BaseSinkThreadLogonL(); + + /** + * @see CDisplaySink::BaseSinkThreadLogoff + */ + void BaseSinkThreadLogoff(); + + /** + * @see CDisplaySink::BaseUpdateSinkParamsL + */ + void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseDoUpdateParamsL(); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseSetVideoFrameSizeL( const TSize& aSize ); + + /** + * @see CDisplaySink::BaseSizesMatch + */ + TBool BaseSizesMatch( const TSize& aSize ); + + /** + * @see CDisplaySink::BitmapEntry + */ + TBitmapEntry& BitmapEntry( TInt aIndex ); + + /** + * @see CDisplaySink::BaseEmptyBufferL + */ + void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ); + + /** + * @see CDisplaySink::BaseSetBitmapAvailable + */ + void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ); + + /** + * @see CDisplaySink::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& aNewSize ); + +private: // from MVtImageRotatorObserver + + /** + * @see MVtImageRotatorObserver::RotationFinished + */ + void RotationFinished( TInt aError ); + +private: // new methods + + /** + * Updates expected frame size. + * @exception May leave with KErrNotSupported, if bitmap sizes do not match. + */ + void UpdateExpectedFrameSizeL(); + + /** + * Converts image. Calls DoConvertL() to do the task. + * @param "aBitmapNo" CFbsBitmap number to use for converted image. + * @param "aConverted" Reference to boolean that will be ETrue if buffer + * was converted, EFalse otherwise. + * @return KErrNone or one of the system wide error codes. + */ + void ConvertL( const TPtrC8& aBuffer, TBool& aConverted ); + + /** + * Convert YUV420Planar image to a CFbsBitmap. + * @param "aBitmapNo" CFbsBitmap number to use for converted image. + * @return KErrNone or one of the system wide error codes. + */ + void DoConvertL( const TPtrC8& aBuffer, TBitmapNo aBitmapNo ); + +private: // new classes + + // Class containing bitmap related data + class TBitmapEntryDSA : public TBitmapEntry + { + public: // data + + // Handle to target bitmap + TInt iHandle; // QCIF + }; + +private: // data + + // Array of bitmap related structures + TBitmapEntryDSA iBitmapTable[ KBitmapTableCount ]; + + // Converter for bitmap 1, created into Protocol thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverter1; // owned + + // Converter for bitmap 2, created into Protocol thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverter2; // owned + + // Converter for bitmap, created into VT thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverterVT; + + // Pointer to image rotator instance. + CVtImageRotator* iRotator; // owned + + // Source YUV image for image transforms + CVtImageIYUV* iSourceImg; + + // Target YUV image for image transforms + CVtImageIYUV* iTargetImg; + + // Rotation angle + CVtImageRotator::TRotationAngle iRotationAngle; + + // Store for saving new parameters in UpdateSinkParamsL() call + TDisplaySinkParamsDSA iNewParams; + }; + +#endif // CDISPLAYSINKDSA_H + +// End of File