| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |