| Index: media/base/android/media_source_player.cc
|
| diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc
|
| index c4998e8174e6eef78d442af9cb8f3030c20fc934..1c25b697ba111fd093791f06eeb62b25804bbd1a 100644
|
| --- a/media/base/android/media_source_player.cc
|
| +++ b/media/base/android/media_source_player.cc
|
| @@ -300,32 +300,11 @@ void MediaSourcePlayer::OnDemuxerConfigsAvailable(
|
| duration_ = configs.duration;
|
| clock_.SetDuration(duration_);
|
|
|
| - audio_codec_ = configs.audio_codec;
|
| - num_channels_ = configs.audio_channels;
|
| - sampling_rate_ = configs.audio_sampling_rate;
|
| - is_audio_encrypted_ = configs.is_audio_encrypted;
|
| - audio_extra_data_ = configs.audio_extra_data;
|
| - video_codec_ = configs.video_codec;
|
| - width_ = configs.video_size.width();
|
| - height_ = configs.video_size.height();
|
| - is_video_encrypted_ = configs.is_video_encrypted;
|
| + SetDemuxerConfigs(configs, true);
|
| + SetDemuxerConfigs(configs, false);
|
|
|
| manager()->OnMediaMetadataChanged(
|
| player_id(), duration_, width_, height_, true);
|
| -
|
| - if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) {
|
| - if (reconfig_audio_decoder_)
|
| - ConfigureAudioDecoderJob();
|
| -
|
| - if (reconfig_video_decoder_)
|
| - ConfigureVideoDecoderJob();
|
| -
|
| - ClearPendingEvent(CONFIG_CHANGE_EVENT_PENDING);
|
| -
|
| - // Resume decoding after the config change if we are still playing.
|
| - if (playing_)
|
| - StartInternal();
|
| - }
|
| }
|
|
|
| void MediaSourcePlayer::OnDemuxerDataAvailable(const DemuxerData& data) {
|
| @@ -496,8 +475,16 @@ void MediaSourcePlayer::ProcessPendingEvents() {
|
| if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) {
|
| DVLOG(1) << __FUNCTION__ << " : Handling CONFIG_CHANGE_EVENT.";
|
| DCHECK(reconfig_audio_decoder_ || reconfig_video_decoder_);
|
| - demuxer_->RequestDemuxerConfigs();
|
| - return;
|
| + manager()->OnMediaMetadataChanged(
|
| + player_id(), duration_, width_, height_, true);
|
| +
|
| + if (reconfig_audio_decoder_)
|
| + ConfigureAudioDecoderJob();
|
| +
|
| + if (reconfig_video_decoder_)
|
| + ConfigureVideoDecoderJob();
|
| +
|
| + ClearPendingEvent(CONFIG_CHANGE_EVENT_PENDING);
|
| }
|
|
|
| if (IsEventPending(SURFACE_CHANGE_EVENT_PENDING)) {
|
| @@ -524,7 +511,6 @@ void MediaSourcePlayer::ProcessPendingEvents() {
|
|
|
| DCHECK(audio_decoder_job_ || AudioFinished());
|
| DCHECK(video_decoder_job_ || VideoFinished());
|
| -
|
| int count = (AudioFinished() ? 0 : 1) + (VideoFinished() ? 0 : 1);
|
|
|
| // It is possible that all streams have finished decode, yet starvation
|
| @@ -649,12 +635,13 @@ void MediaSourcePlayer::MediaDecoderCallback(
|
| start_time_ticks_ = base::TimeTicks::Now();
|
| }
|
|
|
| - if (is_audio) {
|
| + if (is_audio)
|
| DecodeMoreAudio();
|
| - return;
|
| - }
|
| + else
|
| + DecodeMoreVideo();
|
|
|
| - DecodeMoreVideo();
|
| + if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING))
|
| + ProcessPendingEvents();
|
| }
|
|
|
| void MediaSourcePlayer::DecodeMoreAudio() {
|
| @@ -677,6 +664,9 @@ void MediaSourcePlayer::DecodeMoreAudio() {
|
| // Wait for demuxer ready message.
|
| DCHECK(!reconfig_audio_decoder_);
|
| reconfig_audio_decoder_ = true;
|
| + DemuxerConfigs* configs = audio_decoder_job_->GetDemuxerConfigs();
|
| + DCHECK(configs);
|
| + SetDemuxerConfigs(*configs, true);
|
|
|
| // Config change may have just been detected on the other stream. If so,
|
| // don't send a duplicate demuxer config request.
|
| @@ -686,7 +676,6 @@ void MediaSourcePlayer::DecodeMoreAudio() {
|
| }
|
|
|
| SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING);
|
| - ProcessPendingEvents();
|
| }
|
|
|
| void MediaSourcePlayer::DecodeMoreVideo() {
|
| @@ -714,6 +703,9 @@ void MediaSourcePlayer::DecodeMoreVideo() {
|
|
|
| DCHECK(!reconfig_video_decoder_);
|
| reconfig_video_decoder_ = true;
|
| + DemuxerConfigs* configs = video_decoder_job_->GetDemuxerConfigs();
|
| + DCHECK(configs);
|
| + SetDemuxerConfigs(*configs, false);
|
|
|
| // Config change may have just been detected on the other stream. If so,
|
| // don't send a duplicate demuxer config request.
|
| @@ -723,7 +715,6 @@ void MediaSourcePlayer::DecodeMoreVideo() {
|
| }
|
|
|
| SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING);
|
| - ProcessPendingEvents();
|
| }
|
|
|
| void MediaSourcePlayer::PlaybackCompleted(bool is_audio) {
|
| @@ -974,6 +965,9 @@ void MediaSourcePlayer::OnPrefetchDone() {
|
|
|
| if (!VideoFinished())
|
| DecodeMoreVideo();
|
| +
|
| + if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING))
|
| + ProcessPendingEvents();
|
| }
|
|
|
| const char* MediaSourcePlayer::GetEventName(PendingEventFlags event) {
|
| @@ -1014,4 +1008,20 @@ void MediaSourcePlayer::ClearPendingEvent(PendingEventFlags event) {
|
| pending_event_ &= ~event;
|
| }
|
|
|
| +void MediaSourcePlayer::SetDemuxerConfigs(const DemuxerConfigs& configs,
|
| + bool is_audio) {
|
| + if (is_audio) {
|
| + audio_codec_ = configs.audio_codec;
|
| + num_channels_ = configs.audio_channels;
|
| + sampling_rate_ = configs.audio_sampling_rate;
|
| + is_audio_encrypted_ = configs.is_audio_encrypted;
|
| + audio_extra_data_ = configs.audio_extra_data;
|
| + } else {
|
| + video_codec_ = configs.video_codec;
|
| + width_ = configs.video_size.width();
|
| + height_ = configs.video_size.height();
|
| + is_video_encrypted_ = configs.is_video_encrypted;
|
| + }
|
| +}
|
| +
|
| } // namespace media
|
|
|