MetadataRetriever: Use RGBA_8888 as default color format based on a flag
When the flag mediametadataretriever_default_rgba8888 is set, use
RGBA_8888 as the color format in getFrameAtTime call.
Add the unit test to check the intended behaviour.
Test: adb shell setprop persist.device_config.aconfig_flags.\
media_solutions.com.android.media.playback.flags.\
mediametadataretriever_default_rgba8888 true
Test: adb shell device_config put media_solutions \
com.android.media.playback.flags.mediametadataretriever_default_rgba8888 \
true
Test: atest com.android.mediaframeworktest.unit.MediaMetadataRetrieverTest
Bug: 298965955
Change-Id: I8452e75e07bcfcd2483ad2da971806147f5a9067
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index 1458758..2a10fa7 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -35,7 +35,9 @@
#include "android_media_MediaDataSource.h"
#include "android_media_Streams.h"
#include "android_util_Binder.h"
+#include <com_android_media_playback_flags.h>
+namespace playback_flags = com::android::media::playback::flags;
using namespace android;
struct fields_t {
@@ -374,9 +376,12 @@
jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
return NULL;
}
- // For getFrameAtTime family of calls, default to ANDROID_BITMAP_FORMAT_RGB_565
- // to keep the behavior consistent with older releases
- AndroidBitmapFormat colorFormat = getColorFormat(env, params, ANDROID_BITMAP_FORMAT_RGB_565);
+
+ AndroidBitmapFormat defaultColorFormat =
+ playback_flags::mediametadataretriever_default_rgba8888()
+ ? ANDROID_BITMAP_FORMAT_RGBA_8888
+ : ANDROID_BITMAP_FORMAT_RGB_565;
+ AndroidBitmapFormat colorFormat = getColorFormat(env, params, defaultColorFormat);
// Call native method to retrieve a video frame
VideoFrame *videoFrame = NULL;