| Index: webrtc/media/engine/webrtcvideoengine.cc
|
| diff --git a/webrtc/media/engine/webrtcvideoengine.cc b/webrtc/media/engine/webrtcvideoengine.cc
|
| index 284eb9a643e61846ede8557a69fa8274cb166925..a21f63359dafef87d3e43d26e18a72ed614279ca 100644
|
| --- a/webrtc/media/engine/webrtcvideoengine.cc
|
| +++ b/webrtc/media/engine/webrtcvideoengine.cc
|
| @@ -68,8 +68,6 @@ class EncoderFactoryAdapter {
|
| bool is_conference_mode_screenshare) const = 0;
|
|
|
| virtual std::vector<VideoCodec> GetSupportedCodecs() const = 0;
|
| -
|
| - virtual std::unique_ptr<EncoderFactoryAdapter> clone() const = 0;
|
| };
|
|
|
| class DecoderFactoryAdapter {
|
| @@ -79,12 +77,13 @@ class DecoderFactoryAdapter {
|
| virtual std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder(
|
| const VideoCodec& codec,
|
| const VideoDecoderParams& decoder_params) const = 0;
|
| -
|
| - virtual std::unique_ptr<DecoderFactoryAdapter> clone() const = 0;
|
| };
|
|
|
| namespace {
|
|
|
| +std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs(
|
| + const std::vector<VideoCodec>& input_codecs);
|
| +
|
| // Wraps cricket::WebRtcVideoEncoderFactory* into common EncoderFactoryAdapter
|
| // interface.
|
| // TODO(magjed): Add wrapper class for future webrtc::VideoEncoderFactory
|
| @@ -107,11 +106,6 @@ class CricketEncoderFactoryAdapter : public EncoderFactoryAdapter {
|
|
|
| std::vector<VideoCodec> GetSupportedCodecs() const override;
|
|
|
| - std::unique_ptr<EncoderFactoryAdapter> clone() const override {
|
| - return std::unique_ptr<EncoderFactoryAdapter>(
|
| - new CricketEncoderFactoryAdapter(*this));
|
| - }
|
| -
|
| const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_;
|
| WebRtcVideoEncoderFactory* const external_encoder_factory_;
|
| };
|
| @@ -132,11 +126,6 @@ class CricketDecoderFactoryAdapter : public DecoderFactoryAdapter {
|
| const VideoCodec& codec,
|
| const VideoDecoderParams& decoder_params) const override;
|
|
|
| - std::unique_ptr<DecoderFactoryAdapter> clone() const override {
|
| - return std::unique_ptr<DecoderFactoryAdapter>(
|
| - new CricketDecoderFactoryAdapter(*this));
|
| - }
|
| -
|
| const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_;
|
| WebRtcVideoDecoderFactory* const external_decoder_factory_;
|
| };
|
| @@ -402,12 +391,13 @@ void DefaultUnsignalledSsrcHandler::SetDefaultSink(
|
| }
|
| }
|
|
|
| -WebRtcVideoEngine::WebRtcVideoEngine()
|
| - : initialized_(false),
|
| - decoder_factory_(new CricketDecoderFactoryAdapter(
|
| - nullptr /* external_decoder_factory */)),
|
| - encoder_factory_(new CricketEncoderFactoryAdapter(
|
| - nullptr /* external_encoder_factory */)) {
|
| +WebRtcVideoEngine::WebRtcVideoEngine(
|
| + WebRtcVideoEncoderFactory* external_video_encoder_factory,
|
| + WebRtcVideoDecoderFactory* external_video_decoder_factory)
|
| + : decoder_factory_(
|
| + new CricketDecoderFactoryAdapter(external_video_decoder_factory)),
|
| + encoder_factory_(
|
| + new CricketEncoderFactoryAdapter(external_video_encoder_factory)) {
|
| LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()";
|
| }
|
|
|
| @@ -415,19 +405,13 @@ WebRtcVideoEngine::~WebRtcVideoEngine() {
|
| LOG(LS_INFO) << "WebRtcVideoEngine::~WebRtcVideoEngine";
|
| }
|
|
|
| -void WebRtcVideoEngine::Init() {
|
| - LOG(LS_INFO) << "WebRtcVideoEngine::Init";
|
| - initialized_ = true;
|
| -}
|
| -
|
| WebRtcVideoChannel* WebRtcVideoEngine::CreateChannel(
|
| webrtc::Call* call,
|
| const MediaConfig& config,
|
| const VideoOptions& options) {
|
| - RTC_DCHECK(initialized_);
|
| LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString();
|
| - return new WebRtcVideoChannel(call, config, options, *encoder_factory_,
|
| - *decoder_factory_);
|
| + return new WebRtcVideoChannel(call, config, options, encoder_factory_.get(),
|
| + decoder_factory_.get());
|
| }
|
|
|
| std::vector<VideoCodec> WebRtcVideoEngine::codecs() const {
|
| @@ -460,23 +444,12 @@ RtpCapabilities WebRtcVideoEngine::GetCapabilities() const {
|
| return capabilities;
|
| }
|
|
|
| -void WebRtcVideoEngine::SetExternalDecoderFactory(
|
| - WebRtcVideoDecoderFactory* decoder_factory) {
|
| - RTC_DCHECK(!initialized_);
|
| - decoder_factory_.reset(new CricketDecoderFactoryAdapter(decoder_factory));
|
| -}
|
| -
|
| -void WebRtcVideoEngine::SetExternalEncoderFactory(
|
| - WebRtcVideoEncoderFactory* encoder_factory) {
|
| - RTC_DCHECK(!initialized_);
|
| - encoder_factory_.reset(new CricketEncoderFactoryAdapter(encoder_factory));
|
| -}
|
| -
|
| +namespace {
|
| // This function will assign dynamic payload types (in the range [96, 127]) to
|
| // the input codecs, and also add associated RTX codecs for recognized codecs
|
| // (VP8, VP9, H264, and RED). It will also add default feedback params to the
|
| // codecs.
|
| -static std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs(
|
| +std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs(
|
| const std::vector<VideoCodec>& input_codecs) {
|
| static const int kFirstDynamicPayloadType = 96;
|
| static const int kLastDynamicPayloadType = 127;
|
| @@ -513,6 +486,7 @@ static std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs(
|
| }
|
| return output_codecs;
|
| }
|
| +} // namespace
|
|
|
| std::vector<VideoCodec> CricketEncoderFactoryAdapter::GetSupportedCodecs()
|
| const {
|
| @@ -540,14 +514,14 @@ WebRtcVideoChannel::WebRtcVideoChannel(
|
| webrtc::Call* call,
|
| const MediaConfig& config,
|
| const VideoOptions& options,
|
| - const EncoderFactoryAdapter& encoder_factory,
|
| - const DecoderFactoryAdapter& decoder_factory)
|
| + const EncoderFactoryAdapter* encoder_factory,
|
| + const DecoderFactoryAdapter* decoder_factory)
|
| : VideoMediaChannel(config),
|
| call_(call),
|
| unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
|
| video_config_(config.video),
|
| - encoder_factory_(encoder_factory.clone()),
|
| - decoder_factory_(decoder_factory.clone()),
|
| + encoder_factory_(encoder_factory),
|
| + decoder_factory_(decoder_factory),
|
| default_send_options_(options),
|
| last_stats_log_ms_(-1) {
|
| RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -1052,7 +1026,7 @@ bool WebRtcVideoChannel::AddSendStream(const StreamParams& sp) {
|
| config.periodic_alr_bandwidth_probing =
|
| video_config_.periodic_alr_bandwidth_probing;
|
| WebRtcVideoSendStream* stream = new WebRtcVideoSendStream(
|
| - call_, sp, std::move(config), default_send_options_, *encoder_factory_,
|
| + call_, sp, std::move(config), default_send_options_, encoder_factory_,
|
| video_config_.enable_cpu_overuse_detection,
|
| bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_,
|
| send_params_);
|
| @@ -1163,7 +1137,7 @@ bool WebRtcVideoChannel::AddRecvStream(const StreamParams& sp,
|
| config.sync_group = sp.sync_label;
|
|
|
| receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
|
| - call_, sp, std::move(config), *decoder_factory_, default_stream,
|
| + call_, sp, std::move(config), decoder_factory_, default_stream,
|
| recv_codecs_, flexfec_config);
|
|
|
| return true;
|
| @@ -1502,7 +1476,7 @@ WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
| const StreamParams& sp,
|
| webrtc::VideoSendStream::Config config,
|
| const VideoOptions& options,
|
| - const EncoderFactoryAdapter& encoder_factory,
|
| + const EncoderFactoryAdapter* encoder_factory,
|
| bool enable_cpu_overuse_detection,
|
| int max_bitrate_bps,
|
| const rtc::Optional<VideoCodecSettings>& codec_settings,
|
| @@ -1516,7 +1490,7 @@ WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
| call_(call),
|
| enable_cpu_overuse_detection_(enable_cpu_overuse_detection),
|
| source_(nullptr),
|
| - encoder_factory_(encoder_factory.clone()),
|
| + encoder_factory_(encoder_factory),
|
| stream_(nullptr),
|
| encoder_sink_(nullptr),
|
| parameters_(std::move(config), options, max_bitrate_bps, codec_settings),
|
| @@ -2103,7 +2077,7 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
|
| webrtc::Call* call,
|
| const StreamParams& sp,
|
| webrtc::VideoReceiveStream::Config config,
|
| - const DecoderFactoryAdapter& decoder_factory,
|
| + const DecoderFactoryAdapter* decoder_factory,
|
| bool default_stream,
|
| const std::vector<VideoCodecSettings>& recv_codecs,
|
| const webrtc::FlexfecReceiveStream::Config& flexfec_config)
|
| @@ -2114,7 +2088,7 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
|
| config_(std::move(config)),
|
| flexfec_config_(flexfec_config),
|
| flexfec_stream_(nullptr),
|
| - decoder_factory_(decoder_factory.clone()),
|
| + decoder_factory_(decoder_factory),
|
| sink_(NULL),
|
| first_frame_timestamp_(-1),
|
| estimated_remote_start_ntp_time_ms_(0) {
|
|
|