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

Unified Diff: content/renderer/media/media_stream_video_source.cc

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More cleanup. Created 6 years, 10 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: content/renderer/media/media_stream_video_source.cc
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc
index 118d66e3cddc59faa72ed1fd4c7448c0bc0c377e..3fa5d6b399e06a22cd42a470c5536ead378e4d04 100644
--- a/content/renderer/media/media_stream_video_source.cc
+++ b/content/renderer/media/media_stream_video_source.cc
@@ -214,6 +214,12 @@ const media::VideoCaptureFormat& GetBestCaptureFormat(
} // anonymous namespace
+// static
+MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource(
+ const blink::WebMediaStreamSource& source) {
+ return static_cast<MediaStreamVideoSource*>(source.extraData());
+}
+
MediaStreamVideoSource::MediaStreamVideoSource(
MediaStreamDependencyFactory* factory)
: state_(NEW),
@@ -223,6 +229,7 @@ MediaStreamVideoSource::MediaStreamVideoSource(
}
MediaStreamVideoSource::~MediaStreamVideoSource() {
+ DVLOG(3) << "~MediaStreamVideoSource()";
}
void MediaStreamVideoSource::AddTrack(
@@ -230,8 +237,15 @@ void MediaStreamVideoSource::AddTrack(
const blink::WebMediaConstraints& constraints,
const ConstraintsCallback& callback) {
DCHECK(CalledOnValidThread());
- requested_constraints_.push_back(RequestedConstraints(constraints,
- callback));
+ MediaStreamVideoTrack* video_track =
+ MediaStreamVideoTrack::GetVideoTrack(track);
+ DCHECK(std::find(tracks_.begin(), tracks_.end(),
+ video_track) == tracks_.end());
+ tracks_.push_back(video_track);
+
+ requested_constraints_.push_back(
+ RequestedConstraints(constraints, callback));
+
switch (state_) {
case NEW: {
// Tab capture and Screen capture needs the maximum requested height
@@ -254,8 +268,8 @@ void MediaStreamVideoSource::AddTrack(
}
case STARTING:
case RETRIEVING_CAPABILITIES: {
- // The |callback| will be triggered once the delegate has started or
- // the capabilitites has been retrieved.
+ // The |callback| will be triggered once the source has started or
+ // the capabilities has been retrieved.
break;
}
case ENDED:
@@ -266,9 +280,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() {
@@ -298,12 +314,18 @@ void MediaStreamVideoSource::DoStopSource() {
DVLOG(3) << "DoStopSource()";
StopSourceImpl();
state_ = ENDED;
+ SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
}
void MediaStreamVideoSource::DeliverVideoFrame(
const scoped_refptr<media::VideoFrame>& frame) {
if (capture_adapter_)
capture_adapter_->OnFrameCaptured(frame);
+
+ for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
Ronghua Wu (Left Chromium) 2014/03/01 01:26:04 should we do this if capture_adapter_ is not null?
perkj_chrome 2014/03/02 09:20:44 No- capture_adapter_ provides frames to the webrtc
Ronghua Wu (Left Chromium) 2014/03/04 01:04:11 Assume you meant webrtc::VideoSource. So you are s
perkj_chrome 2014/03/04 10:44:51 Currently they work in parallell. ie video frames
+ it != tracks_.end(); ++it) {
+ (*it)->OnVideoFrame(frame);
+ }
}
void MediaStreamVideoSource::OnSupportedFormats(
@@ -377,8 +399,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);
@@ -390,7 +413,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(

Powered by Google App Engine
This is Rietveld 408576698