Fix stats for encoder target bitrate when target rate is zero.
When the target bitrate is zero, currently VideoSendStream.Stats.target_media_bitrate_bps show the last set rate before the target was set to zero. BUG=webrtc::5687 b/29574845 Review-Url: https://codereview.webrtc.org/2122743003 Cr-Commit-Position: refs/heads/master@{#13386}
This commit is contained in:
@ -90,7 +90,6 @@ VCMExtDecoderMapItem::VCMExtDecoderMapItem(
|
||||
external_decoder_instance(external_decoder_instance) {}
|
||||
|
||||
VCMCodecDataBase::VCMCodecDataBase(
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMEncodedFrameCallback* encoded_frame_callback)
|
||||
: number_of_cores_(0),
|
||||
max_payload_size_(kDefaultPayloadSize),
|
||||
@ -101,7 +100,6 @@ VCMCodecDataBase::VCMCodecDataBase(
|
||||
encoder_payload_type_(0),
|
||||
external_encoder_(nullptr),
|
||||
internal_source_(false),
|
||||
encoder_rate_observer_(encoder_rate_observer),
|
||||
encoded_frame_callback_(encoded_frame_callback),
|
||||
ptr_decoder_(nullptr),
|
||||
dec_map_(),
|
||||
@ -245,9 +243,8 @@ bool VCMCodecDataBase::SetSendCodec(const VideoCodec* send_codec,
|
||||
DeleteEncoder();
|
||||
RTC_DCHECK_EQ(encoder_payload_type_, send_codec_.plType)
|
||||
<< "Encoder not registered for payload type " << send_codec_.plType;
|
||||
ptr_encoder_.reset(
|
||||
new VCMGenericEncoder(external_encoder_, encoder_rate_observer_,
|
||||
encoded_frame_callback_, internal_source_));
|
||||
ptr_encoder_.reset(new VCMGenericEncoder(
|
||||
external_encoder_, encoded_frame_callback_, internal_source_));
|
||||
encoded_frame_callback_->SetInternalSource(internal_source_);
|
||||
if (ptr_encoder_->InitEncode(&send_codec_, number_of_cores_,
|
||||
max_payload_size_) < 0) {
|
||||
|
||||
@ -44,8 +44,7 @@ struct VCMExtDecoderMapItem {
|
||||
|
||||
class VCMCodecDataBase {
|
||||
public:
|
||||
VCMCodecDataBase(VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMEncodedFrameCallback* encoded_frame_callback);
|
||||
explicit VCMCodecDataBase(VCMEncodedFrameCallback* encoded_frame_callback);
|
||||
~VCMCodecDataBase();
|
||||
|
||||
// Sender Side
|
||||
@ -154,7 +153,6 @@ class VCMCodecDataBase {
|
||||
uint8_t encoder_payload_type_;
|
||||
VideoEncoder* external_encoder_;
|
||||
bool internal_source_;
|
||||
VideoEncoderRateObserver* const encoder_rate_observer_;
|
||||
VCMEncodedFrameCallback* const encoded_frame_callback_;
|
||||
std::unique_ptr<VCMGenericEncoder> ptr_encoder_;
|
||||
VCMGenericDecoder* ptr_decoder_;
|
||||
|
||||
@ -23,11 +23,9 @@
|
||||
namespace webrtc {
|
||||
VCMGenericEncoder::VCMGenericEncoder(
|
||||
VideoEncoder* encoder,
|
||||
VideoEncoderRateObserver* rate_observer,
|
||||
VCMEncodedFrameCallback* encoded_frame_callback,
|
||||
bool internal_source)
|
||||
: encoder_(encoder),
|
||||
rate_observer_(rate_observer),
|
||||
vcm_encoded_frame_callback_(encoded_frame_callback),
|
||||
internal_source_(internal_source),
|
||||
encoder_params_({0, 0, 0, 0}),
|
||||
@ -102,10 +100,6 @@ void VCMGenericEncoder::SetEncoderParameters(const EncoderParameters& params) {
|
||||
if (rates_have_changed) {
|
||||
uint32_t target_bitrate_kbps = (params.target_bitrate + 500) / 1000;
|
||||
encoder_->SetRates(target_bitrate_kbps, params.input_frame_rate);
|
||||
if (rate_observer_) {
|
||||
rate_observer_->OnSetRates(params.target_bitrate,
|
||||
params.input_frame_rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -59,7 +59,6 @@ class VCMGenericEncoder {
|
||||
|
||||
public:
|
||||
VCMGenericEncoder(VideoEncoder* encoder,
|
||||
VideoEncoderRateObserver* rate_observer,
|
||||
VCMEncodedFrameCallback* encoded_frame_callback,
|
||||
bool internal_source);
|
||||
~VCMGenericEncoder();
|
||||
@ -86,7 +85,6 @@ class VCMGenericEncoder {
|
||||
rtc::RaceChecker race_checker_;
|
||||
|
||||
VideoEncoder* const encoder_ GUARDED_BY(race_checker_);
|
||||
VideoEncoderRateObserver* const rate_observer_;
|
||||
VCMEncodedFrameCallback* const vcm_encoded_frame_callback_;
|
||||
const bool internal_source_;
|
||||
rtc::CriticalSection params_lock_;
|
||||
|
||||
@ -72,21 +72,15 @@ class VideoCodingModule : public Module {
|
||||
|
||||
enum ReceiverRobustness { kNone, kHardNack, kSoftNack, kReferenceSelection };
|
||||
|
||||
static VideoCodingModule* Create(
|
||||
Clock* clock,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMQMSettingsCallback* qm_settings_callback);
|
||||
static VideoCodingModule* Create(Clock* clock, EventFactory* event_factory);
|
||||
|
||||
static VideoCodingModule* Create(
|
||||
Clock* clock,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMQMSettingsCallback* qm_settings_callback,
|
||||
NackSender* nack_sender,
|
||||
KeyFrameRequestSender* keyframe_request_sender,
|
||||
EncodedImageCallback* pre_decode_image_callback);
|
||||
|
||||
static VideoCodingModule* Create(Clock* clock, EventFactory* event_factory);
|
||||
|
||||
static VideoCodingModule* Create(
|
||||
Clock* clock,
|
||||
EventFactory* event_factory,
|
||||
|
||||
@ -126,12 +126,6 @@ class VCMProtectionCallback {
|
||||
virtual ~VCMProtectionCallback() {}
|
||||
};
|
||||
|
||||
class VideoEncoderRateObserver {
|
||||
public:
|
||||
virtual ~VideoEncoderRateObserver() {}
|
||||
virtual void OnSetRates(uint32_t bitrate_bps, int framerate) = 0;
|
||||
};
|
||||
|
||||
// Callback class used for telling the user about what frame type needed to
|
||||
// continue decoding.
|
||||
// Typically a key frame when the stream has been corrupted in some way.
|
||||
|
||||
@ -73,12 +73,11 @@ class VideoCodingModuleImpl : public VideoCodingModule {
|
||||
public:
|
||||
VideoCodingModuleImpl(Clock* clock,
|
||||
EventFactory* event_factory,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
NackSender* nack_sender,
|
||||
KeyFrameRequestSender* keyframe_request_sender,
|
||||
EncodedImageCallback* pre_decode_image_callback)
|
||||
: VideoCodingModule(),
|
||||
sender_(clock, &post_encode_callback_, encoder_rate_observer, nullptr),
|
||||
sender_(clock, &post_encode_callback_, nullptr),
|
||||
receiver_(clock,
|
||||
event_factory,
|
||||
pre_decode_image_callback,
|
||||
@ -263,29 +262,15 @@ void VideoCodingModule::Codec(VideoCodecType codecType, VideoCodec* codec) {
|
||||
VCMCodecDataBase::Codec(codecType, codec);
|
||||
}
|
||||
|
||||
// Create method for current interface, will be removed when the
|
||||
// new jitter buffer is in place.
|
||||
VideoCodingModule* VideoCodingModule::Create(
|
||||
Clock* clock,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMQMSettingsCallback* qm_settings_callback) {
|
||||
return VideoCodingModule::Create(clock, encoder_rate_observer,
|
||||
qm_settings_callback,
|
||||
nullptr, // NackSender
|
||||
nullptr, // KeyframeRequestSender
|
||||
nullptr); // Pre-decode image callback
|
||||
}
|
||||
|
||||
// Create method for the new jitter buffer.
|
||||
VideoCodingModule* VideoCodingModule::Create(
|
||||
Clock* clock,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMQMSettingsCallback* qm_settings_callback,
|
||||
NackSender* nack_sender,
|
||||
KeyFrameRequestSender* keyframe_request_sender,
|
||||
EncodedImageCallback* pre_decode_image_callback) {
|
||||
return new VideoCodingModuleImpl(clock, nullptr, encoder_rate_observer,
|
||||
nack_sender, keyframe_request_sender,
|
||||
return new VideoCodingModuleImpl(clock, nullptr, nack_sender,
|
||||
keyframe_request_sender,
|
||||
pre_decode_image_callback);
|
||||
}
|
||||
|
||||
@ -306,7 +291,7 @@ VideoCodingModule* VideoCodingModule::Create(
|
||||
KeyFrameRequestSender* keyframe_request_sender) {
|
||||
assert(clock);
|
||||
assert(event_factory);
|
||||
return new VideoCodingModuleImpl(clock, event_factory, nullptr, nack_sender,
|
||||
return new VideoCodingModuleImpl(clock, event_factory, nack_sender,
|
||||
keyframe_request_sender, nullptr);
|
||||
}
|
||||
|
||||
|
||||
@ -58,7 +58,6 @@ class VideoSender : public Module {
|
||||
|
||||
VideoSender(Clock* clock,
|
||||
EncodedImageCallback* post_encode_callback,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMSendStatisticsCallback* send_stats_callback);
|
||||
|
||||
~VideoSender();
|
||||
|
||||
@ -45,7 +45,7 @@ VideoReceiver::VideoReceiver(Clock* clock,
|
||||
_scheduleKeyRequest(false),
|
||||
drop_frames_until_keyframe_(false),
|
||||
max_nack_list_size_(0),
|
||||
_codecDataBase(nullptr, nullptr),
|
||||
_codecDataBase(nullptr),
|
||||
pre_decode_image_callback_(pre_decode_image_callback),
|
||||
_receiveStatsTimer(1000, clock_),
|
||||
_retransmissionTimer(10, clock_),
|
||||
|
||||
@ -26,14 +26,13 @@ namespace vcm {
|
||||
|
||||
VideoSender::VideoSender(Clock* clock,
|
||||
EncodedImageCallback* post_encode_callback,
|
||||
VideoEncoderRateObserver* encoder_rate_observer,
|
||||
VCMSendStatisticsCallback* send_stats_callback)
|
||||
: clock_(clock),
|
||||
_encoder(nullptr),
|
||||
_mediaOpt(clock_),
|
||||
_encodedFrameCallback(post_encode_callback, &_mediaOpt),
|
||||
send_stats_callback_(send_stats_callback),
|
||||
_codecDataBase(encoder_rate_observer, &_encodedFrameCallback),
|
||||
_codecDataBase(&_encodedFrameCallback),
|
||||
frame_dropper_enabled_(true),
|
||||
_sendStatsTimer(1000, clock_),
|
||||
current_codec_(),
|
||||
|
||||
@ -180,8 +180,7 @@ class TestVideoSender : public ::testing::Test {
|
||||
TestVideoSender() : clock_(1000), encoded_frame_callback_(&clock_) {}
|
||||
|
||||
void SetUp() override {
|
||||
sender_.reset(
|
||||
new VideoSender(&clock_, &encoded_frame_callback_, nullptr, nullptr));
|
||||
sender_.reset(new VideoSender(&clock_, &encoded_frame_callback_, nullptr));
|
||||
}
|
||||
|
||||
void AddFrame() {
|
||||
|
||||
Reference in New Issue
Block a user