summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiu@chromium.org <miu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-18 01:45:46 +0000
committermiu@chromium.org <miu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-18 01:45:46 +0000
commitea2211c2e057c9b60f2c0644c8289be5c56cefa2 (patch)
tree5dfee0db37e33760c767218dc53007da7d0d7cd8
parent1e5b6bf58a04ff80f1255090e91e196c8ba706fe (diff)
downloadchromium_src-ea2211c2e057c9b60f2c0644c8289be5c56cefa2.zip
chromium_src-ea2211c2e057c9b60f2c0644c8289be5c56cefa2.tar.gz
chromium_src-ea2211c2e057c9b60f2c0644c8289be5c56cefa2.tar.bz2
Enable "screencast" mode in RtcVideoCapturer for tab video mirroring. This allows the downstream implementation to select a different set of video encoding parameters to better optimize the user experience.
Review URL: https://chromiumcodereview.appspot.com/11187042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162604 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/media/media_stream_dependency_factory.cc12
-rw-r--r--content/renderer/media/media_stream_dependency_factory.h3
-rw-r--r--content/renderer/media/mock_media_stream_dependency_factory.cc3
-rw-r--r--content/renderer/media/mock_media_stream_dependency_factory.h3
-rw-r--r--content/renderer/media/peer_connection_handler_jsep_unittest.cc7
-rw-r--r--content/renderer/media/rtc_peer_connection_handler_unittest.cc7
-rw-r--r--content/renderer/media/rtc_video_capturer.cc8
-rw-r--r--content/renderer/media/rtc_video_capturer.h4
8 files changed, 30 insertions, 17 deletions
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc
index 15229d2..738581f 100644
--- a/content/renderer/media/media_stream_dependency_factory.cc
+++ b/content/renderer/media/media_stream_dependency_factory.cc
@@ -172,9 +172,12 @@ bool MediaStreamDependencyFactory::CreateNativeLocalMediaStream(
NOTIMPLEMENTED();
continue;
}
+ const bool is_screencast = (source_data->device_info().stream_type ==
+ content::MEDIA_TAB_VIDEO_CAPTURE);
scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
CreateLocalVideoTrack(UTF16ToUTF8(source.id()),
- source_data->device_info().session_id));
+ source_data->device_info().session_id,
+ is_screencast));
native_stream->AddTrack(video_track);
video_track->set_enabled(video_components[i].isEnabled());
}
@@ -253,9 +256,10 @@ MediaStreamDependencyFactory::CreateLocalMediaStream(
scoped_refptr<webrtc::LocalVideoTrackInterface>
MediaStreamDependencyFactory::CreateLocalVideoTrack(
const std::string& label,
- int video_session_id) {
- RtcVideoCapturer* capturer = new RtcVideoCapturer(video_session_id,
- vc_manager_.get());
+ int video_session_id,
+ bool is_screencast) {
+ RtcVideoCapturer* capturer = new RtcVideoCapturer(
+ video_session_id, vc_manager_.get(), is_screencast);
// The video track takes ownership of |capturer|.
return pc_factory_->CreateLocalVideoTrack(label, capturer).get();
diff --git a/content/renderer/media/media_stream_dependency_factory.h b/content/renderer/media/media_stream_dependency_factory.h
index c9deb11..faa0086 100644
--- a/content/renderer/media/media_stream_dependency_factory.h
+++ b/content/renderer/media/media_stream_dependency_factory.h
@@ -116,7 +116,8 @@ class CONTENT_EXPORT MediaStreamDependencyFactory
// Asks the PeerConnection factory to create a Local VideoTrack object.
virtual scoped_refptr<webrtc::LocalVideoTrackInterface>
CreateLocalVideoTrack(const std::string& label,
- int video_session_id);
+ int video_session_id,
+ bool is_screencast);
// Asks the PeerConnection factory to create a Local AudioTrack object.
virtual scoped_refptr<webrtc::LocalAudioTrackInterface>
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.cc b/content/renderer/media/mock_media_stream_dependency_factory.cc
index 42976a4..cf8645b 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.cc
+++ b/content/renderer/media/mock_media_stream_dependency_factory.cc
@@ -292,7 +292,8 @@ MockMediaStreamDependencyFactory::CreateLocalMediaStream(
scoped_refptr<webrtc::LocalVideoTrackInterface>
MockMediaStreamDependencyFactory::CreateLocalVideoTrack(
const std::string& label,
- int video_session_id) {
+ int video_session_id,
+ bool is_screencast) {
DCHECK(mock_pc_factory_created_);
scoped_refptr<webrtc::LocalVideoTrackInterface> track(
new talk_base::RefCountedObject<webrtc::MockLocalVideoTrack>(label));
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.h b/content/renderer/media/mock_media_stream_dependency_factory.h
index 76f9af8..0c36f62 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.h
+++ b/content/renderer/media/mock_media_stream_dependency_factory.h
@@ -85,7 +85,8 @@ class MockMediaStreamDependencyFactory : public MediaStreamDependencyFactory {
CreateLocalMediaStream(const std::string& label) OVERRIDE;
virtual scoped_refptr<webrtc::LocalVideoTrackInterface>
CreateLocalVideoTrack(const std::string& label,
- int video_session_id) OVERRIDE;
+ int video_session_id,
+ bool is_screencast) OVERRIDE;
virtual scoped_refptr<webrtc::LocalAudioTrackInterface>
CreateLocalAudioTrack(const std::string& label,
webrtc::AudioDeviceModule* audio_device) OVERRIDE;
diff --git a/content/renderer/media/peer_connection_handler_jsep_unittest.cc b/content/renderer/media/peer_connection_handler_jsep_unittest.cc
index 474e967..cfd0f0d 100644
--- a/content/renderer/media/peer_connection_handler_jsep_unittest.cc
+++ b/content/renderer/media/peer_connection_handler_jsep_unittest.cc
@@ -71,7 +71,8 @@ class PeerConnectionHandlerJsepTest : public ::testing::Test {
NULL));
native_stream->AddTrack(audio_track);
talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
- mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0));
+ mock_dependency_factory_->CreateLocalVideoTrack(
+ video_track_label, 0, false));
native_stream->AddTrack(video_track);
WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
@@ -103,8 +104,8 @@ class PeerConnectionHandlerJsepTest : public ::testing::Test {
mock_dependency_factory_->CreateLocalMediaStream(stream_label));
if (!video_track_label.empty()) {
talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
- mock_dependency_factory_->CreateLocalVideoTrack(video_track_label,
- 0));
+ mock_dependency_factory_->CreateLocalVideoTrack(
+ video_track_label, 0, false));
stream->AddTrack(video_track);
}
if (!audio_track_label.empty()) {
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index b2eb8fb..b65a0d6 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -75,7 +75,8 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
NULL));
native_stream->AddTrack(audio_track);
scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
- mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0));
+ mock_dependency_factory_->CreateLocalVideoTrack(
+ video_track_label, 0, false));
native_stream->AddTrack(video_track);
WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
@@ -107,8 +108,8 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
mock_dependency_factory_->CreateLocalMediaStream(stream_label));
if (!video_track_label.empty()) {
scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
- mock_dependency_factory_->CreateLocalVideoTrack(video_track_label,
- 0));
+ mock_dependency_factory_->CreateLocalVideoTrack(
+ video_track_label, 0, false));
stream->AddTrack(video_track);
}
if (!audio_track_label.empty()) {
diff --git a/content/renderer/media/rtc_video_capturer.cc b/content/renderer/media/rtc_video_capturer.cc
index 08dca45..5afebdb 100644
--- a/content/renderer/media/rtc_video_capturer.cc
+++ b/content/renderer/media/rtc_video_capturer.cc
@@ -8,8 +8,10 @@
RtcVideoCapturer::RtcVideoCapturer(
const media::VideoCaptureSessionId id,
- VideoCaptureImplManager* vc_manager)
- : delegate_(new RtcVideoCaptureDelegate(id, vc_manager)),
+ VideoCaptureImplManager* vc_manager,
+ bool is_screencast)
+ : is_screencast_(is_screencast),
+ delegate_(new RtcVideoCaptureDelegate(id, vc_manager)),
state_(video_capture::kStopped) {
}
@@ -61,7 +63,7 @@ bool RtcVideoCapturer::GetPreferredFourccs(std::vector<uint32>* fourccs) {
}
bool RtcVideoCapturer::IsScreencast() {
- return false;
+ return is_screencast_;
}
bool RtcVideoCapturer::GetBestCaptureFormat(const cricket::VideoFormat& desired,
diff --git a/content/renderer/media/rtc_video_capturer.h b/content/renderer/media/rtc_video_capturer.h
index 7888bf5..8d929c8 100644
--- a/content/renderer/media/rtc_video_capturer.h
+++ b/content/renderer/media/rtc_video_capturer.h
@@ -23,7 +23,8 @@ class RtcVideoCapturer
: public cricket::VideoCapturer {
public:
RtcVideoCapturer(const media::VideoCaptureSessionId id,
- VideoCaptureImplManager* vc_manager);
+ VideoCaptureImplManager* vc_manager,
+ bool is_screencast);
virtual ~RtcVideoCapturer();
// cricket::VideoCapturer implementation.
@@ -42,6 +43,7 @@ class RtcVideoCapturer
virtual void OnFrameCaptured(
const media::VideoCapture::VideoFrameBuffer& frame);
+ const bool is_screencast_;
scoped_refptr<RtcVideoCaptureDelegate> delegate_;
video_capture::State state_;
base::Time start_time_;