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