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