Make VideoSendStream/VideoReceiveStream configs const.
Benefits of this is that the send config previously had unclear locking
requirements, a lock was used to lock parts parts of it while
reconfiguring the VideoEncoder. Primary work was splitting out video
streams from config as well as encoder_settings as these change on
ReconfigureVideoEncoder. Now threading requirements for both member
configs are clear (as they are read-only), and encoder_settings doesn't
stay in the config as a stale pointer.
CreateVideoSendStream now takes video streams separately as well as the
encoder_settings pointer, analogous to ReconfigureVideoEncoder.
This change required changing so that pacing is silently enabled when
using suspend_below_min_bitrate rather than silently setting it.
R=henrik.lundin@webrtc.org, mflodman@webrtc.org, pthatcher@webrtc.org, stefan@webrtc.org
BUG=3260
Review URL: https://webrtc-codereview.appspot.com/20409004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6349 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index 886e3dc..8a43387 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -15,6 +15,7 @@
#include <vector>
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
+#include "webrtc/system_wrappers/interface/logging.h"
#include "webrtc/video_engine/include/vie_base.h"
#include "webrtc/video_engine/include/vie_capture.h"
#include "webrtc/video_engine/include/vie_codec.h"
@@ -32,18 +33,7 @@
ss << "{payload_name: " << payload_name;
ss << ", payload_type: " << payload_type;
if (encoder != NULL)
- ss << ", (encoder)";
- if (encoder_settings != NULL)
- ss << ", (encoder_settings)";
-
- ss << ", streams: {";
- for (size_t i = 0; i < streams.size(); ++i) {
- ss << streams[i].ToString();
- if (i != streams.size() - 1)
- ss << "}, {";
- }
- ss << '}';
-
+ ss << ", encoder: " << (encoder != NULL ? "(encoder)" : "NULL");
ss << '}';
return ss.str();
}
@@ -124,10 +114,11 @@
CpuOveruseObserver* overuse_observer,
webrtc::VideoEngine* video_engine,
const VideoSendStream::Config& config,
+ const std::vector<VideoStream> video_streams,
+ const void* encoder_settings,
int base_channel)
: transport_adapter_(transport),
encoded_frame_proxy_(config.post_encode_callback),
- codec_lock_(CriticalSectionWrapper::CreateCriticalSection()),
config_(config),
external_codec_(NULL),
channel_(-1),
@@ -141,7 +132,7 @@
assert(config_.rtp.ssrcs.size() > 0);
if (config_.suspend_below_min_bitrate)
- config_.pacing = true;
+ assert(config_.pacing);
rtp_rtcp_->SetTransmissionSmoothingStatus(channel_, config_.pacing);
assert(config_.rtp.min_transmit_bitrate_bps >= 0);
@@ -216,10 +207,8 @@
}
codec_ = ViECodec::GetInterface(video_engine);
- if (!ReconfigureVideoEncoder(config_.encoder_settings.streams,
- config_.encoder_settings.encoder_settings)) {
+ if (!ReconfigureVideoEncoder(video_streams, encoder_settings))
abort();
- }
if (overuse_observer)
video_engine_base_->RegisterCpuOveruseObserver(channel_, overuse_observer);
@@ -232,9 +221,8 @@
&encoded_frame_proxy_);
}
- if (config_.suspend_below_min_bitrate) {
+ if (config_.suspend_below_min_bitrate)
codec_->SuspendBelowMinBitrate(channel_);
- }
rtp_rtcp_->RegisterSendChannelRtcpStatisticsCallback(channel_,
stats_proxy_.get());
@@ -304,15 +292,12 @@
bool VideoSendStream::ReconfigureVideoEncoder(
const std::vector<VideoStream>& streams,
- void* encoder_settings) {
+ const void* encoder_settings) {
assert(!streams.empty());
assert(config_.rtp.ssrcs.size() >= streams.size());
// TODO(pbos): Wire encoder_settings.
assert(encoder_settings == NULL);
- // VideoStreams in config_.encoder_settings need to be locked.
- CriticalSectionScoped crit(codec_lock_.get());
-
VideoCodec video_codec;
memset(&video_codec, 0, sizeof(video_codec));
video_codec.codecType =
@@ -383,8 +368,8 @@
if (video_codec.startBitrate > video_codec.maxBitrate)
video_codec.startBitrate = video_codec.maxBitrate;
- assert(config_.encoder_settings.streams[0].max_framerate > 0);
- video_codec.maxFramerate = config_.encoder_settings.streams[0].max_framerate;
+ assert(streams[0].max_framerate > 0);
+ video_codec.maxFramerate = streams[0].max_framerate;
if (codec_->SetSendCodec(channel_, video_codec) != 0)
return false;
@@ -396,9 +381,6 @@
static_cast<unsigned char>(i));
}
- config_.encoder_settings.streams = streams;
- config_.encoder_settings.encoder_settings = encoder_settings;
-
if (config_.rtp.rtx.ssrcs.empty())
return true;