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