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