From 500c8ab770fa3f9b0581b489704b92c0fcc0de08 Mon Sep 17 00:00:00 2001 From: "acolwell@chromium.org" Date: Thu, 26 Apr 2012 00:11:55 +0000 Subject: Replace StreamParserHost interface with callbacks. BUG=122909 TEST=Existing ChunkDemuxer tests cover this change. Review URL: http://codereview.chromium.org/10134066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134020 0039d316-1c4b-4281-b951-d872f2087c98 --- media/webm/webm_stream_parser.cc | 29 +++++++++++++++-------------- media/webm/webm_stream_parser.h | 8 ++++++-- 2 files changed, 21 insertions(+), 16 deletions(-) (limited to 'media/webm') diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc index c0b01fc..94e3256 100644 --- a/media/webm/webm_stream_parser.cc +++ b/media/webm/webm_stream_parser.cc @@ -181,22 +181,26 @@ bool FFmpegConfigHelper::SetupStreamConfigs() { } WebMStreamParser::WebMStreamParser() - : state_(kWaitingForInit), - host_(NULL) { + : state_(kWaitingForInit) { } WebMStreamParser::~WebMStreamParser() {} -void WebMStreamParser::Init(const InitCB& init_cb, StreamParserHost* host) { +void WebMStreamParser::Init(const InitCB& init_cb, + const NewConfigCB& config_cb, + const NewBuffersCB& audio_cb, + const NewBuffersCB& video_cb) { DCHECK_EQ(state_, kWaitingForInit); DCHECK(init_cb_.is_null()); - DCHECK(!host_); DCHECK(!init_cb.is_null()); - DCHECK(host); + DCHECK(!config_cb.is_null()); + DCHECK(!audio_cb.is_null() || !video_cb.is_null()); ChangeState(kParsingHeaders); init_cb_ = init_cb; - host_ = host; + config_cb_ = config_cb; + audio_cb_ = audio_cb; + video_cb_ = video_cb; } void WebMStreamParser::Flush() { @@ -328,8 +332,7 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { if (!config_helper.Parse(data, bytes_parsed)) return -1; - host_->OnNewConfigs(config_helper.audio_config(), - config_helper.video_config()); + config_cb_.Run(config_helper.audio_config(),config_helper.video_config()); cluster_parser_.reset(new WebMClusterParser( info_parser.timecode_scale(), @@ -372,15 +375,13 @@ int WebMStreamParser::ParseCluster(const uint8* data, int size) { if (bytes_parsed <= 0) return bytes_parsed; - const StreamParserHost::BufferQueue& audio_buffers = - cluster_parser_->audio_buffers(); - const StreamParserHost::BufferQueue& video_buffers = - cluster_parser_->video_buffers(); + const BufferQueue& audio_buffers = cluster_parser_->audio_buffers(); + const BufferQueue& video_buffers = cluster_parser_->video_buffers(); - if (!audio_buffers.empty() && !host_->OnAudioBuffers(audio_buffers)) + if (!audio_buffers.empty() && !audio_cb_.Run(audio_buffers)) return -1; - if (!video_buffers.empty() && !host_->OnVideoBuffers(video_buffers)) + if (!video_buffers.empty() && !video_cb_.Run(video_buffers)) return -1; return bytes_parsed; diff --git a/media/webm/webm_stream_parser.h b/media/webm/webm_stream_parser.h index 699b469..0311297 100644 --- a/media/webm/webm_stream_parser.h +++ b/media/webm/webm_stream_parser.h @@ -22,7 +22,9 @@ class WebMStreamParser : public StreamParser { virtual ~WebMStreamParser(); // StreamParser implementation. - virtual void Init(const InitCB& init_cb, StreamParserHost* host) OVERRIDE; + virtual void Init(const InitCB& init_cb, const NewConfigCB& config_cb, + const NewBuffersCB& audio_cb, + const NewBuffersCB& video_cb) OVERRIDE; virtual void Flush() OVERRIDE; virtual bool Parse(const uint8* buf, int size) OVERRIDE; @@ -57,7 +59,9 @@ class WebMStreamParser : public StreamParser { State state_; InitCB init_cb_; - StreamParserHost* host_; + NewConfigCB config_cb_; + NewBuffersCB audio_cb_; + NewBuffersCB video_cb_; scoped_ptr cluster_parser_; ByteQueue byte_queue_; -- cgit v1.1