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

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

Issue 2990463002: [EXPERIMENTAL] Generic stereo codec with index header sending merged frames
Patch Set: Created 3 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/media/base/mediaconstants.cc ('k') | webrtc/media/engine/webrtcvideoengine.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) 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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 // of |other|. 198 // of |other|.
199 bool operator==(const VideoCodecSettings& other) const; 199 bool operator==(const VideoCodecSettings& other) const;
200 bool operator!=(const VideoCodecSettings& other) const; 200 bool operator!=(const VideoCodecSettings& other) const;
201 201
202 // Checks if all members of |a|, except |flexfec_payload_type|, are equal 202 // Checks if all members of |a|, except |flexfec_payload_type|, are equal
203 // to the corresponding members of |b|. 203 // to the corresponding members of |b|.
204 static bool EqualsDisregardingFlexfec(const VideoCodecSettings& a, 204 static bool EqualsDisregardingFlexfec(const VideoCodecSettings& a,
205 const VideoCodecSettings& b); 205 const VideoCodecSettings& b);
206 206
207 VideoCodec codec; 207 VideoCodec codec;
208 rtc::Optional<VideoCodec> stereo_codec;
208 webrtc::UlpfecConfig ulpfec; 209 webrtc::UlpfecConfig ulpfec;
209 int flexfec_payload_type; 210 int flexfec_payload_type;
210 int rtx_payload_type; 211 int rtx_payload_type;
211 }; 212 };
212 213
213 struct ChangedSendParameters { 214 struct ChangedSendParameters {
214 // These optionals are unset if not changed. 215 // These optionals are unset if not changed.
215 rtc::Optional<VideoCodecSettings> codec; 216 rtc::Optional<VideoCodecSettings> codec;
216 rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions; 217 rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions;
217 rtc::Optional<int> max_bandwidth_bps; 218 rtc::Optional<int> max_bandwidth_bps;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 bool external; 322 bool external;
322 }; 323 };
323 324
324 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings> 325 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
325 ConfigureVideoEncoderSettings(const VideoCodec& codec); 326 ConfigureVideoEncoderSettings(const VideoCodec& codec);
326 // If force_encoder_allocation is true, a new AllocatedEncoder is always 327 // If force_encoder_allocation is true, a new AllocatedEncoder is always
327 // created. If false, the allocated encoder may be reused, if the type 328 // created. If false, the allocated encoder may be reused, if the type
328 // matches. 329 // matches.
329 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec, 330 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec,
330 bool force_encoder_allocation); 331 bool force_encoder_allocation);
332 AllocatedEncoder CreateStereoVideoEncoder(const VideoCodec& codec);
331 void DestroyVideoEncoder(AllocatedEncoder* encoder); 333 void DestroyVideoEncoder(AllocatedEncoder* encoder);
332 void SetCodec(const VideoCodecSettings& codec, 334 void SetCodec(const VideoCodecSettings& codec,
333 bool force_encoder_allocation); 335 bool force_encoder_allocation);
334 void RecreateWebRtcStream(); 336 void RecreateWebRtcStream();
335 webrtc::VideoEncoderConfig CreateVideoEncoderConfig( 337 webrtc::VideoEncoderConfig CreateVideoEncoderConfig(
336 const VideoCodec& codec) const; 338 const VideoCodec& codec) const;
337 void ReconfigureEncoder(); 339 void ReconfigureEncoder();
338 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters); 340 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters);
339 341
340 // Calls Start or Stop according to whether or not |sending_| is true, 342 // Calls Start or Stop according to whether or not |sending_| is true,
341 // and whether or not the encoding in |rtp_parameters_| is active. 343 // and whether or not the encoding in |rtp_parameters_| is active.
342 void UpdateSendState(); 344 void UpdateSendState();
343 345
344 webrtc::VideoSendStream::DegradationPreference GetDegradationPreference() 346 webrtc::VideoSendStream::DegradationPreference GetDegradationPreference()
345 const EXCLUSIVE_LOCKS_REQUIRED(&thread_checker_); 347 const EXCLUSIVE_LOCKS_REQUIRED(&thread_checker_);
346 348
347 rtc::ThreadChecker thread_checker_; 349 rtc::ThreadChecker thread_checker_;
348 rtc::AsyncInvoker invoker_; 350 rtc::AsyncInvoker invoker_;
349 rtc::Thread* worker_thread_; 351 rtc::Thread* worker_thread_;
350 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_); 352 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
351 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_); 353 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
352 webrtc::Call* const call_; 354 webrtc::Call* const call_;
353 const bool enable_cpu_overuse_detection_; 355 const bool enable_cpu_overuse_detection_;
354 rtc::VideoSourceInterface<webrtc::VideoFrame>* source_ 356 rtc::VideoSourceInterface<webrtc::VideoFrame>* source_
355 ACCESS_ON(&thread_checker_); 357 ACCESS_ON(&thread_checker_);
356 WebRtcVideoEncoderFactory* const external_encoder_factory_ 358 WebRtcVideoEncoderFactory* const external_encoder_factory_
357 ACCESS_ON(&thread_checker_); 359 ACCESS_ON(&thread_checker_);
358 const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_ 360 const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_
359 ACCESS_ON(&thread_checker_); 361 ACCESS_ON(&thread_checker_);
362 std::unique_ptr<WebRtcVideoEncoderFactory> stereo_encoder_factory_
363 ACCESS_ON(&thread_checker_);
360 364
361 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_); 365 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
362 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_ 366 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
363 ACCESS_ON(&thread_checker_); 367 ACCESS_ON(&thread_checker_);
364 // Contains settings that are the same for all streams in the MediaChannel, 368 // Contains settings that are the same for all streams in the MediaChannel,
365 // such as codecs, header extensions, and the global bitrate limit for the 369 // such as codecs, header extensions, and the global bitrate limit for the
366 // entire channel. 370 // entire channel.
367 VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_); 371 VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_);
368 // Contains settings that are unique for each stream, such as max_bitrate. 372 // Contains settings that are unique for each stream, such as max_bitrate.
369 // Does *not* contain codecs, however. 373 // Does *not* contain codecs, however.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 427
424 void RecreateWebRtcVideoStream(); 428 void RecreateWebRtcVideoStream();
425 void MaybeRecreateWebRtcFlexfecStream(); 429 void MaybeRecreateWebRtcFlexfecStream();
426 430
427 void ConfigureCodecs(const std::vector<VideoCodecSettings>& recv_codecs, 431 void ConfigureCodecs(const std::vector<VideoCodecSettings>& recv_codecs,
428 std::vector<AllocatedDecoder>* old_codecs); 432 std::vector<AllocatedDecoder>* old_codecs);
429 void ConfigureFlexfecCodec(int flexfec_payload_type); 433 void ConfigureFlexfecCodec(int flexfec_payload_type);
430 AllocatedDecoder CreateOrReuseVideoDecoder( 434 AllocatedDecoder CreateOrReuseVideoDecoder(
431 std::vector<AllocatedDecoder>* old_decoder, 435 std::vector<AllocatedDecoder>* old_decoder,
432 const VideoCodec& codec); 436 const VideoCodec& codec);
437 AllocatedDecoder CreateStereoVideoDecoder(const VideoCodec& codec);
433 void ClearDecoders(std::vector<AllocatedDecoder>* allocated_decoders); 438 void ClearDecoders(std::vector<AllocatedDecoder>* allocated_decoders);
434 439
435 std::string GetCodecNameFromPayloadType(int payload_type); 440 std::string GetCodecNameFromPayloadType(int payload_type);
436 441
437 webrtc::Call* const call_; 442 webrtc::Call* const call_;
438 StreamParams stream_params_; 443 StreamParams stream_params_;
439 444
440 // Both |stream_| and |flexfec_stream_| are managed by |this|. They are 445 // Both |stream_| and |flexfec_stream_| are managed by |this|. They are
441 // destroyed by calling call_->DestroyVideoReceiveStream and 446 // destroyed by calling call_->DestroyVideoReceiveStream and
442 // call_->DestroyFlexfecReceiveStream, respectively. 447 // call_->DestroyFlexfecReceiveStream, respectively.
443 webrtc::VideoReceiveStream* stream_; 448 webrtc::VideoReceiveStream* stream_;
444 const bool default_stream_; 449 const bool default_stream_;
445 webrtc::VideoReceiveStream::Config config_; 450 webrtc::VideoReceiveStream::Config config_;
446 webrtc::FlexfecReceiveStream::Config flexfec_config_; 451 webrtc::FlexfecReceiveStream::Config flexfec_config_;
447 webrtc::FlexfecReceiveStream* flexfec_stream_; 452 webrtc::FlexfecReceiveStream* flexfec_stream_;
448 453
449 WebRtcVideoDecoderFactory* const external_decoder_factory_; 454 WebRtcVideoDecoderFactory* const external_decoder_factory_;
455 const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_;
456 std::unique_ptr<WebRtcVideoDecoderFactory> stereo_decoder_factory_;
450 std::vector<AllocatedDecoder> allocated_decoders_; 457 std::vector<AllocatedDecoder> allocated_decoders_;
451 458
452 rtc::CriticalSection sink_lock_; 459 rtc::CriticalSection sink_lock_;
453 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_); 460 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
454 // Expands remote RTP timestamps to int64_t to be able to estimate how long 461 // Expands remote RTP timestamps to int64_t to be able to estimate how long
455 // the stream has been running. 462 // the stream has been running.
456 rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_ 463 rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_
457 GUARDED_BY(sink_lock_); 464 GUARDED_BY(sink_lock_);
458 int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_); 465 int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_);
459 // Start NTP time is estimated as current remote NTP time (estimated from 466 // Start NTP time is estimated as current remote NTP time (estimated from
460 // RTCP) minus the elapsed time, as soon as remote NTP time is available. 467 // RTCP) minus the elapsed time, as soon as remote NTP time is available.
461 int64_t estimated_remote_start_ntp_time_ms_ GUARDED_BY(sink_lock_); 468 int64_t estimated_remote_start_ntp_time_ms_ GUARDED_BY(sink_lock_);
462 }; 469 };
463 470
464 void Construct(webrtc::Call* call, WebRtcVideoEngine* engine); 471 void Construct(webrtc::Call* call, WebRtcVideoEngine* engine);
465 472
466 bool SendRtp(const uint8_t* data, 473 bool SendRtp(const uint8_t* data,
467 size_t len, 474 size_t len,
468 const webrtc::PacketOptions& options) override; 475 const webrtc::PacketOptions& options) override;
469 bool SendRtcp(const uint8_t* data, size_t len) override; 476 bool SendRtcp(const uint8_t* data, size_t len) override;
470 477
471 static std::vector<VideoCodecSettings> MapCodecs( 478 static std::vector<VideoCodecSettings> MapCodecs(
472 const std::vector<VideoCodec>& codecs); 479 const std::vector<VideoCodec>& codecs);
473 // Select what video codec will be used for sending, i.e. what codec is used 480 // Select what video codec will be used for sending, i.e. what codec is used
474 // for local encoding, based on supported remote codecs. The first remote 481 // for local encoding, based on supported remote codecs. The first remote
475 // codec that is supported locally will be selected. 482 // codec that is supported locally will be selected.
476 rtc::Optional<VideoCodecSettings> SelectSendVideoCodec( 483 rtc::Optional<VideoCodecSettings> SelectSendVideoCodec(
477 const std::vector<VideoCodecSettings>& remote_mapped_codecs) const; 484 const std::vector<VideoCodecSettings>& remote_mapped_codecs) const;
485 rtc::Optional<WebRtcVideoChannel::VideoCodecSettings>
486 SelectStereoAssociatedVideoCodec(
487 const std::vector<VideoCodecSettings>& remote_mapped_codecs) const;
478 488
479 static bool NonFlexfecReceiveCodecsHaveChanged( 489 static bool NonFlexfecReceiveCodecsHaveChanged(
480 std::vector<VideoCodecSettings> before, 490 std::vector<VideoCodecSettings> before,
481 std::vector<VideoCodecSettings> after); 491 std::vector<VideoCodecSettings> after);
482 492
483 void FillSenderStats(VideoMediaInfo* info, bool log_stats); 493 void FillSenderStats(VideoMediaInfo* info, bool log_stats);
484 void FillReceiverStats(VideoMediaInfo* info, bool log_stats); 494 void FillReceiverStats(VideoMediaInfo* info, bool log_stats);
485 void FillBandwidthEstimationStats(const webrtc::Call::Stats& stats, 495 void FillBandwidthEstimationStats(const webrtc::Call::Stats& stats,
486 VideoMediaInfo* info); 496 VideoMediaInfo* info);
487 void FillSendAndReceiveCodecStats(VideoMediaInfo* video_media_info); 497 void FillSendAndReceiveCodecStats(VideoMediaInfo* video_media_info);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 const std::string codec_name_; 553 const std::string codec_name_;
544 const int max_qp_; 554 const int max_qp_;
545 const int max_framerate_; 555 const int max_framerate_;
546 const bool is_screencast_; 556 const bool is_screencast_;
547 const bool conference_mode_; 557 const bool conference_mode_;
548 }; 558 };
549 559
550 } // namespace cricket 560 } // namespace cricket
551 561
552 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_ 562 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_
OLDNEW
« no previous file with comments | « webrtc/media/base/mediaconstants.cc ('k') | webrtc/media/engine/webrtcvideoengine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698