blob: a762760329d5e4eee0373caed995bf8296f465cf [file] [log] [blame]
/*
* 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 <fstream>
#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,
jstring jStatsFile) {
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;
const char *mime = nullptr;
int32_t status = extractObj->extract(trackID);
if (status != AMEDIA_OK) {
ALOGE("Extraction failed");
return -1;
}
if (inputFp) {
fclose(inputFp);
inputFp = nullptr;
}
status = extractObj->setupTrackFormat(trackID);
AMediaFormat *format = extractObj->getFormat();
if (!format) {
ALOGE("format is null!");
return -1;
}
AMediaFormat_getString(format, AMEDIAFORMAT_KEY_MIME, &mime);
if (!mime) {
ALOGE("mime is null!");
return -1;
}
extractObj->deInitExtractor();
const char *statsFile = env->GetStringUTFChars(jStatsFile, nullptr);
extractObj->dumpStatistics(string(inputFileName), string(mime), statsFile);
env->ReleaseStringUTFChars(jStatsFile, statsFile);
env->ReleaseStringUTFChars(jInputFilePath, inputFilePath);
env->ReleaseStringUTFChars(jInputFileName, inputFileName);
delete extractObj;
return status;
}