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

Commit b1460583 authored by Snehal N Bhamare's avatar Snehal N Bhamare
Browse files

Benchmark: Add JNI test for Extractor and Muxer

Test: adb shell am instrument -w -r -e debug false -e class\
      'com.android.media.benchmark.tests.ExtractorTest#sampleExtractNativeTest' \
      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.MuxerTest#sampleMuxerNativeTest' \
      com.android.media.benchmark/androidx.test.runner.AndroidJUnitRunner

Bug: 140051680

Change-Id: I5c58326f7eef725c12f613b89c75b2987f616a41
parent b523c51d
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.media.benchmark.tests;

import com.android.media.benchmark.R;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;

import android.content.Context;
import android.util.Log;
@@ -89,4 +90,25 @@ public class ExtractorTest {
        }
        assertThat(status, is(equalTo(0)));
    }

    @Test
    public void sampleExtractNativeTest() throws IOException {
        Native nativeExtractor = new Native();
        int status = -1;
        File inputFile = new File(mInputFilePath + mInputFileName);
        if (inputFile.exists()) {
            FileInputStream fileInput = new FileInputStream(inputFile);
            status = nativeExtractor.Extract(mInputFilePath, mInputFileName);
            fileInput.close();
            if (status != 0) {
                Log.e(TAG, "Extraction for " + mInputFileName + " failed.");
            } else {
                Log.i(TAG, "Extracted " + mInputFileName + " successfully.");
            }
        } else {
            Log.e(TAG, "Cannot find " + inputFile + " in directory " +
                    mInputFilePath);
        }
        assertThat(status, is(equalTo(0)));
    }
}
+32 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.media.benchmark.tests;
import com.android.media.benchmark.R;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Muxer;
import com.android.media.benchmark.library.Native;

import androidx.test.platform.app.InstrumentationRegistry;

@@ -149,4 +150,35 @@ public class MuxerTest {
        }
        assertThat(status, is(equalTo(0)));
    }

    @Test
    public void sampleMuxerNativeTest() {
        int status = -1;
        Native nativeMuxer = new Native();
        File inputFile = new File(mInputFilePath + mInputFileName);
        if (inputFile.exists()) {
            int tid = android.os.Process.myTid();
            String mMuxOutputFile = (mContext.getFilesDir() + "/mux_" + tid + ".out");
            status = nativeMuxer.Mux(mInputFilePath, mInputFileName, mMuxOutputFile,
                    mFormat);
            if (status != 0) {
                Log.e(TAG, "Mux for " + mInputFileName + " failed.");
            } else {
                Log.i(TAG, "Muxed " + mInputFileName + " successfully.");
            }
            File muxedFile = new File(mMuxOutputFile);
            // Cleanup temporary output file
            if (muxedFile.exists()) {
                if (muxedFile.delete()) {
                    Log.i(TAG, "Successfully deleted" + mMuxOutputFile + " file.");
                } else {
                    Log.e(TAG, "Unable to delete" + mMuxOutputFile + " file.");
                }
            }
        } else {
            Log.e(TAG, "Cannot find " + inputFile + " in directory " +
                    mInputFilePath);
        }
        assertThat(status, is(equalTo(0)));
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ cc_test_library {
    ],

    srcs: [
        "NativeExtractor.cpp",
        "NativeMuxer.cpp",
        "NativeEncoder.cpp",
        "NativeDecoder.cpp",
    ],
@@ -20,6 +22,7 @@ cc_test_library {
    static_libs: [
        "libmediabenchmark_common",
        "libmediabenchmark_extractor",
        "libmediabenchmark_muxer",
        "libmediabenchmark_decoder",
        "libmediabenchmark_encoder",
    ],
+4 −0
Original line number Diff line number Diff line
@@ -21,17 +21,21 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror")

add_library(
  mediabenchmark_jni SHARED
  NativeExtractor.cpp
  NativeMuxer.cpp
  NativeDecoder.cpp
  NativeEncoder.cpp
  ${native_source_path}/common/BenchmarkCommon.cpp
  ${native_source_path}/common/Stats.cpp
  ${native_source_path}/common/utils/Timers.cpp
  ${native_source_path}/extractor/Extractor.cpp
  ${native_source_path}/muxer/Muxer.cpp
  ${native_source_path}/decoder/Decoder.cpp
  ${native_source_path}/encoder/Encoder.cpp)

include_directories(${native_source_path}/common)
include_directories(${native_source_path}/extractor)
include_directories(${native_source_path}/muxer)
include_directories(${native_source_path}/decoder)
include_directories(${native_source_path}/encoder)

+68 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

//#define LOG_NDEBUG 0
#define LOG_TAG "NativeExtractor"

#include <jni.h>
#include <string>
#include <sys/stat.h>

#include "Extractor.h"

extern "C"
JNIEXPORT int32_t JNICALL
Java_com_android_media_benchmark_library_Native_Extract(JNIEnv *env, jobject thiz,
                                                        jstring jInputFilePath,
                                                        jstring jInputFileName) {
    UNUSED(thiz);
    const char *inputFilePath = env->GetStringUTFChars(jInputFilePath, nullptr);
    const char *inputFileName = env->GetStringUTFChars(jInputFileName, nullptr);
    string sFilePath = string(inputFilePath) + string(inputFileName);
    FILE *inputFp = fopen(sFilePath.c_str(), "rb");

    // Read file properties
    struct stat buf;
    stat(sFilePath.c_str(), &buf);
    size_t fileSize = buf.st_size;
    int32_t fd = fileno(inputFp);

    Extractor *extractObj = new Extractor();
    int32_t trackCount = extractObj->initExtractor((long)fd, fileSize);
    if (trackCount <= 0) {
        ALOGE("initExtractor failed");
        return -1;
    }

    int32_t trackID = 0;
    int32_t status = extractObj->extract(trackID);
    if (status != AMEDIA_OK) {
        ALOGE("Extraction failed");
        return -1;
    }
    if (inputFp) {
        fclose(inputFp);
        inputFp = nullptr;
    }
    extractObj->deInitExtractor();
    extractObj->dumpStatistics(inputFileName);

    env->ReleaseStringUTFChars(jInputFilePath, inputFilePath);
    env->ReleaseStringUTFChars(jInputFileName, inputFileName);

    delete extractObj;
    return status;
}
Loading