summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 01:26:40 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 01:26:40 +0000
commitcef6492128ea70329523cbcf5d4c204660090857 (patch)
tree7386081bed04bb489d9e19fa64f8090ff4bfb6a4 /chrome/renderer
parentb02c01713a168403f65d5193ad6934d761c7fbaa (diff)
downloadchromium_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.cc36
-rw-r--r--chrome/renderer/media/buffered_data_source.h6
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);
};