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: #include "encoder.h" sl@0: #include "../TestDevVideoPlayTestData.h" sl@0: sl@0: _LIT(KDevVideoEncoderPanicCategory, "DevVideoEncoder"); sl@0: void DevVideoEncoderPanic(TInt aReason) sl@0: { sl@0: User::Panic(KDevVideoEncoderPanicCategory, aReason); sl@0: } sl@0: sl@0: CMMFVideoEncodeHwDevice* CMMFTestVideoEncodeHwDevice::NewL(TAny* /*aInitParams*/) sl@0: { sl@0: CMMFTestVideoEncodeHwDevice* s = new(ELeave) CMMFTestVideoEncodeHwDevice; sl@0: return (STATIC_CAST(CMMFVideoEncodeHwDevice*, s)); sl@0: } sl@0: sl@0: CMMFTestVideoEncodeHwDevice::CMMFTestVideoEncodeHwDevice() sl@0: { sl@0: } sl@0: sl@0: CMMFTestVideoEncodeHwDevice::~CMMFTestVideoEncodeHwDevice() sl@0: { sl@0: iDataBuffers.Reset(); sl@0: iDataBuffers.Close(); sl@0: sl@0: // destroy objects in RArray sl@0: for (TInt i = 0; i < iOutputVidFormats.Count(); i++) sl@0: { sl@0: delete iOutputVidFormats[i]; sl@0: } sl@0: sl@0: iOutputVidFormats.Reset(); sl@0: iOutputVidFormats.Close(); sl@0: sl@0: iInputVidFormats.Reset(); sl@0: iInputVidFormats.Close(); sl@0: sl@0: iPictureRates.Reset(); sl@0: iPictureRates.Close(); sl@0: } sl@0: sl@0: TAny* CMMFTestVideoEncodeHwDevice::CustomInterface(TUid aInterface) sl@0: { sl@0: if (aInterface == KUidCustomInterfaceThree) sl@0: { sl@0: return this;//just want to return something non-null! sl@0: } sl@0: else sl@0: { sl@0: return NULL; sl@0: } sl@0: } sl@0: sl@0: CPreProcessorInfo* CMMFTestVideoEncodeHwDevice::PreProcessorInfoLC() sl@0: { sl@0: return NULL; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetInputFormatL(const TUncompressedVideoFormat& aFormat, const TSize& aPictureSize) sl@0: { sl@0: TSize testSize(KTestInputSize1X, KTestInputSize1Y); sl@0: sl@0: if (!(aFormat == KTestVidFormat1) || !(aPictureSize == testSize)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetSourceCameraL(TInt aCameraHandle, TReal aPictureRate) sl@0: { sl@0: if (aCameraHandle == KTestCamHandleFatal) sl@0: iProxy->MdvrpFatalError(this, KErrDied); sl@0: else if ((KTestCamHandleEnc != aCameraHandle) || (KTestPictureRate != aPictureRate)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetSourceMemoryL(TReal /*aMaxPictureRate*/, TBool /*aConstantPictureRate*/, TBool /*aProcessRealtime*/) sl@0: { sl@0: DevVideoEncoderPanic(EEncoderPanicSourceMem); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetClockSource(MMMFClockSource* aClock) sl@0: { sl@0: __ASSERT_ALWAYS(aClock, DevVideoEncoderPanic(EEncoderPanicClockSource)); sl@0: sl@0: // call Time() to check that clock can be used sl@0: TTimeIntervalMicroSeconds currTime(0); // done this way to remove compiler warning sl@0: currTime = aClock->Time(); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetPreProcessTypesL(TUint32 aPreProcessTypes) sl@0: { sl@0: if (!(aPreProcessTypes == KTestProcessType1)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetRgbToYuvOptionsL(TRgbRange aRange, const TYuvFormat& aOutputFormat) sl@0: { sl@0: // check against test data sl@0: if ((aRange != KTestRgbRange1) || !CompareYuvFormats(aOutputFormat, KTestYuvFormat1) ) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetYuvToYuvOptionsL(const TYuvFormat& aInputFormat, const TYuvFormat& aOutputFormat) sl@0: { sl@0: if (!CompareYuvFormats(aInputFormat, KTestYuvFormat1) || !CompareYuvFormats(aOutputFormat, KTestYuvFormat2) ) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetRotateOptionsL(TRotationType aRotationType) sl@0: { sl@0: if (!(aRotationType == KTestRotate1)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetScaleOptionsL(const TSize& aTargetSize, TBool aAntiAliasFiltering) sl@0: { sl@0: TSize testScale(KTestScaleX, KTestScaleY); sl@0: if (!(aTargetSize == testScale) || !aAntiAliasFiltering) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetInputCropOptionsL(const TRect& aRect) sl@0: { sl@0: TRect testRect(KTestInputCropRectA, KTestInputCropRectB, KTestInputCropRectC, KTestInputCropRectD); sl@0: if (!(aRect == testRect)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetOutputCropOptionsL(const TRect& aRect) sl@0: { sl@0: TRect testRect(KTestOutputCropRectA, KTestOutputCropRectB, KTestOutputCropRectC, KTestOutputCropRectD); sl@0: if (!(aRect == testRect)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetOutputPadOptionsL(const TSize& aOutputSize, const TPoint& aPicturePos) sl@0: { sl@0: TSize testPad(KTestPadX, KTestPadY); sl@0: TPoint testPoint(KTestPadPointX, KTestPadPointY); sl@0: sl@0: if (!(testPad == aOutputSize) || !(testPoint == aPicturePos)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetColorEnhancementOptionsL(const TColorEnhancementOptions& aOptions) sl@0: { sl@0: if (!CompareColorEnhancements(aOptions, KTestColorEnhance1)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetFrameStabilisationOptionsL(const TSize& aOutputSize, TBool aFrameStabilisation) sl@0: { sl@0: TSize testSize(KTestScaleX, KTestScaleY); sl@0: if (!(aOutputSize == testSize) || !aFrameStabilisation) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetCustomPreProcessOptionsL(const TDesC8& aOptions) sl@0: { sl@0: if (!(aOptions == KTestCustomPreProc1)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Initialize() sl@0: { sl@0: iProxy->MdvrpInitializeComplete(this, KErrNone); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::WritePictureL(TVideoPicture* aPicture) sl@0: { sl@0: // change the timestamp to the encoder timestamp sl@0: aPicture->iTimestamp = KTestEncPictureTimestamp; sl@0: sl@0: iProxy->MdvrpReturnPicture(aPicture); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::InputEnd() sl@0: { sl@0: iProxy->MdvrpStreamEnd(); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Start() sl@0: { sl@0: iRecPosition = KTestRecTimeStartEnc; sl@0: iIsRecording = ETrue; sl@0: sl@0: // if we're doing the buffer tests, start sending buffers to DevVideo sl@0: if (iDataBuffers.Count() > 0) sl@0: { sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[0])); sl@0: } sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Stop() sl@0: { sl@0: iRecPosition = KTestRecTimeStop; sl@0: iIsRecording = EFalse; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Pause() sl@0: { sl@0: iRecPosition = KTestRecTimePauseEnc; sl@0: iIsRecording = EFalse; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Resume() sl@0: { sl@0: iRecPosition = KTestRecTimeResumeEnc; sl@0: iIsRecording = ETrue; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Freeze() sl@0: { sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::ReleaseFreeze() sl@0: { sl@0: } sl@0: sl@0: TTimeIntervalMicroSeconds CMMFTestVideoEncodeHwDevice::RecordingPosition() sl@0: { sl@0: return iRecPosition; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::GetPictureCounters(CMMFDevVideoRecord::TPictureCounters& aCounters) sl@0: { sl@0: CMMFDevVideoRecord::TPictureCounters pic = GetTestEncPictureCounters(); sl@0: sl@0: // adjust picture counters to differentiate encoder from preproc sl@0: pic.iInputPictures = KTestEncInputPictures; sl@0: aCounters = pic; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::GetFrameStabilisationOutput(TRect& aRect) sl@0: { sl@0: aRect = TRect(KTestFrameStableX1, KTestFrameStableY1, KTestFrameStableX2, KTestFrameStableY2); sl@0: } sl@0: sl@0: TUint CMMFTestVideoEncodeHwDevice::NumComplexityLevels() sl@0: { sl@0: return KTestNumComplexityLevels1; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetComplexityLevel(TUint aLevel) sl@0: { sl@0: __ASSERT_ALWAYS(aLevel == KTestComplexityLevel1, DevVideoEncoderPanic(EEncoderPanicComplexityLevel)); sl@0: } sl@0: sl@0: CVideoEncoderInfo* CMMFTestVideoEncodeHwDevice::VideoEncoderInfoLC() sl@0: { sl@0: // construct array of test types sl@0: for (TUint i = 0; i < KTestEncoderInfoCount; i++) sl@0: { sl@0: // construct the video types for iOutputVidTypes sl@0: // use the same test data as for the decoder sl@0: CCompressedVideoFormat* vidCV = NULL; sl@0: TPtrC8 mimeType = KTestDecoderInfoMimeArray[i]; sl@0: vidCV = GetTestCVFormatL(mimeType); sl@0: CleanupStack::PushL(vidCV); sl@0: User::LeaveIfError(iOutputVidFormats.Append(vidCV)); sl@0: CleanupStack::Pop(vidCV); // CCompressedVideo object is destroyed in destructor sl@0: sl@0: // append the uncompressed video formats sl@0: TUncompressedVideoFormat vidUC = KTestPostProcInfoFormatArray[i]; sl@0: User::LeaveIfError(iInputVidFormats.Append(vidUC)); sl@0: sl@0: // append the max picture rates sl@0: TPictureRateAndSize rate; sl@0: GetTestEncoderInfoRate(i, rate); sl@0: User::LeaveIfError(iPictureRates.Append(rate)); sl@0: } sl@0: sl@0: // construct the video Encoder info object sl@0: CVideoEncoderInfo* vInfo = CVideoEncoderInfo::NewL( sl@0: KUidDevVideoTestEncodeHwDevice, sl@0: KTestEncoderInfoManufacturer, sl@0: KTestEncoderInfoIdentifier, sl@0: TVersion(KTestEncoderInfoVersionMaj, KTestEncoderInfoVersionMin, KTestEncoderInfoVersionBuild), sl@0: ETrue, // accelerated sl@0: ETrue, // supports direct capture sl@0: iInputVidFormats.Array(), sl@0: iOutputVidFormats.Array(), sl@0: TSize(KTestEncoderInfoMaxSizeX, KTestEncoderInfoMaxSizeY), sl@0: KTestUnitType1, sl@0: KTestEncapType1, sl@0: KTestNumBitrateLayers, sl@0: ETrue, // supports supplemental enhancement info sl@0: KTestEncoderInfoMaxUEPLevels, sl@0: KTestEncoderInfoMaxBitrate, sl@0: iPictureRates.Array(), sl@0: KTestEncoderInfoMaxILSSteps, sl@0: KTestEncoderInfoPictureOptions, sl@0: EFalse, // aSupportsPictureLoss, sl@0: ETrue, // aSupportsSliceLoss, sl@0: KTestEncoderInfoCSInfo, sl@0: KTestEncoderInfoISInfo ); sl@0: sl@0: sl@0: CleanupStack::PushL(vInfo); sl@0: return vInfo; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetOutputFormatL(const CCompressedVideoFormat& aFormat, sl@0: TVideoDataUnitType aDataUnitType, sl@0: TVideoDataUnitEncapsulation aDataEncapsulation, sl@0: TBool aSegmentationAllowed) sl@0: { sl@0: // check expected parameters - TClasses first sl@0: if (!((aDataUnitType == KTestUnitType1) && (aDataEncapsulation == KTestEncapType1) && aSegmentationAllowed)) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: // construct a temporary compressed video class [will leave on error] sl@0: CCompressedVideoFormat *compVideo = GetTestCVFormatL(KTestMimeType1); sl@0: CleanupStack::PushL(compVideo); sl@0: sl@0: // compare to received class sl@0: if (!(aFormat == *compVideo)) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: // destroy temporary class sl@0: CleanupStack::PopAndDestroy(compVideo); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetOutputRectL(const TRect& aRect) sl@0: { sl@0: TRect testRect1(KTestInputCropRectA, KTestInputCropRectB, KTestInputCropRectC, KTestInputCropRectD); sl@0: sl@0: if (!(aRect == testRect1)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetInputDevice(CMMFVideoPreProcHwDevice* /*aDevice*/) sl@0: { sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetErrorsExpected(TBool aBitErrors, TBool aPacketLosses) sl@0: { sl@0: __ASSERT_ALWAYS(aBitErrors && !aPacketLosses, DevVideoEncoderPanic(EEncoderPanicErrorsExpected)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetMinRandomAccessRate(TReal aRate) sl@0: { sl@0: __ASSERT_ALWAYS(aRate == KTestRandomAccessRate, DevVideoEncoderPanic(EEncoderPanicRandomAccessRate)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetNumBitrateLayersL(TUint aNumLayers) sl@0: { sl@0: if (aNumLayers != KTestNumBitrateLayers) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetScalabilityLayerTypeL(TUint aLayer, TScalabilityType aScalabilityType) sl@0: { sl@0: if ((aLayer != KTestLayer) || (aScalabilityType != KTestScaleType)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetGlobalReferenceOptions(TUint aMaxReferencePictures, TUint aMaxPictureOrderDelay) sl@0: { sl@0: __ASSERT_ALWAYS((aMaxReferencePictures == KTestMaxRefPics) && (aMaxPictureOrderDelay == KTestMaxPicDelay), DevVideoEncoderPanic(EEncoderPanicRandomAccessRate)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetLayerReferenceOptions(TUint aLayer, TUint aMaxReferencePictures, TUint aMaxPictureOrderDelay) sl@0: { sl@0: __ASSERT_ALWAYS((aMaxReferencePictures == KTestMaxRefPics) && (aMaxPictureOrderDelay == KTestMaxPicDelay) && (aLayer == KTestLayer), DevVideoEncoderPanic(EEncoderPanicRandomAccessRate)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetBufferOptionsL(const TEncoderBufferOptions& aOptions) sl@0: { sl@0: if ( !CompareEncBufferOptions(aOptions, GetTestEncBufferOptions()) ) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetCodingStandardSpecificOptionsL(const TDesC8& aOptions) sl@0: { sl@0: if (!(aOptions == KTestCSEncoderOptions)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetImplementationSpecificEncoderOptionsL(const TDesC8& aOptions) sl@0: { sl@0: if (aOptions == KTestISEncoderOptions) sl@0: { sl@0: // running standard test sl@0: } sl@0: else if (aOptions == KTestISEncBuffers) sl@0: { sl@0: // Special test plugin feature: we're being told to start outputting sl@0: // video buffers up to DevVideo. sl@0: // Create 10 video buffers sl@0: iDataBuffers.Reset(); sl@0: for (TInt i = 0; i < 10; i++) sl@0: { sl@0: // Create a video output buffer that only has a valid timestamp sl@0: TVideoOutputBuffer buf; sl@0: buf.iCaptureTimestamp = TTimeIntervalMicroSeconds(i); sl@0: buf.iImplementationSpecificData.Set(KTestISEncBufferData); sl@0: User::LeaveIfError(iDataBuffers.Append(buf)); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: } sl@0: sl@0: HBufC8* CMMFTestVideoEncodeHwDevice::CodingStandardSpecificInitOutputLC() sl@0: { sl@0: HBufC8* bob = KTestCSInitOutput().AllocL(); sl@0: CleanupStack::PushL(bob); sl@0: sl@0: return bob; sl@0: } sl@0: sl@0: HBufC8* CMMFTestVideoEncodeHwDevice::ImplementationSpecificInitOutputLC() sl@0: { sl@0: HBufC8* fred = KTestISInitOutput().AllocL(); sl@0: CleanupStack::PushL(fred); sl@0: sl@0: return fred; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetErrorProtectionLevelsL(TUint aNumLevels, TBool aSeparateBuffers) sl@0: { sl@0: if ((aNumLevels != KTestProtectLevels) || !aSeparateBuffers) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetErrorProtectionLevelL(TUint aLevel, TUint aBitrate, TUint aStrength) sl@0: { sl@0: if ((aLevel != KTestLevel) || (aBitrate != KTestBitrate) || (aStrength != KTestStrength)) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetChannelPacketLossRate(TUint aLevel, sl@0: TReal aLossRate, sl@0: TTimeIntervalMicroSeconds32 aLossBurstLength) sl@0: { sl@0: __ASSERT_ALWAYS((aLevel == KTestLevel) && (aLossRate == KTestLossRate) && (aLossBurstLength == TTimeIntervalMicroSeconds32(KTestLossBurstLength)), DevVideoEncoderPanic(EEncoderPanicPacketLossRate)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetChannelBitErrorRate(TUint aLevel, TReal aErrorRate, TReal aStdDeviation) sl@0: { sl@0: __ASSERT_ALWAYS((aLevel == KTestLevel) && (aErrorRate == KTestErrorRate) && (aStdDeviation == KTestStdDeviation), DevVideoEncoderPanic(EEncoderPanicBitErrorRate)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetSegmentTargetSize(TUint aLayer, TUint aSizeBytes, TUint aSizeMacroblocks) sl@0: { sl@0: __ASSERT_ALWAYS((aLayer == KTestLayer) && (aSizeBytes == KTestSizeBytes) && (aSizeMacroblocks == KTestSizeMacroblocks), DevVideoEncoderPanic(EEncoderPanicSegmentTargetSize)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetRateControlOptions(TUint aLayer, const TRateControlOptions& aOptions) sl@0: { sl@0: __ASSERT_ALWAYS(CompareRateControlOptions(aOptions, GetTestRateControlOptions()) && (aLayer == KTestLayer), DevVideoEncoderPanic(EEncoderPanicRateControlOptions)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetInLayerScalabilityL(TUint aLayer, TUint aNumSteps, sl@0: TInLayerScalabilityType aScalabilityType, sl@0: const TArray& aBitrateShare, sl@0: const TArray& aPictureShare) sl@0: { sl@0: // check the non-array classes first sl@0: if ((aLayer != KTestLayer) || (aNumSteps != KTestNumSteps) || (aScalabilityType != KTestLayerScaleType) ) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: TBool successBit = EFalse; sl@0: TBool successPic = EFalse; sl@0: sl@0: // bitrateShare array sl@0: if (aBitrateShare.Count() == 2) sl@0: { sl@0: if ((aBitrateShare[0] == KTestBitrateShare1) && (aBitrateShare[1] == KTestBitrateShare2)) sl@0: { sl@0: successBit = ETrue; sl@0: } sl@0: } sl@0: sl@0: // pictureShare array sl@0: if (aPictureShare.Count() == 2) sl@0: { sl@0: if ((aPictureShare[0] == KTestPictureShare1) && (aPictureShare[1] == KTestPictureShare2)) sl@0: { sl@0: successPic = ETrue; sl@0: } sl@0: } sl@0: sl@0: if (!successBit || !successPic) sl@0: User::Leave(KErrCorrupt); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetLayerPromotionPointPeriod(TUint aLayer, TUint aPeriod) sl@0: { sl@0: __ASSERT_ALWAYS((aLayer == KTestLayer) && (aPeriod == KTestPointPeriod), DevVideoEncoderPanic(EEncoderPanicPointPromPeriod)); sl@0: } sl@0: sl@0: HBufC8* CMMFTestVideoEncodeHwDevice::CodingStandardSpecificSettingsOutputLC() sl@0: { sl@0: HBufC8* chaz = KTestCSSettingsOutput().AllocL(); sl@0: CleanupStack::PushL(chaz); sl@0: sl@0: return chaz; sl@0: } sl@0: sl@0: HBufC8* CMMFTestVideoEncodeHwDevice::ImplementationSpecificSettingsOutputLC() sl@0: { sl@0: HBufC8* dave = KTestISSettingsOutput().AllocL(); sl@0: CleanupStack::PushL(dave); sl@0: sl@0: return dave; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SendSupplementalInfoL(const TDesC8& aData) sl@0: { sl@0: if (!(aData == KTestSuppInfo)) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: iProxy->MdvrpSupplementalInfoSent(); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SendSupplementalInfoL(const TDesC8& aData, const TTimeIntervalMicroSeconds& aTimestamp) sl@0: { sl@0: if (!(aData == KTestSuppInfo)) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: TTimeIntervalMicroSeconds suppTime(KTestSuppTime); sl@0: TTimeIntervalMicroSeconds suppTimeCancel(KTestSuppTimeCancel); sl@0: sl@0: // check time stamp sl@0: if (!(aTimestamp == TTimeIntervalMicroSeconds(suppTime)) && sl@0: !(aTimestamp == TTimeIntervalMicroSeconds(suppTimeCancel) )) sl@0: User::Leave(KErrCorrupt); sl@0: sl@0: iSuppTime = ETrue; sl@0: sl@0: // don't send callback if cancel supp time requested sl@0: if (aTimestamp == suppTime) sl@0: iProxy->MdvrpSupplementalInfoSent(); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::CancelSupplementalInfo() sl@0: { sl@0: if (iSuppTime) sl@0: iProxy->MdvrpSupplementalInfoSent(); sl@0: sl@0: iSuppTime = EFalse; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::GetOutputBufferStatus(TUint& aNumFreeBuffers, TUint& aTotalFreeBytes) sl@0: { sl@0: aNumFreeBuffers = KTestFreeBuffers; sl@0: aTotalFreeBytes = KTestFreeBytes; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::ReturnBuffer(TVideoOutputBuffer* /*aBuffer*/) sl@0: { sl@0: switch (iCurrentBuffer) sl@0: { sl@0: case 0: sl@0: // Send two more buffers sl@0: iCurrentBuffer = 1; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[1])); sl@0: iCurrentBuffer = 2; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[2])); sl@0: break; sl@0: case 2: sl@0: // Send three more buffers sl@0: iCurrentBuffer = 3; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[3])); sl@0: iCurrentBuffer = 4; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[4])); sl@0: iCurrentBuffer = 5; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[5])); sl@0: break; sl@0: case 5: sl@0: // Send the rest of the buffers sl@0: iCurrentBuffer = 6; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[6])); sl@0: iCurrentBuffer = 7; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[7])); sl@0: iCurrentBuffer = 8; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[8])); sl@0: iCurrentBuffer = 9; sl@0: iProxy->MdvrpNewBuffer(&(iDataBuffers[9])); sl@0: break; sl@0: default: sl@0: break; sl@0: }; sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::PictureLoss() sl@0: { sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::PictureLoss(const TArray& aPictures) sl@0: { sl@0: TBool success = EFalse; sl@0: sl@0: if (aPictures.Count() == 3) sl@0: { sl@0: if (ComparePictureIDs(aPictures[0], KTestPictureId1) && sl@0: ComparePictureIDs(aPictures[1], KTestPictureId2) && sl@0: ComparePictureIDs(aPictures[2], KTestPictureId3) ) sl@0: { sl@0: success = ETrue; sl@0: } sl@0: } sl@0: sl@0: __ASSERT_ALWAYS(success, DevVideoEncoderPanic(EEncoderPanicPictureLossSpec)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SliceLoss(TUint aFirstMacroblock, TUint aNumMacroblocks, const TPictureId& aPicture) sl@0: { sl@0: __ASSERT_ALWAYS((aFirstMacroblock == KTestFirstMacroblock) && sl@0: (aNumMacroblocks == KTestNumMacroblocks) && sl@0: ComparePictureIDs(aPicture, KTestPictureId1), DevVideoEncoderPanic(EEncoderPanicSliceLoss)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::ReferencePictureSelection(const TDesC8& aSelectionData) sl@0: { sl@0: __ASSERT_ALWAYS((aSelectionData == KTestRefPictureInfo), DevVideoEncoderPanic(EEncoderPanicRefPictureInfo)); sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::CommitL() sl@0: { sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::Revert() sl@0: { sl@0: } sl@0: sl@0: void CMMFTestVideoEncodeHwDevice::SetProxy(MMMFDevVideoRecordProxy& aProxy) sl@0: { sl@0: ASSERT(iProxy == NULL); sl@0: iProxy = &aProxy; sl@0: } sl@0: