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 c57da3af1729fe0df9ba72e8613742dd38d97f68..1285440c4732c6803e7b60763d2f91f5fe70ae5a 100644 |
--- a/media/base/android/media_decoder_job.cc |
+++ b/media/base/android/media_decoder_job.cc |
@@ -102,7 +102,7 @@ void MediaDecoderJob::Prefetch(const base::Closure& prefetch_cb) { |
RequestData(prefetch_cb); |
} |
-bool MediaDecoderJob::Decode( |
+scoped_ptr<DemuxerConfigs> MediaDecoderJob::Decode( |
base::TimeTicks start_time_ticks, |
base::TimeDelta start_presentation_timestamp, |
const DecoderCallback& callback) { |
@@ -117,18 +117,28 @@ bool MediaDecoderJob::Decode( |
base::Unretained(this), |
start_time_ticks, |
start_presentation_timestamp)); |
- return true; |
+ return scoped_ptr<DemuxerConfigs>(); |
} |
if (DemuxerStream::kConfigChanged == CurrentAccessUnit().status) { |
// Clear received data because we need to handle a config change. |
wolenetz
2014/05/08 17:41:47
nit: we no longer clear the data. Sorry I didn't c
qinmin
2014/05/08 17:48:37
Done.
|
decode_cb_.Reset(); |
- ClearData(); |
- return false; |
+ size_t index = CurrentReceivedDataChunkIndex(); |
+ if (received_data_[index].demuxer_configs.size() > 0) { |
+ return scoped_ptr<DemuxerConfigs>(new DemuxerConfigs( |
+ received_data_[index].demuxer_configs[0])); |
+ } else { |
+ ui_task_runner_->PostTask(FROM_HERE, |
+ base::Bind(&MediaDecoderJob::OnDecodeCompleted, |
+ base::Unretained(this), |
+ MEDIA_CODEC_OK, |
wolenetz
2014/05/08 17:41:47
nit: I think this is ok, but we would miss learnin
qinmin
2014/05/08 17:48:37
The crash will crash the browser process, probably
wolenetz
2014/05/08 20:05:25
nit: Can we do a CHECK, then, in media_source_dele
qinmin
2014/05/08 20:50:07
Sounds ok to me. modified the media_source_delegat
|
+ kNoTimestamp(), kNoTimestamp())); |
+ return scoped_ptr<DemuxerConfigs>(); |
+ } |
} |
DecodeCurrentAccessUnit(start_time_ticks, start_presentation_timestamp); |
- return true; |
+ return scoped_ptr<DemuxerConfigs>(); |
} |
void MediaDecoderJob::StopDecode() { |
@@ -462,11 +472,15 @@ void MediaDecoderJob::OnDecodeCompleted( |
const AccessUnit& MediaDecoderJob::CurrentAccessUnit() const { |
DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
DCHECK(HasData()); |
- int index = NoAccessUnitsRemainingInChunk(true) ? |
- inactive_demuxer_data_index() : current_demuxer_data_index_; |
+ size_t index = CurrentReceivedDataChunkIndex(); |
return received_data_[index].access_units[access_unit_index_[index]]; |
} |
+size_t MediaDecoderJob::CurrentReceivedDataChunkIndex() const { |
+ return NoAccessUnitsRemainingInChunk(true) ? |
+ inactive_demuxer_data_index() : current_demuxer_data_index_; |
+} |
+ |
bool MediaDecoderJob::NoAccessUnitsRemainingInChunk( |
bool is_active_chunk) const { |
DCHECK(ui_task_runner_->BelongsToCurrentThread()); |