sl@0: // Copyright (c) 2008-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 "srtdecoder.h" sl@0: #include "srtreader.h" sl@0: #include "testsrtdecoderregionfuncs.h" sl@0: sl@0: _LIT( KSampleSubtitleSRTFilepath1, "c:\\mm\\subtitle1.srt" ); sl@0: sl@0: // Implementation of RTestSrtDecoderStep0001 sl@0: sl@0: RTestSrtDecoderStep0001::RTestSrtDecoderStep0001() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0001-HP"); sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::DoTestStepPreambleL() sl@0: { sl@0: InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::DoTestStepPostambleL() sl@0: { sl@0: UnInitializeTestStep(); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::DoTestStepL() sl@0: { sl@0: INFO_PRINTF1(_L("Enter DoTestStepL")); sl@0: TVerdict result = TestCalculateSubtitleRegion(); sl@0: if (EPass != result) sl@0: { sl@0: ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestCalculateSubtitleRegion failed. ")); sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: result = TestSetVideoPosition(); sl@0: if (EPass != result) sl@0: { sl@0: ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestSetVideoPosition failed. ")); sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: result = TestStartStop(); sl@0: if (EPass != result) sl@0: { sl@0: ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestStartStop failed. ")); sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::TestCalculateSubtitleRegion() sl@0: { sl@0: TVerdict result = EPass; sl@0: const TInt KSrtSubtitleRegionYFactor = 33; sl@0: TRect inputRegion; sl@0: inputRegion.iTl.iX = 1; sl@0: inputRegion.iTl.iY = 1; sl@0: inputRegion.iBr.iX = 240; sl@0: inputRegion.iBr.iY = 160; sl@0: TInt deltaValue = 24; sl@0: sl@0: TRect outputRegion; sl@0: TRect expectedRegion; sl@0: sl@0: while((inputRegion.iBr.iX > inputRegion.iTl.iX) && (inputRegion.iBr.iY > inputRegion.iTl.iY)) sl@0: { sl@0: TInt error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion); sl@0: if (KErrNone != error) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: expectedRegion.SetRect( sl@0: inputRegion.iTl.iX, sl@0: inputRegion.iTl.iY + inputRegion.Height() * (100 - KSrtSubtitleRegionYFactor) / 100, sl@0: inputRegion.iBr.iX, sl@0: inputRegion.iBr.iY); sl@0: sl@0: if (expectedRegion != outputRegion) sl@0: { sl@0: ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle rect(%d, %d, %d, %d). "), sl@0: inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY); sl@0: return EFail; sl@0: } sl@0: sl@0: inputRegion.iTl.iX += deltaValue; sl@0: inputRegion.iTl.iY += deltaValue; sl@0: inputRegion.iBr.iX -= deltaValue; sl@0: inputRegion.iBr.iY -= deltaValue; sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::TestSetVideoPosition() sl@0: { sl@0: TVerdict result = EPass; sl@0: sl@0: TInt64 val = 0; sl@0: sl@0: for (TInt i = 0; i < 20; i++) sl@0: { sl@0: val += 10000000; sl@0: iSrtDecoder->SetVideoPosition(val); sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0001::TestStartStop() sl@0: { sl@0: TVerdict result = EPass; sl@0: sl@0: for (TInt i = 0; i < 10; i++) sl@0: { sl@0: iSrtDecoder->Start(); sl@0: iSrtDecoder->Stop(); sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: // Implementation of RTestSrtDecoderStep0102 sl@0: sl@0: RTestSrtDecoderStep0102::RTestSrtDecoderStep0102() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0102-HP"); sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0102::DoTestStepPreambleL() sl@0: { sl@0: InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0102::DoTestStepPostambleL() sl@0: { sl@0: UnInitializeTestStep(); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0102::DoTestStepL() sl@0: { sl@0: INFO_PRINTF1(_L("Enter DoTestStepL")); sl@0: TVerdict result = EPass; sl@0: sl@0: result = TestCalculateSubtitleRegion(); sl@0: if (EPass != result) sl@0: { sl@0: ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestCalculateSubtitleRegion failed. ")); sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: result = TestStartStop(); sl@0: if (EPass != result) sl@0: { sl@0: ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestStartStop failed. ")); sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0102::TestCalculateSubtitleRegion() sl@0: { sl@0: TInt error = KErrNone; sl@0: TInt expectedErr = KErrArgument; sl@0: TRect inputRegion; sl@0: TRect outputRegion; sl@0: const TInt KTestSubtitleRegionValueNum = 4; sl@0: const TInt KTestSubtitleInvalidRegionTypeNum = 5; sl@0: const TInt KTestSubtitleRegionValues[KTestSubtitleRegionValueNum] = {10, 20, 20, 200}; sl@0: TInt testSubtitleRegionFactors[KTestSubtitleRegionValueNum] = {0, 0, 0, 0}; sl@0: const TInt KTestSubtitleRegionFactorIndex[KTestSubtitleInvalidRegionTypeNum][KTestSubtitleRegionValueNum] = sl@0: { sl@0: // test inverted rect sl@0: {2, 3, 0, 1}, sl@0: // test inverted rect sl@0: {2, 3, 1, 0}, sl@0: // test a vertical line sl@0: {1, 0, 2, 3}, sl@0: // test a horizontal line sl@0: {0, 1, 3, 2}, sl@0: // test a point sl@0: {0, 0, 0, 0} sl@0: }; sl@0: TInt i = 0; sl@0: sl@0: // test 0 values sl@0: for (i = 0; i < KTestSubtitleRegionValueNum; i++) sl@0: { sl@0: inputRegion.SetRect( sl@0: KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0], sl@0: KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1], sl@0: KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2], sl@0: KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]); sl@0: error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion); sl@0: sl@0: if (expectedErr != error) sl@0: { sl@0: ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), sl@0: inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY); sl@0: return EFail; sl@0: } sl@0: sl@0: // initialize factors sl@0: testSubtitleRegionFactors[i] = 1; sl@0: } sl@0: sl@0: // test minus values sl@0: for (i = 0; i < KTestSubtitleRegionValueNum; i++) sl@0: { sl@0: // in each loop, the factors will have different number of minus value. sl@0: testSubtitleRegionFactors[i] = -1; sl@0: inputRegion.SetRect( sl@0: KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0], sl@0: KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1], sl@0: KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2], sl@0: KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]); sl@0: error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion); sl@0: sl@0: if (expectedErr != error) sl@0: { sl@0: ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), sl@0: inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY); sl@0: return EFail; sl@0: } sl@0: } sl@0: sl@0: // Test various invalid rectangles sl@0: for (i = 0; i < KTestSubtitleInvalidRegionTypeNum; i++) sl@0: { sl@0: inputRegion.SetRect( sl@0: KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][0]], sl@0: KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][1]], sl@0: KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][2]], sl@0: KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][3]]); sl@0: error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion); sl@0: if (expectedErr != error) sl@0: { sl@0: ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), sl@0: inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY); sl@0: return EFail; sl@0: } sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0102::TestStartStop() sl@0: { sl@0: TVerdict result = EPass; sl@0: sl@0: // Do not call Start before Stop because it will panic sl@0: // Call Stop() multiple times with and without calling Start() first sl@0: for (TInt i = 0; i < 10; i++) sl@0: { sl@0: if ((0 == i) || (i % 4)) sl@0: { sl@0: iSrtDecoder->Stop(); sl@0: } sl@0: else sl@0: { sl@0: iSrtDecoder->Start(); sl@0: } sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: sl@0: sl@0: // Implementation of RTestSrtDecoderStep0104 sl@0: sl@0: RTestSrtDecoderStep0104::RTestSrtDecoderStep0104() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0104-HP"); sl@0: } sl@0: sl@0: TVerdict RTestSrtDecoderStep0104::DoTestStepL() sl@0: { sl@0: INFO_PRINTF1(_L("Enter DoTestStepL")); sl@0: TVerdict result = EPass; sl@0: sl@0: iSrtReader = CSrtReader::NewL(KSampleSubtitleSRTFilepath1); sl@0: sl@0: User::LeaveIfError(iRbsSession.Connect()); sl@0: CleanupStack::PushL(&iRbsSession); sl@0: iSrtDecoder = CSrtSubtitleDecoder::NewL(*iSrtReader); sl@0: sl@0: iSrtDecoder->SetVideoPosition(-100); sl@0: sl@0: INFO_PRINTF1(_L("Exit DoTestStepL")); sl@0: return result; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: