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

Side by Side Diff: webrtc/video/video_receive_stream.cc

Issue 1181653002: Base A/V synchronization on sync_labels. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « webrtc/video/video_receive_stream.h ('k') | webrtc/video_engine/vie_sync_module.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 29 matching lines...) Expand all
40 ss << "{decoders: ["; 40 ss << "{decoders: [";
41 for (size_t i = 0; i < decoders.size(); ++i) { 41 for (size_t i = 0; i < decoders.size(); ++i) {
42 ss << decoders[i].ToString(); 42 ss << decoders[i].ToString();
43 if (i != decoders.size() - 1) 43 if (i != decoders.size() - 1)
44 ss << ", "; 44 ss << ", ";
45 } 45 }
46 ss << ']'; 46 ss << ']';
47 ss << ", rtp: " << rtp.ToString(); 47 ss << ", rtp: " << rtp.ToString();
48 ss << ", renderer: " << (renderer != nullptr ? "(renderer)" : "nullptr"); 48 ss << ", renderer: " << (renderer != nullptr ? "(renderer)" : "nullptr");
49 ss << ", render_delay_ms: " << render_delay_ms; 49 ss << ", render_delay_ms: " << render_delay_ms;
50 ss << ", audio_channel_id: " << audio_channel_id; 50 if (!sync_group.empty())
51 ss << ", sync_group: " << sync_group;
51 ss << ", pre_decode_callback: " 52 ss << ", pre_decode_callback: "
52 << (pre_decode_callback != nullptr ? "(EncodedFrameObserver)" : "nullptr"); 53 << (pre_decode_callback != nullptr ? "(EncodedFrameObserver)" : "nullptr");
53 ss << ", pre_render_callback: " 54 ss << ", pre_render_callback: "
54 << (pre_render_callback != nullptr ? "(I420FrameCallback)" : "nullptr"); 55 << (pre_render_callback != nullptr ? "(I420FrameCallback)" : "nullptr");
55 ss << ", target_delay_ms: " << target_delay_ms; 56 ss << ", target_delay_ms: " << target_delay_ms;
56 ss << '}'; 57 ss << '}';
57 58
58 return ss.str(); 59 return ss.str();
59 } 60 }
60 61
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 ChannelGroup* channel_group, 129 ChannelGroup* channel_group,
129 int channel_id, 130 int channel_id,
130 const VideoReceiveStream::Config& config, 131 const VideoReceiveStream::Config& config,
131 newapi::Transport* transport, 132 newapi::Transport* transport,
132 webrtc::VoiceEngine* voice_engine) 133 webrtc::VoiceEngine* voice_engine)
133 : transport_adapter_(transport), 134 : transport_adapter_(transport),
134 encoded_frame_proxy_(config.pre_decode_callback), 135 encoded_frame_proxy_(config.pre_decode_callback),
135 config_(config), 136 config_(config),
136 clock_(Clock::GetRealTimeClock()), 137 clock_(Clock::GetRealTimeClock()),
137 channel_group_(channel_group), 138 channel_group_(channel_group),
138 channel_id_(channel_id), 139 channel_id_(channel_id) {
139 voe_sync_interface_(nullptr) {
140 CHECK(channel_group_->CreateReceiveChannel(channel_id_, 0, base_channel_id, 140 CHECK(channel_group_->CreateReceiveChannel(channel_id_, 0, base_channel_id,
141 &transport_adapter_, num_cpu_cores, 141 &transport_adapter_, num_cpu_cores,
142 true)); 142 true));
143 143
144 vie_channel_ = channel_group_->GetChannel(channel_id_); 144 vie_channel_ = channel_group_->GetChannel(channel_id_);
145 145
146 // TODO(pbos): This is not fine grained enough... 146 // TODO(pbos): This is not fine grained enough...
147 vie_channel_->SetProtectionMode(config_.rtp.nack.rtp_history_ms > 0, false, 147 vie_channel_->SetProtectionMode(config_.rtp.nack.rtp_history_ms > 0, false,
148 -1, -1); 148 -1, -1);
149 vie_channel_->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp); 149 vie_channel_->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 VideoCodec codec = CreateDecoderVideoCodec(decoder); 235 VideoCodec codec = CreateDecoderVideoCodec(decoder);
236 236
237 CHECK_EQ(0, vie_channel_->SetReceiveCodec(codec)); 237 CHECK_EQ(0, vie_channel_->SetReceiveCodec(codec));
238 } 238 }
239 239
240 incoming_video_stream_.reset(new IncomingVideoStream(0)); 240 incoming_video_stream_.reset(new IncomingVideoStream(0));
241 incoming_video_stream_->SetExpectedRenderDelay(config.render_delay_ms); 241 incoming_video_stream_->SetExpectedRenderDelay(config.render_delay_ms);
242 incoming_video_stream_->SetExternalCallback(this); 242 incoming_video_stream_->SetExternalCallback(this);
243 vie_channel_->SetIncomingVideoStream(incoming_video_stream_.get()); 243 vie_channel_->SetIncomingVideoStream(incoming_video_stream_.get());
244 244
245 if (voice_engine && config_.audio_channel_id != -1) {
246 voe_sync_interface_ = VoEVideoSync::GetInterface(voice_engine);
247 vie_channel_->SetVoiceChannel(config.audio_channel_id, voe_sync_interface_);
248 }
249
250 if (config.pre_decode_callback) 245 if (config.pre_decode_callback)
251 vie_channel_->RegisterPreDecodeImageCallback(&encoded_frame_proxy_); 246 vie_channel_->RegisterPreDecodeImageCallback(&encoded_frame_proxy_);
252 vie_channel_->RegisterPreRenderCallback(this); 247 vie_channel_->RegisterPreRenderCallback(this);
253 } 248 }
254 249
255 VideoReceiveStream::~VideoReceiveStream() { 250 VideoReceiveStream::~VideoReceiveStream() {
256 incoming_video_stream_->Stop(); 251 incoming_video_stream_->Stop();
257 vie_channel_->RegisterPreRenderCallback(nullptr); 252 vie_channel_->RegisterPreRenderCallback(nullptr);
258 vie_channel_->RegisterPreDecodeImageCallback(nullptr); 253 vie_channel_->RegisterPreDecodeImageCallback(nullptr);
259 254
260 for (size_t i = 0; i < config_.decoders.size(); ++i) 255 for (size_t i = 0; i < config_.decoders.size(); ++i)
261 vie_channel_->DeRegisterExternalDecoder(config_.decoders[i].payload_type); 256 vie_channel_->DeRegisterExternalDecoder(config_.decoders[i].payload_type);
262 257
263 if (voe_sync_interface_ != nullptr) {
264 vie_channel_->SetVoiceChannel(-1, nullptr);
265 voe_sync_interface_->Release();
266 }
267 vie_channel_->RegisterCodecObserver(nullptr); 258 vie_channel_->RegisterCodecObserver(nullptr);
268 vie_channel_->RegisterReceiveChannelRtpStatisticsCallback(nullptr); 259 vie_channel_->RegisterReceiveChannelRtpStatisticsCallback(nullptr);
269 vie_channel_->RegisterReceiveChannelRtcpStatisticsCallback(nullptr); 260 vie_channel_->RegisterReceiveChannelRtcpStatisticsCallback(nullptr);
270 vie_channel_->RegisterRtcpPacketTypeCounterObserver(nullptr); 261 vie_channel_->RegisterRtcpPacketTypeCounterObserver(nullptr);
271 channel_group_->DeleteChannel(channel_id_); 262 channel_group_->DeleteChannel(channel_id_);
272 } 263 }
273 264
274 void VideoReceiveStream::Start() { 265 void VideoReceiveStream::Start() {
275 transport_adapter_.Enable(); 266 transport_adapter_.Enable();
276 incoming_video_stream_->Start(); 267 incoming_video_stream_->Start();
277 vie_channel_->StartReceive(); 268 vie_channel_->StartReceive();
278 } 269 }
279 270
280 void VideoReceiveStream::Stop() { 271 void VideoReceiveStream::Stop() {
281 incoming_video_stream_->Stop(); 272 incoming_video_stream_->Stop();
282 vie_channel_->StopReceive(); 273 vie_channel_->StopReceive();
283 transport_adapter_.Disable(); 274 transport_adapter_.Disable();
284 } 275 }
285 276
277 void VideoReceiveStream::SetSyncChannel(VoiceEngine* voice_engine,
278 int audio_channel_id) {
279 if (voice_engine != nullptr && audio_channel_id != -1) {
280 VoEVideoSync* voe_sync_interface = VoEVideoSync::GetInterface(voice_engine);
281 vie_channel_->SetVoiceChannel(audio_channel_id, voe_sync_interface);
282 voe_sync_interface->Release();
283 } else {
284 vie_channel_->SetVoiceChannel(-1, nullptr);
285 }
286 }
287
286 VideoReceiveStream::Stats VideoReceiveStream::GetStats() const { 288 VideoReceiveStream::Stats VideoReceiveStream::GetStats() const {
287 return stats_proxy_->GetStats(); 289 return stats_proxy_->GetStats();
288 } 290 }
289 291
290 bool VideoReceiveStream::DeliverRtcp(const uint8_t* packet, size_t length) { 292 bool VideoReceiveStream::DeliverRtcp(const uint8_t* packet, size_t length) {
291 return vie_channel_->ReceivedRTCPPacket(packet, length) == 0; 293 return vie_channel_->ReceivedRTCPPacket(packet, length) == 0;
292 } 294 }
293 295
294 bool VideoReceiveStream::DeliverRtp(const uint8_t* packet, size_t length) { 296 bool VideoReceiveStream::DeliverRtp(const uint8_t* packet, size_t length) {
295 return vie_channel_->ReceivedRTPPacket(packet, length, PacketTime()) == 0; 297 return vie_channel_->ReceivedRTPPacket(packet, length, PacketTime()) == 0;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 case newapi::kRtcpCompound: 335 case newapi::kRtcpCompound:
334 vie_channel_->SetRTCPMode(kRtcpCompound); 336 vie_channel_->SetRTCPMode(kRtcpCompound);
335 break; 337 break;
336 case newapi::kRtcpReducedSize: 338 case newapi::kRtcpReducedSize:
337 vie_channel_->SetRTCPMode(kRtcpNonCompound); 339 vie_channel_->SetRTCPMode(kRtcpNonCompound);
338 break; 340 break;
339 } 341 }
340 } 342 }
341 } // namespace internal 343 } // namespace internal
342 } // namespace webrtc 344 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_receive_stream.h ('k') | webrtc/video_engine/vie_sync_module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698