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

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 2b26541a75109c87feafa993501dfc3d2699ba23..663cedf23b471977f25e4a4cbadbcb2c0ba8285f 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -95,14 +95,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) {
@@ -428,8 +429,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();
+ clock_->SetDuration(duration);
+ }
+
+ if (old_duration != duration)
+ new_duration_cb_.Run();
}
void Pipeline::SetTotalBytes(int64 total_bytes) {
@@ -544,13 +552,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) {
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