Index: media/filters/chunk_demuxer.cc |
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
index d3f532cc9fbb13a601ec18ef57ccef79ed50a859..787c75cd66c507ddac10c06fabb512c3101f79bd 100644 |
--- a/media/filters/chunk_demuxer.cc |
+++ b/media/filters/chunk_demuxer.cc |
@@ -448,7 +448,6 @@ void ChunkDemuxer::FlushData() { |
if (video_.get()) |
video_->Flush(); |
- byte_queue_.Reset(); |
stream_parser_->Flush(); |
seek_waits_for_data_ = true; |
@@ -468,55 +467,34 @@ bool ChunkDemuxer::AppendData(const uint8* data, size_t length) { |
{ |
base::AutoLock auto_lock(lock_); |
- byte_queue_.Push(data, length); |
- |
- const uint8* cur = NULL; |
- int cur_size = 0; |
- int bytes_parsed = 0; |
- int result = -1; |
- |
// Capture |seek_waits_for_data_| state before we start parsing. |
// Its state can be changed by OnAudioBuffers() or OnVideoBuffers() |
// calls during the parse. |
bool old_seek_waits_for_data = seek_waits_for_data_; |
- byte_queue_.Peek(&cur, &cur_size); |
- |
- do { |
- switch(state_) { |
- case INITIALIZING: |
- result = stream_parser_->Parse(cur, cur_size); |
- if (result < 0) { |
- DCHECK_EQ(state_, INITIALIZING); |
- ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); |
- return true; |
- } |
- break; |
- |
- case INITIALIZED: { |
- result = stream_parser_->Parse(cur, cur_size); |
- if (result < 0) { |
- ReportError_Locked(PIPELINE_ERROR_DECODE); |
- return true; |
- } |
- } break; |
- |
- case WAITING_FOR_INIT: |
- case ENDED: |
- case PARSE_ERROR: |
- case SHUTDOWN: |
- DVLOG(1) << "AppendData(): called in unexpected state " << state_; |
- return false; |
- } |
+ switch(state_) { |
+ case INITIALIZING: |
+ if (!stream_parser_->Parse(data, length)) { |
+ DCHECK_EQ(state_, INITIALIZING); |
+ ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); |
+ return true; |
+ } |
+ break; |
- if (result > 0) { |
- cur += result; |
- cur_size -= result; |
- bytes_parsed += result; |
- } |
- } while (result > 0 && cur_size > 0); |
+ case INITIALIZED: { |
+ if (!stream_parser_->Parse(data, length)) { |
+ ReportError_Locked(PIPELINE_ERROR_DECODE); |
+ return true; |
+ } |
+ } break; |
- byte_queue_.Pop(bytes_parsed); |
+ case WAITING_FOR_INIT: |
+ case ENDED: |
+ case PARSE_ERROR: |
+ case SHUTDOWN: |
+ DVLOG(1) << "AppendData(): called in unexpected state " << state_; |
+ return false; |
+ } |
// Check to see if parsing triggered seek_waits_for_data_ to go from true to |
// false. This indicates we have parsed enough data to complete the seek. |
@@ -674,23 +652,29 @@ void ChunkDemuxer::OnStreamParserInitDone(bool success, |
cb.Run(PIPELINE_OK); |
} |
-bool ChunkDemuxer::OnNewAudioConfig(const AudioDecoderConfig& config) { |
+bool ChunkDemuxer::OnNewConfigs(const AudioDecoderConfig& audio_config, |
+ const VideoDecoderConfig& video_config) { |
+ DCHECK(audio_config.IsValidConfig() || video_config.IsValidConfig()); |
lock_.AssertAcquired(); |
- // Only allow a single audio config for now. |
- if (audio_.get()) |
+ |
+ if (!audio_config.IsValidConfig() && !video_config.IsValidConfig()) |
scherkus (not reviewing)
2012/04/24 01:40:04
Considering we handle the DCHECK (and that the pre
acolwell GONE FROM CHROMIUM
2012/04/24 16:25:55
Done. Picked option 2
|
return false; |
- audio_ = new ChunkDemuxerStream(config); |
- return true; |
-} |
+ // Only allow a single audio config for now. |
scherkus (not reviewing)
2012/04/24 01:40:04
nit: you can either dupe this comment below for vi
acolwell GONE FROM CHROMIUM
2012/04/24 16:25:55
Done.
|
+ if (audio_config.IsValidConfig()) { |
+ if (audio_.get()) |
+ return false; |
-bool ChunkDemuxer::OnNewVideoConfig(const VideoDecoderConfig& config) { |
- lock_.AssertAcquired(); |
- // Only allow a single video config for now. |
- if (video_.get()) |
- return false; |
+ audio_ = new ChunkDemuxerStream(audio_config); |
+ } |
+ |
+ if (video_config.IsValidConfig()) { |
+ if (video_.get()) |
+ return false; |
+ |
+ video_ = new ChunkDemuxerStream(video_config); |
+ } |
- video_ = new ChunkDemuxerStream(config); |
return true; |
} |