@@ -47,6 +47,8 @@ using ::starboard::GetPlayerStateName;
4747// buffer, this extra write during preroll can be eliminated.
4848const int kPrerollGuardAudioBuffer = 1 ;
4949
50+ constexpr int kDefaultMaxSamplePerWrite = 1 ;
51+
5052bool HasRemoteAudioOutputs (
5153 const std::vector<SbMediaAudioConfiguration>& configurations) {
5254 for (auto && configuration : configurations) {
@@ -136,6 +138,8 @@ StarboardRenderer::StarboardRenderer(
136138 audio_write_duration_local_(audio_write_duration_local),
137139 audio_write_duration_remote_(audio_write_duration_remote),
138140 max_video_capabilities_(max_video_capabilities),
141+ // TODO: b/375674101 - Connect this to the starboard::feature.
142+ max_samples_per_write_(kDefaultMaxSamplePerWrite ),
139143 viewport_size_(viewport_size)
140144#if BUILDFLAG(IS_ANDROID)
141145 ,
@@ -144,7 +148,13 @@ StarboardRenderer::StarboardRenderer(
144148{
145149 DCHECK (task_runner_);
146150 DCHECK (media_log_);
147- LOG (INFO) << " StarboardRenderer constructed." ;
151+ CHECK_GT (max_samples_per_write_, 0 );
152+ LOG (INFO) << " StarboardRenderer constructed: audio_write_duration_local="
153+ << audio_write_duration_local_
154+ << " , audio_write_duration_remote=" << audio_write_duration_remote_
155+ << " , max_video_capabilities=\" " << max_video_capabilities_ << " \" "
156+ << " , max_samples_per_write=" << max_samples_per_write_
157+ << " , view_port_size=" << viewport_size_.ToString ();
148158}
149159
150160StarboardRenderer::~StarboardRenderer () {
@@ -724,13 +734,14 @@ void StarboardRenderer::UpdateDecoderConfig(DemuxerStream* stream) {
724734
725735void StarboardRenderer::OnDemuxerStreamRead (
726736 DemuxerStream* stream,
737+ int max_buffers,
727738 DemuxerStream::Status status,
728739 DemuxerStream::DecoderBufferVector buffers) {
729740 if (!task_runner_->RunsTasksInCurrentSequence ()) {
730741 task_runner_->PostTask (
731- FROM_HERE,
732- base::BindOnce (&StarboardRenderer::OnDemuxerStreamRead ,
733- weak_factory_. GetWeakPtr (), stream , status, buffers));
742+ FROM_HERE, base::BindOnce (&StarboardRenderer::OnDemuxerStreamRead,
743+ weak_factory_. GetWeakPtr (), stream ,
744+ max_buffers , status, buffers));
734745 return ;
735746 }
736747
@@ -802,8 +813,10 @@ void StarboardRenderer::OnDemuxerStreamRead(
802813 stream->video_decoder_config ().visible_rect ().size ());
803814 }
804815 UpdateDecoderConfig (stream);
805- stream->Read (1 , base::BindOnce (&StarboardRenderer::OnDemuxerStreamRead,
806- weak_factory_.GetWeakPtr (), stream));
816+ stream->Read (
817+ max_buffers,
818+ base::BindOnce (&StarboardRenderer::OnDemuxerStreamRead,
819+ weak_factory_.GetWeakPtr (), stream, max_buffers));
807820 } else if (status == DemuxerStream::kError ) {
808821 client_->OnError (PIPELINE_ERROR_READ);
809822 }
@@ -826,10 +839,8 @@ void StarboardRenderer::OnNeedData(DemuxerStream::Type type,
826839 return ;
827840 }
828841
829- int max_buffers = max_audio_samples_per_write_ > 1
830- ? std::min (max_number_of_buffers_to_write,
831- max_audio_samples_per_write_)
832- : 1 ;
842+ int max_buffers =
843+ std::min (max_number_of_buffers_to_write, max_samples_per_write_);
833844
834845 if (type == DemuxerStream::AUDIO) {
835846 if (!audio_stream_) {
@@ -884,13 +895,12 @@ void StarboardRenderer::OnNeedData(DemuxerStream::Type type,
884895 audio_read_delayed_ = true ;
885896 return ;
886897 }
887- if (max_audio_samples_per_write_ > 1 &&
888- !time_ahead_of_playback.is_negative ()) {
898+ if (max_samples_per_write_ > 1 && !time_ahead_of_playback.is_negative ()) {
889899 estimated_max_buffers = GetEstimatedMaxBuffers (adjusted_write_duration,
890900 time_ahead_of_playback,
891901 false /* is_preroll */ );
892902 }
893- } else if (max_audio_samples_per_write_ > 1 ) {
903+ } else if (max_samples_per_write_ > 1 ) {
894904 if (!time_ahead_of_playback_for_preroll.is_negative ()) {
895905 estimated_max_buffers = GetEstimatedMaxBuffers (
896906 adjusted_write_duration_for_preroll,
@@ -925,7 +935,7 @@ void StarboardRenderer::OnNeedData(DemuxerStream::Type type,
925935
926936 stream->Read (max_buffers,
927937 base::BindOnce (&StarboardRenderer::OnDemuxerStreamRead,
928- weak_factory_.GetWeakPtr (), stream));
938+ weak_factory_.GetWeakPtr (), stream, max_buffers ));
929939}
930940
931941void StarboardRenderer::OnPlayerStatus (SbPlayerState state) {
@@ -1060,8 +1070,7 @@ int StarboardRenderer::GetEstimatedMaxBuffers(TimeDelta write_duration,
10601070 DCHECK_GE (time_ahead_of_playback.InMicroseconds (), 0 );
10611071
10621072 int estimated_max_buffers = 1 ;
1063- if (!(max_audio_samples_per_write_ > 1 ) ||
1064- write_duration <= time_ahead_of_playback) {
1073+ if (max_samples_per_write_ <= 1 || write_duration <= time_ahead_of_playback) {
10651074 return estimated_max_buffers;
10661075 }
10671076
0 commit comments