Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1224)

Unified Diff: media/cast/sender/video_sender_unittest.cc

Issue 906403006: [Cast] Size-Adaptable platform video encoders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed hubbe's comments. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/sender/video_sender_unittest.cc
diff --git a/media/cast/sender/video_sender_unittest.cc b/media/cast/sender/video_sender_unittest.cc
index 6c0ba989cc90748519ca70616bade5d5b13d2432..89a9c4fa497ffea88c1198a09fe29f82c1bf7f04 100644
--- a/media/cast/sender/video_sender_unittest.cc
+++ b/media/cast/sender/video_sender_unittest.cc
@@ -15,6 +15,7 @@
#include "media/cast/net/cast_transport_config.h"
#include "media/cast/net/cast_transport_sender_impl.h"
#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/sender/fake_video_encode_accelerator_factory.h"
#include "media/cast/sender/video_frame_factory.h"
#include "media/cast/sender/video_sender.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
@@ -35,22 +36,6 @@ static const int kHeight = 240;
using testing::_;
using testing::AtLeast;
-void CreateVideoEncodeAccelerator(
- const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
- scoped_ptr<VideoEncodeAccelerator> fake_vea,
- const ReceiveVideoEncodeAcceleratorCallback& callback) {
- callback.Run(task_runner, fake_vea.Pass());
-}
-
-void CreateSharedMemory(
- size_t size, const ReceiveVideoEncodeMemoryCallback& callback) {
- scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
- if (!shm->CreateAndMapAnonymous(size)) {
- NOTREACHED();
- return;
- }
- callback.Run(shm.Pass());
-}
void SaveOperationalStatus(OperationalStatus* out_status,
OperationalStatus in_status) {
@@ -145,8 +130,9 @@ class VideoSenderTest : public ::testing::Test {
task_runner_,
task_runner_)),
operational_status_(STATUS_UNINITIALIZED),
- stored_bitrates_(NULL) {
+ vea_factory_(task_runner_) {
testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
+ vea_factory_.SetAutoRespond(true);
last_pixel_value_ = kPixelValue;
net::IPEndPoint dummy_endpoint;
transport_sender_.reset(new CastTransportSenderImpl(
@@ -182,8 +168,6 @@ class VideoSenderTest : public ::testing::Test {
video_config.receiver_ssrc = 2;
video_config.rtp_payload_type = 127;
video_config.use_external_encoder = external;
- video_config.width = kWidth;
- video_config.height = kHeight;
video_config.max_bitrate = 5000000;
video_config.min_bitrate = 1000000;
video_config.start_bitrate = 1000000;
@@ -196,30 +180,25 @@ class VideoSenderTest : public ::testing::Test {
ASSERT_EQ(operational_status_, STATUS_UNINITIALIZED);
if (external) {
- media::FakeVideoEncodeAccelerator* fake_vea =
- new media::FakeVideoEncodeAccelerator(task_runner_);
- stored_bitrates_ = &fake_vea->stored_bitrates();
- fake_vea->SetWillInitializationSucceed(expect_init_success);
- scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea);
- video_sender_.reset(
- new PeerVideoSender(cast_environment_,
- video_config,
- base::Bind(&SaveOperationalStatus,
- &operational_status_),
- base::Bind(&CreateVideoEncodeAccelerator,
- task_runner_,
- base::Passed(&fake_vea_owner)),
- base::Bind(&CreateSharedMemory),
- transport_sender_.get()));
+ vea_factory_.SetInitializationWillSucceed(expect_init_success);
+ video_sender_.reset(new PeerVideoSender(
+ cast_environment_,
+ video_config,
+ base::Bind(&SaveOperationalStatus, &operational_status_),
+ base::Bind(
+ &FakeVideoEncodeAcceleratorFactory::CreateVideoEncodeAccelerator,
+ base::Unretained(&vea_factory_)),
+ base::Bind(&FakeVideoEncodeAcceleratorFactory::CreateSharedMemory,
+ base::Unretained(&vea_factory_)),
+ transport_sender_.get()));
} else {
- video_sender_.reset(
- new PeerVideoSender(cast_environment_,
- video_config,
- base::Bind(&SaveOperationalStatus,
- &operational_status_),
- CreateDefaultVideoEncodeAcceleratorCallback(),
- CreateDefaultVideoEncodeMemoryCallback(),
- transport_sender_.get()));
+ video_sender_.reset(new PeerVideoSender(
+ cast_environment_,
+ video_config,
+ base::Bind(&SaveOperationalStatus, &operational_status_),
+ CreateDefaultVideoEncodeAcceleratorCallback(),
+ CreateDefaultVideoEncodeMemoryCallback(),
+ transport_sender_.get()));
}
task_runner_->RunTasks();
}
@@ -256,10 +235,10 @@ class VideoSenderTest : public ::testing::Test {
const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
const scoped_refptr<CastEnvironment> cast_environment_;
OperationalStatus operational_status_;
+ FakeVideoEncodeAcceleratorFactory vea_factory_;
TestPacketSender transport_;
scoped_ptr<CastTransportSenderImpl> transport_sender_;
scoped_ptr<PeerVideoSender> video_sender_;
- const std::vector<uint32>* stored_bitrates_; // Owned by |video_sender_|.
int last_pixel_value_;
base::TimeTicks first_frame_timestamp_;
@@ -284,25 +263,53 @@ TEST_F(VideoSenderTest, ExternalEncoder) {
InitEncoder(true, true);
ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
+ // The SizeAdaptableExternalVideoEncoder initally reports STATUS_INITIALIZED
+ // so that frames will be sent to it. Therefore, no encoder activity should
+ // have occurred at this point. Send a frame to spurn creation of the
+ // underlying ExternalVideoEncoder instance.
+ if (vea_factory_.vea_response_count() == 0) {
+ video_sender_->InsertRawVideoFrame(GetNewVideoFrame(),
+ testing_clock_->NowTicks());
+ task_runner_->RunTasks();
+ }
+ ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
+ RunTasks(33);
+
+ // VideoSender created an encoder for 1280x720 frames, in order to provide the
+ // INITIALIZED status.
+ EXPECT_EQ(1, vea_factory_.vea_response_count());
+ EXPECT_EQ(3, vea_factory_.shm_response_count());
+
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
- const base::TimeTicks reference_time = testing_clock_->NowTicks();
- video_sender_->InsertRawVideoFrame(video_frame, reference_time);
- task_runner_->RunTasks();
- video_sender_->InsertRawVideoFrame(video_frame, reference_time);
- task_runner_->RunTasks();
- video_sender_->InsertRawVideoFrame(video_frame, reference_time);
- task_runner_->RunTasks();
+ for (int i = 0; i < 3; ++i) {
+ const base::TimeTicks reference_time = testing_clock_->NowTicks();
+ video_sender_->InsertRawVideoFrame(video_frame, reference_time);
+ RunTasks(33);
+ // VideoSender re-created the encoder for the 320x240 frames we're
+ // providing.
+ EXPECT_EQ(1, vea_factory_.vea_response_count());
+ EXPECT_EQ(3, vea_factory_.shm_response_count());
+ }
- // Fixed bitrate is used for external encoder. Bitrate is only once
- // to the encoder.
- EXPECT_EQ(1u, stored_bitrates_->size());
video_sender_.reset(NULL);
task_runner_->RunTasks();
+ EXPECT_EQ(1, vea_factory_.vea_response_count());
+ EXPECT_EQ(3, vea_factory_.shm_response_count());
}
TEST_F(VideoSenderTest, ExternalEncoderInitFails) {
InitEncoder(true, false);
+
+ // The SizeAdaptableExternalVideoEncoder initally reports STATUS_INITIALIZED
+ // so that frames will be sent to it. Send a frame to spurn creation of the
+ // underlying ExternalVideoEncoder instance, which should result in failure.
+ if (operational_status_ == STATUS_INITIALIZED ||
+ operational_status_ == STATUS_CODEC_REINIT_PENDING) {
+ video_sender_->InsertRawVideoFrame(GetNewVideoFrame(),
+ testing_clock_->NowTicks());
+ task_runner_->RunTasks();
+ }
EXPECT_EQ(STATUS_CODEC_INIT_FAILED, operational_status_);
video_sender_.reset(NULL);
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698