Chromium Code Reviews

Unified Diff: media/base/composite_filter.cc

Issue 8686010: <video> decode in hardware! (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: media/base/composite_filter.cc
diff --git a/media/base/composite_filter.cc b/media/base/composite_filter.cc
index f613f362ffb47debeaf2daeb6c512c9d8b11b311..ffcba984e36f944f5071d40e23e6c9c427317407 100644
--- a/media/base/composite_filter.cc
+++ b/media/base/composite_filter.cc
@@ -69,6 +69,27 @@ bool CompositeFilter::AddFilter(scoped_refptr<Filter> filter) {
return true;
}
+bool CompositeFilter::RemoveFilter(scoped_refptr<Filter> filter) {
+ DCHECK_EQ(message_loop_, MessageLoop::current());
+ if (!filter.get() || state_ != kCreated || !host())
+ return false;
+
+ bool found = false;
+ for (FilterVector::iterator it = filters_.begin();
+ it != filters_.end() && !found; ++it) {
+ if (it->get() == filter.get()) {
+ filters_.erase(it);
+ found = true;
+ }
+ }
+ filter->clear_host();
+
+ if (!found)
+ return false;
+
+ return true;
+}
+
void CompositeFilter::set_host(FilterHost* host) {
DCHECK_EQ(message_loop_, MessageLoop::current());
DCHECK(host);
@@ -339,7 +360,6 @@ void CompositeFilter::SerialCallback() {
DispatchPendingCallback(status_);
return;
}
-
if (!filters_.empty())
sequence_index_++;
@@ -377,7 +397,6 @@ void CompositeFilter::ParallelCallback() {
void CompositeFilter::OnCallSequenceDone() {
State next_state = GetNextState(state_);
-
if (next_state == kInvalid) {
// We somehow got into an unexpected state.
ChangeState(kError);

Powered by Google App Engine