summaryrefslogtreecommitdiff
path: root/media/jni/android_media_MediaCodec.cpp
diff options
context:
space:
mode:
authorRay Essick <essick@google.com>2017-01-25 18:01:56 -0800
committerRay Essick <essick@google.com>2017-01-27 17:58:30 +0000
commit0e0fee1e3a04023c9ec122d3bd7da54e9565c3e7 (patch)
treedd2531595b09ab1a7335cfc41c20146506fe9033 /media/jni/android_media_MediaCodec.cpp
parentdf9a4f9a7c599ccd2348d429e6a6f0a5a415f780 (diff)
API access to mediametrics
provide SDK/API access to media metrics for user apps. This lets the apps metrics data for their instances of player and codecs. Others to come. Bug: 34715803 Test: booted, invoked new APIs to verify desired results Change-Id: Iaae6406aadef30adc893952961ac154a7c4c761d
Diffstat (limited to 'media/jni/android_media_MediaCodec.cpp')
-rw-r--r--media/jni/android_media_MediaCodec.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index c2c66fdb6ca9..6f9883c08050 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -21,6 +21,7 @@
#include "android_media_MediaCodec.h"
#include "android_media_MediaCrypto.h"
+#include "android_media_MediaMetricsJNI.h"
#include "android_media_Utils.h"
#include "android_runtime/AndroidRuntime.h"
#include "android_runtime/android_view_Surface.h"
@@ -618,6 +619,12 @@ status_t JMediaCodec::getName(JNIEnv *env, jstring *nameStr) const {
return OK;
}
+status_t JMediaCodec::getMetrics(JNIEnv *, Parcel *reply) const {
+
+ status_t status = mCodec->getMetrics(reply);
+ return status;
+}
+
status_t JMediaCodec::setParameters(const sp<AMessage> &msg) {
return mCodec->setParameters(msg);
}
@@ -1646,6 +1653,37 @@ static jobject android_media_MediaCodec_getName(
return NULL;
}
+static jobject
+android_media_MediaCodec_getMetrics(JNIEnv *env, jobject thiz)
+{
+ ALOGV("android_media_MediaCodec_getMetrics");
+
+ sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+ if (codec == NULL ) {
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ return 0;
+ }
+
+ // get what we have for the metrics from the codec
+ Parcel reply;
+ status_t err = codec->getMetrics(env, &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 void android_media_MediaCodec_setParameters(
JNIEnv *env, jobject thiz, jobjectArray keys, jobjectArray vals) {
ALOGV("android_media_MediaCodec_setParameters");
@@ -1954,6 +1992,9 @@ static const JNINativeMethod gMethods[] = {
{ "getName", "()Ljava/lang/String;",
(void *)android_media_MediaCodec_getName },
+ { "getMetrics", "()Landroid/os/Bundle;",
+ (void *)android_media_MediaCodec_getMetrics},
+
{ "setParameters", "([Ljava/lang/String;[Ljava/lang/Object;)V",
(void *)android_media_MediaCodec_setParameters },