1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/mmlibs/mmfw/tsrc/mmfunittest/srtdecoder/src/testsrtdecoderregionfuncs.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,332 @@
1.4 +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#include "srtdecoder.h"
1.20 +#include "srtreader.h"
1.21 +#include "testsrtdecoderregionfuncs.h"
1.22 +
1.23 +_LIT( KSampleSubtitleSRTFilepath1, "c:\\mm\\subtitle1.srt" );
1.24 +
1.25 +// Implementation of RTestSrtDecoderStep0001
1.26 +
1.27 +RTestSrtDecoderStep0001::RTestSrtDecoderStep0001()
1.28 + {
1.29 + iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0001-HP");
1.30 + }
1.31 +
1.32 +TVerdict RTestSrtDecoderStep0001::DoTestStepPreambleL()
1.33 + {
1.34 + InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
1.35 +
1.36 + return EPass;
1.37 + }
1.38 +
1.39 +TVerdict RTestSrtDecoderStep0001::DoTestStepPostambleL()
1.40 + {
1.41 + UnInitializeTestStep();
1.42 +
1.43 + return EPass;
1.44 + }
1.45 +
1.46 +TVerdict RTestSrtDecoderStep0001::DoTestStepL()
1.47 + {
1.48 + INFO_PRINTF1(_L("Enter DoTestStepL"));
1.49 + TVerdict result = TestCalculateSubtitleRegion();
1.50 + if (EPass != result)
1.51 + {
1.52 + ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestCalculateSubtitleRegion failed. "));
1.53 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.54 + return result;
1.55 + }
1.56 +
1.57 + result = TestSetVideoPosition();
1.58 + if (EPass != result)
1.59 + {
1.60 + ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestSetVideoPosition failed. "));
1.61 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.62 + return result;
1.63 + }
1.64 +
1.65 + result = TestStartStop();
1.66 + if (EPass != result)
1.67 + {
1.68 + ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestStartStop failed. "));
1.69 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.70 + return result;
1.71 + }
1.72 +
1.73 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.74 + return result;
1.75 + }
1.76 +
1.77 +
1.78 +TVerdict RTestSrtDecoderStep0001::TestCalculateSubtitleRegion()
1.79 + {
1.80 + TVerdict result = EPass;
1.81 + const TInt KSrtSubtitleRegionYFactor = 33;
1.82 + TRect inputRegion;
1.83 + inputRegion.iTl.iX = 1;
1.84 + inputRegion.iTl.iY = 1;
1.85 + inputRegion.iBr.iX = 240;
1.86 + inputRegion.iBr.iY = 160;
1.87 + TInt deltaValue = 24;
1.88 +
1.89 + TRect outputRegion;
1.90 + TRect expectedRegion;
1.91 +
1.92 + while((inputRegion.iBr.iX > inputRegion.iTl.iX) && (inputRegion.iBr.iY > inputRegion.iTl.iY))
1.93 + {
1.94 + TInt error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
1.95 + if (KErrNone != error)
1.96 + {
1.97 + return EFail;
1.98 + }
1.99 +
1.100 + expectedRegion.SetRect(
1.101 + inputRegion.iTl.iX,
1.102 + inputRegion.iTl.iY + inputRegion.Height() * (100 - KSrtSubtitleRegionYFactor) / 100,
1.103 + inputRegion.iBr.iX,
1.104 + inputRegion.iBr.iY);
1.105 +
1.106 + if (expectedRegion != outputRegion)
1.107 + {
1.108 + ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle rect(%d, %d, %d, %d). "),
1.109 + inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
1.110 + return EFail;
1.111 + }
1.112 +
1.113 + inputRegion.iTl.iX += deltaValue;
1.114 + inputRegion.iTl.iY += deltaValue;
1.115 + inputRegion.iBr.iX -= deltaValue;
1.116 + inputRegion.iBr.iY -= deltaValue;
1.117 + }
1.118 +
1.119 + return result;
1.120 + }
1.121 +
1.122 +TVerdict RTestSrtDecoderStep0001::TestSetVideoPosition()
1.123 + {
1.124 + TVerdict result = EPass;
1.125 +
1.126 + TInt64 val = 0;
1.127 +
1.128 + for (TInt i = 0; i < 20; i++)
1.129 + {
1.130 + val += 10000000;
1.131 + iSrtDecoder->SetVideoPosition(val);
1.132 + }
1.133 +
1.134 + return result;
1.135 + }
1.136 +
1.137 +TVerdict RTestSrtDecoderStep0001::TestStartStop()
1.138 + {
1.139 + TVerdict result = EPass;
1.140 +
1.141 + for (TInt i = 0; i < 10; i++)
1.142 + {
1.143 + iSrtDecoder->Start();
1.144 + iSrtDecoder->Stop();
1.145 + }
1.146 +
1.147 + return result;
1.148 + }
1.149 +
1.150 +// Implementation of RTestSrtDecoderStep0102
1.151 +
1.152 +RTestSrtDecoderStep0102::RTestSrtDecoderStep0102()
1.153 + {
1.154 + iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0102-HP");
1.155 + }
1.156 +
1.157 +TVerdict RTestSrtDecoderStep0102::DoTestStepPreambleL()
1.158 + {
1.159 + InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
1.160 +
1.161 + return EPass;
1.162 + }
1.163 +
1.164 +TVerdict RTestSrtDecoderStep0102::DoTestStepPostambleL()
1.165 + {
1.166 + UnInitializeTestStep();
1.167 +
1.168 + return EPass;
1.169 + }
1.170 +
1.171 +TVerdict RTestSrtDecoderStep0102::DoTestStepL()
1.172 + {
1.173 + INFO_PRINTF1(_L("Enter DoTestStepL"));
1.174 + TVerdict result = EPass;
1.175 +
1.176 + result = TestCalculateSubtitleRegion();
1.177 + if (EPass != result)
1.178 + {
1.179 + ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestCalculateSubtitleRegion failed. "));
1.180 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.181 + return result;
1.182 + }
1.183 +
1.184 + result = TestStartStop();
1.185 + if (EPass != result)
1.186 + {
1.187 + ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestStartStop failed. "));
1.188 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.189 + return result;
1.190 + }
1.191 +
1.192 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.193 + return result;
1.194 + }
1.195 +
1.196 +TVerdict RTestSrtDecoderStep0102::TestCalculateSubtitleRegion()
1.197 + {
1.198 + TInt error = KErrNone;
1.199 + TInt expectedErr = KErrArgument;
1.200 + TRect inputRegion;
1.201 + TRect outputRegion;
1.202 + const TInt KTestSubtitleRegionValueNum = 4;
1.203 + const TInt KTestSubtitleInvalidRegionTypeNum = 5;
1.204 + const TInt KTestSubtitleRegionValues[KTestSubtitleRegionValueNum] = {10, 20, 20, 200};
1.205 + TInt testSubtitleRegionFactors[KTestSubtitleRegionValueNum] = {0, 0, 0, 0};
1.206 + const TInt KTestSubtitleRegionFactorIndex[KTestSubtitleInvalidRegionTypeNum][KTestSubtitleRegionValueNum] =
1.207 + {
1.208 + // test inverted rect
1.209 + {2, 3, 0, 1},
1.210 + // test inverted rect
1.211 + {2, 3, 1, 0},
1.212 + // test a vertical line
1.213 + {1, 0, 2, 3},
1.214 + // test a horizontal line
1.215 + {0, 1, 3, 2},
1.216 + // test a point
1.217 + {0, 0, 0, 0}
1.218 + };
1.219 + TInt i = 0;
1.220 +
1.221 + // test 0 values
1.222 + for (i = 0; i < KTestSubtitleRegionValueNum; i++)
1.223 + {
1.224 + inputRegion.SetRect(
1.225 + KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0],
1.226 + KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1],
1.227 + KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2],
1.228 + KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
1.229 + error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
1.230 +
1.231 + if (expectedErr != error)
1.232 + {
1.233 + ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
1.234 + inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
1.235 + return EFail;
1.236 + }
1.237 +
1.238 + // initialize factors
1.239 + testSubtitleRegionFactors[i] = 1;
1.240 + }
1.241 +
1.242 + // test minus values
1.243 + for (i = 0; i < KTestSubtitleRegionValueNum; i++)
1.244 + {
1.245 + // in each loop, the factors will have different number of minus value.
1.246 + testSubtitleRegionFactors[i] = -1;
1.247 + inputRegion.SetRect(
1.248 + KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0],
1.249 + KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1],
1.250 + KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2],
1.251 + KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
1.252 + error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
1.253 +
1.254 + if (expectedErr != error)
1.255 + {
1.256 + ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
1.257 + inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
1.258 + return EFail;
1.259 + }
1.260 + }
1.261 +
1.262 + // Test various invalid rectangles
1.263 + for (i = 0; i < KTestSubtitleInvalidRegionTypeNum; i++)
1.264 + {
1.265 + inputRegion.SetRect(
1.266 + KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][0]],
1.267 + KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][1]],
1.268 + KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][2]],
1.269 + KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][3]]);
1.270 + error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
1.271 + if (expectedErr != error)
1.272 + {
1.273 + ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "),
1.274 + inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
1.275 + return EFail;
1.276 + }
1.277 + }
1.278 +
1.279 + return EPass;
1.280 + }
1.281 +
1.282 +TVerdict RTestSrtDecoderStep0102::TestStartStop()
1.283 + {
1.284 + TVerdict result = EPass;
1.285 +
1.286 + // Do not call Start before Stop because it will panic
1.287 + // Call Stop() multiple times with and without calling Start() first
1.288 + for (TInt i = 0; i < 10; i++)
1.289 + {
1.290 + if ((0 == i) || (i % 4))
1.291 + {
1.292 + iSrtDecoder->Stop();
1.293 + }
1.294 + else
1.295 + {
1.296 + iSrtDecoder->Start();
1.297 + }
1.298 + }
1.299 +
1.300 + return result;
1.301 + }
1.302 +
1.303 +
1.304 +
1.305 +// Implementation of RTestSrtDecoderStep0104
1.306 +
1.307 +RTestSrtDecoderStep0104::RTestSrtDecoderStep0104()
1.308 + {
1.309 + iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0104-HP");
1.310 + }
1.311 +
1.312 +TVerdict RTestSrtDecoderStep0104::DoTestStepL()
1.313 + {
1.314 + INFO_PRINTF1(_L("Enter DoTestStepL"));
1.315 + TVerdict result = EPass;
1.316 +
1.317 + iSrtReader = CSrtReader::NewL(KSampleSubtitleSRTFilepath1);
1.318 +
1.319 + User::LeaveIfError(iRbsSession.Connect());
1.320 + CleanupStack::PushL(&iRbsSession);
1.321 + iSrtDecoder = CSrtSubtitleDecoder::NewL(*iSrtReader);
1.322 +
1.323 + iSrtDecoder->SetVideoPosition(-100);
1.324 +
1.325 + INFO_PRINTF1(_L("Exit DoTestStepL"));
1.326 + return result;
1.327 + }
1.328 +
1.329 +
1.330 +
1.331 +
1.332 +
1.333 +
1.334 +
1.335 +