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;