|
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // |
|
15 |
|
16 #include <mmf/common/mmferrors.h> |
|
17 #include <caf/caf.h> |
|
18 using namespace ContentAccess; |
|
19 #include "tsu3gplibraryapinegative.h" |
|
20 |
|
21 // -------------------------- |
|
22 // C3GPLibParser_Negative |
|
23 // -------------------------- |
|
24 // |
|
25 void C3GPLibParser_Negative::CallAudioApiL(C3GPParse* aParse, TInt aExpectedError) |
|
26 { |
|
27 TInt err = KErrNone; |
|
28 // Retrieve audio stream attributes |
|
29 T3GPAudioType audioType; |
|
30 TInt framesPerSample; |
|
31 TUint length; |
|
32 TUint avgBitRate; |
|
33 TUint timeScale; |
|
34 |
|
35 err = aParse->GetAudioProperties(audioType, length, framesPerSample, avgBitRate, timeScale); |
|
36 User::LeaveIfError(CheckError(err, aExpectedError, _L("aParse->GetAudioProperties"))); |
|
37 |
|
38 TBool available; |
|
39 T3GPFrameType type = E3GPAudio; |
|
40 err = aParse->GetFrameAvailability(type, available); |
|
41 if (aExpectedError == KErrNotSupported) |
|
42 { |
|
43 // GetFrameAvailability will return KErrNotFound when there is no audio in the 3gp files |
|
44 User::LeaveIfError(CheckError(err, KErrNotFound, _L("GetFrameAvailability"))); |
|
45 } |
|
46 else |
|
47 { |
|
48 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetFrameAvailability"))); |
|
49 } |
|
50 |
|
51 TUint size; |
|
52 err = aParse->GetAudioFramesSize(size); |
|
53 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetAudioFramesSize"))); |
|
54 |
|
55 RBuf8 buffer; |
|
56 CleanupClosePushL(buffer); |
|
57 |
|
58 if (aExpectedError == KErrNone) |
|
59 { |
|
60 buffer.CreateL(size); // Use size retrieved from GetVideoFrameSize |
|
61 } |
|
62 else |
|
63 { |
|
64 buffer.CreateL(KBufferSize); // size from above may not be assigned since this is negative tests. |
|
65 } |
|
66 |
|
67 TUint timeStampInMs; |
|
68 TUint timeStampInTimescale; |
|
69 TInt returnedFrames; |
|
70 err = aParse->ReadAudioFrames(buffer, returnedFrames, timeStampInMs, timeStampInTimescale); |
|
71 User::LeaveIfError(CheckError(err, aExpectedError, _L("ReadAudioFrames"))); |
|
72 CleanupStack::PopAndDestroy(&buffer); |
|
73 |
|
74 TUint index; |
|
75 err = aParse->GetAudioSampleEntryIndex(index); |
|
76 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetAudioSampleEntryIndex"))); |
|
77 |
|
78 T3GPQcelpStorageMode mode; |
|
79 err = aParse->GetQcelpStorageMode(mode); |
|
80 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetQcelpStorageMode"))); |
|
81 } |
|
82 |
|
83 void C3GPLibParser_Negative::CallVideoApiL(C3GPParse* aParse, TInt aExpectedError) |
|
84 { |
|
85 TInt err = KErrNone; |
|
86 // Retrieve video & audio stream attributes |
|
87 T3GPVideoType videoType; |
|
88 TUint length; |
|
89 TReal frameRate; |
|
90 TUint avgBitRate; |
|
91 TSize videoSize; |
|
92 TUint timeScale; |
|
93 |
|
94 err = aParse->GetVideoProperties(videoType, length, frameRate, avgBitRate, videoSize, timeScale); |
|
95 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoProperties"))); |
|
96 |
|
97 TBool available; |
|
98 T3GPFrameType type = E3GPVideo; |
|
99 err = aParse->GetFrameAvailability(type, available); |
|
100 if (aExpectedError == KErrNotSupported) |
|
101 { |
|
102 // GetFrameAvailability will return KErrNotFound when there is no video in the 3gp files |
|
103 User::LeaveIfError(CheckError(err, KErrNotFound, _L("GetFrameAvailability"))); |
|
104 } |
|
105 else |
|
106 { |
|
107 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetFrameAvailability"))); |
|
108 } |
|
109 |
|
110 TUint size; |
|
111 err = aParse->GetVideoFrameSize(size); |
|
112 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameSize"))); |
|
113 |
|
114 RBuf8 buffer; |
|
115 CleanupClosePushL(buffer); |
|
116 if (aExpectedError == KErrNone) |
|
117 { |
|
118 buffer.CreateL(size); // Use size retrieved from GetVideoFrameSize |
|
119 } |
|
120 else |
|
121 { |
|
122 buffer.CreateL(KBufferSize); // size from above may not be assigned since this is negative tests. |
|
123 } |
|
124 TBool keyFrame; |
|
125 TUint timeStampInMs; |
|
126 TUint timeStampInTimescale; |
|
127 err = aParse->ReadVideoFrame(buffer, keyFrame, timeStampInMs, timeStampInTimescale); |
|
128 User::LeaveIfError(CheckError(err, aExpectedError, _L("ReadVideoFrame"))); |
|
129 CleanupStack::PopAndDestroy(&buffer); |
|
130 |
|
131 err = aParse->GetVideoTimestamp(timeStampInMs, timeStampInTimescale); |
|
132 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoTimestamp"))); |
|
133 |
|
134 TUint num; |
|
135 err = aParse->GetNumberOfVideoFrames(num); |
|
136 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetNumberOfVideoFrames"))); |
|
137 |
|
138 TUint index; |
|
139 err = aParse->GetVideoSampleEntryIndex(index); |
|
140 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoSampleEntryIndex"))); |
|
141 |
|
142 err = aParse->GetVideoFrameSize(index, size); |
|
143 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameSize"))); |
|
144 |
|
145 err = aParse->GetVideoFrameStartTime(index, timeStampInMs, timeStampInTimescale); |
|
146 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameStartTime"))); |
|
147 |
|
148 err = aParse->GetVideoFrameKeyType(index, keyFrame); |
|
149 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameKeyType"))); |
|
150 |
|
151 TInt level; |
|
152 err = aParse->GetH263VideoLevel(level); |
|
153 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetH263VideoLevel"))); |
|
154 |
|
155 T3GPFrameDependencies dependencies; |
|
156 err = aParse->GetVideoFrameDependencies(dependencies); |
|
157 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameDependencies"))); |
|
158 |
|
159 TUint numberOfFrames = 2; |
|
160 RArray<T3GPFrameInfoParameters> array; |
|
161 err = aParse->GetVideoFrameProperties(index, numberOfFrames, array); |
|
162 array.Close(); |
|
163 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoFrameProperties"))); |
|
164 } |
|
165 |
|
166 void C3GPLibParser_Negative::CallVideoDecoderInfoApiL(C3GPParse* aParse, TInt aExpectedError) |
|
167 { |
|
168 RBuf8 buffer; |
|
169 CleanupClosePushL(buffer); |
|
170 |
|
171 TInt dsiSize; |
|
172 TInt err = aParse->GetVideoDecoderSpecificInfoSize(dsiSize); |
|
173 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoDecoderSpecificInfoSize"))); |
|
174 |
|
175 if (aExpectedError == KErrNone) |
|
176 { |
|
177 buffer.CreateL(dsiSize); |
|
178 } |
|
179 else |
|
180 { |
|
181 buffer.CreateL(KBufferSize); // size from above may not be assigned since this is negative tests. |
|
182 } |
|
183 err = aParse->GetVideoDecoderSpecificInfo(buffer); |
|
184 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetVideoDecoderSpecificInfo"))); |
|
185 |
|
186 CleanupStack::PopAndDestroy(&buffer); |
|
187 } |
|
188 |
|
189 void C3GPLibParser_Negative::CallAudioDecoderInfoApiL(C3GPParse* aParse, TInt aExpectedError) |
|
190 { |
|
191 RBuf8 buffer; |
|
192 CleanupClosePushL(buffer); |
|
193 TInt dsiSize; |
|
194 TInt err = aParse->GetAudioDecoderSpecificInfoSize(dsiSize); |
|
195 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetAudioDecoderSpecificInfoSize"))); |
|
196 |
|
197 if (aExpectedError == KErrNone) |
|
198 { |
|
199 buffer.CreateL(dsiSize); |
|
200 } |
|
201 else |
|
202 { |
|
203 buffer.CreateL(KBufferSize); // size from above may not be assigned since this is negative tests. |
|
204 } |
|
205 err = aParse->GetAudioDecoderSpecificInfo(buffer); |
|
206 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetAudioDecoderSpecificInfo"))); |
|
207 |
|
208 CleanupStack::PopAndDestroy(&buffer); |
|
209 } |
|
210 |
|
211 // Retrieve user data atom. |
|
212 void C3GPLibParser_Negative::CallUDTApiL(C3GPParse* aParse, TUint32 aUdtType, TUint& aIndex, TInt aExpectedError, T3GPUdtaLocation aLocation) |
|
213 { |
|
214 TInt err = KErrNone; |
|
215 TInt udtSize; |
|
216 TUint tempIndex = aIndex; // use the copy of the aIndex so it does not get overwritten by GetUserDataAtomSize |
|
217 |
|
218 err = aParse->GetUserDataAtomSize(aUdtType, aLocation, tempIndex, udtSize); |
|
219 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetUserDataAtomSize"))); |
|
220 |
|
221 RBuf8 buffer; |
|
222 CleanupClosePushL(buffer); |
|
223 |
|
224 if (aExpectedError == KErrNone && err == KErrNone) |
|
225 { |
|
226 buffer.CreateL(udtSize); // Use size retrieved from GetUserDataAtomSize |
|
227 } |
|
228 else |
|
229 { |
|
230 buffer.CreateL(KBufferSize); // size from above may not be assigned since this is negative tests. |
|
231 } |
|
232 err = aParse->GetUserDataAtom(aUdtType, aLocation, buffer, aIndex); |
|
233 CleanupStack::PopAndDestroy(&buffer); |
|
234 |
|
235 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetUserDataAtom"))); |
|
236 } |
|
237 |
|
238 void C3GPLibParser_Negative::CallCommonApiL(C3GPParse* aParse, TInt aExpectedError) |
|
239 { |
|
240 TInt err = KErrNone; |
|
241 |
|
242 TUint size; |
|
243 TUint avgBitRate; |
|
244 err = aParse->GetContainerProperties(size, avgBitRate); |
|
245 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetContainerProperties"))); |
|
246 |
|
247 T3GPFrameType type; |
|
248 err = aParse->C3GPParse::GetFrameType(type); |
|
249 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetFrameType"))); |
|
250 |
|
251 TBool streamable; |
|
252 err = aParse->GetStreamable(streamable); |
|
253 User::LeaveIfError(CheckError(err, aExpectedError, _L("GetStreamable"))); |
|
254 |
|
255 TUint position = 0; |
|
256 TBool keyFrame = EFalse; |
|
257 TUint audioPosition; |
|
258 TUint videoPosition; |
|
259 err = aParse->Seek(position, keyFrame, audioPosition, videoPosition); |
|
260 User::LeaveIfError(CheckError(err, aExpectedError, _L("Seek"))); |
|
261 } |
|
262 |
|
263 // ----------------------------------------------------------------------------- |
|
264 // Create 3GP Parser to read zero size file content and call all APIs except |
|
265 // asynchrounous read |
|
266 // ----------------------------------------------------------------------------- |
|
267 // |
|
268 C3GPLibParser_0101::C3GPLibParser_0101() |
|
269 { |
|
270 } |
|
271 |
|
272 TVerdict C3GPLibParser_0101::doTestStepL() |
|
273 { |
|
274 if(TestStepResult() == EPass) |
|
275 { |
|
276 C3GPParse* parser = C3GPParse::NewL(); |
|
277 CleanupStack::PushL(parser); |
|
278 |
|
279 TRAPD(err, EmptyFileFailedCorruptL(parser)); |
|
280 if (err != KErrNone) |
|
281 { |
|
282 SetTestStepResult(EFail); |
|
283 } |
|
284 |
|
285 CleanupStack::PopAndDestroy(parser); |
|
286 } |
|
287 return TestStepResult(); |
|
288 } |
|
289 |
|
290 void C3GPLibParser_0101::EmptyFileFailedCorruptL(C3GPParse* aParse) |
|
291 { |
|
292 // all api test with empty file using file path |
|
293 // When the parser is in use, calling parser open again should fail with KErrInUse |
|
294 ParserOpenFileL(aParse, KErrInUse); |
|
295 |
|
296 CallCommonApiL(aParse, KErrCorrupt); |
|
297 CallVideoApiL(aParse, KErrCorrupt); |
|
298 CallAudioApiL(aParse, KErrCorrupt); |
|
299 CallVideoDecoderInfoApiL(aParse, KErrCorrupt); |
|
300 CallAudioDecoderInfoApiL(aParse, KErrCorrupt); |
|
301 TUint32 udtType = 0x7469746c; |
|
302 TUint index; |
|
303 CallUDTApiL(aParse, udtType, index, KErrCorrupt); |
|
304 T3GPUdtaLocation location = E3GPUdtaAudioTrak; |
|
305 CallUDTApiL(aParse, udtType, index, KErrCorrupt, location); |
|
306 ParserCompleteL(aParse); |
|
307 |
|
308 // all api test with empty file using file handle |
|
309 // When the parser is in use, calling parser open again should fail with KErrInUse |
|
310 ParserOpenFileHandleL(aParse, EFileRead | EFileShareReadersOnly, KErrInUse); |
|
311 |
|
312 CallCommonApiL(aParse, KErrCorrupt); |
|
313 CallVideoApiL(aParse, KErrCorrupt); |
|
314 CallAudioApiL(aParse, KErrCorrupt); |
|
315 CallVideoDecoderInfoApiL(aParse, KErrCorrupt); |
|
316 CallAudioDecoderInfoApiL(aParse, KErrCorrupt); |
|
317 CallUDTApiL(aParse, udtType, index, KErrCorrupt); |
|
318 CallUDTApiL(aParse, udtType, index, KErrCorrupt, location); |
|
319 ParserCompleteHandleL(aParse); |
|
320 |
|
321 // all api test with empty file using CAF |
|
322 // When the parser is in use, calling parser open again should fail with KErrInUse |
|
323 ParserOpenCafLC(aParse, KErrInUse); |
|
324 |
|
325 CallCommonApiL(aParse, KErrCorrupt); |
|
326 CallVideoApiL(aParse, KErrCorrupt); |
|
327 CallAudioApiL(aParse, KErrCorrupt); |
|
328 CallVideoDecoderInfoApiL(aParse, KErrCorrupt); |
|
329 CallAudioDecoderInfoApiL(aParse, KErrCorrupt); |
|
330 CallUDTApiL(aParse, udtType, index, KErrCorrupt); |
|
331 CallUDTApiL(aParse, udtType, index, KErrCorrupt, location); |
|
332 ParserCompleteCafL(aParse); |
|
333 |
|
334 // test open using buffer mode |
|
335 // When the parser is in use, calling parser open again should fail with KErrInUse |
|
336 ParserOpenL(aParse, KErrInUse); |
|
337 ParserCompleteL(aParse); |
|
338 // Call complete again, should pass with no error |
|
339 ParserCompleteL(aParse); |
|
340 } |
|
341 |
|
342 // ----------------------------------------------------------------------------- |
|
343 // Initialise a 3GP file parse with an empty filename and file path pointing |
|
344 // at non-existent files |
|
345 // ----------------------------------------------------------------------------- |
|
346 // |
|
347 C3GPLibParser_0102::C3GPLibParser_0102() |
|
348 { |
|
349 } |
|
350 |
|
351 TVerdict C3GPLibParser_0102::doTestStepL() |
|
352 { |
|
353 if(TestStepResult() == EPass) |
|
354 { |
|
355 C3GPParse* parser = C3GPParse::NewL(); |
|
356 CleanupStack::PushL(parser); |
|
357 |
|
358 // Initialise a 3GP file parse with an empty filename and it should fail with KErrUnderflow |
|
359 TInt err = parser->Open(KEmptyFileString); |
|
360 if (err != KErrUnderflow) |
|
361 { |
|
362 ERR_PRINTF2(_L("parser->Open(KEmptyFileString) expects KErrUnderflow. Returns with %d"), err); |
|
363 SetTestStepResult(EFail); |
|
364 } |
|
365 |
|
366 // Setup 3GP Parser with a file path of a non-existing file. This should fail with KErrAccessDenied. |
|
367 err = parser->Open(KInvalidFileString); |
|
368 if (err != KErrAccessDenied) |
|
369 { |
|
370 ERR_PRINTF2(_L("parser->Open(KEmptyFileString) expects KErrAccessDenied. Returns with %d"), err); |
|
371 SetTestStepResult(EFail); |
|
372 } |
|
373 |
|
374 CleanupStack::PopAndDestroy(parser); |
|
375 } |
|
376 return TestStepResult(); |
|
377 } |
|
378 |
|
379 // ----------------------------------------------------------------------------- |
|
380 // Create parser by passing in a file path of a file already opened in |
|
381 // EFileShareExclusive mode. |
|
382 // ----------------------------------------------------------------------------- |
|
383 // |
|
384 C3GPLibParser_0104::C3GPLibParser_0104() |
|
385 { |
|
386 } |
|
387 |
|
388 TVerdict C3GPLibParser_0104::doTestStepL() |
|
389 { |
|
390 if(TestStepResult() == EPass) |
|
391 { |
|
392 C3GPParse* parser = C3GPParse::NewL(); |
|
393 CleanupStack::PushL(parser); |
|
394 |
|
395 // Open a valid mp4/3gp/3g2 file with EFileShareExclusive mode |
|
396 // Instantiate a 3GP parser object with the same file path already opened above |
|
397 FileOpenL(EFileShareExclusive); |
|
398 TInt err = parser->Open(iInputFile); |
|
399 if (err != KErrAccessDenied) |
|
400 { |
|
401 ERR_PRINTF2(_L("parser->Open(iInputFile) expects KErrAccessDenied. Returns with %d"), err); |
|
402 SetTestStepResult(EFail); |
|
403 } |
|
404 ParserCompleteL(parser); |
|
405 FileClose(); |
|
406 |
|
407 CleanupStack::PopAndDestroy(parser); |
|
408 } |
|
409 return TestStepResult(); |
|
410 } |
|
411 |
|
412 // ----------------------------------------------------------------------------- |
|
413 // Use 3GP Parser to parse file before it has been setup |
|
414 // ----------------------------------------------------------------------------- |
|
415 // |
|
416 C3GPLibParser_0106::C3GPLibParser_0106() |
|
417 { |
|
418 } |
|
419 |
|
420 TVerdict C3GPLibParser_0106::doTestStepL() |
|
421 { |
|
422 if(TestStepResult() == EPass) |
|
423 { |
|
424 C3GPParse* parser = C3GPParse::NewL(); |
|
425 CleanupStack::PushL(parser); |
|
426 |
|
427 TRAPD(err, AllApiFailedNotReadyL(parser)); |
|
428 if (err != KErrNone) |
|
429 { |
|
430 SetTestStepResult(EFail); |
|
431 } |
|
432 |
|
433 CleanupStack::PopAndDestroy(parser); |
|
434 } |
|
435 return TestStepResult(); |
|
436 } |
|
437 |
|
438 void C3GPLibParser_0106::AllApiFailedNotReadyL(C3GPParse* aParse) |
|
439 { |
|
440 CallCommonApiL(aParse, KErrNotReady); |
|
441 CallVideoApiL(aParse, KErrNotReady); |
|
442 CallAudioApiL(aParse, KErrNotReady); |
|
443 CallVideoDecoderInfoApiL(aParse, KErrNotReady); |
|
444 CallAudioDecoderInfoApiL(aParse, KErrNotReady); |
|
445 TUint32 udtType = 0x7469746c; |
|
446 TUint index; |
|
447 CallUDTApiL(aParse, udtType, index, KErrNotReady); |
|
448 |
|
449 RBuf8 buffer; |
|
450 CleanupClosePushL(buffer); |
|
451 // create 0 size buffer for negative test when API is called before parse is opened |
|
452 buffer.CreateL(0); |
|
453 TInt err = aParse->InsertData(buffer); |
|
454 User::LeaveIfError(CheckError(err, KErrNotReady, _L("aParse->InsertData"))); |
|
455 CleanupStack::PopAndDestroy(&buffer); |
|
456 |
|
457 TInt num; |
|
458 err = aParse->GetNumBufferedBytes(num); |
|
459 User::LeaveIfError(CheckError(err, KErrNotReady, _L("aParse->InsertData"))); |
|
460 } |
|
461 |
|
462 // ----------------------------------------------------------------------------- |
|
463 // Use invalid frame type for all frame type API. |
|
464 // ----------------------------------------------------------------------------- |
|
465 // |
|
466 C3GPLibParser_0107::C3GPLibParser_0107() |
|
467 { |
|
468 } |
|
469 |
|
470 TVerdict C3GPLibParser_0107::doTestStepL() |
|
471 { |
|
472 if(TestStepResult() == EPass) |
|
473 { |
|
474 C3GPParse* parser = C3GPParse::NewL(); |
|
475 CleanupStack::PushL(parser); |
|
476 |
|
477 TRAPD(err, InvalidFrameTypeL(parser)); |
|
478 if (err != KErrNone) |
|
479 { |
|
480 SetTestStepResult(EFail); |
|
481 } |
|
482 |
|
483 CleanupStack::PopAndDestroy(parser); |
|
484 } |
|
485 return TestStepResult(); |
|
486 } |
|
487 |
|
488 void C3GPLibParser_0107::InvalidFrameTypeL(C3GPParse* aParse) |
|
489 { |
|
490 // file mode |
|
491 ParserOpenFileL(aParse); |
|
492 |
|
493 // Invalid type tests |
|
494 TInt invalidType = 10; |
|
495 T3GPVideoType invalidVideoType = static_cast<T3GPVideoType>(invalidType); |
|
496 TUint length; |
|
497 TReal frameRate; |
|
498 TUint avgBitRate; |
|
499 TSize videoSize; |
|
500 TUint timeScale; |
|
501 // should pass |
|
502 TInt err = aParse->GetVideoProperties(invalidVideoType, length, frameRate, avgBitRate, videoSize, timeScale); |
|
503 User::LeaveIfError(CheckError(err, KErrNone, _L("GetVideoProperties"))); |
|
504 |
|
505 T3GPAudioType invalidAudioType = static_cast<T3GPAudioType>(invalidType); |
|
506 TInt framesPerSample; |
|
507 // should pass |
|
508 err = aParse->GetAudioProperties(invalidAudioType, length, framesPerSample, avgBitRate, timeScale); |
|
509 User::LeaveIfError(CheckError(err, KErrNone, _L("aParse->GetAudioProperties"))); |
|
510 |
|
511 T3GPFrameType invalidFrameType = static_cast<T3GPFrameType>(invalidType); |
|
512 // should pass |
|
513 err = aParse->GetFrameType(invalidFrameType); |
|
514 User::LeaveIfError(CheckError(err, KErrNone, _L("aParse->GetAudioProperties"))); |
|
515 |
|
516 T3GPQcelpStorageMode invalidMode = static_cast<T3GPQcelpStorageMode>(invalidType); |
|
517 //Should pass |
|
518 err = aParse->GetQcelpStorageMode(invalidMode); |
|
519 User::LeaveIfError(CheckError(err, KErrNone, _L("aParse->GetVideoProperties() invalid type"))); |
|
520 |
|
521 ParserCompleteL(aParse); |
|
522 } |
|
523 |
|
524 // ----------------------------------------------------------------------------- |
|
525 // Use invalid frame index for video frame APIs and Get video frame properties for more |
|
526 // than the total number of video frames in the video clip |
|
527 // ----------------------------------------------------------------------------- |
|
528 // |
|
529 C3GPLibParser_0108::C3GPLibParser_0108() |
|
530 { |
|
531 } |
|
532 |
|
533 TVerdict C3GPLibParser_0108::doTestStepL() |
|
534 { |
|
535 if(TestStepResult() == EPass) |
|
536 { |
|
537 C3GPParse* parser = C3GPParse::NewL(); |
|
538 CleanupStack::PushL(parser); |
|
539 |
|
540 TRAPD(err, AllInvalidFrameIndexL(parser)); |
|
541 if (err != KErrNone) |
|
542 { |
|
543 SetTestStepResult(EFail); |
|
544 } |
|
545 |
|
546 CleanupStack::PopAndDestroy(parser); |
|
547 } |
|
548 return TestStepResult(); |
|
549 } |
|
550 |
|
551 void C3GPLibParser_0108::AllInvalidFrameIndexL(C3GPParse* aParse) |
|
552 { |
|
553 // file mode |
|
554 ParserOpenFileL(aParse); |
|
555 |
|
556 TUint numOfVideoFrames; |
|
557 TInt err = aParse->GetNumberOfVideoFrames(numOfVideoFrames); |
|
558 User::LeaveIfError(CheckError(err, KErrNone, _L("aParse->GetNumberOfVideoFrames()"))); |
|
559 |
|
560 // Invalid index. |
|
561 TUint size; |
|
562 err = aParse->GetVideoFrameSize(numOfVideoFrames + 100, size); |
|
563 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameSize() invalid index"))); |
|
564 |
|
565 err = aParse->GetVideoFrameSize((KMaxTUint-15), size); |
|
566 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameSize() negative index"))); |
|
567 |
|
568 TUint timeStampInMs; |
|
569 TUint timeStampInTimescale; |
|
570 err = aParse->GetVideoFrameStartTime(numOfVideoFrames + 10, timeStampInMs, timeStampInTimescale); |
|
571 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameStartTime() invalid index"))); |
|
572 |
|
573 err = aParse->GetVideoFrameStartTime((KMaxTUint-15), timeStampInMs, timeStampInTimescale); |
|
574 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameStartTime() negative index"))); |
|
575 |
|
576 TBool keyFrame; |
|
577 err = aParse->GetVideoFrameKeyType(numOfVideoFrames + 10, keyFrame); |
|
578 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameKeyType() invalid index"))); |
|
579 |
|
580 err = aParse->GetVideoFrameKeyType((KMaxTUint-15), keyFrame); |
|
581 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameKeyType() negative index"))); |
|
582 |
|
583 TUint numberOfFrames = 2; |
|
584 RArray<T3GPFrameInfoParameters> array; |
|
585 CleanupClosePushL(array); |
|
586 |
|
587 err = aParse->GetVideoFrameProperties(numOfVideoFrames + 10, numberOfFrames, array); |
|
588 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameProperties() invalid index"))); |
|
589 |
|
590 // Get video frame properties for more than the total number of video frames in the video clip |
|
591 err = aParse->GetVideoFrameProperties(0, numOfVideoFrames + 10, array); |
|
592 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameProperties() invalid number of frame"))); |
|
593 |
|
594 err = aParse->GetVideoFrameProperties((KMaxTUint-1), numOfVideoFrames, array); |
|
595 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameProperties() with negative index"))); |
|
596 |
|
597 err = aParse->GetVideoFrameProperties(15, (KMaxTUint-10), array); |
|
598 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameProperties() with negative numOfVideoFrames"))); |
|
599 |
|
600 err = aParse->GetVideoFrameProperties((KMaxTUint-15), numOfVideoFrames + 10, array); |
|
601 User::LeaveIfError(CheckError(err, KErrGeneral, _L("aParse->GetVideoFrameProperties() with negative index and invalid numOfVideoFrames"))); |
|
602 |
|
603 CleanupStack::PopAndDestroy(&array); |
|
604 |
|
605 ParserCompleteL(aParse); |
|
606 } |
|
607 |
|
608 // ----------------------------------------------------------------------------- |
|
609 // Instantiate a 3GP Parser and Call all Parser API that uses frame type as |
|
610 // input parameter with invalid frame types |
|
611 // ----------------------------------------------------------------------------- |
|
612 // |
|
613 C3GPLibParser_0109::C3GPLibParser_0109() |
|
614 { |
|
615 } |
|
616 |
|
617 TVerdict C3GPLibParser_0109::doTestStepL() |
|
618 { |
|
619 if(TestStepResult() == EPass) |
|
620 { |
|
621 C3GPParse* parser = C3GPParse::NewL(); |
|
622 CleanupStack::PushL(parser); |
|
623 |
|
624 TRAPD(err, InvalidFrameTypePanicL(parser)); |
|
625 if (err != KErrNone) |
|
626 { |
|
627 SetTestStepResult(EFail); |
|
628 } |
|
629 |
|
630 CleanupStack::PopAndDestroy(parser); |
|
631 } |
|
632 return TestStepResult(); |
|
633 } |
|
634 |
|
635 void C3GPLibParser_0109::InvalidFrameTypePanicL(C3GPParse* aParse) |
|
636 { |
|
637 // file mode |
|
638 ParserOpenFileL(aParse); |
|
639 |
|
640 TInt invalidType = 10; |
|
641 TBool available; |
|
642 T3GPFrameType invalidFrameType = static_cast<T3GPFrameType>(invalidType); |
|
643 //Should panic |
|
644 aParse->GetFrameAvailability(invalidFrameType, available); |
|
645 |
|
646 ParserCompleteL(aParse); |
|
647 } |
|
648 |
|
649 // ----------------------------------------------------------------------------- |
|
650 // Get user data atom by passing in an invalid user atom location. |
|
651 // ----------------------------------------------------------------------------- |
|
652 // |
|
653 C3GPLibParser_0110::C3GPLibParser_0110() |
|
654 { |
|
655 } |
|
656 |
|
657 TVerdict C3GPLibParser_0110::doTestStepL() |
|
658 { |
|
659 if(TestStepResult() == EPass) |
|
660 { |
|
661 C3GPParse* parser = C3GPParse::NewL(); |
|
662 CleanupStack::PushL(parser); |
|
663 |
|
664 TRAPD(err, InvalidUdtLocationL(parser)); |
|
665 if (err != KErrNone) |
|
666 { |
|
667 SetTestStepResult(EFail); |
|
668 } |
|
669 |
|
670 CleanupStack::PopAndDestroy(parser); |
|
671 } |
|
672 return TestStepResult(); |
|
673 } |
|
674 |
|
675 void C3GPLibParser_0110::InvalidUdtLocationL(C3GPParse* aParse) |
|
676 { |
|
677 // file mode |
|
678 ParserOpenFileL(aParse); |
|
679 |
|
680 // Invalid type tests |
|
681 TInt invalidType = 10; |
|
682 TUint index; |
|
683 TUint32 udtType = 0x7469746c; |
|
684 T3GPUdtaLocation invalidLocation = static_cast<T3GPUdtaLocation>(invalidType); |
|
685 RBuf8 buffer; |
|
686 CleanupClosePushL(buffer); |
|
687 buffer.CreateL(KBufferSize); |
|
688 //Should panic |
|
689 aParse->GetUserDataAtom(udtType, invalidLocation, buffer, index); |
|
690 CleanupStack::PopAndDestroy(&buffer); |
|
691 |
|
692 ParserCompleteL(aParse); |
|
693 } |
|
694 |
|
695 // ----------------------------------------------------------------------------- |
|
696 // Retrieve information when that info is not in the file or the info is not |
|
697 // supported by the library |
|
698 // ----------------------------------------------------------------------------- |
|
699 // |
|
700 C3GPLibParser_0111::C3GPLibParser_0111() |
|
701 { |
|
702 } |
|
703 |
|
704 TVerdict C3GPLibParser_0111::doTestStepL() |
|
705 { |
|
706 if(TestStepResult() == EPass) |
|
707 { |
|
708 C3GPParse* parser = C3GPParse::NewL(); |
|
709 CleanupStack::PushL(parser); |
|
710 |
|
711 TRAPD(err, AllVideoAudioApiFailedL(parser)); |
|
712 if (err != KErrNone) |
|
713 { |
|
714 SetTestStepResult(EFail); |
|
715 } |
|
716 |
|
717 CleanupStack::PopAndDestroy(parser); |
|
718 } |
|
719 return TestStepResult(); |
|
720 } |
|
721 |
|
722 void C3GPLibParser_0111::AllVideoAudioApiFailedL(C3GPParse* aParse) |
|
723 { |
|
724 // file mode |
|
725 ParserOpenFileL(aParse); |
|
726 |
|
727 TInt expectedErr = KErrNone; |
|
728 TUint32 udtType = 0x7469746c; |
|
729 TUint index; |
|
730 T3GPUdtaLocation location = E3GPUdtaVideoTrak; |
|
731 if (iTestSection.Compare(KAudioOnly) == 0 || iTestSection.Compare(KUnsupportedVideo) == 0) |
|
732 { |
|
733 CallVideoApiL(aParse, KErrNotSupported); |
|
734 CallVideoDecoderInfoApiL(aParse, KErrNotSupported); |
|
735 } |
|
736 else if (iTestSection.Compare(KVideoOnly) == 0 || iTestSection.Compare(KUnsupportedAudioCodec) == 0 || |
|
737 iTestSection.Compare(KUnsupportedAudioStream) == 0) |
|
738 { |
|
739 CallAudioApiL(aParse, KErrNotSupported); |
|
740 CallAudioDecoderInfoApiL(aParse, KErrNotSupported); |
|
741 |
|
742 location = E3GPUdtaAudioTrak; |
|
743 } |
|
744 else if (iTestSection.Compare(KWmaFile) == 0) |
|
745 { |
|
746 expectedErr = KErrCorrupt; |
|
747 CallVideoDecoderInfoApiL(aParse, expectedErr); |
|
748 CallUDTApiL(aParse, udtType, index, expectedErr, location); |
|
749 } |
|
750 else if (iTestSection.Compare(KMisMatch) == 0) |
|
751 { |
|
752 // The test file doesn't contain MPEG-4 / AVC video stream. The decoder info should fail. |
|
753 CallVideoDecoderInfoApiL(aParse, KErrNotSupported); |
|
754 CallUDTApiL(aParse, udtType, index, KErrNotFound, location); |
|
755 } |
|
756 else if (iTestSection.Compare(KNoAudioNoVideo) == 0) |
|
757 { |
|
758 expectedErr = KErrNotSupported; |
|
759 CallVideoApiL(aParse, expectedErr); |
|
760 CallVideoDecoderInfoApiL(aParse, expectedErr); |
|
761 CallAudioApiL(aParse, expectedErr); |
|
762 CallAudioDecoderInfoApiL(aParse, expectedErr); |
|
763 CallCommonApiL(aParse, KErrGeneral); |
|
764 } |
|
765 if (iTestSection.Compare(KWmaFile) == 0 || iTestSection.Compare(KMisMatch) == 0) |
|
766 { |
|
767 CallVideoApiL(aParse, expectedErr); |
|
768 CallAudioApiL(aParse, expectedErr); |
|
769 CallAudioDecoderInfoApiL(aParse, expectedErr); |
|
770 CallCommonApiL(aParse, expectedErr); |
|
771 } |
|
772 else |
|
773 { |
|
774 CallUDTApiL(aParse, udtType, index, KErrNotFound, location); |
|
775 } |
|
776 ParserCompleteL(aParse); |
|
777 } |
|
778 |
|
779 // ----------------------------------------------------------------------------- |
|
780 // Seek to an invalid position of the file. |
|
781 // ----------------------------------------------------------------------------- |
|
782 // |
|
783 C3GPLibParser_0119::C3GPLibParser_0119() |
|
784 { |
|
785 } |
|
786 |
|
787 TVerdict C3GPLibParser_0119::doTestStepL() |
|
788 { |
|
789 if(TestStepResult() == EPass) |
|
790 { |
|
791 C3GPParse* parser = C3GPParse::NewL(); |
|
792 CleanupStack::PushL(parser); |
|
793 |
|
794 TRAPD(err, SeekTestL(parser)); |
|
795 if (err != KErrNone) |
|
796 { |
|
797 SetTestStepResult(EFail); |
|
798 } |
|
799 |
|
800 CleanupStack::PopAndDestroy(parser); |
|
801 } |
|
802 return TestStepResult(); |
|
803 } |
|
804 |
|
805 void C3GPLibParser_0119::SeekTestL(C3GPParse* aParse) |
|
806 { |
|
807 // file mode |
|
808 ParserOpenFileL(aParse); |
|
809 |
|
810 TUint audioPos; |
|
811 TUint videoPos; |
|
812 TUint timeStampInMs = 0; |
|
813 |
|
814 // Seek to position 0. |
|
815 TInt err = KErrNone; |
|
816 err = aParse->Seek(timeStampInMs, ETrue, audioPos, videoPos); |
|
817 if (iTestSection.Compare(KNoAudioNoVideo) == 0) |
|
818 { |
|
819 User::LeaveIfError(CheckError(err, KErrGeneral, |
|
820 _L("aParser->Seek(timeStampInMs, ETrue, audioPos, videoPos) with file without audio nor video"))); |
|
821 err = aParse->Seek(timeStampInMs, EFalse, audioPos, videoPos); |
|
822 User::LeaveIfError(CheckError(err, KErrGeneral, |
|
823 _L("aParser->Seek(timeStampInMs, EFalse, audioPos, videoPos) with file without audio nor video"))); |
|
824 } |
|
825 else |
|
826 { |
|
827 User::LeaveIfError(CheckError(err, KErrNone, |
|
828 _L("aParser->Seek(timeStampInMs, ETrue, audioPos, videoPos) with file with audio/video"))); |
|
829 err = aParse->Seek(timeStampInMs, EFalse, audioPos, videoPos); |
|
830 User::LeaveIfError(CheckError(err, KErrNone, |
|
831 _L("aParser->Seek(timeStampInMs, EFalse, audioPos, videoPos) with file with audio/video"))); |
|
832 } |
|
833 |
|
834 if (iTestSection.Compare(KNoAudioNoVideo) != 0) |
|
835 { |
|
836 // Retrieve video & audio stream length |
|
837 TUint videoLength; |
|
838 TUint audioLength; |
|
839 TInt videoError; |
|
840 |
|
841 err = GetClipProperties(aParse, videoError, videoLength, audioLength); |
|
842 if (iTestSection.Compare(KAudioOnly) == 0) |
|
843 { |
|
844 // audio only, GetVideoProperties should fail with KErrNotSupported. Set video length to 0 |
|
845 User::LeaveIfError(CheckError(videoError, KErrNotSupported, _L("GetClipProperties(aParse, videoError, videoLength, audioLength))"))); |
|
846 videoLength = 0; |
|
847 } |
|
848 else if (iTestSection.Compare(KVideoOnly) == 0) |
|
849 { |
|
850 // video only, GetAudioProperties should fail with KErrNotSupported. Set audio length to 0 |
|
851 User::LeaveIfError(CheckError(err, KErrNotSupported, _L("GetClipProperties(aParse, videoError, videoLength, audioLength)"))); |
|
852 audioLength = 0; |
|
853 } |
|
854 else |
|
855 { |
|
856 // All other files contains audio data |
|
857 User::LeaveIfError(CheckError(videoError, KErrNone, _L("GetClipProperties(aParse, videoError, videoLength, audioLength)"))); |
|
858 User::LeaveIfError(CheckError(err, KErrNone, _L("GetClipProperties(aParse, videoError, videoLength, audioLength)"))); |
|
859 } |
|
860 |
|
861 if (audioLength >= videoLength) |
|
862 { |
|
863 timeStampInMs = audioLength + 10000; |
|
864 } |
|
865 else |
|
866 { |
|
867 timeStampInMs = videoLength + 10000; |
|
868 } |
|
869 |
|
870 // Seek returns KErrNone even thought the position is more than the audio/video length. AudioPos/videoPos should |
|
871 // be the the last audio/video position |
|
872 err = aParse->Seek(timeStampInMs, EFalse, audioPos, videoPos); |
|
873 User::LeaveIfError(CheckError(err, KErrNone, _L("aParser->Seek() to an invalid position"))); |
|
874 |
|
875 timeStampInMs = 0; |
|
876 err = aParse->Seek(timeStampInMs, EFalse, audioPos, videoPos); |
|
877 User::LeaveIfError(CheckError(err, KErrNone, _L("aParser->Seek(0, EFalse, audioPos, videoPos)"))); |
|
878 } |
|
879 ParserCompleteL(aParse); |
|
880 } |
|
881 |
|
882 // ----------------------------------------------------------------------------- |
|
883 // Read Video Decoder Info, video frame dependencies and user atom when these |
|
884 // info is not in the file |
|
885 // ----------------------------------------------------------------------------- |
|
886 // |
|
887 C3GPLibParser_0120::C3GPLibParser_0120() |
|
888 { |
|
889 } |
|
890 |
|
891 TVerdict C3GPLibParser_0120::doTestStepL() |
|
892 { |
|
893 if(TestStepResult() == EPass) |
|
894 { |
|
895 TInt readBufferSize = 1000; |
|
896 C3GPParse* parser = C3GPParse::NewL(readBufferSize); |
|
897 CleanupStack::PushL(parser); |
|
898 |
|
899 TRAPD(err, VideoAttributesL(parser)); |
|
900 if (err != KErrNone) |
|
901 { |
|
902 SetTestStepResult(EFail); |
|
903 } |
|
904 |
|
905 CleanupStack::PopAndDestroy(parser); |
|
906 } |
|
907 return TestStepResult(); |
|
908 } |
|
909 |
|
910 void C3GPLibParser_0120::VideoAttributesL(C3GPParse* aParse) |
|
911 { |
|
912 // file mode |
|
913 ParserOpenFileL(aParse); |
|
914 |
|
915 // Read Video Decoder Info from a mp4/3gp/3g2 file containing H263 video. |
|
916 CallVideoDecoderInfoApiL(aParse, KErrNotSupported); |
|
917 |
|
918 ParserCompleteL(aParse); |
|
919 } |
|
920 |
|
921 // ----------------------------------------------------------------------------- |
|
922 // Instantiate parser with read buffer size < 0. |
|
923 // ----------------------------------------------------------------------------- |
|
924 // |
|
925 C3GPLibParser_0126::C3GPLibParser_0126() |
|
926 { |
|
927 } |
|
928 |
|
929 TVerdict C3GPLibParser_0126::doTestStepL() |
|
930 { |
|
931 if(TestStepResult() == EPass) |
|
932 { |
|
933 TInt readBufferSize = -1; |
|
934 C3GPParse* parser = C3GPParse::NewL(readBufferSize); |
|
935 if (parser) |
|
936 { |
|
937 SetTestStepResult(EFail); |
|
938 delete parser; |
|
939 parser = NULL; |
|
940 } |
|
941 } |
|
942 return TestStepResult(); |
|
943 } |
|
944 |
|
945 // ----------------------------------------------------------------------------- |
|
946 // Retrieve video and audio info using empty buffer and size 1 buffer for all |
|
947 // buffer related API. |
|
948 // ----------------------------------------------------------------------------- |
|
949 // |
|
950 C3GPLibParser_0127::C3GPLibParser_0127() |
|
951 { |
|
952 } |
|
953 |
|
954 TVerdict C3GPLibParser_0127::doTestStepL() |
|
955 { |
|
956 if(TestStepResult() == EPass) |
|
957 { |
|
958 TInt readBufferSize = 1000; |
|
959 C3GPParse* parser = C3GPParse::NewL(readBufferSize); |
|
960 CleanupStack::PushL(parser); |
|
961 |
|
962 TRAPD(err, TestEmptyBufferL(parser)); |
|
963 if (err != KErrNone) |
|
964 { |
|
965 SetTestStepResult(EFail); |
|
966 } |
|
967 |
|
968 CleanupStack::PopAndDestroy(parser); |
|
969 } |
|
970 return TestStepResult(); |
|
971 } |
|
972 |
|
973 void C3GPLibParser_0127::TestEmptyBufferL(C3GPParse* aParse) |
|
974 { |
|
975 // file mode |
|
976 ParserOpenFileL(aParse); |
|
977 |
|
978 // Create an empty buffer |
|
979 TInt expectedErr = KErrOverflow; |
|
980 RBuf8 buffer; |
|
981 CleanupClosePushL(buffer); |
|
982 |
|
983 TUint32 udtType = 0x6d657461; // The udt type of test file is 'meta' |
|
984 TUint index = 0; |
|
985 T3GPUdtaLocation location = E3GPUdtaVideoTrak; |
|
986 |
|
987 if (iTestSection.Compare(KAudioMore) != 0) |
|
988 { |
|
989 buffer.CreateL(1); |
|
990 } |
|
991 else |
|
992 { |
|
993 buffer.CreateL(0); |
|
994 } |
|
995 |
|
996 TInt err = aParse->GetUserDataAtom(udtType, location, buffer, index); |
|
997 User::LeaveIfError(CheckError(err, expectedErr, _L("GetUserDataAtom"))); |
|
998 |
|
999 err = aParse->GetVideoDecoderSpecificInfo(buffer); |
|
1000 User::LeaveIfError(CheckError(err, expectedErr, _L("GetVideoDecoderSpecificInfo"))); |
|
1001 |
|
1002 err = aParse->GetAudioDecoderSpecificInfo(buffer); |
|
1003 User::LeaveIfError(CheckError(err, expectedErr, _L("GetAudioDecoderSpecificInfo"))); |
|
1004 |
|
1005 err = aParse->InsertData(buffer); |
|
1006 User::LeaveIfError(CheckError(err, KErrGeneral, _L("InsertData"))); |
|
1007 |
|
1008 TUint timeStampInMs; |
|
1009 TUint timeStampInTimescale; |
|
1010 TInt returnedFrames; |
|
1011 err = aParse->ReadAudioFrames(buffer, returnedFrames, timeStampInMs, timeStampInTimescale); |
|
1012 User::LeaveIfError(CheckError(err, expectedErr, _L("ReadAudioFrames"))); |
|
1013 |
|
1014 TBool keyframe; |
|
1015 err = aParse->ReadVideoFrame(buffer, keyframe, timeStampInMs, timeStampInTimescale); |
|
1016 User::LeaveIfError(CheckError(err, expectedErr, _L("ReadVideoFrame"))); |
|
1017 |
|
1018 iSchedulerWait = new (ELeave) CActiveSchedulerWait; |
|
1019 if(!iSchedulerWait) |
|
1020 { |
|
1021 User::Leave(KErrNoMemory); |
|
1022 } |
|
1023 |
|
1024 iWaitForNotification = ETrue; |
|
1025 aParse->ReadVideoFrame(*this, buffer); |
|
1026 |
|
1027 if (iWaitForNotification) |
|
1028 { |
|
1029 iSchedulerWait->Start(); |
|
1030 } |
|
1031 err = iAsyncError; |
|
1032 User::LeaveIfError(CheckError(err, expectedErr, _L("ReadVideoFrame async"))); |
|
1033 |
|
1034 iWaitForNotification = ETrue; |
|
1035 aParse->ReadAudioFrames(*this, buffer); |
|
1036 CleanupStack::PopAndDestroy(&buffer); |
|
1037 |
|
1038 if (iWaitForNotification) |
|
1039 { |
|
1040 iSchedulerWait->Start(); |
|
1041 } |
|
1042 err = iAsyncError; |
|
1043 User::LeaveIfError(CheckError(err, expectedErr, _L("ReadAudioFrames async"))); |
|
1044 |
|
1045 if ( iSchedulerWait->IsStarted() ) |
|
1046 { |
|
1047 iSchedulerWait->AsyncStop(); |
|
1048 } |
|
1049 ParserCompleteL(aParse); |
|
1050 } |
|
1051 |
|
1052 // ----------------------------------------------------------------------------- |
|
1053 // Async read before the parser has been setup. |
|
1054 // ----------------------------------------------------------------------------- |
|
1055 // |
|
1056 C3GPLibParser_0130::C3GPLibParser_0130() |
|
1057 { |
|
1058 } |
|
1059 |
|
1060 TVerdict C3GPLibParser_0130::doTestStepPreambleL() |
|
1061 { |
|
1062 C3GPLib_AsyncObserver::doTestStepPreambleL(); |
|
1063 if (TestStepResult() == EPass) |
|
1064 { |
|
1065 iScheduler = new (ELeave) CActiveScheduler; |
|
1066 CActiveScheduler::Install(iScheduler); |
|
1067 } |
|
1068 return TestStepResult(); |
|
1069 } |
|
1070 |
|
1071 TVerdict C3GPLibParser_0130::doTestStepPostambleL() |
|
1072 { |
|
1073 C3GPLibParser_base::doTestStepPostambleL(); |
|
1074 if( iScheduler ) |
|
1075 { |
|
1076 INFO_PRINTF1(_L("delete iScheduler")); |
|
1077 CActiveScheduler::Install(NULL); |
|
1078 delete iScheduler; |
|
1079 iScheduler = NULL; |
|
1080 } |
|
1081 |
|
1082 return TestStepResult(); |
|
1083 } |
|
1084 |
|
1085 TVerdict C3GPLibParser_0130::doTestStepL() |
|
1086 { |
|
1087 if(TestStepResult() == EPass) |
|
1088 { |
|
1089 C3GPParse* parser = C3GPParse::NewL(); |
|
1090 CleanupStack::PushL(parser); |
|
1091 |
|
1092 TRAPD(err, ReadFrameAsyncWoOpenL(parser)); |
|
1093 if (err != KErrNone) |
|
1094 { |
|
1095 SetTestStepResult(EFail); |
|
1096 } |
|
1097 |
|
1098 CleanupStack::PopAndDestroy(parser); |
|
1099 } |
|
1100 return TestStepResult(); |
|
1101 } |
|
1102 |
|
1103 void C3GPLibParser_0130::ReadFrameAsyncWoOpenL(C3GPParse* aParser) |
|
1104 { |
|
1105 TInt err = ReadAudioVideoFrameAsync(aParser, ETrue); |
|
1106 User::LeaveIfError(CheckError(err, KErrNotReady, _L("ReadAudioVideoFrameAsync audio"))); |
|
1107 |
|
1108 err = ReadAudioVideoFrameAsync(aParser, EFalse); |
|
1109 User::LeaveIfError(CheckError(err, KErrNotReady, _L("ReadAudioVideoFrameAsync video"))); |
|
1110 |
|
1111 aParser->CancelReadFrame(); |
|
1112 } |
|
1113 |
|
1114 // ----------------------------------------------------------------------------- |
|
1115 // Async read negative test after the parser has been setup. |
|
1116 // ----------------------------------------------------------------------------- |
|
1117 // |
|
1118 C3GPLibParser_0131::C3GPLibParser_0131() |
|
1119 { |
|
1120 } |
|
1121 |
|
1122 TVerdict C3GPLibParser_0131::doTestStepPreambleL() |
|
1123 { |
|
1124 C3GPLib_AsyncObserver::doTestStepPreambleL(); |
|
1125 if (TestStepResult() == EPass) |
|
1126 { |
|
1127 iScheduler = new (ELeave) CActiveScheduler; |
|
1128 CActiveScheduler::Install(iScheduler); |
|
1129 } |
|
1130 return TestStepResult(); |
|
1131 } |
|
1132 |
|
1133 TVerdict C3GPLibParser_0131::doTestStepPostambleL() |
|
1134 { |
|
1135 C3GPLib_AsyncObserver::doTestStepPostambleL(); |
|
1136 if( iScheduler ) |
|
1137 { |
|
1138 INFO_PRINTF1(_L("delete iScheduler")); |
|
1139 CActiveScheduler::Install(NULL); |
|
1140 delete iScheduler; |
|
1141 iScheduler = NULL; |
|
1142 } |
|
1143 |
|
1144 return TestStepResult(); |
|
1145 } |
|
1146 |
|
1147 TVerdict C3GPLibParser_0131::doTestStepL() |
|
1148 { |
|
1149 if(TestStepResult() == EPass) |
|
1150 { |
|
1151 C3GPParse* parser = C3GPParse::NewL(); |
|
1152 CleanupStack::PushL(parser); |
|
1153 |
|
1154 TRAPD(err, ReadFrameAsyncAfterOpenL(parser)); |
|
1155 if (err != KErrNone) |
|
1156 { |
|
1157 SetTestStepResult(EFail); |
|
1158 } |
|
1159 |
|
1160 CleanupStack::PopAndDestroy(parser); |
|
1161 } |
|
1162 return TestStepResult(); |
|
1163 } |
|
1164 |
|
1165 void C3GPLibParser_0131::ReadFrameAsyncAfterOpenL(C3GPParse* aParser) |
|
1166 { |
|
1167 // file mode |
|
1168 ParserOpenFileL(aParser); |
|
1169 |
|
1170 TInt videoError; |
|
1171 TUint videoLength; |
|
1172 TUint audioLength; |
|
1173 TInt AudioErr = GetClipProperties(aParser, videoError, videoLength, audioLength); |
|
1174 |
|
1175 if (AudioErr != KErrNone && AudioErr != KErrNotSupported && AudioErr == KErrCorrupt) |
|
1176 { |
|
1177 SetTestStepError(AudioErr); |
|
1178 if (!ShouldRunOOMTest()) |
|
1179 { |
|
1180 ERR_PRINTF2(_L("audioErr %d; "), AudioErr); |
|
1181 } |
|
1182 ParserCompleteL(aParser); |
|
1183 return; |
|
1184 } |
|
1185 if (videoError != KErrNone && videoError != KErrNotSupported && videoError != KErrCorrupt) |
|
1186 { |
|
1187 SetTestStepError(videoError); |
|
1188 ERR_PRINTF2(_L("videoError %d; "), videoError); |
|
1189 ParserCompleteL(aParser); |
|
1190 return; |
|
1191 } |
|
1192 |
|
1193 TInt err = KErrNone; |
|
1194 |
|
1195 // Call read audio frame async when there is no audio. Expects error |
|
1196 if (AudioErr == KErrNotSupported || AudioErr == KErrCorrupt) |
|
1197 { |
|
1198 err = ReadAudioVideoFrameAsync(aParser, ETrue); |
|
1199 } |
|
1200 |
|
1201 if (err != KErrNone) |
|
1202 { |
|
1203 if (!ShouldRunOOMTest()) |
|
1204 { |
|
1205 ERR_PRINTF2(_L("ReadAudioVideoFrameAsync audio err %d "), err); |
|
1206 } |
|
1207 SetTestStepError(err); |
|
1208 } |
|
1209 |
|
1210 // Call read video frame async when there is no video. Expects error |
|
1211 if (videoError == KErrNotSupported && AudioErr != KErrNotSupported) |
|
1212 { |
|
1213 err = ReadAudioVideoFrameAsync(aParser, EFalse); |
|
1214 if (err != KErrNone) |
|
1215 { |
|
1216 if (!ShouldRunOOMTest()) |
|
1217 { |
|
1218 ERR_PRINTF2(_L("ReadAudioVideoFrameAsync video err %d "), err); |
|
1219 } |
|
1220 SetTestStepError(err); |
|
1221 } |
|
1222 } |
|
1223 |
|
1224 // call Cancel Async read when there is no outstanding async read request |
|
1225 aParser->CancelReadFrame(); |
|
1226 |
|
1227 ParserCompleteL(aParser); |
|
1228 } |
|
1229 |
|
1230 // ----------------------------------------------------------------------------- |
|
1231 // Retrieve video & audio frames async in buffer mode. |
|
1232 // ----------------------------------------------------------------------------- |
|
1233 // |
|
1234 C3GPLibParser_0136::C3GPLibParser_0136() |
|
1235 { |
|
1236 } |
|
1237 |
|
1238 TVerdict C3GPLibParser_0136::doTestStepPreambleL() |
|
1239 { |
|
1240 C3GPLib_AsyncObserver::doTestStepPreambleL(); |
|
1241 if (TestStepResult() == EPass) |
|
1242 { |
|
1243 iScheduler = new (ELeave) CActiveScheduler; |
|
1244 CActiveScheduler::Install(iScheduler); |
|
1245 } |
|
1246 return TestStepResult(); |
|
1247 } |
|
1248 |
|
1249 TVerdict C3GPLibParser_0136::doTestStepPostambleL() |
|
1250 { |
|
1251 C3GPLib_AsyncObserver::doTestStepPostambleL(); |
|
1252 if( iScheduler ) |
|
1253 { |
|
1254 INFO_PRINTF1(_L("delete iScheduler")); |
|
1255 CActiveScheduler::Install(NULL); |
|
1256 delete iScheduler; |
|
1257 iScheduler = NULL; |
|
1258 } |
|
1259 |
|
1260 return TestStepResult(); |
|
1261 } |
|
1262 |
|
1263 TVerdict C3GPLibParser_0136::doTestStepL() |
|
1264 { |
|
1265 if(TestStepResult() == EPass) |
|
1266 { |
|
1267 C3GPParse* parser = C3GPParse::NewL(); |
|
1268 CleanupStack::PushL(parser); |
|
1269 |
|
1270 TRAPD(err, ReadFrameAsyncInBufferModeL(parser)); |
|
1271 if (err != KErrNone) |
|
1272 { |
|
1273 SetTestStepResult(EFail); |
|
1274 } |
|
1275 |
|
1276 CleanupStack::PopAndDestroy(parser); |
|
1277 } |
|
1278 return TestStepResult(); |
|
1279 } |
|
1280 |
|
1281 void C3GPLibParser_0136::OpenFileInBufferModeL(C3GPParse& aParser) |
|
1282 { |
|
1283 // open parser in buffer mode |
|
1284 User::LeaveIfError(aParser.Open()); |
|
1285 |
|
1286 RFs fs; |
|
1287 User::LeaveIfError(fs.Connect()); |
|
1288 CleanupClosePushL(fs); |
|
1289 |
|
1290 RFile file; |
|
1291 User::LeaveIfError(file.Open(fs, iInputFile, EFileRead | EFileStream)); |
|
1292 CleanupClosePushL(file); |
|
1293 |
|
1294 RBuf8 buffer; |
|
1295 buffer.CreateL(1000); |
|
1296 CleanupClosePushL(buffer); |
|
1297 |
|
1298 TInt bufferRead = 0; |
|
1299 do |
|
1300 { |
|
1301 User::LeaveIfError(file.Read(buffer)); |
|
1302 bufferRead = buffer.Length(); |
|
1303 if (bufferRead > 0) |
|
1304 { |
|
1305 User::LeaveIfError(aParser.InsertData(buffer)); |
|
1306 } |
|
1307 } while (bufferRead > 0); |
|
1308 |
|
1309 CleanupStack::PopAndDestroy(&buffer); |
|
1310 CleanupStack::PopAndDestroy(&file); |
|
1311 CleanupStack::PopAndDestroy(&fs); |
|
1312 } |
|
1313 |
|
1314 void C3GPLibParser_0136::ReadFrameAsyncInBufferModeL(C3GPParse* aParser) |
|
1315 { |
|
1316 ASSERT(aParser); |
|
1317 |
|
1318 // buffer mode |
|
1319 OpenFileInBufferModeL(*aParser); |
|
1320 |
|
1321 // Get Video & Audio properties to ensure both source exist |
|
1322 T3GPVideoType videoType; |
|
1323 T3GPAudioType audioType; |
|
1324 TReal frameRate; |
|
1325 TUint avgBitRate; |
|
1326 TSize videoSize; |
|
1327 TUint timeScale; |
|
1328 TInt framesPerSample; |
|
1329 TUint length; |
|
1330 |
|
1331 User::LeaveIfError(aParser->GetVideoProperties(videoType, length, frameRate, avgBitRate, videoSize, timeScale)); |
|
1332 User::LeaveIfError(aParser->GetAudioProperties(audioType, length, framesPerSample, avgBitRate, timeScale)); |
|
1333 |
|
1334 TInt audioFrameErr = ReadAudioVideoFrameAsync(aParser, ETrue); |
|
1335 TInt videoFrameErr = ReadAudioVideoFrameAsync(aParser, EFalse); |
|
1336 if (audioFrameErr != videoFrameErr) |
|
1337 { |
|
1338 ERR_PRINTF1(_L("Unexpected error returned")); |
|
1339 SetTestStepResult(EInconclusive); |
|
1340 } |
|
1341 else |
|
1342 { |
|
1343 SetTestStepError(audioFrameErr); |
|
1344 } |
|
1345 |
|
1346 // call Cancel Async read when there is no outstanding async read request |
|
1347 aParser->CancelReadFrame(); |
|
1348 |
|
1349 ParserCompleteL(aParser); |
|
1350 } |
|
1351 |
|
1352 |
|
1353 // ----------------------------------------------------------------------------- |
|
1354 // Get frame type using file path |
|
1355 // ----------------------------------------------------------------------------- |
|
1356 // |
|
1357 C3GPLibParser_0135::C3GPLibParser_0135() |
|
1358 { |
|
1359 } |
|
1360 |
|
1361 |
|
1362 TVerdict C3GPLibParser_0135::doTestStepL() |
|
1363 { |
|
1364 if(TestStepResult() == EPass) |
|
1365 { |
|
1366 C3GPParse* parser = C3GPParse::NewL(); |
|
1367 CleanupStack::PushL(parser); |
|
1368 |
|
1369 TRAPD(err, GetFrameTypeNegativeL(parser)); |
|
1370 if (err != KErrNone) |
|
1371 { |
|
1372 SetTestStepResult(EFail); |
|
1373 } |
|
1374 |
|
1375 CleanupStack::PopAndDestroy(parser); |
|
1376 } |
|
1377 return TestStepResult(); |
|
1378 } |
|
1379 |
|
1380 void C3GPLibParser_0135::GetFrameTypeNegativeL(C3GPParse* aParser) |
|
1381 { |
|
1382 ParserOpenFileL(aParser); |
|
1383 |
|
1384 T3GPFrameType type; |
|
1385 TInt err = KErrNone; |
|
1386 TInt videoError; |
|
1387 TUint videoLength; |
|
1388 TUint audioLength; |
|
1389 TInt AudioErr = GetClipProperties(aParser, videoError, videoLength, audioLength); |
|
1390 |
|
1391 if ((AudioErr != KErrNone && AudioErr != KErrNotSupported)) |
|
1392 { |
|
1393 SetTestStepError(AudioErr); |
|
1394 ERR_PRINTF2(_L("audioErr %d; "), AudioErr); |
|
1395 ParserCompleteL(aParser); |
|
1396 return; |
|
1397 } |
|
1398 if ((videoError != KErrNone && videoError != KErrNotSupported)) |
|
1399 { |
|
1400 SetTestStepError(videoError); |
|
1401 ERR_PRINTF2(_L("videoError %d; "), videoError); |
|
1402 ParserCompleteL(aParser); |
|
1403 return; |
|
1404 } |
|
1405 |
|
1406 if (AudioErr == KErrNone) |
|
1407 { |
|
1408 // read all audio frames and then check the next frame type |
|
1409 err = ReadAudioVideoFrame(aParser, ETrue, ETrue); |
|
1410 User::LeaveIfError(CheckError(err, KErrNotFound, _L("ReadAudioVideoFrame"))); |
|
1411 } |
|
1412 |
|
1413 if (videoError == KErrNone ) |
|
1414 { |
|
1415 // read all video frames |
|
1416 err = ReadAudioVideoFrame(aParser, ETrue); |
|
1417 User::LeaveIfError(CheckError(err, KErrNotFound, _L("ReadAudioVideoFrame"))); |
|
1418 } |
|
1419 |
|
1420 if (err == KErrNotFound && (AudioErr == KErrNone || videoError == KErrNone)) |
|
1421 { |
|
1422 err = aParser->GetFrameType(type); |
|
1423 } |
|
1424 |
|
1425 if (err != KErrNone) |
|
1426 { |
|
1427 SetTestStepError(err); |
|
1428 } |
|
1429 |
|
1430 ParserCompleteL(aParser); |
|
1431 } |
|
1432 |
|
1433 // ----------------------------------------------------------------------------- |
|
1434 // Get audio/video attributes of a large file (>2GB) using 32bit APIs |
|
1435 // ----------------------------------------------------------------------------- |
|
1436 // |
|
1437 C3GPLibParser_0137::C3GPLibParser_0137() |
|
1438 { |
|
1439 } |
|
1440 |
|
1441 TVerdict C3GPLibParser_0137::doTestStepL() |
|
1442 { |
|
1443 if(TestStepResult() == EPass) |
|
1444 { |
|
1445 C3GPParse* parser = C3GPParse::NewL(); |
|
1446 CleanupStack::PushL(parser); |
|
1447 |
|
1448 TRAPD(err, GetVideoAudioAttributesL(parser)); |
|
1449 if (err != KErrNone) |
|
1450 { |
|
1451 SetTestStepError(err); |
|
1452 } |
|
1453 |
|
1454 CleanupStack::PopAndDestroy(parser); |
|
1455 } |
|
1456 return TestStepResult(); |
|
1457 } |
|
1458 |
|
1459 void C3GPLibParser_0137::GetVideoAudioAttributesL(C3GPParse* aParser) |
|
1460 { |
|
1461 // open parser in 32bit file handle |
|
1462 ParserOpenFileHandleL(aParser); |
|
1463 DoGetVideoAudioAttributesL(aParser); |
|
1464 ParserCompleteHandleL(aParser); |
|
1465 } |
|
1466 |
|
1467 // ----------------------------------------------------------------------------- |
|
1468 // Get audio/video frames of a large file (>2GB) using 32bit APIs |
|
1469 // ----------------------------------------------------------------------------- |
|
1470 // |
|
1471 C3GPLibParser_0138::C3GPLibParser_0138() |
|
1472 { |
|
1473 } |
|
1474 |
|
1475 TVerdict C3GPLibParser_0138::doTestStepL() |
|
1476 { |
|
1477 if(TestStepResult() == EPass) |
|
1478 { |
|
1479 C3GPParse* parser = C3GPParse::NewL(); |
|
1480 CleanupStack::PushL(parser); |
|
1481 |
|
1482 TRAPD(err, ReadFrameL(parser)); |
|
1483 if (err != KErrNone) |
|
1484 { |
|
1485 SetTestStepError(err); |
|
1486 } |
|
1487 |
|
1488 CleanupStack::PopAndDestroy(parser); |
|
1489 } |
|
1490 return TestStepResult(); |
|
1491 } |
|
1492 |
|
1493 void C3GPLibParser_0138::ReadFrameL(C3GPParse* aParser) |
|
1494 { |
|
1495 // open parser in 32bit file handle |
|
1496 ParserOpenFileHandleL(aParser); |
|
1497 User::LeaveIfError(DoReadFrame(aParser)); |
|
1498 ParserCompleteHandleL(aParser); |
|
1499 } |
|
1500 |
|
1501 // ----------------------------------------------------------------------------- |
|
1502 // Get audio/video frames of a large file (>2GB) using 32bit APIs |
|
1503 // ----------------------------------------------------------------------------- |
|
1504 // |
|
1505 C3GPLibParser_0139::C3GPLibParser_0139() |
|
1506 { |
|
1507 } |
|
1508 |
|
1509 TVerdict C3GPLibParser_0139::doTestStepPreambleL() |
|
1510 { |
|
1511 C3GPLib_AsyncObserver::doTestStepPreambleL(); |
|
1512 if (TestStepResult() == EPass) |
|
1513 { |
|
1514 iScheduler = new (ELeave) CActiveScheduler; |
|
1515 CActiveScheduler::Install(iScheduler); |
|
1516 } |
|
1517 return TestStepResult(); |
|
1518 } |
|
1519 |
|
1520 TVerdict C3GPLibParser_0139::doTestStepPostambleL() |
|
1521 { |
|
1522 C3GPLib_AsyncObserver::doTestStepPostambleL(); |
|
1523 if( iScheduler ) |
|
1524 { |
|
1525 INFO_PRINTF1(_L("delete iScheduler")); |
|
1526 CActiveScheduler::Install(NULL); |
|
1527 delete iScheduler; |
|
1528 iScheduler = NULL; |
|
1529 } |
|
1530 |
|
1531 return TestStepResult(); |
|
1532 } |
|
1533 |
|
1534 TVerdict C3GPLibParser_0139::doTestStepL() |
|
1535 { |
|
1536 if(TestStepResult() == EPass) |
|
1537 { |
|
1538 C3GPParse* parser = C3GPParse::NewL(); |
|
1539 CleanupStack::PushL(parser); |
|
1540 |
|
1541 TRAPD(err, ReadFrameAsyncL(parser)); |
|
1542 if (err != KErrNone) |
|
1543 { |
|
1544 SetTestStepError(err); |
|
1545 } |
|
1546 |
|
1547 CleanupStack::PopAndDestroy(parser); |
|
1548 } |
|
1549 return TestStepResult(); |
|
1550 } |
|
1551 |
|
1552 void C3GPLibParser_0139::ReadFrameAsyncL(C3GPParse* aParser) |
|
1553 { |
|
1554 ParserOpenFileHandleL(aParser); |
|
1555 User::LeaveIfError(DoReadFrameAsync(aParser)); |
|
1556 if (!ShouldRunOOMTest()) |
|
1557 { |
|
1558 INFO_PRINTF1(_L("C3GPLibParser_0014::ReadFrameAsyncL() using file handler")); |
|
1559 } |
|
1560 ParserCompleteHandleL(aParser); |
|
1561 } |
|
1562 |
|
1563 TInt C3GPLibParser_0139::DoReadFrameAsync(C3GPParse* aParser, TBool aCancel) |
|
1564 { |
|
1565 TInt err = KErrNone; |
|
1566 |
|
1567 if (!aCancel) |
|
1568 { |
|
1569 err = ReadAudioVideoFrameAsync(aParser, ETrue); |
|
1570 if (err == KErrNone) |
|
1571 { |
|
1572 err = ReadAudioVideoFrameAsync(aParser, EFalse); |
|
1573 } |
|
1574 } |
|
1575 else |
|
1576 { |
|
1577 err = ReadAudioVideoFrameAsync(aParser, EFalse, ETrue); |
|
1578 } |
|
1579 |
|
1580 return err; |
|
1581 } |
|
1582 |
|
1583 // ----------------------------------------------------------------------------- |
|
1584 // Test the retrieval of Get video / audio properties when the properties are filled |
|
1585 // in but the file does not contain any actual data |
|
1586 // ----------------------------------------------------------------------------- |
|
1587 // |
|
1588 TVerdict C3GPSingleDataSourceTest::doTestStepPreambleL() |
|
1589 { |
|
1590 TPtrC inputFile; |
|
1591 if(!GetStringFromConfig(ConfigSection(),_L("inputFile"), inputFile)) |
|
1592 { |
|
1593 SetTestStepResult(EFail); |
|
1594 } |
|
1595 else |
|
1596 { |
|
1597 iParser = C3GPParse::NewL(); |
|
1598 User::LeaveIfError(iParser->Open(inputFile)); |
|
1599 SetTestStepResult(EPass); |
|
1600 SetTestStepError(KErrNone); |
|
1601 } |
|
1602 |
|
1603 return TestStepResult(); |
|
1604 } |
|
1605 |
|
1606 TVerdict C3GPSingleDataSourceTest::doTestStepPostambleL() |
|
1607 { |
|
1608 if (iParser) |
|
1609 { |
|
1610 iParser->Complete(); |
|
1611 delete iParser; |
|
1612 |
|
1613 } |
|
1614 |
|
1615 return TestStepResult(); |
|
1616 } |
|
1617 |
|
1618 |
|
1619 TVerdict C3GPSingleDataSourceTest::doTestStepL() |
|
1620 { |
|
1621 if (TestStepResult() != EPass) |
|
1622 { |
|
1623 return TestStepResult(); |
|
1624 } |
|
1625 |
|
1626 if (ConfigSection() == _L("MM-3GP-PARSE-U-0112-CP-2")) |
|
1627 { |
|
1628 // for a video only file containing audio properties but no real audio data |
|
1629 T3GPVideoType videoType; |
|
1630 TUint length; |
|
1631 TReal frameRate; |
|
1632 TUint avgBitRate; |
|
1633 TSize videoSize; |
|
1634 TUint timeScale; |
|
1635 TInt err = iParser->GetVideoProperties(videoType, length, frameRate, avgBitRate, videoSize, timeScale); |
|
1636 if (err == KErrNone) |
|
1637 { |
|
1638 T3GPAudioType audioType; |
|
1639 TInt framesPerSample; |
|
1640 TUint length; |
|
1641 TUint avgBitRate; |
|
1642 TUint timeScale; |
|
1643 |
|
1644 err = iParser->GetAudioProperties(audioType, length, framesPerSample, avgBitRate, timeScale); |
|
1645 if (err == KErrNone) |
|
1646 { |
|
1647 if (audioType == E3GPMpeg4Audio) |
|
1648 { |
|
1649 TInt size = 0; |
|
1650 err = iParser->GetAudioDecoderSpecificInfoSize(size); |
|
1651 if (err != KErrNone) |
|
1652 { |
|
1653 if (!ShouldRunOOMTest()) |
|
1654 { |
|
1655 ERR_PRINTF2(_L("C3GPParse::GetAudioDecoderSpecificInfoSize returns %d."), err); |
|
1656 } |
|
1657 User::Leave(err); |
|
1658 } |
|
1659 } |
|
1660 |
|
1661 TBool available = EFalse; |
|
1662 err = iParser->GetFrameAvailability(E3GPAudio, available); |
|
1663 if (err != KErrNone && err != KErrNotFound) |
|
1664 { |
|
1665 if (!ShouldRunOOMTest()) |
|
1666 { |
|
1667 ERR_PRINTF2(_L("C3GPParse::GetFrameAvailability returns %d."), err); |
|
1668 } |
|
1669 User::Leave(err); |
|
1670 } |
|
1671 |
|
1672 TUint frameSize = 0; |
|
1673 err = iParser->GetAudioFramesSize(frameSize); |
|
1674 if (err == KErrNone) |
|
1675 { |
|
1676 // Expect retrieval of audio properties to fail, doesn't matter what error code |
|
1677 // is returned |
|
1678 if (!ShouldRunOOMTest()) |
|
1679 { |
|
1680 ERR_PRINTF1(_L("C3GPParse::GetAudioFramesSize expects to fail but does not")); |
|
1681 } |
|
1682 SetTestStepResult(EFail); |
|
1683 } |
|
1684 |
|
1685 if (TestStepResult() == EPass) |
|
1686 { |
|
1687 TUint frameIndex = 0; |
|
1688 err = iParser->GetAudioSampleEntryIndex(frameIndex); |
|
1689 if (err == KErrNone) |
|
1690 { |
|
1691 // Expect retrieval of audio properties to fail, doesn't matter what error code |
|
1692 // is returned |
|
1693 if (!ShouldRunOOMTest()) |
|
1694 { |
|
1695 ERR_PRINTF1(_L("C3GPParse::GetAudioSampleEntryIndex expects to fail but does not")); |
|
1696 } |
|
1697 SetTestStepResult(EFail); |
|
1698 } |
|
1699 } |
|
1700 } |
|
1701 else |
|
1702 { |
|
1703 if (!ShouldRunOOMTest()) |
|
1704 { |
|
1705 ERR_PRINTF2(_L("C3GPParse::GetAudioProperties returns %d"), err); |
|
1706 } |
|
1707 User::Leave(err); |
|
1708 } |
|
1709 } |
|
1710 } |
|
1711 else if (ConfigSection() == _L("MM-3GP-PARSE-U-0111-CP-2")) |
|
1712 { |
|
1713 // for a file containing audio data & video properties and a video track, but the video track |
|
1714 // contains NO video data |
|
1715 T3GPAudioType audioType; |
|
1716 TInt framesPerSample; |
|
1717 TUint length; |
|
1718 TUint avgBitRate; |
|
1719 TUint timeScale; |
|
1720 |
|
1721 TInt err = iParser->GetAudioProperties(audioType, length, framesPerSample, avgBitRate, timeScale); |
|
1722 if (err == KErrNone) |
|
1723 { |
|
1724 T3GPVideoType videoType; |
|
1725 TUint length; |
|
1726 TReal frameRate; |
|
1727 TUint avgBitRate; |
|
1728 TSize videoSize; |
|
1729 TUint timeScale; |
|
1730 err = iParser->GetVideoProperties(videoType, length, frameRate, avgBitRate, videoSize, timeScale); |
|
1731 if (err == KErrNone) |
|
1732 { |
|
1733 if (videoType == E3GPMpeg4Video || videoType == E3GPAvcProfileBaseline) |
|
1734 { |
|
1735 TInt size = 0; |
|
1736 err = iParser->GetVideoDecoderSpecificInfoSize(size); |
|
1737 if (err != KErrNone) |
|
1738 { |
|
1739 if (!ShouldRunOOMTest()) |
|
1740 { |
|
1741 ERR_PRINTF2(_L("C3GPParse::GetVideoDecoderSpecificInfoSize returns %d."), err); |
|
1742 } |
|
1743 User::Leave(err); |
|
1744 } |
|
1745 } |
|
1746 } |
|
1747 else |
|
1748 { |
|
1749 if (!ShouldRunOOMTest()) |
|
1750 { |
|
1751 ERR_PRINTF2(_L("C3GPParse::GetVideoProperties returns %d"), err); |
|
1752 } |
|
1753 User::Leave(err); |
|
1754 } |
|
1755 |
|
1756 TBool available = EFalse; |
|
1757 err = iParser->GetFrameAvailability(E3GPVideo, available); |
|
1758 if (err != KErrNone && err != KErrNotFound) |
|
1759 { |
|
1760 if (!ShouldRunOOMTest()) |
|
1761 { |
|
1762 ERR_PRINTF2(_L("C3GPParse::GetFrameAvailability returns %d."), err); |
|
1763 } |
|
1764 User::Leave(err); |
|
1765 } |
|
1766 |
|
1767 TUint numberOfFrames = 0; |
|
1768 if (TestStepResult() == EPass) |
|
1769 { |
|
1770 err = iParser->GetNumberOfVideoFrames(numberOfFrames); |
|
1771 if (err != KErrNone) |
|
1772 { |
|
1773 if (!ShouldRunOOMTest()) |
|
1774 { |
|
1775 ERR_PRINTF2(_L("C3GPParse::GetNumberOfVideoFrames returns %d"), err); |
|
1776 } |
|
1777 User::Leave(err); |
|
1778 } |
|
1779 if (numberOfFrames != 0) |
|
1780 { |
|
1781 if (!ShouldRunOOMTest()) |
|
1782 { |
|
1783 ERR_PRINTF2(_L("C3GPParse::GetNumberOfVideoFrames retrieves %d frames when expecting 0"), numberOfFrames); |
|
1784 } |
|
1785 SetTestStepResult(EFail); |
|
1786 } |
|
1787 } |
|
1788 |
|
1789 if (TestStepResult() == EPass) |
|
1790 { |
|
1791 TUint frameSize; |
|
1792 TInt err = iParser->GetVideoFrameSize(frameSize); |
|
1793 if (err == KErrNone) |
|
1794 { |
|
1795 if (!ShouldRunOOMTest()) |
|
1796 { |
|
1797 ERR_PRINTF1(_L("C3GPParse::GetVideoFrameSize expects to fail but does not")); |
|
1798 } |
|
1799 SetTestStepResult(EFail); |
|
1800 } |
|
1801 } |
|
1802 |
|
1803 if (TestStepResult() == EPass) |
|
1804 { |
|
1805 TUint tsInMs = 0; |
|
1806 TUint tsInTs = 0; |
|
1807 TInt err = iParser->GetVideoTimestamp(tsInMs, tsInTs); |
|
1808 if (err == KErrNone) |
|
1809 { |
|
1810 if (!ShouldRunOOMTest()) |
|
1811 { |
|
1812 ERR_PRINTF1(_L("C3GPParse::GetVideoTimestamp expects to fail but does not")); |
|
1813 } |
|
1814 SetTestStepResult(EFail); |
|
1815 } |
|
1816 } |
|
1817 |
|
1818 if (TestStepResult() == EPass) |
|
1819 { |
|
1820 TUint index = 0; |
|
1821 TInt err = iParser->GetVideoSampleEntryIndex(index); |
|
1822 if (err == KErrNone) |
|
1823 { |
|
1824 if (!ShouldRunOOMTest()) |
|
1825 { |
|
1826 ERR_PRINTF1(_L("C3GPParse::GetVideoSampleEntryIndex expects to fail but does not")); |
|
1827 } |
|
1828 SetTestStepResult(EFail); |
|
1829 } |
|
1830 } |
|
1831 } |
|
1832 } |
|
1833 else |
|
1834 { |
|
1835 SetTestStepResult(ETestSuiteError); |
|
1836 } |
|
1837 |
|
1838 return TestStepResult(); |
|
1839 } |
|
1840 |
|
1841 |
|
1842 |