Index: media/cast/test/sender.cc |
diff --git a/media/cast/test/sender.cc b/media/cast/test/sender.cc |
index d9cee32fc95c5af0b2579023745de7be7b4a83c5..7e6fd38a0d6e81d119e927939014202f57b6762c 100644 |
--- a/media/cast/test/sender.cc |
+++ b/media/cast/test/sender.cc |
@@ -38,8 +38,6 @@ |
#include "media/cast/test/utility/input_builder.h" |
namespace { |
-static const int kAudioChannels = 2; |
-static const int kAudioSamplingFrequency = 48000; |
// The max allowed size of serialized log. |
const int kMaxSerializedLogBytes = 10 * 1000 * 1000; |
@@ -57,61 +55,15 @@ const int kMaxSerializedLogBytes = 10 * 1000 * 1000; |
// |
// --fps=xx |
// Override framerate of the video stream. |
+// |
+// --vary-frame-sizes |
+// Randomly vary the video frame sizes at random points in time. Has no |
+// effect if --source-file is being used. |
const char kSwitchAddress[] = "address"; |
const char kSwitchPort[] = "port"; |
const char kSwitchSourceFile[] = "source-file"; |
const char kSwitchFps[] = "fps"; |
- |
-media::cast::AudioSenderConfig GetAudioSenderConfig() { |
- media::cast::AudioSenderConfig audio_config; |
- |
- audio_config.use_external_encoder = false; |
- audio_config.frequency = kAudioSamplingFrequency; |
- audio_config.channels = kAudioChannels; |
- audio_config.bitrate = 0; // Use Opus auto-VBR mode. |
- audio_config.codec = media::cast::CODEC_AUDIO_OPUS; |
- audio_config.ssrc = 1; |
- audio_config.receiver_ssrc = 2; |
- audio_config.rtp_payload_type = 127; |
- // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and |
- // should receiver.cc's config also be 100? |
- audio_config.max_playout_delay = base::TimeDelta::FromMilliseconds(300); |
- return audio_config; |
-} |
- |
-media::cast::VideoSenderConfig GetVideoSenderConfig() { |
- media::cast::VideoSenderConfig video_config; |
- |
- video_config.use_external_encoder = false; |
- |
- // Resolution. |
- video_config.width = 1280; |
- video_config.height = 720; |
- video_config.max_frame_rate = 30; |
- |
- // Bitrates. |
- video_config.max_bitrate = 2500000; |
- video_config.min_bitrate = 100000; |
- video_config.start_bitrate = video_config.min_bitrate; |
- |
- // Codec. |
- video_config.codec = media::cast::CODEC_VIDEO_VP8; |
- video_config.max_number_of_video_buffers_used = 1; |
- video_config.number_of_encode_threads = 2; |
- |
- // Quality options. |
- video_config.min_qp = 4; |
- video_config.max_qp = 40; |
- |
- // SSRCs and payload type. Don't change them. |
- video_config.ssrc = 11; |
- video_config.receiver_ssrc = 12; |
- video_config.rtp_payload_type = 96; |
- // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and |
- // should receiver.cc's config also be 100? |
- video_config.max_playout_delay = base::TimeDelta::FromMilliseconds(300); |
- return video_config; |
-} |
+const char kSwitchVaryFrameSizes[] = "vary-frame-sizes"; |
void UpdateCastTransportStatus( |
media::cast::CastTransportStatus status) { |
@@ -149,10 +101,12 @@ void LogRawEvents( |
} |
} |
-void InitializationResult(media::cast::CastInitializationStatus result) { |
- bool end_result = result == media::cast::STATUS_AUDIO_INITIALIZED || |
- result == media::cast::STATUS_VIDEO_INITIALIZED; |
- CHECK(end_result) << "Cast sender uninitialized"; |
+void QuitLoopOnInitializationResult( |
+ media::cast::CastInitializationStatus result) { |
+ CHECK(result == media::cast::STATUS_AUDIO_INITIALIZED || |
+ result == media::cast::STATUS_VIDEO_INITIALIZED) |
+ << "Cast sender uninitialized"; |
+ base::MessageLoop::current()->Quit(); |
} |
net::IPEndPoint CreateUDPAddress(std::string ip_str, uint16 port) { |
@@ -282,8 +236,10 @@ int main(int argc, char** argv) { |
LOG(INFO) << "Sending to " << remote_ip_address << ":" << remote_port |
<< "."; |
- media::cast::AudioSenderConfig audio_config = GetAudioSenderConfig(); |
- media::cast::VideoSenderConfig video_config = GetVideoSenderConfig(); |
+ media::cast::AudioSenderConfig audio_config = |
+ media::cast::GetDefaultAudioSenderConfig(); |
+ media::cast::VideoSenderConfig video_config = |
+ media::cast::GetDefaultVideoSenderConfig(); |
// Running transport on the main thread. |
// Setting up transport config. |
@@ -315,6 +271,8 @@ int main(int argc, char** argv) { |
LOG(INFO) << "Source: " << source_path.value(); |
fake_media_source->SetSourceFile(source_path, override_fps); |
} |
+ if (cmd->HasSwitch(kSwitchVaryFrameSizes)) |
+ fake_media_source->SetVariableFrameSizeMode(true); |
// CastTransportSender initialization. |
scoped_ptr<media::cast::CastTransportSender> transport_sender = |
@@ -330,16 +288,6 @@ int main(int argc, char** argv) { |
media::cast::PacketReceiverCallback(), |
io_message_loop.message_loop_proxy()); |
- // CastSender initialization. |
- scoped_ptr<media::cast::CastSender> cast_sender = |
- media::cast::CastSender::Create(cast_environment, transport_sender.get()); |
- cast_sender->InitializeVideo( |
- fake_media_source->get_video_config(), |
- base::Bind(&InitializationResult), |
- media::cast::CreateDefaultVideoEncodeAcceleratorCallback(), |
- media::cast::CreateDefaultVideoEncodeMemoryCallback()); |
- cast_sender->InitializeAudio(audio_config, base::Bind(&InitializationResult)); |
- |
// Set up event subscribers. |
scoped_ptr<media::cast::EncodingEventSubscriber> video_event_subscriber; |
scoped_ptr<media::cast::EncodingEventSubscriber> audio_event_subscriber; |
@@ -405,9 +353,28 @@ int main(int argc, char** argv) { |
base::Passed(&offset_estimator)), |
base::TimeDelta::FromSeconds(logging_duration_seconds)); |
+ // CastSender initialization. |
+ scoped_ptr<media::cast::CastSender> cast_sender = |
+ media::cast::CastSender::Create(cast_environment, transport_sender.get()); |
+ io_message_loop.PostTask( |
+ FROM_HERE, |
+ base::Bind(&media::cast::CastSender::InitializeVideo, |
+ base::Unretained(cast_sender.get()), |
+ fake_media_source->get_video_config(), |
+ base::Bind(&QuitLoopOnInitializationResult), |
+ media::cast::CreateDefaultVideoEncodeAcceleratorCallback(), |
+ media::cast::CreateDefaultVideoEncodeMemoryCallback())); |
+ io_message_loop.Run(); // Wait for video initialization. |
+ io_message_loop.PostTask( |
+ FROM_HERE, |
+ base::Bind(&media::cast::CastSender::InitializeAudio, |
+ base::Unretained(cast_sender.get()), |
+ audio_config, |
+ base::Bind(&QuitLoopOnInitializationResult))); |
+ io_message_loop.Run(); // Wait for audio initialization. |
+ |
fake_media_source->Start(cast_sender->audio_frame_input(), |
cast_sender->video_frame_input()); |
- |
io_message_loop.Run(); |
return 0; |
} |