| Index: media/base/android/media_decoder_job.cc
|
| diff --git a/media/base/android/media_decoder_job.cc b/media/base/android/media_decoder_job.cc
|
| index bceba43bc16f8f72ce6312bfd180078f11cd3b07..3e7e2ef7dee3ed6f8362320d2b78e1b37f684dbe 100644
|
| --- a/media/base/android/media_decoder_job.cc
|
| +++ b/media/base/android/media_decoder_job.cc
|
| @@ -203,13 +203,6 @@ void MediaDecoderJob::ReleaseDecoderResources() {
|
| release_resources_pending_ = true;
|
| }
|
|
|
| -bool MediaDecoderJob::SetDemuxerConfigs(const DemuxerConfigs& configs) {
|
| - bool config_changed = AreDemuxerConfigsChanged(configs);
|
| - if (config_changed)
|
| - UpdateDemuxerConfigs(configs);
|
| - return config_changed;
|
| -}
|
| -
|
| base::android::ScopedJavaLocalRef<jobject> MediaDecoderJob::GetMediaCrypto() {
|
| base::android::ScopedJavaLocalRef<jobject> media_crypto;
|
| if (drm_bridge_)
|
| @@ -335,19 +328,18 @@ void MediaDecoderJob::DecodeCurrentAccessUnit(
|
| int index = CurrentReceivedDataChunkIndex();
|
| const DemuxerConfigs& configs = received_data_[index].demuxer_configs[0];
|
| bool reconfigure_needed = IsCodecReconfigureNeeded(configs);
|
| - // TODO(qinmin): |config_changed_cb_| should be run after draining finishes.
|
| - // http://crbug.com/381975.
|
| - if (SetDemuxerConfigs(configs))
|
| - config_changed_cb_.Run();
|
| + SetDemuxerConfigs(configs);
|
| if (!drain_decoder_) {
|
| // If we haven't decoded any data yet, just skip the current access unit
|
| // and request the MediaCodec to be recreated on next Decode().
|
| if (skip_eos_enqueue_ || !reconfigure_needed) {
|
| need_to_reconfig_decoder_job_ =
|
| need_to_reconfig_decoder_job_ || reconfigure_needed;
|
| + // Report MEDIA_CODEC_OK status so decoder will continue decoding and
|
| + // MEDIA_CODEC_OUTPUT_FORMAT_CHANGED status will come later.
|
| ui_task_runner_->PostTask(FROM_HERE, base::Bind(
|
| &MediaDecoderJob::OnDecodeCompleted, base::Unretained(this),
|
| - MEDIA_CODEC_OUTPUT_FORMAT_CHANGED, kNoTimestamp(), kNoTimestamp()));
|
| + MEDIA_CODEC_OK, kNoTimestamp(), kNoTimestamp()));
|
| return;
|
| }
|
| // Start draining the decoder so that all the remaining frames are
|
| @@ -541,6 +533,9 @@ void MediaDecoderJob::OnDecodeCompleted(
|
| status = MEDIA_CODEC_OK;
|
| }
|
|
|
| + if (status == MEDIA_CODEC_OUTPUT_FORMAT_CHANGED && UpdateOutputFormat())
|
| + config_changed_cb_.Run();
|
| +
|
| if (release_resources_pending_) {
|
| ReleaseMediaCodecBridge();
|
| release_resources_pending_ = false;
|
|
|