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

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

Issue 555563003: Cast: Flow hw encoder initialization error to extensions API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed compile Created 6 years, 3 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/end2end_unittest.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 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());
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/end2end_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698