os/mm/mmlibs/mmfw/tsrc/mmfunittest/srtdecoder/src/testsrtdecoderregionfuncs.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#include "srtdecoder.h"
sl@0
    17
#include "srtreader.h"
sl@0
    18
#include "testsrtdecoderregionfuncs.h"
sl@0
    19
sl@0
    20
_LIT( KSampleSubtitleSRTFilepath1, "c:\\mm\\subtitle1.srt" );
sl@0
    21
sl@0
    22
// Implementation of RTestSrtDecoderStep0001
sl@0
    23
sl@0
    24
RTestSrtDecoderStep0001::RTestSrtDecoderStep0001()
sl@0
    25
	{
sl@0
    26
	iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0001-HP");
sl@0
    27
	}
sl@0
    28
	
sl@0
    29
TVerdict RTestSrtDecoderStep0001::DoTestStepPreambleL()
sl@0
    30
    {
sl@0
    31
    InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
sl@0
    32
    
sl@0
    33
    return EPass;
sl@0
    34
    }
sl@0
    35
	
sl@0
    36
TVerdict RTestSrtDecoderStep0001::DoTestStepPostambleL()
sl@0
    37
    {
sl@0
    38
    UnInitializeTestStep();
sl@0
    39
    
sl@0
    40
    return EPass;
sl@0
    41
    }
sl@0
    42
	
sl@0
    43
TVerdict RTestSrtDecoderStep0001::DoTestStepL()
sl@0
    44
	{
sl@0
    45
	INFO_PRINTF1(_L("Enter DoTestStepL"));
sl@0
    46
	TVerdict result = TestCalculateSubtitleRegion();
sl@0
    47
    if (EPass != result)
sl@0
    48
        {
sl@0
    49
        ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestCalculateSubtitleRegion failed. "));
sl@0
    50
        INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
    51
	    return result;
sl@0
    52
        }
sl@0
    53
        
sl@0
    54
    result = TestSetVideoPosition();
sl@0
    55
    if (EPass != result)
sl@0
    56
        {
sl@0
    57
        ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestSetVideoPosition failed. "));
sl@0
    58
        INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
    59
	    return result;
sl@0
    60
        }
sl@0
    61
        
sl@0
    62
    result = TestStartStop();
sl@0
    63
    if (EPass != result)
sl@0
    64
        {
sl@0
    65
        ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0001::TestStartStop failed. "));
sl@0
    66
        INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
    67
	    return result;
sl@0
    68
        }
sl@0
    69
     
sl@0
    70
    INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
    71
	return result;
sl@0
    72
	}
sl@0
    73
sl@0
    74
sl@0
    75
TVerdict RTestSrtDecoderStep0001::TestCalculateSubtitleRegion()
sl@0
    76
    {
sl@0
    77
    TVerdict result = EPass;
sl@0
    78
    const TInt KSrtSubtitleRegionYFactor = 33;
sl@0
    79
    TRect inputRegion;
sl@0
    80
    inputRegion.iTl.iX = 1;
sl@0
    81
    inputRegion.iTl.iY = 1;
sl@0
    82
    inputRegion.iBr.iX = 240;
sl@0
    83
    inputRegion.iBr.iY = 160;
sl@0
    84
    TInt deltaValue = 24;
sl@0
    85
    
sl@0
    86
    TRect outputRegion;
sl@0
    87
    TRect expectedRegion;
sl@0
    88
    
sl@0
    89
    while((inputRegion.iBr.iX > inputRegion.iTl.iX) && (inputRegion.iBr.iY > inputRegion.iTl.iY))
sl@0
    90
        {
sl@0
    91
        TInt error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
sl@0
    92
        if (KErrNone != error)
sl@0
    93
            {
sl@0
    94
            return EFail;
sl@0
    95
            }
sl@0
    96
    
sl@0
    97
        expectedRegion.SetRect(
sl@0
    98
            inputRegion.iTl.iX, 
sl@0
    99
            inputRegion.iTl.iY + inputRegion.Height() * (100 - KSrtSubtitleRegionYFactor) / 100,
sl@0
   100
            inputRegion.iBr.iX,
sl@0
   101
            inputRegion.iBr.iY);
sl@0
   102
        
sl@0
   103
        if (expectedRegion != outputRegion)
sl@0
   104
            {
sl@0
   105
            ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle rect(%d, %d, %d, %d). "), 
sl@0
   106
                inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
sl@0
   107
            return EFail;
sl@0
   108
            }
sl@0
   109
        
sl@0
   110
        inputRegion.iTl.iX += deltaValue;
sl@0
   111
        inputRegion.iTl.iY += deltaValue;
sl@0
   112
        inputRegion.iBr.iX -= deltaValue;
sl@0
   113
        inputRegion.iBr.iY -= deltaValue;
sl@0
   114
        }
sl@0
   115
    
sl@0
   116
    return result;
sl@0
   117
    }
sl@0
   118
sl@0
   119
TVerdict RTestSrtDecoderStep0001::TestSetVideoPosition()
sl@0
   120
    {
sl@0
   121
    TVerdict result = EPass;
sl@0
   122
    
sl@0
   123
    TInt64 val = 0;
sl@0
   124
    
sl@0
   125
    for (TInt i = 0; i < 20; i++)
sl@0
   126
        {
sl@0
   127
        val += 10000000;
sl@0
   128
        iSrtDecoder->SetVideoPosition(val);
sl@0
   129
        }
sl@0
   130
     
sl@0
   131
    return result;
sl@0
   132
    }
sl@0
   133
    
sl@0
   134
TVerdict RTestSrtDecoderStep0001::TestStartStop()
sl@0
   135
    {
sl@0
   136
    TVerdict result = EPass;
sl@0
   137
    
sl@0
   138
    for (TInt i = 0; i < 10; i++)
sl@0
   139
        {
sl@0
   140
        iSrtDecoder->Start();
sl@0
   141
        iSrtDecoder->Stop();
sl@0
   142
        }
sl@0
   143
    
sl@0
   144
    return result;
sl@0
   145
    }
sl@0
   146
    
sl@0
   147
// Implementation of RTestSrtDecoderStep0102
sl@0
   148
	
sl@0
   149
RTestSrtDecoderStep0102::RTestSrtDecoderStep0102()
sl@0
   150
	{
sl@0
   151
	iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0102-HP");
sl@0
   152
	}
sl@0
   153
sl@0
   154
TVerdict RTestSrtDecoderStep0102::DoTestStepPreambleL()
sl@0
   155
    {
sl@0
   156
    InitializeTestStepL(EFalse, KSampleSubtitleSRTFilepath1);
sl@0
   157
    
sl@0
   158
    return EPass;
sl@0
   159
    }
sl@0
   160
	
sl@0
   161
TVerdict RTestSrtDecoderStep0102::DoTestStepPostambleL()
sl@0
   162
    {
sl@0
   163
    UnInitializeTestStep();
sl@0
   164
    
sl@0
   165
    return EPass;
sl@0
   166
    }
sl@0
   167
    
sl@0
   168
TVerdict RTestSrtDecoderStep0102::DoTestStepL()
sl@0
   169
	{
sl@0
   170
	INFO_PRINTF1(_L("Enter DoTestStepL"));
sl@0
   171
	TVerdict result = EPass;
sl@0
   172
	
sl@0
   173
    result = TestCalculateSubtitleRegion();
sl@0
   174
    if (EPass != result)
sl@0
   175
        {
sl@0
   176
        ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestCalculateSubtitleRegion failed. "));
sl@0
   177
        INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
   178
	    return result;
sl@0
   179
        }
sl@0
   180
        
sl@0
   181
    result = TestStartStop();
sl@0
   182
    if (EPass != result)
sl@0
   183
        {
sl@0
   184
        ERR_PRINTF1(_L("Error - RTestSrtDecoderStep0102::TestStartStop failed. "));
sl@0
   185
        INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
   186
	    return result;
sl@0
   187
        }
sl@0
   188
     
sl@0
   189
    INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
   190
	return result;
sl@0
   191
	}
sl@0
   192
sl@0
   193
TVerdict RTestSrtDecoderStep0102::TestCalculateSubtitleRegion()
sl@0
   194
    {
sl@0
   195
    TInt error = KErrNone;
sl@0
   196
    TInt expectedErr = KErrArgument;
sl@0
   197
    TRect inputRegion;
sl@0
   198
    TRect outputRegion;
sl@0
   199
    const TInt KTestSubtitleRegionValueNum = 4;
sl@0
   200
    const TInt KTestSubtitleInvalidRegionTypeNum = 5;
sl@0
   201
    const TInt KTestSubtitleRegionValues[KTestSubtitleRegionValueNum] = {10, 20, 20, 200};
sl@0
   202
    TInt testSubtitleRegionFactors[KTestSubtitleRegionValueNum] = {0, 0, 0, 0};
sl@0
   203
    const TInt KTestSubtitleRegionFactorIndex[KTestSubtitleInvalidRegionTypeNum][KTestSubtitleRegionValueNum] = 
sl@0
   204
        {
sl@0
   205
            // test inverted rect
sl@0
   206
            {2, 3, 0, 1},
sl@0
   207
            // test inverted rect
sl@0
   208
            {2, 3, 1, 0},
sl@0
   209
            // test a vertical line
sl@0
   210
            {1, 0, 2, 3},
sl@0
   211
            // test a horizontal line
sl@0
   212
            {0, 1, 3, 2},
sl@0
   213
            // test a point 
sl@0
   214
            {0, 0, 0, 0}
sl@0
   215
        };
sl@0
   216
    TInt i = 0;
sl@0
   217
    
sl@0
   218
    // test 0 values
sl@0
   219
    for (i = 0; i < KTestSubtitleRegionValueNum; i++)
sl@0
   220
        {
sl@0
   221
        inputRegion.SetRect(
sl@0
   222
            KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0], 
sl@0
   223
            KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1], 
sl@0
   224
            KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2], 
sl@0
   225
            KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
sl@0
   226
        error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
sl@0
   227
        
sl@0
   228
        if (expectedErr != error)
sl@0
   229
            {
sl@0
   230
            ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), 
sl@0
   231
                inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
sl@0
   232
            return EFail;
sl@0
   233
            }
sl@0
   234
            
sl@0
   235
        // initialize factors
sl@0
   236
        testSubtitleRegionFactors[i] = 1;
sl@0
   237
        }
sl@0
   238
        
sl@0
   239
    // test minus values
sl@0
   240
    for (i = 0; i < KTestSubtitleRegionValueNum; i++)
sl@0
   241
        {
sl@0
   242
        // in each loop, the factors will have different number of minus value.
sl@0
   243
        testSubtitleRegionFactors[i] = -1;
sl@0
   244
        inputRegion.SetRect(
sl@0
   245
            KTestSubtitleRegionValues[0] * testSubtitleRegionFactors[0], 
sl@0
   246
            KTestSubtitleRegionValues[1] * testSubtitleRegionFactors[1], 
sl@0
   247
            KTestSubtitleRegionValues[2] * testSubtitleRegionFactors[2], 
sl@0
   248
            KTestSubtitleRegionValues[3] * testSubtitleRegionFactors[3]);
sl@0
   249
        error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
sl@0
   250
        
sl@0
   251
        if (expectedErr != error)
sl@0
   252
            {
sl@0
   253
            ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), 
sl@0
   254
                inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
sl@0
   255
            return EFail;
sl@0
   256
            }
sl@0
   257
        }
sl@0
   258
    
sl@0
   259
    // Test various invalid rectangles
sl@0
   260
    for (i = 0; i < KTestSubtitleInvalidRegionTypeNum; i++)
sl@0
   261
        {
sl@0
   262
        inputRegion.SetRect(
sl@0
   263
            KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][0]], 
sl@0
   264
            KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][1]], 
sl@0
   265
            KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][2]], 
sl@0
   266
            KTestSubtitleRegionValues[KTestSubtitleRegionFactorIndex[i][3]]);
sl@0
   267
        error = iSrtDecoder->CalculateSubtitleRegion(inputRegion, outputRegion);
sl@0
   268
        if (expectedErr != error)
sl@0
   269
            {
sl@0
   270
            ERR_PRINTF5(_L("Error - MSubtitleDecoder::CalculateSubtitleRegion failed to handle invalid rect(%d, %d, %d, %d). "), 
sl@0
   271
                inputRegion.iTl.iX, inputRegion.iTl.iY, inputRegion.iBr.iX, inputRegion.iBr.iY);
sl@0
   272
            return EFail;
sl@0
   273
            }
sl@0
   274
        }
sl@0
   275
        
sl@0
   276
    return EPass;
sl@0
   277
    }
sl@0
   278
    
sl@0
   279
TVerdict RTestSrtDecoderStep0102::TestStartStop()
sl@0
   280
    {
sl@0
   281
    TVerdict result = EPass;
sl@0
   282
    
sl@0
   283
    // Do not call Start before Stop because it will panic
sl@0
   284
    // Call Stop() multiple times with and without calling Start() first
sl@0
   285
    for (TInt i = 0; i < 10; i++)
sl@0
   286
        {
sl@0
   287
        if ((0 == i) || (i % 4))
sl@0
   288
            {
sl@0
   289
            iSrtDecoder->Stop();
sl@0
   290
            }
sl@0
   291
        else
sl@0
   292
            {
sl@0
   293
            iSrtDecoder->Start();
sl@0
   294
            }
sl@0
   295
        }
sl@0
   296
        
sl@0
   297
    return result;
sl@0
   298
    }
sl@0
   299
sl@0
   300
sl@0
   301
sl@0
   302
// Implementation of RTestSrtDecoderStep0104
sl@0
   303
	
sl@0
   304
RTestSrtDecoderStep0104::RTestSrtDecoderStep0104()
sl@0
   305
	{
sl@0
   306
	iTestStepName = _L("MM-MMF-SUBTITLE-SRTDECODER-U-0104-HP");
sl@0
   307
	}
sl@0
   308
sl@0
   309
TVerdict RTestSrtDecoderStep0104::DoTestStepL()
sl@0
   310
	{
sl@0
   311
	INFO_PRINTF1(_L("Enter DoTestStepL"));
sl@0
   312
	TVerdict result = EPass;
sl@0
   313
	
sl@0
   314
	iSrtReader = CSrtReader::NewL(KSampleSubtitleSRTFilepath1);
sl@0
   315
    
sl@0
   316
    User::LeaveIfError(iRbsSession.Connect());
sl@0
   317
    CleanupStack::PushL(&iRbsSession);
sl@0
   318
    iSrtDecoder = CSrtSubtitleDecoder::NewL(*iSrtReader);
sl@0
   319
	
sl@0
   320
    iSrtDecoder->SetVideoPosition(-100);
sl@0
   321
     
sl@0
   322
    INFO_PRINTF1(_L("Exit DoTestStepL"));
sl@0
   323
	return result;
sl@0
   324
	}
sl@0
   325
sl@0
   326
sl@0
   327
sl@0
   328
sl@0
   329
sl@0
   330
sl@0
   331
sl@0
   332