• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.media.benchmark.tests;
18 
19 import com.android.media.benchmark.R;
20 import com.android.media.benchmark.library.Extractor;
21 import com.android.media.benchmark.library.Native;
22 import com.android.media.benchmark.library.Stats;
23 
24 import android.content.Context;
25 import android.media.MediaFormat;
26 import android.util.Log;
27 
28 import androidx.test.platform.app.InstrumentationRegistry;
29 
30 import org.junit.BeforeClass;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.junit.runners.Parameterized;
34 
35 import java.io.File;
36 import java.io.FileDescriptor;
37 import java.io.FileInputStream;
38 import java.io.FileOutputStream;
39 import java.io.IOException;
40 import java.util.Arrays;
41 import java.util.Collection;
42 
43 import static org.junit.Assert.assertTrue;
44 import static org.junit.Assert.assertEquals;
45 
46 import static org.junit.Assert.assertTrue;
47 
48 @RunWith(Parameterized.class)
49 public class ExtractorTest {
50     private static Context mContext =
51             InstrumentationRegistry.getInstrumentation().getTargetContext();
52     private static final String mInputFilePath = mContext.getString(R.string.input_file_path);
53     private static final String mStatsFile = mContext.getExternalFilesDir(null) + "/Extractor."
54             + System.currentTimeMillis() + ".csv";
55     private static final String TAG = "ExtractorTest";
56     private String mInputFileName;
57     private int mTrackId;
58 
59     @Parameterized.Parameters
inputFiles()60     public static Collection<Object[]> inputFiles() {
61         return Arrays.asList(new Object[][]{/* Parameters: filename, trackId*/
62                 {"crowd_1920x1080_25fps_6000kbps_mpeg4.mp4", 0},
63                 {"crowd_1920x1080_25fps_6700kbps_h264.ts", 0},
64                 {"crowd_1920x1080_25fps_7300kbps_mpeg2.mp4", 0},
65                 {"crowd_1920x1080_25fps_4000kbps_av1.webm", 0},
66                 {"crowd_1920x1080_25fps_4000kbps_h265.mkv", 0},
67                 {"crowd_1920x1080_25fps_4000kbps_vp8.webm", 0},
68                 {"bbb_44100hz_2ch_128kbps_aac_5mins.mp4", 0},
69                 {"bbb_44100hz_2ch_128kbps_mp3_5mins.mp3", 0},
70                 {"bbb_44100hz_2ch_600kbps_flac_5mins.flac", 0},
71                 {"bbb_8000hz_1ch_8kbps_amrnb_5mins.3gp", 0},
72                 {"bbb_16000hz_1ch_9kbps_amrwb_5mins.3gp", 0},
73                 {"bbb_44100hz_2ch_80kbps_vorbis_5mins.webm", 0},
74                 {"bbb_48000hz_2ch_100kbps_opus_5mins.webm", 0}});
75     }
76 
ExtractorTest(String filename, int track)77     public ExtractorTest(String filename, int track) {
78         this.mInputFileName = filename;
79         this.mTrackId = track;
80     }
81 
82     @BeforeClass
writeStatsHeaderToFile()83     public static void writeStatsHeaderToFile() throws IOException {
84         Stats mStats = new Stats();
85         boolean status = mStats.writeStatsHeader(mStatsFile);
86         assertTrue("Unable to open stats file for writing!", status);
87         Log.d(TAG, "Saving Benchmark results in: " + mStatsFile);
88     }
89 
90     @Test
testExtractor()91     public void testExtractor() throws IOException {
92         File inputFile = new File(mInputFilePath + mInputFileName);
93         assertTrue("Cannot find " + mInputFileName + " in directory " + mInputFilePath,
94                 inputFile.exists());
95         FileInputStream fileInput = new FileInputStream(inputFile);
96         FileDescriptor fileDescriptor = fileInput.getFD();
97         Extractor extractor = new Extractor();
98         extractor.setUpExtractor(fileDescriptor);
99         MediaFormat format = extractor.getFormat(mTrackId);
100         String mime = format.getString(MediaFormat.KEY_MIME);
101         int status = extractor.extractSample(mTrackId);
102         assertEquals("Extraction failed for " + mInputFileName, 0, status);
103         Log.i(TAG, "Extracted " + mInputFileName + " successfully.");
104         extractor.deinitExtractor();
105         extractor.dumpStatistics(mInputFileName, mime, mStatsFile);
106         fileInput.close();
107     }
108 
109     @Test
testNativeExtractor()110     public void testNativeExtractor() throws IOException {
111         Native nativeExtractor = new Native();
112         File inputFile = new File(mInputFilePath + mInputFileName);
113         assertTrue("Cannot find " + mInputFileName + " in directory " + mInputFilePath,
114                 inputFile.exists());
115         FileInputStream fileInput = new FileInputStream(inputFile);
116         int status = nativeExtractor.Extract(mInputFilePath, mInputFileName, mStatsFile);
117         fileInput.close();
118         assertEquals("Extraction failed for " + mInputFileName, 0, status);
119         Log.i(TAG, "Extracted " + mInputFileName + " successfully.");
120     }
121 }
122