summaryrefslogtreecommitdiffstats
path: root/content/renderer/media/media_stream_video_source.cc
diff options
context:
space:
mode:
authorperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-21 18:05:30 +0000
committerperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-21 18:05:30 +0000
commitcce836c76f84b6ee0172fdfa8f67f6f2a75d0436 (patch)
treeaa186d56e50f8fe171449af9583007929d8276a4 /content/renderer/media/media_stream_video_source.cc
parentcfda411cede2280af945712a502e5fdd09e6b6d0 (diff)
downloadchromium_src-cce836c76f84b6ee0172fdfa8f67f6f2a75d0436.zip
chromium_src-cce836c76f84b6ee0172fdfa8f67f6f2a75d0436.tar.gz
chromium_src-cce836c76f84b6ee0172fdfa8f67f6f2a75d0436.tar.bz2
Revert "Revert r255846 "MediaStream VideoTrack implementation.""
This cl relands MediaStreamVideoTrack. https://codereview.chromium.org/155853002 originally landed in r255846. The real problem is fixed in https://codereview.chromium.org/200133004/. BUG=334241 Review URL: https://codereview.chromium.org/206063005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258626 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media/media_stream_video_source.cc')
-rw-r--r--content/renderer/media/media_stream_video_source.cc42
1 files changed, 33 insertions, 9 deletions
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc
index d3359c6..57caf07 100644
--- a/content/renderer/media/media_stream_video_source.cc
+++ b/content/renderer/media/media_stream_video_source.cc
@@ -11,6 +11,7 @@
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
namespace content {
@@ -276,6 +277,12 @@ void ReleaseOriginalFrame(
} // anonymous namespace
+// static
+MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource(
+ const blink::WebMediaStreamSource& source) {
+ return static_cast<MediaStreamVideoSource*>(source.extraData());
+}
+
MediaStreamVideoSource::MediaStreamVideoSource(
MediaStreamDependencyFactory* factory)
: state_(NEW),
@@ -288,12 +295,17 @@ MediaStreamVideoSource::~MediaStreamVideoSource() {
}
void MediaStreamVideoSource::AddTrack(
- const blink::WebMediaStreamTrack& track,
+ MediaStreamVideoTrack* track,
const blink::WebMediaConstraints& constraints,
const ConstraintsCallback& callback) {
DCHECK(CalledOnValidThread());
- requested_constraints_.push_back(RequestedConstraints(constraints,
- callback));
+ DCHECK(std::find(tracks_.begin(), tracks_.end(),
+ track) == tracks_.end());
+ tracks_.push_back(track);
+
+ requested_constraints_.push_back(
+ RequestedConstraints(constraints, callback));
+
switch (state_) {
case NEW: {
// Tab capture and Screen capture needs the maximum requested height
@@ -312,7 +324,7 @@ void MediaStreamVideoSource::AddTrack(
}
case STARTING:
case RETRIEVING_CAPABILITIES: {
- // The |callback| will be triggered once the delegate has started or
+ // The |callback| will be triggered once the source has started or
// the capabilities have been retrieved.
break;
}
@@ -324,9 +336,11 @@ void MediaStreamVideoSource::AddTrack(
}
}
-void MediaStreamVideoSource::RemoveTrack(
- const blink::WebMediaStreamTrack& track) {
- // TODO(ronghuawu): What should be done here? Do we really need RemoveTrack?
+void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) {
+ std::vector<MediaStreamVideoTrack*>::iterator it =
+ std::find(tracks_.begin(), tracks_.end(), video_track);
+ DCHECK(it != tracks_.end());
+ tracks_.erase(it);
}
void MediaStreamVideoSource::InitAdapter() {
@@ -356,6 +370,7 @@ void MediaStreamVideoSource::DoStopSource() {
DVLOG(3) << "DoStopSource()";
StopSourceImpl();
state_ = ENDED;
+ SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
}
void MediaStreamVideoSource::DeliverVideoFrame(
@@ -395,6 +410,11 @@ void MediaStreamVideoSource::DeliverVideoFrame(
capture_adapter_) {
capture_adapter_->OnFrameCaptured(video_frame);
}
+
+ for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
+ it != tracks_.end(); ++it) {
+ (*it)->OnVideoFrame(video_frame);
+ }
}
void MediaStreamVideoSource::OnSupportedFormats(
@@ -474,8 +494,9 @@ void MediaStreamVideoSource::FinalizeAddTrack() {
callbacks.swap(requested_constraints_);
for (std::vector<RequestedConstraints>::iterator it = callbacks.begin();
it != callbacks.end(); ++it) {
+
bool success = state_ == STARTED &&
- !FilterFormats(it->constraints, formats).empty();
+ !FilterFormats(it->constraints, formats).empty();
DVLOG(3) << "FinalizeAddTrack() success " << success;
if (!it->callback.is_null())
it->callback.Run(this, success);
@@ -487,7 +508,10 @@ void MediaStreamVideoSource::SetReadyState(
if (!owner().isNull()) {
owner().setReadyState(state);
}
- // TODO(perkj): Notify all registered tracks.
+ for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
+ it != tracks_.end(); ++it) {
+ (*it)->OnReadyStateChanged(state);
+ }
}
MediaStreamVideoSource::RequestedConstraints::RequestedConstraints(