VideoEditorStressTest.java revision 2d06aee09507252ba6703ecd2c4f9f356048e6ad
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;
54import com.android.mediaframeworktest.MediaFrameworkPerfTestRunner;
55import com.android.mediaframeworktest.MediaFrameworkTest;
56import android.test.suitebuilder.annotation.LargeTest;
57import com.android.mediaframeworktest.VideoEditorHelper;
58import com.android.mediaframeworktest.MediaTestUtil;
59
60/**
61 * Junit / Instrumentation - performance measurement for media player and
62 * recorder
63 */
64public 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_H264BP;
669        final int videoDuration = 77366;
670        final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
671        final int videoHeight = MediaProperties.HEIGHT_720;
672        final int videoWidth = 1080;
673
674        final int imageAspectRatio = MediaProperties.ASPECT_RATIO_4_3;
675        final int imageFileType = MediaProperties.FILE_JPEG;
676        final int imageWidth = 640;
677        final int imageHeight = MediaProperties.HEIGHT_480;
678
679        final int audioDuration = 77554;
680        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
681        final int audioSamplingFrequency = 44100;
682        final int audioChannel = 2;
683        writeTestCaseHeader("testStressMediaProperties");
684        getBeginMemory();
685        for ( i = 0; i < 50; i++) {
686            if (i % 3 == 0) {
687                final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
688                    "m1" + i, VideoItemFileName1, renderingMode);
689                mVideoEditor.addMediaItem(mediaItem1);
690                mediaItem1.setExtractBoundaries(0, 20000);
691                assertEquals("Aspect Ratio Mismatch",
692                    videoAspectRatio, mediaItem1.getAspectRatio());
693                assertEquals("File Type Mismatch",
694                    videoFileType, mediaItem1.getFileType());
695                assertEquals("VideoCodec Mismatch",
696                    videoCodecType, mediaItem1.getVideoType());
697                assertEquals("duration Mismatch",
698                    videoDuration, mediaItem1.getDuration());
699                assertEquals("Video Profile ",
700                    videoProfile, mediaItem1.getVideoProfile());
701                assertEquals("Video height ",
702                    videoHeight, mediaItem1.getHeight());
703                assertEquals("Video width ",
704                    videoWidth, mediaItem1.getWidth());
705                mVideoEditor.removeMediaItem("m1" + i);
706            }
707            if (i % 3 == 1) {
708                final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
709                    "m2" + i, ImageItemFileName2, 10000, renderingMode);
710                mVideoEditor.addMediaItem(mediaItem2);
711                assertEquals("Aspect Ratio Mismatch",
712                    imageAspectRatio, mediaItem2.getAspectRatio());
713                assertEquals("File Type Mismatch",
714                    imageFileType, mediaItem2.getFileType());
715                assertEquals("Image height",
716                    imageHeight, mediaItem2.getHeight());
717                assertEquals("Image width",
718                    imageWidth, mediaItem2.getWidth());
719                mVideoEditor.removeMediaItem("m2" + i);
720            }
721            if (i % 3 == 2) {
722                final AudioTrack mediaItem3 = new AudioTrack(mVideoEditor,
723                    "m3" + i, AudioItemFileName3);
724                mVideoEditor.addAudioTrack(mediaItem3);
725                assertEquals("AudioType Mismatch", audioCodecType,
726                    mediaItem3.getAudioType());
727                assertEquals("Audio Sampling", audioSamplingFrequency,
728                    mediaItem3.getAudioSamplingFrequency());
729                assertEquals("Audio Channels",
730                    audioChannel, mediaItem3.getAudioChannels());
731                assertEquals("duration Mismatch", audioDuration,
732                    mediaItem3.getDuration());
733                mVideoEditor.removeAudioTrack("m3" + i);
734            }
735            if (i % 10 == 0) {
736                getAfterMemory_updateLog(loggingInfo, false, i);
737            }
738        }
739        getAfterMemory_updateLog(loggingInfo, false, i);
740    }
741
742    /**
743     * To stress test insert and move of mediaitems
744     *
745     * @throws Exception
746     */
747    // TODO : remove TC_STR_008
748    @LargeTest
749    public void testStressInsertMovieItems() throws Exception {
750        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
751        final String VideoItemFileName1 = INPUT_FILE_PATH +
752            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
753        final String VideoItemFileName2 = INPUT_FILE_PATH +
754            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
755        final String VideoItemFileName3 = INPUT_FILE_PATH +
756            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
757        final String[] loggingInfo = new String[1];
758        int i = 0;
759        writeTestCaseHeader("testStressInsertMoveItems");
760
761        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
762            "m1", VideoItemFileName1, renderingMode);
763        mVideoEditor.addMediaItem(mediaItem1);
764        mediaItem1.setExtractBoundaries(0, 10000);
765
766        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
767            "m2", VideoItemFileName2, renderingMode);
768        mVideoEditor.addMediaItem(mediaItem2);
769        mediaItem2.setExtractBoundaries(0, 15000);
770
771        getBeginMemory();
772        for ( i = 0; i < 50; i++) {
773            final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
774                "m3" + i, VideoItemFileName3, renderingMode);
775            mediaItem3.setExtractBoundaries(0, 15000);
776            mVideoEditor.insertMediaItem(mediaItem3, "m1");
777            mVideoEditor.moveMediaItem("m2", "m3" + i);
778            if (i % 10 == 0) {
779                getAfterMemory_updateLog(loggingInfo, false, i);
780            }
781        }
782        getAfterMemory_updateLog(loggingInfo, false, i);
783
784        /** Remove items and check for memory leak if any */
785        for ( i = 0; i < 50; i++) {
786            mVideoEditor.removeMediaItem("m3" + i);
787            if (i % 10 == 0) {
788                getAfterMemory_updateLog(loggingInfo, true, i);
789            }
790        }
791        mVideoEditor.removeMediaItem("m2");
792        mVideoEditor.removeMediaItem("m1");
793        getAfterMemory_updateLog(loggingInfo, true, i);
794    }
795
796    /**
797     * To stress test : load and save
798     *
799     * @throws Exception
800     */
801    // TODO : remove TC_STR_009
802    @LargeTest
803    public void testStressLoadAndSave() throws Exception {
804        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
805        final String VideoItemFileName1 = INPUT_FILE_PATH +
806            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
807        final String VideoItemFileName2 = INPUT_FILE_PATH +
808            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
809        final String VideoItemFileName3 = INPUT_FILE_PATH +
810            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
811        final String ImageItemFileName4 = INPUT_FILE_PATH +
812            "IMG_640x480.jpg";
813        final String ImageItemFileName5 = INPUT_FILE_PATH +
814            "IMG_176x144.jpg";
815        final String OverlayFile6 = INPUT_FILE_PATH +
816            "IMG_640x480_Overlay1.png";
817        final String[] loggingInfo = new String[1];
818        int i = 0;
819        final String[] projectPath = new String[10];
820        writeTestCaseHeader("testStressLoadAndSave");
821        getBeginMemory();
822        for( i=0; i < 10; i++){
823
824            projectPath[i] =
825                mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
826            final VideoEditor mVideoEditor1 =
827                mVideoEditorHelper.createVideoEditor(projectPath[i]);
828
829            final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor1,
830                "m1", VideoItemFileName1, renderingMode);
831            mVideoEditor1.addMediaItem(mediaItem1);
832            mediaItem1.setExtractBoundaries(0, 10000);
833
834            final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor1,
835                "m2", VideoItemFileName2, renderingMode);
836            mVideoEditor1.addMediaItem(mediaItem2);
837            mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4,
838                mediaItem2.getDuration()/2);
839
840            final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor1,
841                "m3", VideoItemFileName3, renderingMode);
842            mVideoEditor1.addMediaItem(mediaItem3);
843            mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2,
844                mediaItem3.getDuration());
845
846            final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor1,
847                "m4", ImageItemFileName4, 5000, renderingMode);
848            mVideoEditor1.addMediaItem(mediaItem4);
849
850            final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor1,
851                "m5", ImageItemFileName5, 5000, renderingMode);
852            mVideoEditor1.addMediaItem(mediaItem5);
853
854            final EffectColor effectColor1 =
855                mVideoEditorHelper.createEffectItem(mediaItem3, "effect1",
856                    10000, 2000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
857            mediaItem3.addEffect(effectColor1);
858
859            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(OverlayFile6,
860                640, 480);
861            final OverlayFrame overlayFrame =
862                mVideoEditorHelper.createOverlay(mediaItem4, "overlay",
863                    mBitmap, 4000, 1000);
864            mediaItem4.addOverlay(overlayFrame);
865
866            final TransitionCrossfade tranCrossfade =
867                new TransitionCrossfade("transCF", mediaItem1,
868                    mediaItem2, 5000, Transition.BEHAVIOR_MIDDLE_FAST);
869            mVideoEditor1.addTransition(tranCrossfade);
870
871            final EffectColor effectColor2 =
872                mVideoEditorHelper.createEffectItem(mediaItem4, "effect2", 0,
873                    mediaItem4.getDuration(), EffectColor.TYPE_COLOR,
874                    EffectColor.PINK);
875            mediaItem4.addEffect(effectColor2);
876
877            mVideoEditor1.generatePreview(new MediaProcessingProgressListener() {
878                public void onProgress(Object item, int action, int progress) {
879                }
880            });
881
882            mVideoEditor1.save();
883            mVideoEditor1.release();
884
885            getAfterMemory_updateLog(loggingInfo, false, i);
886        }
887        getAfterMemory_updateLog(loggingInfo, false, i);
888
889        /** Remove items and check for memory leak if any */
890        for( i=0; i<10; i++){
891            final VideoEditor mVideoEditor1b =
892                VideoEditorFactory.load(projectPath[i], true);
893            List<MediaItem> mediaList = mVideoEditor1b.getAllMediaItems();
894            assertEquals("Media Item List Size", 5, mediaList.size());
895
896            mediaList.get(3).removeEffect("effect1");
897            mediaList.get(3).removeEffect("effect2");
898            mediaList.get(2).removeOverlay("overlay");
899            mVideoEditor1b.removeTransition("transCF");
900            mVideoEditor1b.removeMediaItem("m5");
901            mVideoEditor1b.removeMediaItem("m4");
902            mVideoEditor1b.removeMediaItem("m3");
903            mVideoEditor1b.removeMediaItem("m2");
904            mVideoEditor1b.removeMediaItem("m1");
905            mVideoEditor1b.release();
906            getAfterMemory_updateLog(loggingInfo, true, i);
907        }
908        getAfterMemory_updateLog(loggingInfo, true, i);
909    }
910
911    /**
912     * To stress test : Multiple Export
913     *
914     * @throws Exception
915     */
916    // TODO : remove TC_STR_010
917    @LargeTest
918    public void testStressMultipleExport() throws Exception {
919        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
920        final String VideoItemFileName1 = INPUT_FILE_PATH +
921            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
922        final String VideoItemFileName2 = INPUT_FILE_PATH +
923            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
924        final String[] loggingInfo = new String[1];
925        final String outFilename = mVideoEditorHelper.createRandomFile(
926            mVideoEditor.getPath() + "/") + ".3gp";
927        int i = 0;
928        writeTestCaseHeader("testStressMultipleExport");
929        getBeginMemory();
930        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
931            "m1", VideoItemFileName1, renderingMode);
932        mVideoEditor.addMediaItem(mediaItem1);
933        mediaItem1.setExtractBoundaries(0, 10000);
934
935        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
936            "m2", VideoItemFileName2, renderingMode);
937        mVideoEditor.addMediaItem(mediaItem2);
938        mediaItem2.setExtractBoundaries(0, 15000);
939
940        for ( i = 0; i < 50; i++) {
941            if(i%4 ==0){
942                final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
943                mVideoEditor.setAspectRatio(aspectRatio);
944                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
945                    MediaProperties.BITRATE_256K,MediaProperties.ACODEC_AAC_LC,
946                        MediaProperties.VCODEC_H263,
947                        new ExportProgressListener() {
948                        public void onProgress(VideoEditor ve, String outFileName,
949                            int progress) {
950                        }
951                    });
952            }
953            if(i%4 ==1){
954                final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
955                mVideoEditor.setAspectRatio(aspectRatio);
956                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
957                    MediaProperties.BITRATE_384K,MediaProperties.ACODEC_AAC_LC,
958                        MediaProperties.VCODEC_MPEG4,
959                        new ExportProgressListener() {
960                        public void onProgress(VideoEditor ve, String outFileName,
961                            int progress) {
962                        }
963                    });
964            }
965            if(i%4 ==2){
966                final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
967                mVideoEditor.setAspectRatio(aspectRatio);
968                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
969                    MediaProperties.BITRATE_512K,MediaProperties.ACODEC_AAC_LC,
970                        MediaProperties.VCODEC_H264BP,
971                        new ExportProgressListener() {
972                        public void onProgress(VideoEditor ve, String outFileName,
973                            int progress) {
974                        }
975                    });
976            }
977            if(i%4 ==3){
978                final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
979                mVideoEditor.setAspectRatio(aspectRatio);
980                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
981                    MediaProperties.BITRATE_800K,MediaProperties.ACODEC_AAC_LC,
982                        MediaProperties.VCODEC_H264BP,
983                        new ExportProgressListener() {
984                        public void onProgress(VideoEditor ve, String outFileName,
985                            int progress) {
986                        }
987                    });
988            }
989            if (i % 10 == 0) {
990                getAfterMemory_updateLog(loggingInfo, false, i);
991            }
992        }
993        getAfterMemory_updateLog(loggingInfo, false, i);
994
995        /** Remove items and check for memory leak if any */
996        mVideoEditor.removeMediaItem("m2");
997        mVideoEditor.removeMediaItem("m1");
998
999        getAfterMemory_updateLog(loggingInfo, true, i);
1000    }
1001
1002    /**
1003     * To stress test Media Item,Overlays,Transitions and Ken Burn
1004     *
1005     * @throws Exception
1006     */
1007    // TODO : remove TC_STR_011
1008    @LargeTest
1009    public void testStressOverlayTransKenBurn() throws Exception {
1010        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
1011        final String VideoItemFileName1 = INPUT_FILE_PATH +
1012            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
1013        final String ImageItemFileName2 = INPUT_FILE_PATH +
1014            "IMG_640x480.jpg";
1015        final String OverlayFile3 = INPUT_FILE_PATH +
1016            "IMG_640x480_Overlay1.png";
1017        final String audioFilename4 = INPUT_FILE_PATH +
1018            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
1019        int i = 0;
1020        final String[] loggingInfo = new String[1];
1021        writeTestCaseHeader("testStressOverlayTransKenBurn");
1022        getBeginMemory();
1023        for ( i = 0; i < 10; i++) {
1024            final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
1025                "m1" + i, VideoItemFileName1, renderingMode);
1026            mVideoEditor.addMediaItem(mediaItem1);
1027            mediaItem1.setExtractBoundaries(0, 10000);
1028
1029            final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
1030                "m2" + i, ImageItemFileName2, 10000, renderingMode);
1031            mVideoEditor.addMediaItem(mediaItem2);
1032
1033            final EffectColor effectColor1 =
1034                mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i,
1035                    (mediaItem1.getDuration() - 4000), 4000,
1036                    EffectColor.TYPE_SEPIA, 0);
1037            mediaItem1.addEffect(effectColor1);
1038
1039            final TransitionCrossfade tranCrossfade =
1040                new TransitionCrossfade("transCF" + i, mediaItem1,
1041                    mediaItem2, 4000, Transition.BEHAVIOR_MIDDLE_FAST);
1042            mVideoEditor.addTransition(tranCrossfade);
1043
1044            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(OverlayFile3,
1045                640, 480);
1046            final OverlayFrame overlayFrame =
1047                mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i,
1048                    mBitmap, 1000, 5000);
1049            mediaItem1.addOverlay(overlayFrame);
1050
1051            final Rect startRect = new Rect((mediaItem2.getHeight() / 3),
1052                (mediaItem2.getWidth() / 3), (mediaItem2.getHeight() / 2),
1053                (mediaItem2.getWidth() / 2));
1054            final Rect endRect = new Rect(0, 0, mediaItem2.getWidth(),
1055                mediaItem2.getHeight());
1056
1057            final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
1058                mediaItem2, "KBOnM2" + i, startRect, endRect, 500,
1059                (mediaItem2.getDuration()-500));
1060            mediaItem2.addEffect(kbEffectOnMediaItem);
1061
1062            if(i == 5) {
1063                final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
1064                    "Audio Track1", audioFilename4);
1065                mVideoEditor.addAudioTrack(audioTrack1);
1066            }
1067            getAfterMemory_updateLog(loggingInfo, false, i);
1068        }
1069        getAfterMemory_updateLog(loggingInfo, false, i);
1070
1071        /** Remove items and check for memory leak if any */
1072        for ( i = 0; i < 10; i++) {
1073            MediaImageItem m2 = (MediaImageItem)mVideoEditor.getMediaItem("m2"+i);
1074            MediaVideoItem m1 = (MediaVideoItem)mVideoEditor.getMediaItem("m1"+i);
1075            m2.removeEffect("KBOnM2" + i);
1076            m1.removeOverlay("overlay" + i);
1077            mVideoEditor.removeTransition("transCF" + i);
1078            m1.removeEffect("effect1" + i);
1079            mVideoEditor.removeMediaItem("m2" + i);
1080            mVideoEditor.removeMediaItem("m1" + i);
1081            if(i == 5) {
1082                mVideoEditor.removeAudioTrack("Audio Track1");
1083            }
1084            getAfterMemory_updateLog(loggingInfo, true, i);
1085        }
1086        getAfterMemory_updateLog(loggingInfo, true, i);
1087    }
1088
1089    /**
1090     * To test the performance : With an audio track with Video
1091     *
1092     * @throws Exception
1093     */
1094    // TODO : remove TC_STR_012
1095    @LargeTest
1096    public void testStressAudioTrackVideo() throws Exception {
1097        final String videoItemFileName1 = INPUT_FILE_PATH +
1098            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
1099        final String audioFilename1 = INPUT_FILE_PATH +
1100            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
1101        final String audioFilename2 = INPUT_FILE_PATH +
1102            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
1103        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
1104        final int audioVolume = 50;
1105        final String[] loggingInfo = new String[1];
1106        int i = 1;
1107        writeTestCaseHeader("testStressAudioTrackVideo");
1108        getBeginMemory();
1109        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
1110            "mediaItem1", videoItemFileName1, renderingMode);
1111        mVideoEditor.addMediaItem(mediaVideoItem);
1112
1113        final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
1114            "Audio Track1", audioFilename1);
1115        audioTrack1.disableDucking();
1116        audioTrack1.setVolume(audioVolume);
1117        mVideoEditor.addAudioTrack(audioTrack1);
1118
1119        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
1120            public void onProgress(Object item, int action, int progress) {
1121            }
1122        });
1123
1124        mVideoEditor.removeAudioTrack("Audio Track1");
1125
1126        final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor,
1127            "Audio Track2", audioFilename2);
1128        audioTrack2.enableLoop();
1129
1130        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
1131            public void onProgress(Object item, int action, int progress) {
1132            }
1133        });
1134        getAfterMemory_updateLog(loggingInfo, false, i);
1135
1136        /** Remove items and check for memory leak if any */
1137        mVideoEditor.removeMediaItem("mediaItem1");
1138
1139        getAfterMemory_updateLog(loggingInfo, true, i);
1140    }
1141
1142    /**
1143     * To Test Stress : Story Board creation with out preview or export
1144     *
1145     * @throws Exception
1146     */
1147    // TODO : remove TC_STR_013
1148    @LargeTest
1149    public void testStressStoryBoard() throws Exception {
1150        final String videoItemFileName1 = INPUT_FILE_PATH +
1151            "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_161kbps_s_0_26.mp4";
1152        final String videoItemFileName2 = INPUT_FILE_PATH +
1153            "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4";
1154        final String videoItemFileName3= INPUT_FILE_PATH +
1155            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
1156        final String imageItemFileName4 = INPUT_FILE_PATH +
1157            "IMG_1600x1200.jpg";
1158        final String imageItemFileName5 = INPUT_FILE_PATH +
1159            "IMG_176x144.jpg";
1160        final String audioFilename6 = INPUT_FILE_PATH +
1161            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
1162        final String audioFilename7 = INPUT_FILE_PATH +
1163            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
1164
1165        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
1166        final int audioVolume = 50;
1167        final String[] loggingInfo = new String[1];
1168        int i = 1;
1169
1170        writeTestCaseHeader("testStressStoryBoard");
1171        getBeginMemory();
1172        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
1173            "m1", videoItemFileName1, renderingMode);
1174        mediaItem1.setExtractBoundaries(0, 10000);
1175        mVideoEditor.addMediaItem(mediaItem1);
1176
1177        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
1178            "m2", videoItemFileName2, renderingMode);
1179        mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4,
1180            mediaItem2.getDuration()/2);
1181        mVideoEditor.addMediaItem(mediaItem2);
1182
1183        final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
1184            "m3", videoItemFileName3, renderingMode);
1185        mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2,
1186            mediaItem3.getDuration());
1187        mVideoEditor.addMediaItem(mediaItem3);
1188
1189        final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor,
1190            "m4", imageItemFileName4, 5000, renderingMode);
1191        mVideoEditor.addMediaItem(mediaItem4);
1192
1193        final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor,
1194            "m5", imageItemFileName5, 5000, renderingMode);
1195        mVideoEditor.addMediaItem(mediaItem5);
1196
1197        final TransitionCrossfade tranCrossfade =
1198            new TransitionCrossfade("transCF", mediaItem2, mediaItem3, 2500,
1199                Transition.BEHAVIOR_MIDDLE_FAST);
1200        mVideoEditor.addTransition(tranCrossfade);
1201
1202        final TransitionCrossfade tranCrossfade1 =
1203            new TransitionCrossfade("transCF1", mediaItem3, mediaItem4, 2500,
1204                Transition.BEHAVIOR_MIDDLE_FAST);
1205        mVideoEditor.addTransition(tranCrossfade1);
1206
1207        final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
1208            "Audio Track1", audioFilename6);
1209        mVideoEditor.addAudioTrack(audioTrack1);
1210
1211        mVideoEditor.removeAudioTrack("Audio Track1");
1212        final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor,
1213            "Audio Track2", audioFilename7);
1214        mVideoEditor.addAudioTrack(audioTrack2);
1215        audioTrack2.enableLoop();
1216        getAfterMemory_updateLog(loggingInfo, false, i);
1217
1218        /** Remove items and check for memory leak if any */
1219        getBeginMemory();
1220        mVideoEditor.removeAudioTrack("Audio Track2");
1221        mVideoEditor.removeTransition("transCF");
1222        mVideoEditor.removeTransition("transCF1");
1223        mVideoEditor.removeMediaItem("m5");
1224        mVideoEditor.removeMediaItem("m4");
1225        mVideoEditor.removeMediaItem("m3");
1226        mVideoEditor.removeMediaItem("m2");
1227        mVideoEditor.removeMediaItem("m1");
1228
1229        getAfterMemory_updateLog(loggingInfo, true, i);
1230    }
1231
1232     /**
1233     * To test the performance : With an audio track Only
1234     *
1235     * @throws Exception
1236     */
1237    // TODO : remove TC_STR_014
1238    @LargeTest
1239    public void testStressAudioTrackOnly() throws Exception {
1240
1241        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
1242        final String AudioItemFileName1 = INPUT_FILE_PATH +
1243            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
1244        final String[] loggingInfo = new String[1];
1245        int i = 0;
1246        writeTestCaseHeader("testStressAudioTrackOnly");
1247        getBeginMemory();
1248        for ( i = 0; i < 50; i++) {
1249            final AudioTrack mediaItem1 = new AudioTrack(mVideoEditor,
1250                "m1" + i, AudioItemFileName1);
1251            mVideoEditor.addAudioTrack(mediaItem1);
1252            mediaItem1.enableLoop();
1253            mVideoEditor.removeAudioTrack("m1" + i);
1254            if (i % 10 == 0) {
1255                getAfterMemory_updateLog(loggingInfo, false, i);
1256            }
1257        }
1258        getAfterMemory_updateLog(loggingInfo, false, i);
1259    }
1260
1261    /**
1262     * This method will test thumbnail list extraction in a loop = 200 for Image
1263     * Item
1264     *
1265     * @throws Exception
1266     */
1267    // TODO : remove TC_STR_016  -- New Test Case
1268    @LargeTest
1269    public void testStressThumbnailImageItem() throws Exception {
1270        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
1271        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
1272        final String[] loggingInfo = new String[1];
1273        int i = 0;
1274        final MediaImageItem mediaImageItem = new MediaImageItem(mVideoEditor,
1275            "m1", imageItemFileName, 5000, renderingMode);
1276        writeTestCaseHeader("testStressThumbnailImageItem");
1277        getBeginMemory();
1278        for ( i = 0; i < 50; i++) {
1279            if (i % 4 == 0) {
1280                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
1281                    mediaImageItem.getWidth() / 2 ,
1282                    mediaImageItem.getHeight() / 2, i, 5000, 2);
1283                // Recycle this Bitmap array
1284                for (int i1 = 0; i1 < thumbNails.length; i1++) {
1285                    thumbNails[i1].recycle();
1286                }
1287            }
1288            if (i % 4 == 1) {
1289                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
1290                    mediaImageItem.getWidth() / 2,
1291                    mediaImageItem.getHeight() * 3, i, 5000, 2);
1292                // Recycle this Bitmap array
1293                for (int i1 = 0; i1 < thumbNails.length; i1++) {
1294                    thumbNails[i1].recycle();
1295                }
1296            }
1297            if (i % 4 == 2) {
1298                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
1299                    mediaImageItem.getWidth() * 2,
1300                    mediaImageItem.getHeight() / 3, i, 5000, 2);
1301                // Recycle this Bitmap array
1302                for (int i1 = 0; i1 < thumbNails.length; i1++) {
1303                    thumbNails[i1].recycle();
1304                }
1305            }
1306            if (i % 4 == 3) {
1307                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
1308                    mediaImageItem.getWidth(),
1309                    mediaImageItem.getHeight(), i, 5000, 2);
1310                // Recycle this Bitmap array
1311                for (int i1 = 0; i1 < thumbNails.length; i1++) {
1312                    thumbNails[i1].recycle();
1313                }
1314            }
1315            if (i % 10 == 0) {
1316                getAfterMemory_updateLog(loggingInfo, false, i);
1317            }
1318        }
1319        getAfterMemory_updateLog(loggingInfo, false, i);
1320    }
1321}
1322