Skip to content

Commit b2f8e30

Browse files
authored
android: Use Starboard Features for the delay during recreating VideoDecoder (#6849)
Allow to enable configurating the delay between reset/flush VideoDeocder using Starboard features. Examples are: - `'--enable-features=VideoDecoderDelayUsecOverride:ResetDelayUsec/10ms'` - `'--enable-features=VideoDecoderDelayUsecOverride:FlushDelayUsec/10ms'` Issue: 400511693
1 parent a349eb5 commit b2f8e30

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

starboard/android/shared/player_components_factory.cc

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ constexpr bool kForceSecurePipelineInTunnelModeWhenRequired = true;
7474
// video distortion on some platforms.
7575
constexpr bool kForceResetSurfaceUnderTunnelMode = true;
7676

77-
// By default, Cobalt restarts MediaCodec after stops/flushes during
78-
// Reset()/Flush(). Set the following variable to > 0 to force it to
79-
// wait during Reset()/Flush().
80-
constexpr int64_t kResetDelayUsecOverride = 0;
81-
constexpr int64_t kFlushDelayUsecOverride = 0;
82-
8377
// This class allows us to force int16 sample type when tunnel mode is enabled.
8478
class AudioRendererSinkAndroid : public ::starboard::shared::starboard::player::
8579
filter::AudioRendererSinkImpl {
@@ -502,8 +496,8 @@ class PlayerComponentsFactory : public starboard::shared::starboard::player::
502496
bool force_big_endian_hdr_metadata = false;
503497
bool enable_flush_during_seek = starboard::features::FeatureList::IsEnabled(
504498
starboard::features::kForceFlushDecoderDuringReset);
505-
int64_t reset_delay_usec = 0;
506-
int64_t flush_delay_usec = 0;
499+
int64_t flush_delay_usec = starboard::features::kFlushDelayUsec.Get();
500+
int64_t reset_delay_usec = starboard::features::kResetDelayUsec.Get();
507501
// The default value of |force_reset_surface| would be true.
508502
bool force_reset_surface = true;
509503
if (creation_parameters.video_codec() != kSbMediaVideoCodecNone &&
@@ -527,16 +521,12 @@ class PlayerComponentsFactory : public starboard::shared::starboard::player::
527521
SB_LOG_IF(INFO, enable_flush_during_seek)
528522
<< "`kForceFlushDecoderDuringReset` is set to true, force flushing"
529523
<< " video decoder during Reset().";
530-
if (kResetDelayUsecOverride > 0) {
531-
reset_delay_usec = kResetDelayUsecOverride;
532-
SB_LOG(INFO) << "`kResetDelayUsecOverride` is set to > 0, force a delay"
533-
<< " of " << reset_delay_usec << "us during Reset().";
534-
}
535-
if (kFlushDelayUsecOverride > 0) {
536-
flush_delay_usec = kFlushDelayUsecOverride;
537-
SB_LOG(INFO) << "`kFlushDelayUsecOverride` is set to > 0, force a delay"
538-
<< " of " << flush_delay_usec << "us during Flush().";
539-
}
524+
SB_LOG_IF(INFO, flush_delay_usec > 0)
525+
<< "`kFlushDelayUsec` is set to > 0, force a delay of "
526+
<< flush_delay_usec << "us during Flush().";
527+
SB_LOG_IF(INFO, reset_delay_usec > 0)
528+
<< "`kResetDelayUsec` is set to > 0, force a delay of "
529+
<< reset_delay_usec << "us during Reset().";
540530

541531
auto video_decoder = std::make_unique<VideoDecoder>(
542532
creation_parameters.video_stream_info(),

starboard/extension/feature_config.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,15 @@ STARBOARD_FEATURE(kForceFlushDecoderDuringReset,
110110
// Set the following variable to true to force it reset audio decoder
111111
// during Reset(). This should be enabled with kForceFlushDecoderDuringReset.
112112
STARBOARD_FEATURE(kForceResetAudioDecoder, "ForceResetAudioDecoder", false)
113+
114+
// By default, Cobalt restarts MediaCodec after stops/flushes during
115+
// Reset()/Flush(). Set the following variable to true with parameters
116+
// kResetDelayUsec and kFlushDelayUsec to force it to wait during
117+
// Reset()/Flush(). For example, with args
118+
// '--enable-features=VideoDecoderDelayUsecOverride:ResetDelayUsec/10ms'.
119+
STARBOARD_FEATURE(kVideoDecoderDelayUsecOverride,
120+
"VideoDecoderDelayUsecOverride",
121+
false)
113122
#endif // BUILDFLAG(IS_ANDROID) && (SB_API_VERSION >= 17)
114123
FEATURE_LIST_END
115124

@@ -172,4 +181,20 @@ FEATURE_PARAM_LIST_START
172181
// "CobaltDebugSetting",
173182
// "standard")
174183
// #endif // BUILDFLAG(IS_ANDROID) && (SB_API_VERSION >= 17)
184+
185+
#if BUILDFLAG(IS_ANDROID) && (SB_API_VERSION >= 17)
186+
// By default, Cobalt restarts MediaCodec after stops/flushes during
187+
// Reset()/Flush(). Set the following variable to > 0 to force it to
188+
// wait during Reset()/Flush().
189+
STARBOARD_FEATURE_PARAM(STARBOARD_FEATURE_PARAM_TIME_TYPE,
190+
kFlushDelayUsec,
191+
kVideoDecoderDelayUsecOverride,
192+
"FlushDelayUsec",
193+
base::Microseconds(0))
194+
STARBOARD_FEATURE_PARAM(STARBOARD_FEATURE_PARAM_TIME_TYPE,
195+
kResetDelayUsec,
196+
kVideoDecoderDelayUsecOverride,
197+
"ResetDelayUsec",
198+
base::Microseconds(0))
199+
#endif // BUILDFLAG(IS_ANDROID) && (SB_API_VERSION >= 17)
175200
FEATURE_PARAM_LIST_END

0 commit comments

Comments
 (0)