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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.h

Issue 2469993003: Remove WebRtcVideoSendStream2::VideoSink inheritance. Remove sending black frame on source remova… (Closed)
Patch Set: Created 4 years, 1 month 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 bool ValidateSendSsrcAvailability(const StreamParams& sp) const 227 bool ValidateSendSsrcAvailability(const StreamParams& sp) const
228 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_); 228 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
229 bool ValidateReceiveSsrcAvailability(const StreamParams& sp) const 229 bool ValidateReceiveSsrcAvailability(const StreamParams& sp) const
230 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_); 230 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
231 void DeleteReceiveStream(WebRtcVideoReceiveStream* stream) 231 void DeleteReceiveStream(WebRtcVideoReceiveStream* stream)
232 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_); 232 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
233 233
234 static std::string CodecSettingsVectorToString( 234 static std::string CodecSettingsVectorToString(
235 const std::vector<VideoCodecSettings>& codecs); 235 const std::vector<VideoCodecSettings>& codecs);
236 236
237 // Wrapper for the sender part, this is where the source is connected and 237 // Wrapper for the sender part.
238 // frames are then converted from cricket frames to webrtc frames.
239 class WebRtcVideoSendStream 238 class WebRtcVideoSendStream
240 : public rtc::VideoSinkInterface<cricket::VideoFrame>, 239 : public rtc::VideoSourceInterface<webrtc::VideoFrame> {
241 public rtc::VideoSourceInterface<webrtc::VideoFrame> {
242 public: 240 public:
243 WebRtcVideoSendStream( 241 WebRtcVideoSendStream(
244 webrtc::Call* call, 242 webrtc::Call* call,
245 const StreamParams& sp, 243 const StreamParams& sp,
246 webrtc::VideoSendStream::Config config, 244 webrtc::VideoSendStream::Config config,
247 const VideoOptions& options, 245 const VideoOptions& options,
248 WebRtcVideoEncoderFactory* external_encoder_factory, 246 WebRtcVideoEncoderFactory* external_encoder_factory,
249 bool enable_cpu_overuse_detection, 247 bool enable_cpu_overuse_detection,
250 int max_bitrate_bps, 248 int max_bitrate_bps,
251 const rtc::Optional<VideoCodecSettings>& codec_settings, 249 const rtc::Optional<VideoCodecSettings>& codec_settings,
252 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, 250 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions,
253 const VideoSendParameters& send_params); 251 const VideoSendParameters& send_params);
254 virtual ~WebRtcVideoSendStream(); 252 virtual ~WebRtcVideoSendStream();
255 253
256 void SetSendParameters(const ChangedSendParameters& send_params); 254 void SetSendParameters(const ChangedSendParameters& send_params);
257 bool SetRtpParameters(const webrtc::RtpParameters& parameters); 255 bool SetRtpParameters(const webrtc::RtpParameters& parameters);
258 webrtc::RtpParameters GetRtpParameters() const; 256 webrtc::RtpParameters GetRtpParameters() const;
259 257
260 // Implements rtc::VideoSourceInterface<webrtc::VideoFrame>. 258 // Implements rtc::VideoSourceInterface<webrtc::VideoFrame>.
261 // WebRtcVideoSendStream acts as a source to the webrtc::VideoSendStream 259 // WebRtcVideoSendStream acts as a source to the webrtc::VideoSendStream
262 // in |stream_|. The reason is that WebRtcVideoSendStream receives 260 // in |stream_|. This is done to proxy VideoSinkWants from the encoder to
263 // cricket::VideoFrames and forwards webrtc::VideoFrames to |source_|. 261 // the worker thread.
264 // TODO(perkj, nisse): Refactor WebRtcVideoSendStream to directly connect 262 void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
265 // the camera input |source_|
266 void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
267 const rtc::VideoSinkWants& wants) override; 263 const rtc::VideoSinkWants& wants) override;
268 void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override; 264 void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override;
269 265
270 void OnFrame(const cricket::VideoFrame& frame) override;
271 bool SetVideoSend(bool mute, 266 bool SetVideoSend(bool mute,
272 const VideoOptions* options, 267 const VideoOptions* options,
273 rtc::VideoSourceInterface<cricket::VideoFrame>* source); 268 rtc::VideoSourceInterface<cricket::VideoFrame>* source);
274 269
275 void SetSend(bool send); 270 void SetSend(bool send);
276 271
277 const std::vector<uint32_t>& GetSsrcs() const; 272 const std::vector<uint32_t>& GetSsrcs() const;
278 VideoSenderInfo GetVideoSenderInfo(bool log_stats); 273 VideoSenderInfo GetVideoSenderInfo(bool log_stats);
279 void FillBandwidthEstimationInfo(BandwidthEstimationInfo* bwe_info); 274 void FillBandwidthEstimationInfo(BandwidthEstimationInfo* bwe_info);
280 275
(...skipping 22 matching lines...) Expand all
303 struct AllocatedEncoder { 298 struct AllocatedEncoder {
304 AllocatedEncoder(webrtc::VideoEncoder* encoder, 299 AllocatedEncoder(webrtc::VideoEncoder* encoder,
305 webrtc::VideoCodecType type, 300 webrtc::VideoCodecType type,
306 bool external); 301 bool external);
307 webrtc::VideoEncoder* encoder; 302 webrtc::VideoEncoder* encoder;
308 webrtc::VideoEncoder* external_encoder; 303 webrtc::VideoEncoder* external_encoder;
309 webrtc::VideoCodecType type; 304 webrtc::VideoCodecType type;
310 bool external; 305 bool external;
311 }; 306 };
312 307
313 // TODO(perkj): VideoFrameInfo is currently used for sending a black frame
314 // when the video source is removed. Consider moving that logic to
315 // VieEncoder or remove it.
316 struct VideoFrameInfo {
317 VideoFrameInfo()
318 : width(0),
319 height(0),
320 rotation(webrtc::kVideoRotation_0),
321 is_texture(false) {}
322 int width;
323 int height;
324 webrtc::VideoRotation rotation;
325 bool is_texture;
326 };
327
328 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings> 308 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
329 ConfigureVideoEncoderSettings(const VideoCodec& codec); 309 ConfigureVideoEncoderSettings(const VideoCodec& codec);
330 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec); 310 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec);
331 void DestroyVideoEncoder(AllocatedEncoder* encoder); 311 void DestroyVideoEncoder(AllocatedEncoder* encoder);
332 void SetCodec(const VideoCodecSettings& codec); 312 void SetCodec(const VideoCodecSettings& codec);
333 void RecreateWebRtcStream(); 313 void RecreateWebRtcStream();
334 webrtc::VideoEncoderConfig CreateVideoEncoderConfig( 314 webrtc::VideoEncoderConfig CreateVideoEncoderConfig(
335 const VideoCodec& codec) const; 315 const VideoCodec& codec) const;
336 void ReconfigureEncoder(); 316 void ReconfigureEncoder();
337 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters); 317 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters);
338 318
339 // Calls Start or Stop according to whether or not |sending_| is true, 319 // Calls Start or Stop according to whether or not |sending_| is true,
340 // and whether or not the encoding in |rtp_parameters_| is active. 320 // and whether or not the encoding in |rtp_parameters_| is active.
341 void UpdateSendState(); 321 void UpdateSendState();
342 322
343 rtc::ThreadChecker thread_checker_; 323 rtc::ThreadChecker thread_checker_;
344 rtc::AsyncInvoker invoker_; 324 rtc::AsyncInvoker invoker_;
345 rtc::Thread* worker_thread_; 325 rtc::Thread* worker_thread_;
346 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_); 326 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
347 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_); 327 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
348 webrtc::Call* const call_; 328 webrtc::Call* const call_;
349 const bool enable_cpu_overuse_detection_; 329 const bool enable_cpu_overuse_detection_;
350 rtc::VideoSourceInterface<cricket::VideoFrame>* source_ 330 rtc::VideoSourceInterface<cricket::VideoFrame>* source_
351 ACCESS_ON(&thread_checker_); 331 ACCESS_ON(&thread_checker_);
352 WebRtcVideoEncoderFactory* const external_encoder_factory_ 332 WebRtcVideoEncoderFactory* const external_encoder_factory_
353 ACCESS_ON(&thread_checker_); 333 ACCESS_ON(&thread_checker_);
354 334
355 rtc::CriticalSection lock_;
356 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_); 335 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
357 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_ 336 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
358 GUARDED_BY(lock_); 337 ACCESS_ON(&thread_checker_);
359 // Contains settings that are the same for all streams in the MediaChannel, 338 // Contains settings that are the same for all streams in the MediaChannel,
360 // such as codecs, header extensions, and the global bitrate limit for the 339 // such as codecs, header extensions, and the global bitrate limit for the
361 // entire channel. 340 // entire channel.
362 VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_); 341 VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_);
363 // Contains settings that are unique for each stream, such as max_bitrate. 342 // Contains settings that are unique for each stream, such as max_bitrate.
364 // Does *not* contain codecs, however. 343 // Does *not* contain codecs, however.
365 // TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_. 344 // TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_.
366 // TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only 345 // TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only
367 // one stream per MediaChannel. 346 // one stream per MediaChannel.
368 webrtc::RtpParameters rtp_parameters_ ACCESS_ON(&thread_checker_); 347 webrtc::RtpParameters rtp_parameters_ ACCESS_ON(&thread_checker_);
369 AllocatedEncoder allocated_encoder_ ACCESS_ON(&thread_checker_); 348 AllocatedEncoder allocated_encoder_ ACCESS_ON(&thread_checker_);
370 VideoFrameInfo last_frame_info_ GUARDED_BY(lock_);
371 349
372 bool sending_ ACCESS_ON(&thread_checker_); 350 bool sending_ ACCESS_ON(&thread_checker_);
373
374 // The timestamp of the last frame received
375 // Used to generate timestamp for the black frame when source is removed
376 int64_t last_frame_timestamp_us_ GUARDED_BY(lock_);
377 }; 351 };
378 352
379 // Wrapper for the receiver part, contains configs etc. that are needed to 353 // Wrapper for the receiver part, contains configs etc. that are needed to
380 // reconstruct the underlying VideoReceiveStream. Also serves as a wrapper 354 // reconstruct the underlying VideoReceiveStream. Also serves as a wrapper
381 // between rtc::VideoSinkInterface<webrtc::VideoFrame> and 355 // between rtc::VideoSinkInterface<webrtc::VideoFrame> and
382 // rtc::VideoSinkInterface<cricket::VideoFrame>. 356 // rtc::VideoSinkInterface<cricket::VideoFrame>.
383 class WebRtcVideoReceiveStream 357 class WebRtcVideoReceiveStream
384 : public rtc::VideoSinkInterface<webrtc::VideoFrame> { 358 : public rtc::VideoSinkInterface<webrtc::VideoFrame> {
385 public: 359 public:
386 WebRtcVideoReceiveStream( 360 WebRtcVideoReceiveStream(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 VideoSendParameters send_params_; 491 VideoSendParameters send_params_;
518 VideoOptions default_send_options_; 492 VideoOptions default_send_options_;
519 VideoRecvParameters recv_params_; 493 VideoRecvParameters recv_params_;
520 bool red_disabled_by_remote_side_; 494 bool red_disabled_by_remote_side_;
521 int64_t last_stats_log_ms_; 495 int64_t last_stats_log_ms_;
522 }; 496 };
523 497
524 } // namespace cricket 498 } // namespace cricket
525 499
526 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_ 500 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698