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

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

Issue 2257413002: Replace interface VideoCapturerInput with VideoSinkInterface. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: git cl format Created 4 years, 4 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 1561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 const VideoSendParameters& send_params) 1572 const VideoSendParameters& send_params)
1573 : worker_thread_(rtc::Thread::Current()), 1573 : worker_thread_(rtc::Thread::Current()),
1574 ssrcs_(sp.ssrcs), 1574 ssrcs_(sp.ssrcs),
1575 ssrc_groups_(sp.ssrc_groups), 1575 ssrc_groups_(sp.ssrc_groups),
1576 call_(call), 1576 call_(call),
1577 cpu_restricted_counter_(0), 1577 cpu_restricted_counter_(0),
1578 number_of_cpu_adapt_changes_(0), 1578 number_of_cpu_adapt_changes_(0),
1579 source_(nullptr), 1579 source_(nullptr),
1580 external_encoder_factory_(external_encoder_factory), 1580 external_encoder_factory_(external_encoder_factory),
1581 stream_(nullptr), 1581 stream_(nullptr),
1582 encoder_sink_(nullptr),
1582 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), 1583 parameters_(std::move(config), options, max_bitrate_bps, codec_settings),
1583 rtp_parameters_(CreateRtpParametersWithOneEncoding()), 1584 rtp_parameters_(CreateRtpParametersWithOneEncoding()),
1584 pending_encoder_reconfiguration_(false), 1585 pending_encoder_reconfiguration_(false),
1585 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), 1586 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
1586 sending_(false), 1587 sending_(false),
1587 last_frame_timestamp_ms_(0) { 1588 last_frame_timestamp_ms_(0) {
1588 parameters_.config.rtp.max_packet_size = kVideoMtu; 1589 parameters_.config.rtp.max_packet_size = kVideoMtu;
1589 parameters_.conference_mode = send_params.conference_mode; 1590 parameters_.conference_mode = send_params.conference_mode;
1590 1591
1591 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs); 1592 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 last_frame_info_.rotation = video_frame.rotation(); 1640 last_frame_info_.rotation = video_frame.rotation();
1640 last_frame_info_.is_texture = video_frame.is_texture(); 1641 last_frame_info_.is_texture = video_frame.is_texture();
1641 pending_encoder_reconfiguration_ = true; 1642 pending_encoder_reconfiguration_ = true;
1642 1643
1643 LOG(LS_INFO) << "Video frame parameters changed: dimensions=" 1644 LOG(LS_INFO) << "Video frame parameters changed: dimensions="
1644 << last_frame_info_.width << "x" << last_frame_info_.height 1645 << last_frame_info_.width << "x" << last_frame_info_.height
1645 << ", rotation=" << last_frame_info_.rotation 1646 << ", rotation=" << last_frame_info_.rotation
1646 << ", texture=" << last_frame_info_.is_texture; 1647 << ", texture=" << last_frame_info_.is_texture;
1647 } 1648 }
1648 1649
1649 if (stream_ == NULL) { 1650 if (encoder_sink_ == NULL) {
1650 // Frame input before send codecs are configured, dropping frame. 1651 // Frame input before send codecs are configured, dropping frame.
1651 return; 1652 return;
1652 } 1653 }
1653 1654
1654 int64_t frame_delta_ms = frame.GetTimeStamp() / rtc::kNumNanosecsPerMillisec; 1655 int64_t frame_delta_ms = frame.GetTimeStamp() / rtc::kNumNanosecsPerMillisec;
1655 1656
1656 // frame->GetTimeStamp() is essentially a delta, align to webrtc time 1657 // frame->GetTimeStamp() is essentially a delta, align to webrtc time
1657 if (!first_frame_timestamp_ms_) { 1658 if (!first_frame_timestamp_ms_) {
1658 first_frame_timestamp_ms_ = 1659 first_frame_timestamp_ms_ =
1659 rtc::Optional<int64_t>(rtc::TimeMillis() - frame_delta_ms); 1660 rtc::Optional<int64_t>(rtc::TimeMillis() - frame_delta_ms);
nisse-webrtc 2016/08/23 10:13:28 We should soon be able to delete this, since all c
perkj_webrtc 2016/09/01 11:46:16 Acknowledged.
1660 } 1661 }
1661 1662
1662 last_frame_timestamp_ms_ = *first_frame_timestamp_ms_ + frame_delta_ms; 1663 last_frame_timestamp_ms_ = *first_frame_timestamp_ms_ + frame_delta_ms;
1663 1664
1664 video_frame.set_render_time_ms(last_frame_timestamp_ms_); 1665 video_frame.set_render_time_ms(last_frame_timestamp_ms_);
1665 1666
1666 if (pending_encoder_reconfiguration_) { 1667 if (pending_encoder_reconfiguration_) {
1667 ReconfigureEncoder(); 1668 ReconfigureEncoder();
1668 pending_encoder_reconfiguration_ = false; 1669 pending_encoder_reconfiguration_ = false;
1669 } 1670 }
1670 1671
1671 // Not sending, abort after reconfiguration. Reconfiguration should still 1672 // Not sending, abort after reconfiguration. Reconfiguration should still
1672 // occur to permit sending this input as quickly as possible once we start 1673 // occur to permit sending this input as quickly as possible once we start
1673 // sending (without having to reconfigure then). 1674 // sending (without having to reconfigure then).
1674 if (!sending_) { 1675 if (!sending_) {
1675 return; 1676 return;
1676 } 1677 }
1677 1678
1678 stream_->Input()->IncomingCapturedFrame(video_frame); 1679 encoder_sink_->OnFrame(video_frame);
nisse-webrtc 2016/08/23 10:13:28 The old IncomingCapturedFrame was responsible for
perkj_webrtc 2016/09/01 11:46:15 That is still done in VieEncoder::OnFrame and is w
1679 } 1680 }
1680 1681
1681 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( 1682 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend(
1682 bool enable, 1683 bool enable,
1683 const VideoOptions* options, 1684 const VideoOptions* options,
1684 rtc::VideoSourceInterface<cricket::VideoFrame>* source) { 1685 rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
1685 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend"); 1686 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend");
1686 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 1687 RTC_DCHECK(thread_checker_.CalledOnValidThread());
1687 1688
1688 // Ignore |options| pointer if |enable| is false. 1689 // Ignore |options| pointer if |enable| is false.
1689 bool options_present = enable && options; 1690 bool options_present = enable && options;
1690 bool source_changing = source_ != source; 1691 bool source_changing = source_ != source;
1691 if (source_changing) { 1692 if (source_changing) {
1692 DisconnectSource(); 1693 DisconnectSource();
1693 } 1694 }
1694 1695
1695 if (options_present || source_changing) { 1696 if (options_present || source_changing) {
1696 rtc::CritScope cs(&lock_); 1697 rtc::CritScope cs(&lock_);
1697 1698
1698 if (options_present) { 1699 if (options_present) {
1699 VideoOptions old_options = parameters_.options; 1700 VideoOptions old_options = parameters_.options;
1700 parameters_.options.SetAll(*options); 1701 parameters_.options.SetAll(*options);
1701 // Reconfigure encoder settings on the naext frame or stream 1702 // Reconfigure encoder settings on the next frame or stream
1702 // recreation if the options changed. 1703 // recreation if the options changed.
1703 if (parameters_.options != old_options) { 1704 if (parameters_.options != old_options) {
1704 pending_encoder_reconfiguration_ = true; 1705 pending_encoder_reconfiguration_ = true;
1705 } 1706 }
1706 } 1707 }
1707 1708
1708 if (source_changing) { 1709 if (source_changing) {
1709 // Reset timestamps to realign new incoming frames to a webrtc timestamp. 1710 // Reset timestamps to realign new incoming frames to a webrtc timestamp.
1710 // A new source may have a different timestamp delta than the previous 1711 // A new source may have a different timestamp delta than the previous
1711 // one. 1712 // one.
1712 first_frame_timestamp_ms_ = rtc::Optional<int64_t>(); 1713 first_frame_timestamp_ms_ = rtc::Optional<int64_t>();
1713 1714
1714 if (source == nullptr && stream_ != nullptr) { 1715 if (source == nullptr && encoder_sink_ != nullptr) {
1715 LOG(LS_VERBOSE) << "Disabling capturer, sending black frame."; 1716 LOG(LS_VERBOSE) << "Disabling capturer, sending black frame.";
1716 // Force this black frame not to be dropped due to timestamp order 1717 // Force this black frame not to be dropped due to timestamp order
1717 // check. As IncomingCapturedFrame will drop the frame if this frame's 1718 // check. As IncomingCapturedFrame will drop the frame if this frame's
1718 // timestamp is less than or equal to last frame's timestamp, it is 1719 // timestamp is less than or equal to last frame's timestamp, it is
1719 // necessary to give this black frame a larger timestamp than the 1720 // necessary to give this black frame a larger timestamp than the
1720 // previous one. 1721 // previous one.
1721 last_frame_timestamp_ms_ += 1; 1722 last_frame_timestamp_ms_ += 1;
1722 rtc::scoped_refptr<webrtc::I420Buffer> black_buffer( 1723 rtc::scoped_refptr<webrtc::I420Buffer> black_buffer(
1723 webrtc::I420Buffer::Create(last_frame_info_.width, 1724 webrtc::I420Buffer::Create(last_frame_info_.width,
1724 last_frame_info_.height)); 1725 last_frame_info_.height));
1725 black_buffer->SetToBlack(); 1726 black_buffer->SetToBlack();
1726 1727
1727 stream_->Input()->IncomingCapturedFrame(webrtc::VideoFrame( 1728 encoder_sink_->OnFrame(webrtc::VideoFrame(
1728 black_buffer, 0 /* timestamp (90 kHz) */, 1729 black_buffer, 0 /* timestamp (90 kHz) */, last_frame_timestamp_ms_,
1729 last_frame_timestamp_ms_, last_frame_info_.rotation)); 1730 last_frame_info_.rotation));
1730 } 1731 }
1731 source_ = source; 1732 source_ = source;
1732 } 1733 }
1733 } 1734 }
1734 1735
1735 // |source_->AddOrUpdateSink| may not be called while holding |lock_| since 1736 // |source_->AddOrUpdateSink| may not be called while holding |lock_| since
1736 // that might cause a lock order inversion. 1737 // that might cause a lock order inversion.
1737 if (source_changing && source_) { 1738 if (source_changing && source_) {
1738 source_->AddOrUpdateSink(this, sink_wants_); 1739 source_->AddOrUpdateSink(this, sink_wants_);
1739 } 1740 }
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
2041 2042
2042 parameters_.encoder_config = std::move(encoder_config); 2043 parameters_.encoder_config = std::move(encoder_config);
2043 } 2044 }
2044 2045
2045 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { 2046 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) {
2046 rtc::CritScope cs(&lock_); 2047 rtc::CritScope cs(&lock_);
2047 sending_ = send; 2048 sending_ = send;
2048 UpdateSendState(); 2049 UpdateSendState();
2049 } 2050 }
2050 2051
2052 void WebRtcVideoChannel2::WebRtcVideoSendStream::AddOrUpdateSink(
2053 VideoSinkInterface<webrtc::VideoFrame>* sink,
2054 const rtc::VideoSinkWants& wants) {
2055 rtc::CritScope cs(&lock_);
2056 encoder_sink_ = sink;
nisse-webrtc 2016/08/22 07:20:29 Only one sink supported, right? Add a CHECK that e
perkj_webrtc 2016/09/01 11:46:16 Done.
2057 }
2058
2059 void WebRtcVideoChannel2::WebRtcVideoSendStream::RemoveSink(
2060 VideoSinkInterface<webrtc::VideoFrame>* sink) {
2061 rtc::CritScope cs(&lock_);
2062 encoder_sink_ = nullptr;
nisse-webrtc 2016/08/22 07:20:29 Similarly, add a CHECK that encoder_sink_ == sink?
perkj_webrtc 2016/09/01 11:46:15 Done.
2063 }
2064
2051 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { 2065 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) {
2052 if (worker_thread_ != rtc::Thread::Current()) { 2066 if (worker_thread_ != rtc::Thread::Current()) {
2053 invoker_.AsyncInvoke<void>( 2067 invoker_.AsyncInvoke<void>(
2054 RTC_FROM_HERE, worker_thread_, 2068 RTC_FROM_HERE, worker_thread_,
2055 rtc::Bind(&WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate, 2069 rtc::Bind(&WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate,
2056 this, load)); 2070 this, load));
2057 return; 2071 return;
2058 } 2072 }
2059 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 2073 RTC_DCHECK(thread_checker_.CalledOnValidThread());
2060 if (!source_) { 2074 if (!source_) {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
2233 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); 2247 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec);
2234 2248
2235 webrtc::VideoSendStream::Config config = parameters_.config.Copy(); 2249 webrtc::VideoSendStream::Config config = parameters_.config.Copy();
2236 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { 2250 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) {
2237 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " 2251 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX "
2238 "payload type the set codec. Ignoring RTX."; 2252 "payload type the set codec. Ignoring RTX.";
2239 config.rtp.rtx.ssrcs.clear(); 2253 config.rtp.rtx.ssrcs.clear();
2240 } 2254 }
2241 stream_ = call_->CreateVideoSendStream(std::move(config), 2255 stream_ = call_->CreateVideoSendStream(std::move(config),
2242 parameters_.encoder_config.Copy()); 2256 parameters_.encoder_config.Copy());
2257 stream_->SetSource(this);
2243 2258
2244 parameters_.encoder_config.encoder_specific_settings = NULL; 2259 parameters_.encoder_config.encoder_specific_settings = NULL;
2245 pending_encoder_reconfiguration_ = false; 2260 pending_encoder_reconfiguration_ = false;
2246 2261
2247 if (sending_) { 2262 if (sending_) {
2248 stream_->Start(); 2263 stream_->Start();
2249 } 2264 }
2250 } 2265 }
2251 2266
2252 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( 2267 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
2697 rtx_mapping[video_codecs[i].codec.id] != 2712 rtx_mapping[video_codecs[i].codec.id] !=
2698 fec_settings.red_payload_type) { 2713 fec_settings.red_payload_type) {
2699 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2714 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2700 } 2715 }
2701 } 2716 }
2702 2717
2703 return video_codecs; 2718 return video_codecs;
2704 } 2719 }
2705 2720
2706 } // namespace cricket 2721 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698