diff options
author | Sampath Shetty <Sampath.Shetty@dolby.com> | 2018-08-07 19:46:17 +1000 |
---|---|---|
committer | Mikhail Naganov <mnaganov@google.com> | 2018-11-26 15:24:41 -0800 |
commit | 08e7706d92a4342b0957cc0cea836a11e220c263 (patch) | |
tree | d770c1a4bb1eede1cfc33619994a9de75268b97b /media/jni/android_media_MediaExtractor.cpp | |
parent | 9d7964b973aaa5179b9c29356d04bca07a2b719b (diff) |
Hook up MediaExtractor getAudioPresentations to native impl
Adds interface to MediaExtractor JNI to retrieve AudioPresentations
Test: Manual test
Bug: 119312182
Change-Id: I5802ff20b8221aeede25148cb3213b0e9e74f270
Diffstat (limited to 'media/jni/android_media_MediaExtractor.cpp')
-rw-r--r-- | media/jni/android_media_MediaExtractor.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 15957c6a9c5e..29238d3b8ea4 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -18,6 +18,7 @@ #define LOG_TAG "MediaExtractor-JNI" #include <utils/Log.h> +#include "android_media_AudioPresentation.h" #include "android_media_MediaDataSource.h" #include "android_media_MediaExtractor.h" #include "android_media_MediaMetricsJNI.h" @@ -56,6 +57,7 @@ struct fields_t { }; static fields_t gFields; +static JAudioPresentationInfo::fields_t gAudioPresentationFields; JMediaExtractor::JMediaExtractor(JNIEnv *env, jobject thiz) : mClass(NULL), @@ -289,6 +291,10 @@ bool JMediaExtractor::getCachedDuration(int64_t *durationUs, bool *eos) const { return mImpl->getCachedDuration(durationUs, eos); } +status_t JMediaExtractor::getAudioPresentations(size_t trackIdx, + AudioPresentationCollection *presentations) const { + return mImpl->getAudioPresentations(trackIdx, presentations); +} } // namespace android //////////////////////////////////////////////////////////////////////////////// @@ -668,6 +674,28 @@ static jboolean android_media_MediaExtractor_getSampleCryptoInfo( return JNI_TRUE; } +static jobject android_media_MediaExtractor_getAudioPresentations( + JNIEnv *env, jobject thiz, jint trackIdx) { + sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz); + jobject presentationsJObj = JAudioPresentationInfo::asJobject(env, gAudioPresentationFields); + if (extractor == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", NULL); + return presentationsJObj; + } + AudioPresentationCollection presentations; + status_t err = extractor->getAudioPresentations(trackIdx, &presentations); + if (err == ERROR_END_OF_STREAM || err == ERROR_UNSUPPORTED) { + return presentationsJObj; + } else if (err != OK) { + jniThrowException(env, "java/lang/IllegalArgumentException", NULL); + return presentationsJObj; + } + + JAudioPresentationInfo::addPresentations( + env, gAudioPresentationFields, presentations, presentationsJObj); + return presentationsJObj; +} + static void android_media_MediaExtractor_native_init(JNIEnv *env) { jclass clazz = env->FindClass("android/media/MediaExtractor"); CHECK(clazz != NULL); @@ -683,6 +711,8 @@ static void android_media_MediaExtractor_native_init(JNIEnv *env) { gFields.cryptoInfoSetPatternID = env->GetMethodID(clazz, "setPattern", "(II)V"); + + gAudioPresentationFields.init(env); } static void android_media_MediaExtractor_native_setup( @@ -963,6 +993,9 @@ static const JNINativeMethod gMethods[] = { {"native_getMetrics", "()Landroid/os/PersistableBundle;", (void *)android_media_MediaExtractor_native_getMetrics}, + + { "native_getAudioPresentations", "(I)Ljava/util/List;", + (void *)android_media_MediaExtractor_getAudioPresentations }, }; int register_android_media_MediaExtractor(JNIEnv *env) { |