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 package com.android.mediaframeworktest.stress; 18 19 import java.io.BufferedWriter; 20 import java.io.File; 21 import java.io.FileOutputStream; 22 import java.io.FileWriter; 23 import java.io.Writer; 24 import java.util.List; 25 26 import android.graphics.Bitmap; 27 import android.graphics.Rect; 28 import android.media.videoeditor.AudioTrack; 29 import android.media.videoeditor.EffectColor; 30 import android.media.videoeditor.EffectKenBurns; 31 import android.media.videoeditor.MediaImageItem; 32 import android.media.videoeditor.MediaItem; 33 import android.media.videoeditor.MediaProperties; 34 import android.media.videoeditor.MediaVideoItem; 35 import android.media.videoeditor.OverlayFrame; 36 import android.media.videoeditor.Transition; 37 import android.media.videoeditor.TransitionCrossfade; 38 import android.media.videoeditor.TransitionAlpha; 39 import android.media.videoeditor.TransitionFadeBlack; 40 import android.media.videoeditor.TransitionSliding; 41 import android.media.videoeditor.VideoEditor; 42 import android.os.Environment; 43 import android.test.ActivityInstrumentationTestCase; 44 import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener; 45 import android.os.Environment; 46 import android.os.SystemClock; 47 import android.test.ActivityInstrumentationTestCase; 48 import android.media.videoeditor.VideoEditor.ExportProgressListener; 49 import android.media.videoeditor.VideoEditorFactory; 50 import android.media.videoeditor.ExtractAudioWaveformProgressListener; 51 52 import android.os.Debug; 53 import android.util.Log; 54 import com.android.mediaframeworktest.MediaFrameworkPerfTestRunner; 55 import com.android.mediaframeworktest.MediaFrameworkTest; 56 import android.test.suitebuilder.annotation.LargeTest; 57 import com.android.mediaframeworktest.VideoEditorHelper; 58 import com.android.mediaframeworktest.MediaTestUtil; 59 60 /** 61 * Junit / Instrumentation - performance measurement for media player and 62 * recorder 63 */ 64 public class VideoEditorStressTest 65 extends ActivityInstrumentationTestCase<MediaFrameworkTest> { 66 67 private final String TAG = "VideoEditorStressTest"; 68 69 private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON; 70 71 private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON; 72 73 private final String VIDEOEDITOR_OUTPUT = PROJECT_LOCATION + 74 "VideoEditorStressMemOutput.txt"; 75 76 private long BeginJavaMemory; 77 private long AfterJavaMemory; 78 79 private long BeginNativeMemory; 80 private long AfterNativeMemory; 81 82 public VideoEditorStressTest() { 83 super("com.android.mediaframeworktest", MediaFrameworkTest.class); 84 new File(VIDEOEDITOR_OUTPUT).delete(); 85 } 86 87 private final String PROJECT_CLASS_NAME = 88 "android.media.videoeditor.VideoEditorImpl"; 89 private VideoEditor mVideoEditor; 90 private MediaTestUtil mMediaTestUtil; 91 private VideoEditorHelper mVideoEditorHelper; 92 93 @Override 94 protected void setUp() throws Exception { 95 // setup for each test case. 96 super.setUp(); 97 getActivity(); 98 mMediaTestUtil = new MediaTestUtil( 99 "/sdcard/VideoEditorMediaServerMemoryLog.txt", 100 this.getName(), "mediaserver"); 101 mVideoEditorHelper = new VideoEditorHelper(); 102 // Create a random String which will be used as project path, where all 103 // project related files will be stored. 104 final String projectPath = 105 mVideoEditorHelper.createRandomFile(PROJECT_LOCATION); 106 mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath); 107 } 108 109 @Override 110 protected void tearDown() throws Exception { 111 final String[] loggingInfo = new String[1]; 112 mMediaTestUtil.getMemorySummary(); 113 loggingInfo[0] = "\n" +this.getName(); 114 writeTimingInfo(loggingInfo); 115 loggingInfo[0] = " diff : " + (AfterNativeMemory - BeginNativeMemory); 116 writeTimingInfo(loggingInfo); 117 mVideoEditorHelper.destroyVideoEditor(mVideoEditor); 118 // Clean the directory created as project path 119 mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath())); 120 System.gc(); 121 super.tearDown(); 122 } 123 124 private void writeTimingInfo(String[] information) 125 throws Exception { 126 File outFile = new File(VIDEOEDITOR_OUTPUT); 127 Writer output = new BufferedWriter(new FileWriter(outFile, true)); 128 for (int i = 0; i < information.length; i++) { 129 output.write(information[i]); 130 } 131 output.close(); 132 } 133 134 private void writeTestCaseHeader(String testCaseName) 135 throws Exception { 136 File outFile = new File(VIDEOEDITOR_OUTPUT); 137 Writer output = new BufferedWriter(new FileWriter(outFile, true)); 138 output.write("\n\n" + testCaseName + "\n"); 139 output.close(); 140 } 141 142 private void getBeginMemory() throws Exception { 143 System.gc(); 144 Thread.sleep(2500); 145 BeginNativeMemory = Debug.getNativeHeapAllocatedSize(); 146 mMediaTestUtil.getStartMemoryLog(); 147 } 148 private void getAfterMemory_updateLog(String[] loggingInfo, boolean when, 149 int iteration) 150 throws Exception { 151 System.gc(); 152 Thread.sleep(2500); 153 AfterNativeMemory = Debug.getNativeHeapAllocatedSize(); 154 if(when == false){ 155 loggingInfo[0] = "\n Before Remove: iteration No.= " + iteration + 156 "\t " + (AfterNativeMemory - BeginNativeMemory); 157 } else { 158 loggingInfo[0] = "\n After Remove: iteration No.= " + iteration + 159 "\t " + (AfterNativeMemory - BeginNativeMemory); 160 } 161 writeTimingInfo(loggingInfo); 162 mMediaTestUtil.getMemoryLog(); 163 } 164 165 /** 166 * To stress test MediaItem(Video Item) adding functionality 167 * 168 * @throws Exception 169 */ 170 // TODO : remove TC_STR_001 171 @LargeTest 172 public void testStressAddRemoveVideoItem() throws Exception { 173 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 174 175 final String videoItemFileName1 = INPUT_FILE_PATH + 176 "H264_BP_176x144_15fps_144kbps_AMRNB_8kHz_12.2kbps_m_1_17.3gp"; 177 final String videoItemFileName2 = INPUT_FILE_PATH + 178 "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4"; 179 final String videoItemFileName3 = INPUT_FILE_PATH + 180 "H263_profile0_176x144_15fps_128kbps_1_35.3gp"; 181 final String videoItemFileName4 = INPUT_FILE_PATH + 182 "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp"; 183 final String[] loggingInfo = new String[1]; 184 writeTestCaseHeader("testStressAddRemoveVideoItem"); 185 int i = 0; 186 getBeginMemory(); 187 for ( i = 0; i < 50; i++) { 188 if (i % 4 == 0) { 189 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 190 "m1" + i, videoItemFileName1, renderingMode); 191 mediaItem1.setExtractBoundaries(0, 5000); 192 mVideoEditor.addMediaItem(mediaItem1); 193 } 194 if (i % 4 == 1) { 195 final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor, 196 "m2" + i, videoItemFileName2, renderingMode); 197 mediaItem2.setExtractBoundaries(0, 10000); 198 mVideoEditor.addMediaItem(mediaItem2); 199 } 200 if (i % 4 == 2) { 201 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor, 202 "m3" + i, videoItemFileName3, renderingMode); 203 mediaItem3.setExtractBoundaries(30000, 45000); 204 mVideoEditor.addMediaItem(mediaItem3); 205 } 206 if (i % 4 == 3) { 207 final MediaVideoItem mediaItem4 = new MediaVideoItem(mVideoEditor, 208 "m4" + i, videoItemFileName4, renderingMode); 209 mediaItem4.setExtractBoundaries(10000, 30000); 210 mVideoEditor.addMediaItem(mediaItem4); 211 } 212 if (i % 10 == 0) { 213 getAfterMemory_updateLog(loggingInfo, false, i); 214 } 215 } 216 getAfterMemory_updateLog(loggingInfo, false, i); 217 218 /** Remove items and check for memory leak if any */ 219 for ( i = 0; i < 50; i++) { 220 if (i % 4 == 0) { 221 mVideoEditor.removeMediaItem("m1" + i); 222 } 223 if (i % 4 == 1) { 224 mVideoEditor.removeMediaItem("m2" + i); 225 } 226 if (i % 4 == 2) { 227 mVideoEditor.removeMediaItem("m3" + i); 228 } 229 if (i % 4 == 3) { 230 mVideoEditor.removeMediaItem("m4" + i); 231 } 232 if (i % 10 == 0) { 233 getAfterMemory_updateLog(loggingInfo, true, i); 234 } 235 } 236 getAfterMemory_updateLog(loggingInfo, true, i); 237 } 238 239 /** 240 * To stress test MediaItem(Image Item) adding functionality 241 * 242 * @throws Exception 243 */ 244 // TODO : remove TC_STR_002 245 @LargeTest 246 public void testStressAddRemoveImageItem() throws Exception { 247 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 248 final String ImageItemFileName1 = INPUT_FILE_PATH + 249 "IMG_1600x1200.jpg"; 250 final String ImageItemFileName2 = INPUT_FILE_PATH + 251 "IMG_640x480.jpg"; 252 final String ImageItemFileName3 = INPUT_FILE_PATH + 253 "IMG_320x240.jpg"; 254 final String ImageItemFileName4 = INPUT_FILE_PATH + 255 "IMG_176x144.jpg"; 256 final String[] loggingInfo = new String[1]; 257 int i = 0; 258 writeTestCaseHeader("testStressAddRemoveImageItem"); 259 getBeginMemory(); 260 for ( i = 0; i < 50; i++) { 261 if (i % 4 == 0) { 262 final MediaImageItem mediaItem1 = new MediaImageItem(mVideoEditor, 263 "m1"+ i, ImageItemFileName1, 5000, renderingMode); 264 mVideoEditor.addMediaItem(mediaItem1); 265 } 266 if (i % 4 == 1) { 267 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 268 "m2"+ i, ImageItemFileName2, 10000, renderingMode); 269 mVideoEditor.addMediaItem(mediaItem2); 270 } 271 if (i % 4 == 2) { 272 final MediaImageItem mediaItem3 = new MediaImageItem(mVideoEditor, 273 "m3"+ i, ImageItemFileName3, 15000, renderingMode); 274 mVideoEditor.addMediaItem(mediaItem3); 275 } 276 if (i % 4 == 3) { 277 final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor, 278 "m4"+ i, ImageItemFileName4, 20000, renderingMode); 279 mVideoEditor.addMediaItem(mediaItem4); 280 } 281 if (i % 10 == 0) { 282 getAfterMemory_updateLog(loggingInfo, false, i); 283 } 284 } 285 getAfterMemory_updateLog(loggingInfo, false, i); 286 287 /** Remove items and check for memory leak if any */ 288 for ( i = 0; i < 50; i++) { 289 if (i % 4 == 0) { 290 mVideoEditor.removeMediaItem("m1"+i); 291 } 292 if (i % 4 == 1) { 293 mVideoEditor.removeMediaItem("m2"+i); 294 } 295 if (i % 4 == 2) { 296 mVideoEditor.removeMediaItem("m3"+i); 297 } 298 if (i % 4 == 3) { 299 mVideoEditor.removeMediaItem("m4"+i); 300 } 301 if (i % 10 == 0) { 302 getAfterMemory_updateLog(loggingInfo, true, i); 303 } 304 } 305 getAfterMemory_updateLog(loggingInfo, true, i); 306 } 307 308 /** 309 * To stress test transition 310 * 311 * @throws Exception 312 */ 313 // TODO : remove TC_STR_003 314 @LargeTest 315 public void testStressAddRemoveTransition() throws Exception { 316 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 317 final String VideoItemFileName1 = INPUT_FILE_PATH + 318 "H264_BP_800x480_15fps_512kbps_1_17.mp4"; 319 final String ImageItemFileName2 = INPUT_FILE_PATH + 320 "IMG_1600x1200.jpg"; 321 final String VideoItemFileName3 = INPUT_FILE_PATH + 322 "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4"; 323 final String maskFilename = INPUT_FILE_PATH + 324 "TransitionSpiral_QVGA.jpg"; 325 final String[] loggingInfo = new String[1]; 326 int i = 0; 327 writeTestCaseHeader("testStressAddRemoveTransition"); 328 getBeginMemory(); 329 for ( i = 0; i < 50; i++) { 330 if (i % 4 == 0) { 331 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 332 "m1"+i, VideoItemFileName1, renderingMode); 333 mVideoEditor.addMediaItem(mediaItem1); 334 mediaItem1.setExtractBoundaries(0, 10000); 335 final TransitionCrossfade tranCrossfade = 336 new TransitionCrossfade("transCF" + i, null, 337 mediaItem1, 5000, Transition.BEHAVIOR_MIDDLE_FAST); 338 mVideoEditor.addTransition(tranCrossfade); 339 } 340 if (i % 4 == 1) { 341 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 342 "m1"+i, VideoItemFileName1, renderingMode); 343 mVideoEditor.addMediaItem(mediaItem1); 344 mediaItem1.setExtractBoundaries(0, 10000); 345 346 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 347 "m2" +i, ImageItemFileName2, 10000, renderingMode); 348 mVideoEditor.addMediaItem(mediaItem2); 349 350 final TransitionAlpha transitionAlpha = 351 mVideoEditorHelper.createTAlpha("transAlpha" + i, mediaItem1, 352 mediaItem2, 5000, Transition.BEHAVIOR_SPEED_UP, 353 maskFilename, 10, false); 354 transitionAlpha.setDuration(4000); 355 mVideoEditor.addTransition(transitionAlpha); 356 } 357 if (i % 4 == 2) { 358 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 359 "m2" + i, ImageItemFileName2, 10000, renderingMode); 360 mVideoEditor.addMediaItem(mediaItem2); 361 362 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor, 363 "m3" + i, VideoItemFileName3, renderingMode); 364 mVideoEditor.addMediaItem(mediaItem3); 365 366 mediaItem3.setExtractBoundaries(0, 10000); 367 final TransitionAlpha transitionAlpha = 368 mVideoEditorHelper.createTAlpha("transAlpha" + i, mediaItem2, 369 mediaItem3, 5000, Transition.BEHAVIOR_SPEED_UP, 370 maskFilename, 10, false); 371 transitionAlpha.setDuration(4000); 372 mVideoEditor.addTransition(transitionAlpha); 373 374 mediaItem3.setExtractBoundaries(0, 6000); 375 376 final TransitionSliding transition2And3 = 377 mVideoEditorHelper.createTSliding("transSlide" +i, mediaItem2, 378 mediaItem3, 3000, Transition.BEHAVIOR_MIDDLE_FAST, 379 TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN); 380 mVideoEditor.addTransition(transition2And3); 381 } 382 if (i % 4 == 3) { 383 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor, 384 "m3" + i, VideoItemFileName3, renderingMode); 385 mVideoEditor.addMediaItem(mediaItem3); 386 mediaItem3.setExtractBoundaries(0, 5000); 387 388 final TransitionFadeBlack transition3 = 389 mVideoEditorHelper.createTFadeBlack("transFB" +i, mediaItem3, 390 null, 2500, Transition.BEHAVIOR_SPEED_UP); 391 transition3.setDuration(500); 392 mVideoEditor.addTransition(transition3); 393 } 394 if (i % 10 == 0) { 395 getAfterMemory_updateLog(loggingInfo, false, i); 396 } 397 } 398 getAfterMemory_updateLog(loggingInfo, false, i); 399 400 /** Remove items and check for memory leak if any */ 401 for ( i = 0; i < 50; i++) { 402 if (i % 4 == 0) { 403 mVideoEditor.removeTransition("transCF" + i); 404 mVideoEditor.removeMediaItem("m1" + i); 405 } 406 if (i % 4 == 1) { 407 mVideoEditor.removeTransition("transAlpha" + i); 408 mVideoEditor.removeMediaItem("m1" + i); 409 mVideoEditor.removeMediaItem("m2" + i); 410 } 411 if (i % 4 == 2) { 412 mVideoEditor.removeTransition("transSlide" +i); 413 mVideoEditor.removeMediaItem("m2" + i); 414 mVideoEditor.removeMediaItem("m3" + i); 415 } 416 if (i % 4 == 3) { 417 mVideoEditor.removeMediaItem("m3" + i); 418 } 419 if (i % 10 == 0) { 420 getAfterMemory_updateLog(loggingInfo, true, i); 421 } 422 } 423 getAfterMemory_updateLog(loggingInfo, true, i); 424 } 425 426 /** 427 * To stress test overlay 428 * 429 * @throws Exception 430 */ 431 // TODO : remove TC_STR_004 432 @LargeTest 433 public void testStressAddRemoveOverlay() throws Exception { 434 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 435 final String VideoItemFileName1 = INPUT_FILE_PATH + 436 "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4"; 437 final String ImageItemFileName2 = INPUT_FILE_PATH + 438 "IMG_640x480.jpg"; 439 final String OverlayFile3 = INPUT_FILE_PATH + 440 "IMG_640x480_Overlay1.png"; 441 final String OverlayFile4 = INPUT_FILE_PATH + 442 "IMG_640x480_Overlay2.png"; 443 final String[] loggingInfo = new String[1]; 444 int i = 0; 445 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 446 "m1", VideoItemFileName1, renderingMode); 447 mVideoEditor.addMediaItem(mediaItem1); 448 449 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 450 "m2", ImageItemFileName2, 10000, renderingMode); 451 mVideoEditor.addMediaItem(mediaItem2); 452 writeTestCaseHeader("testStressAddRemoveOverlay"); 453 getBeginMemory(); 454 for ( i = 0; i < 50; i++) { 455 if (i % 3 == 0) { 456 mediaItem1.setExtractBoundaries(0, 10000); 457 final Bitmap mBitmap = mVideoEditorHelper.getBitmap( 458 OverlayFile3, 640, 480); 459 final OverlayFrame overlayFrame = 460 mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i, 461 mBitmap, 1000, 5000); 462 mediaItem1.addOverlay(overlayFrame); 463 mediaItem1.removeOverlay("overlay"+i); 464 } 465 if (i % 3 == 1) { 466 final Bitmap mBitmap = mVideoEditorHelper.getBitmap( 467 OverlayFile4, 640, 480); 468 final OverlayFrame overlayFrame = 469 mVideoEditorHelper.createOverlay(mediaItem2, "overlay" + i, 470 mBitmap, 1000, 5000); 471 mediaItem2.addOverlay(overlayFrame); 472 mediaItem2.removeOverlay("overlay"+i); 473 } 474 if (i % 3 == 2) { 475 mediaItem1.setExtractBoundaries(0, 10000); 476 final Bitmap mBitmap = mVideoEditorHelper.getBitmap( 477 OverlayFile4, 640, 480); 478 final OverlayFrame overlayFrame = 479 mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i, 480 mBitmap, 0, mediaItem1.getDuration()); 481 mediaItem1.addOverlay(overlayFrame); 482 mediaItem1.removeOverlay("overlay"+i); 483 } 484 if (i % 10 == 0) { 485 getAfterMemory_updateLog(loggingInfo, false, i); 486 } 487 } 488 getAfterMemory_updateLog(loggingInfo, false, i); 489 } 490 491 /** 492 * To stress test Effects 493 * 494 * @throws Exception 495 */ 496 // TODO : remove TC_STR_005 497 @LargeTest 498 public void testStressAddRemoveEffects() throws Exception { 499 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 500 final String VideoItemFileName1 = INPUT_FILE_PATH + 501 "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp"; 502 final String ImageItemFileName2 = INPUT_FILE_PATH + 503 "IMG_1600x1200.jpg"; 504 final String[] loggingInfo = new String[1]; 505 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 506 "m1", VideoItemFileName1, renderingMode); 507 mVideoEditor.addMediaItem(mediaItem1); 508 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 509 "m2", ImageItemFileName2, 10000, renderingMode); 510 int i = 0; 511 mVideoEditor.addMediaItem(mediaItem2); 512 writeTestCaseHeader("testStressAddRemoveEffects"); 513 getBeginMemory(); 514 for ( i = 0; i < 50; i++) { 515 if (i % 5 == 0) { 516 mediaItem1.setExtractBoundaries(10000, 30000); 517 final EffectColor effectColor1 = 518 mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i, 519 10000, (mediaItem1.getTimelineDuration()-1000), 520 EffectColor.TYPE_COLOR, EffectColor.GREEN); 521 mediaItem1.addEffect(effectColor1); 522 } 523 if (i % 5 == 1) { 524 mediaItem2.setDuration(20000); 525 final EffectColor effectColor1 = 526 mVideoEditorHelper.createEffectItem(mediaItem2, "effect1"+i, 527 0, 4000, EffectColor.TYPE_GRADIENT, EffectColor.GRAY); 528 mediaItem2.addEffect(effectColor1); 529 } 530 if (i % 5 == 2) { 531 mediaItem1.setExtractBoundaries(10000, 30000); 532 final EffectColor effectColor1 = 533 mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i, 534 (mediaItem1.getTimelineDuration() - 4000), 4000, 535 EffectColor.TYPE_SEPIA, 0); 536 mediaItem1.addEffect(effectColor1); 537 } 538 if (i % 5 == 3) { 539 mediaItem2.setDuration(20000); 540 final EffectColor effectColor1 = 541 mVideoEditorHelper.createEffectItem(mediaItem2, "effect1"+i, 542 10000, 4000, EffectColor.TYPE_NEGATIVE, 0); 543 mediaItem2.addEffect(effectColor1); 544 } 545 if (i % 5 == 4) { 546 mediaItem2.setDuration(20000); 547 final Rect startRect = new Rect((mediaItem2.getHeight() / 3), 548 (mediaItem2.getWidth() / 3), (mediaItem2.getHeight() / 2), 549 (mediaItem2.getWidth() / 2)); 550 final Rect endRect = new Rect(0, 0, mediaItem2.getWidth(), 551 mediaItem2.getHeight()); 552 final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns( 553 mediaItem2, "KBOnM2" + i, startRect, endRect, 500, 554 (mediaItem2.getDuration() - 500)); 555 mediaItem2.addEffect(kbEffectOnMediaItem); 556 } 557 if (i % 10 == 0) { 558 getAfterMemory_updateLog(loggingInfo, false, i); 559 } 560 } 561 getAfterMemory_updateLog(loggingInfo, false, i); 562 563 /** Remove items and check for memory leak if any */ 564 for ( i = 0; i < 50; i++) { 565 if (i % 5 == 0) { 566 mediaItem1.removeEffect("effect1"+i); 567 } 568 if (i % 5 == 1) { 569 mediaItem1.removeEffect("effect1"+i); 570 } 571 if (i % 5 == 2) { 572 mediaItem1.removeEffect("effect1"+i); 573 } 574 if (i % 5 == 3) { 575 mediaItem1.removeEffect("effect1"+i); 576 } 577 if (i % 5 == 4) { 578 mediaItem1.removeEffect("KBOnM2"+i); 579 } 580 if (i % 10 == 0) { 581 getAfterMemory_updateLog(loggingInfo, true, i); 582 } 583 } 584 getAfterMemory_updateLog(loggingInfo, true, i); 585 } 586 587 /** 588 * This method will test thumbnail list extraction in a loop = 200 for Video 589 * Item 590 * 591 * @throws Exception 592 */ 593 // TODO : remove TC_STR_006 594 @LargeTest 595 public void testStressThumbnailVideoItem() throws Exception { 596 final String videoItemFileName = INPUT_FILE_PATH 597 + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp"; 598 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 599 final String[] loggingInfo = new String[1]; 600 int i = 0; 601 final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor, 602 "m1", videoItemFileName, renderingMode); 603 writeTestCaseHeader("testStressThumbnailVideoItem"); 604 getBeginMemory(); 605 for ( i = 0; i < 50; i++) { 606 if (i % 4 == 0) { 607 final Bitmap[] thumbNails = 608 mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()*3, 609 mediaVideoItem.getHeight()/2, i, 5000, 2); 610 // Recycle this Bitmap array 611 for (int i1 = 0; i1 < thumbNails.length; i1++) { 612 thumbNails[i1].recycle(); 613 } 614 } 615 if (i % 4 == 1) { 616 final Bitmap[] thumbNails = 617 mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()/2, 618 mediaVideoItem.getHeight() * 3, i, 5000, 2); 619 // Recycle this Bitmap array 620 for (int i1 = 0; i1 < thumbNails.length; i1++) { 621 thumbNails[i1].recycle(); 622 } 623 } 624 if (i % 4 == 2) { 625 final Bitmap[] thumbNails = 626 mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()*2, 627 mediaVideoItem.getHeight() / 3, i, 5000, 2); 628 // Recycle this Bitmap array 629 for (int i1 = 0; i1 < thumbNails.length; i1++) { 630 thumbNails[i1].recycle(); 631 } 632 } 633 if (i % 4 == 3) { 634 final Bitmap[] thumbNails = 635 mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth(), 636 mediaVideoItem.getHeight(), i, 5000, 2); 637 // Recycle this Bitmap array 638 for (int i1 = 0; i1 < thumbNails.length; i1++) { 639 thumbNails[i1].recycle(); 640 } 641 } 642 if (i % 10 == 0) { 643 getAfterMemory_updateLog(loggingInfo, false, i); 644 } 645 } 646 getAfterMemory_updateLog(loggingInfo, false, i); 647 } 648 649 /** 650 * To stress test media properties 651 * 652 * @throws Exception 653 */ 654 // TODO : remove TC_STR_007 655 @LargeTest 656 public void testStressMediaProperties() throws Exception { 657 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 658 final String VideoItemFileName1 = INPUT_FILE_PATH + 659 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 660 final String ImageItemFileName2 = INPUT_FILE_PATH + 661 "IMG_640x480.jpg"; 662 final String AudioItemFileName3 = INPUT_FILE_PATH + 663 "AACLC_44.1kHz_256kbps_s_1_17.mp4"; 664 final String[] loggingInfo = new String[1]; 665 int i = 0; 666 final int videoAspectRatio = MediaProperties.ASPECT_RATIO_3_2; 667 final int videoFileType = MediaProperties.FILE_MP4; 668 final int videoCodecType = MediaProperties.VCODEC_H264; 669 final int videoDuration = 77366; 670 final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline; 671 final int videoLevel = MediaProperties.H264Level.H264Level13; 672 final int videoHeight = MediaProperties.HEIGHT_720; 673 final int videoWidth = 1080; 674 675 final int imageAspectRatio = MediaProperties.ASPECT_RATIO_4_3; 676 final int imageFileType = MediaProperties.FILE_JPEG; 677 final int imageWidth = 640; 678 final int imageHeight = MediaProperties.HEIGHT_480; 679 680 final int audioDuration = 77554; 681 final int audioCodecType = MediaProperties.ACODEC_AAC_LC; 682 final int audioSamplingFrequency = 44100; 683 final int audioChannel = 2; 684 writeTestCaseHeader("testStressMediaProperties"); 685 getBeginMemory(); 686 for ( i = 0; i < 50; i++) { 687 if (i % 3 == 0) { 688 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 689 "m1" + i, VideoItemFileName1, renderingMode); 690 mVideoEditor.addMediaItem(mediaItem1); 691 mediaItem1.setExtractBoundaries(0, 20000); 692 assertEquals("Aspect Ratio Mismatch", 693 videoAspectRatio, mediaItem1.getAspectRatio()); 694 assertEquals("File Type Mismatch", 695 videoFileType, mediaItem1.getFileType()); 696 assertEquals("VideoCodec Mismatch", 697 videoCodecType, mediaItem1.getVideoType()); 698 assertEquals("duration Mismatch", 699 videoDuration, mediaItem1.getDuration()); 700 assertEquals("Video Profile ", 701 videoProfile, mediaItem1.getVideoProfile()); 702 assertEquals("Video Level ", 703 videoLevel, mediaItem1.getVideoLevel()); 704 assertEquals("Video height ", 705 videoHeight, mediaItem1.getHeight()); 706 assertEquals("Video width ", 707 videoWidth, mediaItem1.getWidth()); 708 mVideoEditor.removeMediaItem("m1" + i); 709 } 710 if (i % 3 == 1) { 711 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 712 "m2" + i, ImageItemFileName2, 10000, renderingMode); 713 mVideoEditor.addMediaItem(mediaItem2); 714 assertEquals("Aspect Ratio Mismatch", 715 imageAspectRatio, mediaItem2.getAspectRatio()); 716 assertEquals("File Type Mismatch", 717 imageFileType, mediaItem2.getFileType()); 718 assertEquals("Image height", 719 imageHeight, mediaItem2.getHeight()); 720 assertEquals("Image width", 721 imageWidth, mediaItem2.getWidth()); 722 mVideoEditor.removeMediaItem("m2" + i); 723 } 724 if (i % 3 == 2) { 725 final AudioTrack mediaItem3 = new AudioTrack(mVideoEditor, 726 "m3" + i, AudioItemFileName3); 727 mVideoEditor.addAudioTrack(mediaItem3); 728 assertEquals("AudioType Mismatch", audioCodecType, 729 mediaItem3.getAudioType()); 730 assertEquals("Audio Sampling", audioSamplingFrequency, 731 mediaItem3.getAudioSamplingFrequency()); 732 assertEquals("Audio Channels", 733 audioChannel, mediaItem3.getAudioChannels()); 734 assertEquals("duration Mismatch", audioDuration, 735 mediaItem3.getDuration()); 736 mVideoEditor.removeAudioTrack("m3" + i); 737 } 738 if (i % 10 == 0) { 739 getAfterMemory_updateLog(loggingInfo, false, i); 740 } 741 } 742 getAfterMemory_updateLog(loggingInfo, false, i); 743 } 744 745 /** 746 * To stress test insert and move of mediaitems 747 * 748 * @throws Exception 749 */ 750 // TODO : remove TC_STR_008 751 @LargeTest 752 public void testStressInsertMovieItems() throws Exception { 753 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 754 final String VideoItemFileName1 = INPUT_FILE_PATH + 755 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 756 final String VideoItemFileName2 = INPUT_FILE_PATH + 757 "H264_BP_800x480_15fps_512kbps_1_17.mp4"; 758 final String VideoItemFileName3 = INPUT_FILE_PATH + 759 "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp"; 760 final String[] loggingInfo = new String[1]; 761 int i = 0; 762 writeTestCaseHeader("testStressInsertMoveItems"); 763 764 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 765 "m1", VideoItemFileName1, renderingMode); 766 mVideoEditor.addMediaItem(mediaItem1); 767 mediaItem1.setExtractBoundaries(0, 10000); 768 769 final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor, 770 "m2", VideoItemFileName2, renderingMode); 771 mVideoEditor.addMediaItem(mediaItem2); 772 mediaItem2.setExtractBoundaries(0, 15000); 773 774 getBeginMemory(); 775 for ( i = 0; i < 50; i++) { 776 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor, 777 "m3" + i, VideoItemFileName3, renderingMode); 778 mediaItem3.setExtractBoundaries(0, 15000); 779 mVideoEditor.insertMediaItem(mediaItem3, "m1"); 780 mVideoEditor.moveMediaItem("m2", "m3" + i); 781 if (i % 10 == 0) { 782 getAfterMemory_updateLog(loggingInfo, false, i); 783 } 784 } 785 getAfterMemory_updateLog(loggingInfo, false, i); 786 787 /** Remove items and check for memory leak if any */ 788 for ( i = 0; i < 50; i++) { 789 mVideoEditor.removeMediaItem("m3" + i); 790 if (i % 10 == 0) { 791 getAfterMemory_updateLog(loggingInfo, true, i); 792 } 793 } 794 mVideoEditor.removeMediaItem("m2"); 795 mVideoEditor.removeMediaItem("m1"); 796 getAfterMemory_updateLog(loggingInfo, true, i); 797 } 798 799 /** 800 * To stress test : load and save 801 * 802 * @throws Exception 803 */ 804 // TODO : remove TC_STR_009 805 @LargeTest 806 public void testStressLoadAndSave() throws Exception { 807 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 808 final String VideoItemFileName1 = INPUT_FILE_PATH + 809 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 810 final String VideoItemFileName2 = INPUT_FILE_PATH + 811 "H264_BP_800x480_15fps_512kbps_1_17.mp4"; 812 final String VideoItemFileName3 = INPUT_FILE_PATH + 813 "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp"; 814 final String ImageItemFileName4 = INPUT_FILE_PATH + 815 "IMG_640x480.jpg"; 816 final String ImageItemFileName5 = INPUT_FILE_PATH + 817 "IMG_176x144.jpg"; 818 final String OverlayFile6 = INPUT_FILE_PATH + 819 "IMG_640x480_Overlay1.png"; 820 final String[] loggingInfo = new String[1]; 821 int i = 0; 822 final String[] projectPath = new String[10]; 823 writeTestCaseHeader("testStressLoadAndSave"); 824 getBeginMemory(); 825 for( i=0; i < 10; i++){ 826 827 projectPath[i] = 828 mVideoEditorHelper.createRandomFile(PROJECT_LOCATION); 829 final VideoEditor mVideoEditor1 = 830 mVideoEditorHelper.createVideoEditor(projectPath[i]); 831 832 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor1, 833 "m1", VideoItemFileName1, renderingMode); 834 mVideoEditor1.addMediaItem(mediaItem1); 835 mediaItem1.setExtractBoundaries(0, 10000); 836 837 final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor1, 838 "m2", VideoItemFileName2, renderingMode); 839 mVideoEditor1.addMediaItem(mediaItem2); 840 mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4, 841 mediaItem2.getDuration()/2); 842 843 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor1, 844 "m3", VideoItemFileName3, renderingMode); 845 mVideoEditor1.addMediaItem(mediaItem3); 846 mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2, 847 mediaItem3.getDuration()); 848 849 final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor1, 850 "m4", ImageItemFileName4, 5000, renderingMode); 851 mVideoEditor1.addMediaItem(mediaItem4); 852 853 final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor1, 854 "m5", ImageItemFileName5, 5000, renderingMode); 855 mVideoEditor1.addMediaItem(mediaItem5); 856 857 final EffectColor effectColor1 = 858 mVideoEditorHelper.createEffectItem(mediaItem3, "effect1", 859 10000, 2000, EffectColor.TYPE_COLOR, EffectColor.GREEN); 860 mediaItem3.addEffect(effectColor1); 861 862 final Bitmap mBitmap = mVideoEditorHelper.getBitmap(OverlayFile6, 863 640, 480); 864 final OverlayFrame overlayFrame = 865 mVideoEditorHelper.createOverlay(mediaItem4, "overlay", 866 mBitmap, 4000, 1000); 867 mediaItem4.addOverlay(overlayFrame); 868 869 final TransitionCrossfade tranCrossfade = 870 new TransitionCrossfade("transCF", mediaItem1, 871 mediaItem2, 5000, Transition.BEHAVIOR_MIDDLE_FAST); 872 mVideoEditor1.addTransition(tranCrossfade); 873 874 final EffectColor effectColor2 = 875 mVideoEditorHelper.createEffectItem(mediaItem4, "effect2", 0, 876 mediaItem4.getDuration(), EffectColor.TYPE_COLOR, 877 EffectColor.PINK); 878 mediaItem4.addEffect(effectColor2); 879 880 mVideoEditor1.generatePreview(new MediaProcessingProgressListener() { 881 public void onProgress(Object item, int action, int progress) { 882 } 883 }); 884 885 mVideoEditor1.save(); 886 mVideoEditor1.release(); 887 888 getAfterMemory_updateLog(loggingInfo, false, i); 889 } 890 getAfterMemory_updateLog(loggingInfo, false, i); 891 892 /** Remove items and check for memory leak if any */ 893 for( i=0; i<10; i++){ 894 final VideoEditor mVideoEditor1b = 895 VideoEditorFactory.load(projectPath[i], true); 896 List<MediaItem> mediaList = mVideoEditor1b.getAllMediaItems(); 897 assertEquals("Media Item List Size", 5, mediaList.size()); 898 899 mediaList.get(3).removeEffect("effect1"); 900 mediaList.get(3).removeEffect("effect2"); 901 mediaList.get(2).removeOverlay("overlay"); 902 mVideoEditor1b.removeTransition("transCF"); 903 mVideoEditor1b.removeMediaItem("m5"); 904 mVideoEditor1b.removeMediaItem("m4"); 905 mVideoEditor1b.removeMediaItem("m3"); 906 mVideoEditor1b.removeMediaItem("m2"); 907 mVideoEditor1b.removeMediaItem("m1"); 908 mVideoEditor1b.release(); 909 getAfterMemory_updateLog(loggingInfo, true, i); 910 } 911 getAfterMemory_updateLog(loggingInfo, true, i); 912 } 913 914 /** 915 * To stress test : Multiple Export 916 * 917 * @throws Exception 918 */ 919 // TODO : remove TC_STR_010 920 @LargeTest 921 public void testStressMultipleExport() throws Exception { 922 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 923 final String VideoItemFileName1 = INPUT_FILE_PATH + 924 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 925 final String VideoItemFileName2 = INPUT_FILE_PATH + 926 "H264_BP_800x480_15fps_512kbps_1_17.mp4"; 927 final String[] loggingInfo = new String[1]; 928 final String outFilename = mVideoEditorHelper.createRandomFile( 929 mVideoEditor.getPath() + "/") + ".3gp"; 930 int i = 0; 931 writeTestCaseHeader("testStressMultipleExport"); 932 getBeginMemory(); 933 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 934 "m1", VideoItemFileName1, renderingMode); 935 mVideoEditor.addMediaItem(mediaItem1); 936 mediaItem1.setExtractBoundaries(0, 10000); 937 938 final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor, 939 "m2", VideoItemFileName2, renderingMode); 940 mVideoEditor.addMediaItem(mediaItem2); 941 mediaItem2.setExtractBoundaries(0, 15000); 942 943 for ( i = 0; i < 50; i++) { 944 if(i%4 ==0){ 945 final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9; 946 mVideoEditor.setAspectRatio(aspectRatio); 947 mVideoEditor.export(outFilename, MediaProperties.HEIGHT_288, 948 MediaProperties.BITRATE_256K,MediaProperties.ACODEC_AAC_LC, 949 MediaProperties.VCODEC_H263, 950 new ExportProgressListener() { 951 public void onProgress(VideoEditor ve, String outFileName, 952 int progress) { 953 } 954 }); 955 } 956 if(i%4 ==1){ 957 final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3; 958 mVideoEditor.setAspectRatio(aspectRatio); 959 mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144, 960 MediaProperties.BITRATE_384K,MediaProperties.ACODEC_AAC_LC, 961 MediaProperties.VCODEC_MPEG4, 962 new ExportProgressListener() { 963 public void onProgress(VideoEditor ve, String outFileName, 964 int progress) { 965 } 966 }); 967 } 968 if(i%4 ==2){ 969 final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9; 970 mVideoEditor.setAspectRatio(aspectRatio); 971 mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144, 972 MediaProperties.BITRATE_512K,MediaProperties.ACODEC_AAC_LC, 973 MediaProperties.VCODEC_H264, 974 new ExportProgressListener() { 975 public void onProgress(VideoEditor ve, String outFileName, 976 int progress) { 977 } 978 }); 979 } 980 if(i%4 ==3){ 981 final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2; 982 mVideoEditor.setAspectRatio(aspectRatio); 983 mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480, 984 MediaProperties.BITRATE_800K,MediaProperties.ACODEC_AAC_LC, 985 MediaProperties.VCODEC_H264, 986 new ExportProgressListener() { 987 public void onProgress(VideoEditor ve, String outFileName, 988 int progress) { 989 } 990 }); 991 } 992 if (i % 10 == 0) { 993 getAfterMemory_updateLog(loggingInfo, false, i); 994 } 995 } 996 getAfterMemory_updateLog(loggingInfo, false, i); 997 998 /** Remove items and check for memory leak if any */ 999 mVideoEditor.removeMediaItem("m2"); 1000 mVideoEditor.removeMediaItem("m1"); 1001 1002 getAfterMemory_updateLog(loggingInfo, true, i); 1003 } 1004 1005 /** 1006 * To stress test Media Item,Overlays,Transitions and Ken Burn 1007 * 1008 * @throws Exception 1009 */ 1010 // TODO : remove TC_STR_011 1011 @LargeTest 1012 public void testStressOverlayTransKenBurn() throws Exception { 1013 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 1014 final String VideoItemFileName1 = INPUT_FILE_PATH + 1015 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 1016 final String ImageItemFileName2 = INPUT_FILE_PATH + 1017 "IMG_640x480.jpg"; 1018 final String OverlayFile3 = INPUT_FILE_PATH + 1019 "IMG_640x480_Overlay1.png"; 1020 final String audioFilename4 = INPUT_FILE_PATH + 1021 "AACLC_44.1kHz_256kbps_s_1_17.mp4"; 1022 int i = 0; 1023 final String[] loggingInfo = new String[1]; 1024 writeTestCaseHeader("testStressOverlayTransKenBurn"); 1025 getBeginMemory(); 1026 for ( i = 0; i < 10; i++) { 1027 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 1028 "m1" + i, VideoItemFileName1, renderingMode); 1029 mVideoEditor.addMediaItem(mediaItem1); 1030 mediaItem1.setExtractBoundaries(0, 10000); 1031 1032 final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor, 1033 "m2" + i, ImageItemFileName2, 10000, renderingMode); 1034 mVideoEditor.addMediaItem(mediaItem2); 1035 1036 final EffectColor effectColor1 = 1037 mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i, 1038 (mediaItem1.getDuration() - 4000), 4000, 1039 EffectColor.TYPE_SEPIA, 0); 1040 mediaItem1.addEffect(effectColor1); 1041 1042 final TransitionCrossfade tranCrossfade = 1043 new TransitionCrossfade("transCF" + i, mediaItem1, 1044 mediaItem2, 4000, Transition.BEHAVIOR_MIDDLE_FAST); 1045 mVideoEditor.addTransition(tranCrossfade); 1046 1047 final Bitmap mBitmap = mVideoEditorHelper.getBitmap(OverlayFile3, 1048 640, 480); 1049 final OverlayFrame overlayFrame = 1050 mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i, 1051 mBitmap, 1000, 5000); 1052 mediaItem1.addOverlay(overlayFrame); 1053 1054 final Rect startRect = new Rect((mediaItem2.getHeight() / 3), 1055 (mediaItem2.getWidth() / 3), (mediaItem2.getHeight() / 2), 1056 (mediaItem2.getWidth() / 2)); 1057 final Rect endRect = new Rect(0, 0, mediaItem2.getWidth(), 1058 mediaItem2.getHeight()); 1059 1060 final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns( 1061 mediaItem2, "KBOnM2" + i, startRect, endRect, 500, 1062 (mediaItem2.getDuration()-500)); 1063 mediaItem2.addEffect(kbEffectOnMediaItem); 1064 1065 if(i == 5) { 1066 final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor, 1067 "Audio Track1", audioFilename4); 1068 mVideoEditor.addAudioTrack(audioTrack1); 1069 } 1070 getAfterMemory_updateLog(loggingInfo, false, i); 1071 } 1072 getAfterMemory_updateLog(loggingInfo, false, i); 1073 1074 /** Remove items and check for memory leak if any */ 1075 for ( i = 0; i < 10; i++) { 1076 MediaImageItem m2 = (MediaImageItem)mVideoEditor.getMediaItem("m2"+i); 1077 MediaVideoItem m1 = (MediaVideoItem)mVideoEditor.getMediaItem("m1"+i); 1078 m2.removeEffect("KBOnM2" + i); 1079 m1.removeOverlay("overlay" + i); 1080 mVideoEditor.removeTransition("transCF" + i); 1081 m1.removeEffect("effect1" + i); 1082 mVideoEditor.removeMediaItem("m2" + i); 1083 mVideoEditor.removeMediaItem("m1" + i); 1084 if(i == 5) { 1085 mVideoEditor.removeAudioTrack("Audio Track1"); 1086 } 1087 getAfterMemory_updateLog(loggingInfo, true, i); 1088 } 1089 getAfterMemory_updateLog(loggingInfo, true, i); 1090 } 1091 1092 /** 1093 * To test the performance : With an audio track with Video 1094 * 1095 * @throws Exception 1096 */ 1097 // TODO : remove TC_STR_012 1098 @LargeTest 1099 public void testStressAudioTrackVideo() throws Exception { 1100 final String videoItemFileName1 = INPUT_FILE_PATH + 1101 "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 1102 final String audioFilename1 = INPUT_FILE_PATH + 1103 "AACLC_44.1kHz_256kbps_s_1_17.mp4"; 1104 final String audioFilename2 = INPUT_FILE_PATH + 1105 "AMRNB_8KHz_12.2Kbps_m_1_17.3gp"; 1106 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 1107 final int audioVolume = 50; 1108 final String[] loggingInfo = new String[1]; 1109 int i = 1; 1110 writeTestCaseHeader("testStressAudioTrackVideo"); 1111 getBeginMemory(); 1112 final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor, 1113 "mediaItem1", videoItemFileName1, renderingMode); 1114 mVideoEditor.addMediaItem(mediaVideoItem); 1115 1116 final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor, 1117 "Audio Track1", audioFilename1); 1118 audioTrack1.disableDucking(); 1119 audioTrack1.setVolume(audioVolume); 1120 mVideoEditor.addAudioTrack(audioTrack1); 1121 1122 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 1123 public void onProgress(Object item, int action, int progress) { 1124 } 1125 }); 1126 1127 mVideoEditor.removeAudioTrack("Audio Track1"); 1128 1129 final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor, 1130 "Audio Track2", audioFilename2); 1131 audioTrack2.enableLoop(); 1132 1133 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 1134 public void onProgress(Object item, int action, int progress) { 1135 } 1136 }); 1137 getAfterMemory_updateLog(loggingInfo, false, i); 1138 1139 /** Remove items and check for memory leak if any */ 1140 mVideoEditor.removeMediaItem("mediaItem1"); 1141 1142 getAfterMemory_updateLog(loggingInfo, true, i); 1143 } 1144 1145 /** 1146 * To Test Stress : Story Board creation with out preview or export 1147 * 1148 * @throws Exception 1149 */ 1150 // TODO : remove TC_STR_013 1151 @LargeTest 1152 public void testStressStoryBoard() throws Exception { 1153 final String videoItemFileName1 = INPUT_FILE_PATH + 1154 "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_161kbps_s_0_26.mp4"; 1155 final String videoItemFileName2 = INPUT_FILE_PATH + 1156 "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4"; 1157 final String videoItemFileName3= INPUT_FILE_PATH + 1158 "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4"; 1159 final String imageItemFileName4 = INPUT_FILE_PATH + 1160 "IMG_1600x1200.jpg"; 1161 final String imageItemFileName5 = INPUT_FILE_PATH + 1162 "IMG_176x144.jpg"; 1163 final String audioFilename6 = INPUT_FILE_PATH + 1164 "AMRNB_8KHz_12.2Kbps_m_1_17.3gp"; 1165 final String audioFilename7 = INPUT_FILE_PATH + 1166 "AACLC_44.1kHz_256kbps_s_1_17.mp4"; 1167 1168 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 1169 final int audioVolume = 50; 1170 final String[] loggingInfo = new String[1]; 1171 int i = 1; 1172 1173 writeTestCaseHeader("testStressStoryBoard"); 1174 getBeginMemory(); 1175 final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor, 1176 "m1", videoItemFileName1, renderingMode); 1177 mediaItem1.setExtractBoundaries(0, 10000); 1178 mVideoEditor.addMediaItem(mediaItem1); 1179 1180 final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor, 1181 "m2", videoItemFileName2, renderingMode); 1182 mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4, 1183 mediaItem2.getDuration()/2); 1184 mVideoEditor.addMediaItem(mediaItem2); 1185 1186 final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor, 1187 "m3", videoItemFileName3, renderingMode); 1188 mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2, 1189 mediaItem3.getDuration()); 1190 mVideoEditor.addMediaItem(mediaItem3); 1191 1192 final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor, 1193 "m4", imageItemFileName4, 5000, renderingMode); 1194 mVideoEditor.addMediaItem(mediaItem4); 1195 1196 final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor, 1197 "m5", imageItemFileName5, 5000, renderingMode); 1198 mVideoEditor.addMediaItem(mediaItem5); 1199 1200 final TransitionCrossfade tranCrossfade = 1201 new TransitionCrossfade("transCF", mediaItem2, mediaItem3, 2500, 1202 Transition.BEHAVIOR_MIDDLE_FAST); 1203 mVideoEditor.addTransition(tranCrossfade); 1204 1205 final TransitionCrossfade tranCrossfade1 = 1206 new TransitionCrossfade("transCF1", mediaItem3, mediaItem4, 2500, 1207 Transition.BEHAVIOR_MIDDLE_FAST); 1208 mVideoEditor.addTransition(tranCrossfade1); 1209 1210 final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor, 1211 "Audio Track1", audioFilename6); 1212 mVideoEditor.addAudioTrack(audioTrack1); 1213 1214 mVideoEditor.removeAudioTrack("Audio Track1"); 1215 final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor, 1216 "Audio Track2", audioFilename7); 1217 mVideoEditor.addAudioTrack(audioTrack2); 1218 audioTrack2.enableLoop(); 1219 getAfterMemory_updateLog(loggingInfo, false, i); 1220 1221 /** Remove items and check for memory leak if any */ 1222 getBeginMemory(); 1223 mVideoEditor.removeAudioTrack("Audio Track2"); 1224 mVideoEditor.removeTransition("transCF"); 1225 mVideoEditor.removeTransition("transCF1"); 1226 mVideoEditor.removeMediaItem("m5"); 1227 mVideoEditor.removeMediaItem("m4"); 1228 mVideoEditor.removeMediaItem("m3"); 1229 mVideoEditor.removeMediaItem("m2"); 1230 mVideoEditor.removeMediaItem("m1"); 1231 1232 getAfterMemory_updateLog(loggingInfo, true, i); 1233 } 1234 1235 /** 1236 * To test the performance : With an audio track Only 1237 * 1238 * @throws Exception 1239 */ 1240 // TODO : remove TC_STR_014 1241 @LargeTest 1242 public void testStressAudioTrackOnly() throws Exception { 1243 1244 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 1245 final String AudioItemFileName1 = INPUT_FILE_PATH + 1246 "AACLC_44.1kHz_256kbps_s_1_17.mp4"; 1247 final String[] loggingInfo = new String[1]; 1248 int i = 0; 1249 writeTestCaseHeader("testStressAudioTrackOnly"); 1250 getBeginMemory(); 1251 for ( i = 0; i < 50; i++) { 1252 final AudioTrack mediaItem1 = new AudioTrack(mVideoEditor, 1253 "m1" + i, AudioItemFileName1); 1254 mVideoEditor.addAudioTrack(mediaItem1); 1255 mediaItem1.enableLoop(); 1256 mVideoEditor.removeAudioTrack("m1" + i); 1257 if (i % 10 == 0) { 1258 getAfterMemory_updateLog(loggingInfo, false, i); 1259 } 1260 } 1261 getAfterMemory_updateLog(loggingInfo, false, i); 1262 } 1263 1264 /** 1265 * This method will test thumbnail list extraction in a loop = 200 for Image 1266 * Item 1267 * 1268 * @throws Exception 1269 */ 1270 // TODO : remove TC_STR_016 -- New Test Case 1271 @LargeTest 1272 public void testStressThumbnailImageItem() throws Exception { 1273 final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg"; 1274 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 1275 final String[] loggingInfo = new String[1]; 1276 int i = 0; 1277 final MediaImageItem mediaImageItem = new MediaImageItem(mVideoEditor, 1278 "m1", imageItemFileName, 5000, renderingMode); 1279 writeTestCaseHeader("testStressThumbnailImageItem"); 1280 getBeginMemory(); 1281 for ( i = 0; i < 50; i++) { 1282 if (i % 4 == 0) { 1283 final Bitmap[] thumbNails = mediaImageItem.getThumbnailList( 1284 mediaImageItem.getWidth() / 2 , 1285 mediaImageItem.getHeight() / 2, i, 5000, 2); 1286 // Recycle this Bitmap array 1287 for (int i1 = 0; i1 < thumbNails.length; i1++) { 1288 thumbNails[i1].recycle(); 1289 } 1290 } 1291 if (i % 4 == 1) { 1292 final Bitmap[] thumbNails = mediaImageItem.getThumbnailList( 1293 mediaImageItem.getWidth() / 2, 1294 mediaImageItem.getHeight() * 3, i, 5000, 2); 1295 // Recycle this Bitmap array 1296 for (int i1 = 0; i1 < thumbNails.length; i1++) { 1297 thumbNails[i1].recycle(); 1298 } 1299 } 1300 if (i % 4 == 2) { 1301 final Bitmap[] thumbNails = mediaImageItem.getThumbnailList( 1302 mediaImageItem.getWidth() * 2, 1303 mediaImageItem.getHeight() / 3, i, 5000, 2); 1304 // Recycle this Bitmap array 1305 for (int i1 = 0; i1 < thumbNails.length; i1++) { 1306 thumbNails[i1].recycle(); 1307 } 1308 } 1309 if (i % 4 == 3) { 1310 final Bitmap[] thumbNails = mediaImageItem.getThumbnailList( 1311 mediaImageItem.getWidth(), 1312 mediaImageItem.getHeight(), i, 5000, 2); 1313 // Recycle this Bitmap array 1314 for (int i1 = 0; i1 < thumbNails.length; i1++) { 1315 thumbNails[i1].recycle(); 1316 } 1317 } 1318 if (i % 10 == 0) { 1319 getAfterMemory_updateLog(loggingInfo, false, i); 1320 } 1321 } 1322 getAfterMemory_updateLog(loggingInfo, false, i); 1323 } 1324 } 1325