| Index: webrtc/media/base/capturemanager.cc
|
| diff --git a/webrtc/media/base/capturemanager.cc b/webrtc/media/base/capturemanager.cc
|
| index 3628fb306d8663a0f18f5b30224a9bc4751777df..689b6d762024155c45bff736134b4608de50b620 100644
|
| --- a/webrtc/media/base/capturemanager.cc
|
| +++ b/webrtc/media/base/capturemanager.cc
|
| @@ -23,7 +23,7 @@
|
| public:
|
| static const VideoFormatPod kDefaultCaptureFormat;
|
|
|
| - explicit VideoCapturerState(VideoCapturer* capturer);
|
| + static VideoCapturerState* Create(VideoCapturer* video_capturer);
|
| ~VideoCapturerState() {}
|
|
|
| void AddCaptureResolution(const VideoFormat& desired_format);
|
| @@ -32,9 +32,13 @@
|
|
|
| int IncCaptureStartRef();
|
| int DecCaptureStartRef();
|
| + CaptureRenderAdapter* adapter() {
|
| + RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| + return adapter_.get();
|
| + }
|
| VideoCapturer* GetVideoCapturer() {
|
| RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| - return video_capturer_;
|
| + return adapter()->video_capturer();
|
| }
|
|
|
| int start_count() const {
|
| @@ -49,9 +53,11 @@
|
| };
|
| typedef std::vector<CaptureResolutionInfo> CaptureFormats;
|
|
|
| + explicit VideoCapturerState(CaptureRenderAdapter* adapter);
|
| +
|
| rtc::ThreadChecker thread_checker_;
|
| -
|
| - VideoCapturer* video_capturer_;
|
| + rtc::scoped_ptr<CaptureRenderAdapter> adapter_;
|
| +
|
| int start_count_;
|
| CaptureFormats capture_formats_;
|
| };
|
| @@ -60,8 +66,17 @@
|
| 640, 360, FPS_TO_INTERVAL(30), FOURCC_ANY
|
| };
|
|
|
| -VideoCapturerState::VideoCapturerState(VideoCapturer* capturer)
|
| - : video_capturer_(capturer), start_count_(1) {}
|
| +VideoCapturerState::VideoCapturerState(CaptureRenderAdapter* adapter)
|
| + : adapter_(adapter), start_count_(1) {}
|
| +
|
| +// static
|
| +VideoCapturerState* VideoCapturerState::Create(VideoCapturer* video_capturer) {
|
| + CaptureRenderAdapter* adapter = CaptureRenderAdapter::Create(video_capturer);
|
| + if (!adapter) {
|
| + return NULL;
|
| + }
|
| + return new VideoCapturerState(adapter);
|
| +}
|
|
|
| void VideoCapturerState::AddCaptureResolution(
|
| const VideoFormat& desired_format) {
|
| @@ -261,10 +276,11 @@
|
| if (!video_capturer || !sink) {
|
| return;
|
| }
|
| - rtc::VideoSinkWants wants;
|
| - // Renderers must be able to apply rotation.
|
| - wants.rotation_applied = false;
|
| - video_capturer->AddOrUpdateSink(sink, wants);
|
| + CaptureRenderAdapter* adapter = GetAdapter(video_capturer);
|
| + if (!adapter) {
|
| + return;
|
| + }
|
| + adapter->AddSink(sink);
|
| }
|
|
|
| void CaptureManager::RemoveVideoSink(
|
| @@ -274,7 +290,11 @@
|
| if (!video_capturer || !sink) {
|
| return;
|
| }
|
| - video_capturer->RemoveSink(sink);
|
| + CaptureRenderAdapter* adapter = GetAdapter(video_capturer);
|
| + if (!adapter) {
|
| + return;
|
| + }
|
| + adapter->RemoveSink(sink);
|
| }
|
|
|
| bool CaptureManager::IsCapturerRegistered(VideoCapturer* video_capturer) const {
|
| @@ -284,7 +304,11 @@
|
|
|
| bool CaptureManager::RegisterVideoCapturer(VideoCapturer* video_capturer) {
|
| RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| - VideoCapturerState* capture_state = new VideoCapturerState(video_capturer);
|
| + VideoCapturerState* capture_state =
|
| + VideoCapturerState::Create(video_capturer);
|
| + if (!capture_state) {
|
| + return false;
|
| + }
|
| capture_states_[video_capturer] = capture_state;
|
| SignalCapturerStateChange.repeat(video_capturer->SignalStateChange);
|
| return true;
|
| @@ -352,4 +376,14 @@
|
| return iter->second;
|
| }
|
|
|
| +CaptureRenderAdapter* CaptureManager::GetAdapter(
|
| + VideoCapturer* video_capturer) const {
|
| + RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| + VideoCapturerState* capture_state = GetCaptureState(video_capturer);
|
| + if (!capture_state) {
|
| + return NULL;
|
| + }
|
| + return capture_state->adapter();
|
| +}
|
| +
|
| } // namespace cricket
|
|
|