| 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);
|
|
|