Chromium Code Reviews| Index: media/mojo/services/mojo_demuxer_stream_adapter.cc |
| diff --git a/media/mojo/services/mojo_demuxer_stream_adapter.cc b/media/mojo/services/mojo_demuxer_stream_adapter.cc |
| index 5b60177afebe8420990edcfba4ca7d53ac75b7e0..c38ed42f8d849c6d51f3c060fc279bd4093b729f 100644 |
| --- a/media/mojo/services/mojo_demuxer_stream_adapter.cc |
| +++ b/media/mojo/services/mojo_demuxer_stream_adapter.cc |
| @@ -13,9 +13,11 @@ namespace media { |
| MojoDemuxerStreamAdapter::MojoDemuxerStreamAdapter( |
| mojo::DemuxerStreamPtr demuxer_stream, |
| - const base::Closure& stream_ready_cb) |
| + const base::Closure& stream_ready_cb, |
| + DemuxerStream::Type type) |
|
xhwang
2014/10/29 00:22:13
Can we drop this |type| param and populate |type_|
DaleCurtis
2014/10/30 23:16:56
Done.
|
| : demuxer_stream_(demuxer_stream.Pass()), |
| stream_ready_cb_(stream_ready_cb), |
| + type_(type), |
| weak_factory_(this) { |
| DVLOG(1) << __FUNCTION__; |
| demuxer_stream_.set_client(this); |
| @@ -35,21 +37,23 @@ void MojoDemuxerStreamAdapter::Read(const DemuxerStream::ReadCB& read_cb) { |
| } |
| AudioDecoderConfig MojoDemuxerStreamAdapter::audio_decoder_config() { |
| - DCHECK(!config_queue_.empty()); |
| - return config_queue_.front(); |
| + DCHECK_EQ(type_, DemuxerStream::AUDIO); |
| + DCHECK(!audio_config_queue_.empty()); |
| + return audio_config_queue_.front(); |
| } |
| VideoDecoderConfig MojoDemuxerStreamAdapter::video_decoder_config() { |
| - NOTREACHED(); |
| - return VideoDecoderConfig(); |
| + DCHECK_EQ(type_, DemuxerStream::VIDEO); |
| + DCHECK(!video_config_queue_.empty()); |
| + return video_config_queue_.front(); |
| } |
| -media::DemuxerStream::Type MojoDemuxerStreamAdapter::type() { |
| - return media::DemuxerStream::AUDIO; |
| +DemuxerStream::Type MojoDemuxerStreamAdapter::type() { |
| + return type_; |
| } |
| void MojoDemuxerStreamAdapter::EnableBitstreamConverter() { |
| - NOTREACHED(); |
| + NOTIMPLEMENTED(); |
| } |
| bool MojoDemuxerStreamAdapter::SupportsConfigChanges() { |
| @@ -66,16 +70,29 @@ void MojoDemuxerStreamAdapter::OnStreamReady( |
| DVLOG(1) << __FUNCTION__; |
| // TODO(tim): We don't support pipe streaming yet. |
| DCHECK(!pipe.is_valid()); |
| - DCHECK(!config_queue_.empty()); |
| + if (type_ == DemuxerStream::AUDIO) |
| + DCHECK(!audio_config_queue_.empty()); |
| + if (type_ == DemuxerStream::VIDEO) |
| + DCHECK(!video_config_queue_.empty()); |
|
xhwang
2014/10/29 00:22:13
Some clean up idea for the future. We have both au
DaleCurtis
2014/10/30 23:16:56
Maybe, that's the opposite of what you're suggesti
xhwang
2014/10/31 03:25:57
Yeah, I just felt that'd be something nice. But ho
|
| stream_ready_cb_.Run(); |
| } |
| void MojoDemuxerStreamAdapter::OnAudioDecoderConfigChanged( |
| mojo::AudioDecoderConfigPtr config) { |
| - config_queue_.push(config.To<media::AudioDecoderConfig>()); |
| + audio_config_queue_.push(config.To<AudioDecoderConfig>()); |
| + |
| + if (!read_cb_.is_null()) { |
| + read_cb_.Run(DemuxerStream::Status::kConfigChanged, NULL); |
| + read_cb_.Reset(); |
| + } |
| +} |
| + |
| +void MojoDemuxerStreamAdapter::OnVideoDecoderConfigChanged( |
| + mojo::VideoDecoderConfigPtr config) { |
| + video_config_queue_.push(config.To<VideoDecoderConfig>()); |
| if (!read_cb_.is_null()) { |
| - read_cb_.Run(media::DemuxerStream::Status::kConfigChanged, NULL); |
| + read_cb_.Run(DemuxerStream::Status::kConfigChanged, NULL); |
| read_cb_.Reset(); |
| } |
| } |
| @@ -85,21 +102,35 @@ void MojoDemuxerStreamAdapter::OnBufferReady( |
| mojo::MediaDecoderBufferPtr buffer) { |
| DVLOG(3) << __FUNCTION__; |
| DCHECK(!read_cb_.is_null()); |
| - DCHECK(!config_queue_.empty()); |
| + if (type_ == DemuxerStream::AUDIO) |
| + DCHECK(!audio_config_queue_.empty()); |
| + if (type_ == DemuxerStream::VIDEO) |
| + DCHECK(!video_config_queue_.empty()); |
| - media::DemuxerStream::Status media_status( |
| - static_cast<media::DemuxerStream::Status>(status)); |
| - scoped_refptr<media::DecoderBuffer> media_buffer( |
| - buffer.To<scoped_refptr<media::DecoderBuffer> >()); |
| + DemuxerStream::Status media_status( |
| + static_cast<DemuxerStream::Status>(status)); |
| + scoped_refptr<DecoderBuffer> media_buffer( |
| + buffer.To<scoped_refptr<DecoderBuffer> >()); |
| if (status == mojo::DemuxerStream::STATUS_CONFIG_CHANGED) { |
| DCHECK(!media_buffer.get()); |
| - config_queue_.pop(); |
| - // If the |config_queue_| is empty we need to wait for |
| - // OnAudioDecoderConfigChanged before invoking |read_cb|. |
| - if (config_queue_.empty()) |
| - return; |
| + if (type_ == DemuxerStream::AUDIO) { |
| + audio_config_queue_.pop(); |
| + |
| + // If the |config_queue_| is empty we need to wait for |
| + // OnAudioDecoderConfigChanged before invoking |read_cb|. |
| + if (audio_config_queue_.empty()) |
| + return; |
| + } |
| + if (type_ == DemuxerStream::VIDEO) { |
| + video_config_queue_.pop(); |
| + |
| + // If the |config_queue_| is empty we need to wait for |
| + // OnAudioDecoderConfigChanged before invoking |read_cb|. |
| + if (video_config_queue_.empty()) |
| + return; |
| + } |
| } |
| read_cb_.Run(media_status, media_buffer); |
| read_cb_.Reset(); |