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 __ENCODER_H__ sl@0: #define __ENCODER_H__ sl@0: sl@0: #include sl@0: #include "TestPluginUIDs.hrh" sl@0: sl@0: enum TEncoderPanicCategory sl@0: { sl@0: EEncoderPanicInitialize = 0, sl@0: EEncoderPanicClockSource, sl@0: EEncoderPanicSynchronizeDecoding, sl@0: EEncoderPanicHrdVbvSpec, sl@0: EEncoderPanicHrdVbvParams, sl@0: EEncoderPanicScreenClipRegion, sl@0: EEncoderPanicPauseClipFail, sl@0: EEncoderPanicSetPosition, sl@0: EEncoderPanicFreezePicture, sl@0: EEncoderPanicReleaseFreeze, sl@0: EEncoderPanicComplexityLevel, sl@0: EEncoderPanicComplexityLevelInfo, sl@0: EEncoderPanicPictureHeader, sl@0: EEncoderPanicPictureHeaderOptions, sl@0: EEncoderPanicPictureHeaderTimestamp, sl@0: EEncoderPanicTimedSnapshot, sl@0: EEncoderPanicTimedSnapshotId, sl@0: EEncoderPanicCancelTimedSnapshot, sl@0: EEncoderPanicSupportedSnapshotFormats, sl@0: EEncoderPanicSourceCam, sl@0: EEncoderPanicSourceMem, sl@0: EEncoderPanicErrorsExpected, sl@0: EEncoderPanicRandomAccessRate, sl@0: EEncoderPanicNumBitrateLayers, sl@0: EEncoderPanicPacketLossRate, sl@0: EEncoderPanicBitErrorRate, sl@0: EEncoderPanicSegmentTargetSize, sl@0: EEncoderPanicRateControlOptions, sl@0: EEncoderPanicPointPromPeriod, sl@0: EEncoderPanicRecordPosition, sl@0: EEncoderPanicPictureLossSpec, sl@0: EEncoderPanicSliceLoss, sl@0: EEncoderPanicRefPictureInfo sl@0: }; sl@0: sl@0: const TUid KUidDevVideoTestEncodeHwDevice = {KUidDevVideoTestEncodeHwDeviceDefine1}; //This is the only real plugin sl@0: const TUid KUidDevVideoTestEncodeHwDevice1 = {KUidDevVideoTestEncodeHwDeviceDefine1}; sl@0: const TUid KUidDevVideoTestEncodeHwDevice2 = {KUidDevVideoTestEncodeHwDeviceDefine2}; sl@0: const TUid KUidDevVideoTestEncodeHwDevice3 = {KUidDevVideoTestEncodeHwDeviceDefine3}; sl@0: const TUid KUidDevVideoTestEncodeHwDevice4 = {KUidDevVideoTestEncodeHwDeviceDefine4}; sl@0: const TUid KUidDevVideoTestEncodeHwDevice5 = {KUidDevVideoTestEncodeHwDeviceDefine5}; sl@0: sl@0: class CMMFTestVideoEncodeHwDevice : public CMMFVideoEncodeHwDevice sl@0: { sl@0: public: sl@0: static CMMFVideoEncodeHwDevice* NewL(TAny* aInitParams); sl@0: ~CMMFTestVideoEncodeHwDevice(); sl@0: sl@0: // from CMMFVideoHwDevice sl@0: virtual TAny* CustomInterface(TUid aInterface); sl@0: sl@0: // from CMMFVideoRecordHwDevice sl@0: virtual CPreProcessorInfo* PreProcessorInfoLC(); sl@0: virtual void SetInputFormatL(const TUncompressedVideoFormat& aFormat, const TSize& aPictureSize); sl@0: virtual void SetSourceCameraL(TInt aCameraHandle, TReal aPictureRate); sl@0: virtual void SetSourceMemoryL(TReal aMaxPictureRate, TBool aConstantPictureRate, TBool aProcessRealtime); sl@0: virtual void SetClockSource(MMMFClockSource* aClock); sl@0: virtual void SetPreProcessTypesL(TUint32 aPreProcessTypes); sl@0: virtual void SetRgbToYuvOptionsL(TRgbRange aRange, const TYuvFormat& aOutputFormat); sl@0: virtual void SetYuvToYuvOptionsL(const TYuvFormat& aInputFormat, const TYuvFormat& aOutputFormat); sl@0: virtual void SetRotateOptionsL(TRotationType aRotationType); sl@0: virtual void SetScaleOptionsL(const TSize& aTargetSize, TBool aAntiAliasFiltering); sl@0: virtual void SetInputCropOptionsL(const TRect& aRect); sl@0: virtual void SetOutputCropOptionsL(const TRect& aRect); sl@0: virtual void SetOutputPadOptionsL(const TSize& aOutputSize, const TPoint& aPicturePos); sl@0: virtual void SetColorEnhancementOptionsL(const TColorEnhancementOptions& aOptions); sl@0: virtual void SetFrameStabilisationOptionsL(const TSize& aOutputSize, TBool aFrameStabilisation); sl@0: virtual void SetCustomPreProcessOptionsL(const TDesC8& aOptions); sl@0: virtual void Initialize(); sl@0: virtual void WritePictureL(TVideoPicture* aPicture); sl@0: virtual void InputEnd(); sl@0: virtual void Start(); sl@0: virtual void Stop(); sl@0: virtual void Pause(); sl@0: virtual void Resume(); sl@0: virtual void Freeze(); sl@0: virtual void ReleaseFreeze(); sl@0: virtual TTimeIntervalMicroSeconds RecordingPosition(); sl@0: virtual void GetPictureCounters(CMMFDevVideoRecord::TPictureCounters& aCounters); sl@0: virtual void GetFrameStabilisationOutput(TRect& aRect); sl@0: virtual TUint NumComplexityLevels(); sl@0: virtual void SetComplexityLevel(TUint aLevel); sl@0: virtual void CommitL(); sl@0: virtual void Revert(); sl@0: sl@0: // from CMMFVideoEncodeHwDevice sl@0: virtual CVideoEncoderInfo* VideoEncoderInfoLC(); sl@0: virtual void SetOutputFormatL(const CCompressedVideoFormat& aFormat, sl@0: TVideoDataUnitType aDataUnitType, sl@0: TVideoDataUnitEncapsulation aDataEncapsulation, sl@0: TBool aSegmentationAllowed=EFalse); sl@0: virtual void SetOutputRectL(const TRect& aRect); sl@0: virtual void SetInputDevice(CMMFVideoPreProcHwDevice* aDevice); sl@0: virtual void SetErrorsExpected(TBool aBitErrors, TBool aPacketLosses); sl@0: virtual void SetMinRandomAccessRate(TReal aRate); sl@0: virtual void SetNumBitrateLayersL(TUint aNumLayers); sl@0: virtual void SetScalabilityLayerTypeL(TUint aLayer, TScalabilityType aScalabilityType); sl@0: virtual void SetGlobalReferenceOptions(TUint aMaxReferencePictures, TUint aMaxPictureOrderDelay); sl@0: virtual void SetLayerReferenceOptions(TUint aLayer, TUint aMaxReferencePictures, TUint aMaxPictureOrderDelay); sl@0: virtual void SetBufferOptionsL(const TEncoderBufferOptions& aOptions); sl@0: virtual void SetCodingStandardSpecificOptionsL(const TDesC8& aOptions); sl@0: virtual void SetImplementationSpecificEncoderOptionsL(const TDesC8& aOptions); sl@0: virtual HBufC8* CodingStandardSpecificInitOutputLC(); sl@0: virtual HBufC8* ImplementationSpecificInitOutputLC(); sl@0: virtual void SetErrorProtectionLevelsL(TUint aNumLevels, TBool aSeparateBuffers); sl@0: virtual void SetErrorProtectionLevelL(TUint aLevel, TUint aBitrate, TUint aStrength); sl@0: virtual void SetChannelPacketLossRate(TUint aLevel, sl@0: TReal aLossRate, sl@0: TTimeIntervalMicroSeconds32 aLossBurstLength); sl@0: virtual void SetChannelBitErrorRate(TUint aLevel, TReal aErrorRate, TReal aStdDeviation); sl@0: virtual void SetSegmentTargetSize(TUint aLayer, TUint aSizeBytes, TUint aSizeMacroblocks); sl@0: virtual void SetRateControlOptions(TUint aLayer, const TRateControlOptions& aOptions); sl@0: virtual void SetInLayerScalabilityL(TUint aLayer, sl@0: TUint aNumSteps, sl@0: TInLayerScalabilityType aScalabilityType, sl@0: const TArray& aBitrateShare, sl@0: const TArray& aPictureShare); sl@0: virtual void SetLayerPromotionPointPeriod(TUint aLayer, TUint aPeriod); sl@0: virtual HBufC8* CodingStandardSpecificSettingsOutputLC(); sl@0: virtual HBufC8* ImplementationSpecificSettingsOutputLC(); sl@0: virtual void SendSupplementalInfoL(const TDesC8& aData); sl@0: virtual void SendSupplementalInfoL(const TDesC8& aData, const TTimeIntervalMicroSeconds& aTimestamp); sl@0: virtual void CancelSupplementalInfo(); sl@0: virtual void GetOutputBufferStatus(TUint& aNumFreeBuffers, TUint& aTotalFreeBytes); sl@0: virtual void ReturnBuffer(TVideoOutputBuffer* aBuffer); sl@0: virtual void PictureLoss(); sl@0: virtual void PictureLoss(const TArray& aPictures); sl@0: virtual void SliceLoss(TUint aFirstMacroblock, TUint aNumMacroblocks, const TPictureId& aPicture); sl@0: virtual void ReferencePictureSelection(const TDesC8& aSelectionData); sl@0: virtual void SetProxy(MMMFDevVideoRecordProxy& aProxy); sl@0: sl@0: private: sl@0: CMMFTestVideoEncodeHwDevice(); sl@0: private: sl@0: MMMFDevVideoRecordProxy* iProxy; sl@0: TBool iIsRecording; sl@0: TBool iSuppTime; sl@0: TTimeIntervalMicroSeconds iRecPosition; sl@0: sl@0: RArray iDataBuffers; sl@0: TInt iCurrentBuffer; sl@0: sl@0: RArray iOutputVidFormats; sl@0: RArray iInputVidFormats; sl@0: RArray iPictureRates; sl@0: }; sl@0: sl@0: #endif