Wire up target_media_bitrate in VideoSendStream.
Also wires up target_enc_bitrate in WebRtcVideoEngine2. BUG=1667,1788 R=mflodman@webrtc.org, stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/42479004 Cr-Commit-Position: refs/heads/master@{#8515} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8515 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -1566,6 +1566,64 @@ void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
|
||||
RunBaseTest(&test);
|
||||
}
|
||||
|
||||
TEST_F(EndToEndTest, ReportsSetEncoderRates) {
|
||||
class EncoderRateStatsTest : public test::EndToEndTest,
|
||||
public test::FakeEncoder {
|
||||
public:
|
||||
EncoderRateStatsTest()
|
||||
: EndToEndTest(kDefaultTimeoutMs),
|
||||
FakeEncoder(Clock::GetRealTimeClock()) {}
|
||||
|
||||
virtual void OnStreamsCreated(
|
||||
VideoSendStream* send_stream,
|
||||
const std::vector<VideoReceiveStream*>& receive_streams) override {
|
||||
send_stream_ = send_stream;
|
||||
}
|
||||
|
||||
virtual void ModifyConfigs(
|
||||
VideoSendStream::Config* send_config,
|
||||
std::vector<VideoReceiveStream::Config>* receive_configs,
|
||||
VideoEncoderConfig* encoder_config) override {
|
||||
send_config->encoder_settings.encoder = this;
|
||||
}
|
||||
|
||||
int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override {
|
||||
// Make sure not to trigger on any default zero bitrates.
|
||||
if (new_target_bitrate == 0)
|
||||
return 0;
|
||||
CriticalSectionScoped lock(crit_.get());
|
||||
bitrate_kbps_ = new_target_bitrate;
|
||||
observation_complete_->Set();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PerformTest() override {
|
||||
ASSERT_EQ(kEventSignaled, Wait())
|
||||
<< "Timed out while waiting for encoder SetRates() call.";
|
||||
// Wait for GetStats to report a corresponding bitrate.
|
||||
for (unsigned int i = 0; i < kDefaultTimeoutMs; ++i) {
|
||||
VideoSendStream::Stats stats = send_stream_->GetStats();
|
||||
{
|
||||
CriticalSectionScoped lock(crit_.get());
|
||||
if ((stats.target_media_bitrate_bps + 500) / 1000 ==
|
||||
static_cast<int>(bitrate_kbps_)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
SleepMs(1);
|
||||
}
|
||||
FAIL()
|
||||
<< "Timed out waiting for stats reporting the currently set bitrate.";
|
||||
}
|
||||
|
||||
private:
|
||||
VideoSendStream* send_stream_;
|
||||
uint32_t bitrate_kbps_ GUARDED_BY(crit_);
|
||||
} test;
|
||||
|
||||
RunBaseTest(&test);
|
||||
}
|
||||
|
||||
TEST_F(EndToEndTest, GetStats) {
|
||||
static const int kStartBitrateBps = 3000000;
|
||||
class StatsObserver : public test::EndToEndTest, public I420FrameCallback {
|
||||
|
||||
@ -95,6 +95,11 @@ VideoSendStream::StreamStats* SendStatisticsProxy::GetStatsEntry(
|
||||
return &stats_.substreams[ssrc]; // Insert new entry and return ptr.
|
||||
}
|
||||
|
||||
void SendStatisticsProxy::OnSetRates(uint32_t bitrate_bps, int framerate) {
|
||||
CriticalSectionScoped lock(crit_.get());
|
||||
stats_.target_media_bitrate_bps = bitrate_bps;
|
||||
}
|
||||
|
||||
void SendStatisticsProxy::OnSendEncodedImage(
|
||||
const EncodedImage& encoded_image,
|
||||
const RTPVideoHeader* rtp_video_header) {
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "webrtc/base/thread_annotations.h"
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
|
||||
#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
|
||||
#include "webrtc/system_wrappers/interface/clock.h"
|
||||
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
|
||||
#include "webrtc/video_engine/include/vie_base.h"
|
||||
@ -35,6 +36,7 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver,
|
||||
public FrameCountObserver,
|
||||
public ViEEncoderObserver,
|
||||
public ViECaptureObserver,
|
||||
public VideoEncoderRateObserver,
|
||||
public SendSideDelayObserver {
|
||||
public:
|
||||
static const int kStatsTimeoutMs;
|
||||
@ -47,6 +49,9 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver,
|
||||
virtual void OnSendEncodedImage(const EncodedImage& encoded_image,
|
||||
const RTPVideoHeader* rtp_video_header);
|
||||
|
||||
// From VideoEncoderRateObserver.
|
||||
void OnSetRates(uint32_t bitrate_bps, int framerate) override;
|
||||
|
||||
protected:
|
||||
// From CpuOveruseMetricsObserver.
|
||||
void CpuOveruseMetricsUpdated(const CpuOveruseMetrics& metrics) OVERRIDE;
|
||||
|
||||
Reference in New Issue
Block a user