StagefrightRecoder: Use flag to enable or disable b-frame
Use flag to enable or disable b-frame support in screen recorder.
Also fix mediaTimeTicks calculation in mpeg4writer.
If video track starting at 0 then video's timescale (i.e. mTimeScale)
is used to calculate mediaTime (i.e. mediaTimeTicks) but in case of
video start with positive start offset then mpeg4 writer's timescale
(i.e. mvhdTimeScale) is used to calculate mediatime (i.e. editDurationTicks).
Modified mediaTimeTicks calculation to use mTimeScale even in case of
video start with positive start offset.
Bug: 288549440
Bug: 341121900
Test: muxer poc in bug
Test: manual
Test: adb shell setprop persist.device_config.aconfig_flags. \
media_solutions.com.android.media.editing.flags. \
stagefrightrecorder_enable_b_frames true
Test: adb shell device_config put media_solutions \
com.android.media.editing.flags. \
stagefrightrecorder_enable_b_frames true
Change-Id: I84585fb233ed914ba2c1d8d95f0071071318c5bf
diff --git a/media/libmediaplayerservice/Android.bp b/media/libmediaplayerservice/Android.bp
index 718f782..a10c509 100644
--- a/media/libmediaplayerservice/Android.bp
+++ b/media/libmediaplayerservice/Android.bp
@@ -45,6 +45,7 @@
"android.hardware.media.omx@1.0",
"av-types-aidl-cpp",
"framework-permission-aidl-cpp",
+ "libaconfig_storage_read_api_cc",
"libaudioclient_aidl_conversion",
"libbase",
"libbinder_ndk",
@@ -76,6 +77,7 @@
"libstagefright_httplive",
"libutils",
"packagemanager_aidl-cpp",
+ "server_configurable_flags",
],
header_libs: [
@@ -86,6 +88,7 @@
],
static_libs: [
+ "com.android.media.flags.editing-aconfig-cc",
"libplayerservice_datasource",
"libstagefright_nuplayer",
"libstagefright_rtsp",
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index dce6ba8..086baa3 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -68,6 +68,7 @@
#include <system/audio.h>
#include <media/stagefright/rtsp/ARTPWriter.h>
+#include <com_android_media_editing_flags.h>
namespace android {
@@ -2121,7 +2122,8 @@
uint32_t bLayers = std::min(2u, tsLayers - 1); // use up-to 2 B-layers
// TODO(b/341121900): Remove this once B frames are handled correctly in screen recorder
// use case in case of mic only
- if (mAudioSource == AUDIO_SOURCE_MIC && mVideoSource == VIDEO_SOURCE_SURFACE) {
+ if (!com::android::media::editing::flags::stagefrightrecorder_enable_b_frames()
+ && mAudioSource == AUDIO_SOURCE_MIC && mVideoSource == VIDEO_SOURCE_SURFACE) {
bLayers = 0;
}
uint32_t pLayers = tsLayers - bLayers;