VideoEditorPreviewTest.java revision db6028508c8eb31a0de1dcdfc410ddfe6df7c5ad
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 17package com.android.mediaframeworktest.functional.videoeditor; 18 19import java.io.File; 20import java.io.IOException; 21import java.util.List; 22import java.util.concurrent.Semaphore; 23 24import android.graphics.Bitmap; 25import android.graphics.Rect; 26import android.media.videoeditor.AudioTrack; 27import android.media.videoeditor.Effect; 28import android.media.videoeditor.EffectColor; 29import android.media.videoeditor.EffectKenBurns; 30import android.media.videoeditor.MediaImageItem; 31import android.media.videoeditor.MediaItem; 32import android.media.videoeditor.MediaProperties; 33import android.media.videoeditor.MediaVideoItem; 34import android.media.videoeditor.Overlay; 35import android.media.videoeditor.OverlayFrame; 36import android.media.videoeditor.Transition; 37import android.media.videoeditor.TransitionAlpha; 38import android.media.videoeditor.TransitionCrossfade; 39import android.media.videoeditor.TransitionFadeBlack; 40import android.media.videoeditor.TransitionSliding; 41import android.media.videoeditor.VideoEditor; 42import android.media.videoeditor.VideoEditor.ExportProgressListener; 43import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener; 44import android.media.videoeditor.VideoEditor.PreviewProgressListener; 45import android.media.videoeditor.VideoEditor.OverlayData; 46import android.os.Environment; 47import android.test.ActivityInstrumentationTestCase; 48import android.view.SurfaceHolder; 49 50 51import com.android.mediaframeworktest.MediaFrameworkTest; 52import android.test.suitebuilder.annotation.LargeTest; 53import com.android.mediaframeworktest.VideoEditorHelper; 54 55import android.os.Handler; 56import android.os.Looper; 57import android.os.Message; 58 59import java.util.concurrent.TimeUnit; 60 61import android.util.Log; 62 63public class VideoEditorPreviewTest extends 64 ActivityInstrumentationTestCase<MediaFrameworkTest> { 65 private final String TAG = "VideoEditorTest"; 66 67 private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON; 68 69 private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON; 70 71 private final String PROJECT_CLASS_NAME = 72 "android.media.videoeditor.VideoEditorImpl"; 73 74 private VideoEditor mVideoEditor; 75 76 private VideoEditorHelper mVideoEditorHelper; 77 78 private class EventHandler extends Handler { 79 public EventHandler( Looper lp) 80 { 81 super(lp); 82 } 83 public void handleMessage(Message msg) 84 { 85 switch (msg.what) 86 { 87 default: 88 MediaFrameworkTest.testInvalidateOverlay(); 89 } 90 } 91 } 92 private EventHandler mEventHandler; 93 94 private boolean previewStart; 95 private boolean previewStop; 96 97 /* Minimum waiting time for Semaphore to wait for release */ 98 private final long minWaitingTime = 3000; 99 100 // Declares the annotation for Preview Test Cases 101 public @interface Preview { 102 } 103 104 public VideoEditorPreviewTest() { 105 super("com.android.mediaframeworktest", MediaFrameworkTest.class); 106 107 Looper looper; 108 if ((looper = Looper.myLooper()) != null) { 109 mEventHandler = new EventHandler(looper); 110 111 } else { 112 //Handle error when looper can not be created. 113 ; 114 } 115 } 116 117 @Override 118 protected void setUp() throws Exception { 119 // setup for each test case. 120 super.setUp(); 121 mVideoEditorHelper = new VideoEditorHelper(); 122 // Create a random String which will be used as project path, where all 123 // project related files will be stored. 124 final String projectPath = 125 mVideoEditorHelper.createRandomFile(PROJECT_LOCATION); 126 mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath); 127 } 128 129 @Override 130 protected void tearDown() throws Exception { 131 mVideoEditorHelper.destroyVideoEditor(mVideoEditor); 132 // Clean the directory created as project path 133 mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath())); 134 System.gc(); 135 super.tearDown(); 136 } 137 138 protected void setPreviewStart() { 139 previewStart = true; 140 } 141 protected void setPreviewStop() { 142 previewStop = true; 143 } 144 145 protected void validatePreviewProgress(int startMs, int endMs, 146 boolean loop, long duration) throws Exception { 147 148 final int[] progressUpdate = new int[100]; 149 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 150 previewStart = false; 151 previewStop = false; 152 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 153 int i = 0; 154 public void onProgress(Object item, int action, int progress) { 155 progressUpdate[i++] = progress; 156 } 157 }); 158 mVideoEditorHelper.checkProgressCBValues(progressUpdate); 159 final SurfaceHolder surfaceHolder = 160 MediaFrameworkTest.mSurfaceView.getHolder(); 161 162 long waitingTime = minWaitingTime; 163 if (endMs == -1) { 164 waitingTime += duration; 165 } 166 else { 167 waitingTime += (endMs - startMs); 168 } 169 blockTillPreviewCompletes.acquire(); 170 try { 171 mVideoEditor.startPreview(surfaceHolder, startMs, endMs, loop, 1, 172 new PreviewProgressListener() { 173 public void onProgress(VideoEditor videoEditor, long timeMs, 174 OverlayData overlayData) { 175 176 if ( overlayData != null) { 177 if(overlayData.needsRendering()) { 178 overlayData.renderOverlay(MediaFrameworkTest.mDestBitmap); 179 mEventHandler.sendMessage(mEventHandler.obtainMessage(1, 2, 3)); 180 } 181 } 182 } 183 public void onStart(VideoEditor videoEditor) { 184 setPreviewStart(); 185 } 186 public void onStop(VideoEditor videoEditor) { 187 setPreviewStop(); 188 blockTillPreviewCompletes.release(); 189 } 190 }); 191 } catch (Exception e) { 192 blockTillPreviewCompletes.release(); 193 } 194 blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS); 195 196 mVideoEditor.stopPreview(); 197 assertTrue("Preview Failed to start", previewStart); 198 assertTrue("Preview Failed to stop", previewStop); 199 200 blockTillPreviewCompletes.release(); 201 } 202 203 // ----------------------------------------------------------------- 204 // Preview 205 // ----------------------------------------------------------------- 206 207 /** 208 *To test Preview : FULL Preview of current work (beginning till end) 209 */ 210 // TODO : remove TC_PRV_001 211 @LargeTest 212 public void testPreviewTheStoryBoard() throws Exception { 213 final String videoItemFileName1 = INPUT_FILE_PATH 214 + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4"; 215 final String videoItemFileName2 = INPUT_FILE_PATH 216 + "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4"; 217 final String videoItemFileName3 = INPUT_FILE_PATH 218 + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp"; 219 previewStart = false; 220 previewStop = false; 221 final MediaVideoItem mediaVideoItem1 = 222 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1", 223 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 224 mediaVideoItem1.setExtractBoundaries(0, 10000); 225 mVideoEditor.addMediaItem(mediaVideoItem1); 226 227 final MediaVideoItem mediaVideoItem2 = 228 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem2", 229 videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER); 230 mVideoEditor.addMediaItem(mediaVideoItem2); 231 mediaVideoItem2.setExtractBoundaries(0, 10000); 232 233 final MediaVideoItem mediaVideoItem3 = 234 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem3", 235 videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER); 236 mediaVideoItem3.setExtractBoundaries(0, 10000); 237 238 mVideoEditor.insertMediaItem(mediaVideoItem3, mediaVideoItem1.getId()); 239 List<MediaItem> mediaList = mVideoEditor.getAllMediaItems(); 240 assertEquals("Media Item 1", mediaVideoItem1, mediaList.get(0)); 241 assertEquals("Media Item 3", mediaVideoItem3, mediaList.get(1)); 242 assertEquals("Media Item 2", mediaVideoItem2, mediaList.get(2)); 243 244 mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER); 245 assertEquals("Media Item 1 Rendering Mode", 246 MediaItem.RENDERING_MODE_BLACK_BORDER, 247 mediaVideoItem1.getRenderingMode()); 248 249 mediaVideoItem2.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER); 250 assertEquals("Media Item 2 Rendering Mode", 251 MediaItem.RENDERING_MODE_BLACK_BORDER, 252 mediaVideoItem2.getRenderingMode()); 253 254 mediaVideoItem3.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH); 255 assertEquals("Media Item 3 Rendering Mode", 256 MediaItem.RENDERING_MODE_STRETCH, 257 mediaVideoItem3.getRenderingMode()); 258 259 mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_5_3); 260 assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_5_3, 261 mVideoEditor.getAspectRatio()); 262 263 validatePreviewProgress(0, -1, false, mVideoEditor.getDuration()); 264 } 265 266 /** 267 * To test Preview : Preview of start + 10 sec till end of story board 268 */ 269 // TODO : remove TC_PRV_002 270 @LargeTest 271 public void testPreviewTheStoryBoardFromDuration() throws Exception { 272 final String videoItemFileName1 = INPUT_FILE_PATH 273 + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4"; 274 final String videoItemFileName2 = INPUT_FILE_PATH + 275 "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4"; 276 final String videoItemFileName3 = INPUT_FILE_PATH 277 + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp"; 278 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 279 previewStart = false; 280 previewStop = false; 281 final MediaVideoItem mediaVideoItem1 = 282 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1", 283 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 284 mediaVideoItem1.setExtractBoundaries(0, 10000); 285 mVideoEditor.addMediaItem(mediaVideoItem1); 286 287 final MediaVideoItem mediaVideoItem2 = 288 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem2", 289 videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER); 290 mediaVideoItem2.setExtractBoundaries(0, 10000); 291 mVideoEditor.addMediaItem(mediaVideoItem2); 292 293 final MediaVideoItem mediaVideoItem3 = 294 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem3", 295 videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER); 296 mediaVideoItem3.setExtractBoundaries(0, 10000); 297 298 mVideoEditor.insertMediaItem(mediaVideoItem3, mediaVideoItem1.getId()); 299 300 List<MediaItem> mediaList = mVideoEditor.getAllMediaItems(); 301 assertEquals("Media Item 1", mediaVideoItem1, mediaList.get(0)); 302 assertEquals("Media Item 3", mediaVideoItem3, mediaList.get(1)); 303 assertEquals("Media Item 2", mediaVideoItem2, mediaList.get(2)); 304 mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER); 305 306 assertEquals("Media Item 1 Rendering Mode", 307 MediaItem.RENDERING_MODE_BLACK_BORDER, 308 mediaVideoItem1.getRenderingMode()); 309 mediaVideoItem2.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER); 310 311 assertEquals("Media Item 2 Rendering Mode", 312 MediaItem.RENDERING_MODE_BLACK_BORDER, 313 mediaVideoItem2.getRenderingMode()); 314 mediaVideoItem3.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH); 315 316 assertEquals("Media Item 3 Rendering Mode", 317 MediaItem.RENDERING_MODE_STRETCH, 318 mediaVideoItem3.getRenderingMode()); 319 320 mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_5_3); 321 assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_5_3, 322 mVideoEditor.getAspectRatio()); 323 324 validatePreviewProgress(10000, -1, false, mVideoEditor.getDuration()); 325 } 326 327 /** 328 * To test Preview : Preview of current Effects applied 329 */ 330 // TODO : remove TC_PRV_003 331 @LargeTest 332 public void testPreviewOfEffects() throws Exception { 333 final String videoItemFileName1 = INPUT_FILE_PATH + 334 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 335 336 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 337 previewStart = false; 338 previewStop = false; 339 final MediaVideoItem mediaVideoItem1 = 340 mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1", 341 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 342 mVideoEditor.addMediaItem(mediaVideoItem1); 343 344 final EffectColor effectNegative = 345 mVideoEditorHelper.createEffectItem(mediaVideoItem1, 346 "effectNegative", 0, 2000, EffectColor.TYPE_NEGATIVE, 0); 347 mediaVideoItem1.addEffect(effectNegative); 348 349 final EffectColor effectGreen = 350 mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effectGreen", 351 2000, 3000, EffectColor.TYPE_COLOR, EffectColor.GREEN); 352 mediaVideoItem1.addEffect(effectGreen); 353 354 final EffectColor effectFifties = 355 mVideoEditorHelper.createEffectItem(mediaVideoItem1, 356 "effectFifties", 5000, 4000, EffectColor.TYPE_FIFTIES, 0); 357 mediaVideoItem1.addEffect(effectFifties); 358 359 List<Effect> effectList = mediaVideoItem1.getAllEffects(); 360 assertEquals("Effect List Size", 3, effectList.size()); 361 assertEquals("Effect negative", effectNegative, effectList.get(0)); 362 assertEquals("Effect Green", effectGreen, effectList.get(1)); 363 assertEquals("Effect Fifties", effectFifties, effectList.get(2)); 364 365 mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_4_3); 366 assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_4_3, 367 mVideoEditor.getAspectRatio()); 368 369 final long storyboardDuration = mVideoEditor.getDuration() ; 370 validatePreviewProgress(0, (int)(storyboardDuration/2), false, (storyboardDuration/2)); 371 372 assertEquals("Removing Effect : Negative", effectNegative, 373 mediaVideoItem1.removeEffect(effectNegative.getId())); 374 375 effectList = mediaVideoItem1.getAllEffects(); 376 377 assertEquals("Effect List Size", 2, effectList.size()); 378 assertEquals("Effect Green", effectGreen, effectList.get(0)); 379 assertEquals("Effect Fifties", effectFifties, effectList.get(1)); 380 381 validatePreviewProgress(0, -1, false, mVideoEditor.getDuration()); 382 } 383 384 /** 385 *To test Preview : Preview of current Transitions applied (with multiple 386 * generatePreview) 387 */ 388 // TODO : remove TC_PRV_004 389 @LargeTest 390 public void testPreviewWithTransition() throws Exception { 391 392 final String videoItemFileName1 = INPUT_FILE_PATH + 393 "H263_profile0_176x144_10fps_96kbps_0_25.3gp"; 394 final String imageItemFileName1 = INPUT_FILE_PATH + 395 "IMG_1600x1200.jpg"; 396 final String videoItemFileName2 = INPUT_FILE_PATH + 397 "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4"; 398 final String maskFilename = INPUT_FILE_PATH + 399 "TransitionSpiral_QVGA.jpg"; 400 previewStart = false; 401 previewStop = false; 402 403 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 404 405 final MediaVideoItem mediaVideoItem1 = 406 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 407 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 408 mediaVideoItem1.setExtractBoundaries(0, 10000); 409 mVideoEditor.addMediaItem(mediaVideoItem1); 410 411 final MediaImageItem mediaImageItem1 = 412 mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", 413 imageItemFileName1, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER); 414 mVideoEditor.addMediaItem(mediaImageItem1); 415 416 final MediaVideoItem mediaVideoItem2 = 417 mVideoEditorHelper.createMediaItem(mVideoEditor, "m3", 418 videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER); 419 mediaVideoItem2.setExtractBoundaries(0, 10000); 420 mVideoEditor.addMediaItem(mediaVideoItem2); 421 422 final TransitionCrossfade transition1And2CrossFade = 423 mVideoEditorHelper.createTCrossFade("transition_1_2_CF", 424 mediaVideoItem1, mediaImageItem1, 2000, 425 Transition.BEHAVIOR_MIDDLE_FAST); 426 mVideoEditor.addTransition(transition1And2CrossFade); 427 428 final TransitionAlpha transition2And3Alpha = 429 mVideoEditorHelper.createTAlpha("transition_2_3", mediaImageItem1, 430 mediaVideoItem2, 4000, Transition.BEHAVIOR_SPEED_UP, 431 maskFilename, 50, true); 432 mVideoEditor.addTransition(transition2And3Alpha); 433 434 final TransitionFadeBlack transition1FadeBlack = 435 mVideoEditorHelper.createTFadeBlack("transition_1FB", null, 436 mediaVideoItem1, 2000, Transition.BEHAVIOR_MIDDLE_FAST); 437 mVideoEditor.addTransition(transition1FadeBlack); 438 439 List<Transition> transitionList = mVideoEditor.getAllTransitions(); 440 assertEquals("Transition List Size", 3, transitionList.size()); 441 assertEquals("Transition 1", transition1And2CrossFade, 442 transitionList.get(0)); 443 assertEquals("Transition 2", transition2And3Alpha, transitionList.get(1)); 444 assertEquals("Transition 3", transition1FadeBlack, transitionList.get(2)); 445 446 mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_3_2); 447 448 final int[] progressValues = new int[300]; 449 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 450 int i = 0; 451 452 public void onProgress(Object item, int action, int progress) { 453 if (item instanceof TransitionCrossfade) { 454 progressValues[i] = progress; 455 assertEquals("Object", item, transition1And2CrossFade); 456 assertEquals("Action", action, 457 MediaProcessingProgressListener.ACTION_ENCODE); 458 } else if (item instanceof TransitionAlpha) { 459 progressValues[i] = progress; 460 assertEquals("Object", item, transition2And3Alpha); 461 assertEquals("Action", action, 462 MediaProcessingProgressListener.ACTION_ENCODE); 463 } else if (item instanceof TransitionFadeBlack) { 464 progressValues[i] = progress; 465 assertEquals("Object", item, transition1FadeBlack); 466 assertEquals("Action", action, 467 MediaProcessingProgressListener.ACTION_ENCODE); 468 } 469 i++; 470 } 471 }); 472 473 mVideoEditorHelper.checkProgressCBValues(progressValues); 474 final SurfaceHolder surfaceHolder = 475 MediaFrameworkTest.mSurfaceView.getHolder(); 476 /* As transition takes more time buffer of 10 sec is added */ 477 long waitingTime = minWaitingTime + 10000 + 10000; 478 479 blockTillPreviewCompletes.acquire(); 480 try { 481 mVideoEditor.startPreview(surfaceHolder, 0, 10000, false, 1, 482 new PreviewProgressListener() { 483 public void onProgress(VideoEditor videoEditor, long timeMs, 484 OverlayData overlayData) { 485 } 486 public void onStart(VideoEditor videoEditor) { 487 setPreviewStart(); 488 } 489 public void onStop(VideoEditor videoEditor) { 490 setPreviewStop(); 491 blockTillPreviewCompletes.release(); 492 } 493 }); 494 } catch (Exception e) { 495 blockTillPreviewCompletes.release(); 496 } 497 blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS); 498 mVideoEditor.stopPreview(); 499 blockTillPreviewCompletes.release(); 500 assertTrue("Preview Failed to start", previewStart); 501 assertTrue("Preview Failed to stop", previewStop); 502 503 assertEquals("Removing Transition " + transition1And2CrossFade.getId(), 504 transition1And2CrossFade, 505 mVideoEditor.removeTransition(transition1And2CrossFade.getId())); 506 transitionList = mVideoEditor.getAllTransitions(); 507 assertEquals("Transition List Size", 2, transitionList.size()); 508 assertEquals("Transition 1", transition2And3Alpha, transitionList.get(0)); 509 assertEquals("Transition 2", transition1FadeBlack, transitionList.get(1)); 510 511 validatePreviewProgress(0, -1, false, mVideoEditor.getDuration()); 512 513 514 final TransitionSliding transition1And2Sliding = 515 mVideoEditorHelper.createTSliding("transition_1_2Sliding", 516 mediaVideoItem1, mediaImageItem1, 4000, 517 Transition.BEHAVIOR_MIDDLE_FAST, 518 TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN); 519 mVideoEditor.addTransition(transition1And2Sliding); 520 521 transitionList = mVideoEditor.getAllTransitions(); 522 assertEquals("Transition List Size", 3, transitionList.size()); 523 assertEquals("Transition 1", transition2And3Alpha, transitionList.get(0)); 524 assertEquals("Transition 2", transition1FadeBlack, transitionList.get(1)); 525 assertEquals("Transition 3", transition1And2Sliding, 526 transitionList.get(2)); 527 528 validatePreviewProgress(5000, -1, false, (mVideoEditor.getDuration())); 529 530 } 531 532 /** 533 * To test Preview : Preview of current Overlay applied 534 */ 535 // TODO : remove TC_PRV_005 536 @LargeTest 537 public void testPreviewWithOverlay() throws Exception { 538 final String videoItemFileName = INPUT_FILE_PATH 539 + "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp"; 540 final String overlayFilename1 = INPUT_FILE_PATH + 541 "IMG_640x480_Overlay1.png"; 542 final String overlayFilename2 = INPUT_FILE_PATH + 543 "IMG_640x480_Overlay2.png"; 544 final int previewFrom = 5000; 545 final int previewTo = 10000; 546 final boolean previewLoop = false; 547 final int previewCallbackFrameCount = 1; 548 final int setAspectRatio = MediaProperties.ASPECT_RATIO_4_3; 549 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 550 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 551 previewStart = false; 552 previewStop = false; 553 boolean flagForException = false; 554 final MediaVideoItem mediaVideoItem = 555 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 556 videoItemFileName, renderingMode); 557 mVideoEditor.addMediaItem(mediaVideoItem); 558 mediaVideoItem.setExtractBoundaries(0, 10000); 559 560 final Bitmap mBitmap1 = mVideoEditorHelper.getBitmap(overlayFilename1, 561 640, 480); 562 final OverlayFrame overlayOnMvi1 = 563 mVideoEditorHelper.createOverlay(mediaVideoItem, "OverlayOnMvi1", 564 mBitmap1, 0, 5000); 565 mediaVideoItem.addOverlay(overlayOnMvi1); 566 567 final Bitmap mBitmap2 = mVideoEditorHelper.getBitmap(overlayFilename2, 568 640, 480); 569 final OverlayFrame overlayOnMvi2 = 570 mVideoEditorHelper.createOverlay(mediaVideoItem, "OverlayOnMvi2", 571 mBitmap2, 5000, 9000); 572 mediaVideoItem.addOverlay(overlayOnMvi2); 573 574 List<Overlay> overlayList = mediaVideoItem.getAllOverlays(); 575 assertEquals("Overlay Size", 2, overlayList.size()); 576 assertEquals("Overlay 1", overlayOnMvi1, overlayList.get(0)); 577 assertEquals("Overlay 2", overlayOnMvi2, overlayList.get(1)); 578 579 mVideoEditor.setAspectRatio(setAspectRatio); 580 581 validatePreviewProgress(0 /* previewFrom */, -1, previewLoop, 582 mVideoEditor.getDuration()); 583 } 584 585 /** 586 * To test Preview : Preview of current Trim applied (with default aspect 587 * ratio) 588 */ 589 // TODO : remove TC_PRV_006 590 @LargeTest 591 public void testPreviewWithTrim() throws Exception { 592 final String videoItemFileName = INPUT_FILE_PATH + 593 "H264_BP_640x480_30fps_192kbps_1_5.mp4"; 594 final MediaVideoItem mediaVideoItem = 595 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 596 videoItemFileName, MediaItem.RENDERING_MODE_CROPPING); 597 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 598 boolean flagForException = false; 599 previewStart = false; 600 previewStop = false; 601 mediaVideoItem.setExtractBoundaries(mediaVideoItem.getDuration() / 2, 602 mediaVideoItem.getDuration()); 603 mVideoEditor.addMediaItem(mediaVideoItem); 604 605 validatePreviewProgress(1000, -1, false, mVideoEditor.getDuration()); 606 } 607 608 /** 609 * To test Preview : Preview of current work having Overlay and Effect 610 * applied 611 */ 612 613 // TODO : remove TC_PRV_007 614 @LargeTest 615 public void testPreviewWithOverlayEffectKenBurn() throws Exception { 616 617 final String videoItemFileName = INPUT_FILE_PATH + 618 "H264_BP_640x480_30fps_192kbps_1_5.mp4"; 619 final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg"; 620 final String videoItemFileName1 = INPUT_FILE_PATH + 621 "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4"; 622 final String overlayFilename = INPUT_FILE_PATH + 623 "IMG_640x480_Overlay1.png"; 624 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 625 previewStart = false; 626 previewStop = false; 627 final MediaVideoItem mediaVideoItem1 = 628 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 629 videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER); 630 mVideoEditor.addMediaItem(mediaVideoItem1); 631 632 final MediaImageItem mediaImageItem2 = 633 mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", 634 imageItemFileName, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER); 635 mVideoEditor.addMediaItem(mediaImageItem2); 636 637 final MediaVideoItem mediaVideoItem3 = 638 mVideoEditorHelper.createMediaItem(mVideoEditor, "m3", 639 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 640 mVideoEditor.addMediaItem(mediaVideoItem3); 641 642 final EffectColor effectColor = 643 mVideoEditorHelper.createEffectItem(mediaVideoItem1, "Effect1", 644 1000, 3000, EffectColor.TYPE_COLOR, EffectColor.GREEN); 645 mediaVideoItem1.addEffect(effectColor); 646 647 final Rect startRect = new Rect((mediaImageItem2.getHeight() / 3), 648 (mediaImageItem2.getWidth() / 3), (mediaImageItem2.getHeight() / 2), 649 (mediaImageItem2.getWidth() / 2)); 650 final Rect endRect = new Rect(0, 0, mediaImageItem2.getWidth(), 651 mediaImageItem2.getHeight()); 652 653 final EffectKenBurns kbeffectOnMI2 = new EffectKenBurns(mediaImageItem2, 654 "KBOnM2", startRect, endRect, 0, 10000); 655 assertNotNull("EffectKenBurns", kbeffectOnMI2); 656 mediaImageItem2.addEffect(kbeffectOnMI2); 657 658 final Bitmap mBitmap = mVideoEditorHelper.getBitmap(overlayFilename, 659 640, 480); 660 final OverlayFrame overlayFrame = 661 mVideoEditorHelper.createOverlay(mediaVideoItem3, "OverlayID", 662 mBitmap, (mediaImageItem2.getDuration() / 4), 663 (mediaVideoItem3.getDuration() / 3)); 664 mediaVideoItem3.addOverlay(overlayFrame); 665 666 validatePreviewProgress(5000, -1, false, mVideoEditor.getDuration()); 667 } 668 669 /** 670 *To test Preview : Export during preview 671 */ 672 // TODO : remove TC_PRV_008 673 @LargeTest 674 public void testPreviewDuringExport() throws Exception { 675 final String videoItemFileName = INPUT_FILE_PATH + 676 "H264_BP_640x480_30fps_192kbps_1_5.mp4"; 677 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 678 previewStart = false; 679 previewStop = false; 680 681 final MediaVideoItem mediaVideoItem1 = 682 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 683 videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER); 684 mediaVideoItem1.setExtractBoundaries(0, 20000); 685 mVideoEditor.addMediaItem(mediaVideoItem1); 686 687 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 688 public void onProgress(Object item, int action, int progress) { 689 } 690 }); 691 692 long waitingTime = minWaitingTime + mVideoEditor.getDuration(); 693 694 695 blockTillPreviewCompletes.acquire(); 696 final String fileName = mVideoEditor.getPath() + "\test.3gp"; 697 final int height = MediaProperties.HEIGHT_480; 698 final int bitrate = MediaProperties.BITRATE_512K; 699 700 try { 701 mVideoEditor.export(fileName, height, bitrate, 702 new ExportProgressListener() { 703 public void onProgress(VideoEditor ve, 704 String outFileName,int progress) { 705 706 } 707 }); 708 } catch (IOException e) { 709 assertTrue("UnExpected Error in Export" + 710 e.toString(), false); 711 } 712 713 final SurfaceHolder surfaceHolder = 714 MediaFrameworkTest.mSurfaceView.getHolder(); 715 try { 716 717 mVideoEditor.startPreview(surfaceHolder, 5000, -1, false, 1, 718 new PreviewProgressListener() { 719 720 public void onProgress(VideoEditor videoEditor, long timeMs, 721 OverlayData overlayData) { 722 } 723 public void onStart(VideoEditor videoEditor) { 724 setPreviewStart(); 725 } 726 public void onStop(VideoEditor videoEditor) { 727 setPreviewStop(); 728 blockTillPreviewCompletes.release(); 729 } 730 }); 731 732 } catch (Exception e) { 733 blockTillPreviewCompletes.release(); 734 } 735 blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS); 736 mVideoEditor.stopPreview(); 737 assertTrue("Preview Failed to start", previewStart); 738 assertTrue("Preview Failed to stop", previewStop); 739 blockTillPreviewCompletes.release(); 740 } 741 742 /** 743 * To test Preview : Preview of current Effects applied (with from time > 744 * total duration) 745 */ 746 // TODO : remove TC_PRV_009 747 @LargeTest 748 public void testPreviewWithDurationGreaterThanMediaDuration() 749 throws Exception { 750 final String videoItemFileName = INPUT_FILE_PATH + 751 "H264_BP_640x480_30fps_192kbps_1_5.mp4"; 752 final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER; 753 boolean flagForException = false; 754 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 755 756 final MediaVideoItem mediaVideoItem1 = 757 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 758 videoItemFileName, renderingMode); 759 try { 760 mediaVideoItem1.setExtractBoundaries(0, 20000); 761 } catch (Exception e) { 762 assertTrue("Exception during setExtract Boundaries", false); 763 } 764 mVideoEditor.addMediaItem(mediaVideoItem1); 765 final SurfaceHolder surfaceHolder = 766 MediaFrameworkTest.mSurfaceView.getHolder(); 767 long waitingTime = minWaitingTime + (mVideoEditor.getDuration() - 30000); 768 if(waitingTime < 0) 769 { 770 waitingTime = minWaitingTime; 771 } 772 773 blockTillPreviewCompletes.acquire(); 774 try { 775 mVideoEditor.startPreview(surfaceHolder, 30000, -1, true, 1, 776 new PreviewProgressListener() { 777 public void onProgress(VideoEditor videoEditor, long timeMs, 778 OverlayData overlayData) { 779 } 780 public void onStart(VideoEditor videoEditor) { 781 setPreviewStart(); 782 } 783 public void onStop(VideoEditor videoEditor) { 784 setPreviewStop(); 785 blockTillPreviewCompletes.release(); 786 } 787 }); 788 789 } catch (IllegalArgumentException e) { 790 blockTillPreviewCompletes.release(); 791 flagForException = true; 792 } 793 blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS); 794 assertTrue("Expected Error in Preview", flagForException); 795 mVideoEditor.stopPreview(); 796 blockTillPreviewCompletes.release(); 797 } 798 799 /** 800 * To test Preview : Preview of current Effects applied (with Render Preview 801 * Frame) 802 */ 803 // TODO : remove TC_PRV_010 804 @LargeTest 805 public void testPreviewWithRenderPreviewFrame() throws Exception { 806 final String videoItemFileName = INPUT_FILE_PATH + 807 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 808 final Semaphore blockTillPreviewCompletes = new Semaphore(1); 809 boolean flagForException = false; 810 OverlayData overlayData1 = new OverlayData(); 811 previewStart = false; 812 previewStop = false; 813 814 final String overlayFilename1 = INPUT_FILE_PATH + 815 "IMG_640x480_Overlay1.png"; 816 817 final MediaVideoItem mediaVideoItem = 818 mVideoEditorHelper.createMediaItem(mVideoEditor, 819 "m1", videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER); 820 mVideoEditor.addMediaItem(mediaVideoItem); 821 822 final EffectColor effectPink = 823 mVideoEditorHelper.createEffectItem(mediaVideoItem, 824 "effectNegativeOnMvi", 1000, 3000, EffectColor.TYPE_COLOR, 825 EffectColor.PINK); 826 mediaVideoItem.addEffect(effectPink); 827 828 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 829 public void onProgress(Object item, int action, int progress) { 830 } 831 }); 832 final SurfaceHolder surfaceHolder = 833 MediaFrameworkTest.mSurfaceView.getHolder(); 834 835 assertEquals("Render preview Frame at 5 Sec", 5000, 836 mVideoEditor.renderPreviewFrame(surfaceHolder, 5000, 837 overlayData1)); 838 839 assertEquals("Render preview Frame at 7 Sec", 7000, 840 mVideoEditor.renderPreviewFrame(surfaceHolder, 7000, 841 overlayData1)); 842 843 validatePreviewProgress(5000, -1, false, mVideoEditor.getDuration()); 844 } 845 846 /** 847 * To test Preview : Preview of current work from selected jump location 848 * till end with Audio Track 849 */ 850 // TODO : remove TC_PRV_011 851 @LargeTest 852 public void testPreviewWithEndAudioTrack() throws Exception { 853 final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg"; 854 final String videoItemFileName = INPUT_FILE_PATH + 855 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 856 final String imageItemFilename2 = INPUT_FILE_PATH + "IMG_640x480.jpg"; 857 final String audioFilename = INPUT_FILE_PATH + 858 "AMRNB_8KHz_12.2Kbps_m_1_17.3gp"; 859 860 boolean flagForException = false; 861 previewStart = false; 862 previewStop = false; 863 final MediaImageItem mediaImageItem1 = 864 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 865 imageItemFilename1, 7000, MediaItem.RENDERING_MODE_BLACK_BORDER); 866 mVideoEditor.addMediaItem(mediaImageItem1); 867 868 final MediaVideoItem mediaVideoItem = 869 mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", 870 videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER); 871 mediaVideoItem.setExtractBoundaries(1000, 8000); 872 mVideoEditor.addMediaItem(mediaVideoItem); 873 874 final MediaImageItem mediaImageItem2 = 875 mVideoEditorHelper.createMediaItem(mVideoEditor, "m3", 876 imageItemFilename2, 7000, MediaItem.RENDERING_MODE_BLACK_BORDER); 877 mVideoEditor.addMediaItem(mediaImageItem2); 878 879 final AudioTrack audioTrack = 880 mVideoEditorHelper.createAudio(mVideoEditor, "a1", audioFilename); 881 mVideoEditor.addAudioTrack(audioTrack); 882 883 List<AudioTrack> audioList = mVideoEditor.getAllAudioTracks(); 884 assertEquals("Audio Track List size", 1, audioList.size()); 885 assertEquals("Audio Track", audioTrack, audioList.get(0)); 886 mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_4_3); 887 888 validatePreviewProgress(10000, -1, false, mVideoEditor.getDuration()); 889 } 890 891 /** 892 * To test render Preview Frame 893 */ 894 // TODO : remove TC_PRV_012 895 @LargeTest 896 public void testRenderPreviewFrame() throws Exception { 897 final String videoItemFileName1 = INPUT_FILE_PATH 898 + "H264_BP_1080x720_30fps_800kbps_1_17.mp4"; 899 final String videoItemFileName2 = INPUT_FILE_PATH 900 + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4"; 901 final String videoItemFileName3 = INPUT_FILE_PATH 902 + "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 903 final String imageItemFilename1 = INPUT_FILE_PATH 904 + "IMG_1600x1200.jpg"; 905 final String imageItemFilename2 = INPUT_FILE_PATH 906 + "IMG_176x144.jpg"; 907 final String audioFilename = INPUT_FILE_PATH 908 + "AMRNB_8KHz_12.2Kbps_m_1_17.3gp"; 909 OverlayData overlayData1 = new OverlayData(); 910 previewStart = false; 911 previewStop = false; 912 final MediaVideoItem mediaVideoItem1 = 913 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 914 videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER); 915 mediaVideoItem1.setExtractBoundaries(0, 10000); 916 mVideoEditor.addMediaItem(mediaVideoItem1); 917 918 final MediaVideoItem mediaVideoItem2 = 919 mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", 920 videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER); 921 mediaVideoItem1.setExtractBoundaries(mediaVideoItem2.getDuration() / 4, 922 mediaVideoItem2.getDuration() / 2); 923 mVideoEditor.addMediaItem(mediaVideoItem2); 924 925 final MediaVideoItem mediaVideoItem3 = 926 mVideoEditorHelper.createMediaItem(mVideoEditor, "m3", 927 videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER); 928 mediaVideoItem1.setExtractBoundaries(mediaVideoItem2.getDuration() / 2, 929 mediaVideoItem2.getDuration()); 930 mVideoEditor.addMediaItem(mediaVideoItem3); 931 932 final MediaImageItem mediaImageItem4 = 933 mVideoEditorHelper.createMediaItem(mVideoEditor, "m4", 934 imageItemFilename1, 5000, MediaItem.RENDERING_MODE_BLACK_BORDER); 935 936 final MediaImageItem mediaImageItem5 = 937 mVideoEditorHelper.createMediaItem(mVideoEditor, "m5", 938 imageItemFilename2, 5000, MediaItem.RENDERING_MODE_BLACK_BORDER); 939 940 List<MediaItem> mediaList = mVideoEditor.getAllMediaItems(); 941 assertEquals("Media Item List Size", 3, mediaList.size()); 942 943 mVideoEditor.insertMediaItem(mediaImageItem4, mediaVideoItem2.getId()); 944 mediaList = mVideoEditor.getAllMediaItems(); 945 assertEquals("Media Item List Size", 4, mediaList.size()); 946 assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0)); 947 assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1)); 948 assertEquals("Media item 4", mediaImageItem4, mediaList.get(2)); 949 assertEquals("Media item 3", mediaVideoItem3, mediaList.get(3)); 950 951 mVideoEditor.insertMediaItem(mediaImageItem5, mediaImageItem4.getId()); 952 mediaList = mVideoEditor.getAllMediaItems(); 953 assertEquals("Media Item List Size", 5, mediaList.size()); 954 assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0)); 955 assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1)); 956 assertEquals("Media item 4", mediaImageItem4, mediaList.get(2)); 957 assertEquals("Media item 5", mediaImageItem5, mediaList.get(3)); 958 assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4)); 959 960 mVideoEditor.moveMediaItem(mediaVideoItem1.getId(), 961 mediaImageItem5.getId()); 962 mediaList = mVideoEditor.getAllMediaItems(); 963 assertEquals("Media Item List Size", 5, mediaList.size()); 964 assertEquals("Media item 2", mediaVideoItem2, mediaList.get(0)); 965 assertEquals("Media item 4", mediaImageItem4, mediaList.get(1)); 966 assertEquals("Media item 5", mediaImageItem5, mediaList.get(2)); 967 assertEquals("Media item 1", mediaVideoItem1, mediaList.get(3)); 968 assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4)); 969 970 final TransitionCrossfade transition2And4CrossFade = 971 mVideoEditorHelper.createTCrossFade("transition2And4CrossFade", 972 mediaVideoItem2, mediaImageItem4, 2000, 973 Transition.BEHAVIOR_MIDDLE_FAST); 974 mVideoEditor.addTransition(transition2And4CrossFade); 975 976 final TransitionCrossfade transition1And3CrossFade = 977 mVideoEditorHelper.createTCrossFade("transition1And3CrossFade", 978 mediaVideoItem1, mediaVideoItem3, 5000, 979 Transition.BEHAVIOR_MIDDLE_FAST); 980 mVideoEditor.addTransition(transition1And3CrossFade); 981 982 final AudioTrack audioTrack = 983 mVideoEditorHelper.createAudio(mVideoEditor, "a1", audioFilename); 984 audioTrack.setExtractBoundaries(0, 2000); 985 mVideoEditor.addAudioTrack(audioTrack); 986 987 audioTrack.enableLoop(); 988 989 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 990 public void onProgress(Object item, int action, int progress) { 991 } 992 }); 993 994 final SurfaceHolder surfaceHolder = 995 MediaFrameworkTest.mSurfaceView.getHolder(); 996 997 mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration()/4, overlayData1); 998 Thread.sleep(1000); 999 mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration()/2, overlayData1); 1000 Thread.sleep(1000); 1001 mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration(), overlayData1); 1002 1003 } 1004 1005 /** 1006 * To Test Preview : Without any Media Items in the story Board 1007 */ 1008 // TODO : remove TC_PRV_013 1009 @LargeTest 1010 public void testStartPreviewWithoutMediaItems() throws Exception { 1011 boolean flagForException = false; 1012 1013 final SurfaceHolder surfaceHolder = 1014 MediaFrameworkTest.mSurfaceView.getHolder(); 1015 try{ 1016 mVideoEditor.startPreview(surfaceHolder, 0, -1, false, 1, 1017 new PreviewProgressListener() { 1018 public void onProgress(VideoEditor videoEditor, long timeMs, 1019 OverlayData overlayData) { 1020 } 1021 public void onStart(VideoEditor videoEditor) { 1022 setPreviewStart(); 1023 } 1024 public void onStop(VideoEditor videoEditor) { 1025 setPreviewStop(); 1026 } 1027 }); 1028 }catch (IllegalArgumentException e) { 1029 flagForException = true; 1030 } 1031 assertTrue("Preview without Media Items", flagForException); 1032 } 1033 1034 /** 1035 * To Test Preview : Add Media and Remove Media Item (Without any Media 1036 * Items in the story Board) 1037 */ 1038 // TODO : remove TC_PRV_014 1039 @LargeTest 1040 public void testStartPreviewAddRemoveMediaItems() throws Exception { 1041 final String videoItemFilename1 = INPUT_FILE_PATH 1042 + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp"; 1043 final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg"; 1044 final String alphaFilename = INPUT_FILE_PATH + 1045 "TransitionSpiral_QVGA.jpg"; 1046 boolean flagForException = false; 1047 1048 final MediaVideoItem mediaVideoItem = 1049 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", 1050 videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER); 1051 mediaVideoItem.setExtractBoundaries(0, 15000); 1052 mVideoEditor.addMediaItem(mediaVideoItem); 1053 1054 final MediaImageItem mediaImageItem = 1055 mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", 1056 imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER); 1057 mVideoEditor.addMediaItem(mediaImageItem); 1058 1059 final TransitionAlpha transition1And2 = 1060 mVideoEditorHelper.createTAlpha("transition", mediaVideoItem, 1061 mediaImageItem, 3000, Transition.BEHAVIOR_SPEED_UP, 1062 alphaFilename, 10, false); 1063 mVideoEditor.addTransition(transition1And2); 1064 1065 final EffectColor effectColor = 1066 mVideoEditorHelper.createEffectItem(mediaImageItem, "effect", 5000, 1067 3000, EffectColor.TYPE_COLOR, EffectColor.PINK); 1068 mediaImageItem.addEffect(effectColor); 1069 1070 assertEquals("removing Media item 1", mediaVideoItem, 1071 mVideoEditor.removeMediaItem(mediaVideoItem.getId())); 1072 assertEquals("removing Media item 2", mediaImageItem, 1073 mVideoEditor.removeMediaItem(mediaImageItem.getId())); 1074 1075 try{ 1076 mVideoEditor.generatePreview(new MediaProcessingProgressListener() { 1077 public void onProgress(Object item, int action, int progress) { 1078 } 1079 }); 1080 final SurfaceHolder surfaceHolder = 1081 MediaFrameworkTest.mSurfaceView.getHolder(); 1082 mVideoEditor.startPreview(surfaceHolder, 0, -1, false, 1, 1083 new PreviewProgressListener() { 1084 public void onProgress(VideoEditor videoEditor, long timeMs, 1085 OverlayData overlayData) { 1086 } 1087 public void onStart(VideoEditor videoEditor) { 1088 setPreviewStart(); 1089 } 1090 public void onStop(VideoEditor videoEditor) { 1091 setPreviewStop(); 1092 } 1093 }); 1094 }catch (IllegalArgumentException e) { 1095 flagForException = true; 1096 } 1097 assertTrue("Preview with removed Media Items", flagForException); 1098 1099 } 1100 1101 /** 1102 * To test Preview : Preview of current Effects applied (with Render Preview 1103 * Frame) 1104 */ 1105 // TODO : remove TC_PRV_015 1106 @LargeTest 1107 public void testPreviewWithRenderPreviewFrameWithoutGenerate() throws Exception { 1108 final String videoItemFileName = INPUT_FILE_PATH + 1109 "H264_BP_640x480_30fps_256kbps_1_17.mp4"; 1110 boolean flagForException = false; 1111 long duration = 0; 1112 OverlayData overlayData1 = new OverlayData(); 1113 1114 final MediaVideoItem mediaVideoItem = 1115 mVideoEditorHelper.createMediaItem(mVideoEditor, 1116 "m1", videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER); 1117 mVideoEditor.addMediaItem(mediaVideoItem); 1118 1119 final SurfaceHolder surfaceHolder = 1120 MediaFrameworkTest.mSurfaceView.getHolder(); 1121 duration = mVideoEditor.getDuration(); 1122 /* RenderPreviewFrame returns -1 to indicate last frame */ 1123 try { 1124 mVideoEditor.renderPreviewFrame(surfaceHolder, duration, 1125 overlayData1); 1126 } catch ( IllegalStateException e) { 1127 flagForException = true; 1128 } 1129 assertTrue (" Render Preview Frame without generate", flagForException); 1130 duration = mVideoEditor.getDuration() + 1000; 1131 try { 1132 mVideoEditor.renderPreviewFrame(surfaceHolder, duration, 1133 overlayData1); 1134 } catch ( IllegalArgumentException e) { 1135 flagForException = true; 1136 } 1137 assertTrue (" Preview time greater than duration", flagForException); 1138 } 1139} 1140