diff options
author | Ray Essick <essick@google.com> | 2017-01-25 18:01:56 -0800 |
---|---|---|
committer | Ray Essick <essick@google.com> | 2017-01-27 17:58:30 +0000 |
commit | 0e0fee1e3a04023c9ec122d3bd7da54e9565c3e7 (patch) | |
tree | dd2531595b09ab1a7335cfc41c20146506fe9033 /media/jni/android_media_MediaCodec.cpp | |
parent | df9a4f9a7c599ccd2348d429e6a6f0a5a415f780 (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.cpp | 41 |
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 }, |