Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Unified Diff: media/base/pipeline.cc

Issue 10800041: Update media duration if data is appended after the previous duration (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/pipeline.cc
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 24868cfac2c7941c714459e51b99360297d1df99..ca00baf5e756c8b037f97ac0ceb12be016aa1d7e 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -92,14 +92,15 @@ Pipeline::~Pipeline() {
void Pipeline::Start(scoped_ptr<FilterCollection> collection,
const PipelineStatusCB& ended_cb,
const PipelineStatusCB& error_cb,
- const PipelineStatusCB& start_cb) {
+ const PipelineStatusCB& start_cb,
+ const base::Closure& new_duration_cb) {
base::AutoLock auto_lock(lock_);
CHECK(!running_) << "Media pipeline is already running";
running_ = true;
message_loop_->PostTask(FROM_HERE, base::Bind(
&Pipeline::StartTask, this, base::Passed(&collection),
- ended_cb, error_cb, start_cb));
+ ended_cb, error_cb, start_cb, new_duration_cb));
}
void Pipeline::Stop(const base::Closure& stop_cb) {
@@ -419,8 +420,15 @@ void Pipeline::SetDuration(TimeDelta duration) {
MediaLogEvent::DURATION_SET, "duration", duration));
UMA_HISTOGRAM_LONG_TIMES("Media.Duration", duration);
- base::AutoLock auto_lock(lock_);
- clock_->SetDuration(duration);
+ base::TimeDelta old_duration;
+ {
+ base::AutoLock auto_lock(lock_);
+ old_duration = clock_->Duration();
acolwell GONE FROM CHROMIUM 2012/07/27 00:03:23 nit: How about just having a duration_changed bool
vrk (LEFT CHROMIUM) 2012/07/28 01:42:05 No longer necessary after getting rid of new_durat
+ clock_->SetDuration(duration);
+ }
+
+ if (old_duration != duration && !new_duration_cb_.is_null())
+ new_duration_cb_.Run();
}
void Pipeline::SetTotalBytes(int64 total_bytes) {
@@ -580,13 +588,15 @@ void Pipeline::OnUpdateStatistics(const PipelineStatistics& stats) {
void Pipeline::StartTask(scoped_ptr<FilterCollection> filter_collection,
const PipelineStatusCB& ended_cb,
const PipelineStatusCB& error_cb,
- const PipelineStatusCB& start_cb) {
+ const PipelineStatusCB& start_cb,
+ const base::Closure& new_duration_cb) {
acolwell GONE FROM CHROMIUM 2012/07/27 00:03:23 WDYT about just having WebMediaPlayerImpl or even
vrk (LEFT CHROMIUM) 2012/07/28 01:42:05 Done (in WebMediaPlayerImpl) and I agree, this is
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(kCreated, state_);
filter_collection_ = filter_collection.Pass();
ended_cb_ = ended_cb;
error_cb_ = error_cb;
seek_cb_ = start_cb;
+ new_duration_cb_ = new_duration_cb;
// Kick off initialization.
pipeline_init_state_.reset(new PipelineInitState());

Powered by Google App Engine
This is Rietveld 408576698