williamr@2: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef IMAGECONVERSIONEXTENSION_H williamr@2: #define IMAGECONVERSIONEXTENSION_H williamr@2: williamr@2: #include williamr@2: class MImageConvExtension; williamr@2: class MImageConvOperation; williamr@2: class MImageConvScaler; williamr@2: class MImageConvStreamedDecode; williamr@2: class MImageConvStreamedEncode; williamr@2: class TFrameLayout; williamr@2: class CImageFrame; williamr@2: class CFrameImageData; williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: /** williamr@2: Image Conversion Library extensions. When applied together there is an implicit order for operations: williamr@2: 1. Crop or clip. williamr@2: 2. Scale williamr@2: 3. Rotate / mirror over axis. williamr@2: */ williamr@2: williamr@2: /** williamr@2: Operation extension for Image Conversion Library. Allows rotation and mirror over axis. williamr@2: */ williamr@2: class TImageConvOperation williamr@2: { williamr@2: friend class CImageDecoder; williamr@2: friend class CImageEncoder; williamr@2: williamr@2: public: williamr@2: williamr@2: williamr@2: /** williamr@2: Operations or transforms on an image. williamr@2: */ williamr@2: enum TOperation williamr@2: { williamr@2: /** Rotate source 90 degrees clockwise. williamr@2: */ williamr@2: ERotation90DegreesClockwise = 0x01, williamr@2: /** Rotate source 180 degrees clockwise. williamr@2: */ williamr@2: ERotation180DegreesClockwise = 0x02, williamr@2: /** Rotate source 270 degrees clockwise. williamr@2: */ williamr@2: ERotation270DegreesClockwise = 0x04, williamr@2: /** Mirror source about the horizontal axis. williamr@2: */ williamr@2: EMirrorHorizontalAxis = 0x08, williamr@2: /** Mirror source about the vertical axis. williamr@2: */ williamr@2: EMirrorVerticalAxis = 0x10 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Get the codec plugin's capabilities. williamr@2: williamr@2: @return Bitmask combination of TOperation. Bit is set if decoder plugin supports the operation. williamr@2: */ williamr@2: IMPORT_C TUint Capabilities() const; williamr@2: williamr@2: /** williamr@2: Set up an operation be applied to the source. May be called more than once williamr@2: to set up a stack of operations, but it is not possible to add more than one williamr@2: operation in a single call. williamr@2: The operations are applied to the image in the same order as they are added. williamr@2: williamr@2: @param aOperation The operation to add to the current stack of operations. williamr@2: williamr@2: @leave if more than one TOperation enum is passed for each individual call williamr@2: */ williamr@2: IMPORT_C void AddOperationL(TOperation aOperation); williamr@2: williamr@2: /** williamr@2: Remove all operations previously set. williamr@2: */ williamr@2: IMPORT_C void ClearOperationStack(); williamr@2: williamr@2: private: williamr@2: williamr@2: IMPORT_C TImageConvOperation(); williamr@2: void SetExtension(MImageConvExtension* aExtension); williamr@2: williamr@2: private: williamr@2: MImageConvOperation* iExtension; williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Represents scaling capabilities of the code plugin. williamr@2: */ williamr@2: class TScalerCaps williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Constructor williamr@2: */ williamr@2: IMPORT_C TScalerCaps(); williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: williamr@2: @param aMaxUpscaleLimit Maximum upscaling possible. williamr@2: @param aMaxDownscaleLimit Maximum downscaling possible. williamr@2: @param aPreserveAspectRatioIsNeeded ETrue if only support preservation of aspect ratio. williamr@2: */ williamr@2: IMPORT_C TScalerCaps(TInt aMaxUpscaleLimit,TInt aMaxDownscaleLimit,TBool aPreserveAspectRatioIsNeeded); williamr@2: williamr@2: /** williamr@2: Maximum upscaling possible. williamr@2: @return value >= 1 : 1 means cannot upscale, 2 means twice original size williamr@2: */ williamr@2: IMPORT_C TInt MaxUpscaleLimit() const; williamr@2: williamr@2: /** williamr@2: Maximum downscaling possible. williamr@2: @return value <= -1 : -1 means cannot downscale, -2 means half original size williamr@2: */ williamr@2: IMPORT_C TInt MaxDownscaleLimit() const; williamr@2: williamr@2: /** williamr@2: Type of scaling which is supported. williamr@2: williamr@2: @return ETrue if can only do 1/2, 1/4, 1/8 etc downscale (limit depends on iMaxDownscaleLimit) williamr@2: 2, 4, 8 etc upscale (limit depends on iMaxUpscaleLimit) williamr@2: EFalse if can do arbitrary scaling between iMaxDownscaleLimit and iMaxUpscaleLimit williamr@2: */ williamr@2: IMPORT_C TBool PowerOfTwoScalingOnly() const; williamr@2: williamr@2: /** williamr@2: Returns ETrue if the codec must preserve aspect ratio during scaling. williamr@2: williamr@2: @return ETrue if scaling is only possible if preservation of aspect ratio is requested. williamr@2: EFalse if scaling without preserving aspect ratio is possible. williamr@2: */ williamr@2: IMPORT_C TBool MustPreserveAspectRatio() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Size() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Version() const; williamr@2: williamr@2: private: williamr@2: TInt iMaxUpscaleLimit; // >= 1 : 2 means twice original size williamr@2: TBool iMustPreserveAspectRatio; // If ETrue then can only do scaling whilst preserving aspect ratio williamr@2: TInt iMaxDownscaleLimit; // <= -1 : -2 means 1/2 original size williamr@2: TBool iPowerOfTwoScalingOnly; williamr@2: TUint iSizeVersion; // bits 31 to 8 size, 7 to 0 contain version williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Scaling extension for Image Conversion Library. Supports both arbitrary or 'power of two' 1/2, 1/4, 1/8 scaling williamr@2: */ williamr@2: class TImageConvScaler williamr@2: { williamr@2: friend class CImageDecoder; williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: Quality used during scaling. williamr@2: */ williamr@2: enum TScalerQuality williamr@2: { williamr@2: EMinimumQuality, // = 0 williamr@2: EMediumQuality, williamr@2: EMaximumQuality williamr@2: }; williamr@2: williamr@2: /** williamr@2: Get the codec plugin's capabilities. williamr@2: williamr@2: @param aCaps Returns scaling capabilities of the codec plugin. williamr@2: */ williamr@2: IMPORT_C void GetCapabilities(TScalerCaps& aCaps) const; williamr@2: williamr@2: /** williamr@2: Request scaling to the desired size using the quality specified and specifying if the aspect ratio is to williamr@2: be preserved. williamr@2: Ensure that CImageDecoder::GetDestinationSize is used to obtain the size of destination bitmap passed williamr@2: to CImageDecoder::Convert if scaling is set up by calling this method. williamr@2: williamr@2: @param aDesiredSize Proposed size of the scaled image. Note that this may not necessarily be the size williamr@2: returned by a subsequent call to CImageDecoder::GetDestinationSize and is dependant upon the operations williamr@2: (such as scaling, cropping and rotation) requested and also the capabilities of the plugin (which can be williamr@2: queried using TImageConvScaler::GetCapabilities). williamr@2: williamr@2: Example: If a plugin is only capable of power of two scaling, with an original image size of 600x400, williamr@2: then calling this SetScalingL function with a desired size of 500x300 will result in a subsequent call to williamr@2: CImageDecoder::GetDestinationSize returning a size of 300x200 (that is, a scaling coefficient of -2). williamr@2: williamr@2: @param aQuality Desired quality of the image. Allows codec to lower quality targets to williamr@2: improve performance. williamr@2: williamr@2: @param aLockAspectRatio Set to ETrue if the aspect ratio of the original image is to be preserved. williamr@2: williamr@2: @leave KErrNotSupported if an invalid size is passed. williamr@2: @leave KErrNotSupported if aLockAspectRatio is EFalse and codec only supports preservation of aspect ratio. williamr@2: williamr@2: @see CImageDecoder::Convert williamr@2: @see CImageDecoder::GetDestinationSize williamr@2: @see TImageConvScaler::GetCapabilities williamr@2: */ williamr@2: IMPORT_C void SetScalingL(const TSize& aDesiredSize, TImageConvScaler::TScalerQuality aQuality, TBool aLockAspectRatio); williamr@2: williamr@2: /** williamr@2: Define the scaling to be applied to the image according to the given coefficient at the requested quality. williamr@2: Ensure that CImageDecoder::GetDestinationSize is used to obtain the size of destination bitmap to be passed williamr@2: to CImageDecoder::Convert. williamr@2: williamr@2: @param aScalingCoeff Scale to apply to the source. 2 means twice the original size, -2 half the size. williamr@2: Do not confuse this with ReductionFactor where 2 indicates 1/2 size. williamr@2: williamr@2: @param aScalingQuality Desired quality of the image. Allows codec to lower quality targets to williamr@2: improve performance. williamr@2: williamr@2: @leave KErrNotSupported if codec cannot perform the requested scale. williamr@2: williamr@2: @see CImageDecoder::Convert williamr@2: */ williamr@2: IMPORT_C void SetScalingL(TInt aScalingCoeff, TImageConvScaler::TScalerQuality aScalingQuality); williamr@2: williamr@2: private: williamr@2: IMPORT_C TImageConvScaler(); williamr@2: void SetExtension(MImageConvExtension* aExtension); williamr@2: williamr@2: private: williamr@2: MImageConvScaler* iExtension; williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: /** williamr@2: 'Block' streaming extension capabilities. williamr@2: */ williamr@2: class TDecodeStreamCaps williamr@2: { williamr@2: public: williamr@2: /** Navigation possibilities within stream. williamr@2: */ williamr@2: enum TNavigation williamr@2: { williamr@2: /** Blocks are returned from first to last */ williamr@2: ENavigationSequentialForward = 0x01, williamr@2: williamr@2: /** Blocks are returned in a random order but moving only from first to last e.g. 1, 5, 18...*/ williamr@2: ENavigationRandomForward = 0x02, williamr@2: williamr@2: /** Blocks are returned in a random order but moving only from last to first e.g. 18, 5, 1...*/ williamr@2: ENavigationRandomBackwards = 0x04, williamr@2: williamr@2: /** Blocks are returned randomly e.g. 18, 5, 20, ...*/ williamr@2: ENavigationRandom = 0x08, williamr@2: williamr@2: /** Blocks are returned from last to first */ williamr@2: ENavigationSequentialBackwards = 0x10 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: */ williamr@2: IMPORT_C TDecodeStreamCaps(); williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: williamr@2: @param aMaxBlocksPerRequest Maximum number of blocks that can be returned from the stream to client in a williamr@2: single request. williamr@2: @param aMinBlockSizeInPixels Minimum size in pixels of a block returned from the stream to the client in williamr@2: a single request. williamr@2: @param aOptimalBlocksPerRequest Optimum number of blocks returned from the stream to the client in williamr@2: a single request to get maximum performance benefit. williamr@2: @param aStreamSizeInBlocks Number of blocks of size MinBlockSizeInPixels() in the stream. williamr@2: @param aNavigation Navigation capabilities. williamr@2: */ williamr@2: IMPORT_C TDecodeStreamCaps(TInt aMaxBlocksPerRequest, const TSize& aMinBlockSizeInPixels, williamr@2: TInt aOptimalBlocksPerRequest, TInt aStreamSizeInBlocks, williamr@2: TDecodeStreamCaps::TNavigation aNavigation); williamr@2: williamr@2: /** williamr@2: The maximum number of blocks that can be returned from the stream to client in a williamr@2: single request. williamr@2: williamr@2: @return Maximum number of blocks that can be returned from the stream to client in a williamr@2: single request. williamr@2: */ williamr@2: IMPORT_C TInt MaxBlocksPerRequest() const; williamr@2: williamr@2: /** williamr@2: The Minimum size in pixels of a block returned from the stream to the client in williamr@2: a single request. williamr@2: williamr@2: @return Minimum size in pixels of a block returned from the stream to the client in williamr@2: a single request. Sequence numbers and StreamSizeInBlocks() refer to this size of block. williamr@2: */ williamr@2: IMPORT_C const TSize& MinBlockSizeInPixels() const; williamr@2: williamr@2: /** williamr@2: Optimum number of blocks returned from the stream to the client in williamr@2: a single request to get maximum performance benefit. williamr@2: williamr@2: @return Optimum number of blocks returned from the stream to the client in williamr@2: a single request to get maximum performance benefit. williamr@2: This can be used to determine the optimum value of the number of blocks of min block size per request. williamr@2: */ williamr@2: IMPORT_C TInt OptimalBlocksPerRequest() const; williamr@2: williamr@2: /** williamr@2: Number of blocks of size MinBlockSizeInPixels() in the stream. williamr@2: williamr@2: @return Number of blocks of size MinBlockSizeInPixels() in the stream. williamr@2: */ williamr@2: IMPORT_C TInt StreamSizeInBlocks() const; williamr@2: williamr@2: /** williamr@2: Navigation capabilities. williamr@2: williamr@2: @return Navigation capabilities. williamr@2: williamr@2: Full random access to the stream if Navigation() returns williamr@2: ENavigationSequentialForward | ENavigationRandomForward | ENavigationRandomBackwards williamr@2: */ williamr@2: IMPORT_C TDecodeStreamCaps::TNavigation Navigation() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Size() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Version() const; williamr@2: williamr@2: private: williamr@2: TInt iMaxBlocksPerRequest; williamr@2: TSize iMinBlockSizeInPixels; williamr@2: TInt iOptimalBlocksPerRequest; williamr@2: TInt iStreamSizeInBlocks; williamr@2: TNavigation iNavigation; williamr@2: TUint iSizeVersion; // bits 31 to 8 size, 7 to 0 contain version williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: /** williamr@2: 'Block' streaming extension for Image Conversion Library decoder. williamr@2: */ williamr@2: class TImageConvStreamedDecode williamr@2: { williamr@2: friend class CImageDecoder; williamr@2: williamr@2: public: williamr@2: /** williamr@2: Returns a list of supported formats and the optimal format to be used. @see imageframeconst.h williamr@2: for a list of format uids. williamr@2: @param aFormats Returns an array of format uids williamr@2: @param aOptimalFormat The 'best' uid to use. williamr@2: */ williamr@2: IMPORT_C void GetSupportedFormatsL(RArray& aFormats, TUid& aOptimalFormat) const; williamr@2: williamr@2: /** williamr@2: Returns the capabilities of the codec plugin for a specific format and for a specific frame. williamr@2: @param aFormat The format. williamr@2: @param aFrameNumber frame to stream williamr@2: @param aCaps The capabilities for the format given. williamr@2: */ williamr@2: IMPORT_C void GetCapabilities(TUid aFormat, TInt aFrameNumber, TDecodeStreamCaps& aCaps) const; williamr@2: williamr@2: /** williamr@2: Get the size of the memory buffer to hold the returned data. williamr@2: williamr@2: @param aFormat the required format williamr@2: @param aBlockSizeInPixels returns the size in pixels of the block returned from the stream when aNumBlocks of minimum block size are requested. williamr@2: @param aNumBlocks the number of blocks of size TDecodeStreamCaps::MinBlockSizeInPixels() to be returned by one request williamr@2: williamr@2: @return The memory buffer size in bytes to hold the requested blocks. System wide error if for example williamr@2: the format is not supported. williamr@2: */ williamr@2: IMPORT_C TInt GetBufferSize(TUid aFormat, TSize& aBlockSizeInPixels, TInt aNumBlocks) const; williamr@2: williamr@2: williamr@2: /** williamr@2: Initialise the stream. williamr@2: williamr@2: @param aFormat the format to use williamr@2: @param aFrameNumber frame to stream williamr@2: @param aNavigation indication to stream of the way that the stream will be navigated. Allows williamr@2: codec to optimise it's behaviour. williamr@2: @leave System wide error if for example the format is not supported. williamr@2: williamr@2: @note must call InitFrameL before GetBlocks or GetNextBlocks. Failure to do so completes request with williamr@2: KErrNotReady williamr@2: */ williamr@2: IMPORT_C void InitFrameL(TUid aFormat, TInt aFrameNumber, TDecodeStreamCaps::TNavigation aNavigation); williamr@2: williamr@2: /** williamr@2: Start asynchronous call to return random blocks from the stream williamr@2: williamr@2: @param aStatus request status williamr@2: @param aFrame An image frame wrapper a memory buffer to hold the returned block(s) of williamr@2: pixel data. This can be 'uninitialised' or given specific format which must match that williamr@2: specified in the InitFrameL call. williamr@2: @param aSeqPosition block number starting at top left 0 ... TDecodeStreamCaps::StreamSizeInBlocks() williamr@2: @param aNumBlocksToGet number of blocks requested williamr@2: @param aNumBlocksRead number of blocks which will be returned when the request completes williamr@2: williamr@2: @note use CImageDecoder::Cancel() to cancel this request. williamr@2: */ williamr@2: IMPORT_C void GetBlocks(TRequestStatus& aStatus, CImageFrame& aFrame, TInt aSeqPosition, TInt aNumBlocksToGet, TInt& aNumBlocksRead); williamr@2: williamr@2: /** williamr@2: Start asynchronous call to return blocks sequentially from the stream. Blocks are returned williamr@2: from the first block until the last in the stream. williamr@2: williamr@2: @param aStatus request status williamr@2: @param aFrame An image frame wrapper a memory buffer to hold the returned block(s) of williamr@2: pixel data. This can be 'uninitialised' or given specific format which must match that williamr@2: specified in the InitFrameL call. williamr@2: @param aNumBlocksToGet number of blocks requested williamr@2: @param aNumBlocksRead number of blocks which will be returned when the request completes williamr@2: williamr@2: @note use CImageDecoder::Cancel() to cancel this request. williamr@2: */ williamr@2: IMPORT_C void GetNextBlocks(TRequestStatus& aStatus, CImageFrame& aFrame, TInt aNumBlocksToGet, TInt& aNumBlocksRead, TBool& aHaveMoreBlocks); williamr@2: williamr@2: private: williamr@2: IMPORT_C TImageConvStreamedDecode(); williamr@2: void SetExtension(MImageConvExtension* aExtension); williamr@2: williamr@2: private: williamr@2: MImageConvStreamedDecode* iExtension; williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: /** williamr@2: 'Block' streaming extension for Image Conversion Library encoder. williamr@2: */ williamr@2: /** williamr@2: 'Block' streaming extension for Image Conversion Library encoder. williamr@2: */ williamr@2: class TEncodeStreamCaps williamr@2: { williamr@2: public: williamr@2: /** Navigation possibilities within the stream. williamr@2: */ williamr@2: enum TNavigation williamr@2: { williamr@2: /** Blocks can be returned from first to last */ williamr@2: ENavigationSequentialForward = 0x01, williamr@2: williamr@2: /** Blocks can be returned in a random order but moving only from first to last e.g. 1, 5, 18...*/ williamr@2: ENavigationRandomForward = 0x02, williamr@2: williamr@2: /** Blocks can be returned in a random order but moving only from last to first e.g. 1, 5, 18...*/ williamr@2: ENavigationRandomBackwards = 0x04 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: */ williamr@2: IMPORT_C TEncodeStreamCaps(); williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: williamr@2: @param aMaxBlocksPerRequest Maximum number of blocks that can be sent from the stream to client in a williamr@2: single request. williamr@2: @param aMinBlockSizeInPixels Minimum size in pixels of a block sent to the stream from the client in williamr@2: a single request. williamr@2: @param aOptimalBlocksPerRequest Optimum number of blocks sent to the stream from the client in williamr@2: a single request to get maximum performance benefit. williamr@2: @param aNavigation Navigation capabilities. williamr@2: */ williamr@2: IMPORT_C TEncodeStreamCaps(TInt aMaxBlocksPerRequest, const TSize& aMinBlockSizeInPixels, williamr@2: TInt aOptimalBlocksPerRequest, williamr@2: TEncodeStreamCaps::TNavigation aNavigation); williamr@2: /** williamr@2: Maximum number of blocks that can be sent from the stream to client in a williamr@2: single request. williamr@2: williamr@2: @return Maximum number of blocks that can be sent from the stream to client in a williamr@2: single request. williamr@2: */ williamr@2: IMPORT_C TInt MaxBlocksPerRequest() const; williamr@2: williamr@2: /** williamr@2: Minimum size in pixels of a block sent to the stream from the client in williamr@2: a single request. williamr@2: williamr@2: @return Minimum size in pixels of a block sent to the stream from the client in williamr@2: a single request. williamr@2: */ williamr@2: IMPORT_C const TSize& MinBlockSizeInPixels() const; williamr@2: williamr@2: /** williamr@2: Optimum number of blocks sent to the stream from the client in williamr@2: a single request to get maximum performance benefit. williamr@2: williamr@2: @return Optimum number of blocks sent to the stream from the client in williamr@2: a single request to get maximum performance benefit. williamr@2: */ williamr@2: IMPORT_C TInt OptimalBlocksPerRequest() const; williamr@2: williamr@2: williamr@2: /** williamr@2: Navigation capabilities. williamr@2: williamr@2: @return navigation capabilities. williamr@2: williamr@2: Full random access to the stream if Navigation() returns williamr@2: ENavigationSequentialForward | ENavigationRandomForward |ENavigationRandomBackwards williamr@2: */ williamr@2: IMPORT_C TEncodeStreamCaps::TNavigation Navigation() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Size() const; williamr@2: williamr@2: /** williamr@2: Compatibility - internal use only williamr@2: @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint Version() const; williamr@2: williamr@2: private: williamr@2: TInt iMaxBlocksPerRequest; williamr@2: TSize iMinBlockSizeInPixels; williamr@2: TInt iOptimalBlocksPerRequest; williamr@2: TNavigation iNavigation; williamr@2: TUint iSizeVersion; // bits 31 to 8 size, 7 to 0 contain version williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: class TImageConvStreamedEncode williamr@2: { williamr@2: friend class CImageEncoder; williamr@2: williamr@2: public: williamr@2: /** williamr@2: Returns a list of supported formats and the optimal format to be used. @see imageframeconst.h williamr@2: for a list of format uids. williamr@2: @param aFormats Returns an array of format uids williamr@2: @param aOptimalFormat The 'best' uid to use. williamr@2: */ williamr@2: IMPORT_C void GetSupportedFormatsL(RArray& aFormats, TUid& aOptimalFormat) const; williamr@2: williamr@2: /** williamr@2: Returns the capabilities of the codec plugin for a specific format. williamr@2: @param aFormat The format. williamr@2: @param aCaps The capabilities for the format given. williamr@2: */ williamr@2: IMPORT_C void GetCapabilities(TUid aFormat, TEncodeStreamCaps& aCaps) const; williamr@2: williamr@2: /** williamr@2: Initialise the stream. williamr@2: williamr@2: @param aFormat the format to use williamr@2: @param aFrameNumber frame to stream williamr@2: @param aFrameSizeInPixels Size of this frame in pixels williamr@2: @param aBlockSizeInPixels Size of block to be added / appended. williamr@2: @param aNavigation indication to stream of the way that the stream will be navigated. Allows williamr@2: codec to optimise it's behaviour. williamr@2: @param aFrameImageData The frame image data (optional pass NULL if not required). williamr@2: There are format-specific image data variants that are used by encoders to obtain image specific williamr@2: data. This behaviour is invoked by specifying aFrameImageData. Otherwise, encoder specific defaults williamr@2: are invoked. @see TJpegImageData williamr@2: williamr@2: @leave System wide error if for example the format is not supported. williamr@2: williamr@2: @note must call InitFrameL before AppendBlocks or AddBlocks. Failure to do so completes request with williamr@2: KErrNotReady williamr@2: williamr@2: @note can either specify format through aFormat or aImageFrameData. Conflicts cause a leave with KErrArgument. williamr@2: */ williamr@2: IMPORT_C void InitFrameL(TUid aFormat, TInt aFrameNumber, const TSize& aFrameSizeInPixels, const TSize& aBlockSizeInPixels, TEncodeStreamCaps::TNavigation aNavigation, const CFrameImageData* aFrameImageData); williamr@2: williamr@2: /** williamr@2: Append blocks to the stream. williamr@2: @param aStatus request status williamr@2: @param aBlocks wraps a memory buffer containing the pixel data to be added to the stream williamr@2: @param aNumBlocksToAdd number of blocks of size TEncodeStreamCaps::MinBlockSizeInPixels to add to the stream williamr@2: */ williamr@2: IMPORT_C void AppendBlocks(TRequestStatus& aStatus, const CImageFrame& aBlocks, TInt aNumBlocksToAdd); williamr@2: williamr@2: /** williamr@2: Add blocks to the stream at a random position. williamr@2: @param aStatus request status williamr@2: @param aBlocks wraps a memory buffer containing the pixel data to be added to the stream williamr@2: @param aSeqPosition position of block in stream starting at 0 williamr@2: */ williamr@2: IMPORT_C void AddBlocks(TRequestStatus& aStatus, const CImageFrame& aBlocks, const TInt& aSeqPosition); williamr@2: williamr@2: /** williamr@2: Signal completion of writing the stream williamr@2: @param aStatus request status williamr@2: */ williamr@2: IMPORT_C void Complete(TRequestStatus& aStatus); williamr@2: williamr@2: private: williamr@2: williamr@2: IMPORT_C TImageConvStreamedEncode(); williamr@2: void SetExtension(MImageConvExtension* aExtension); williamr@2: williamr@2: MImageConvStreamedEncode* iExtension; williamr@2: TInt iReserved; // future proof williamr@2: }; williamr@2: williamr@2: #endif // IMAGECONVERSIONEXTENSION_H