summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-22 18:59:12 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-22 18:59:12 +0000
commitcc00e0878070031e59aa296dcfb08508579a798a (patch)
tree31df34527955aecf7846ee486ceb10414003e8fe /media
parent536324ec9e4c6c9db5f3a2485f793ec64e3c4b0f (diff)
downloadchromium_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.cc6
-rw-r--r--media/cast/video_sender/fake_software_video_encoder.cc22
-rw-r--r--media/cast/video_sender/fake_software_video_encoder.h5
-rw-r--r--media/cast/video_sender/video_encoder_impl.cc2
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.