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 7f6904401d96996d0f99e70185deed443930ef52..c183613263d8d8d92485aba1b44c16a929575602 100644 |
--- a/media/cast/sender/video_sender_unittest.cc |
+++ b/media/cast/sender/video_sender_unittest.cc |
@@ -51,6 +51,11 @@ void CreateSharedMemory( |
callback.Run(shm.Pass()); |
} |
+void SaveInitializationStatus(CastInitializationStatus* out_status, |
+ CastInitializationStatus in_status) { |
+ *out_status = in_status; |
+} |
+ |
class TestPacketSender : public PacketSender { |
public: |
TestPacketSender() |
@@ -111,11 +116,13 @@ class PeerVideoSender : public VideoSender { |
PeerVideoSender( |
scoped_refptr<CastEnvironment> cast_environment, |
const VideoSenderConfig& video_config, |
+ const CastInitializationCallback& initialization_cb, |
const CreateVideoEncodeAcceleratorCallback& create_vea_cb, |
const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb, |
CastTransportSender* const transport_sender) |
: VideoSender(cast_environment, |
video_config, |
+ initialization_cb, |
create_vea_cb, |
create_video_encode_mem_cb, |
transport_sender) {} |
@@ -158,7 +165,10 @@ class VideoSenderTest : public ::testing::Test { |
EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status); |
} |
- void InitEncoder(bool external) { |
+ // If |external| is true then external video encoder (VEA) is used. |
+ // |expect_init_sucess| is true if initialization is expected to succeed. |
+ CastInitializationStatus InitEncoder(bool external, |
+ bool expect_init_success) { |
VideoSenderConfig video_config; |
video_config.ssrc = 1; |
video_config.incoming_feedback_ssrc = 2; |
@@ -174,28 +184,36 @@ class VideoSenderTest : public ::testing::Test { |
video_config.max_frame_rate = 30; |
video_config.max_number_of_video_buffers_used = 1; |
video_config.codec = CODEC_VIDEO_VP8; |
+ CastInitializationStatus status = STATUS_VIDEO_UNINITIALIZED; |
if (external) { |
- scoped_ptr<VideoEncodeAccelerator> fake_vea( |
- new test::FakeVideoEncodeAccelerator(task_runner_, |
- &stored_bitrates_)); |
+ test::FakeVideoEncodeAccelerator* fake_vea = |
+ new test::FakeVideoEncodeAccelerator( |
+ task_runner_, &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(&SaveInitializationStatus, |
+ &status), |
base::Bind(&CreateVideoEncodeAccelerator, |
task_runner_, |
- base::Passed(&fake_vea)), |
+ base::Passed(&fake_vea_owner)), |
base::Bind(&CreateSharedMemory), |
transport_sender_.get())); |
} else { |
video_sender_.reset( |
new PeerVideoSender(cast_environment_, |
video_config, |
+ base::Bind(&SaveInitializationStatus, |
+ &status), |
CreateDefaultVideoEncodeAcceleratorCallback(), |
CreateDefaultVideoEncodeMemoryCallback(), |
transport_sender_.get())); |
} |
- ASSERT_EQ(STATUS_VIDEO_INITIALIZED, video_sender_->InitializationResult()); |
+ task_runner_->RunTasks(); |
+ return status; |
} |
scoped_refptr<media::VideoFrame> GetNewVideoFrame() { |
@@ -233,7 +251,7 @@ class VideoSenderTest : public ::testing::Test { |
}; |
TEST_F(VideoSenderTest, BuiltInEncoder) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
@@ -245,8 +263,7 @@ TEST_F(VideoSenderTest, BuiltInEncoder) { |
} |
TEST_F(VideoSenderTest, ExternalEncoder) { |
- InitEncoder(true); |
- task_runner_->RunTasks(); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(true, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
@@ -261,14 +278,19 @@ TEST_F(VideoSenderTest, ExternalEncoder) { |
// 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(); |
+} |
- // We need to run the task to cleanup the GPU instance. |
+TEST_F(VideoSenderTest, ExternalEncoderInitFails) { |
+ EXPECT_EQ(STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED, |
+ InitEncoder(true, false)); |
video_sender_.reset(NULL); |
task_runner_->RunTasks(); |
} |
TEST_F(VideoSenderTest, RtcpTimer) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
@@ -292,7 +314,7 @@ TEST_F(VideoSenderTest, RtcpTimer) { |
} |
TEST_F(VideoSenderTest, ResendTimer) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
@@ -320,7 +342,7 @@ TEST_F(VideoSenderTest, ResendTimer) { |
} |
TEST_F(VideoSenderTest, LogAckReceivedEvent) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
SimpleEventSubscriber event_subscriber; |
cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber); |
@@ -352,7 +374,7 @@ TEST_F(VideoSenderTest, LogAckReceivedEvent) { |
} |
TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
// Send a stream of frames and don't ACK; by default we shouldn't have more |
// than 4 frames in flight. |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
@@ -398,7 +420,7 @@ TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) { |
} |
TEST_F(VideoSenderTest, DuplicateAckRetransmit) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
RunTasks(33); |
@@ -438,7 +460,7 @@ TEST_F(VideoSenderTest, DuplicateAckRetransmit) { |
} |
TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
RunTasks(33); |
@@ -489,7 +511,7 @@ TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { |
} |
TEST_F(VideoSenderTest, AcksCancelRetransmits) { |
- InitEncoder(false); |
+ EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); |
transport_.SetPause(true); |
scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); |
video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |