API android.media.MediaExtractor.getMetrics()
adds the API getMetrics() to android.media.MediaExtractor
includes plumbing through JNI to the underlying mediaextractor
code in frameworks/av.
Tested with some CTS modifications; a more formal set of CTS
updates will be along later.
Bug: 35094936
Test: modified CTS to invoke new API and output results
Change-Id: Id8d56c9c3273b86bbd11e248bdf5004be90b91ef
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 4de1d00..2008f8d 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -19,6 +19,7 @@
#include <utils/Log.h>
#include "android_media_MediaExtractor.h"
+#include "android_media_MediaMetricsJNI.h"
#include "android_media_Utils.h"
#include "android_runtime/AndroidRuntime.h"
@@ -240,6 +241,13 @@
return OK;
}
+status_t JMediaExtractor::getMetrics(Parcel *reply) const {
+
+ status_t status = mImpl->getMetrics(reply);
+ return status;
+}
+
+
status_t JMediaExtractor::getSampleMeta(sp<MetaData> *sampleMeta) {
return mImpl->getSampleMeta(sampleMeta);
}
@@ -767,6 +775,38 @@
android_media_MediaExtractor_release(env, thiz);
}
+static jobject
+android_media_MediaExtractor_getMetrics(JNIEnv * env, jobject thiz)
+{
+ ALOGV("android_media_MediaExtractor_getMetrics");
+
+ sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
+ if (extractor == NULL ) {
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ return NULL;
+ }
+
+ // get what we have for the metrics from the codec
+ Parcel reply;
+ status_t err = extractor->getMetrics(&reply);
+ if (err != OK) {
+ ALOGE("getMetrics failed");
+ return (jobject) NULL;
+ }
+
+ // build and return the Bundle
+ MediaAnalyticsItem *item = new MediaAnalyticsItem;
+ item->readFromParcel(reply);
+ jobject mybundle = MediaMetricsJNI::writeMetricsToBundle(env, item, NULL);
+
+ // housekeeping
+ delete item;
+ item = NULL;
+
+ return mybundle;
+}
+
+
static const JNINativeMethod gMethods[] = {
{ "release", "()V", (void *)android_media_MediaExtractor_release },
@@ -826,6 +866,9 @@
{ "hasCacheReachedEndOfStream", "()Z",
(void *)android_media_MediaExtractor_hasCacheReachedEOS },
+
+ {"getMetrics", "()Landroid/os/Bundle;",
+ (void *)android_media_MediaExtractor_getMetrics},
};
int register_android_media_MediaExtractor(JNIEnv *env) {