diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-22 18:59:12 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-22 18:59:12 +0000 |
commit | cc00e0878070031e59aa296dcfb08508579a798a (patch) | |
tree | 31df34527955aecf7846ee486ceb10414003e8fe /media | |
parent | 536324ec9e4c6c9db5f3a2485f793ec64e3c4b0f (diff) | |
download | chromium_src-cc00e0878070031e59aa296dcfb08508579a798a.zip chromium_src-cc00e0878070031e59aa296dcfb08508579a798a.tar.gz chromium_src-cc00e0878070031e59aa296dcfb08508579a798a.tar.bz2 |
Cast: Fake software video encoder to respect target bitrate
This change is to enable simulation using fake software encoder. It now
respects the target bitrate and fill the fake frame with space
characers.
Review URL: https://codereview.chromium.org/289283014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272257 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/cast/test/end2end_unittest.cc | 6 | ||||
-rw-r--r-- | media/cast/video_sender/fake_software_video_encoder.cc | 22 | ||||
-rw-r--r-- | media/cast/video_sender/fake_software_video_encoder.h | 5 | ||||
-rw-r--r-- | media/cast/video_sender/video_encoder_impl.cc | 2 |
4 files changed, 21 insertions, 14 deletions
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc index f1567a5..f46d526 100644 --- a/media/cast/test/end2end_unittest.cc +++ b/media/cast/test/end2end_unittest.cc @@ -493,9 +493,9 @@ class End2EndTest : public ::testing::Test { video_sender_config_.use_external_encoder = false; video_sender_config_.width = kVideoHdWidth; video_sender_config_.height = kVideoHdHeight; - video_sender_config_.max_bitrate = 5000000; - video_sender_config_.min_bitrate = 1000000; - video_sender_config_.start_bitrate = 5000000; + video_sender_config_.max_bitrate = 50000; + video_sender_config_.min_bitrate = 10000; + video_sender_config_.start_bitrate = 10000; video_sender_config_.max_qp = 30; video_sender_config_.min_qp = 4; video_sender_config_.max_frame_rate = 30; diff --git a/media/cast/video_sender/fake_software_video_encoder.cc b/media/cast/video_sender/fake_software_video_encoder.cc index 01a3cce..ee8fe0f 100644 --- a/media/cast/video_sender/fake_software_video_encoder.cc +++ b/media/cast/video_sender/fake_software_video_encoder.cc @@ -13,10 +13,13 @@ namespace media { namespace cast { -FakeSoftwareVideoEncoder::FakeSoftwareVideoEncoder() - : next_frame_is_key_(true), +FakeSoftwareVideoEncoder::FakeSoftwareVideoEncoder( + const VideoSenderConfig& video_config) + : video_config_(video_config), + next_frame_is_key_(true), frame_id_(0), - frame_id_to_reference_(0) { + frame_id_to_reference_(0), + frame_size_(0) { } FakeSoftwareVideoEncoder::~FakeSoftwareVideoEncoder() {} @@ -37,17 +40,18 @@ bool FakeSoftwareVideoEncoder::Encode( } base::DictionaryValue values; - values.Set("key", base::Value::CreateBooleanValue( - encoded_image->dependency == transport::EncodedFrame::KEY)); - values.Set("id", base::Value::CreateIntegerValue(encoded_image->frame_id)); - values.Set("ref", base::Value::CreateIntegerValue( - encoded_image->referenced_frame_id)); + values.SetBoolean("key", + encoded_image->dependency == transport::EncodedFrame::KEY); + values.SetInteger("ref", encoded_image->referenced_frame_id); + values.SetInteger("id", encoded_image->frame_id); + values.SetInteger("size", frame_size_); + values.SetString("data", std::string(frame_size_, ' ')); base::JSONWriter::Write(&values, &encoded_image->data); return true; } void FakeSoftwareVideoEncoder::UpdateRates(uint32 new_bitrate) { - // TODO(hclam): Implement bitrate control. + frame_size_ = new_bitrate / video_config_.max_frame_rate / 8; } void FakeSoftwareVideoEncoder::GenerateKeyFrame() { diff --git a/media/cast/video_sender/fake_software_video_encoder.h b/media/cast/video_sender/fake_software_video_encoder.h index 03d83c2..0eb88dd 100644 --- a/media/cast/video_sender/fake_software_video_encoder.h +++ b/media/cast/video_sender/fake_software_video_encoder.h @@ -5,6 +5,7 @@ #ifndef MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_ #define MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_ +#include "media/cast/cast_config.h" #include "media/cast/video_sender/software_video_encoder.h" namespace media { @@ -12,7 +13,7 @@ namespace cast { class FakeSoftwareVideoEncoder : public SoftwareVideoEncoder { public: - FakeSoftwareVideoEncoder(); + FakeSoftwareVideoEncoder(const VideoSenderConfig& video_config); virtual ~FakeSoftwareVideoEncoder(); // SoftwareVideoEncoder implementations. @@ -24,9 +25,11 @@ class FakeSoftwareVideoEncoder : public SoftwareVideoEncoder { virtual void LatestFrameIdToReference(uint32 frame_id) OVERRIDE; private: + VideoSenderConfig video_config_; bool next_frame_is_key_; uint32 frame_id_; uint32 frame_id_to_reference_; + int frame_size_; }; } // namespace cast diff --git a/media/cast/video_sender/video_encoder_impl.cc b/media/cast/video_sender/video_encoder_impl.cc index 7f8f1e4..039813b 100644 --- a/media/cast/video_sender/video_encoder_impl.cc +++ b/media/cast/video_sender/video_encoder_impl.cc @@ -81,7 +81,7 @@ VideoEncoderImpl::VideoEncoderImpl( encoder_.get())); #ifndef OFFICIAL_BUILD } else if (video_config.codec == transport::kFakeSoftwareVideo) { - encoder_.reset(new FakeSoftwareVideoEncoder()); + encoder_.reset(new FakeSoftwareVideoEncoder(video_config)); #endif } else { DCHECK(false) << "Invalid config"; // Codec not supported. |