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

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

Issue 3010953002: Revert of Prepare for injectable SW decoders (Closed)
Patch Set: Created 3 years, 3 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
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 29 matching lines...) Expand all
40 class VideoEncoder; 40 class VideoEncoder;
41 struct MediaConfig; 41 struct MediaConfig;
42 } 42 }
43 43
44 namespace rtc { 44 namespace rtc {
45 class Thread; 45 class Thread;
46 } // namespace rtc 46 } // namespace rtc
47 47
48 namespace cricket { 48 namespace cricket {
49 49
50 class DecoderFactoryAdapter;
51 class EncoderFactoryAdapter; 50 class EncoderFactoryAdapter;
52 class VideoCapturer; 51 class VideoCapturer;
53 class VideoProcessor; 52 class VideoProcessor;
54 class VideoRenderer; 53 class VideoRenderer;
55 class VoiceMediaChannel; 54 class VoiceMediaChannel;
56 class WebRtcDecoderObserver; 55 class WebRtcDecoderObserver;
57 class WebRtcEncoderObserver; 56 class WebRtcEncoderObserver;
58 class WebRtcLocalStreamInfo; 57 class WebRtcLocalStreamInfo;
59 class WebRtcRenderAdapter; 58 class WebRtcRenderAdapter;
60 class WebRtcVideoChannel; 59 class WebRtcVideoChannel;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 void SetExternalDecoderFactory(WebRtcVideoDecoderFactory* decoder_factory); 114 void SetExternalDecoderFactory(WebRtcVideoDecoderFactory* decoder_factory);
116 // Set a WebRtcVideoEncoderFactory for external encoding. Video engine does 115 // Set a WebRtcVideoEncoderFactory for external encoding. Video engine does
117 // not take the ownership of |encoder_factory|. The caller needs to make sure 116 // not take the ownership of |encoder_factory|. The caller needs to make sure
118 // that |encoder_factory| outlives the video engine. 117 // that |encoder_factory| outlives the video engine.
119 virtual void SetExternalEncoderFactory( 118 virtual void SetExternalEncoderFactory(
120 WebRtcVideoEncoderFactory* encoder_factory); 119 WebRtcVideoEncoderFactory* encoder_factory);
121 120
122 private: 121 private:
123 bool initialized_; 122 bool initialized_;
124 123
125 std::unique_ptr<DecoderFactoryAdapter> decoder_factory_; 124 WebRtcVideoDecoderFactory* external_decoder_factory_;
126 std::unique_ptr<EncoderFactoryAdapter> encoder_factory_; 125 std::unique_ptr<EncoderFactoryAdapter> encoder_factory_;
127 }; 126 };
128 127
129 class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { 128 class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
130 public: 129 public:
131 WebRtcVideoChannel(webrtc::Call* call, 130 WebRtcVideoChannel(webrtc::Call* call,
132 const MediaConfig& config, 131 const MediaConfig& config,
133 const VideoOptions& options, 132 const VideoOptions& options,
134 const EncoderFactoryAdapter& encoder_factory, 133 const EncoderFactoryAdapter& encoder_factory,
135 const DecoderFactoryAdapter& decoder_factory); 134 WebRtcVideoDecoderFactory* external_decoder_factory);
136 ~WebRtcVideoChannel() override; 135 ~WebRtcVideoChannel() override;
137 136
138 // VideoMediaChannel implementation 137 // VideoMediaChannel implementation
139 rtc::DiffServCodePoint PreferredDscp() const override; 138 rtc::DiffServCodePoint PreferredDscp() const override;
140 139
141 bool SetSendParameters(const VideoSendParameters& params) override; 140 bool SetSendParameters(const VideoSendParameters& params) override;
142 bool SetRecvParameters(const VideoRecvParameters& params) override; 141 bool SetRecvParameters(const VideoRecvParameters& params) override;
143 webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override; 142 webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override;
144 bool SetRtpSendParameters(uint32_t ssrc, 143 bool SetRtpSendParameters(uint32_t ssrc,
145 const webrtc::RtpParameters& parameters) override; 144 const webrtc::RtpParameters& parameters) override;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 362
364 // Wrapper for the receiver part, contains configs etc. that are needed to 363 // Wrapper for the receiver part, contains configs etc. that are needed to
365 // reconstruct the underlying VideoReceiveStream. 364 // reconstruct the underlying VideoReceiveStream.
366 class WebRtcVideoReceiveStream 365 class WebRtcVideoReceiveStream
367 : public rtc::VideoSinkInterface<webrtc::VideoFrame> { 366 : public rtc::VideoSinkInterface<webrtc::VideoFrame> {
368 public: 367 public:
369 WebRtcVideoReceiveStream( 368 WebRtcVideoReceiveStream(
370 webrtc::Call* call, 369 webrtc::Call* call,
371 const StreamParams& sp, 370 const StreamParams& sp,
372 webrtc::VideoReceiveStream::Config config, 371 webrtc::VideoReceiveStream::Config config,
373 const DecoderFactoryAdapter& decoder_factory, 372 WebRtcVideoDecoderFactory* external_decoder_factory,
374 bool default_stream, 373 bool default_stream,
375 const std::vector<VideoCodecSettings>& recv_codecs, 374 const std::vector<VideoCodecSettings>& recv_codecs,
376 const webrtc::FlexfecReceiveStream::Config& flexfec_config); 375 const webrtc::FlexfecReceiveStream::Config& flexfec_config);
377 ~WebRtcVideoReceiveStream(); 376 ~WebRtcVideoReceiveStream();
378 377
379 const std::vector<uint32_t>& GetSsrcs() const; 378 const std::vector<uint32_t>& GetSsrcs() const;
380 rtc::Optional<uint32_t> GetFirstPrimarySsrc() const; 379 rtc::Optional<uint32_t> GetFirstPrimarySsrc() const;
381 380
382 void SetLocalSsrc(uint32_t local_ssrc); 381 void SetLocalSsrc(uint32_t local_ssrc);
383 // TODO(deadbeef): Move these feedback parameters into the recv parameters. 382 // TODO(deadbeef): Move these feedback parameters into the recv parameters.
384 void SetFeedbackParameters(bool nack_enabled, 383 void SetFeedbackParameters(bool nack_enabled,
385 bool remb_enabled, 384 bool remb_enabled,
386 bool transport_cc_enabled, 385 bool transport_cc_enabled,
387 webrtc::RtcpMode rtcp_mode); 386 webrtc::RtcpMode rtcp_mode);
388 void SetRecvParameters(const ChangedRecvParameters& recv_params); 387 void SetRecvParameters(const ChangedRecvParameters& recv_params);
389 388
390 void OnFrame(const webrtc::VideoFrame& frame) override; 389 void OnFrame(const webrtc::VideoFrame& frame) override;
391 bool IsDefaultStream() const; 390 bool IsDefaultStream() const;
392 391
393 void SetSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink); 392 void SetSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink);
394 393
395 VideoReceiverInfo GetVideoReceiverInfo(bool log_stats); 394 VideoReceiverInfo GetVideoReceiverInfo(bool log_stats);
396 395
397 private: 396 private:
397 struct AllocatedDecoder {
398 AllocatedDecoder(webrtc::VideoDecoder* decoder,
399 webrtc::VideoCodecType type,
400 bool external);
401 webrtc::VideoDecoder* decoder;
402 // Decoder wrapped into a fallback decoder to permit software fallback.
403 webrtc::VideoDecoder* external_decoder;
404 webrtc::VideoCodecType type;
405 bool external;
406 };
407
398 void RecreateWebRtcVideoStream(); 408 void RecreateWebRtcVideoStream();
399 void MaybeRecreateWebRtcFlexfecStream(); 409 void MaybeRecreateWebRtcFlexfecStream();
400 410
401 void MaybeAssociateFlexfecWithVideo(); 411 void MaybeAssociateFlexfecWithVideo();
402 void MaybeDissociateFlexfecFromVideo(); 412 void MaybeDissociateFlexfecFromVideo();
403 413
404 void ConfigureCodecs( 414 void ConfigureCodecs(const std::vector<VideoCodecSettings>& recv_codecs,
405 const std::vector<VideoCodecSettings>& recv_codecs, 415 std::vector<AllocatedDecoder>* old_codecs);
406 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>>*
407 old_codecs);
408 void ConfigureFlexfecCodec(int flexfec_payload_type); 416 void ConfigureFlexfecCodec(int flexfec_payload_type);
417 AllocatedDecoder CreateOrReuseVideoDecoder(
418 std::vector<AllocatedDecoder>* old_decoder,
419 const VideoCodec& codec);
420 void ClearDecoders(std::vector<AllocatedDecoder>* allocated_decoders);
409 421
410 std::string GetCodecNameFromPayloadType(int payload_type); 422 std::string GetCodecNameFromPayloadType(int payload_type);
411 423
412 webrtc::Call* const call_; 424 webrtc::Call* const call_;
413 StreamParams stream_params_; 425 StreamParams stream_params_;
414 426
415 // Both |stream_| and |flexfec_stream_| are managed by |this|. They are 427 // Both |stream_| and |flexfec_stream_| are managed by |this|. They are
416 // destroyed by calling call_->DestroyVideoReceiveStream and 428 // destroyed by calling call_->DestroyVideoReceiveStream and
417 // call_->DestroyFlexfecReceiveStream, respectively. 429 // call_->DestroyFlexfecReceiveStream, respectively.
418 webrtc::VideoReceiveStream* stream_; 430 webrtc::VideoReceiveStream* stream_;
419 const bool default_stream_; 431 const bool default_stream_;
420 webrtc::VideoReceiveStream::Config config_; 432 webrtc::VideoReceiveStream::Config config_;
421 webrtc::FlexfecReceiveStream::Config flexfec_config_; 433 webrtc::FlexfecReceiveStream::Config flexfec_config_;
422 webrtc::FlexfecReceiveStream* flexfec_stream_; 434 webrtc::FlexfecReceiveStream* flexfec_stream_;
423 435
424 std::unique_ptr<DecoderFactoryAdapter> decoder_factory_; 436 WebRtcVideoDecoderFactory* const external_decoder_factory_;
425 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>> 437 std::vector<AllocatedDecoder> allocated_decoders_;
426 allocated_decoders_;
427 438
428 rtc::CriticalSection sink_lock_; 439 rtc::CriticalSection sink_lock_;
429 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_); 440 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
430 // Expands remote RTP timestamps to int64_t to be able to estimate how long 441 // Expands remote RTP timestamps to int64_t to be able to estimate how long
431 // the stream has been running. 442 // the stream has been running.
432 rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_ 443 rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_
433 GUARDED_BY(sink_lock_); 444 GUARDED_BY(sink_lock_);
434 int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_); 445 int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_);
435 // Start NTP time is estimated as current remote NTP time (estimated from 446 // Start NTP time is estimated as current remote NTP time (estimated from
436 // RTCP) minus the elapsed time, as soon as remote NTP time is available. 447 // RTCP) minus the elapsed time, as soon as remote NTP time is available.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 GUARDED_BY(stream_crit_); 490 GUARDED_BY(stream_crit_);
480 std::map<uint32_t, WebRtcVideoReceiveStream*> receive_streams_ 491 std::map<uint32_t, WebRtcVideoReceiveStream*> receive_streams_
481 GUARDED_BY(stream_crit_); 492 GUARDED_BY(stream_crit_);
482 std::set<uint32_t> send_ssrcs_ GUARDED_BY(stream_crit_); 493 std::set<uint32_t> send_ssrcs_ GUARDED_BY(stream_crit_);
483 std::set<uint32_t> receive_ssrcs_ GUARDED_BY(stream_crit_); 494 std::set<uint32_t> receive_ssrcs_ GUARDED_BY(stream_crit_);
484 495
485 rtc::Optional<VideoCodecSettings> send_codec_; 496 rtc::Optional<VideoCodecSettings> send_codec_;
486 rtc::Optional<std::vector<webrtc::RtpExtension>> send_rtp_extensions_; 497 rtc::Optional<std::vector<webrtc::RtpExtension>> send_rtp_extensions_;
487 498
488 std::unique_ptr<EncoderFactoryAdapter> encoder_factory_; 499 std::unique_ptr<EncoderFactoryAdapter> encoder_factory_;
489 std::unique_ptr<DecoderFactoryAdapter> decoder_factory_; 500 WebRtcVideoDecoderFactory* const external_decoder_factory_;
490 std::vector<VideoCodecSettings> recv_codecs_; 501 std::vector<VideoCodecSettings> recv_codecs_;
491 std::vector<webrtc::RtpExtension> recv_rtp_extensions_; 502 std::vector<webrtc::RtpExtension> recv_rtp_extensions_;
492 // See reason for keeping track of the FlexFEC payload type separately in 503 // See reason for keeping track of the FlexFEC payload type separately in
493 // comment in WebRtcVideoChannel::ChangedRecvParameters. 504 // comment in WebRtcVideoChannel::ChangedRecvParameters.
494 int recv_flexfec_payload_type_; 505 int recv_flexfec_payload_type_;
495 webrtc::Call::Config::BitrateConfig bitrate_config_; 506 webrtc::Call::Config::BitrateConfig bitrate_config_;
496 // TODO(deadbeef): Don't duplicate information between 507 // TODO(deadbeef): Don't duplicate information between
497 // send_params/recv_params, rtp_extensions, options, etc. 508 // send_params/recv_params, rtp_extensions, options, etc.
498 VideoSendParameters send_params_; 509 VideoSendParameters send_params_;
499 VideoOptions default_send_options_; 510 VideoOptions default_send_options_;
(...skipping 19 matching lines...) Expand all
519 const std::string codec_name_; 530 const std::string codec_name_;
520 const int max_qp_; 531 const int max_qp_;
521 const int max_framerate_; 532 const int max_framerate_;
522 const bool is_screencast_; 533 const bool is_screencast_;
523 const bool conference_mode_; 534 const bool conference_mode_;
524 }; 535 };
525 536
526 } // namespace cricket 537 } // namespace cricket
527 538
528 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_ 539 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_
OLDNEW
« no previous file with comments | « webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc ('k') | webrtc/media/engine/webrtcvideoengine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698