Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b523c51d authored by Neelkamal Semwal's avatar Neelkamal Semwal Committed by Snehal N Bhamare
Browse files

Benchmark: Add JNI test for Decoder and Encoder

Test: adb shell am instrument -w -r  -e debug false -e class \
      'com.android.media.benchmark.tests.EncoderTest#testNativeEncoder' \
      com.android.media.benchmark/androidx.test.runner.AndroidJUnitRunner

Test: adb shell am instrument -w -r  -e debug false -e class\
      'com.android.media.benchmark.tests.DecoderTest#testNativeDecoder' \
      com.android.media.benchmark/androidx.test.runner.AndroidJUnitRunner

Bug: 140051680

Change-Id: I60582652e2e8b488ef87962add59ccd84fbb0094
parent 801a252a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -29,6 +29,10 @@ android_test {
        "android.test.base",
    ],

    jni_libs: [
        "libmediabenchmark_jni",
    ],

    static_libs: [
        "libMediaBenchmark",
        "junit",
+13 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ android {
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.android.media.benchmark"
        minSdkVersion 21
        minSdkVersion 28
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
@@ -48,6 +48,18 @@ android {
            manifest.srcFile 'AndroidManifest.xml'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
}

repositories {
+31 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.media.benchmark.R;
import com.android.media.benchmark.library.CodecUtils;
import com.android.media.benchmark.library.Decoder;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;

import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,6 +45,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import static org.junit.Assert.assertTrue;

@RunWith(Parameterized.class)
public class DecoderTest {
    private static final Context mContext =
@@ -194,4 +197,32 @@ public class DecoderTest {
                            + mInputFilePath);
        }
    }

    @Test
    public void testNativeDecoder() throws IOException {
        File inputFile = new File(mInputFilePath + mInputFile);
        assertTrue("Cannot find " + mInputFile + " in directory " + mInputFilePath,
                inputFile.exists());
        int status = -1;
        FileInputStream fileInput = new FileInputStream(inputFile);
        FileDescriptor fileDescriptor = fileInput.getFD();
        Extractor extractor = new Extractor();
        int trackCount = extractor.setUpExtractor(fileDescriptor);
        assertTrue("Extraction failed. No tracks for file: ", trackCount > 0);
        for (int currentTrack = 0; currentTrack < trackCount; currentTrack++) {
            extractor.selectExtractorTrack(currentTrack);
            MediaFormat format = extractor.getFormat(currentTrack);
            String mime = format.getString(MediaFormat.KEY_MIME);
            ArrayList<String> mediaCodecs = CodecUtils.selectCodecs(mime, false);
            for (String codecName : mediaCodecs) {
                Log.i("Test: %s\n", mInputFile);
                Native nativeDecoder = new Native();
                status = nativeDecoder.Decode(mInputFilePath, mInputFile, codecName, mAsyncMode);
                assertTrue(
                        codecName + " decoder returned error " + status + " for file:" + mInputFile,
                        status == 0);
            }
        }
        fileInput.close();
    }
}
+42 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.media.benchmark.library.CodecUtils;
import com.android.media.benchmark.library.Decoder;
import com.android.media.benchmark.library.Encoder;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;

import org.junit.Test;
import org.junit.runner.RunWith;
@@ -43,6 +44,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import static org.junit.Assert.assertTrue;

@RunWith(Parameterized.class)
public class EncoderTest {
    private static final Context mContext =
@@ -85,19 +88,16 @@ public class EncoderTest {
    public void sampleEncoderTest() throws Exception {
        int status;
        int frameSize;

        //Parameters for video
        int width = 0;
        int height = 0;
        int profile = 0;
        int level = 0;
        int frameRate = 0;

        //Parameters for audio
        int bitRate = 0;
        int sampleRate = 0;
        int numChannels = 0;

        File inputFile = new File(mInputFilePath + mInputFile);
        if (inputFile.exists()) {
            FileInputStream fileInput = new FileInputStream(inputFile);
@@ -129,7 +129,6 @@ public class EncoderTest {
                                bufInfo.presentationTimeUs + " size = " + bufInfo.size);
                    }
                } while (sampleSize > 0);

                int tid = android.os.Process.myTid();
                File decodedFile = new File(mContext.getFilesDir() + "/decoder_" + tid + ".out");
                FileOutputStream decodeOutputStream = new FileOutputStream(decodedFile);
@@ -269,4 +268,43 @@ public class EncoderTest {
                    mInputFilePath);
        }
    }

    @Test
    public void testNativeEncoder() throws Exception {
        File inputFile = new File(mInputFilePath + mInputFile);
        assertTrue("Cannot find " + mInputFile + " in directory " + mInputFilePath,
                inputFile.exists());
        int status = -1;
        int tid = android.os.Process.myTid();
        final String mDecodedFile = mContext.getFilesDir() + "/decoder_" + tid + ".out";
        FileInputStream fileInput = new FileInputStream(inputFile);
        FileDescriptor fileDescriptor = fileInput.getFD();
        Extractor extractor = new Extractor();
        int trackCount = extractor.setUpExtractor(fileDescriptor);
        assertTrue("Extraction failed. No tracks for file: ", trackCount > 0);
        for (int currentTrack = 0; currentTrack < trackCount; currentTrack++) {
            extractor.selectExtractorTrack(currentTrack);
            MediaFormat format = extractor.getFormat(currentTrack);
            String mime = format.getString(MediaFormat.KEY_MIME);
            ArrayList<String> mediaCodecs = CodecUtils.selectCodecs(mime, true);
            // Encoding the decoder's output
            for (String codecName : mediaCodecs) {
                Native nativeEncoder = new Native();
                status = nativeEncoder.Encode(mInputFilePath, mInputFile, mDecodedFile, codecName);
                assertTrue(
                        codecName + " encoder returned error " + status + " for file:" + mInputFile,
                        status == 0);
            }
        }
        File decodedFile = new File(mDecodedFile);
        // Cleanup temporary input file
        if (decodedFile.exists()) {
            if (decodedFile.delete()) {
                Log.i(TAG, "Successfully deleted - " + mDecodedFile);
            } else {
                Log.e(TAG, "Unable to delete - " + mDecodedFile);
            }
        }
        fileInput.close();
    }
}
+33 −0
Original line number Diff line number Diff line
cc_test_library {
    name: "libmediabenchmark_jni",

    defaults: [
        "libmediabenchmark_common-defaults",
        "libmediabenchmark_soft_sanitize_all-defaults",
    ],

    srcs: [
        "NativeEncoder.cpp",
        "NativeDecoder.cpp",
    ],

    shared_libs: [
        "liblog",
    ],

    sdk_version: "current",

    static_libs: [
        "libmediabenchmark_common",
        "libmediabenchmark_extractor",
        "libmediabenchmark_decoder",
        "libmediabenchmark_encoder",
    ],

    stl: "c++_static",

    cflags: [
        "-Wall",
        "-Werror",
    ],
}
Loading