Index: content/renderer/media/android/media_source_delegate.cc |
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc |
index eb4f5c3dcf2779bc2435e996e975094eaa329835..6b6523c060ca085329f42679192385c60585aeef 100644 |
--- a/content/renderer/media/android/media_source_delegate.cc |
+++ b/content/renderer/media/android/media_source_delegate.cc |
@@ -398,14 +398,11 @@ void MediaSourceDelegate::OnBufferReady( |
break; |
case DemuxerStream::kConfigChanged: |
- // In case of kConfigChanged, need to read decoder_config once |
- // for the next reads. |
- // TODO(kjyoun): Investigate if we need to use this new config. See |
- // http://crbug.com/255783 |
- if (is_audio) { |
- audio_stream_->audio_decoder_config(); |
- } else { |
- gfx::Size size = video_stream_->video_decoder_config().coded_size(); |
+ CHECK((is_audio && audio_stream_) || (!is_audio && video_stream_)); |
+ data->demuxer_configs.resize(1); |
+ CHECK(GetDemuxerConfigFromStream(&data->demuxer_configs[0], is_audio)); |
+ if (!is_audio) { |
+ gfx::Size size = data->demuxer_configs[0].video_size; |
DVLOG(1) << "Video config is changed: " << size.width() << "x" |
<< size.height(); |
} |
@@ -649,13 +646,6 @@ void MediaSourceDelegate::DeleteSelf() { |
delete this; |
} |
-void MediaSourceDelegate::OnMediaConfigRequest() { |
- DCHECK(media_loop_->BelongsToCurrentThread()); |
- DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
- if (CanNotifyDemuxerReady()) |
- NotifyDemuxerReady(); |
-} |
- |
bool MediaSourceDelegate::CanNotifyDemuxerReady() { |
DCHECK(media_loop_->BelongsToCurrentThread()); |
return is_demuxer_ready_; |
@@ -667,24 +657,8 @@ void MediaSourceDelegate::NotifyDemuxerReady() { |
DCHECK(CanNotifyDemuxerReady()); |
scoped_ptr<DemuxerConfigs> configs(new DemuxerConfigs()); |
- if (audio_stream_) { |
- media::AudioDecoderConfig config = audio_stream_->audio_decoder_config(); |
- configs->audio_codec = config.codec(); |
- configs->audio_channels = |
- media::ChannelLayoutToChannelCount(config.channel_layout()); |
- configs->audio_sampling_rate = config.samples_per_second(); |
- configs->is_audio_encrypted = config.is_encrypted(); |
- configs->audio_extra_data = std::vector<uint8>( |
- config.extra_data(), config.extra_data() + config.extra_data_size()); |
- } |
- if (video_stream_) { |
- media::VideoDecoderConfig config = video_stream_->video_decoder_config(); |
- configs->video_codec = config.codec(); |
- configs->video_size = config.natural_size(); |
- configs->is_video_encrypted = config.is_encrypted(); |
- configs->video_extra_data = std::vector<uint8>( |
- config.extra_data(), config.extra_data() + config.extra_data_size()); |
- } |
+ GetDemuxerConfigFromStream(configs.get(), true); |
+ GetDemuxerConfigFromStream(configs.get(), false); |
configs->duration = GetDuration(); |
if (demuxer_client_) |
@@ -770,4 +744,32 @@ base::TimeDelta MediaSourceDelegate::FindBufferedBrowserSeekTime_Locked( |
return seek_time; |
} |
+bool MediaSourceDelegate::GetDemuxerConfigFromStream( |
+ media::DemuxerConfigs* configs, bool is_audio) { |
+ DCHECK(media_loop_->BelongsToCurrentThread()); |
+ if (!CanNotifyDemuxerReady()) |
+ return false; |
+ if (is_audio && audio_stream_) { |
+ media::AudioDecoderConfig config = audio_stream_->audio_decoder_config(); |
+ configs->audio_codec = config.codec(); |
+ configs->audio_channels = |
+ media::ChannelLayoutToChannelCount(config.channel_layout()); |
+ configs->audio_sampling_rate = config.samples_per_second(); |
+ configs->is_audio_encrypted = config.is_encrypted(); |
+ configs->audio_extra_data = std::vector<uint8>( |
+ config.extra_data(), config.extra_data() + config.extra_data_size()); |
+ return true; |
+ } |
+ if (!is_audio && video_stream_) { |
+ media::VideoDecoderConfig config = video_stream_->video_decoder_config(); |
+ configs->video_codec = config.codec(); |
+ configs->video_size = config.natural_size(); |
+ configs->is_video_encrypted = config.is_encrypted(); |
+ configs->video_extra_data = std::vector<uint8>( |
+ config.extra_data(), config.extra_data() + config.extra_data_size()); |
+ return true; |
+ } |
+ return false; |
+} |
+ |
} // namespace content |