sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: sl@0: #ifndef __DECODER_H__ sl@0: #define __DECODER_H__ sl@0: sl@0: #include sl@0: #include "TestPluginUIDs.hrh" sl@0: sl@0: enum TDecoderPanicCategory sl@0: { sl@0: EDecoderPanicInitialize = 0, sl@0: EDecoderPanicClockSource, sl@0: EDecoderPanicSynchronizeDecoding, sl@0: EDecoderPanicHrdVbvSpec, sl@0: EDecoderPanicHrdVbvParams, sl@0: EDecoderPanicScreenClipRegion, sl@0: EDecoderPanicPauseClipFail, sl@0: EDecoderPanicSetPosition, sl@0: EDecoderPanicFreezePicture, sl@0: EDecoderPanicReleaseFreeze, sl@0: EDecoderPanicComplexityLevel, sl@0: EDecoderPanicComplexityLevelInfo, sl@0: EDecoderPanicPictureHeader, sl@0: EDecoderPanicPictureHeaderOptions, sl@0: EDecoderPanicPictureHeaderTimestamp, sl@0: EDecoderPanicTimedSnapshot, sl@0: EDecoderPanicTimedSnapshotId, sl@0: EDecoderPanicCancelTimedSnapshot, sl@0: EDecoderPanicSupportedSnapshotFormats sl@0: }; sl@0: sl@0: const TUid KUidDevVideoTestDecodeHwDevice = {KUidDevVideoTestDecodeHwDeviceDefine1}; //This is the only real plugin sl@0: const TUid KUidDevVideoTestDecodeHwDevice1 = {KUidDevVideoTestDecodeHwDeviceDefine1}; sl@0: const TUid KUidDevVideoTestDecodeHwDevice2 = {KUidDevVideoTestDecodeHwDeviceDefine2}; sl@0: const TUid KUidDevVideoTestDecodeHwDevice3 = {KUidDevVideoTestDecodeHwDeviceDefine3}; sl@0: const TUid KUidDevVideoTestDecodeHwDevice4 = {KUidDevVideoTestDecodeHwDeviceDefine4}; sl@0: const TUid KUidDevVideoTestDecodeHwDevice5 = {KUidDevVideoTestDecodeHwDeviceDefine5}; sl@0: const TInt KDecoderDefaultScreenNumber = 0; sl@0: const TInt KDecoderSecondaryScreenNumber = 1; sl@0: sl@0: class CMMFTestVideoDecodeHwDevice : public CMMFVideoDecodeHwDevice, public MMMFVideoPlayHwDeviceExtensionScanCopy sl@0: { sl@0: public: sl@0: static CMMFVideoDecodeHwDevice* NewL(TAny* aInitParams); sl@0: ~CMMFTestVideoDecodeHwDevice(); sl@0: sl@0: // from CMMFVideoHwDevice sl@0: TAny* CustomInterface(TUid aInterface); sl@0: sl@0: // from CMMFVideoPlayHwDevice sl@0: CPostProcessorInfo* PostProcessorInfoLC(); sl@0: void GetOutputFormatListL(RArray& aFormats); sl@0: void SetOutputFormatL(const TUncompressedVideoFormat &aFormat); sl@0: void SetPostProcessTypesL(TUint32 aPostProcCombination); sl@0: void SetInputCropOptionsL(const TRect& aRect); sl@0: void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions, const TYuvFormat& aYuvFormat, TRgbFormat aRgbFormat); sl@0: void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions); sl@0: void SetRotateOptionsL(TRotationType aRotationType); sl@0: void SetScaleOptionsL(const TSize& aTargetSize, TBool aAntiAliasFiltering); sl@0: void SetOutputCropOptionsL(const TRect& aRect); sl@0: void SetPostProcSpecificOptionsL(const TDesC8& aOptions); sl@0: void SetClockSource(MMMFClockSource* aClock); sl@0: void SetVideoDestScreenL(TBool aScreen); sl@0: void Initialize(); sl@0: void StartDirectScreenAccessL(const TRect& aVideoRect, CFbsScreenDevice& aScreenDevice, const TRegion& aClipRegion); sl@0: void SetScreenClipRegion(const TRegion& aRegion); sl@0: void SetPauseOnClipFail(TBool aPause); sl@0: void AbortDirectScreenAccess(); sl@0: TBool IsPlaying(); sl@0: void Redraw(); sl@0: void Start(); sl@0: void Stop(); sl@0: void Pause(); sl@0: void Resume(); sl@0: void SetPosition(const TTimeIntervalMicroSeconds& aPlaybackPosition); sl@0: void FreezePicture(const TTimeIntervalMicroSeconds& aTimestamp); sl@0: void ReleaseFreeze(const TTimeIntervalMicroSeconds& aTimestamp); sl@0: TTimeIntervalMicroSeconds PlaybackPosition(); sl@0: TUint PictureBufferBytes(); sl@0: void GetPictureCounters(CMMFDevVideoPlay::TPictureCounters& aCounters); sl@0: void SetComplexityLevel(TUint aLevel); sl@0: TUint NumComplexityLevels(); sl@0: void GetComplexityLevelInfo(TUint aLevel, CMMFDevVideoPlay::TComplexityLevelInfo& aInfo); sl@0: void ReturnPicture(TVideoPicture* aPicture); sl@0: TBool GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& aFormat); sl@0: void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, const TTimeIntervalMicroSeconds& aPresentationTimestamp); sl@0: void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, const TPictureId& aPictureId); sl@0: void CancelTimedSnapshot(); sl@0: void GetSupportedSnapshotFormatsL(RArray& aFormats); sl@0: void InputEnd(); sl@0: void CommitL(); sl@0: void Revert(); sl@0: sl@0: // from CMMFVideoDecodeHwDevice sl@0: CVideoDecoderInfo* VideoDecoderInfoLC(); sl@0: TVideoPictureHeader* GetHeaderInformationL(TVideoDataUnitType aDataUnitType, TVideoDataUnitEncapsulation aEncapsulation, TVideoInputBuffer* aDataUnit); sl@0: void ReturnHeader(TVideoPictureHeader* aHeader); sl@0: void SetInputFormatL(const CCompressedVideoFormat& aFormat, TVideoDataUnitType aDataUnitType, TVideoDataUnitEncapsulation aEncapsulation, TBool aDataInOrder); sl@0: void SynchronizeDecoding(TBool aSynchronize); sl@0: void SetBufferOptionsL(const CMMFDevVideoPlay::TBufferOptions& aOptions); sl@0: void GetBufferOptions(CMMFDevVideoPlay::TBufferOptions& aOptions); sl@0: void SetHrdVbvSpec(THrdVbvSpecification aHrdVbvSpec, const TDesC8& aHrdVbvParams); sl@0: void SetOutputDevice(CMMFVideoPostProcHwDevice* aDevice); sl@0: TTimeIntervalMicroSeconds DecodingPosition(); sl@0: TUint PreDecoderBufferBytes(); sl@0: void GetBitstreamCounters(CMMFDevVideoPlay::TBitstreamCounters& aCounters); sl@0: TUint NumFreeBuffers(); sl@0: TVideoInputBuffer* GetBufferL(TUint aBufferSize); sl@0: void WriteCodedDataL(TVideoInputBuffer* aBuffer); sl@0: void SetProxy(MMMFDevVideoPlayProxy& aProxy); sl@0: void ConfigureDecoderL(const TVideoPictureHeader& aVideoPictureHeader); sl@0: sl@0: //from MMMFVideoPlayHwDeviceExtensionScanCopy sl@0: void WriteCodedDataL(TVideoInputBuffer* aBuffer, TFramePortion aPortion = EFramePortionUnknown); sl@0: void ScanAndCopyCodedDataL(TPtr8 aCodedData, TVideoInputBuffer* aBuffer, TInt& aConsumed, TFramePortion aPortion = EFramePortionUnknown); sl@0: sl@0: private: sl@0: CMMFTestVideoDecodeHwDevice(); sl@0: private: sl@0: MMMFDevVideoPlayProxy* iProxy; sl@0: sl@0: RArray iVidFormats; sl@0: RArray iPictureRates; sl@0: // For post-proc info sl@0: RArray iScaleFactors; sl@0: RArray iPostProcVidFormats; sl@0: RArray iCombinations; sl@0: sl@0: TVideoPictureHeader iPictureHeader; sl@0: TVideoInputBuffer iInputBuffer; sl@0: TBool iIsPlaying; sl@0: TUid iExtensionUid; sl@0: sl@0: HBufC8* iBufferDataArea; sl@0: }; sl@0: sl@0: #endif