1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 package com.android.mediaframeworktest.functional.videoeditor; 19 20 import java.io.File; 21 import java.io.IOException; 22 23 import android.graphics.Bitmap; 24 import android.media.videoeditor.MediaImageItem; 25 import android.media.videoeditor.MediaItem; 26 import android.media.videoeditor.MediaVideoItem; 27 import android.media.videoeditor.VideoEditor; 28 import android.os.Environment; 29 import android.test.ActivityInstrumentationTestCase; 30 import android.test.suitebuilder.annotation.LargeTest; 31 import com.android.mediaframeworktest.MediaFrameworkTest; 32 import com.android.mediaframeworktest.VideoEditorHelper; 33 34 public class MediaItemThumbnailTest extends 35 ActivityInstrumentationTestCase<MediaFrameworkTest> { 36 private final String TAG = "MediaItemThumbailTest"; 37 38 private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON; 39 40 private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON; 41 42 private VideoEditor mVideoEditor; 43 44 private VideoEditorHelper mVideoEditorHelper; 45 46 public MediaItemThumbnailTest() { 47 super("com.android.mediaframeworktest", MediaFrameworkTest.class); 48 } 49 50 @Override 51 protected void setUp() throws Exception { 52 // setup for each test case. 53 super.setUp(); 54 mVideoEditorHelper = new VideoEditorHelper(); 55 // Create a random String which will be used as project path, where all 56 // project related files will be stored. 57 final String projectPath = mVideoEditorHelper. 58 createRandomFile(PROJECT_LOCATION); 59 mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath); 60 } 61 62 @Override 63 protected void tearDown() throws Exception { 64 mVideoEditorHelper.destroyVideoEditor(mVideoEditor); 65 // Clean the directory created as project path 66 mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath())); 67 System.gc(); 68 super.tearDown(); 69 } 70 71 protected void validateThumbnail(Bitmap thumbNailBmp, int outWidth, 72 int outHeight) throws Exception { 73 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 74 assertEquals("Thumbnail Height", outHeight, thumbNailBmp.getHeight()); 75 assertEquals("Thumbnail Width", outWidth, thumbNailBmp.getWidth()); 76 thumbNailBmp.recycle(); 77 } 78 79 // ----------------------------------------------------------------- 80 // THUMBNAIL 81 // ----------------------------------------------------------------- 82 /** 83 * To test thumbnail / frame extraction on H.263 QCIF. 84 */ 85 // TODO : TC_TN_001 86 @LargeTest 87 public void testThumbnailForH263QCIF() throws Exception { 88 final String videoItemFilename = INPUT_FILE_PATH 89 + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp"; 90 final int atTime = 0; 91 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 92 final MediaVideoItem mediaVideoItem = 93 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 94 videoItemFilename, renderingMode); 95 96 final int outWidth = (mediaVideoItem.getWidth() / 2); 97 final int outHeight = mediaVideoItem.getHeight(); 98 99 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 100 outHeight, atTime); 101 validateThumbnail(thumbNailBmp, outWidth, outHeight); 102 } 103 104 /** 105 * To test thumbnail / frame extraction on MPEG4 VGA . 106 */ 107 // TODO : TC_TN_002 108 @LargeTest 109 public void testThumbnailForMPEG4VGA() throws Exception { 110 final String videoItemFilename = INPUT_FILE_PATH + 111 "MPEG4_SP_640x480_30fps_512Kbps_0_23.3gp"; 112 final int atTime = 0; 113 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 114 final MediaVideoItem mediaVideoItem = 115 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 116 videoItemFilename, renderingMode); 117 final int outWidth = (mediaVideoItem.getWidth() / 2); 118 final int outHeight = mediaVideoItem.getHeight(); 119 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 120 outHeight, atTime); 121 validateThumbnail(thumbNailBmp, outWidth, outHeight); 122 } 123 124 /** 125 * To test thumbnail / frame extraction on MPEG4 NTSC. 126 */ 127 // TODO : TC_TN_003 128 @LargeTest 129 public void testThumbnailForMPEG4NTSC() throws Exception { 130 final String videoItemFilename = INPUT_FILE_PATH 131 + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4"; 132 final int atTime = 0; 133 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 134 final MediaVideoItem mediaVideoItem = 135 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 136 videoItemFilename, renderingMode); 137 final int outWidth = mediaVideoItem.getWidth() / 2; 138 final int outHeight = mediaVideoItem.getHeight() / 2; 139 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 140 outHeight, atTime); 141 validateThumbnail(thumbNailBmp, outWidth, outHeight); 142 } 143 144 /** 145 * To test thumbnail / frame extraction on MPEG4 WVGA. 146 */ 147 // TODO : TC_TN_004 148 @LargeTest 149 public void testThumbnailForMPEG4WVGA() throws Exception { 150 151 final String videoItemFilename = INPUT_FILE_PATH 152 + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4"; 153 final int atTime = 0; 154 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 155 final MediaVideoItem mediaVideoItem = 156 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 157 videoItemFilename, renderingMode); 158 final int outWidth = mediaVideoItem.getWidth() * 2; 159 final int outHeight = mediaVideoItem.getHeight(); 160 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 161 outHeight, atTime); 162 validateThumbnail(thumbNailBmp, outWidth, outHeight); 163 } 164 165 /** 166 * To test thumbnail / frame extraction on MPEG4 QCIF. 167 */ 168 // TODO : TC_TN_005 169 @LargeTest 170 public void testThumbnailForMPEG4QCIF() throws Exception { 171 final String videoItemFilename = INPUT_FILE_PATH 172 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 173 final int atTime = 0; 174 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 175 176 final MediaVideoItem mediaVideoItem = 177 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 178 videoItemFilename, renderingMode); 179 final int outWidth = mediaVideoItem.getWidth(); 180 final int outHeight = mediaVideoItem.getHeight() * 2; 181 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 182 outHeight, atTime); 183 validateThumbnail(thumbNailBmp, outWidth, outHeight); 184 } 185 186 /** 187 * To test thumbnail / frame extraction on H264 QCIF. 188 */ 189 // TODO : TC_TN_006 190 @LargeTest 191 public void testThumbnailForH264QCIF() throws Exception { 192 final String videoItemFilename = INPUT_FILE_PATH 193 + "H264_BP_176x144_15fps_144kbps_AMRNB_8kHz_12.2kbps_m_1_17.3gp"; 194 195 final int atTime = 0; 196 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 197 final MediaVideoItem mediaVideoItem = 198 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 199 videoItemFilename, renderingMode); 200 final int outWidth = mediaVideoItem.getWidth() * 2; 201 final int outHeight = mediaVideoItem.getHeight() * 2; 202 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 203 outHeight, atTime); 204 validateThumbnail(thumbNailBmp, outWidth, outHeight); 205 } 206 207 /** 208 * To test thumbnail / frame extraction on H264 VGA. 209 */ 210 // TODO : TC_TN_007 211 @LargeTest 212 public void testThumbnailForH264VGA() throws Exception { 213 final String videoItemFilename = INPUT_FILE_PATH + 214 "H264_BP_640x480_30fps_192kbps_1_5.mp4"; 215 final int outWidth = 32; 216 final int outHeight = 32; 217 final int atTime = 0; 218 219 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 220 final MediaVideoItem mediaVideoItem = 221 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 222 videoItemFilename, renderingMode); 223 224 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 225 outHeight, atTime); 226 validateThumbnail(thumbNailBmp, outWidth, outHeight); 227 } 228 /** 229 * To test thumbnail / frame extraction on H264 WVGA. 230 */ 231 // TODO : TC_TN_008 232 @LargeTest 233 public void testThumbnailForH264WVGA() throws Exception { 234 final String videoItemFilename = INPUT_FILE_PATH + 235 "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4"; 236 final int outWidth = 64; 237 final int outHeight = 64; 238 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 239 final MediaVideoItem mediaVideoItem = 240 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 241 videoItemFilename, renderingMode); 242 final long atTime = mediaVideoItem.getDuration() / 2; 243 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 244 outHeight, atTime); 245 validateThumbnail(thumbNailBmp, outWidth, outHeight); 246 } 247 248 /** 249 * To test thumbnail / frame extraction on H264 854x480. 250 */ 251 // TODO : TC_TN_009 252 @LargeTest 253 public void testThumbnailForH264854_480() throws Exception { 254 final String videoItemFilename = INPUT_FILE_PATH 255 + "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4"; 256 final int outWidth = 128; 257 final int outHeight = 128; 258 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 259 MediaVideoItem mediaVideoItem = null; 260 mediaVideoItem = 261 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 262 videoItemFilename, renderingMode); 263 final long atTime = mediaVideoItem.getDuration() - 1000; 264 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 265 outHeight, atTime); 266 validateThumbnail(thumbNailBmp, outWidth, outHeight); 267 } 268 269 /** 270 * To test thumbnail / frame extraction on H264 960x720. 271 */ 272 // TODO : TC_TN_010 273 @LargeTest 274 public void testThumbnailForH264HD960() throws Exception { 275 final String videoItemFilename = INPUT_FILE_PATH + 276 "H264_BP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4"; 277 final int outWidth = 75; 278 final int outHeight = 75; 279 280 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 281 final MediaVideoItem mediaVideoItem = 282 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 283 videoItemFilename, renderingMode); 284 final long atTime = mediaVideoItem.getDuration() - 1000; 285 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 286 outHeight, atTime); 287 validateThumbnail(thumbNailBmp, outWidth, outHeight); 288 } 289 290 /** 291 * To test thumbnail / frame extraction on H264 1080x720 . 292 */ 293 // TODO : TC_TN_011 294 @LargeTest 295 public void testThumbnailForH264HD1080() throws Exception { 296 final String videoItemFilename = INPUT_FILE_PATH + 297 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 298 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 299 final MediaVideoItem mediaVideoItem = 300 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 301 videoItemFilename, renderingMode); 302 final int outWidth = mediaVideoItem.getWidth() / 2; 303 final int outHeight = mediaVideoItem.getHeight() / 2; 304 final long atTime = mediaVideoItem.getDuration() / 4; 305 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 306 outHeight, atTime); 307 validateThumbnail(thumbNailBmp, outWidth, outHeight); 308 } 309 310 /** 311 * Check the thumbnail / frame extraction precision at 0,100 and 200 ms 312 */ 313 // TODO : TC_TN_012 314 @LargeTest 315 public void testThumbnailForH264VGADifferentDuration() throws Exception { 316 final String videoItemFilename = INPUT_FILE_PATH + 317 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 318 final int atTime = 0; 319 final int atTime1 = 100; 320 final int atTime2 = 200; 321 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 322 323 final MediaVideoItem mediaVideoItem = 324 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 325 videoItemFilename, renderingMode); 326 final int outWidth = mediaVideoItem.getWidth(); 327 final int outHeight = mediaVideoItem.getHeight(); 328 329 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 330 outHeight, atTime); 331 validateThumbnail(thumbNailBmp, outWidth, outHeight); 332 333 // get Thumbnail @ 100ms 334 final Bitmap thumbNailBmpAt100 = 335 mediaVideoItem.getThumbnail(outWidth, outHeight, atTime1); 336 validateThumbnail(thumbNailBmpAt100, outWidth, outHeight); 337 338 // get Thumbnail @ 200ms 339 final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail( 340 outWidth, outHeight, atTime2); 341 validateThumbnail(thumbNailBmpAt200, outWidth, outHeight); 342 } 343 344 /** 345 *Check the thumbnail / frame extraction precision at 346 * FileDuration,FileDuration/2 + 100 andFileDuration/2 + 200 ms 347 */ 348 // TODO : TC_TN_013 349 @LargeTest 350 public void testThumbnailForMP4VGA() throws Exception { 351 final String videoItemFilename = INPUT_FILE_PATH + 352 "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4"; 353 final MediaVideoItem mediaVideoItem = 354 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 355 videoItemFilename, MediaItem.RENDERING_MODE_BLACK_BORDER); 356 357 final int outWidth = mediaVideoItem.getWidth(); 358 final int outHeight = mediaVideoItem.getHeight(); 359 final long atTime = mediaVideoItem.getDuration() / 2; 360 final long atTime1 = atTime + 100; 361 final long atTime2 = atTime + 200; 362 363 // get Thumbnail @ duration/2 364 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 365 outHeight, atTime); 366 validateThumbnail(thumbNailBmp, outWidth, outHeight); 367 368 // get Thumbnail @ duration/2 + 100ms 369 final Bitmap thumbNailBmpAt100 = mediaVideoItem.getThumbnail( 370 outWidth, outHeight, atTime1); 371 validateThumbnail(thumbNailBmpAt100, outWidth, outHeight); 372 373 // get Thumbnail @ duration/2 + 200ms 374 final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail( 375 outWidth, outHeight, atTime2); 376 validateThumbnail(thumbNailBmpAt200, outWidth, outHeight); 377 } 378 379 /** 380 * Check the thumbnail / frame extraction on JPEG file 381 */ 382 // TODO : TC_TN_014 383 @LargeTest 384 public void testThumbnailForImage() throws Exception { 385 final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg"; 386 final int mediaDuration = 1000; 387 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 388 boolean flagForException = false; 389 int outWidth = 0; 390 int outHeight = 0; 391 392 final MediaImageItem mii = mVideoEditorHelper.createMediaItem( 393 mVideoEditor, "m1", imageItemFilename, mediaDuration, renderingMode); 394 assertNotNull("Media Image Item is Null", mii); 395 outWidth = mii.getWidth() / 2; 396 outHeight = mii.getHeight() / 2; 397 398 final Bitmap thumbNailBmp = mii.getThumbnail(outWidth, 399 outHeight, mediaDuration); 400 validateThumbnail(thumbNailBmp, outWidth, outHeight); 401 } 402 /** 403 *To test ThumbnailList for H263 QCIF 404 */ 405 // TODO : TC_TN_015 406 @LargeTest 407 public void testThumbnailListH263QCIF() throws Exception { 408 final String videoItemFilename = INPUT_FILE_PATH 409 + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp"; 410 final int startTime = 0; 411 final int tnCount = 10; 412 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 413 final MediaVideoItem mediaVideoItem = 414 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 415 videoItemFilename, renderingMode); 416 417 final int outWidth = mediaVideoItem.getWidth() / 4; 418 final int outHeight = mediaVideoItem.getHeight() / 4; 419 final long endTime = mediaVideoItem.getDuration() / 2; 420 421 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList( 422 outWidth, outHeight, startTime, endTime, tnCount); 423 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 424 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 425 426 for (int i = 0; i < thumbNailBmp.length; i++) { 427 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 428 thumbNailBmp[i] = null; 429 } 430 } 431 432 /** 433 *To test ThumbnailList for MPEG4 QCIF 434 */ 435 // TODO : TC_TN_016 436 @LargeTest 437 public void testThumbnailListMPEG4QCIF() throws Exception { 438 final String videoItemFilename = INPUT_FILE_PATH 439 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 440 final int tnCount = 10; 441 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 442 443 final MediaVideoItem mediaVideoItem = 444 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 445 videoItemFilename, renderingMode); 446 447 final int outWidth = mediaVideoItem.getWidth() / 2; 448 final int outHeight = mediaVideoItem.getHeight() / 2; 449 final long startTime = mediaVideoItem.getDuration() / 2; 450 final long endTime = mediaVideoItem.getDuration(); 451 452 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList( 453 outWidth, outHeight, startTime, endTime, tnCount); 454 455 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 456 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 457 for (int i = 0; i < thumbNailBmp.length; i++) { 458 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 459 thumbNailBmp[i] = null; 460 } 461 } 462 463 /** 464 *To test ThumbnailList for H264 VGA 465 */ 466 // TODO : TC_TN_017 467 @LargeTest 468 public void testThumbnailListH264VGA() throws Exception { 469 final String videoItemFilename = INPUT_FILE_PATH + 470 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 471 final int tnCount = 10; 472 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 473 final MediaVideoItem mediaVideoItem = 474 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 475 videoItemFilename, renderingMode); 476 477 final int outWidth = mediaVideoItem.getWidth() / 2; 478 final int outHeight = mediaVideoItem.getHeight() / 2; 479 final long startTime = mediaVideoItem.getDuration() / 3; 480 final long endTime = mediaVideoItem.getDuration() / 2; 481 482 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList( 483 outWidth, outHeight, startTime, endTime, tnCount); 484 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 485 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 486 for (int i = 0; i < thumbNailBmp.length; i++) { 487 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 488 thumbNailBmp[i] = null; 489 } 490 } 491 492 /** 493 *To test ThumbnailList for H264 WVGA 494 */ 495 // TODO : TC_TN_018 496 @LargeTest 497 public void testThumbnailListH264WVGA() throws Exception { 498 final String videoItemFilename = INPUT_FILE_PATH + 499 "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4"; 500 final int tnCount = 10; 501 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 502 final MediaVideoItem mediaVideoItem = 503 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 504 videoItemFilename, renderingMode); 505 506 final int outWidth = mediaVideoItem.getWidth() / 2; 507 final int outHeight = mediaVideoItem.getHeight() / 2; 508 final long startTime = mediaVideoItem.getDuration() / 3; 509 final long endTime = mediaVideoItem.getDuration() / 2; 510 511 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList( 512 outWidth, outHeight, startTime, endTime, tnCount); 513 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 514 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 515 for (int i = 0; i < thumbNailBmp.length; i++) { 516 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 517 thumbNailBmp[i] = null; 518 } 519 } 520 521 /** 522 *To test ThumbnailList for H264 VGA ,Time exceeding file duration 523 */ 524 // TODO : TC_TN_019 525 @LargeTest 526 public void testThumbnailH264VGAExceedingFileDuration() throws Exception { 527 final String videoItemFilename = INPUT_FILE_PATH + 528 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 529 boolean flagForException = false; 530 int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 531 532 try { 533 final MediaVideoItem mediaVideoItem = 534 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 535 videoItemFilename, renderingMode); 536 final int outWidth = mediaVideoItem.getWidth() / 2; 537 final int outHeight = mediaVideoItem.getHeight() / 2; 538 final long atTime = mediaVideoItem.getDuration() + 2000; 539 mediaVideoItem.getThumbnail(outWidth, outHeight, atTime); 540 } catch (IllegalArgumentException e) { 541 flagForException = true; 542 } 543 assertTrue("Exception in Extracting thumbanil with Invalid Time", 544 flagForException); 545 } 546 547 /** 548 *To test ThumbnailList for VGA Image 549 */ 550 // TODO : TC_TN_020 551 @LargeTest 552 public void testThumbnailListVGAImage() throws Exception { 553 final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg"; 554 final int imageItemDuration = 10000; 555 final int startTime = 0; 556 final int endTime = 0; 557 final int tnCount = 10; 558 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 559 560 final MediaImageItem mediaImageItem = 561 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 562 imageItemFilename, imageItemDuration, renderingMode); 563 final int outWidth = mediaImageItem.getWidth() / 2; 564 final int outHeight = mediaImageItem.getHeight() / 2; 565 566 final Bitmap thumbNailBmp[] = mediaImageItem.getThumbnailList 567 (outWidth, outHeight, startTime, endTime, tnCount); 568 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 569 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 570 for (int i = 0; i < thumbNailBmp.length; i++) { 571 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 572 thumbNailBmp[i] = null; 573 } 574 } 575 576 /** 577 *To test ThumbnailList for Invalid file path 578 */ 579 // TODO : TC_TN_021 580 @LargeTest 581 public void testThumbnailForInvalidFilePath() throws Exception { 582 final String imageItemFileName = INPUT_FILE_PATH + "/sdcard/abc.jpg"; 583 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 584 boolean flagForException = false; 585 try{ 586 final MediaImageItem mii = new MediaImageItem(mVideoEditor, "m1", 587 imageItemFileName, 3000, renderingMode); 588 } catch (IllegalArgumentException e) { 589 flagForException = true; 590 } catch (IOException e) { 591 flagForException = true; 592 } 593 assertTrue(" Invalid File Path", flagForException); 594 } 595 596 /** 597 * To test thumbnail / frame extraction with setBoundaries 598 */ 599 // TODO : TC_TN_022 600 @LargeTest 601 public void testThumbnailForMPEG4WVGAWithSetBoundaries() throws Exception { 602 final String videoItemFilename = INPUT_FILE_PATH + 603 "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4"; 604 final int atTime = 10000; 605 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 606 final MediaVideoItem mediaVideoItem = 607 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 608 videoItemFilename, renderingMode); 609 610 mediaVideoItem.setExtractBoundaries(1000, 611 (mediaVideoItem.getDuration() - 21000)); 612 613 final int outWidth = (mediaVideoItem.getWidth() / 2); 614 final int outHeight = (mediaVideoItem.getHeight() / 2); 615 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth, 616 outHeight, atTime); 617 validateThumbnail(thumbNailBmp, outWidth, outHeight); 618 } 619 620 /** 621 *To test ThumbnailList for H264 WVGA with setExtractboundaries 622 */ 623 // TODO : TC_TN_023 624 @LargeTest 625 public void testThumbnailListForH264WVGAWithSetBoundaries() throws Exception { 626 final String videoItemFilename = INPUT_FILE_PATH + 627 "H264_BP_800x480_15fps_512kbps_1_17.mp4"; 628 final int thumbNailStartTime = 10000; 629 final int thumbNailEndTime = 12000; 630 final int tnCount = 10; 631 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 632 final MediaVideoItem mediaVideoItem = 633 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 634 videoItemFilename, renderingMode); 635 636 final int outWidth = (mediaVideoItem.getWidth() / 2); 637 final int outHeight = (mediaVideoItem.getHeight() / 2); 638 639 mediaVideoItem.setExtractBoundaries(10000, 12000); 640 641 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList 642 (outWidth, outHeight, thumbNailStartTime, thumbNailEndTime, 643 tnCount); 644 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 645 assertTrue("Thumbnail Size", (thumbNailBmp.length > 0) ? true : false); 646 for (int i = 0; i < thumbNailBmp.length; i++) { 647 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 648 thumbNailBmp[i] = null; 649 } 650 } 651 652 /** 653 *To test ThumbnailList for H264 WVGA with count > frame available 654 */ 655 // TODO : TC_TN_024 656 @LargeTest 657 public void testThumbnailListForH264WVGAWithCount() throws Exception { 658 final String videoItemFilename = INPUT_FILE_PATH + 659 "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4"; 660 final int tnCount = 70; 661 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 662 final MediaVideoItem mediaVideoItem = 663 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 664 videoItemFilename, renderingMode); 665 666 final int outWidth = (mediaVideoItem.getWidth() / 2); 667 final int outHeight = (mediaVideoItem.getHeight() / 2); 668 final long thumbNailStartTime = mediaVideoItem.getDuration() / 2; 669 final long thumbNailEndTime = thumbNailStartTime + 4000; 670 Bitmap thumbNailBmp[] = null; 671 boolean flagForException = false; 672 try{ 673 thumbNailBmp = mediaVideoItem.getThumbnailList(outWidth, outHeight, 674 thumbNailStartTime, thumbNailEndTime, tnCount); 675 }catch (Exception e){ 676 assertTrue("Unable to get Thumbnail list", flagForException); 677 } 678 if (thumbNailBmp.length <= tnCount) { 679 flagForException = true; 680 } 681 assertTrue("Thumbnail count more than asked", flagForException); 682 } 683 684 /** 685 *To test ThumbnailList for H264 WVGA with startTime > End Time 686 */ 687 // TODO : TC_TN_025 688 @LargeTest 689 public void testThumbnailListH264WVGAWithStartGreaterEnd() throws Exception { 690 final String videoItemFilename = INPUT_FILE_PATH + 691 "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4"; 692 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 693 final int tnCount = 10; 694 boolean flagForException = false; 695 final MediaVideoItem mediaVideoItem = 696 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 697 videoItemFilename, renderingMode); 698 final int outWidth = (mediaVideoItem.getWidth() / 2); 699 final int outHeight = (mediaVideoItem.getHeight() / 2); 700 final long thumbNailStartTime = mediaVideoItem.getDuration() / 2; 701 final long thumbNailEndTime = thumbNailStartTime - 1000; 702 try{ 703 mediaVideoItem.getThumbnailList(outWidth, outHeight, 704 thumbNailStartTime, thumbNailEndTime, tnCount); 705 } catch (IllegalArgumentException e) { 706 flagForException = true; 707 } 708 assertTrue("Thumbnail Extraction where start time > end time", 709 flagForException); 710 } 711 712 /** 713 *To test ThumbnailList TC_TN_026 for H264 WVGA with startTime = End Time 714 */ 715 // TODO : TC_TN_026 716 @LargeTest 717 public void testThumbnailListH264WVGAWithStartEqualEnd() throws Exception { 718 final String videoItemFilename = INPUT_FILE_PATH + 719 "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4"; 720 final int tnCount = 1; 721 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 722 723 final MediaVideoItem mediaVideoItem = 724 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 725 videoItemFilename, renderingMode); 726 final int outWidth = (mediaVideoItem.getWidth() / 2); 727 final int outHeight = (mediaVideoItem.getHeight() / 2); 728 final long thumbNailStartTime = mediaVideoItem.getDuration() / 2; 729 final long thumbNailEndTime = thumbNailStartTime; 730 final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(outWidth, 731 outHeight, thumbNailStartTime, thumbNailEndTime, tnCount); 732 assertNotNull("Thumbnail Retrived is Null", thumbNailBmp); 733 assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length); 734 for (int i = 0; i < thumbNailBmp.length; i++) { 735 validateThumbnail(thumbNailBmp[i], outWidth, outHeight); 736 thumbNailBmp[i] = null; 737 } 738 } 739 740 /** 741 *To test ThumbnailList TC_TN_027 for file where video duration is less 742 * than file duration. 743 */ 744 // TODO : TC_TN_027 745 @LargeTest 746 public void testThumbnailForVideoDurationLessFileDuration() throws Exception { 747 final String videoItemFilename = INPUT_FILE_PATH 748 + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp"; 749 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 750 final MediaVideoItem mediaVideoItem = 751 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 752 videoItemFilename, renderingMode); 753 final int outWidth = (mediaVideoItem.getWidth() / 2); 754 final int outHeight = (mediaVideoItem.getHeight() / 2); 755 final long atTime = mediaVideoItem.getDuration() - 2000; 756 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth, 757 outHeight, atTime); 758 validateThumbnail(thumbNailBmp, outWidth, outHeight); 759 760 } 761 762 /** 763 *To test ThumbnailList TC_TN_028 for file which has video part corrupted 764 */ 765 // TODO : TC_TN_028 766 @LargeTest 767 public void testThumbnailWithCorruptedVideoPart() throws Exception { 768 final String videoItemFilename = INPUT_FILE_PATH + 769 "corrupted_H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4"; 770 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 771 boolean flagForException = false; 772 773 try { 774 final MediaVideoItem mediaVideoItem = 775 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 776 videoItemFilename, renderingMode); 777 final int outWidth = mediaVideoItem.getWidth(); 778 final int outHeight = mediaVideoItem.getHeight() * 2; 779 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail 780 (outWidth, outHeight, mediaVideoItem.getDuration()/2); 781 } catch (IllegalArgumentException e) { 782 flagForException = true; 783 } 784 assertTrue("Corrupted File cannot be read", flagForException); 785 } 786 787 /** 788 * Check the thumbnail / frame list extraction for Height as Negative Value 789 */ 790 // TODO : TC_TN_029 791 @LargeTest 792 public void testThumbnailWithNegativeHeight() throws Exception { 793 final String videoItemFilename = INPUT_FILE_PATH 794 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 795 final int tnCount = 10; 796 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 797 boolean flagForException = false; 798 try { 799 final MediaVideoItem mediaVideoItem = 800 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 801 videoItemFilename, renderingMode); 802 final int outWidth = (mediaVideoItem.getWidth() / 2); 803 final int outHeight = -1; 804 final long thumbNailStartTime = 805 mediaVideoItem.getBoundaryBeginTime()/2; 806 final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime(); 807 mediaVideoItem.getThumbnailList(outWidth, outHeight, 808 thumbNailStartTime, thumbNailEndTime, tnCount); 809 } catch (IllegalArgumentException e) { 810 flagForException = true; 811 } 812 assertTrue("Thumbnail List with negative Height", flagForException); 813 } 814 815 /** 816 * Check the thumbnail for Height as Zero 817 */ 818 // TODO : TC_TN_030 819 @LargeTest 820 public void testThumbnailWithHeightAsZero() throws Exception { 821 final String videoItemFilename = INPUT_FILE_PATH 822 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 823 final int atTime = 100; 824 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 825 boolean flagForException = false; 826 try { 827 final MediaVideoItem mediaVideoItem = 828 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 829 videoItemFilename, renderingMode); 830 final int outWidth = (mediaVideoItem.getWidth() / 2); 831 final int outHeight = -1; 832 mediaVideoItem.getThumbnail(outWidth, outHeight, atTime); 833 } catch (IllegalArgumentException e) { 834 flagForException = true; 835 } 836 assertTrue("Thumbnail List with Zero Height", flagForException); 837 } 838 839 /** 840 * Check the thumbnail for Height = 10 841 */ 842 // TODO : TC_TN_031 843 @LargeTest 844 public void testThumbnailWithHeight() throws Exception { 845 final String videoItemFilename = INPUT_FILE_PATH 846 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 847 final int atTime = 1000; 848 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 849 final MediaVideoItem mediaVideoItem = 850 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 851 videoItemFilename, renderingMode); 852 final int outWidth = (mediaVideoItem.getWidth() / 2); 853 final int outHeight = 10; 854 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth, 855 outHeight, atTime); 856 validateThumbnail(thumbNailBmp, outWidth, outHeight); 857 } 858 859 /** 860 * Check the thumbnail / frame list extraction for Width as Negative Value 861 */ 862 // TODO : TC_TN_032 863 @LargeTest 864 public void testThumbnailWithNegativeWidth() throws Exception { 865 final String videoItemFilename = INPUT_FILE_PATH 866 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 867 final int tnCount = 10; 868 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 869 boolean flagForException = false; 870 try { 871 final MediaVideoItem mediaVideoItem = 872 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 873 videoItemFilename, renderingMode); 874 final int outWidth = -1; 875 final int outHeight = mediaVideoItem.getHeight(); 876 final long thumbNailStartTime = 877 mediaVideoItem.getBoundaryBeginTime()/2; 878 final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime(); 879 mediaVideoItem.getThumbnailList(outWidth, outHeight, thumbNailStartTime, 880 thumbNailEndTime, tnCount); 881 } catch (IllegalArgumentException e) { 882 flagForException = true; 883 } 884 assertTrue("Thumbnail List with negative Height", flagForException); 885 } 886 887 /** 888 * Check the thumbnail / frame list extraction for Width zero 889 */ 890 // TODO : TC_TN_033 891 @LargeTest 892 public void testThumbnailWithWidthAsZero() throws Exception { 893 final String videoItemFilename = INPUT_FILE_PATH 894 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 895 final int atTime = 1000; 896 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 897 boolean flagForException = false; 898 try { 899 final MediaVideoItem mediaVideoItem = 900 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 901 videoItemFilename, renderingMode); 902 final int outWidth = 0; 903 final int outHeight = mediaVideoItem.getHeight() / 2; 904 mediaVideoItem.getThumbnail(outWidth, outHeight, atTime); 905 } catch (IllegalArgumentException e) { 906 flagForException = true; 907 } 908 assertTrue("Thumbnail List with Zero Width", flagForException); 909 } 910 911 /** 912 * Check the thumbnail for Width = 10 913 */ 914 // TODO : TC_TN_034 915 @LargeTest 916 public void testThumbnailWithWidth() throws Exception { 917 final String videoItemFilename = INPUT_FILE_PATH 918 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 919 final int atTime = 1000; 920 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 921 final MediaVideoItem mediaVideoItem = 922 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 923 videoItemFilename, renderingMode); 924 final int outWidth = 10; 925 final int outHeight = mediaVideoItem.getHeight(); 926 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth, 927 outHeight, atTime); 928 validateThumbnail(thumbNailBmp, outWidth, outHeight); 929 } 930 931 /** 932 * To test thumbnail / frame extraction on MPEG4 (time beyond file duration). 933 */ 934 // TODO : TC_TN_035 935 @LargeTest 936 public void testThumbnailMPEG4withMorethanFileDuration() throws Exception { 937 final String videoItemFilename = INPUT_FILE_PATH 938 + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp"; 939 boolean flagForException = false; 940 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 941 final MediaVideoItem mediaVideoItem = 942 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 943 videoItemFilename, renderingMode); 944 final int outWidth = mediaVideoItem.getWidth()/2; 945 final int outHeight = mediaVideoItem.getHeight()/2; 946 final long atTime = mediaVideoItem.getDuration() + 100; 947 try{ 948 final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth, 949 outHeight, atTime); 950 } catch (IllegalArgumentException e) { 951 flagForException = true; 952 } 953 assertTrue("Thumbnail duration is more than file duration", 954 flagForException); 955 } 956 } 957