OLD | NEW |
---|---|
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
54 CaptureRenderAdapter* CaptureRenderAdapter::Create( | 54 CaptureRenderAdapter* CaptureRenderAdapter::Create( |
55 VideoCapturer* video_capturer) { | 55 VideoCapturer* video_capturer) { |
56 if (!video_capturer) { | 56 if (!video_capturer) { |
57 return NULL; | 57 return NULL; |
58 } | 58 } |
59 CaptureRenderAdapter* return_value = new CaptureRenderAdapter(video_capturer); | 59 CaptureRenderAdapter* return_value = new CaptureRenderAdapter(video_capturer); |
60 return_value->Init(); // Can't fail. | 60 return_value->Init(); // Can't fail. |
61 return return_value; | 61 return return_value; |
62 } | 62 } |
63 | 63 |
64 bool CaptureRenderAdapter::AddRenderer(VideoRenderer* video_renderer) { | 64 void CaptureRenderAdapter::AddRenderer(VideoRenderer* video_renderer) { |
65 if (!video_renderer) { | 65 RTC_DCHECK(video_renderer); |
66 return false; | 66 |
67 } | |
68 rtc::CritScope cs(&capture_crit_); | 67 rtc::CritScope cs(&capture_crit_); |
69 if (IsRendererRegistered(*video_renderer)) { | 68 // This implements set semantics, the same renderer can only be |
70 return false; | 69 // added once. TODO(nisse): Is this really needed? |
tommi
2016/01/21 08:45:34
nit: move TODO to a separate line.
Agree that this
nisse-webrtc
2016/01/21 09:11:44
Done. I switched to using std::find, and deleted t
| |
71 } | 70 if (!IsRendererRegistered(*video_renderer)) |
72 video_renderers_.push_back(VideoRendererInfo(video_renderer)); | 71 video_renderers_.push_back(video_renderer); |
73 return true; | |
74 } | 72 } |
75 | 73 |
76 bool CaptureRenderAdapter::RemoveRenderer(VideoRenderer* video_renderer) { | 74 void CaptureRenderAdapter::RemoveRenderer(VideoRenderer* video_renderer) { |
77 if (!video_renderer) { | 75 RTC_DCHECK(video_renderer); |
78 return false; | 76 |
79 } | |
80 rtc::CritScope cs(&capture_crit_); | 77 rtc::CritScope cs(&capture_crit_); |
78 // TODO(nisse): Switch to using std::list, and use its remove | |
79 // method. And similarly in VideoTrackRenderers, which this class | |
80 // mostly duplicates. | |
81 for (VideoRenderers::iterator iter = video_renderers_.begin(); | 81 for (VideoRenderers::iterator iter = video_renderers_.begin(); |
82 iter != video_renderers_.end(); ++iter) { | 82 iter != video_renderers_.end(); ++iter) { |
83 if (video_renderer == iter->renderer) { | 83 if (video_renderer == *iter) { |
84 video_renderers_.erase(iter); | 84 video_renderers_.erase(iter); |
85 return true; | 85 break; |
86 } | 86 } |
87 } | 87 } |
88 return false; | |
89 } | 88 } |
90 | 89 |
91 void CaptureRenderAdapter::Init() { | 90 void CaptureRenderAdapter::Init() { |
92 video_capturer_->SignalVideoFrame.connect( | 91 video_capturer_->SignalVideoFrame.connect( |
93 this, | 92 this, |
94 &CaptureRenderAdapter::OnVideoFrame); | 93 &CaptureRenderAdapter::OnVideoFrame); |
95 } | 94 } |
96 | 95 |
97 void CaptureRenderAdapter::OnVideoFrame(VideoCapturer* capturer, | 96 void CaptureRenderAdapter::OnVideoFrame(VideoCapturer* capturer, |
98 const VideoFrame* video_frame) { | 97 const VideoFrame* video_frame) { |
99 rtc::CritScope cs(&capture_crit_); | 98 rtc::CritScope cs(&capture_crit_); |
100 if (video_renderers_.empty()) { | 99 if (video_renderers_.empty()) { |
101 return; | 100 return; |
102 } | 101 } |
103 MaybeSetRenderingSize(video_frame); | |
104 | 102 |
105 for (VideoRenderers::iterator iter = video_renderers_.begin(); | 103 for (auto* renderer : video_renderers_) |
106 iter != video_renderers_.end(); ++iter) { | 104 renderer->RenderFrame(video_frame); |
107 VideoRenderer* video_renderer = iter->renderer; | |
108 video_renderer->RenderFrame(video_frame); | |
109 } | |
110 } | 105 } |
111 | 106 |
112 // The renderer_crit_ lock needs to be taken when calling this function. | 107 // The renderer_crit_ lock needs to be taken when calling this function. |
113 void CaptureRenderAdapter::MaybeSetRenderingSize(const VideoFrame* frame) { | |
114 for (VideoRenderers::iterator iter = video_renderers_.begin(); | |
115 iter != video_renderers_.end(); ++iter) { | |
116 const bool new_resolution = iter->render_width != frame->GetWidth() || | |
117 iter->render_height != frame->GetHeight(); | |
118 if (new_resolution) { | |
119 iter->render_width = frame->GetWidth(); | |
120 iter->render_height = frame->GetHeight(); | |
121 } | |
122 } | |
123 } | |
124 | |
125 // The renderer_crit_ lock needs to be taken when calling this function. | |
126 bool CaptureRenderAdapter::IsRendererRegistered( | 108 bool CaptureRenderAdapter::IsRendererRegistered( |
127 const VideoRenderer& video_renderer) const { | 109 const VideoRenderer& video_renderer) const { |
128 for (VideoRenderers::const_iterator iter = video_renderers_.begin(); | 110 for (VideoRenderers::const_iterator iter = video_renderers_.begin(); |
129 iter != video_renderers_.end(); ++iter) { | 111 iter != video_renderers_.end(); ++iter) { |
tommi
2016/01/21 08:45:34
nit: you could update this loop too, but this meth
| |
130 if (&video_renderer == iter->renderer) { | 112 if (&video_renderer == *iter) { |
131 return true; | 113 return true; |
132 } | 114 } |
133 } | 115 } |
134 return false; | 116 return false; |
135 } | 117 } |
136 | 118 |
137 } // namespace cricket | 119 } // namespace cricket |
OLD | NEW |