diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 01:26:40 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 01:26:40 +0000 |
commit | cef6492128ea70329523cbcf5d4c204660090857 (patch) | |
tree | 7386081bed04bb489d9e19fa64f8090ff4bfb6a4 /chrome/renderer | |
parent | b02c01713a168403f65d5193ad6934d761c7fbaa (diff) | |
download | chromium_src-cef6492128ea70329523cbcf5d4c204660090857.zip chromium_src-cef6492128ea70329523cbcf5d4c204660090857.tar.gz chromium_src-cef6492128ea70329523cbcf5d4c204660090857.tar.bz2 |
Adding callback support to media filter Initialize() and Seek().
Also includes unit tests for AudioRendererBase and VideoRendererBase.
I had to rollback my first attempt at this change. Original review: http://codereview.chromium.org/155469
BUG=16014,16031
TEST=media_unittests, layout tests
Review URL: http://codereview.chromium.org/155608
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20836 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/media/buffered_data_source.cc | 36 | ||||
-rw-r--r-- | chrome/renderer/media/buffered_data_source.h | 6 |
2 files changed, 28 insertions, 14 deletions
diff --git a/chrome/renderer/media/buffered_data_source.cc b/chrome/renderer/media/buffered_data_source.cc index ef987a5..edec5c1 100644 --- a/chrome/renderer/media/buffered_data_source.cc +++ b/chrome/renderer/media/buffered_data_source.cc @@ -532,14 +532,20 @@ void BufferedDataSource::Stop() { resource_loader->Stop(); } -bool BufferedDataSource::Initialize(const std::string& url) { +void BufferedDataSource::Initialize(const std::string& url, + media::FilterCallback* callback) { + DCHECK(callback); + initialize_callback_.reset(callback); + // Save the url. url_ = GURL(url); // Make sure we support the scheme of the URL. if (!IsSchemeSupported(url_)) { host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; + initialize_callback_->Run(); + initialize_callback_.reset(); + return; } media_format_.SetAsString(media::MediaFormat::kMimeType, @@ -562,16 +568,19 @@ bool BufferedDataSource::Initialize(const std::string& url) { } // Use the local reference to start the request. - if (resource_loader) { - if (net::ERR_IO_PENDING != resource_loader->Start( - NewCallback(this, &BufferedDataSource::InitialRequestStarted))) { - host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; - } - return true; + if (!resource_loader) { + host()->Error(media::PIPELINE_ERROR_NETWORK); + initialize_callback_->Run(); + initialize_callback_.reset(); + return; + } + + if (net::ERR_IO_PENDING != resource_loader->Start( + NewCallback(this, &BufferedDataSource::InitialRequestStarted))) { + host()->Error(media::PIPELINE_ERROR_NETWORK); + initialize_callback_->Run(); + initialize_callback_.reset(); } - host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; } size_t BufferedDataSource::Read(uint8* data, size_t size) { @@ -688,7 +697,7 @@ void BufferedDataSource::InitialRequestStarted(int error) { } void BufferedDataSource::OnInitialRequestStarted(int error) { - // Acquiring a lock should not be needed because stopped_ is only written + // Acquiring a lock should not be needed because |stopped_| is only written // on pipeline thread and we are on pipeline thread but just to be safe. AutoLock auto_lock(lock_); if (!stopped_) { @@ -699,11 +708,12 @@ void BufferedDataSource::OnInitialRequestStarted(int error) { // TODO(hclam): report the amount of bytes buffered accurately. host()->SetBufferedBytes(total_bytes_); } - host()->InitializationComplete(); } else { host()->Error(media::PIPELINE_ERROR_NETWORK); } } + initialize_callback_->Run(); + initialize_callback_.reset(); } const media::MediaFormat& BufferedDataSource::media_format() { diff --git a/chrome/renderer/media/buffered_data_source.h b/chrome/renderer/media/buffered_data_source.h index d676142..d7fa080 100644 --- a/chrome/renderer/media/buffered_data_source.h +++ b/chrome/renderer/media/buffered_data_source.h @@ -204,7 +204,8 @@ class BufferedDataSource : public media::DataSource { webkit_glue::MediaResourceLoaderBridgeFactory*>( message_loop, bridge_factory); } - virtual bool Initialize(const std::string& url); + virtual void Initialize(const std::string& url, + media::FilterCallback* callback); // media::MediaFilter implementation. virtual void Stop(); @@ -261,6 +262,9 @@ class BufferedDataSource : public media::DataSource { // The message loop of the pipeline thread. MessageLoop* pipeline_loop_; + // Filter callbacks. + scoped_ptr<media::FilterCallback> initialize_callback_; + DISALLOW_COPY_AND_ASSIGN(BufferedDataSource); }; |