Home | History | Annotate | Download | only in videoeditor
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 package com.android.mediaframeworktest.functional.videoeditor;
     19 
     20 import java.io.File;
     21 import java.io.IOException;
     22 
     23 import android.graphics.Bitmap;
     24 import android.media.videoeditor.MediaImageItem;
     25 import android.media.videoeditor.MediaItem;
     26 import android.media.videoeditor.MediaVideoItem;
     27 import android.media.videoeditor.VideoEditor;
     28 import android.os.Environment;
     29 import android.test.ActivityInstrumentationTestCase;
     30 import android.test.suitebuilder.annotation.LargeTest;
     31 import com.android.mediaframeworktest.MediaFrameworkTest;
     32 import com.android.mediaframeworktest.VideoEditorHelper;
     33 
     34 public class MediaItemThumbnailTest extends
     35     ActivityInstrumentationTestCase<MediaFrameworkTest> {
     36     private final String TAG = "MediaItemThumbailTest";
     37 
     38     private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
     39 
     40     private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
     41 
     42     private VideoEditor mVideoEditor;
     43 
     44     private VideoEditorHelper mVideoEditorHelper;
     45 
     46     public MediaItemThumbnailTest() {
     47         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
     48     }
     49 
     50     @Override
     51     protected void setUp() throws Exception {
     52         // setup for each test case.
     53         super.setUp();
     54         mVideoEditorHelper = new VideoEditorHelper();
     55         // Create a random String which will be used as project path, where all
     56         // project related files will be stored.
     57         final String projectPath = mVideoEditorHelper.
     58             createRandomFile(PROJECT_LOCATION);
     59         mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
     60     }
     61 
     62     @Override
     63     protected void tearDown() throws Exception {
     64         mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
     65         // Clean the directory created as project path
     66         mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
     67         System.gc();
     68         super.tearDown();
     69     }
     70 
     71     protected void validateThumbnail(Bitmap thumbNailBmp, int outWidth,
     72         int outHeight) throws Exception {
     73         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
     74         assertEquals("Thumbnail Height", outHeight, thumbNailBmp.getHeight());
     75         assertEquals("Thumbnail Width", outWidth, thumbNailBmp.getWidth());
     76         thumbNailBmp.recycle();
     77     }
     78 
     79     // -----------------------------------------------------------------
     80     // THUMBNAIL
     81     // -----------------------------------------------------------------
     82     /**
     83      * To test thumbnail / frame extraction on H.263 QCIF.
     84      */
     85     // TODO : TC_TN_001
     86     @LargeTest
     87     public void testThumbnailForH263QCIF() throws Exception {
     88         final String videoItemFilename = INPUT_FILE_PATH
     89             + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
     90         final int atTime = 0;
     91         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
     92         final MediaVideoItem mediaVideoItem =
     93             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
     94                 videoItemFilename, renderingMode);
     95 
     96         final int outWidth = (mediaVideoItem.getWidth() / 2);
     97         final int outHeight = mediaVideoItem.getHeight();
     98 
     99         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    100             outHeight, atTime);
    101         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    102     }
    103 
    104     /**
    105      * To test thumbnail / frame extraction on MPEG4 VGA .
    106      */
    107     // TODO : TC_TN_002
    108     @LargeTest
    109     public void testThumbnailForMPEG4VGA() throws Exception {
    110         final String videoItemFilename = INPUT_FILE_PATH +
    111             "MPEG4_SP_640x480_30fps_512Kbps_0_23.3gp";
    112         final int atTime = 0;
    113         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    114         final MediaVideoItem mediaVideoItem =
    115             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    116                 videoItemFilename, renderingMode);
    117         final int outWidth = (mediaVideoItem.getWidth() / 2);
    118         final int outHeight = mediaVideoItem.getHeight();
    119         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    120             outHeight, atTime);
    121         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    122     }
    123 
    124     /**
    125      * To test thumbnail / frame extraction on MPEG4 NTSC.
    126      */
    127     // TODO : TC_TN_003
    128     @LargeTest
    129     public void testThumbnailForMPEG4NTSC() throws Exception {
    130         final String videoItemFilename = INPUT_FILE_PATH
    131             + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
    132         final int atTime = 0;
    133         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    134         final MediaVideoItem mediaVideoItem =
    135             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    136                 videoItemFilename, renderingMode);
    137         final int outWidth = mediaVideoItem.getWidth() / 2;
    138         final int outHeight = mediaVideoItem.getHeight() / 2;
    139         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    140             outHeight, atTime);
    141         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    142     }
    143 
    144     /**
    145      * To test thumbnail / frame extraction on MPEG4 WVGA.
    146      */
    147     // TODO : TC_TN_004
    148     @LargeTest
    149     public void testThumbnailForMPEG4WVGA() throws Exception {
    150 
    151         final String videoItemFilename = INPUT_FILE_PATH
    152             + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
    153         final int atTime = 0;
    154         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    155         final MediaVideoItem mediaVideoItem =
    156             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    157                 videoItemFilename, renderingMode);
    158         final int outWidth = mediaVideoItem.getWidth() * 2;
    159         final int outHeight = mediaVideoItem.getHeight();
    160         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    161             outHeight, atTime);
    162         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    163     }
    164 
    165     /**
    166      * To test thumbnail / frame extraction on MPEG4 QCIF.
    167      */
    168     // TODO : TC_TN_005
    169     @LargeTest
    170     public void testThumbnailForMPEG4QCIF() throws Exception {
    171         final String videoItemFilename = INPUT_FILE_PATH
    172             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    173         final int atTime = 0;
    174         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    175 
    176         final MediaVideoItem mediaVideoItem =
    177             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    178                 videoItemFilename, renderingMode);
    179         final int outWidth = mediaVideoItem.getWidth();
    180         final int outHeight = mediaVideoItem.getHeight() * 2;
    181         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    182             outHeight, atTime);
    183         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    184     }
    185 
    186     /**
    187      * To test thumbnail / frame extraction on H264 QCIF.
    188      */
    189     // TODO : TC_TN_006
    190     @LargeTest
    191     public void testThumbnailForH264QCIF() throws Exception {
    192         final String videoItemFilename = INPUT_FILE_PATH
    193             + "H264_BP_176x144_15fps_144kbps_AMRNB_8kHz_12.2kbps_m_1_17.3gp";
    194 
    195         final int atTime = 0;
    196         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    197         final MediaVideoItem mediaVideoItem =
    198             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    199                 videoItemFilename, renderingMode);
    200         final int outWidth = mediaVideoItem.getWidth() * 2;
    201         final int outHeight = mediaVideoItem.getHeight() * 2;
    202         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    203             outHeight, atTime);
    204         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    205     }
    206 
    207     /**
    208      * To test thumbnail / frame extraction on H264 VGA.
    209      */
    210     // TODO : TC_TN_007
    211     @LargeTest
    212     public void testThumbnailForH264VGA() throws Exception {
    213         final String videoItemFilename = INPUT_FILE_PATH +
    214             "H264_BP_640x480_30fps_192kbps_1_5.mp4";
    215         final int outWidth = 32;
    216         final int outHeight = 32;
    217         final int atTime = 0;
    218 
    219         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    220         final MediaVideoItem mediaVideoItem =
    221             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    222                 videoItemFilename, renderingMode);
    223 
    224         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    225             outHeight, atTime);
    226         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    227     }
    228     /**
    229      * To test thumbnail / frame extraction on H264 WVGA.
    230      */
    231     // TODO : TC_TN_008
    232     @LargeTest
    233     public void testThumbnailForH264WVGA() throws Exception {
    234         final String videoItemFilename = INPUT_FILE_PATH +
    235             "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
    236         final int outWidth = 64;
    237         final int outHeight = 64;
    238         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    239         final MediaVideoItem mediaVideoItem =
    240             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    241                 videoItemFilename, renderingMode);
    242         final long atTime = mediaVideoItem.getDuration() / 2;
    243         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    244             outHeight, atTime);
    245         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    246     }
    247 
    248     /**
    249      * To test thumbnail / frame extraction on H264 854x480.
    250      */
    251     // TODO : TC_TN_009
    252     @LargeTest
    253     public void testThumbnailForH264854_480() throws Exception {
    254         final String videoItemFilename = INPUT_FILE_PATH
    255             + "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4";
    256         final int outWidth = 128;
    257         final int outHeight = 128;
    258         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    259         MediaVideoItem mediaVideoItem = null;
    260         mediaVideoItem =
    261             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    262                 videoItemFilename, renderingMode);
    263         final long atTime = mediaVideoItem.getDuration() - 1000;
    264         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    265             outHeight, atTime);
    266         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    267     }
    268 
    269     /**
    270      * To test thumbnail / frame extraction on H264 960x720.
    271      */
    272     // TODO : TC_TN_010
    273     @LargeTest
    274     public void testThumbnailForH264HD960() throws Exception {
    275         final String videoItemFilename = INPUT_FILE_PATH +
    276             "H264_BP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4";
    277         final int outWidth = 75;
    278         final int outHeight = 75;
    279 
    280         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    281         final MediaVideoItem mediaVideoItem =
    282             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    283                 videoItemFilename, renderingMode);
    284         final long atTime = mediaVideoItem.getDuration() - 1000;
    285         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    286             outHeight, atTime);
    287         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    288     }
    289 
    290     /**
    291      * To test thumbnail / frame extraction on H264 1080x720 .
    292      */
    293     // TODO : TC_TN_011
    294     @LargeTest
    295     public void testThumbnailForH264HD1080() throws Exception {
    296         final String videoItemFilename = INPUT_FILE_PATH +
    297             "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
    298         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    299         final MediaVideoItem mediaVideoItem =
    300             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    301                 videoItemFilename, renderingMode);
    302         final int outWidth = mediaVideoItem.getWidth() / 2;
    303         final int outHeight = mediaVideoItem.getHeight() / 2;
    304         final long atTime = mediaVideoItem.getDuration() / 4;
    305         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    306             outHeight, atTime);
    307         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    308     }
    309 
    310     /**
    311      * Check the thumbnail / frame extraction precision at 0,100 and 200 ms
    312      */
    313     // TODO : TC_TN_012
    314     @LargeTest
    315     public void testThumbnailForH264VGADifferentDuration() throws Exception {
    316         final String videoItemFilename = INPUT_FILE_PATH +
    317             "H264_BP_640x480_30fps_256kbps_1_17.mp4";
    318         final int atTime = 0;
    319         final int atTime1 = 100;
    320         final int atTime2 = 200;
    321         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    322 
    323         final MediaVideoItem mediaVideoItem =
    324             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    325                 videoItemFilename, renderingMode);
    326         final int outWidth = mediaVideoItem.getWidth();
    327         final int outHeight = mediaVideoItem.getHeight();
    328 
    329         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    330             outHeight, atTime);
    331         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    332 
    333         // get Thumbnail @ 100ms
    334         final Bitmap thumbNailBmpAt100 =
    335             mediaVideoItem.getThumbnail(outWidth, outHeight, atTime1);
    336         validateThumbnail(thumbNailBmpAt100, outWidth, outHeight);
    337 
    338         // get Thumbnail @ 200ms
    339         final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail(
    340             outWidth, outHeight, atTime2);
    341         validateThumbnail(thumbNailBmpAt200, outWidth, outHeight);
    342     }
    343 
    344     /**
    345      *Check the thumbnail / frame extraction precision at
    346      * FileDuration,FileDuration/2 + 100 andFileDuration/2 + 200 ms
    347      */
    348     // TODO : TC_TN_013
    349     @LargeTest
    350     public void testThumbnailForMP4VGA() throws Exception {
    351         final String videoItemFilename = INPUT_FILE_PATH +
    352             "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
    353         final MediaVideoItem mediaVideoItem =
    354             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    355                 videoItemFilename, MediaItem.RENDERING_MODE_BLACK_BORDER);
    356 
    357         final int outWidth = mediaVideoItem.getWidth();
    358         final int outHeight = mediaVideoItem.getHeight();
    359         final long atTime = mediaVideoItem.getDuration() / 2;
    360         final long atTime1 = atTime + 100;
    361         final long atTime2 = atTime + 200;
    362 
    363         // get Thumbnail @ duration/2
    364         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    365             outHeight, atTime);
    366         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    367 
    368         // get Thumbnail @ duration/2 + 100ms
    369         final Bitmap thumbNailBmpAt100 = mediaVideoItem.getThumbnail(
    370             outWidth, outHeight, atTime1);
    371         validateThumbnail(thumbNailBmpAt100, outWidth, outHeight);
    372 
    373         // get Thumbnail @ duration/2 + 200ms
    374         final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail(
    375             outWidth, outHeight, atTime2);
    376         validateThumbnail(thumbNailBmpAt200, outWidth, outHeight);
    377     }
    378 
    379     /**
    380      * Check the thumbnail / frame extraction on JPEG file
    381      */
    382     // TODO : TC_TN_014
    383     @LargeTest
    384     public void testThumbnailForImage() throws Exception {
    385         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
    386         final int mediaDuration = 1000;
    387         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    388         boolean flagForException = false;
    389         int outWidth = 0;
    390         int outHeight = 0;
    391 
    392         final MediaImageItem mii = mVideoEditorHelper.createMediaItem(
    393             mVideoEditor, "m1", imageItemFilename, mediaDuration, renderingMode);
    394         assertNotNull("Media Image Item is Null",  mii);
    395         outWidth =  mii.getWidth() / 2;
    396         outHeight =  mii.getHeight() / 2;
    397 
    398         final Bitmap thumbNailBmp = mii.getThumbnail(outWidth,
    399             outHeight, mediaDuration);
    400         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    401     }
    402     /**
    403      *To test ThumbnailList for H263 QCIF
    404      */
    405     // TODO : TC_TN_015
    406     @LargeTest
    407     public void testThumbnailListH263QCIF() throws Exception {
    408         final String videoItemFilename = INPUT_FILE_PATH
    409             + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
    410         final int startTime = 0;
    411         final int tnCount = 10;
    412         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    413         final MediaVideoItem mediaVideoItem =
    414             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    415                 videoItemFilename, renderingMode);
    416 
    417         final int outWidth = mediaVideoItem.getWidth() / 4;
    418         final int outHeight = mediaVideoItem.getHeight() / 4;
    419         final long endTime = mediaVideoItem.getDuration() / 2;
    420 
    421         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
    422             outWidth, outHeight, startTime, endTime, tnCount);
    423         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    424         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    425 
    426         for (int i = 0; i < thumbNailBmp.length; i++) {
    427             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    428             thumbNailBmp[i] = null;
    429         }
    430     }
    431 
    432     /**
    433      *To test ThumbnailList for MPEG4 QCIF
    434      */
    435     // TODO : TC_TN_016
    436     @LargeTest
    437     public void testThumbnailListMPEG4QCIF() throws Exception {
    438         final String videoItemFilename = INPUT_FILE_PATH
    439             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    440         final int tnCount = 10;
    441         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    442 
    443         final MediaVideoItem mediaVideoItem =
    444             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    445                 videoItemFilename, renderingMode);
    446 
    447         final int outWidth = mediaVideoItem.getWidth() / 2;
    448         final int outHeight = mediaVideoItem.getHeight() / 2;
    449         final long startTime = mediaVideoItem.getDuration() / 2;
    450         final long endTime = mediaVideoItem.getDuration();
    451 
    452         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
    453             outWidth, outHeight, startTime, endTime, tnCount);
    454 
    455         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    456         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    457         for (int i = 0; i < thumbNailBmp.length; i++) {
    458             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    459             thumbNailBmp[i] = null;
    460         }
    461     }
    462 
    463     /**
    464      *To test ThumbnailList for H264 VGA
    465      */
    466     // TODO : TC_TN_017
    467     @LargeTest
    468     public void testThumbnailListH264VGA() throws Exception {
    469         final String videoItemFilename = INPUT_FILE_PATH +
    470             "H264_BP_640x480_30fps_256kbps_1_17.mp4";
    471         final int tnCount = 10;
    472         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    473         final MediaVideoItem mediaVideoItem =
    474             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    475                 videoItemFilename, renderingMode);
    476 
    477         final int outWidth = mediaVideoItem.getWidth() / 2;
    478         final int outHeight = mediaVideoItem.getHeight() / 2;
    479         final long startTime = mediaVideoItem.getDuration() / 3;
    480         final long endTime = mediaVideoItem.getDuration() / 2;
    481 
    482         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
    483             outWidth, outHeight, startTime, endTime, tnCount);
    484         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    485         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    486         for (int i = 0; i < thumbNailBmp.length; i++) {
    487             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    488             thumbNailBmp[i] = null;
    489         }
    490     }
    491 
    492     /**
    493      *To test ThumbnailList for H264 WVGA
    494      */
    495     // TODO : TC_TN_018
    496     @LargeTest
    497     public void testThumbnailListH264WVGA() throws Exception {
    498         final String videoItemFilename = INPUT_FILE_PATH +
    499             "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
    500         final int tnCount = 10;
    501         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    502         final MediaVideoItem mediaVideoItem =
    503             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    504                 videoItemFilename, renderingMode);
    505 
    506         final int outWidth = mediaVideoItem.getWidth() / 2;
    507         final int outHeight = mediaVideoItem.getHeight() / 2;
    508         final long startTime = mediaVideoItem.getDuration() / 3;
    509         final long endTime = mediaVideoItem.getDuration() / 2;
    510 
    511         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
    512             outWidth, outHeight, startTime, endTime, tnCount);
    513         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    514         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    515         for (int i = 0; i < thumbNailBmp.length; i++) {
    516             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    517             thumbNailBmp[i] = null;
    518         }
    519     }
    520 
    521     /**
    522      *To test ThumbnailList for H264 VGA ,Time exceeding file duration
    523      */
    524     // TODO : TC_TN_019
    525     @LargeTest
    526     public void testThumbnailH264VGAExceedingFileDuration() throws Exception {
    527         final String videoItemFilename = INPUT_FILE_PATH +
    528             "H264_BP_640x480_30fps_256kbps_1_17.mp4";
    529         boolean flagForException = false;
    530         int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    531 
    532         try {
    533             final MediaVideoItem mediaVideoItem =
    534                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    535                     videoItemFilename, renderingMode);
    536             final int outWidth = mediaVideoItem.getWidth() / 2;
    537             final int outHeight = mediaVideoItem.getHeight() / 2;
    538             final long atTime = mediaVideoItem.getDuration() + 2000;
    539             mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
    540         } catch (IllegalArgumentException e) {
    541             flagForException = true;
    542         }
    543         assertTrue("Exception in Extracting thumbanil with Invalid Time",
    544             flagForException);
    545     }
    546 
    547     /**
    548      *To test ThumbnailList for VGA Image
    549      */
    550     // TODO : TC_TN_020
    551     @LargeTest
    552     public void testThumbnailListVGAImage() throws Exception {
    553         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
    554         final int imageItemDuration = 10000;
    555         final int startTime = 0;
    556         final int endTime = 0;
    557         final int tnCount = 10;
    558         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    559 
    560         final MediaImageItem mediaImageItem =
    561             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    562                 imageItemFilename, imageItemDuration, renderingMode);
    563         final int outWidth = mediaImageItem.getWidth() / 2;
    564         final int outHeight = mediaImageItem.getHeight() / 2;
    565 
    566         final Bitmap thumbNailBmp[] = mediaImageItem.getThumbnailList
    567             (outWidth, outHeight, startTime, endTime, tnCount);
    568         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    569         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    570         for (int i = 0; i < thumbNailBmp.length; i++) {
    571             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    572             thumbNailBmp[i] = null;
    573         }
    574     }
    575 
    576     /**
    577      *To test ThumbnailList for Invalid file path
    578      */
    579     // TODO : TC_TN_021
    580     @LargeTest
    581     public void testThumbnailForInvalidFilePath() throws Exception {
    582         final String imageItemFileName = INPUT_FILE_PATH + "/sdcard/abc.jpg";
    583         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    584         boolean flagForException = false;
    585         try{
    586         final MediaImageItem mii = new MediaImageItem(mVideoEditor, "m1",
    587             imageItemFileName, 3000, renderingMode);
    588         } catch (IllegalArgumentException e) {
    589             flagForException = true;
    590         } catch (IOException e) {
    591             flagForException = true;
    592         }
    593         assertTrue(" Invalid File Path", flagForException);
    594     }
    595 
    596     /**
    597      * To test thumbnail / frame extraction with setBoundaries
    598      */
    599     // TODO : TC_TN_022
    600     @LargeTest
    601     public void testThumbnailForMPEG4WVGAWithSetBoundaries() throws Exception {
    602         final String videoItemFilename = INPUT_FILE_PATH +
    603             "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
    604         final int atTime = 10000;
    605         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    606         final MediaVideoItem mediaVideoItem =
    607             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    608                 videoItemFilename, renderingMode);
    609 
    610         mediaVideoItem.setExtractBoundaries(1000,
    611             (mediaVideoItem.getDuration() - 21000));
    612 
    613         final int outWidth = (mediaVideoItem.getWidth() / 2);
    614         final int outHeight = (mediaVideoItem.getHeight() / 2);
    615         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
    616             outHeight, atTime);
    617         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    618     }
    619 
    620     /**
    621      *To test ThumbnailList for H264 WVGA with setExtractboundaries
    622      */
    623     // TODO : TC_TN_023
    624     @LargeTest
    625     public void testThumbnailListForH264WVGAWithSetBoundaries() throws Exception {
    626         final String videoItemFilename = INPUT_FILE_PATH +
    627             "H264_BP_800x480_15fps_512kbps_1_17.mp4";
    628         final int thumbNailStartTime = 10000;
    629         final int thumbNailEndTime = 12000;
    630         final int tnCount = 10;
    631         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    632         final MediaVideoItem mediaVideoItem =
    633             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    634                 videoItemFilename, renderingMode);
    635 
    636         final int outWidth = (mediaVideoItem.getWidth() / 2);
    637         final int outHeight = (mediaVideoItem.getHeight() / 2);
    638 
    639         mediaVideoItem.setExtractBoundaries(10000, 12000);
    640 
    641         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList
    642             (outWidth, outHeight, thumbNailStartTime, thumbNailEndTime,
    643              tnCount);
    644         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    645         assertTrue("Thumbnail Size", (thumbNailBmp.length > 0) ? true : false);
    646         for (int i = 0; i < thumbNailBmp.length; i++) {
    647             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    648             thumbNailBmp[i] = null;
    649         }
    650     }
    651 
    652     /**
    653      *To test ThumbnailList for H264 WVGA with count > frame available
    654      */
    655     // TODO : TC_TN_024
    656     @LargeTest
    657     public void testThumbnailListForH264WVGAWithCount() throws Exception {
    658         final String videoItemFilename = INPUT_FILE_PATH +
    659             "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
    660         final int tnCount = 70;
    661         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    662         final MediaVideoItem mediaVideoItem =
    663             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    664                 videoItemFilename, renderingMode);
    665 
    666         final int outWidth = (mediaVideoItem.getWidth() / 2);
    667         final int outHeight = (mediaVideoItem.getHeight() / 2);
    668         final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
    669         final long thumbNailEndTime = thumbNailStartTime + 4000;
    670         Bitmap thumbNailBmp[] = null;
    671         boolean flagForException = false;
    672         try{
    673             thumbNailBmp = mediaVideoItem.getThumbnailList(outWidth, outHeight,
    674                 thumbNailStartTime, thumbNailEndTime, tnCount);
    675         }catch (Exception e){
    676             assertTrue("Unable to get Thumbnail list", flagForException);
    677         }
    678         if (thumbNailBmp.length <= tnCount) {
    679             flagForException = true;
    680         }
    681         assertTrue("Thumbnail count more than asked", flagForException);
    682     }
    683 
    684     /**
    685      *To test ThumbnailList for H264 WVGA with startTime > End Time
    686      */
    687     // TODO : TC_TN_025
    688     @LargeTest
    689     public void testThumbnailListH264WVGAWithStartGreaterEnd() throws Exception {
    690         final String videoItemFilename = INPUT_FILE_PATH +
    691             "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
    692         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    693         final int tnCount = 10;
    694         boolean flagForException = false;
    695         final MediaVideoItem mediaVideoItem =
    696             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    697                 videoItemFilename, renderingMode);
    698         final int outWidth = (mediaVideoItem.getWidth() / 2);
    699         final int outHeight = (mediaVideoItem.getHeight() / 2);
    700         final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
    701         final long thumbNailEndTime = thumbNailStartTime - 1000;
    702         try{
    703             mediaVideoItem.getThumbnailList(outWidth, outHeight,
    704                 thumbNailStartTime, thumbNailEndTime, tnCount);
    705         } catch (IllegalArgumentException e) {
    706             flagForException = true;
    707         }
    708         assertTrue("Thumbnail Extraction where start time > end time",
    709             flagForException);
    710     }
    711 
    712     /**
    713      *To test ThumbnailList TC_TN_026 for H264 WVGA with startTime = End Time
    714      */
    715     // TODO : TC_TN_026
    716     @LargeTest
    717     public void testThumbnailListH264WVGAWithStartEqualEnd() throws Exception {
    718         final String videoItemFilename = INPUT_FILE_PATH +
    719             "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
    720         final int tnCount = 1;
    721         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    722 
    723         final MediaVideoItem mediaVideoItem =
    724             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    725                 videoItemFilename, renderingMode);
    726         final int outWidth = (mediaVideoItem.getWidth() / 2);
    727         final int outHeight = (mediaVideoItem.getHeight() / 2);
    728         final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
    729         final long thumbNailEndTime = thumbNailStartTime;
    730         final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(outWidth,
    731             outHeight, thumbNailStartTime, thumbNailEndTime, tnCount);
    732         assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
    733         assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
    734         for (int i = 0; i < thumbNailBmp.length; i++) {
    735             validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
    736             thumbNailBmp[i] = null;
    737         }
    738     }
    739 
    740     /**
    741      *To test ThumbnailList TC_TN_027 for file where video duration is less
    742      * than file duration.
    743      */
    744     // TODO : TC_TN_027
    745     @LargeTest
    746     public void testThumbnailForVideoDurationLessFileDuration() throws Exception {
    747         final String videoItemFilename = INPUT_FILE_PATH
    748             + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
    749         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    750             final MediaVideoItem mediaVideoItem =
    751                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    752                     videoItemFilename, renderingMode);
    753             final int outWidth = (mediaVideoItem.getWidth() / 2);
    754             final int outHeight = (mediaVideoItem.getHeight() / 2);
    755             final long atTime = mediaVideoItem.getDuration() - 2000;
    756             final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
    757                 outHeight, atTime);
    758         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    759 
    760     }
    761 
    762     /**
    763      *To test ThumbnailList TC_TN_028 for file which has video part corrupted
    764      */
    765     // TODO : TC_TN_028
    766     @LargeTest
    767     public void testThumbnailWithCorruptedVideoPart() throws Exception {
    768         final String videoItemFilename = INPUT_FILE_PATH +
    769             "corrupted_H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
    770         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    771         boolean flagForException = false;
    772 
    773         try {
    774             final MediaVideoItem mediaVideoItem =
    775                  mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    776                     videoItemFilename, renderingMode);
    777             final int outWidth = mediaVideoItem.getWidth();
    778             final int outHeight = mediaVideoItem.getHeight() * 2;
    779             final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail
    780                 (outWidth, outHeight, mediaVideoItem.getDuration()/2);
    781         } catch (IllegalArgumentException e) {
    782             flagForException = true;
    783         }
    784         assertTrue("Corrupted File cannot be read", flagForException);
    785     }
    786 
    787     /**
    788      * Check the thumbnail / frame list extraction for Height as Negative Value
    789      */
    790     // TODO : TC_TN_029
    791     @LargeTest
    792     public void testThumbnailWithNegativeHeight() throws Exception {
    793         final String videoItemFilename = INPUT_FILE_PATH
    794             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    795         final int tnCount = 10;
    796         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    797         boolean flagForException = false;
    798         try {
    799             final MediaVideoItem mediaVideoItem =
    800                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    801                     videoItemFilename, renderingMode);
    802             final int outWidth = (mediaVideoItem.getWidth() / 2);
    803             final int outHeight = -1;
    804             final long thumbNailStartTime =
    805                 mediaVideoItem.getBoundaryBeginTime()/2;
    806             final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime();
    807             mediaVideoItem.getThumbnailList(outWidth, outHeight,
    808                 thumbNailStartTime, thumbNailEndTime, tnCount);
    809         } catch (IllegalArgumentException e) {
    810             flagForException = true;
    811         }
    812         assertTrue("Thumbnail List with negative Height", flagForException);
    813     }
    814 
    815     /**
    816      * Check the thumbnail for Height as Zero
    817      */
    818     // TODO : TC_TN_030
    819     @LargeTest
    820     public void testThumbnailWithHeightAsZero() throws Exception {
    821         final String videoItemFilename = INPUT_FILE_PATH
    822             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    823         final int atTime = 100;
    824         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    825         boolean flagForException = false;
    826         try {
    827             final MediaVideoItem mediaVideoItem =
    828                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    829                     videoItemFilename, renderingMode);
    830             final int outWidth = (mediaVideoItem.getWidth() / 2);
    831             final int outHeight = -1;
    832             mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
    833         } catch (IllegalArgumentException e) {
    834             flagForException = true;
    835         }
    836         assertTrue("Thumbnail List with Zero Height", flagForException);
    837     }
    838 
    839     /**
    840      * Check the thumbnail for Height = 10
    841      */
    842     // TODO : TC_TN_031
    843     @LargeTest
    844     public void testThumbnailWithHeight() throws Exception {
    845         final String videoItemFilename = INPUT_FILE_PATH
    846             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    847         final int atTime = 1000;
    848         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    849             final MediaVideoItem mediaVideoItem =
    850                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    851                     videoItemFilename, renderingMode);
    852             final int outWidth = (mediaVideoItem.getWidth() / 2);
    853             final int outHeight = 10;
    854             final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
    855                 outHeight, atTime);
    856         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    857     }
    858 
    859     /**
    860      * Check the thumbnail / frame list extraction for Width as Negative Value
    861      */
    862     // TODO : TC_TN_032
    863     @LargeTest
    864     public void testThumbnailWithNegativeWidth() throws Exception {
    865         final String videoItemFilename = INPUT_FILE_PATH
    866             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    867         final int tnCount = 10;
    868         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    869         boolean flagForException = false;
    870         try {
    871             final MediaVideoItem mediaVideoItem =
    872                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    873                     videoItemFilename, renderingMode);
    874             final int outWidth = -1;
    875             final int outHeight = mediaVideoItem.getHeight();
    876             final long thumbNailStartTime =
    877                 mediaVideoItem.getBoundaryBeginTime()/2;
    878             final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime();
    879             mediaVideoItem.getThumbnailList(outWidth, outHeight, thumbNailStartTime,
    880                 thumbNailEndTime, tnCount);
    881         } catch (IllegalArgumentException e) {
    882             flagForException = true;
    883         }
    884         assertTrue("Thumbnail List with negative Height", flagForException);
    885     }
    886 
    887     /**
    888      * Check the thumbnail / frame list extraction for Width zero
    889      */
    890     // TODO : TC_TN_033
    891     @LargeTest
    892     public void testThumbnailWithWidthAsZero() throws Exception {
    893         final String videoItemFilename = INPUT_FILE_PATH
    894             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    895         final int atTime = 1000;
    896         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    897         boolean flagForException = false;
    898         try {
    899             final MediaVideoItem mediaVideoItem =
    900                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    901                     videoItemFilename, renderingMode);
    902             final int outWidth = 0;
    903             final int outHeight = mediaVideoItem.getHeight() / 2;
    904             mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
    905         } catch (IllegalArgumentException e) {
    906             flagForException = true;
    907         }
    908         assertTrue("Thumbnail List with Zero Width", flagForException);
    909     }
    910 
    911     /**
    912      * Check the thumbnail for Width = 10
    913      */
    914     // TODO : TC_TN_034
    915     @LargeTest
    916     public void testThumbnailWithWidth() throws Exception {
    917         final String videoItemFilename = INPUT_FILE_PATH
    918             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    919         final int atTime = 1000;
    920         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    921         final MediaVideoItem mediaVideoItem =
    922             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    923                 videoItemFilename, renderingMode);
    924         final int outWidth = 10;
    925         final int outHeight = mediaVideoItem.getHeight();
    926         final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
    927             outHeight, atTime);
    928         validateThumbnail(thumbNailBmp, outWidth, outHeight);
    929     }
    930 
    931     /**
    932      * To test thumbnail / frame extraction on MPEG4 (time beyond file duration).
    933      */
    934     // TODO : TC_TN_035
    935     @LargeTest
    936     public void testThumbnailMPEG4withMorethanFileDuration() throws Exception {
    937         final String videoItemFilename = INPUT_FILE_PATH
    938             + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
    939         boolean flagForException = false;
    940         final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
    941         final MediaVideoItem mediaVideoItem =
    942             mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
    943                 videoItemFilename, renderingMode);
    944         final int outWidth =  mediaVideoItem.getWidth()/2;
    945         final int outHeight =  mediaVideoItem.getHeight()/2;
    946         final long atTime = mediaVideoItem.getDuration() + 100;
    947         try{
    948             final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
    949             outHeight, atTime);
    950         } catch (IllegalArgumentException e) {
    951             flagForException = true;
    952         }
    953         assertTrue("Thumbnail duration is more than file duration",
    954             flagForException);
    955     }
    956 }
    957