summaryrefslogtreecommitdiff
path: root/media/cast
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2014-07-20 18:25:52 -0700
committerBen Murdoch <benm@google.com>2014-07-20 18:25:52 -0700
commit116680a4aac90f2aa7413d9095a592090648e557 (patch)
treef7c6fed0e63d6a2804243d4a31a752dca39fb076 /media/cast
parent1f14a4515e04c9ffc9bac4dd1e2f68611626b800 (diff)
downloadchromium_org-116680a4aac90f2aa7413d9095a592090648e557.tar.gz
Merge from Chromium at DEPS revision 284076
This commit was generated by merge_to_master.py. Change-Id: I9a279485b02fe7ceddcd32d992a714ff132e99ae
Diffstat (limited to 'media/cast')
-rw-r--r--media/cast/DEPS1
-rw-r--r--media/cast/README61
-rw-r--r--media/cast/cast.gyp161
-rw-r--r--media/cast/cast_config.cc24
-rw-r--r--media/cast/cast_config.h73
-rw-r--r--media/cast/cast_defines.h10
-rw-r--r--media/cast/cast_receiver.h8
-rw-r--r--media/cast/cast_sender.h6
-rw-r--r--media/cast/cast_sender_impl.cc7
-rw-r--r--media/cast/cast_sender_impl.h10
-rw-r--r--media/cast/cast_testing.gypi130
-rw-r--r--media/cast/common/clock_drift_smoother.cc (renamed from media/cast/base/clock_drift_smoother.cc)2
-rw-r--r--media/cast/common/clock_drift_smoother.h (renamed from media/cast/base/clock_drift_smoother.h)6
-rw-r--r--media/cast/common/transport_encryption_handler.cc (renamed from media/cast/transport/utility/transport_encryption_handler.cc)42
-rw-r--r--media/cast/common/transport_encryption_handler.h (renamed from media/cast/transport/utility/transport_encryption_handler.h)15
-rw-r--r--media/cast/logging/proto/BUILD.gn22
-rw-r--r--media/cast/net/DEPS16
-rw-r--r--media/cast/net/cast_transport_config.cc (renamed from media/cast/transport/cast_transport_config.cc)26
-rw-r--r--media/cast/net/cast_transport_config.h (renamed from media/cast/transport/cast_transport_config.h)70
-rw-r--r--media/cast/net/cast_transport_defines.h (renamed from media/cast/transport/cast_transport_defines.h)30
-rw-r--r--media/cast/net/cast_transport_sender.h (renamed from media/cast/transport/cast_transport_sender.h)20
-rw-r--r--media/cast/net/cast_transport_sender_impl.cc (renamed from media/cast/transport/cast_transport_sender_impl.cc)37
-rw-r--r--media/cast/net/cast_transport_sender_impl.h (renamed from media/cast/transport/cast_transport_sender_impl.h)27
-rw-r--r--media/cast/net/cast_transport_sender_impl_unittest.cc (renamed from media/cast/transport/cast_transport_sender_impl_unittest.cc)12
-rw-r--r--media/cast/net/frame_id_wrap_helper_test.cc (renamed from media/cast/transport/frame_id_wrap_helper_test.cc)6
-rw-r--r--media/cast/net/pacing/mock_paced_packet_sender.cc (renamed from media/cast/transport/pacing/mock_paced_packet_sender.cc)6
-rw-r--r--media/cast/net/pacing/mock_paced_packet_sender.h (renamed from media/cast/transport/pacing/mock_paced_packet_sender.h)12
-rw-r--r--media/cast/net/pacing/paced_sender.cc (renamed from media/cast/transport/pacing/paced_sender.cc)60
-rw-r--r--media/cast/net/pacing/paced_sender.h (renamed from media/cast/transport/pacing/paced_sender.h)36
-rw-r--r--media/cast/net/pacing/paced_sender_unittest.cc (renamed from media/cast/transport/pacing/paced_sender_unittest.cc)77
-rw-r--r--media/cast/net/rtcp/mock_rtcp_receiver_feedback.cc (renamed from media/cast/rtcp/mock_rtcp_receiver_feedback.cc)4
-rw-r--r--media/cast/net/rtcp/mock_rtcp_receiver_feedback.h (renamed from media/cast/rtcp/mock_rtcp_receiver_feedback.h)10
-rw-r--r--media/cast/net/rtcp/mock_rtcp_sender_feedback.cc (renamed from media/cast/rtcp/mock_rtcp_sender_feedback.cc)4
-rw-r--r--media/cast/net/rtcp/mock_rtcp_sender_feedback.h (renamed from media/cast/rtcp/mock_rtcp_sender_feedback.h)4
-rw-r--r--media/cast/net/rtcp/receiver_rtcp_event_subscriber.cc (renamed from media/cast/rtcp/receiver_rtcp_event_subscriber.cc)2
-rw-r--r--media/cast/net/rtcp/receiver_rtcp_event_subscriber.h (renamed from media/cast/rtcp/receiver_rtcp_event_subscriber.h)2
-rw-r--r--media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc (renamed from media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc)2
-rw-r--r--media/cast/net/rtcp/rtcp.cc (renamed from media/cast/rtcp/rtcp.cc)74
-rw-r--r--media/cast/net/rtcp/rtcp.h (renamed from media/cast/rtcp/rtcp.h)24
-rw-r--r--media/cast/net/rtcp/rtcp_builder.cc (renamed from media/cast/transport/rtcp/rtcp_builder.cc)10
-rw-r--r--media/cast/net/rtcp/rtcp_builder.h (renamed from media/cast/transport/rtcp/rtcp_builder.h)14
-rw-r--r--media/cast/net/rtcp/rtcp_builder_unittest.cc (renamed from media/cast/transport/rtcp/rtcp_builder_unittest.cc)10
-rw-r--r--media/cast/net/rtcp/rtcp_defines.cc (renamed from media/cast/rtcp/rtcp_defines.cc)2
-rw-r--r--media/cast/net/rtcp/rtcp_defines.h (renamed from media/cast/rtcp/rtcp_defines.h)4
-rw-r--r--media/cast/net/rtcp/rtcp_receiver.cc (renamed from media/cast/rtcp/rtcp_receiver.cc)12
-rw-r--r--media/cast/net/rtcp/rtcp_receiver.h (renamed from media/cast/rtcp/rtcp_receiver.h)14
-rw-r--r--media/cast/net/rtcp/rtcp_receiver_unittest.cc (renamed from media/cast/rtcp/rtcp_receiver_unittest.cc)29
-rw-r--r--media/cast/net/rtcp/rtcp_sender.cc (renamed from media/cast/rtcp/rtcp_sender.cc)76
-rw-r--r--media/cast/net/rtcp/rtcp_sender.h (renamed from media/cast/rtcp/rtcp_sender.h)26
-rw-r--r--media/cast/net/rtcp/rtcp_sender_unittest.cc (renamed from media/cast/rtcp/rtcp_sender_unittest.cc)75
-rw-r--r--media/cast/net/rtcp/rtcp_unittest.cc (renamed from media/cast/rtcp/rtcp_unittest.cc)53
-rw-r--r--media/cast/net/rtcp/rtcp_utility.cc (renamed from media/cast/rtcp/rtcp_utility.cc)30
-rw-r--r--media/cast/net/rtcp/rtcp_utility.h (renamed from media/cast/rtcp/rtcp_utility.h)4
-rw-r--r--media/cast/net/rtcp/test_rtcp_packet_builder.cc (renamed from media/cast/rtcp/test_rtcp_packet_builder.cc)26
-rw-r--r--media/cast/net/rtcp/test_rtcp_packet_builder.h (renamed from media/cast/rtcp/test_rtcp_packet_builder.h)9
-rw-r--r--media/cast/net/rtp/cast_message_builder.cc (renamed from media/cast/framer/cast_message_builder.cc)4
-rw-r--r--media/cast/net/rtp/cast_message_builder.h (renamed from media/cast/framer/cast_message_builder.h)8
-rw-r--r--media/cast/net/rtp/cast_message_builder_unittest.cc (renamed from media/cast/framer/cast_message_builder_unittest.cc)8
-rw-r--r--media/cast/net/rtp/frame_buffer.cc (renamed from media/cast/framer/frame_buffer.cc)12
-rw-r--r--media/cast/net/rtp/frame_buffer.h (renamed from media/cast/framer/frame_buffer.h)6
-rw-r--r--media/cast/net/rtp/frame_buffer_unittest.cc (renamed from media/cast/framer/frame_buffer_unittest.cc)15
-rw-r--r--media/cast/net/rtp/frame_id_map.cc (renamed from media/cast/framer/frame_id_map.cc)6
-rw-r--r--media/cast/net/rtp/frame_id_map.h (renamed from media/cast/framer/frame_id_map.h)6
-rw-r--r--media/cast/net/rtp/framer.cc (renamed from media/cast/framer/framer.cc)6
-rw-r--r--media/cast/net/rtp/framer.h (renamed from media/cast/framer/framer.h)14
-rw-r--r--media/cast/net/rtp/framer_unittest.cc (renamed from media/cast/framer/framer_unittest.cc)69
-rw-r--r--media/cast/net/rtp/mock_rtp_feedback.h (renamed from media/cast/rtp_receiver/rtp_parser/include/mock/mock_rtp_feedback.h)4
-rw-r--r--media/cast/net/rtp/mock_rtp_payload_feedback.cc (renamed from media/cast/rtp_receiver/mock_rtp_payload_feedback.cc)4
-rw-r--r--media/cast/net/rtp/mock_rtp_payload_feedback.h (renamed from media/cast/rtp_receiver/mock_rtp_payload_feedback.h)4
-rw-r--r--media/cast/net/rtp/packet_storage.cc (renamed from media/cast/transport/rtp_sender/packet_storage/packet_storage.cc)7
-rw-r--r--media/cast/net/rtp/packet_storage.h (renamed from media/cast/transport/rtp_sender/packet_storage/packet_storage.h)16
-rw-r--r--media/cast/net/rtp/packet_storage_unittest.cc (renamed from media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc)6
-rw-r--r--media/cast/net/rtp/receiver_stats.cc (renamed from media/cast/rtp_receiver/receiver_stats.cc)6
-rw-r--r--media/cast/net/rtp/receiver_stats.h (renamed from media/cast/rtp_receiver/receiver_stats.h)6
-rw-r--r--media/cast/net/rtp/receiver_stats_unittest.cc (renamed from media/cast/rtp_receiver/receiver_stats_unittest.cc)6
-rw-r--r--media/cast/net/rtp/rtp_header_parser.cc (renamed from media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc)6
-rw-r--r--media/cast/net/rtp/rtp_header_parser.h (renamed from media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h)16
-rw-r--r--media/cast/net/rtp/rtp_packet_builder.cc (renamed from media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.cc)4
-rw-r--r--media/cast/net/rtp/rtp_packet_builder.h (renamed from media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h)4
-rw-r--r--media/cast/net/rtp/rtp_packetizer.cc (renamed from media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc)15
-rw-r--r--media/cast/net/rtp/rtp_packetizer.h (renamed from media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h)22
-rw-r--r--media/cast/net/rtp/rtp_packetizer_unittest.cc (renamed from media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc)14
-rw-r--r--media/cast/net/rtp/rtp_parser.cc (renamed from media/cast/rtp_receiver/rtp_parser/rtp_parser.cc)4
-rw-r--r--media/cast/net/rtp/rtp_parser.h (renamed from media/cast/rtp_receiver/rtp_parser/rtp_parser.h)14
-rw-r--r--media/cast/net/rtp/rtp_parser_unittest.cc (renamed from media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc)12
-rw-r--r--media/cast/net/rtp/rtp_receiver_defines.cc (renamed from media/cast/rtp_receiver/rtp_receiver_defines.cc)2
-rw-r--r--media/cast/net/rtp/rtp_receiver_defines.h (renamed from media/cast/rtp_receiver/rtp_receiver_defines.h)4
-rw-r--r--media/cast/net/rtp/rtp_sender.cc (renamed from media/cast/transport/rtp_sender/rtp_sender.cc)35
-rw-r--r--media/cast/net/rtp/rtp_sender.h (renamed from media/cast/transport/rtp_sender/rtp_sender.h)33
-rw-r--r--media/cast/net/udp_transport.cc (renamed from media/cast/transport/transport/udp_transport.cc)4
-rw-r--r--media/cast/net/udp_transport.h (renamed from media/cast/transport/transport/udp_transport.h)12
-rw-r--r--media/cast/net/udp_transport_unittest.cc (renamed from media/cast/transport/transport/udp_transport_unittest.cc)10
-rw-r--r--media/cast/receiver/audio_decoder.cc18
-rw-r--r--media/cast/receiver/audio_decoder.h6
-rw-r--r--media/cast/receiver/audio_decoder_unittest.cc33
-rw-r--r--media/cast/receiver/cast_receiver_impl.cc14
-rw-r--r--media/cast/receiver/cast_receiver_impl.h16
-rw-r--r--media/cast/receiver/frame_receiver.cc8
-rw-r--r--media/cast/receiver/frame_receiver.h20
-rw-r--r--media/cast/receiver/frame_receiver_unittest.cc8
-rw-r--r--media/cast/receiver/video_decoder.cc27
-rw-r--r--media/cast/receiver/video_decoder.h6
-rw-r--r--media/cast/receiver/video_decoder_unittest.cc14
-rw-r--r--media/cast/sender/audio_encoder.cc (renamed from media/cast/audio_sender/audio_encoder.cc)39
-rw-r--r--media/cast/sender/audio_encoder.h (renamed from media/cast/audio_sender/audio_encoder.h)16
-rw-r--r--media/cast/sender/audio_encoder_unittest.cc (renamed from media/cast/audio_sender/audio_encoder_unittest.cc)47
-rw-r--r--media/cast/sender/audio_sender.cc (renamed from media/cast/audio_sender/audio_sender.cc)59
-rw-r--r--media/cast/sender/audio_sender.h (renamed from media/cast/audio_sender/audio_sender.h)18
-rw-r--r--media/cast/sender/audio_sender_unittest.cc (renamed from media/cast/audio_sender/audio_sender_unittest.cc)28
-rw-r--r--media/cast/sender/congestion_control.cc (renamed from media/cast/congestion_control/congestion_control.cc)7
-rw-r--r--media/cast/sender/congestion_control.h (renamed from media/cast/congestion_control/congestion_control.h)6
-rw-r--r--media/cast/sender/congestion_control_unittest.cc (renamed from media/cast/congestion_control/congestion_control_unittest.cc)5
-rw-r--r--media/cast/sender/external_video_encoder.cc (renamed from media/cast/video_sender/external_video_encoder.cc)24
-rw-r--r--media/cast/sender/external_video_encoder.h (renamed from media/cast/video_sender/external_video_encoder.h)8
-rw-r--r--media/cast/sender/external_video_encoder_unittest.cc (renamed from media/cast/video_sender/external_video_encoder_unittest.cc)14
-rw-r--r--media/cast/sender/fake_software_video_encoder.cc (renamed from media/cast/video_sender/fake_software_video_encoder.cc)14
-rw-r--r--media/cast/sender/fake_software_video_encoder.h (renamed from media/cast/video_sender/fake_software_video_encoder.h)10
-rw-r--r--media/cast/sender/rtp_timestamp_helper.cc (renamed from media/cast/rtp_timestamp_helper.cc)2
-rw-r--r--media/cast/sender/rtp_timestamp_helper.h (renamed from media/cast/rtp_timestamp_helper.h)6
-rw-r--r--media/cast/sender/software_video_encoder.h (renamed from media/cast/video_sender/software_video_encoder.h)10
-rw-r--r--media/cast/sender/video_encoder.h (renamed from media/cast/video_sender/video_encoder.h)10
-rw-r--r--media/cast/sender/video_encoder_impl.cc (renamed from media/cast/video_sender/video_encoder_impl.cc)19
-rw-r--r--media/cast/sender/video_encoder_impl.h (renamed from media/cast/video_sender/video_encoder_impl.h)13
-rw-r--r--media/cast/sender/video_encoder_impl_unittest.cc (renamed from media/cast/video_sender/video_encoder_impl_unittest.cc)14
-rw-r--r--media/cast/sender/video_sender.cc (renamed from media/cast/video_sender/video_sender.cc)35
-rw-r--r--media/cast/sender/video_sender.h (renamed from media/cast/video_sender/video_sender.h)25
-rw-r--r--media/cast/sender/video_sender_unittest.cc (renamed from media/cast/video_sender/video_sender_unittest.cc)34
-rw-r--r--media/cast/sender/vp8_encoder.cc (renamed from media/cast/video_sender/codecs/vp8/vp8_encoder.cc)16
-rw-r--r--media/cast/sender/vp8_encoder.h (renamed from media/cast/video_sender/codecs/vp8/vp8_encoder.h)12
-rw-r--r--media/cast/test/cast_benchmarks.cc147
-rw-r--r--media/cast/test/end2end_unittest.cc123
-rw-r--r--media/cast/test/fake_media_source.cc594
-rw-r--r--media/cast/test/fake_media_source.h152
-rw-r--r--media/cast/test/loopback_transport.cc68
-rw-r--r--media/cast/test/loopback_transport.h55
-rw-r--r--media/cast/test/proto/BUILD.gn14
-rw-r--r--media/cast/test/proto/network_simulation_model.proto27
-rw-r--r--media/cast/test/receiver.cc2
-rw-r--r--media/cast/test/sender.cc708
-rw-r--r--media/cast/test/simulator.cc445
-rw-r--r--media/cast/test/utility/default_config.cc43
-rw-r--r--media/cast/test/utility/default_config.h9
-rw-r--r--media/cast/test/utility/in_process_receiver.cc10
-rw-r--r--media/cast/test/utility/in_process_receiver.h10
-rw-r--r--media/cast/test/utility/udp_proxy.cc238
-rw-r--r--media/cast/test/utility/udp_proxy.h64
-rw-r--r--media/cast/test/utility/udp_proxy_main.cc2
147 files changed, 3167 insertions, 2162 deletions
diff --git a/media/cast/DEPS b/media/cast/DEPS
index abee2864b3..e44afe05ab 100644
--- a/media/cast/DEPS
+++ b/media/cast/DEPS
@@ -3,6 +3,7 @@ include_rules = [
"+media",
"+net",
"+third_party/libyuv",
+ "+third_party/mt19937ar",
"+third_party/zlib",
"+ui/gfx",
]
diff --git a/media/cast/README b/media/cast/README
deleted file mode 100644
index 0930c1e012..0000000000
--- a/media/cast/README
+++ /dev/null
@@ -1,61 +0,0 @@
-This directory contains a RTP/RTCP library used for the Cast mirroring
-protocol. This library is specifically built for low latency purposes and
-enables Chrome to send real-time video and audio streams.
-
-CONTENTS
-
-cast/
- Build rules and top level source files and headers.
-
-cast/audio_receiver/
- Module for receiving and decodes audio RTP stream.
-
-cast/audio_sender/
- Module for encoding and sending audio RTP stream.
-
-cast/congestion_control/
- Bandwidth estimation and network congestion handling.
-
-cast/transport/pacing/
- Module for rate limiting data outflow.
-
-cast/rtcp/
- Module for handling RTCP messages.
-
-cast/rtp_common/
- Module for common code used for RTP messages.
-
-cast/rtp_receiver/
- Module for reciving RTP messages.
-
-cast/transport/rtp_sender/
- Module for sending RTP messages.
-
-cast/test/
- Module for test applications.
-
-cast/video_receiver/
- Module for receiving and decodes video RTP stream.
-
-cast/video_sender/
- Module for encoding and sending video RTP stream.
-
-DEPENDENCIES
-
-Content of this directory should only depend on:
-
-base/
- Provides base libraries and platform independent layer.
-
-net/
- Provides network capabilities.
-
-third_party/libvpx
- Provides video encoder.
-
-third_party/opus
- Provides audio encoder.
-
-OWNERS
-
-See OWNERS for ownership.
diff --git a/media/cast/cast.gyp b/media/cast/cast.gyp
index 5de8796079..fb1ee64e6c 100644
--- a/media/cast/cast.gyp
+++ b/media/cast/cast.gyp
@@ -22,6 +22,7 @@
'dependencies': [
'cast_logging_proto',
'<(DEPTH)/base/base.gyp:base',
+ '<(DEPTH)/crypto/crypto.gyp:crypto',
'<(DEPTH)/net/net.gyp:net',
],
'export_dependent_settings': [
@@ -33,8 +34,10 @@
'cast_defines.h',
'cast_environment.cc',
'cast_environment.h',
- 'base/clock_drift_smoother.cc',
- 'base/clock_drift_smoother.h',
+ 'common/clock_drift_smoother.cc',
+ 'common/clock_drift_smoother.h',
+ 'common/transport_encryption_handler.cc',
+ 'common/transport_encryption_handler.h',
'logging/encoding_event_subscriber.cc',
'logging/encoding_event_subscriber.h',
'logging/log_deserializer.cc',
@@ -57,15 +60,10 @@
'logging/simple_event_subscriber.h',
'logging/stats_event_subscriber.cc',
'logging/stats_event_subscriber.h',
- 'rtp_timestamp_helper.cc',
- 'rtp_timestamp_helper.h',
- 'transport/cast_transport_config.cc',
- 'transport/cast_transport_config.h',
- 'transport/cast_transport_defines.h',
- 'transport/cast_transport_sender.h',
], # source
},
{
+ # GN version: //media/cast/logging/proto
'target_name': 'cast_logging_proto',
'type': 'static_library',
'include_dirs': [
@@ -89,8 +87,7 @@
],
'dependencies': [
'cast_base',
- 'cast_rtcp',
- 'cast_transport',
+ 'cast_net',
'<(DEPTH)/base/base.gyp:base',
'<(DEPTH)/media/media.gyp:media',
'<(DEPTH)/media/media.gyp:shared_memory_support',
@@ -100,14 +97,6 @@
],
'sources': [
'cast_receiver.h',
- 'framer/cast_message_builder.cc',
- 'framer/cast_message_builder.h',
- 'framer/frame_buffer.cc',
- 'framer/frame_buffer.h',
- 'framer/frame_id_map.cc',
- 'framer/frame_id_map.h',
- 'framer/framer.cc',
- 'framer/framer.h',
'receiver/audio_decoder.cc',
'receiver/audio_decoder.h',
'receiver/cast_receiver_impl.cc',
@@ -116,39 +105,20 @@
'receiver/frame_receiver.h',
'receiver/video_decoder.cc',
'receiver/video_decoder.h',
- 'rtp_receiver/receiver_stats.cc',
- 'rtp_receiver/receiver_stats.h',
- 'rtp_receiver/rtp_receiver_defines.cc',
- 'rtp_receiver/rtp_receiver_defines.h',
- 'rtp_receiver/rtp_parser/rtp_parser.cc',
- 'rtp_receiver/rtp_parser/rtp_parser.h',
- ], # source
- },
- {
- 'target_name': 'cast_rtcp',
- 'type': 'static_library',
- 'include_dirs': [
- '<(DEPTH)/',
- ],
- 'dependencies': [
- 'cast_base',
- 'cast_transport',
- '<(DEPTH)/base/base.gyp:base',
- '<(DEPTH)/net/net.gyp:net',
- ],
- 'sources': [
- 'rtcp/rtcp_defines.cc',
- 'rtcp/rtcp_defines.h',
- 'rtcp/rtcp.h',
- 'rtcp/rtcp.cc',
- 'rtcp/rtcp_receiver.cc',
- 'rtcp/rtcp_receiver.h',
- 'rtcp/rtcp_sender.cc',
- 'rtcp/rtcp_sender.h',
- 'rtcp/rtcp_utility.cc',
- 'rtcp/rtcp_utility.h',
- 'rtcp/receiver_rtcp_event_subscriber.cc',
- 'rtcp/receiver_rtcp_event_subscriber.cc',
+ 'net/rtp/cast_message_builder.cc',
+ 'net/rtp/cast_message_builder.h',
+ 'net/rtp/frame_buffer.cc',
+ 'net/rtp/frame_buffer.h',
+ 'net/rtp/frame_id_map.cc',
+ 'net/rtp/frame_id_map.h',
+ 'net/rtp/framer.cc',
+ 'net/rtp/framer.h',
+ 'net/rtp/receiver_stats.cc',
+ 'net/rtp/receiver_stats.h',
+ 'net/rtp/rtp_parser.cc',
+ 'net/rtp/rtp_parser.h',
+ 'net/rtp/rtp_receiver_defines.cc',
+ 'net/rtp/rtp_receiver_defines.h',
], # source
},
{
@@ -159,39 +129,40 @@
],
'dependencies': [
'cast_base',
- 'cast_rtcp',
- 'cast_transport',
+ 'cast_net',
'<(DEPTH)/media/media.gyp:media',
'<(DEPTH)/media/media.gyp:shared_memory_support',
'<(DEPTH)/third_party/opus/opus.gyp:opus',
'<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
], # dependencies
'sources': [
- 'audio_sender/audio_encoder.h',
- 'audio_sender/audio_encoder.cc',
- 'audio_sender/audio_sender.h',
- 'audio_sender/audio_sender.cc',
'cast_sender.h',
'cast_sender_impl.cc',
'cast_sender_impl.h',
- 'congestion_control/congestion_control.h',
- 'congestion_control/congestion_control.cc',
- 'video_sender/codecs/vp8/vp8_encoder.cc',
- 'video_sender/codecs/vp8/vp8_encoder.h',
- 'video_sender/external_video_encoder.h',
- 'video_sender/external_video_encoder.cc',
- 'video_sender/fake_software_video_encoder.h',
- 'video_sender/fake_software_video_encoder.cc',
- 'video_sender/software_video_encoder.h',
- 'video_sender/video_encoder.h',
- 'video_sender/video_encoder_impl.h',
- 'video_sender/video_encoder_impl.cc',
- 'video_sender/video_sender.h',
- 'video_sender/video_sender.cc',
+ 'sender/audio_encoder.h',
+ 'sender/audio_encoder.cc',
+ 'sender/audio_sender.h',
+ 'sender/audio_sender.cc',
+ 'sender/congestion_control.h',
+ 'sender/congestion_control.cc',
+ 'sender/external_video_encoder.h',
+ 'sender/external_video_encoder.cc',
+ 'sender/fake_software_video_encoder.h',
+ 'sender/fake_software_video_encoder.cc',
+ 'sender/rtp_timestamp_helper.cc',
+ 'sender/rtp_timestamp_helper.h',
+ 'sender/software_video_encoder.h',
+ 'sender/video_encoder.h',
+ 'sender/video_encoder_impl.h',
+ 'sender/video_encoder_impl.cc',
+ 'sender/video_sender.h',
+ 'sender/video_sender.cc',
+ 'sender/vp8_encoder.cc',
+ 'sender/vp8_encoder.h',
], # source
},
{
- 'target_name': 'cast_transport',
+ 'target_name': 'cast_net',
'type': 'static_library',
'include_dirs': [
'<(DEPTH)/',
@@ -199,26 +170,38 @@
'dependencies': [
'cast_base',
'<(DEPTH)/base/base.gyp:base',
- '<(DEPTH)/crypto/crypto.gyp:crypto',
'<(DEPTH)/net/net.gyp:net',
],
'sources': [
- 'transport/cast_transport_sender_impl.cc',
- 'transport/cast_transport_sender_impl.h',
- 'transport/pacing/paced_sender.cc',
- 'transport/pacing/paced_sender.h',
- 'transport/rtcp/rtcp_builder.cc',
- 'transport/rtcp/rtcp_builder.h',
- 'transport/rtp_sender/packet_storage/packet_storage.cc',
- 'transport/rtp_sender/packet_storage/packet_storage.h',
- 'transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc',
- 'transport/rtp_sender/rtp_packetizer/rtp_packetizer.h',
- 'transport/rtp_sender/rtp_sender.cc',
- 'transport/rtp_sender/rtp_sender.h',
- 'transport/transport/udp_transport.cc',
- 'transport/transport/udp_transport.h',
- 'transport/utility/transport_encryption_handler.cc',
- 'transport/utility/transport_encryption_handler.h',
+ 'net/cast_transport_config.cc',
+ 'net/cast_transport_config.h',
+ 'net/cast_transport_defines.h',
+ 'net/cast_transport_sender.h',
+ 'net/cast_transport_sender_impl.cc',
+ 'net/cast_transport_sender_impl.h',
+ 'net/pacing/paced_sender.cc',
+ 'net/pacing/paced_sender.h',
+ 'net/rtcp/receiver_rtcp_event_subscriber.cc',
+ 'net/rtcp/rtcp_builder.cc',
+ 'net/rtcp/rtcp_builder.h',
+ 'net/rtcp/rtcp_defines.cc',
+ 'net/rtcp/rtcp_defines.h',
+ 'net/rtcp/rtcp.h',
+ 'net/rtcp/rtcp.cc',
+ 'net/rtcp/rtcp_receiver.cc',
+ 'net/rtcp/rtcp_receiver.h',
+ 'net/rtcp/rtcp_sender.cc',
+ 'net/rtcp/rtcp_sender.h',
+ 'net/rtcp/rtcp_utility.cc',
+ 'net/rtcp/rtcp_utility.h',
+ 'net/rtp/packet_storage.cc',
+ 'net/rtp/packet_storage.h',
+ 'net/rtp/rtp_packetizer.cc',
+ 'net/rtp/rtp_packetizer.h',
+ 'net/rtp/rtp_sender.cc',
+ 'net/rtp/rtp_sender.h',
+ 'net/udp_transport.cc',
+ 'net/udp_transport.h',
], # source
},
],
diff --git a/media/cast/cast_config.cc b/media/cast/cast_config.cc
index 0e7953af01..f74121632c 100644
--- a/media/cast/cast_config.cc
+++ b/media/cast/cast_config.cc
@@ -22,9 +22,13 @@ namespace cast {
// these classes to centralize the logic?
VideoSenderConfig::VideoSenderConfig()
- : incoming_feedback_ssrc(0),
+ : ssrc(0),
+ incoming_feedback_ssrc(0),
rtcp_interval(kDefaultRtcpIntervalMs),
rtcp_mode(kRtcpReducedSize),
+ target_playout_delay(
+ base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
+ rtp_payload_type(0),
use_external_encoder(false),
width(0),
height(0),
@@ -36,17 +40,26 @@ VideoSenderConfig::VideoSenderConfig()
min_qp(kDefaultMinQp),
max_frame_rate(kDefaultMaxFrameRate),
max_number_of_video_buffers_used(kDefaultNumberOfVideoBuffers),
- codec(transport::kVp8),
+ codec(CODEC_VIDEO_VP8),
number_of_encode_threads(1) {}
+VideoSenderConfig::~VideoSenderConfig() {}
+
AudioSenderConfig::AudioSenderConfig()
- : incoming_feedback_ssrc(0),
+ : ssrc(0),
+ incoming_feedback_ssrc(0),
rtcp_interval(kDefaultRtcpIntervalMs),
rtcp_mode(kRtcpReducedSize),
+ target_playout_delay(
+ base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
+ rtp_payload_type(0),
use_external_encoder(false),
frequency(0),
channels(0),
- bitrate(0) {}
+ bitrate(0),
+ codec(CODEC_AUDIO_OPUS) {}
+
+AudioSenderConfig::~AudioSenderConfig() {}
FrameReceiverConfig::FrameReceiverConfig()
: feedback_ssrc(0),
@@ -57,7 +70,8 @@ FrameReceiverConfig::FrameReceiverConfig()
rtp_payload_type(0),
frequency(0),
channels(0),
- max_frame_rate(0) {}
+ max_frame_rate(0),
+ codec(CODEC_UNKNOWN) {}
FrameReceiverConfig::~FrameReceiverConfig() {}
diff --git a/media/cast/cast_config.h b/media/cast/cast_config.h
index ea25d6b6cf..c2e797b63a 100644
--- a/media/cast/cast_config.h
+++ b/media/cast/cast_config.h
@@ -14,51 +14,79 @@
#include "base/memory/ref_counted.h"
#include "base/memory/shared_memory.h"
#include "base/single_thread_task_runner.h"
+#include "base/time/time.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
class VideoEncodeAccelerator;
namespace cast {
-enum RtcpMode {
- kRtcpCompound, // Compound RTCP mode is described by RFC 4585.
- kRtcpReducedSize, // Reduced-size RTCP mode is described by RFC 5506.
-};
-
// TODO(miu): Merge AudioSenderConfig and VideoSenderConfig and make their
// naming/documentation consistent with FrameReceiverConfig.
struct AudioSenderConfig {
AudioSenderConfig();
+ ~AudioSenderConfig();
+
+ // Identifier referring to the sender, used by the receiver.
+ uint32 ssrc;
- // The sender ssrc is in rtp_config.ssrc.
+ // The receiver's SSRC identifier.
uint32 incoming_feedback_ssrc;
int rtcp_interval;
std::string rtcp_c_name;
RtcpMode rtcp_mode;
- transport::RtpConfig rtp_config;
+ // The total amount of time between a frame's capture/recording on the sender
+ // and its playback on the receiver (i.e., shown to a user). This is fixed as
+ // a value large enough to give the system sufficient time to encode,
+ // transmit/retransmit, receive, decode, and render; given its run-time
+ // environment (sender/receiver hardware performance, network conditions,
+ // etc.).
+ base::TimeDelta target_playout_delay;
+
+ // RTP payload type enum: Specifies the type/encoding of frame data.
+ int rtp_payload_type;
bool use_external_encoder;
int frequency;
int channels;
int bitrate; // Set to <= 0 for "auto variable bitrate" (libopus knows best).
- transport::AudioCodec codec;
+ Codec codec;
+
+ // The AES crypto key and initialization vector. Each of these strings
+ // contains the data in binary form, of size kAesKeySize. If they are empty
+ // strings, crypto is not being used.
+ std::string aes_key;
+ std::string aes_iv_mask;
};
struct VideoSenderConfig {
VideoSenderConfig();
+ ~VideoSenderConfig();
- // The sender ssrc is in rtp_config.ssrc.
- uint32 incoming_feedback_ssrc;
+ // Identifier referring to the sender, used by the receiver.
+ uint32 ssrc;
+
+ // The receiver's SSRC identifier.
+ uint32 incoming_feedback_ssrc; // TODO(miu): Rename to receiver_ssrc.
int rtcp_interval;
std::string rtcp_c_name;
RtcpMode rtcp_mode;
- transport::RtpConfig rtp_config;
+ // The total amount of time between a frame's capture/recording on the sender
+ // and its playback on the receiver (i.e., shown to a user). This is fixed as
+ // a value large enough to give the system sufficient time to encode,
+ // transmit/retransmit, receive, decode, and render; given its run-time
+ // environment (sender/receiver hardware performance, network conditions,
+ // etc.).
+ base::TimeDelta target_playout_delay;
+
+ // RTP payload type enum: Specifies the type/encoding of frame data.
+ int rtp_payload_type;
bool use_external_encoder;
int width; // Incoming frames will be scaled to this size.
@@ -72,8 +100,14 @@ struct VideoSenderConfig {
int min_qp;
int max_frame_rate;
int max_number_of_video_buffers_used; // Max value depend on codec.
- transport::VideoCodec codec;
+ Codec codec;
int number_of_encode_threads;
+
+ // The AES crypto key and initialization vector. Each of these strings
+ // contains the data in binary form, of size kAesKeySize. If they are empty
+ // strings, crypto is not being used.
+ std::string aes_key;
+ std::string aes_iv_mask;
};
// TODO(miu): Naming and minor type changes are badly needed in a later CL.
@@ -127,11 +161,7 @@ struct FrameReceiverConfig {
// Codec used for the compression of signal data.
// TODO(miu): Merge the AudioCodec and VideoCodec enums into one so this union
// is not necessary.
- union MergedCodecPlaceholder {
- transport::AudioCodec audio;
- transport::VideoCodec video;
- MergedCodecPlaceholder() : audio(transport::kUnknownAudioCodec) {}
- } codec;
+ Codec codec;
// The AES crypto key and initialization vector. Each of these strings
// contains the data in binary form, of size kAesKeySize. If they are empty
@@ -140,9 +170,10 @@ struct FrameReceiverConfig {
std::string aes_iv_mask;
};
-// import from media::cast::transport
-typedef transport::Packet Packet;
-typedef transport::PacketList PacketList;
+// Import from media::cast.
+
+typedef Packet Packet;
+typedef PacketList PacketList;
typedef base::Callback<void(CastInitializationStatus)>
CastInitializationCallback;
diff --git a/media/cast/cast_defines.h b/media/cast/cast_defines.h
index 64b20c96da..07be3b3f9e 100644
--- a/media/cast/cast_defines.h
+++ b/media/cast/cast_defines.h
@@ -14,7 +14,7 @@
#include "base/compiler_specific.h"
#include "base/logging.h"
#include "base/time/time.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
namespace cast {
@@ -29,7 +29,6 @@ const uint32 kStartFrameId = UINT32_C(0xffffffff);
// frames.
const int kMaxUnackedFrames = 255;
-const size_t kMaxIpPacketSize = 1500;
const int kStartRttMs = 20;
const int64 kCastMessageUpdateIntervalMs = 33;
const int64 kNackRepeatIntervalMs = 30;
@@ -193,13 +192,6 @@ inline base::TimeDelta RtpDeltaToTimeDelta(int64 rtp_delta, int rtp_timebase) {
return rtp_delta * base::TimeDelta::FromSeconds(1) / rtp_timebase;
}
-inline uint32 GetVideoRtpTimestamp(const base::TimeTicks& time_ticks) {
- base::TimeTicks zero_time;
- base::TimeDelta recorded_delta = time_ticks - zero_time;
- // Timestamp is in 90 KHz for video.
- return static_cast<uint32>(recorded_delta.InMilliseconds() * 90);
-}
-
} // namespace cast
} // namespace media
diff --git a/media/cast/cast_receiver.h b/media/cast/cast_receiver.h
index a9d3edeb78..f57942231d 100644
--- a/media/cast/cast_receiver.h
+++ b/media/cast/cast_receiver.h
@@ -22,9 +22,7 @@ class VideoFrame;
namespace cast {
-namespace transport {
class PacketSender;
-}
// The following callbacks are used to deliver decoded audio/video frame data,
// the frame's corresponding play-out time, and a continuity flag.
@@ -44,7 +42,7 @@ typedef base::Callback<void(const scoped_refptr<media::VideoFrame>& video_frame,
// should examine the |frame_id| field to determine whether any frames have been
// dropped (i.e., frame_id should be incrementing by one each time). Note: A
// NULL pointer can be returned on error.
-typedef base::Callback<void(scoped_ptr<transport::EncodedFrame>)>
+typedef base::Callback<void(scoped_ptr<EncodedFrame>)>
ReceiveEncodedFrameCallback;
class CastReceiver {
@@ -53,13 +51,13 @@ class CastReceiver {
scoped_refptr<CastEnvironment> cast_environment,
const FrameReceiverConfig& audio_config,
const FrameReceiverConfig& video_config,
- transport::PacketSender* const packet_sender);
+ PacketSender* const packet_sender);
// All received RTP and RTCP packets for the call should be sent to this
// PacketReceiver. Can be called from any thread.
// TODO(hubbe): Replace with:
// virtual void ReceivePacket(scoped_ptr<Packet> packet) = 0;
- virtual transport::PacketReceiverCallback packet_receiver() = 0;
+ virtual PacketReceiverCallback packet_receiver() = 0;
// Polling interface to get audio and video frames from the CastReceiver. The
// the RequestDecodedXXXXXFrame() methods utilize internal software-based
diff --git a/media/cast/cast_sender.h b/media/cast/cast_sender.h
index eb3327ff3d..abe0a01713 100644
--- a/media/cast/cast_sender.h
+++ b/media/cast/cast_sender.h
@@ -19,7 +19,7 @@
#include "media/base/audio_bus.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/transport/cast_transport_sender.h"
+#include "media/cast/net/cast_transport_sender.h"
namespace media {
class VideoFrame;
@@ -63,7 +63,7 @@ class CastSender {
public:
static scoped_ptr<CastSender> Create(
scoped_refptr<CastEnvironment> cast_environment,
- transport::CastTransportSender* const transport_sender);
+ CastTransportSender* const transport_sender);
virtual ~CastSender() {}
@@ -75,7 +75,7 @@ class CastSender {
// All RTCP packets for the session should be inserted to this object.
// This function and the callback must be called on the main thread.
- virtual transport::PacketReceiverCallback packet_receiver() = 0;
+ virtual PacketReceiverCallback packet_receiver() = 0;
// Initialize the audio stack. Must be called in order to send audio frames.
// Status of the initialization will be returned on cast_initialization_cb.
diff --git a/media/cast/cast_sender_impl.cc b/media/cast/cast_sender_impl.cc
index 361e4d8dc1..a120d3a930 100644
--- a/media/cast/cast_sender_impl.cc
+++ b/media/cast/cast_sender_impl.cc
@@ -1,6 +1,7 @@
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
#include "media/cast/cast_sender_impl.h"
#include "base/bind.h"
@@ -75,7 +76,7 @@ class LocalAudioFrameInput : public AudioFrameInput {
scoped_ptr<CastSender> CastSender::Create(
scoped_refptr<CastEnvironment> cast_environment,
- transport::CastTransportSender* const transport_sender) {
+ CastTransportSender* const transport_sender) {
CHECK(cast_environment);
return scoped_ptr<CastSender>(
new CastSenderImpl(cast_environment, transport_sender));
@@ -83,7 +84,7 @@ scoped_ptr<CastSender> CastSender::Create(
CastSenderImpl::CastSenderImpl(
scoped_refptr<CastEnvironment> cast_environment,
- transport::CastTransportSender* const transport_sender)
+ CastTransportSender* const transport_sender)
: cast_environment_(cast_environment),
transport_sender_(transport_sender),
weak_factory_(this) {
@@ -211,7 +212,7 @@ scoped_refptr<VideoFrameInput> CastSenderImpl::video_frame_input() {
return video_frame_input_;
}
-transport::PacketReceiverCallback CastSenderImpl::packet_receiver() {
+PacketReceiverCallback CastSenderImpl::packet_receiver() {
return base::Bind(&CastSenderImpl::ReceivedPacket,
weak_factory_.GetWeakPtr());
}
diff --git a/media/cast/cast_sender_impl.h b/media/cast/cast_sender_impl.h
index d09a869712..bc320f7b54 100644
--- a/media/cast/cast_sender_impl.h
+++ b/media/cast/cast_sender_impl.h
@@ -6,12 +6,12 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "media/cast/audio_sender/audio_sender.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
#include "media/cast/cast_sender.h"
-#include "media/cast/video_sender/video_sender.h"
+#include "media/cast/sender/audio_sender.h"
+#include "media/cast/sender/video_sender.h"
namespace media {
class VideoFrame;
@@ -25,7 +25,7 @@ class VideoSender;
class CastSenderImpl : public CastSender {
public:
CastSenderImpl(scoped_refptr<CastEnvironment> cast_environment,
- transport::CastTransportSender* const transport_sender);
+ CastTransportSender* const transport_sender);
virtual void InitializeAudio(
const AudioSenderConfig& audio_config,
@@ -42,7 +42,7 @@ class CastSenderImpl : public CastSender {
virtual scoped_refptr<AudioFrameInput> audio_frame_input() OVERRIDE;
virtual scoped_refptr<VideoFrameInput> video_frame_input() OVERRIDE;
- virtual transport::PacketReceiverCallback packet_receiver() OVERRIDE;
+ virtual PacketReceiverCallback packet_receiver() OVERRIDE;
private:
void ReceivedPacket(scoped_ptr<Packet> packet);
@@ -55,7 +55,7 @@ class CastSenderImpl : public CastSender {
scoped_refptr<CastEnvironment> cast_environment_;
// The transport sender is owned by the owner of the CastSender, and should be
// valid throughout the lifetime of the CastSender.
- transport::CastTransportSender* const transport_sender_;
+ CastTransportSender* const transport_sender_;
uint32 ssrc_of_audio_sender_;
uint32 ssrc_of_video_sender_;
diff --git a/media/cast/cast_testing.gypi b/media/cast/cast_testing.gypi
index aef0fbd8c3..97e831e42b 100644
--- a/media/cast/cast_testing.gypi
+++ b/media/cast/cast_testing.gypi
@@ -11,19 +11,25 @@
'<(DEPTH)/',
],
'dependencies': [
+ 'cast_net',
'cast_receiver',
- 'cast_transport',
'<(DEPTH)/testing/gtest.gyp:gtest',
+ '<(DEPTH)/third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
'<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',
+ '<(DEPTH)/third_party/mt19937ar/mt19937ar.gyp:mt19937ar',
'<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
],
'sources': [
+ 'test/fake_media_source.cc',
+ 'test/fake_media_source.h',
'test/fake_single_thread_task_runner.cc',
'test/fake_single_thread_task_runner.h',
'test/skewed_single_thread_task_runner.cc',
'test/skewed_single_thread_task_runner.h',
'test/skewed_tick_clock.cc',
'test/skewed_tick_clock.h',
+ 'test/loopback_transport.cc',
+ 'test/loopback_transport.h',
'test/utility/audio_utility.cc',
'test/utility/audio_utility.h',
'test/utility/barcode.cc',
@@ -52,14 +58,13 @@
],
'dependencies': [
'cast_base',
+ 'cast_net',
'cast_receiver',
- 'cast_rtcp',
'cast_sender',
'cast_test_utility',
# Not a true dependency. This is here to make sure the CQ can verify
# the tools compile correctly.
'cast_tools',
- 'cast_transport',
'<(DEPTH)/base/base.gyp:test_support_base',
'<(DEPTH)/net/net.gyp:net',
'<(DEPTH)/testing/gmock.gyp:gmock',
@@ -67,12 +72,6 @@
],
'sources': [
'<(DEPTH)/media/base/run_all_unittests.cc',
- 'audio_sender/audio_encoder_unittest.cc',
- 'audio_sender/audio_sender_unittest.cc',
- 'congestion_control/congestion_control_unittest.cc',
- 'framer/cast_message_builder_unittest.cc',
- 'framer/frame_buffer_unittest.cc',
- 'framer/framer_unittest.cc',
'logging/encoding_event_subscriber_unittest.cc',
'logging/serialize_deserialize_test.cc',
'logging/logging_impl_unittest.cc',
@@ -80,26 +79,44 @@
'logging/receiver_time_offset_estimator_impl_unittest.cc',
'logging/simple_event_subscriber_unittest.cc',
'logging/stats_event_subscriber_unittest.cc',
+ 'net/cast_transport_sender_impl_unittest.cc',
+ 'net/pacing/mock_paced_packet_sender.cc',
+ 'net/pacing/mock_paced_packet_sender.h',
+ 'net/pacing/paced_sender_unittest.cc',
+ 'net/rtcp/mock_rtcp_receiver_feedback.cc',
+ 'net/rtcp/mock_rtcp_receiver_feedback.h',
+ 'net/rtcp/mock_rtcp_sender_feedback.cc',
+ 'net/rtcp/mock_rtcp_sender_feedback.h',
+ 'net/rtcp/rtcp_receiver_unittest.cc',
+ 'net/rtcp/rtcp_sender_unittest.cc',
+ 'net/rtcp/rtcp_unittest.cc',
+ 'net/rtcp/receiver_rtcp_event_subscriber_unittest.cc',
+# TODO(miu): The following two are test utility modules. Rename/move the files.
+ 'net/rtcp/test_rtcp_packet_builder.cc',
+ 'net/rtcp/test_rtcp_packet_builder.h',
+ 'net/rtp/cast_message_builder_unittest.cc',
+ 'net/rtp/frame_buffer_unittest.cc',
+ 'net/rtp/framer_unittest.cc',
+ 'net/rtp/mock_rtp_payload_feedback.cc',
+ 'net/rtp/mock_rtp_payload_feedback.h',
+ 'net/rtp/packet_storage_unittest.cc',
+ 'net/rtp/receiver_stats_unittest.cc',
+ 'net/rtp/rtp_header_parser.cc',
+ 'net/rtp/rtp_header_parser.h',
+ 'net/rtp/rtp_packet_builder.cc',
+ 'net/rtp/rtp_parser_unittest.cc',
+ 'net/rtp/rtp_packetizer_unittest.cc',
+ 'net/rtp/rtp_receiver_defines.h',
+ 'net/udp_transport_unittest.cc',
'receiver/audio_decoder_unittest.cc',
'receiver/frame_receiver_unittest.cc',
'receiver/video_decoder_unittest.cc',
- 'rtcp/mock_rtcp_receiver_feedback.cc',
- 'rtcp/mock_rtcp_receiver_feedback.h',
- 'rtcp/mock_rtcp_sender_feedback.cc',
- 'rtcp/mock_rtcp_sender_feedback.h',
- 'rtcp/rtcp_receiver_unittest.cc',
- 'rtcp/rtcp_sender_unittest.cc',
- 'rtcp/rtcp_unittest.cc',
- 'rtcp/receiver_rtcp_event_subscriber_unittest.cc',
-# TODO(miu): The following two are test utility modules. Rename/move the files.
- 'rtcp/test_rtcp_packet_builder.cc',
- 'rtcp/test_rtcp_packet_builder.h',
- 'rtp_receiver/rtp_receiver_defines.h',
- 'rtp_receiver/mock_rtp_payload_feedback.cc',
- 'rtp_receiver/mock_rtp_payload_feedback.h',
- 'rtp_receiver/receiver_stats_unittest.cc',
- 'rtp_receiver/rtp_parser/test/rtp_packet_builder.cc',
- 'rtp_receiver/rtp_parser/rtp_parser_unittest.cc',
+ 'sender/audio_encoder_unittest.cc',
+ 'sender/audio_sender_unittest.cc',
+ 'sender/congestion_control_unittest.cc',
+ 'sender/external_video_encoder_unittest.cc',
+ 'sender/video_encoder_impl_unittest.cc',
+ 'sender/video_sender_unittest.cc',
'test/end2end_unittest.cc',
'test/fake_receiver_time_offset_estimator.cc',
'test/fake_receiver_time_offset_estimator.h',
@@ -109,18 +126,6 @@
'test/fake_video_encode_accelerator.h',
'test/utility/audio_utility_unittest.cc',
'test/utility/barcode_unittest.cc',
- 'transport/cast_transport_sender_impl_unittest.cc',
- 'transport/pacing/mock_paced_packet_sender.cc',
- 'transport/pacing/mock_paced_packet_sender.h',
- 'transport/pacing/paced_sender_unittest.cc',
- 'transport/rtp_sender/packet_storage/packet_storage_unittest.cc',
- 'transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc',
- 'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc',
- 'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h',
- 'transport/transport/udp_transport_unittest.cc',
- 'video_sender/external_video_encoder_unittest.cc',
- 'video_sender/video_encoder_impl_unittest.cc',
- 'video_sender/video_sender_unittest.cc',
], # source
},
{
@@ -131,11 +136,10 @@
],
'dependencies': [
'cast_base',
+ 'cast_net',
'cast_receiver',
- 'cast_rtcp',
'cast_sender',
'cast_test_utility',
- 'cast_transport',
'<(DEPTH)/base/base.gyp:test_support_base',
'<(DEPTH)/net/net.gyp:net',
'<(DEPTH)/testing/gtest.gyp:gtest',
@@ -167,6 +171,7 @@
'dependencies': [
'cast_receiver_app',
'cast_sender_app',
+ 'cast_simulator',
'udp_proxy',
],
},
@@ -178,9 +183,9 @@
],
'dependencies': [
'cast_base',
+ 'cast_net',
'cast_receiver',
'cast_test_utility',
- 'cast_transport',
'<(DEPTH)/net/net.gyp:net_test_support',
'<(DEPTH)/media/media.gyp:media',
'<(DEPTH)/testing/gtest.gyp:gtest',
@@ -211,9 +216,9 @@
],
'dependencies': [
'cast_base',
+ 'cast_net',
'cast_sender',
'cast_test_utility',
- 'cast_transport',
'<(DEPTH)/net/net.gyp:net_test_support',
'<(DEPTH)/media/media.gyp:media',
'<(DEPTH)/testing/gtest.gyp:gtest',
@@ -226,6 +231,45 @@
],
},
{
+ 'target_name': 'cast_simulator',
+ 'type': 'executable',
+ 'include_dirs': [
+ '<(DEPTH)/',
+ ],
+ 'dependencies': [
+ 'cast_base',
+ 'cast_net',
+ 'cast_network_model_proto',
+ 'cast_sender',
+ 'cast_test_utility',
+ '<(DEPTH)/net/net.gyp:net_test_support',
+ '<(DEPTH)/media/media.gyp:media',
+ '<(DEPTH)/testing/gtest.gyp:gtest',
+ '<(DEPTH)/third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
+ '<(DEPTH)/third_party/opus/opus.gyp:opus',
+ '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+ ],
+ 'sources': [
+ '<(DEPTH)/media/cast/test/simulator.cc',
+ ],
+ },
+ {
+ # GN version: //media/cast/test/proto
+ 'target_name': 'cast_network_model_proto',
+ 'type': 'static_library',
+ 'include_dirs': [
+ '<(DEPTH)/',
+ ],
+ 'sources': [
+ 'test/proto/network_simulation_model.proto',
+ ],
+ 'variables': {
+ 'proto_in_dir': 'test/proto',
+ 'proto_out_dir': 'media/cast/test/proto',
+ },
+ 'includes': ['../../build/protoc.gypi'],
+ },
+ {
'target_name': 'generate_barcode_video',
'type': 'executable',
'include_dirs': [
@@ -248,8 +292,8 @@
],
'dependencies': [
'cast_base',
+ 'cast_net',
'cast_test_utility',
- 'cast_transport',
'<(DEPTH)/base/base.gyp:base',
'<(DEPTH)/media/media.gyp:media',
],
diff --git a/media/cast/base/clock_drift_smoother.cc b/media/cast/common/clock_drift_smoother.cc
index ca0380533e..aff9a396de 100644
--- a/media/cast/base/clock_drift_smoother.cc
+++ b/media/cast/common/clock_drift_smoother.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/base/clock_drift_smoother.h"
+#include "media/cast/common/clock_drift_smoother.h"
#include "base/logging.h"
diff --git a/media/cast/base/clock_drift_smoother.h b/media/cast/common/clock_drift_smoother.h
index 67de4cb51a..0511da9f3d 100644
--- a/media/cast/base/clock_drift_smoother.h
+++ b/media/cast/common/clock_drift_smoother.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_BASE_CLOCK_DRIFT_SMOOTHER_H_
-#define MEDIA_CAST_BASE_CLOCK_DRIFT_SMOOTHER_H_
+#ifndef MEDIA_CAST_COMMON_CLOCK_DRIFT_SMOOTHER_H_
+#define MEDIA_CAST_COMMON_CLOCK_DRIFT_SMOOTHER_H_
#include "base/time/time.h"
@@ -49,4 +49,4 @@ class ClockDriftSmoother {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_BASE_CLOCK_DRIFT_SMOOTHER_H_
+#endif // MEDIA_CAST_COMMON_CLOCK_DRIFT_SMOOTHER_H_
diff --git a/media/cast/transport/utility/transport_encryption_handler.cc b/media/cast/common/transport_encryption_handler.cc
index 89db2cf95b..54a43e8b52 100644
--- a/media/cast/transport/utility/transport_encryption_handler.cc
+++ b/media/cast/common/transport_encryption_handler.cc
@@ -2,32 +2,55 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/utility/transport_encryption_handler.h"
+#include "media/cast/common/transport_encryption_handler.h"
#include "base/logging.h"
#include "crypto/encryptor.h"
#include "crypto/symmetric_key.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+
+namespace {
+
+// Crypto.
+const size_t kAesBlockSize = 16;
+const size_t kAesKeySize = 16;
+
+std::string GetAesNonce(uint32 frame_id, const std::string& iv_mask) {
+ std::string aes_nonce(kAesBlockSize, 0);
+
+ // Serializing frame_id in big-endian order (aes_nonce[8] is the most
+ // significant byte of frame_id).
+ aes_nonce[11] = frame_id & 0xff;
+ aes_nonce[10] = (frame_id >> 8) & 0xff;
+ aes_nonce[9] = (frame_id >> 16) & 0xff;
+ aes_nonce[8] = (frame_id >> 24) & 0xff;
+
+ for (size_t i = 0; i < kAesBlockSize; ++i) {
+ aes_nonce[i] ^= iv_mask[i];
+ }
+ return aes_nonce;
+}
+
+} // namespace
namespace media {
namespace cast {
-namespace transport {
TransportEncryptionHandler::TransportEncryptionHandler()
- : key_(), encryptor_(), iv_mask_(), initialized_(false) {}
+ : key_(), encryptor_(), iv_mask_(), is_activated_(false) {}
TransportEncryptionHandler::~TransportEncryptionHandler() {}
bool TransportEncryptionHandler::Initialize(std::string aes_key,
std::string aes_iv_mask) {
- initialized_ = false;
+ is_activated_ = false;
if (aes_iv_mask.size() == kAesKeySize && aes_key.size() == kAesKeySize) {
iv_mask_ = aes_iv_mask;
key_.reset(
crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, aes_key));
encryptor_.reset(new crypto::Encryptor());
encryptor_->Init(key_.get(), crypto::Encryptor::CTR, std::string());
- initialized_ = true;
+ is_activated_ = true;
} else if (aes_iv_mask.size() != 0 || aes_key.size() != 0) {
DCHECK_EQ(aes_iv_mask.size(), 0u)
<< "Invalid Crypto configuration: aes_iv_mask.size";
@@ -41,7 +64,7 @@ bool TransportEncryptionHandler::Initialize(std::string aes_key,
bool TransportEncryptionHandler::Encrypt(uint32 frame_id,
const base::StringPiece& data,
std::string* encrypted_data) {
- if (!initialized_)
+ if (!is_activated_)
return false;
if (!encryptor_->SetCounter(GetAesNonce(frame_id, iv_mask_))) {
NOTREACHED() << "Failed to set counter";
@@ -57,10 +80,10 @@ bool TransportEncryptionHandler::Encrypt(uint32 frame_id,
bool TransportEncryptionHandler::Decrypt(uint32 frame_id,
const base::StringPiece& ciphertext,
std::string* plaintext) {
- if (!initialized_) {
+ if (!is_activated_) {
return false;
}
- if (!encryptor_->SetCounter(transport::GetAesNonce(frame_id, iv_mask_))) {
+ if (!encryptor_->SetCounter(GetAesNonce(frame_id, iv_mask_))) {
NOTREACHED() << "Failed to set counter";
return false;
}
@@ -71,6 +94,5 @@ bool TransportEncryptionHandler::Decrypt(uint32 frame_id,
return true;
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/utility/transport_encryption_handler.h b/media/cast/common/transport_encryption_handler.h
index 06d0e3f34d..d4798dc78b 100644
--- a/media/cast/transport/utility/transport_encryption_handler.h
+++ b/media/cast/common/transport_encryption_handler.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_TRANSPORT_UTILITY_ENCRYPTION_HANDLER_H_
-#define MEDIA_CAST_TRANSPORT_TRANSPORT_UTILITY_ENCRYPTION_HANDLER_H_
+#ifndef MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
+#define MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
// Helper class to handle encryption for the Cast Transport library.
#include <string>
@@ -20,7 +20,6 @@ class SymmetricKey;
namespace media {
namespace cast {
-namespace transport {
class TransportEncryptionHandler : public base::NonThreadSafe {
public:
@@ -37,22 +36,18 @@ class TransportEncryptionHandler : public base::NonThreadSafe {
const base::StringPiece& ciphertext,
std::string* plaintext);
- // TODO(miu): This naming is very misleading. It should be called
- // is_activated() since Initialize() without keys (i.e., cypto is disabled)
- // may have succeeded.
- bool initialized() const { return initialized_; }
+ bool is_activated() const { return is_activated_; }
private:
scoped_ptr<crypto::SymmetricKey> key_;
scoped_ptr<crypto::Encryptor> encryptor_;
std::string iv_mask_;
- bool initialized_;
+ bool is_activated_;
DISALLOW_COPY_AND_ASSIGN(TransportEncryptionHandler);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_TRANSPORT_UTILITY_ENCRYPTION_HANDLER_H_
+#endif // MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
diff --git a/media/cast/logging/proto/BUILD.gn b/media/cast/logging/proto/BUILD.gn
new file mode 100644
index 0000000000..c9fb89bbae
--- /dev/null
+++ b/media/cast/logging/proto/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/protobuf/proto_library.gni")
+
+# GYP version: media/cast/cast.gyp:cast_logging_proto
+source_set("proto") {
+ sources = [
+ "proto_utils.cc",
+ ]
+ deps = [
+ ":cast_logging_proto",
+ ]
+}
+
+proto_library("cast_logging_proto") {
+ visibility = ":proto"
+ sources = [
+ "raw_events.proto",
+ ]
+}
diff --git a/media/cast/net/DEPS b/media/cast/net/DEPS
new file mode 100644
index 0000000000..3fa74fa027
--- /dev/null
+++ b/media/cast/net/DEPS
@@ -0,0 +1,16 @@
+include_rules = [
+ "-media/cast",
+ "+media/cast/cast_config.h",
+ "+media/cast/cast_defines.h",
+ "+media/cast/cast_environment.h",
+ "+media/cast/common",
+ "+media/cast/logging",
+ "+media/cast/net",
+ "+net",
+]
+
+specific_include_rules = {
+ ".*unittest.cc": [
+ "+media/cast/test",
+ ],
+}
diff --git a/media/cast/transport/cast_transport_config.cc b/media/cast/net/cast_transport_config.cc
index 16e9034713..ae8ec60551 100644
--- a/media/cast/transport/cast_transport_config.cc
+++ b/media/cast/net/cast_transport_config.cc
@@ -2,37 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
namespace cast {
-namespace transport {
-
-namespace {
-const int kDefaultRtpMaxDelayMs = 100;
-} // namespace
-
-RtpConfig::RtpConfig()
- : ssrc(0),
- max_delay_ms(kDefaultRtpMaxDelayMs),
- payload_type(0) {}
-
-RtpConfig::~RtpConfig() {}
CastTransportRtpConfig::CastTransportRtpConfig()
- : max_outstanding_frames(-1) {}
+ : ssrc(0), rtp_payload_type(0), stored_frames(0) {}
CastTransportRtpConfig::~CastTransportRtpConfig() {}
-CastTransportAudioConfig::CastTransportAudioConfig()
- : codec(kOpus), frequency(0), channels(0) {}
-
-CastTransportAudioConfig::~CastTransportAudioConfig() {}
-
-CastTransportVideoConfig::CastTransportVideoConfig() : codec(kVp8) {}
-
-CastTransportVideoConfig::~CastTransportVideoConfig() {}
-
EncodedFrame::EncodedFrame()
: dependency(UNKNOWN_DEPENDENCY),
frame_id(0),
@@ -77,6 +56,5 @@ SendRtcpFromRtpSenderData::SendRtcpFromRtpSenderData()
: packet_type_flags(0), sending_ssrc(0) {}
SendRtcpFromRtpSenderData::~SendRtcpFromRtpSenderData() {}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/cast_transport_config.h b/media/cast/net/cast_transport_config.h
index 96b771acb9..db87b8c9fc 100644
--- a/media/cast/transport/cast_transport_config.h
+++ b/media/cast/net/cast_transport_config.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_
-#define MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_
+#ifndef MEDIA_CAST_NET_CAST_TRANSPORT_CONFIG_H_
+#define MEDIA_CAST_NET_CAST_TRANSPORT_CONFIG_H_
#include <string>
#include <vector>
@@ -13,66 +13,45 @@
#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/stl_util.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "net/base/ip_endpoint.h"
+#include "media/cast/net/cast_transport_defines.h"
namespace media {
namespace cast {
-namespace transport {
enum RtcpMode {
kRtcpCompound, // Compound RTCP mode is described by RFC 4585.
kRtcpReducedSize, // Reduced-size RTCP mode is described by RFC 5506.
};
-enum VideoCodec {
- kUnknownVideoCodec,
- kFakeSoftwareVideo,
- kVp8,
- kH264,
- kVideoCodecLast = kH264
-};
-
-enum AudioCodec {
- kUnknownAudioCodec,
- kOpus,
- kPcm16,
- kAudioCodecLast = kPcm16
-};
-
-struct RtpConfig {
- RtpConfig();
- ~RtpConfig();
- uint32 ssrc;
- int max_delay_ms;
- int payload_type;
- std::string aes_key; // Binary string of size kAesKeySize.
- std::string aes_iv_mask; // Binary string of size kAesBlockSize.
+enum Codec {
+ CODEC_UNKNOWN,
+ CODEC_AUDIO_OPUS,
+ CODEC_AUDIO_PCM16,
+ CODEC_VIDEO_FAKE,
+ CODEC_VIDEO_VP8,
+ CODEC_VIDEO_H264,
+ CODEC_LAST = CODEC_VIDEO_H264
};
struct CastTransportRtpConfig {
CastTransportRtpConfig();
~CastTransportRtpConfig();
- RtpConfig config;
- int max_outstanding_frames;
-};
-struct CastTransportAudioConfig {
- CastTransportAudioConfig();
- ~CastTransportAudioConfig();
+ // Identifier refering to this sender.
+ uint32 ssrc;
- CastTransportRtpConfig rtp;
- AudioCodec codec;
- int frequency;
- int channels;
-};
+ // RTP payload type enum: Specifies the type/encoding of frame data.
+ int rtp_payload_type;
-struct CastTransportVideoConfig {
- CastTransportVideoConfig();
- ~CastTransportVideoConfig();
+ // The number of most-recent frames that must be stored in the transport
+ // layer, to facilitate re-transmissions.
+ int stored_frames;
- CastTransportRtpConfig rtp;
- VideoCodec codec;
+ // The AES crypto key and initialization vector. Each of these strings
+ // contains the data in binary form, of size kAesKeySize. If they are empty
+ // strings, crypto is not being used.
+ std::string aes_key;
+ std::string aes_iv_mask;
};
// A combination of metadata and data for one encoded frame. This can contain
@@ -214,8 +193,7 @@ inline bool operator==(RtcpSenderInfo lhs, RtcpSenderInfo rhs) {
lhs.send_octet_count == rhs.send_octet_count;
}
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_
+#endif // MEDIA_CAST_NET_CAST_TRANSPORT_CONFIG_H_
diff --git a/media/cast/transport/cast_transport_defines.h b/media/cast/net/cast_transport_defines.h
index a34f7c539a..b2020f33af 100644
--- a/media/cast/transport/cast_transport_defines.h
+++ b/media/cast/net/cast_transport_defines.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_DEFINES_H_
-#define MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_DEFINES_H_
+#ifndef MEDIA_CAST_NET_CAST_TRANSPORT_DEFINES_H_
+#define MEDIA_CAST_NET_CAST_TRANSPORT_DEFINES_H_
#include <stdint.h>
@@ -16,7 +16,6 @@
namespace media {
namespace cast {
-namespace transport {
// TODO(mikhal): Implement and add more types.
enum CastTransportStatus {
@@ -35,26 +34,6 @@ typedef std::set<uint16> PacketIdSet;
// Each uint8 represents one cast frame.
typedef std::map<uint8, PacketIdSet> MissingFramesAndPacketsMap;
-// Crypto.
-const size_t kAesBlockSize = 16;
-const size_t kAesKeySize = 16;
-
-inline std::string GetAesNonce(uint32 frame_id, const std::string& iv_mask) {
- std::string aes_nonce(kAesBlockSize, 0);
-
- // Serializing frame_id in big-endian order (aes_nonce[8] is the most
- // significant byte of frame_id).
- aes_nonce[11] = frame_id & 0xff;
- aes_nonce[10] = (frame_id >> 8) & 0xff;
- aes_nonce[9] = (frame_id >> 16) & 0xff;
- aes_nonce[8] = (frame_id >> 24) & 0xff;
-
- for (size_t i = 0; i < kAesBlockSize; ++i) {
- aes_nonce[i] ^= iv_mask[i];
- }
- return aes_nonce;
-}
-
// Rtcp defines.
enum RtcpPacketFields {
@@ -162,8 +141,7 @@ inline uint32 GetVideoRtpTimestamp(const base::TimeTicks& time_ticks) {
return static_cast<uint32>(recorded_delta.InMilliseconds() * 90);
}
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_DEFINES_H_
+#endif // MEDIA_CAST_NET_CAST_TRANSPORT_DEFINES_H_
diff --git a/media/cast/transport/cast_transport_sender.h b/media/cast/net/cast_transport_sender.h
index e88f2f4f09..3f8a119655 100644
--- a/media/cast/transport/cast_transport_sender.h
+++ b/media/cast/net/cast_transport_sender.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -20,8 +20,8 @@
// This also works when the CastSender acts as a receiver for the RTCP packets
// due to the weak pointers in the ReceivedPacket method in cast_sender_impl.cc.
-#ifndef MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_SENDER_H_
-#define MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_SENDER_H_
+#ifndef MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
+#define MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
#include "base/basictypes.h"
#include "base/callback.h"
@@ -29,8 +29,9 @@
#include "base/threading/non_thread_safe.h"
#include "base/time/tick_clock.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "net/base/ip_endpoint.h"
namespace net {
class NetLog;
@@ -38,7 +39,6 @@ class NetLog;
namespace media {
namespace cast {
-namespace transport {
// Following the initialization of either audio or video an initialization
// status will be sent via this callback.
@@ -65,9 +65,8 @@ class CastTransportSender : public base::NonThreadSafe {
// Audio/Video initialization.
// Encoded frames cannot be transmitted until the relevant initialize method
// is called. Usually called by CastSender.
- virtual void InitializeAudio(const CastTransportAudioConfig& config) = 0;
-
- virtual void InitializeVideo(const CastTransportVideoConfig& config) = 0;
+ virtual void InitializeAudio(const CastTransportRtpConfig& config) = 0;
+ virtual void InitializeVideo(const CastTransportRtpConfig& config) = 0;
// Sets the Cast packet receiver. Should be called after creation on the
// Cast sender. Packets won't be received until this function is called.
@@ -106,8 +105,7 @@ class CastTransportSender : public base::NonThreadSafe {
base::TimeDelta dedupe_window) = 0;
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_SENDER_H_
+#endif // MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
diff --git a/media/cast/transport/cast_transport_sender_impl.cc b/media/cast/net/cast_transport_sender_impl.cc
index 6fd848f27b..973f34155f 100644
--- a/media/cast/transport/cast_transport_sender_impl.cc
+++ b/media/cast/net/cast_transport_sender_impl.cc
@@ -2,16 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/cast_transport_sender_impl.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
#include "base/single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/udp_transport.h"
#include "net/base/net_util.h"
namespace media {
namespace cast {
-namespace transport {
scoped_ptr<CastTransportSender> CastTransportSender::Create(
net::NetLog* net_log,
@@ -80,18 +80,18 @@ CastTransportSenderImpl::~CastTransportSenderImpl() {
}
void CastTransportSenderImpl::InitializeAudio(
- const CastTransportAudioConfig& config) {
- LOG_IF(WARNING, config.rtp.config.aes_key.empty() ||
- config.rtp.config.aes_iv_mask.empty())
+ const CastTransportRtpConfig& config) {
+ LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty())
<< "Unsafe to send audio with encryption DISABLED.";
- if (!audio_encryptor_.Initialize(config.rtp.config.aes_key,
- config.rtp.config.aes_iv_mask)) {
+ if (!audio_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) {
status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED);
return;
}
audio_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_));
- if (audio_sender_->InitializeAudio(config)) {
- pacer_.RegisterAudioSsrc(config.rtp.config.ssrc);
+ if (audio_sender_->Initialize(config)) {
+ // Audio packets have a higher priority.
+ pacer_.RegisterAudioSsrc(config.ssrc);
+ pacer_.RegisterPrioritySsrc(config.ssrc);
status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED);
} else {
audio_sender_.reset();
@@ -100,18 +100,16 @@ void CastTransportSenderImpl::InitializeAudio(
}
void CastTransportSenderImpl::InitializeVideo(
- const CastTransportVideoConfig& config) {
- LOG_IF(WARNING, config.rtp.config.aes_key.empty() ||
- config.rtp.config.aes_iv_mask.empty())
+ const CastTransportRtpConfig& config) {
+ LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty())
<< "Unsafe to send video with encryption DISABLED.";
- if (!video_encryptor_.Initialize(config.rtp.config.aes_key,
- config.rtp.config.aes_iv_mask)) {
+ if (!video_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) {
status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED);
return;
}
video_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_));
- if (video_sender_->InitializeVideo(config)) {
- pacer_.RegisterVideoSsrc(config.rtp.config.ssrc);
+ if (video_sender_->Initialize(config)) {
+ pacer_.RegisterVideoSsrc(config.ssrc);
status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED);
} else {
video_sender_.reset();
@@ -128,7 +126,7 @@ namespace {
void EncryptAndSendFrame(const EncodedFrame& frame,
TransportEncryptionHandler* encryptor,
RtpSender* sender) {
- if (encryptor->initialized()) {
+ if (encryptor->is_activated()) {
EncodedFrame encrypted_frame;
frame.CopyMetadataTo(&encrypted_frame);
if (encryptor->Encrypt(frame.frame_id, frame.data, &encrypted_frame.data)) {
@@ -207,6 +205,5 @@ void CastTransportSenderImpl::SendRawEvents() {
raw_events_callback_.Run(packet_events);
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/cast_transport_sender_impl.h b/media/cast/net/cast_transport_sender_impl.h
index 035ef844b6..5d34fdeb01 100644
--- a/media/cast/transport/cast_transport_sender_impl.h
+++ b/media/cast/net/cast_transport_sender_impl.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_IMPL_H_
-#define MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_IMPL_H_
+#ifndef MEDIA_CAST_NET_CAST_TRANSPORT_IMPL_H_
+#define MEDIA_CAST_NET_CAST_TRANSPORT_IMPL_H_
#include "base/callback.h"
#include "base/memory/ref_counted.h"
@@ -11,18 +11,19 @@
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
+#include "media/cast/common/transport_encryption_handler.h"
#include "media/cast/logging/logging_defines.h"
#include "media/cast/logging/simple_event_subscriber.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "media/cast/transport/rtcp/rtcp_builder.h"
-#include "media/cast/transport/rtp_sender/rtp_sender.h"
-#include "media/cast/transport/utility/transport_encryption_handler.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/rtcp_builder.h"
+#include "media/cast/net/rtp/rtp_sender.h"
namespace media {
namespace cast {
-namespace transport {
+
+class UdpTransport;
class CastTransportSenderImpl : public CastTransportSender {
public:
@@ -46,9 +47,8 @@ class CastTransportSenderImpl : public CastTransportSender {
virtual ~CastTransportSenderImpl();
- virtual void InitializeAudio(const CastTransportAudioConfig& config) OVERRIDE;
-
- virtual void InitializeVideo(const CastTransportVideoConfig& config) OVERRIDE;
+ virtual void InitializeAudio(const CastTransportRtpConfig& config) OVERRIDE;
+ virtual void InitializeVideo(const CastTransportRtpConfig& config) OVERRIDE;
// CastTransportSender implementation.
virtual void SetPacketReceiver(const PacketReceiverCallback& packet_receiver)
@@ -103,8 +103,7 @@ class CastTransportSenderImpl : public CastTransportSender {
DISALLOW_COPY_AND_ASSIGN(CastTransportSenderImpl);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_IMPL_H_
+#endif // MEDIA_CAST_NET_CAST_TRANSPORT_IMPL_H_
diff --git a/media/cast/transport/cast_transport_sender_impl_unittest.cc b/media/cast/net/cast_transport_sender_impl_unittest.cc
index 67eb39a47a..b1d29b9ef9 100644
--- a/media/cast/transport/cast_transport_sender_impl_unittest.cc
+++ b/media/cast/net/cast_transport_sender_impl_unittest.cc
@@ -12,19 +12,18 @@
#include "base/run_loop.h"
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_config.h"
-#include "media/cast/rtcp/rtcp.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
+#include "media/cast/net/rtcp/rtcp.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
namespace cast {
-namespace transport {
static const int64 kStartMillisecond = INT64_C(12345678900000);
-class FakePacketSender : public transport::PacketSender {
+class FakePacketSender : public PacketSender {
public:
FakePacketSender() {}
@@ -78,7 +77,7 @@ class CastTransportSenderImplTest : public ::testing::Test {
}
}
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
+ static void UpdateCastTransportStatus(CastTransportStatus status) {
}
base::SimpleTestTickClock testing_clock_;
@@ -108,6 +107,5 @@ TEST_F(CastTransportSenderImplTest, InitWithLogging) {
EXPECT_GT(num_times_callback_called_, 1);
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/frame_id_wrap_helper_test.cc b/media/cast/net/frame_id_wrap_helper_test.cc
index 3a2060d3aa..92a8443533 100644
--- a/media/cast/transport/frame_id_wrap_helper_test.cc
+++ b/media/cast/net/frame_id_wrap_helper_test.cc
@@ -1,13 +1,12 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gtest/gtest.h>
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
namespace media {
namespace cast {
-namespace transport {
class FrameIdWrapHelperTest : public ::testing::Test {
protected:
@@ -47,6 +46,5 @@ TEST_F(FrameIdWrapHelperTest, OutOfOrder) {
EXPECT_EQ(257u, new_frame_id);
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/pacing/mock_paced_packet_sender.cc b/media/cast/net/pacing/mock_paced_packet_sender.cc
index 5e325f0233..3219ba2ba4 100644
--- a/media/cast/transport/pacing/mock_paced_packet_sender.cc
+++ b/media/cast/net/pacing/mock_paced_packet_sender.cc
@@ -1,17 +1,15 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/pacing/mock_paced_packet_sender.h"
+#include "media/cast/net/pacing/mock_paced_packet_sender.h"
namespace media {
namespace cast {
-namespace transport {
MockPacedPacketSender::MockPacedPacketSender() {}
MockPacedPacketSender::~MockPacedPacketSender() {}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/pacing/mock_paced_packet_sender.h b/media/cast/net/pacing/mock_paced_packet_sender.h
index 20b7647035..2f7f1b2650 100644
--- a/media/cast/transport/pacing/mock_paced_packet_sender.h
+++ b/media/cast/net/pacing/mock_paced_packet_sender.h
@@ -1,16 +1,15 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_PACING_MOCK_PACED_PACKET_SENDER_H_
-#define MEDIA_CAST_TRANSPORT_PACING_MOCK_PACED_PACKET_SENDER_H_
+#ifndef MEDIA_CAST_NET_PACING_MOCK_PACED_PACKET_SENDER_H_
+#define MEDIA_CAST_NET_PACING_MOCK_PACED_PACKET_SENDER_H_
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
namespace cast {
-namespace transport {
class MockPacedPacketSender : public PacedPacketSender {
public:
@@ -24,8 +23,7 @@ class MockPacedPacketSender : public PacedPacketSender {
MOCK_METHOD1(CancelSendingPacket, void(const PacketKey& packet_key));
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_PACING_MOCK_PACED_PACKET_SENDER_H_
+#endif // MEDIA_CAST_NET_PACING_MOCK_PACED_PACKET_SENDER_H_
diff --git a/media/cast/transport/pacing/paced_sender.cc b/media/cast/net/pacing/paced_sender.cc
index 20cbde85be..89a69272dc 100644
--- a/media/cast/transport/pacing/paced_sender.cc
+++ b/media/cast/net/pacing/paced_sender.cc
@@ -1,16 +1,16 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
#include "base/big_endian.h"
#include "base/bind.h"
#include "base/message_loop/message_loop.h"
+#include "media/cast/logging/logging_impl.h"
namespace media {
namespace cast {
-namespace transport {
namespace {
@@ -60,13 +60,24 @@ void PacedSender::RegisterVideoSsrc(uint32 video_ssrc) {
video_ssrc_ = video_ssrc;
}
+void PacedSender::RegisterPrioritySsrc(uint32 ssrc) {
+ priority_ssrcs_.push_back(ssrc);
+}
+
bool PacedSender::SendPackets(const SendPacketVector& packets) {
if (packets.empty()) {
return true;
}
+ const bool high_priority = IsHighPriority(packets.begin()->first);
for (size_t i = 0; i < packets.size(); i++) {
- packet_list_[packets[i].first] =
- make_pair(PacketType_Normal, packets[i].second);
+ DCHECK(IsHighPriority(packets[i].first) == high_priority);
+ if (high_priority) {
+ priority_packet_list_[packets[i].first] =
+ make_pair(PacketType_Normal, packets[i].second);
+ } else {
+ packet_list_[packets[i].first] =
+ make_pair(PacketType_Normal, packets[i].second);
+ }
}
if (state_ == State_Unblocked) {
SendStoredPackets();
@@ -79,6 +90,7 @@ bool PacedSender::ResendPackets(const SendPacketVector& packets,
if (packets.empty()) {
return true;
}
+ const bool high_priority = IsHighPriority(packets.begin()->first);
base::TimeTicks now = clock_->NowTicks();
for (size_t i = 0; i < packets.size(); i++) {
std::map<PacketKey, base::TimeTicks>::const_iterator j =
@@ -89,8 +101,14 @@ bool PacedSender::ResendPackets(const SendPacketVector& packets,
continue;
}
- packet_list_[packets[i].first] =
- make_pair(PacketType_Resend, packets[i].second);
+ DCHECK(IsHighPriority(packets[i].first) == high_priority);
+ if (high_priority) {
+ priority_packet_list_[packets[i].first] =
+ make_pair(PacketType_Resend, packets[i].second);
+ } else {
+ packet_list_[packets[i].first] =
+ make_pair(PacketType_Resend, packets[i].second);
+ }
}
if (state_ == State_Unblocked) {
SendStoredPackets();
@@ -100,7 +118,8 @@ bool PacedSender::ResendPackets(const SendPacketVector& packets,
bool PacedSender::SendRtcpPacket(uint32 ssrc, PacketRef packet) {
if (state_ == State_TransportBlocked) {
- packet_list_[PacedPacketSender::MakePacketKey(base::TimeTicks(), ssrc, 0)] =
+ priority_packet_list_[
+ PacedPacketSender::MakePacketKey(base::TimeTicks(), ssrc, 0)] =
make_pair(PacketType_RTCP, packet);
} else {
// We pass the RTCP packets straight through.
@@ -110,33 +129,39 @@ bool PacedSender::SendRtcpPacket(uint32 ssrc, PacketRef packet) {
weak_factory_.GetWeakPtr()))) {
state_ = State_TransportBlocked;
}
-
}
return true;
}
void PacedSender::CancelSendingPacket(const PacketKey& packet_key) {
packet_list_.erase(packet_key);
+ priority_packet_list_.erase(packet_key);
}
-PacketRef PacedSender::GetNextPacket(PacketType* packet_type,
+PacketRef PacedSender::PopNextPacket(PacketType* packet_type,
PacketKey* packet_key) {
- std::map<PacketKey, std::pair<PacketType, PacketRef> >::iterator i;
- i = packet_list_.begin();
- DCHECK(i != packet_list_.end());
+ PacketList* list = !priority_packet_list_.empty() ?
+ &priority_packet_list_ : &packet_list_;
+ DCHECK(!list->empty());
+ PacketList::iterator i = list->begin();
*packet_type = i->second.first;
*packet_key = i->first;
PacketRef ret = i->second.second;
- packet_list_.erase(i);
+ list->erase(i);
return ret;
}
+bool PacedSender::IsHighPriority(const PacketKey& packet_key) const {
+ return std::find(priority_ssrcs_.begin(), priority_ssrcs_.end(),
+ packet_key.second.first) != priority_ssrcs_.end();
+}
+
bool PacedSender::empty() const {
- return packet_list_.empty();
+ return packet_list_.empty() && priority_packet_list_.empty();
}
size_t PacedSender::size() const {
- return packet_list_.size();
+ return packet_list_.size() + priority_packet_list_.size();
}
// This function can be called from three places:
@@ -199,7 +224,7 @@ void PacedSender::SendStoredPackets() {
}
PacketType packet_type;
PacketKey packet_key;
- PacketRef packet = GetNextPacket(&packet_type, &packet_key);
+ PacketRef packet = PopNextPacket(&packet_type, &packet_key);
sent_time_[packet_key] = now;
sent_time_buffer_[packet_key] = now;
@@ -255,6 +280,5 @@ void PacedSender::LogPacketEvent(const Packet& packet, CastLoggingEvent event) {
packet);
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/pacing/paced_sender.h b/media/cast/net/pacing/paced_sender.h
index 9fc0c8b8b8..094e5299e1 100644
--- a/media/cast/transport/pacing/paced_sender.h
+++ b/media/cast/net/pacing/paced_sender.h
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
-#define MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
+#ifndef MEDIA_CAST_NET_PACING_PACED_SENDER_H_
+#define MEDIA_CAST_NET_PACING_PACED_SENDER_H_
-#include <list>
+#include <map>
#include <vector>
#include "base/basictypes.h"
@@ -16,16 +16,14 @@
#include "base/time/default_tick_clock.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/transport/udp_transport.h"
+#include "media/cast/logging/logging_defines.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
namespace cast {
class LoggingImpl;
-namespace transport {
-
// Use std::pair for free comparison operators.
// { capture_time, ssrc, packet_id }
// The PacketKey is designed to meet two criteria:
@@ -71,6 +69,12 @@ class PacedSender : public PacedPacketSender,
void RegisterAudioSsrc(uint32 audio_ssrc);
void RegisterVideoSsrc(uint32 video_ssrc);
+ // Register SSRC that has a higher priority for sending. Multiple SSRCs can
+ // be registered.
+ // Note that it is not expected to register many SSRCs with this method.
+ // Because IsHigherPriority() is determined in linear time.
+ void RegisterPrioritySsrc(uint32 ssrc);
+
// PacedPacketSender implementation.
virtual bool SendPackets(const SendPacketVector& packets) OVERRIDE;
virtual bool ResendPackets(const SendPacketVector& packets,
@@ -110,16 +114,25 @@ class PacedSender : public PacedPacketSender,
// Returns the next packet to send. RTCP packets have highest priority,
// resend packets have second highest priority and then comes everything
// else.
- PacketRef GetNextPacket(PacketType* packet_type,
+ PacketRef PopNextPacket(PacketType* packet_type,
PacketKey* packet_key);
+ // Returns true if the packet should have a higher priority.
+ bool IsHighPriority(const PacketKey& packet_key) const;
+
base::TickClock* const clock_; // Not owned by this class.
LoggingImpl* const logging_; // Not owned by this class.
PacketSender* transport_; // Not owned by this class.
scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_;
uint32 audio_ssrc_;
uint32 video_ssrc_;
- std::map<PacketKey, std::pair<PacketType, PacketRef> > packet_list_;
+
+ // Set of SSRCs that have higher priority. This is a vector instead of a
+ // set because there's only very few in it (most likely 1).
+ std::vector<uint32> priority_ssrcs_;
+ typedef std::map<PacketKey, std::pair<PacketType, PacketRef> > PacketList;
+ PacketList packet_list_;
+ PacketList priority_packet_list_;
std::map<PacketKey, base::TimeTicks> sent_time_;
std::map<PacketKey, base::TimeTicks> sent_time_buffer_;
@@ -140,8 +153,7 @@ class PacedSender : public PacedPacketSender,
DISALLOW_COPY_AND_ASSIGN(PacedSender);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
+#endif // MEDIA_CAST_NET_PACING_PACED_SENDER_H_
diff --git a/media/cast/transport/pacing/paced_sender_unittest.cc b/media/cast/net/pacing/paced_sender_unittest.cc
index 5e24fca4b5..43e7603385 100644
--- a/media/cast/transport/pacing/paced_sender_unittest.cc
+++ b/media/cast/net/pacing/paced_sender_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,23 +6,24 @@
#include "base/big_endian.h"
#include "base/test/simple_test_tick_clock.h"
+#include "media/cast/logging/logging_impl.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/pacing/paced_sender.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/pacing/paced_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
+using testing::_;
+
namespace media {
namespace cast {
-namespace transport {
-
-using testing::_;
+namespace {
static const uint8 kValue = 123;
-static const size_t kSize1 = 100;
-static const size_t kSize2 = 101;
-static const size_t kSize3 = 102;
-static const size_t kSize4 = 103;
-static const size_t kNackSize = 104;
+static const size_t kSize1 = 101;
+static const size_t kSize2 = 102;
+static const size_t kSize3 = 103;
+static const size_t kSize4 = 104;
+static const size_t kNackSize = 105;
static const int64 kStartMillisecond = INT64_C(12345678900000);
static const uint32 kVideoSsrc = 0x1234;
static const uint32 kAudioSsrc = 0x5678;
@@ -68,7 +69,7 @@ class PacedSenderTest : public ::testing::Test {
logging_.RemoveRawEventSubscriber(&subscriber_);
}
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
+ static void UpdateCastTransportStatus(CastTransportStatus status) {
NOTREACHED();
}
@@ -124,6 +125,8 @@ class PacedSenderTest : public ::testing::Test {
DISALLOW_COPY_AND_ASSIGN(PacedSenderTest);
};
+} // namespace
+
TEST_F(PacedSenderTest, PassThroughRtcp) {
mock_transport_.AddExpectedSize(kSize1, 2);
SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true);
@@ -346,6 +349,56 @@ TEST_F(PacedSenderTest, PaceWith60fps) {
EXPECT_TRUE(RunUntilEmpty(5));
}
-} // namespace transport
+TEST_F(PacedSenderTest, SendPriority) {
+ // Actual order to the network is:
+ // 1. Video packets x 10.
+ // 2. RTCP packet x 1.
+ // 3. Audio packet x 1.
+ // 4. Video retransmission packet x 10.
+ // 5. Video packet x 10.
+ mock_transport_.AddExpectedSize(kSize2, 10); // Normal video packets.
+ mock_transport_.AddExpectedSize(kSize3, 1); // RTCP packet.
+ mock_transport_.AddExpectedSize(kSize1, 1); // Audio packet.
+ mock_transport_.AddExpectedSize(kSize4, 10); // Resend video packets.
+ mock_transport_.AddExpectedSize(kSize2, 10); // Normal video packets.
+
+ paced_sender_->RegisterPrioritySsrc(kAudioSsrc);
+
+ // Retransmission packets with the earlier timestamp.
+ SendPacketVector resend_packets =
+ CreateSendPacketVector(kSize4, 10, false);
+ testing_clock_.Advance(base::TimeDelta::FromMilliseconds(10));
+
+ // Send 20 normal video packets. Only 10 will be sent in this
+ // call, the rest will be sitting in the queue waiting for pacing.
+ EXPECT_TRUE(paced_sender_->SendPackets(
+ CreateSendPacketVector(kSize2, 20, false)));
+
+ testing_clock_.Advance(base::TimeDelta::FromMilliseconds(10));
+
+ // Send normal audio packet. This is queued and will be sent
+ // earlier than video packets.
+ EXPECT_TRUE(paced_sender_->SendPackets(
+ CreateSendPacketVector(kSize1, 1, true)));
+
+ // Send RTCP packet. This is queued and will be sent first.
+ EXPECT_TRUE(paced_sender_->SendRtcpPacket(
+ kVideoSsrc,
+ new base::RefCountedData<Packet>(Packet(kSize3, kValue))));
+
+ // Resend video packets. This is queued and will be sent
+ // earlier than normal video packets.
+ EXPECT_TRUE(paced_sender_->ResendPackets(
+ resend_packets, base::TimeDelta()));
+
+ // Roll the clock. Queued packets will be sent in this order:
+ // 1. RTCP packet x 1.
+ // 2. Audio packet x 1.
+ // 3. Video retransmission packet x 10.
+ // 4. Video packet x 10.
+ task_runner_->RunTasks();
+ EXPECT_TRUE(RunUntilEmpty(4));
+}
+
} // namespace cast
} // namespace media
diff --git a/media/cast/rtcp/mock_rtcp_receiver_feedback.cc b/media/cast/net/rtcp/mock_rtcp_receiver_feedback.cc
index 9ff2d48f03..0ea6606f82 100644
--- a/media/cast/rtcp/mock_rtcp_receiver_feedback.cc
+++ b/media/cast/net/rtcp/mock_rtcp_receiver_feedback.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
+#include "media/cast/net/rtcp/mock_rtcp_receiver_feedback.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtcp/mock_rtcp_receiver_feedback.h b/media/cast/net/rtcp/mock_rtcp_receiver_feedback.h
index 56fe1ca699..38bf0eec28 100644
--- a/media/cast/rtcp/mock_rtcp_receiver_feedback.h
+++ b/media/cast/net/rtcp/mock_rtcp_receiver_feedback.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,9 +7,9 @@
#include <vector>
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/rtcp/rtcp_receiver.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_receiver.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -21,7 +21,7 @@ class MockRtcpReceiverFeedback : public RtcpReceiverFeedback {
virtual ~MockRtcpReceiverFeedback();
MOCK_METHOD1(OnReceivedSenderReport,
- void(const transport::RtcpSenderInfo& remote_sender_info));
+ void(const RtcpSenderInfo& remote_sender_info));
MOCK_METHOD1(OnReceiverReferenceTimeReport,
void(const RtcpReceiverReferenceTimeReport& remote_time_report));
diff --git a/media/cast/rtcp/mock_rtcp_sender_feedback.cc b/media/cast/net/rtcp/mock_rtcp_sender_feedback.cc
index e44e0bfdef..2c51c7448d 100644
--- a/media/cast/rtcp/mock_rtcp_sender_feedback.cc
+++ b/media/cast/net/rtcp/mock_rtcp_sender_feedback.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
+#include "media/cast/net/rtcp/mock_rtcp_sender_feedback.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtcp/mock_rtcp_sender_feedback.h b/media/cast/net/rtcp/mock_rtcp_sender_feedback.h
index 40547e6283..a6af0aaa3e 100644
--- a/media/cast/rtcp/mock_rtcp_sender_feedback.h
+++ b/media/cast/net/rtcp/mock_rtcp_sender_feedback.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,7 +7,7 @@
#include <vector>
-#include "media/cast/rtcp/rtcp_receiver.h"
+#include "media/cast/net/rtcp/rtcp_receiver.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber.cc b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.cc
index 9a9c0aeeb7..a751ff94d3 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber.cc
+++ b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
#include <utility>
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber.h b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
index 84af7cbaf3..7e80ffebc6 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber.h
+++ b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
@@ -10,7 +10,7 @@
#include "base/threading/thread_checker.h"
#include "media/cast/logging/logging_defines.h"
#include "media/cast/logging/raw_event_subscriber.h"
-#include "media/cast/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc b/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc
index e0d0f17216..8d975592f2 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc
+++ b/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc
@@ -8,7 +8,7 @@
#include "base/time/tick_clock.h"
#include "media/cast/cast_environment.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/cast/rtcp/rtcp.cc b/media/cast/net/rtcp/rtcp.cc
index 480b2ac399..c0e6c19387 100644
--- a/media/cast/rtcp/rtcp.cc
+++ b/media/cast/net/rtcp/rtcp.cc
@@ -1,25 +1,26 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/rtcp.h"
+#include "media/cast/net/rtcp/rtcp.h"
#include "base/big_endian.h"
-#include "base/rand_util.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/rtcp/rtcp_receiver.h"
-#include "media/cast/rtcp/rtcp_sender.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_receiver.h"
+#include "media/cast/net/rtcp/rtcp_sender.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
+
+using base::TimeDelta;
namespace media {
namespace cast {
-static const int kMaxRttMs = 10000; // 10 seconds.
-static const int kMaxDelay = 2000;
+static const int32 kMaxRttMs = 10000; // 10 seconds.
+static const int32 kMaxDelayMs = 2000; // 2 seconds.
class LocalRtcpRttFeedback : public RtcpRttFeedback {
public:
@@ -43,7 +44,7 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
: rtcp_(rtcp), cast_environment_(cast_environment) {}
virtual void OnReceivedSenderReport(
- const transport::RtcpSenderInfo& remote_sender_info) OVERRIDE {
+ const RtcpSenderInfo& remote_sender_info) OVERRIDE {
rtcp_->OnReceivedNtp(remote_sender_info.ntp_seconds,
remote_sender_info.ntp_fraction);
if (remote_sender_info.send_packet_count != 0) {
@@ -75,8 +76,8 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
RtcpSenderFeedback* sender_feedback,
- transport::CastTransportSender* const transport_sender,
- transport::PacedPacketSender* paced_packet_sender,
+ CastTransportSender* const transport_sender,
+ PacedPacketSender* paced_packet_sender,
RtpReceiverStatistics* rtp_receiver_statistics, RtcpMode rtcp_mode,
const base::TimeDelta& rtcp_interval, uint32 local_ssrc,
uint32 remote_ssrc, const std::string& c_name,
@@ -98,7 +99,7 @@ Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
local_clock_ahead_by_(ClockDriftSmoother::GetDefaultTimeConstant()),
lip_sync_rtp_timestamp_(0),
lip_sync_ntp_timestamp_(0),
- min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)),
+ min_rtt_(TimeDelta::FromMilliseconds(kMaxRttMs)),
number_of_rtt_in_avg_(0) {
rtcp_receiver_.reset(new RtcpReceiver(cast_environment, sender_feedback,
receiver_feedback_.get(),
@@ -114,8 +115,8 @@ bool Rtcp::IsRtcpPacket(const uint8* packet, size_t length) {
if (length < kMinLengthOfRtcp) return false;
uint8 packet_type = packet[1];
- if (packet_type >= transport::kPacketTypeLow &&
- packet_type <= transport::kPacketTypeHigh) {
+ if (packet_type >= kPacketTypeLow &&
+ packet_type <= kPacketTypeHigh) {
return true;
}
return false;
@@ -156,23 +157,23 @@ void Rtcp::SendRtcpFromRtpReceiver(
uint32 packet_type_flags = 0;
base::TimeTicks now = cast_environment_->Clock()->NowTicks();
- transport::RtcpReportBlock report_block;
+ RtcpReportBlock report_block;
RtcpReceiverReferenceTimeReport rrtr;
// Attach our NTP to all RTCP packets; with this information a "smart" sender
// can make decisions based on how old the RTCP message is.
- packet_type_flags |= transport::kRtcpRrtr;
+ packet_type_flags |= kRtcpRrtr;
ConvertTimeTicksToNtp(now, &rrtr.ntp_seconds, &rrtr.ntp_fraction);
SaveLastSentNtpTime(now, rrtr.ntp_seconds, rrtr.ntp_fraction);
if (cast_message) {
- packet_type_flags |= transport::kRtcpCast;
+ packet_type_flags |= kRtcpCast;
}
if (rtcp_events) {
- packet_type_flags |= transport::kRtcpReceiverLog;
+ packet_type_flags |= kRtcpReceiverLog;
}
if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) {
- packet_type_flags |= transport::kRtcpRr;
+ packet_type_flags |= kRtcpRr;
report_block.remote_ssrc = 0; // Not needed to set send side.
report_block.media_ssrc = remote_ssrc_; // SSRC of the RTP packet sender.
@@ -201,13 +202,13 @@ void Rtcp::SendRtcpFromRtpReceiver(
&rrtr,
cast_message,
rtcp_events,
- target_delay_ms_);
+ target_delay_);
}
void Rtcp::SendRtcpFromRtpSender(base::TimeTicks current_time,
uint32 current_time_as_rtp_timestamp) {
DCHECK(transport_sender_);
- uint32 packet_type_flags = transport::kRtcpSr;
+ uint32 packet_type_flags = kRtcpSr;
uint32 current_ntp_seconds = 0;
uint32 current_ntp_fractions = 0;
ConvertTimeTicksToNtp(current_time, &current_ntp_seconds,
@@ -215,9 +216,9 @@ void Rtcp::SendRtcpFromRtpSender(base::TimeTicks current_time,
SaveLastSentNtpTime(current_time, current_ntp_seconds,
current_ntp_fractions);
- transport::RtcpDlrrReportBlock dlrr;
+ RtcpDlrrReportBlock dlrr;
if (!time_last_report_received_.is_null()) {
- packet_type_flags |= transport::kRtcpDlrr;
+ packet_type_flags |= kRtcpDlrr;
dlrr.last_rr = last_report_truncated_ntp_;
uint32 delay_seconds = 0;
uint32 delay_fraction = 0;
@@ -302,8 +303,8 @@ void Rtcp::SetCastReceiverEventHistorySize(size_t size) {
}
void Rtcp::SetTargetDelay(base::TimeDelta target_delay) {
- DCHECK(target_delay.InMilliseconds() < kMaxDelay);
- target_delay_ms_ = static_cast<uint16>(target_delay.InMilliseconds());
+ DCHECK(target_delay < TimeDelta::FromMilliseconds(kMaxDelayMs));
+ target_delay_ = target_delay;
}
void Rtcp::OnReceivedDelaySinceLastReport(uint32 receivers_ssrc,
@@ -331,7 +332,7 @@ void Rtcp::SaveLastSentNtpTime(const base::TimeTicks& now,
last_reports_sent_map_[last_report] = now;
last_reports_sent_queue_.push(std::make_pair(last_report, now));
- base::TimeTicks timeout = now - base::TimeDelta::FromMilliseconds(kMaxRttMs);
+ base::TimeTicks timeout = now - TimeDelta::FromMilliseconds(kMaxRttMs);
// Cleanup old statistics older than |timeout|.
while (!last_reports_sent_queue_.empty()) {
@@ -358,11 +359,12 @@ void Rtcp::UpdateRtt(const base::TimeDelta& sender_delay,
// TODO(miu): Replace "average for all time" with an EWMA, or suitable
// "average over recent past" mechanism.
if (number_of_rtt_in_avg_ != 0) {
- const double ac = static_cast<double>(number_of_rtt_in_avg_);
- avg_rtt_ms_ = ((ac / (ac + 1.0)) * avg_rtt_ms_) +
- ((1.0 / (ac + 1.0)) * rtt.InMillisecondsF());
+ // Integer math equivalent of (ac/(ac+1.0))*avg_rtt_ + (1.0/(ac+1.0))*rtt).
+ // (TimeDelta only supports math with other TimeDeltas and int64s.)
+ avg_rtt_ = (avg_rtt_ * number_of_rtt_in_avg_ + rtt) /
+ (number_of_rtt_in_avg_ + 1);
} else {
- avg_rtt_ms_ = rtt.InMillisecondsF();
+ avg_rtt_ = rtt;
}
number_of_rtt_in_avg_++;
}
@@ -377,19 +379,15 @@ bool Rtcp::Rtt(base::TimeDelta* rtt, base::TimeDelta* avg_rtt,
if (number_of_rtt_in_avg_ == 0) return false;
*rtt = rtt_;
- *avg_rtt = base::TimeDelta::FromMillisecondsD(avg_rtt_ms_);
+ *avg_rtt = avg_rtt_;
*min_rtt = min_rtt_;
*max_rtt = max_rtt_;
return true;
}
void Rtcp::UpdateNextTimeToSendRtcp() {
- int random = base::RandInt(0, 999);
- base::TimeDelta time_to_next =
- (rtcp_interval_ / 2) + (rtcp_interval_ * random / 1000);
-
base::TimeTicks now = cast_environment_->Clock()->NowTicks();
- next_time_to_send_rtcp_ = now + time_to_next;
+ next_time_to_send_rtcp_ = now + rtcp_interval_;
}
void Rtcp::OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
diff --git a/media/cast/rtcp/rtcp.h b/media/cast/net/rtcp/rtcp.h
index 9d0184f903..2bf0367185 100644
--- a/media/cast/rtcp/rtcp.h
+++ b/media/cast/net/rtcp/rtcp.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,15 +13,15 @@
#include "base/memory/scoped_ptr.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/base/clock_drift_smoother.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/common/clock_drift_smoother.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
@@ -60,8 +60,8 @@ class Rtcp {
// be used by the Cast receivers and test applications.
Rtcp(scoped_refptr<CastEnvironment> cast_environment,
RtcpSenderFeedback* sender_feedback,
- transport::CastTransportSender* const transport_sender, // Send-side.
- transport::PacedPacketSender* paced_packet_sender, // Receive side.
+ CastTransportSender* const transport_sender, // Send-side.
+ PacedPacketSender* paced_packet_sender, // Receive side.
RtpReceiverStatistics* rtp_receiver_statistics,
RtcpMode rtcp_mode,
const base::TimeDelta& rtcp_interval,
@@ -150,7 +150,7 @@ class Rtcp {
uint32 last_ntp_fraction);
scoped_refptr<CastEnvironment> cast_environment_;
- transport::CastTransportSender* const transport_sender_;
+ CastTransportSender* const transport_sender_;
const base::TimeDelta rtcp_interval_;
const RtcpMode rtcp_mode_;
const uint32 local_ssrc_;
@@ -194,8 +194,8 @@ class Rtcp {
base::TimeDelta min_rtt_;
base::TimeDelta max_rtt_;
int number_of_rtt_in_avg_;
- double avg_rtt_ms_;
- uint16 target_delay_ms_;
+ base::TimeDelta avg_rtt_;
+ base::TimeDelta target_delay_;
DISALLOW_COPY_AND_ASSIGN(Rtcp);
};
diff --git a/media/cast/transport/rtcp/rtcp_builder.cc b/media/cast/net/rtcp/rtcp_builder.cc
index b8875fc96b..a5673a33f2 100644
--- a/media/cast/transport/rtcp/rtcp_builder.cc
+++ b/media/cast/net/rtcp/rtcp_builder.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtcp/rtcp_builder.h"
+#include "media/cast/net/rtcp/rtcp_builder.h"
#include <algorithm>
#include <string>
@@ -10,12 +10,11 @@
#include "base/big_endian.h"
#include "base/logging.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
namespace media {
namespace cast {
-namespace transport {
RtcpBuilder::RtcpBuilder(PacedSender* const outgoing_transport)
: transport_(outgoing_transport),
@@ -192,6 +191,5 @@ bool RtcpBuilder::BuildDlrrRb(const RtcpDlrrReportBlock& dlrr,
return true;
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/rtcp/rtcp_builder.h b/media/cast/net/rtcp/rtcp_builder.h
index f095ae9ee5..1a9b169be1 100644
--- a/media/cast/transport/rtcp/rtcp_builder.h
+++ b/media/cast/net/rtcp/rtcp_builder.h
@@ -1,20 +1,19 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_RTCP_RTCP_BUILDER_H_
-#define MEDIA_CAST_TRANSPORT_RTCP_RTCP_BUILDER_H_
+#ifndef MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_
+#define MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_
#include <list>
#include <string>
#include <vector>
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
namespace media {
namespace cast {
-namespace transport {
class RtcpBuilder {
public:
@@ -42,8 +41,7 @@ class RtcpBuilder {
DISALLOW_COPY_AND_ASSIGN(RtcpBuilder);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_RTCP_RTCP_BUILDER_H_
+#endif // MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_
diff --git a/media/cast/transport/rtcp/rtcp_builder_unittest.cc b/media/cast/net/rtcp/rtcp_builder_unittest.cc
index 0322612f27..1c471f5176 100644
--- a/media/cast/transport/rtcp/rtcp_builder_unittest.cc
+++ b/media/cast/net/rtcp/rtcp_builder_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,11 +6,11 @@
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/rtcp_builder.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "media/cast/transport/rtcp/rtcp_builder.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
diff --git a/media/cast/rtcp/rtcp_defines.cc b/media/cast/net/rtcp/rtcp_defines.cc
index 214100d4d9..63799a92df 100644
--- a/media/cast/rtcp/rtcp_defines.cc
+++ b/media/cast/net/rtcp/rtcp_defines.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
#include "media/cast/logging/logging_defines.h"
diff --git a/media/cast/rtcp/rtcp_defines.h b/media/cast/net/rtcp/rtcp_defines.h
index 31795648c6..28f69e1835 100644
--- a/media/cast/rtcp/rtcp_defines.h
+++ b/media/cast/net/rtcp/rtcp_defines.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,7 +11,7 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtcp/rtcp_receiver.cc b/media/cast/net/rtcp/rtcp_receiver.cc
index 3be8e921c4..99fd9178ae 100644
--- a/media/cast/rtcp/rtcp_receiver.cc
+++ b/media/cast/net/rtcp/rtcp_receiver.cc
@@ -1,12 +1,12 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/rtcp_receiver.h"
+#include "media/cast/net/rtcp/rtcp_receiver.h"
#include "base/logging.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
namespace {
@@ -135,7 +135,7 @@ void RtcpReceiver::HandleSenderReport(RtcpParser* rtcp_parser) {
VLOG(2) << "Cast RTCP received SR from SSRC " << remote_ssrc;
if (remote_ssrc_ == remote_ssrc) {
- transport::RtcpSenderInfo remote_sender_info;
+ RtcpSenderInfo remote_sender_info;
remote_sender_info.ntp_seconds =
rtcp_field.sender_report.ntp_most_significant;
remote_sender_info.ntp_fraction =
@@ -193,7 +193,7 @@ void RtcpReceiver::HandleReportBlock(const RtcpField* rtcp_field,
}
VLOG(2) << "Cast RTCP received RB from SSRC " << remote_ssrc;
- transport::RtcpReportBlock report_block;
+ RtcpReportBlock report_block;
report_block.remote_ssrc = remote_ssrc;
report_block.media_ssrc = rb.ssrc;
report_block.fraction_lost = rb.fraction_lost;
diff --git a/media/cast/rtcp/rtcp_receiver.h b/media/cast/net/rtcp/rtcp_receiver.h
index d3cef9e57b..aea45846a2 100644
--- a/media/cast/rtcp/rtcp_receiver.h
+++ b/media/cast/net/rtcp/rtcp_receiver.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,10 +8,10 @@
#include <queue>
#include "base/containers/hash_tables.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
namespace media {
namespace cast {
@@ -19,7 +19,7 @@ namespace cast {
class RtcpReceiverFeedback {
public:
virtual void OnReceivedSenderReport(
- const transport::RtcpSenderInfo& remote_sender_info) = 0;
+ const RtcpSenderInfo& remote_sender_info) = 0;
virtual void OnReceiverReferenceTimeReport(
const RtcpReceiverReferenceTimeReport& remote_time_report) = 0;
@@ -116,7 +116,7 @@ class RtcpReceiver {
RtcpRttFeedback* const rtt_feedback_;
scoped_refptr<CastEnvironment> cast_environment_;
- transport::FrameIdWrapHelper ack_frame_id_wrap_helper_;
+ FrameIdWrapHelper ack_frame_id_wrap_helper_;
// Maintains a history of receiver events.
size_t receiver_event_history_size_;
diff --git a/media/cast/rtcp/rtcp_receiver_unittest.cc b/media/cast/net/rtcp/rtcp_receiver_unittest.cc
index 51026d1554..f4010cb36b 100644
--- a/media/cast/rtcp/rtcp_receiver_unittest.cc
+++ b/media/cast/net/rtcp/rtcp_receiver_unittest.cc
@@ -1,17 +1,17 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
-#include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
-#include "media/cast/rtcp/rtcp_receiver.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/mock_rtcp_receiver_feedback.h"
+#include "media/cast/net/rtcp/mock_rtcp_sender_feedback.h"
+#include "media/cast/net/rtcp/rtcp_receiver.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_defines.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -22,7 +22,8 @@ using testing::_;
static const uint32 kSenderSsrc = 0x10203;
static const uint32 kSourceSsrc = 0x40506;
static const uint32 kUnknownSsrc = 0xDEAD;
-static const uint16 kTargetDelayMs = 100;
+static const base::TimeDelta kTargetDelay =
+ base::TimeDelta::FromMilliseconds(100);
static const std::string kCName("test@10.1.1.1");
namespace {
@@ -72,7 +73,7 @@ class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback {
called_on_received_receiver_log_(false) {}
virtual void OnReceivedSenderReport(
- const transport::RtcpSenderInfo& remote_sender_info) OVERRIDE{};
+ const RtcpSenderInfo& remote_sender_info) OVERRIDE{};
virtual void OnReceiverReferenceTimeReport(
const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE{};
@@ -188,8 +189,8 @@ class RtcpReceiverTest : public ::testing::Test {
MockRtcpRttFeedback mock_rtt_feedback_;
MockRtcpSenderFeedback mock_sender_feedback_;
scoped_ptr<RtcpReceiver> rtcp_receiver_;
- transport::RtcpSenderInfo expected_sender_info_;
- transport::RtcpReportBlock expected_report_block_;
+ RtcpSenderInfo expected_sender_info_;
+ RtcpReportBlock expected_report_block_;
RtcpReceiverReferenceTimeReport expected_receiver_reference_report_;
DISALLOW_COPY_AND_ASSIGN(RtcpReceiverTest);
@@ -374,7 +375,7 @@ TEST_F(RtcpReceiverTest, InjectReceiverReportPacketWithCastFeedback) {
TestRtcpPacketBuilder p1;
p1.AddRr(kSenderSsrc, 1);
p1.AddRb(kUnknownSsrc);
- p1.AddCast(kSenderSsrc, kUnknownSsrc, kTargetDelayMs);
+ p1.AddCast(kSenderSsrc, kUnknownSsrc, kTargetDelay);
// Expected to be ignored since the source ssrc does not match our
// local ssrc.
@@ -391,7 +392,7 @@ TEST_F(RtcpReceiverTest, InjectReceiverReportPacketWithCastFeedback) {
TestRtcpPacketBuilder p2;
p2.AddRr(kSenderSsrc, 1);
p2.AddRb(kSourceSsrc);
- p2.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelayMs);
+ p2.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay);
// Expected to be pass through since the sender ssrc match our local ssrc.
InjectRtcpPacket(p2.Data(), p2.Length());
@@ -415,7 +416,7 @@ TEST_F(RtcpReceiverTest, InjectReceiverReportPacketWithCastVerification) {
TestRtcpPacketBuilder p;
p.AddRr(kSenderSsrc, 1);
p.AddRb(kSourceSsrc);
- p.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelayMs);
+ p.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay);
// Expected to be pass through since the sender ssrc match our local ssrc.
RtcpParser rtcp_parser(p.Data(), p.Length());
diff --git a/media/cast/rtcp/rtcp_sender.cc b/media/cast/net/rtcp/rtcp_sender.cc
index bf7d30c84c..a44f87ebb0 100644
--- a/media/cast/rtcp/rtcp_sender.cc
+++ b/media/cast/net/rtcp/rtcp_sender.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/rtcp_sender.h"
+#include "media/cast/net/rtcp/rtcp_sender.h"
#include <stdint.h>
@@ -12,10 +12,10 @@
#include "base/big_endian.h"
#include "base/logging.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
namespace media {
namespace cast {
@@ -148,7 +148,7 @@ class NackStringBuilder {
// TODO(mikhal): This is only used by the receiver. Consider renaming.
RtcpSender::RtcpSender(scoped_refptr<CastEnvironment> cast_environment,
- transport::PacedPacketSender* outgoing_transport,
+ PacedPacketSender* outgoing_transport,
uint32 sending_ssrc,
const std::string& c_name)
: ssrc_(sending_ssrc),
@@ -162,44 +162,44 @@ RtcpSender::~RtcpSender() {}
void RtcpSender::SendRtcpFromRtpReceiver(
uint32 packet_type_flags,
- const transport::RtcpReportBlock* report_block,
+ const RtcpReportBlock* report_block,
const RtcpReceiverReferenceTimeReport* rrtr,
const RtcpCastMessage* cast_message,
const ReceiverRtcpEventSubscriber::RtcpEventMultiMap* rtcp_events,
- uint16 target_delay_ms) {
- if (packet_type_flags & transport::kRtcpSr ||
- packet_type_flags & transport::kRtcpDlrr ||
- packet_type_flags & transport::kRtcpSenderLog) {
+ base::TimeDelta target_delay) {
+ if (packet_type_flags & kRtcpSr ||
+ packet_type_flags & kRtcpDlrr ||
+ packet_type_flags & kRtcpSenderLog) {
NOTREACHED() << "Invalid argument";
}
- if (packet_type_flags & transport::kRtcpPli ||
- packet_type_flags & transport::kRtcpRpsi ||
- packet_type_flags & transport::kRtcpRemb ||
- packet_type_flags & transport::kRtcpNack) {
+ if (packet_type_flags & kRtcpPli ||
+ packet_type_flags & kRtcpRpsi ||
+ packet_type_flags & kRtcpRemb ||
+ packet_type_flags & kRtcpNack) {
// Implement these for webrtc interop.
NOTIMPLEMENTED();
}
- transport::PacketRef packet(new base::RefCountedData<Packet>);
+ PacketRef packet(new base::RefCountedData<Packet>);
packet->data.reserve(kMaxIpPacketSize);
- if (packet_type_flags & transport::kRtcpRr) {
+ if (packet_type_flags & kRtcpRr) {
BuildRR(report_block, &packet->data);
if (!c_name_.empty()) {
BuildSdec(&packet->data);
}
}
- if (packet_type_flags & transport::kRtcpBye) {
+ if (packet_type_flags & kRtcpBye) {
BuildBye(&packet->data);
}
- if (packet_type_flags & transport::kRtcpRrtr) {
+ if (packet_type_flags & kRtcpRrtr) {
DCHECK(rrtr) << "Invalid argument";
BuildRrtr(rrtr, &packet->data);
}
- if (packet_type_flags & transport::kRtcpCast) {
+ if (packet_type_flags & kRtcpCast) {
DCHECK(cast_message) << "Invalid argument";
- BuildCast(cast_message, target_delay_ms, &packet->data);
+ BuildCast(cast_message, target_delay, &packet->data);
}
- if (packet_type_flags & transport::kRtcpReceiverLog) {
+ if (packet_type_flags & kRtcpReceiverLog) {
DCHECK(rtcp_events) << "Invalid argument";
BuildReceiverLog(*rtcp_events, &packet->data);
}
@@ -210,7 +210,7 @@ void RtcpSender::SendRtcpFromRtpReceiver(
transport_->SendRtcpPacket(ssrc_, packet);
}
-void RtcpSender::BuildRR(const transport::RtcpReportBlock* report_block,
+void RtcpSender::BuildRR(const RtcpReportBlock* report_block,
Packet* packet) const {
size_t start_size = packet->size();
DCHECK_LT(start_size + 32, kMaxIpPacketSize) << "Not enough buffer space";
@@ -223,7 +223,7 @@ void RtcpSender::BuildRR(const transport::RtcpReportBlock* report_block,
base::BigEndianWriter big_endian_writer(
reinterpret_cast<char*>(&((*packet)[start_size])), 8);
big_endian_writer.WriteU8(0x80 + (report_block ? 1 : 0));
- big_endian_writer.WriteU8(transport::kPacketTypeReceiverReport);
+ big_endian_writer.WriteU8(kPacketTypeReceiverReport);
big_endian_writer.WriteU16(number_of_rows);
big_endian_writer.WriteU32(ssrc_);
@@ -232,7 +232,7 @@ void RtcpSender::BuildRR(const transport::RtcpReportBlock* report_block,
}
}
-void RtcpSender::AddReportBlocks(const transport::RtcpReportBlock& report_block,
+void RtcpSender::AddReportBlocks(const RtcpReportBlock& report_block,
Packet* packet) const {
size_t start_size = packet->size();
DCHECK_LT(start_size + 24, kMaxIpPacketSize) << "Not enough buffer space";
@@ -276,7 +276,7 @@ void RtcpSender::BuildSdec(Packet* packet) const {
reinterpret_cast<char*>(&((*packet)[start_size])), 10);
// We always need to add one SDES CNAME.
big_endian_writer.WriteU8(0x80 + 1);
- big_endian_writer.WriteU8(transport::kPacketTypeSdes);
+ big_endian_writer.WriteU8(kPacketTypeSdes);
// Handle SDES length later on.
uint32 sdes_length_position = static_cast<uint32>(start_size) + 3;
@@ -319,7 +319,7 @@ void RtcpSender::BuildPli(uint32 remote_ssrc, Packet* packet) const {
reinterpret_cast<char*>(&((*packet)[start_size])), 12);
uint8 FMT = 1; // Picture loss indicator.
big_endian_writer.WriteU8(0x80 + FMT);
- big_endian_writer.WriteU8(transport::kPacketTypePayloadSpecific);
+ big_endian_writer.WriteU8(kPacketTypePayloadSpecific);
big_endian_writer.WriteU16(2); // Used fixed length of 2.
big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
big_endian_writer.WriteU32(remote_ssrc); // Add the remote SSRC.
@@ -346,7 +346,7 @@ void RtcpSender::BuildRpsi(const RtcpRpsiMessage* rpsi, Packet* packet) const {
reinterpret_cast<char*>(&((*packet)[start_size])), 24);
uint8 FMT = 3; // Reference Picture Selection Indication.
big_endian_writer.WriteU8(0x80 + FMT);
- big_endian_writer.WriteU8(transport::kPacketTypePayloadSpecific);
+ big_endian_writer.WriteU8(kPacketTypePayloadSpecific);
// Calculate length.
uint32 bits_required = 7;
@@ -404,7 +404,7 @@ void RtcpSender::BuildRemb(const RtcpRembMessage* remb, Packet* packet) const {
// Add application layer feedback.
uint8 FMT = 15;
big_endian_writer.WriteU8(0x80 + FMT);
- big_endian_writer.WriteU8(transport::kPacketTypePayloadSpecific);
+ big_endian_writer.WriteU8(kPacketTypePayloadSpecific);
big_endian_writer.WriteU8(0);
big_endian_writer.WriteU8(static_cast<uint8>(remb->remb_ssrcs.size() + 4));
big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
@@ -442,7 +442,7 @@ void RtcpSender::BuildNack(const RtcpNackMessage* nack, Packet* packet) const {
uint8 FMT = 1;
big_endian_writer.WriteU8(0x80 + FMT);
- big_endian_writer.WriteU8(transport::kPacketTypeGenericRtpFeedback);
+ big_endian_writer.WriteU8(kPacketTypeGenericRtpFeedback);
big_endian_writer.WriteU8(0);
size_t nack_size_pos = start_size + 3;
big_endian_writer.WriteU8(3);
@@ -498,7 +498,7 @@ void RtcpSender::BuildBye(Packet* packet) const {
base::BigEndianWriter big_endian_writer(
reinterpret_cast<char*>(&((*packet)[start_size])), 8);
big_endian_writer.WriteU8(0x80 + 1);
- big_endian_writer.WriteU8(transport::kPacketTypeBye);
+ big_endian_writer.WriteU8(kPacketTypeBye);
big_endian_writer.WriteU16(1); // Length.
big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
}
@@ -516,7 +516,7 @@ void RtcpSender::BuildRrtr(const RtcpReceiverReferenceTimeReport* rrtr,
reinterpret_cast<char*>(&((*packet)[start_size])), 20);
big_endian_writer.WriteU8(0x80);
- big_endian_writer.WriteU8(transport::kPacketTypeXr);
+ big_endian_writer.WriteU8(kPacketTypeXr);
big_endian_writer.WriteU16(4); // Length.
big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
big_endian_writer.WriteU8(4); // Add block type.
@@ -529,7 +529,7 @@ void RtcpSender::BuildRrtr(const RtcpReceiverReferenceTimeReport* rrtr,
}
void RtcpSender::BuildCast(const RtcpCastMessage* cast,
- uint16 target_delay_ms,
+ base::TimeDelta target_delay,
Packet* packet) const {
size_t start_size = packet->size();
DCHECK_LT(start_size + 20, kMaxIpPacketSize) << "Not enough buffer space";
@@ -542,7 +542,7 @@ void RtcpSender::BuildCast(const RtcpCastMessage* cast,
reinterpret_cast<char*>(&((*packet)[start_size])), 20);
uint8 FMT = 15; // Application layer feedback.
big_endian_writer.WriteU8(0x80 + FMT);
- big_endian_writer.WriteU8(transport::kPacketTypePayloadSpecific);
+ big_endian_writer.WriteU8(kPacketTypePayloadSpecific);
big_endian_writer.WriteU8(0);
size_t cast_size_pos = start_size + 3; // Save length position.
big_endian_writer.WriteU8(4);
@@ -552,7 +552,9 @@ void RtcpSender::BuildCast(const RtcpCastMessage* cast,
big_endian_writer.WriteU8(static_cast<uint8>(cast->ack_frame_id_));
size_t cast_loss_field_pos = start_size + 17; // Save loss field position.
big_endian_writer.WriteU8(0); // Overwritten with number_of_loss_fields.
- big_endian_writer.WriteU16(target_delay_ms);
+ DCHECK_LE(target_delay.InMilliseconds(),
+ std::numeric_limits<uint16_t>::max());
+ big_endian_writer.WriteU16(target_delay.InMilliseconds());
size_t number_of_loss_fields = 0;
size_t max_number_of_loss_fields = std::min<size_t>(
@@ -641,7 +643,7 @@ void RtcpSender::BuildReceiverLog(
base::BigEndianWriter big_endian_writer(
reinterpret_cast<char*>(&((*packet)[packet_start_size])), rtcp_log_size);
big_endian_writer.WriteU8(0x80 + kReceiverLogSubtype);
- big_endian_writer.WriteU8(transport::kPacketTypeApplicationDefined);
+ big_endian_writer.WriteU8(kPacketTypeApplicationDefined);
big_endian_writer.WriteU16(static_cast<uint16>(
2 + 2 * number_of_frames + total_number_of_messages_to_send));
big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
diff --git a/media/cast/rtcp/rtcp_sender.h b/media/cast/net/rtcp/rtcp_sender.h
index f09a4fb0e5..fe5af0dcd3 100644
--- a/media/cast/rtcp/rtcp_sender.h
+++ b/media/cast/net/rtcp/rtcp_sender.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,11 +11,11 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/rtcp/rtcp_builder.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtcp/rtcp_builder.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
@@ -44,7 +44,7 @@ COMPILE_ASSERT(kSecondRedundancyOffset >
class RtcpSender {
public:
RtcpSender(scoped_refptr<CastEnvironment> cast_environment,
- transport::PacedPacketSender* outgoing_transport,
+ PacedPacketSender* outgoing_transport,
uint32 sending_ssrc,
const std::string& c_name);
@@ -52,17 +52,17 @@ class RtcpSender {
void SendRtcpFromRtpReceiver(
uint32 packet_type_flags,
- const transport::RtcpReportBlock* report_block,
+ const RtcpReportBlock* report_block,
const RtcpReceiverReferenceTimeReport* rrtr,
const RtcpCastMessage* cast_message,
const ReceiverRtcpEventSubscriber::RtcpEventMultiMap* rtcp_events,
- uint16 target_delay_ms);
+ base::TimeDelta target_delay);
private:
- void BuildRR(const transport::RtcpReportBlock* report_block,
+ void BuildRR(const RtcpReportBlock* report_block,
Packet* packet) const;
- void AddReportBlocks(const transport::RtcpReportBlock& report_block,
+ void AddReportBlocks(const RtcpReportBlock& report_block,
Packet* packet) const;
void BuildSdec(Packet* packet) const;
@@ -81,7 +81,7 @@ class RtcpSender {
Packet* packet) const;
void BuildCast(const RtcpCastMessage* cast_message,
- uint16 target_delay_ms,
+ base::TimeDelta target_delay,
Packet* packet) const;
void BuildReceiverLog(
@@ -114,7 +114,7 @@ class RtcpSender {
const std::string c_name_;
// Not owned by this class.
- transport::PacedPacketSender* const transport_;
+ PacedPacketSender* const transport_;
scoped_refptr<CastEnvironment> cast_environment_;
std::deque<RtcpReceiverLogMessage> rtcp_events_history_;
diff --git a/media/cast/rtcp/rtcp_sender_unittest.cc b/media/cast/net/rtcp/rtcp_sender_unittest.cc
index 0b0c7d3ab8..c0c321e2c8 100644
--- a/media/cast/rtcp/rtcp_sender_unittest.cc
+++ b/media/cast/net/rtcp/rtcp_sender_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,13 +6,13 @@
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
-#include "media/cast/rtcp/rtcp_sender.h"
-#include "media/cast/rtcp/rtcp_utility.h"
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/rtcp_sender.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -21,11 +21,12 @@ namespace cast {
namespace {
static const uint32 kSendingSsrc = 0x12345678;
static const uint32 kMediaSsrc = 0x87654321;
-static const int16 kDefaultDelay = 100;
+static const base::TimeDelta kDefaultDelay =
+ base::TimeDelta::FromMilliseconds(100);
static const std::string kCName("test@10.1.1.1");
-transport::RtcpReportBlock GetReportBlock() {
- transport::RtcpReportBlock report_block;
+RtcpReportBlock GetReportBlock() {
+ RtcpReportBlock report_block;
// Initialize remote_ssrc to a "clearly illegal" value.
report_block.remote_ssrc = 0xDEAD;
report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
@@ -40,12 +41,12 @@ transport::RtcpReportBlock GetReportBlock() {
} // namespace
-class TestRtcpTransport : public transport::PacedPacketSender {
+class TestRtcpTransport : public PacedPacketSender {
public:
TestRtcpTransport() : packet_count_(0) {}
virtual bool SendRtcpPacket(uint32 ssrc,
- transport::PacketRef packet) OVERRIDE {
+ PacketRef packet) OVERRIDE {
EXPECT_EQ(expected_packet_.size(), packet->data.size());
EXPECT_EQ(0, memcmp(expected_packet_.data(),
packet->data.data(),
@@ -55,17 +56,17 @@ class TestRtcpTransport : public transport::PacedPacketSender {
}
virtual bool SendPackets(
- const transport::SendPacketVector& packets) OVERRIDE {
+ const SendPacketVector& packets) OVERRIDE {
return false;
}
virtual bool ResendPackets(
- const transport::SendPacketVector& packets,
+ const SendPacketVector& packets,
base::TimeDelta dedupe_window) OVERRIDE {
return false;
}
virtual void CancelSendingPacket(
- const transport::PacketKey& packet_key) OVERRIDE {
+ const PacketKey& packet_key) OVERRIDE {
}
void SetExpectedRtcpPacket(scoped_ptr<Packet> packet) {
@@ -113,7 +114,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReport) {
test_transport_.SetExpectedRtcpPacket(p1.GetPacket());
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay);
+ kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay);
EXPECT_EQ(1, test_transport_.packet_count());
@@ -124,10 +125,10 @@ TEST_F(RtcpSenderTest, RtcpReceiverReport) {
p2.AddSdesCname(kSendingSsrc, kCName);
test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass());
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay);
+ kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay);
EXPECT_EQ(2, test_transport_.packet_count());
}
@@ -142,14 +143,14 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) {
p.AddXrRrtrBlock();
test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
RtcpReceiverReferenceTimeReport rrtr;
rrtr.ntp_seconds = kNtpHigh;
rrtr.ntp_fraction = kNtpLow;
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpRrtr,
+ kRtcpRr | kRtcpRrtr,
&report_block,
&rrtr,
NULL,
@@ -168,7 +169,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) {
p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
RtcpCastMessage cast_message(kMediaSsrc);
cast_message.ack_frame_id_ = kAckFrameId;
@@ -182,7 +183,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) {
missing_packets;
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpCast,
+ kRtcpRr | kRtcpCast,
&report_block,
NULL,
&cast_message,
@@ -202,7 +203,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
RtcpReceiverReferenceTimeReport rrtr;
rrtr.ntp_seconds = kNtpHigh;
@@ -220,7 +221,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
missing_packets;
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast,
+ kRtcpRr | kRtcpRrtr | kRtcpCast,
&report_block,
&rrtr,
&cast_message,
@@ -243,7 +244,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
RtcpReceiverReferenceTimeReport rrtr;
rrtr.ntp_seconds = kNtpHigh;
@@ -264,8 +265,8 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast |
- transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpRrtr | kRtcpCast |
+ kRtcpReceiverLog,
&report_block,
&rrtr,
&cast_message,
@@ -301,8 +302,8 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
EXPECT_EQ(2u, rtcp_events.size());
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast |
- transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpRrtr | kRtcpCast |
+ kRtcpReceiverLog,
&report_block,
&rrtr,
&cast_message,
@@ -321,7 +322,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
p.AddRb(kMediaSsrc);
p.AddSdesCname(kSendingSsrc, kCName);
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
base::SimpleTestTickClock testing_clock;
testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
@@ -370,7 +371,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpReceiverLog,
&report_block,
NULL,
NULL,
@@ -389,7 +390,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
p.AddRb(kMediaSsrc);
p.AddSdesCname(kSendingSsrc, kCName);
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
base::SimpleTestTickClock testing_clock;
testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
@@ -427,7 +428,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpReceiverLog,
&report_block,
NULL,
NULL,
@@ -445,7 +446,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) {
p.AddRb(kMediaSsrc);
p.AddSdesCname(kSendingSsrc, kCName);
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
base::SimpleTestTickClock testing_clock;
testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
@@ -478,7 +479,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) {
event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpReceiverLog,
&report_block,
NULL,
NULL,
@@ -492,7 +493,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) {
uint32 time_base_ms = 12345678;
int kTimeBetweenEventsMs = 10;
- transport::RtcpReportBlock report_block = GetReportBlock();
+ RtcpReportBlock report_block = GetReportBlock();
base::SimpleTestTickClock testing_clock;
testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms));
@@ -537,7 +538,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) {
event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
rtcp_sender_->SendRtcpFromRtpReceiver(
- transport::kRtcpRr | transport::kRtcpReceiverLog,
+ kRtcpRr | kRtcpReceiverLog,
&report_block,
NULL,
NULL,
diff --git a/media/cast/rtcp/rtcp_unittest.cc b/media/cast/net/rtcp/rtcp_unittest.cc
index 095e6d24df..25d05b2239 100644
--- a/media/cast/rtcp/rtcp_unittest.cc
+++ b/media/cast/net/rtcp/rtcp_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,14 +7,14 @@
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
-#include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#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/net/rtcp/mock_rtcp_receiver_feedback.h"
+#include "media/cast/net/rtcp/mock_rtcp_sender_feedback.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
-#include "media/cast/transport/pacing/paced_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -29,7 +29,7 @@ static const uint32 kRtcpIntervalMs = 500;
static const int64 kAddedDelay = 123;
static const int64 kAddedShortDelay = 100;
-class RtcpTestPacketSender : public transport::PacketSender {
+class RtcpTestPacketSender : public PacketSender {
public:
explicit RtcpTestPacketSender(base::SimpleTestTickClock* testing_clock)
: drop_packets_(false),
@@ -45,7 +45,7 @@ class RtcpTestPacketSender : public transport::PacketSender {
void set_drop_packets(bool drop_packets) { drop_packets_ = drop_packets; }
// A singular packet implies a RTCP packet.
- virtual bool SendPacket(transport::PacketRef packet,
+ virtual bool SendPacket(PacketRef packet,
const base::Closure& cb) OVERRIDE {
if (short_delay_) {
testing_clock_->Advance(
@@ -69,7 +69,7 @@ class RtcpTestPacketSender : public transport::PacketSender {
DISALLOW_COPY_AND_ASSIGN(RtcpTestPacketSender);
};
-class LocalRtcpTransport : public transport::PacedPacketSender {
+class LocalRtcpTransport : public PacedPacketSender {
public:
LocalRtcpTransport(scoped_refptr<CastEnvironment> cast_environment,
base::SimpleTestTickClock* testing_clock)
@@ -84,7 +84,7 @@ class LocalRtcpTransport : public transport::PacedPacketSender {
void set_drop_packets(bool drop_packets) { drop_packets_ = drop_packets; }
virtual bool SendRtcpPacket(uint32 ssrc,
- transport::PacketRef packet) OVERRIDE {
+ PacketRef packet) OVERRIDE {
if (short_delay_) {
testing_clock_->Advance(
base::TimeDelta::FromMilliseconds(kAddedShortDelay));
@@ -99,18 +99,18 @@ class LocalRtcpTransport : public transport::PacedPacketSender {
}
virtual bool SendPackets(
- const transport::SendPacketVector& packets) OVERRIDE {
+ const SendPacketVector& packets) OVERRIDE {
return false;
}
virtual bool ResendPackets(
- const transport::SendPacketVector& packets,
+ const SendPacketVector& packets,
base::TimeDelta dedupe_window) OVERRIDE {
return false;
}
virtual void CancelSendingPacket(
- const transport::PacketKey& packet_key) OVERRIDE {
+ const PacketKey& packet_key) OVERRIDE {
}
private:
@@ -127,8 +127,8 @@ class RtcpPeer : public Rtcp {
public:
RtcpPeer(scoped_refptr<CastEnvironment> cast_environment,
RtcpSenderFeedback* sender_feedback,
- transport::CastTransportSender* const transport_sender,
- transport::PacedPacketSender* paced_packet_sender,
+ CastTransportSender* const transport_sender,
+ PacedPacketSender* paced_packet_sender,
RtpReceiverStatistics* rtp_receiver_statistics,
RtcpMode rtcp_mode,
const base::TimeDelta& rtcp_interval,
@@ -165,27 +165,28 @@ class RtcpTest : public ::testing::Test {
receiver_to_sender_(cast_environment_, testing_clock_) {
testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
net::IPEndPoint dummy_endpoint;
- transport_sender_.reset(new transport::CastTransportSenderImpl(
+ transport_sender_.reset(new CastTransportSenderImpl(
NULL,
testing_clock_,
dummy_endpoint,
base::Bind(&UpdateCastTransportStatus),
- transport::BulkRawEventsCallback(),
+ BulkRawEventsCallback(),
base::TimeDelta(),
task_runner_,
&sender_to_receiver_));
- transport::CastTransportAudioConfig config;
- config.rtp.config.ssrc = kSenderSsrc;
- config.rtp.max_outstanding_frames = 1;
+ CastTransportRtpConfig config;
+ config.ssrc = kSenderSsrc;
+ config.rtp_payload_type = 127;
+ config.stored_frames = 1;
transport_sender_->InitializeAudio(config);
EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0);
}
virtual ~RtcpTest() {}
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- bool result = (status == transport::TRANSPORT_AUDIO_INITIALIZED ||
- status == transport::TRANSPORT_VIDEO_INITIALIZED);
+ static void UpdateCastTransportStatus(CastTransportStatus status) {
+ bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
+ status == TRANSPORT_VIDEO_INITIALIZED);
EXPECT_TRUE(result);
}
@@ -201,7 +202,7 @@ class RtcpTest : public ::testing::Test {
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
scoped_refptr<CastEnvironment> cast_environment_;
RtcpTestPacketSender sender_to_receiver_;
- scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
+ scoped_ptr<CastTransportSenderImpl> transport_sender_;
LocalRtcpTransport receiver_to_sender_;
MockRtcpSenderFeedback mock_sender_feedback_;
diff --git a/media/cast/rtcp/rtcp_utility.cc b/media/cast/net/rtcp/rtcp_utility.cc
index e29f82e9cf..91fccc1968 100644
--- a/media/cast/rtcp/rtcp_utility.cc
+++ b/media/cast/net/rtcp/rtcp_utility.cc
@@ -1,12 +1,12 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/rtcp_utility.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
#include "base/big_endian.h"
#include "base/logging.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
namespace media {
namespace cast {
@@ -106,44 +106,44 @@ void RtcpParser::IterateTopLevel() {
return; // Bad block!
switch (header.PT) {
- case transport::kPacketTypeSenderReport:
+ case kPacketTypeSenderReport:
// number of Report blocks
number_of_blocks_ = header.IC;
ParseSR();
return;
- case transport::kPacketTypeReceiverReport:
+ case kPacketTypeReceiverReport:
// number of Report blocks
number_of_blocks_ = header.IC;
ParseRR();
return;
- case transport::kPacketTypeSdes:
+ case kPacketTypeSdes:
// number of Sdes blocks
number_of_blocks_ = header.IC;
if (!ParseSdes()) {
break; // Nothing supported found, continue to next block!
}
return;
- case transport::kPacketTypeBye:
+ case kPacketTypeBye:
number_of_blocks_ = header.IC;
if (!ParseBye()) {
// Nothing supported found, continue to next block!
break;
}
return;
- case transport::kPacketTypeApplicationDefined:
+ case kPacketTypeApplicationDefined:
if (!ParseApplicationDefined(header.IC)) {
// Nothing supported found, continue to next block!
break;
}
return;
- case transport::kPacketTypeGenericRtpFeedback: // Fall through!
- case transport::kPacketTypePayloadSpecific:
+ case kPacketTypeGenericRtpFeedback: // Fall through!
+ case kPacketTypePayloadSpecific:
if (!ParseFeedBackCommon(header)) {
// Nothing supported found, continue to next block!
break;
}
return;
- case transport::kPacketTypeXr:
+ case kPacketTypeXr:
if (!ParseExtendedReport()) {
break; // Nothing supported found, continue to next block!
}
@@ -609,8 +609,8 @@ bool RtcpParser::ParseCastReceiverLogEventItem() {
}
bool RtcpParser::ParseFeedBackCommon(const RtcpCommonHeader& header) {
- DCHECK((header.PT == transport::kPacketTypeGenericRtpFeedback) ||
- (header.PT == transport::kPacketTypePayloadSpecific))
+ DCHECK((header.PT == kPacketTypeGenericRtpFeedback) ||
+ (header.PT == kPacketTypePayloadSpecific))
<< "Invalid state";
ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
@@ -630,7 +630,7 @@ bool RtcpParser::ParseFeedBackCommon(const RtcpCommonHeader& header) {
rtcp_data_ += 12;
- if (header.PT == transport::kPacketTypeGenericRtpFeedback) {
+ if (header.PT == kPacketTypeGenericRtpFeedback) {
// Transport layer feedback
switch (header.IC) {
case 1:
@@ -663,7 +663,7 @@ bool RtcpParser::ParseFeedBackCommon(const RtcpCommonHeader& header) {
EndCurrentBlock();
return false;
- } else if (header.PT == transport::kPacketTypePayloadSpecific) {
+ } else if (header.PT == kPacketTypePayloadSpecific) {
// Payload specific feedback
switch (header.IC) {
case 1:
diff --git a/media/cast/rtcp/rtcp_utility.h b/media/cast/net/rtcp/rtcp_utility.h
index 34f3f25a88..bf6717071a 100644
--- a/media/cast/rtcp/rtcp_utility.h
+++ b/media/cast/net/rtcp/rtcp_utility.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,7 +8,7 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtcp/test_rtcp_packet_builder.cc b/media/cast/net/rtcp/test_rtcp_packet_builder.cc
index 8d0809d928..b6d7cf208e 100644
--- a/media/cast/rtcp/test_rtcp_packet_builder.cc
+++ b/media/cast/net/rtcp/test_rtcp_packet_builder.cc
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "base/logging.h"
-#include "media/cast/rtcp/rtcp_utility.h"
+#include "media/cast/net/rtcp/rtcp_utility.h"
namespace media {
namespace cast {
@@ -65,21 +65,7 @@ void TestRtcpPacketBuilder::AddSdesCname(uint32 sender_ssrc,
for (size_t i = 0; i < c_name.size(); ++i) {
big_endian_writer_.WriteU8(c_name.c_str()[i]);
}
- int padding;
- switch (c_name.size() % 4) {
- case 0:
- padding = 2;
- break;
- case 1:
- padding = 1;
- break;
- case 2:
- padding = 4;
- break;
- case 3:
- padding = 3;
- break;
- }
+ const int padding = 4 - ((c_name.size() + 2) % 4);
for (int j = 0; j < padding; ++j) {
big_endian_writer_.WriteU8(0);
}
@@ -191,7 +177,7 @@ void TestRtcpPacketBuilder::AddRemb(uint32 sender_ssrc, uint32 media_ssrc) {
void TestRtcpPacketBuilder::AddCast(uint32 sender_ssrc,
uint32 media_ssrc,
- uint16 target_delay_ms) {
+ base::TimeDelta target_delay) {
AddRtcpHeader(206, 15);
big_endian_writer_.WriteU32(sender_ssrc);
big_endian_writer_.WriteU32(media_ssrc);
@@ -201,7 +187,7 @@ void TestRtcpPacketBuilder::AddCast(uint32 sender_ssrc,
big_endian_writer_.WriteU8('T');
big_endian_writer_.WriteU8(kAckFrameId);
big_endian_writer_.WriteU8(3); // Loss fields.
- big_endian_writer_.WriteU16(target_delay_ms);
+ big_endian_writer_.WriteU16(target_delay.InMilliseconds());
big_endian_writer_.WriteU8(kLostFrameId);
big_endian_writer_.WriteU16(kRtcpCastAllPacketsLost);
big_endian_writer_.WriteU8(0); // Lost packet id mask.
diff --git a/media/cast/rtcp/test_rtcp_packet_builder.h b/media/cast/net/rtcp/test_rtcp_packet_builder.h
index d4266670ab..153ced1fd6 100644
--- a/media/cast/rtcp/test_rtcp_packet_builder.h
+++ b/media/cast/net/rtcp/test_rtcp_packet_builder.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -9,7 +9,8 @@
#include "base/big_endian.h"
#include "media/cast/cast_config.h"
-#include "media/cast/rtcp/rtcp_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
@@ -79,7 +80,9 @@ class TestRtcpPacketBuilder {
void AddPli(uint32 sender_ssrc, uint32 media_ssrc);
void AddRpsi(uint32 sender_ssrc, uint32 media_ssrc);
void AddRemb(uint32 sender_ssrc, uint32 media_ssrc);
- void AddCast(uint32 sender_ssrc, uint32 media_ssrc, uint16 target_delay_ms);
+ void AddCast(uint32 sender_ssrc,
+ uint32 media_ssrc,
+ base::TimeDelta target_delay);
void AddReceiverLog(uint32 sender_ssrc);
void AddReceiverFrameLog(uint32 rtp_timestamp,
int num_events,
diff --git a/media/cast/framer/cast_message_builder.cc b/media/cast/net/rtp/cast_message_builder.cc
index f3473f9690..bb36613d2c 100644
--- a/media/cast/framer/cast_message_builder.cc
+++ b/media/cast/net/rtp/cast_message_builder.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/framer/cast_message_builder.h"
+#include "media/cast/net/rtp/cast_message_builder.h"
#include "media/cast/cast_defines.h"
diff --git a/media/cast/framer/cast_message_builder.h b/media/cast/net/rtp/cast_message_builder.h
index 9db88d4a99..0136fed4a0 100644
--- a/media/cast/framer/cast_message_builder.h
+++ b/media/cast/net/rtp/cast_message_builder.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -10,9 +10,9 @@
#include <deque>
#include <map>
-#include "media/cast/framer/frame_id_map.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtp/frame_id_map.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/framer/cast_message_builder_unittest.cc b/media/cast/net/rtp/cast_message_builder_unittest.cc
index ef75162a08..b0e30c44cd 100644
--- a/media/cast/framer/cast_message_builder_unittest.cc
+++ b/media/cast/net/rtp/cast_message_builder_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,9 +6,9 @@
#include "base/memory/scoped_ptr.h"
#include "base/test/simple_test_tick_clock.h"
-#include "media/cast/framer/cast_message_builder.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtp/cast_message_builder.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
diff --git a/media/cast/framer/frame_buffer.cc b/media/cast/net/rtp/frame_buffer.cc
index 0b6fa8332c..a419ab6a46 100644
--- a/media/cast/framer/frame_buffer.cc
+++ b/media/cast/net/rtp/frame_buffer.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/framer/frame_buffer.h"
+#include "media/cast/net/rtp/frame_buffer.h"
#include "base/logging.h"
@@ -59,17 +59,17 @@ bool FrameBuffer::Complete() const {
return num_packets_received_ - 1 == max_packet_id_;
}
-bool FrameBuffer::AssembleEncodedFrame(transport::EncodedFrame* frame) const {
+bool FrameBuffer::AssembleEncodedFrame(EncodedFrame* frame) const {
if (!Complete())
return false;
// Frame is complete -> construct.
if (is_key_frame_)
- frame->dependency = transport::EncodedFrame::KEY;
+ frame->dependency = EncodedFrame::KEY;
else if (frame_id_ == last_referenced_frame_id_)
- frame->dependency = transport::EncodedFrame::INDEPENDENT;
+ frame->dependency = EncodedFrame::INDEPENDENT;
else
- frame->dependency = transport::EncodedFrame::DEPENDENT;
+ frame->dependency = EncodedFrame::DEPENDENT;
frame->frame_id = frame_id_;
frame->referenced_frame_id = last_referenced_frame_id_;
frame->rtp_timestamp = rtp_timestamp_;
diff --git a/media/cast/framer/frame_buffer.h b/media/cast/net/rtp/frame_buffer.h
index d4d5dedbbd..1309a8785a 100644
--- a/media/cast/framer/frame_buffer.h
+++ b/media/cast/net/rtp/frame_buffer.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -9,7 +9,7 @@
#include <vector>
#include "media/cast/cast_config.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
@@ -29,7 +29,7 @@ class FrameBuffer {
// and also copies the data from all packets into the data field in |frame|.
// Returns true if the frame was complete; false if incomplete and |frame|
// remains unchanged.
- bool AssembleEncodedFrame(transport::EncodedFrame* frame) const;
+ bool AssembleEncodedFrame(EncodedFrame* frame) const;
bool is_key_frame() const { return is_key_frame_; }
diff --git a/media/cast/framer/frame_buffer_unittest.cc b/media/cast/net/rtp/frame_buffer_unittest.cc
index d6844f3e95..69ce93dbbb 100644
--- a/media/cast/framer/frame_buffer_unittest.cc
+++ b/media/cast/net/rtp/frame_buffer_unittest.cc
@@ -1,8 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/framer/frame_buffer.h"
+#include "media/cast/net/rtp/frame_buffer.h"
+#include "media/cast/net/cast_transport_defines.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -29,9 +30,9 @@ TEST_F(FrameBufferTest, OnePacketInsertSanity) {
rtp_header_.frame_id = 5;
rtp_header_.reference_frame_id = 5;
buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
- transport::EncodedFrame frame;
+ EncodedFrame frame;
EXPECT_TRUE(buffer_.AssembleEncodedFrame(&frame));
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(5u, frame.frame_id);
EXPECT_EQ(5u, frame.referenced_frame_id);
EXPECT_EQ(3000u, frame.rtp_timestamp);
@@ -39,7 +40,7 @@ TEST_F(FrameBufferTest, OnePacketInsertSanity) {
TEST_F(FrameBufferTest, EmptyBuffer) {
EXPECT_FALSE(buffer_.Complete());
- transport::EncodedFrame frame;
+ EncodedFrame frame;
EXPECT_FALSE(buffer_.AssembleEncodedFrame(&frame));
}
@@ -47,7 +48,7 @@ TEST_F(FrameBufferTest, DefaultOnePacketFrame) {
buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
EXPECT_TRUE(buffer_.Complete());
EXPECT_FALSE(buffer_.is_key_frame());
- transport::EncodedFrame frame;
+ EncodedFrame frame;
EXPECT_TRUE(buffer_.AssembleEncodedFrame(&frame));
EXPECT_EQ(payload_.size(), frame.data.size());
}
@@ -63,7 +64,7 @@ TEST_F(FrameBufferTest, MultiplePacketFrame) {
++rtp_header_.packet_id;
EXPECT_TRUE(buffer_.Complete());
EXPECT_TRUE(buffer_.is_key_frame());
- transport::EncodedFrame frame;
+ EncodedFrame frame;
EXPECT_TRUE(buffer_.AssembleEncodedFrame(&frame));
EXPECT_EQ(3 * payload_.size(), frame.data.size());
}
diff --git a/media/cast/framer/frame_id_map.cc b/media/cast/net/rtp/frame_id_map.cc
index b4389fd532..f0b433c2fb 100644
--- a/media/cast/framer/frame_id_map.cc
+++ b/media/cast/net/rtp/frame_id_map.cc
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/framer/frame_id_map.h"
+#include "media/cast/net/rtp/frame_id_map.h"
#include "base/logging.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/framer/frame_id_map.h b/media/cast/net/rtp/frame_id_map.h
index 66e306f671..9c1b674ff4 100644
--- a/media/cast/framer/frame_id_map.h
+++ b/media/cast/net/rtp/frame_id_map.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,8 +11,8 @@
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
#include "media/cast/cast_config.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/framer/framer.cc b/media/cast/net/rtp/framer.cc
index de4451a3b4..c94dc0c712 100644
--- a/media/cast/framer/framer.cc
+++ b/media/cast/net/rtp/framer.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/framer/framer.h"
+#include "media/cast/net/rtp/framer.h"
#include "base/logging.h"
@@ -62,7 +62,7 @@ bool Framer::InsertPacket(const uint8* payload_data,
}
// This does not release the frame.
-bool Framer::GetEncodedFrame(transport::EncodedFrame* frame,
+bool Framer::GetEncodedFrame(EncodedFrame* frame,
bool* next_frame,
bool* have_multiple_decodable_frames) {
*have_multiple_decodable_frames = frame_id_map_.HaveMultipleDecodableFrames();
diff --git a/media/cast/framer/framer.h b/media/cast/net/rtp/framer.h
index 0b7249eff3..cf70ef191e 100644
--- a/media/cast/framer/framer.h
+++ b/media/cast/net/rtp/framer.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,11 +12,11 @@
#include "base/memory/scoped_ptr.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/framer/cast_message_builder.h"
-#include "media/cast/framer/frame_buffer.h"
-#include "media/cast/framer/frame_id_map.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtp/cast_message_builder.h"
+#include "media/cast/net/rtp/frame_buffer.h"
+#include "media/cast/net/rtp/frame_id_map.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
@@ -45,7 +45,7 @@ class Framer {
// |next_frame| will be set to true if the returned frame is the very
// next frame. |have_multiple_complete_frames| will be set to true
// if there are more decodadble frames available.
- bool GetEncodedFrame(transport::EncodedFrame* video_frame,
+ bool GetEncodedFrame(EncodedFrame* video_frame,
bool* next_frame,
bool* have_multiple_complete_frames);
diff --git a/media/cast/framer/framer_unittest.cc b/media/cast/net/rtp/framer_unittest.cc
index ad53ef06ee..95e60d438d 100644
--- a/media/cast/framer/framer_unittest.cc
+++ b/media/cast/net/rtp/framer_unittest.cc
@@ -1,10 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/simple_test_tick_clock.h"
-#include "media/cast/framer/framer.h"
-#include "media/cast/rtp_receiver/mock_rtp_payload_feedback.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtp/framer.h"
+#include "media/cast/net/rtp/mock_rtp_payload_feedback.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -33,14 +34,14 @@ class FramerTest : public ::testing::Test {
};
TEST_F(FramerTest, EmptyState) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = false;
EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
}
TEST_F(FramerTest, AlwaysStartWithKey) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool complete = false;
bool multiple = false;
@@ -60,14 +61,14 @@ TEST_F(FramerTest, AlwaysStartWithKey) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_TRUE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(1u, frame.frame_id);
EXPECT_EQ(1u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
}
TEST_F(FramerTest, CompleteFrame) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool complete = false;
bool multiple = false;
@@ -81,7 +82,7 @@ TEST_F(FramerTest, CompleteFrame) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(0u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -107,7 +108,7 @@ TEST_F(FramerTest, CompleteFrame) {
}
TEST_F(FramerTest, DuplicatePackets) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool complete = false;
bool multiple = false;
@@ -139,7 +140,7 @@ TEST_F(FramerTest, DuplicatePackets) {
EXPECT_TRUE(complete);
EXPECT_FALSE(duplicate);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_FALSE(multiple);
EXPECT_EQ(0u, frame.referenced_frame_id);
@@ -150,7 +151,7 @@ TEST_F(FramerTest, DuplicatePackets) {
EXPECT_FALSE(complete);
EXPECT_TRUE(duplicate);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(0u, frame.frame_id);
EXPECT_FALSE(multiple);
EXPECT_EQ(0u, frame.referenced_frame_id);
@@ -184,7 +185,7 @@ TEST_F(FramerTest, DuplicatePackets) {
EXPECT_TRUE(complete);
EXPECT_FALSE(duplicate);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(1u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
EXPECT_FALSE(multiple);
@@ -196,14 +197,14 @@ TEST_F(FramerTest, DuplicatePackets) {
EXPECT_FALSE(complete);
EXPECT_TRUE(duplicate);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(1u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
EXPECT_FALSE(multiple);
}
TEST_F(FramerTest, ContinuousSequence) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool complete = false;
bool multiple = false;
@@ -217,7 +218,7 @@ TEST_F(FramerTest, ContinuousSequence) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(0u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -234,7 +235,7 @@ TEST_F(FramerTest, ContinuousSequence) {
TEST_F(FramerTest, Wrap) {
// Insert key frame, frame_id = 255 (will jump to that)
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = true;
bool duplicate = false;
@@ -248,7 +249,7 @@ TEST_F(FramerTest, Wrap) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(255u, frame.frame_id);
EXPECT_EQ(255u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -261,14 +262,14 @@ TEST_F(FramerTest, Wrap) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(256u, frame.frame_id);
EXPECT_EQ(255u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
}
TEST_F(FramerTest, Reset) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool complete = false;
bool multiple = true;
@@ -284,7 +285,7 @@ TEST_F(FramerTest, Reset) {
}
TEST_F(FramerTest, RequireKeyAfterReset) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = false;
bool duplicate = false;
@@ -308,7 +309,7 @@ TEST_F(FramerTest, RequireKeyAfterReset) {
}
TEST_F(FramerTest, BasicNonLastReferenceId) {
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = false;
bool duplicate = false;
@@ -335,7 +336,7 @@ TEST_F(FramerTest, BasicNonLastReferenceId) {
TEST_F(FramerTest, InOrderReferenceFrameSelection) {
// Create pattern: 0, 1, 4, 5.
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = false;
bool duplicate = false;
@@ -360,7 +361,7 @@ TEST_F(FramerTest, InOrderReferenceFrameSelection) {
framer_.InsertPacket(
payload_.data(), payload_.size(), rtp_header_, &duplicate);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(0u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
EXPECT_FALSE(multiple);
@@ -368,14 +369,14 @@ TEST_F(FramerTest, InOrderReferenceFrameSelection) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_TRUE(multiple);
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(1u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_FALSE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(4u, frame.frame_id);
EXPECT_EQ(0u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -394,14 +395,14 @@ TEST_F(FramerTest, InOrderReferenceFrameSelection) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency);
+ EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency);
EXPECT_EQ(5u, frame.frame_id);
EXPECT_EQ(4u, frame.referenced_frame_id);
}
TEST_F(FramerTest, AudioWrap) {
// All audio frames are marked as key frames.
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = false;
bool duplicate = false;
@@ -415,7 +416,7 @@ TEST_F(FramerTest, AudioWrap) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(254u, frame.frame_id);
EXPECT_EQ(254u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -434,7 +435,7 @@ TEST_F(FramerTest, AudioWrap) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_TRUE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(255u, frame.frame_id);
EXPECT_EQ(255u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -442,7 +443,7 @@ TEST_F(FramerTest, AudioWrap) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(256u, frame.frame_id);
EXPECT_EQ(256u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -450,7 +451,7 @@ TEST_F(FramerTest, AudioWrap) {
TEST_F(FramerTest, AudioWrapWithMissingFrame) {
// All audio frames are marked as key frames.
- transport::EncodedFrame frame;
+ EncodedFrame frame;
bool next_frame = false;
bool multiple = true;
bool duplicate = false;
@@ -464,7 +465,7 @@ TEST_F(FramerTest, AudioWrapWithMissingFrame) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(253u, frame.frame_id);
EXPECT_EQ(253u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
@@ -483,14 +484,14 @@ TEST_F(FramerTest, AudioWrapWithMissingFrame) {
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_FALSE(next_frame);
EXPECT_TRUE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(255u, frame.frame_id);
EXPECT_EQ(255u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple));
EXPECT_TRUE(next_frame);
EXPECT_FALSE(multiple);
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency);
+ EXPECT_EQ(EncodedFrame::KEY, frame.dependency);
EXPECT_EQ(256u, frame.frame_id);
EXPECT_EQ(256u, frame.referenced_frame_id);
framer_.ReleaseFrame(frame.frame_id);
diff --git a/media/cast/rtp_receiver/rtp_parser/include/mock/mock_rtp_feedback.h b/media/cast/net/rtp/mock_rtp_feedback.h
index f5edf7c43f..44624ffc71 100644
--- a/media/cast/rtp_receiver/rtp_parser/include/mock/mock_rtp_feedback.h
+++ b/media/cast/net/rtp/mock_rtp_feedback.h
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAST_RTP_INCLUDE_MOCK_RTP_FEEDBACK_H_
#define MEDIA_CAST_RTP_INCLUDE_MOCK_RTP_FEEDBACK_H_
-#include "media/cast/rtp_receiver/rtp_parser/rtp_feedback.h"
+#include "media/cast/net/rtp/rtp_parser/rtp_feedback.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
diff --git a/media/cast/rtp_receiver/mock_rtp_payload_feedback.cc b/media/cast/net/rtp/mock_rtp_payload_feedback.cc
index 02b6c0be45..cde8e3880a 100644
--- a/media/cast/rtp_receiver/mock_rtp_payload_feedback.cc
+++ b/media/cast/net/rtp/mock_rtp_payload_feedback.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_receiver/mock_rtp_payload_feedback.h"
+#include "media/cast/net/rtp/mock_rtp_payload_feedback.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtp_receiver/mock_rtp_payload_feedback.h b/media/cast/net/rtp/mock_rtp_payload_feedback.h
index 14e48673bd..f46d318476 100644
--- a/media/cast/rtp_receiver/mock_rtp_payload_feedback.h
+++ b/media/cast/net/rtp/mock_rtp_payload_feedback.h
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAST_RTP_COMMON_MOCK_RTP_PAYLOAD_FEEDBACK_H_
#define MEDIA_CAST_RTP_COMMON_MOCK_RTP_PAYLOAD_FEEDBACK_H_
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc b/media/cast/net/rtp/packet_storage.cc
index a748baa27a..59ac9ce44e 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc
+++ b/media/cast/net/rtp/packet_storage.cc
@@ -1,16 +1,16 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
+#include "media/cast/net/rtp/packet_storage.h"
#include <string>
#include "base/logging.h"
+#include "media/cast/cast_defines.h"
namespace media {
namespace cast {
-namespace transport {
PacketStorage::PacketStorage(size_t stored_frames)
: max_stored_frames_(stored_frames),
@@ -60,6 +60,5 @@ const SendPacketVector* PacketStorage::GetFrame8(uint8 frame_id_8bits) const {
return &(frames_[index_8bits]);
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage.h b/media/cast/net/rtp/packet_storage.h
index 037ead1edf..9330a6a0ae 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage.h
+++ b/media/cast/net/rtp/packet_storage.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
-#define MEDIA_CAST_TRANSPORT_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
+#ifndef MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
+#define MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
#include <deque>
#include <list>
@@ -15,13 +15,12 @@
#include "base/memory/scoped_ptr.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
namespace media {
namespace cast {
-namespace transport {
// Stores a list of frames. Each frame consists a list of packets.
typedef std::deque<SendPacketVector> FrameQueue;
@@ -55,8 +54,7 @@ class PacketStorage {
DISALLOW_COPY_AND_ASSIGN(PacketStorage);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
+#endif // MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc b/media/cast/net/rtp/packet_storage_unittest.cc
index 298942c80a..5e9393da5d 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc
+++ b/media/cast/net/rtp/packet_storage_unittest.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
+#include "media/cast/net/rtp/packet_storage.h"
#include <stdint.h>
@@ -14,7 +14,6 @@
namespace media {
namespace cast {
-namespace transport {
static size_t kStoredFrames = 10;
@@ -110,6 +109,5 @@ TEST(PacketStorageTest, GetFrameTooOld) {
}
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/rtp_receiver/receiver_stats.cc b/media/cast/net/rtp/receiver_stats.cc
index 7eff86763f..416cdd8ea5 100644
--- a/media/cast/rtp_receiver/receiver_stats.cc
+++ b/media/cast/net/rtp/receiver_stats.cc
@@ -1,11 +1,11 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_receiver/receiver_stats.h"
+#include "media/cast/net/rtp/receiver_stats.h"
#include "base/logging.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtp_receiver/receiver_stats.h b/media/cast/net/rtp/receiver_stats.h
index 05a067f787..9de6b22c20 100644
--- a/media/cast/rtp_receiver/receiver_stats.h
+++ b/media/cast/net/rtp/receiver_stats.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,8 +7,8 @@
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtp_receiver/receiver_stats_unittest.cc b/media/cast/net/rtp/receiver_stats_unittest.cc
index 98059cdde7..caedf84c06 100644
--- a/media/cast/rtp_receiver/receiver_stats_unittest.cc
+++ b/media/cast/net/rtp/receiver_stats_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,8 +8,8 @@
#include "base/test/simple_test_tick_clock.h"
#include "base/time/time.h"
-#include "media/cast/rtp_receiver/receiver_stats.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/receiver_stats.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc b/media/cast/net/rtp/rtp_header_parser.cc
index ddadcb2cf2..2d70f9827d 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc
+++ b/media/cast/net/rtp/rtp_header_parser.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h"
+#include "media/cast/net/rtp/rtp_header_parser.h"
#include <cstddef>
@@ -10,7 +10,6 @@
namespace media {
namespace cast {
-namespace transport {
static const uint8 kCastKeyFrameBitMask = 0x80;
static const uint8 kCastReferenceFrameIdBitMask = 0x40;
@@ -100,6 +99,5 @@ bool RtpHeaderParser::ParseCast(RtpCastTestHeader* parsed_packet) const {
return true;
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h b/media/cast/net/rtp/rtp_header_parser.h
index bb6e0fae54..fd235c2aa5 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h
+++ b/media/cast/net/rtp/rtp_header_parser.h
@@ -1,17 +1,16 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Utility parser for rtp packetizer unittests
-#ifndef MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_TEST_RTP_HEADER_PARSER_H_
-#define MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_TEST_RTP_HEADER_PARSER_H_
+#ifndef MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
+#define MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
#include "base/basictypes.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
namespace media {
namespace cast {
-namespace transport {
// TODO(miu): Kill this and use RtpCastHeader instead.
struct RtpCastTestHeader {
@@ -51,14 +50,13 @@ class RtpHeaderParser {
const uint8* const rtp_data_begin_;
size_t length_;
- mutable transport::FrameIdWrapHelper frame_id_wrap_helper_;
- mutable transport::FrameIdWrapHelper reference_frame_id_wrap_helper_;
+ mutable FrameIdWrapHelper frame_id_wrap_helper_;
+ mutable FrameIdWrapHelper reference_frame_id_wrap_helper_;
DISALLOW_COPY_AND_ASSIGN(RtpHeaderParser);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_TEST_RTP_HEADER_PARSER_H_
+#endif // MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
diff --git a/media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.cc b/media/cast/net/rtp/rtp_packet_builder.cc
index b8ab3baa29..2f279f4e96 100644
--- a/media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.cc
+++ b/media/cast/net/rtp/rtp_packet_builder.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h"
+#include "media/cast/net/rtp/rtp_packet_builder.h"
#include "base/big_endian.h"
#include "base/logging.h"
diff --git a/media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h b/media/cast/net/rtp/rtp_packet_builder.h
index 7337798e31..3d6579720b 100644
--- a/media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h
+++ b/media/cast/net/rtp/rtp_packet_builder.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,7 +7,7 @@
#ifndef MEDIA_CAST_RTP_RECEIVER_RTP_PARSER_TEST_RTP_PACKET_BUILDER_H_
#define MEDIA_CAST_RTP_RECEIVER_RTP_PARSER_TEST_RTP_PACKET_BUILDER_H_
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc b/media/cast/net/rtp/rtp_packetizer.cc
index d40f99f144..dcfcc8bba4 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
+++ b/media/cast/net/rtp/rtp_packetizer.cc
@@ -1,16 +1,15 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h"
+#include "media/cast/net/rtp/rtp_packetizer.h"
#include "base/big_endian.h"
#include "base/logging.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
namespace media {
namespace cast {
-namespace transport {
static const uint16 kCommonRtpHeaderLength = 12;
static const uint16 kCastRtpHeaderLength = 7;
@@ -19,13 +18,10 @@ static const uint8 kCastReferenceFrameIdBitMask = 0x40;
static const uint8 kRtpMarkerBitMask = 0x80;
RtpPacketizerConfig::RtpPacketizerConfig()
- : audio(false),
- payload_type(-1),
+ : payload_type(-1),
max_payload_length(kMaxIpPacketSize - 28), // Default is IP-v4/UDP.
sequence_number(0),
- frequency(8000),
- ssrc(0),
- channels(0) {}
+ ssrc(0) {}
RtpPacketizerConfig::~RtpPacketizerConfig() {}
@@ -132,6 +128,5 @@ void RtpPacketizer::BuildCommonRTPheader(Packet* packet,
++sequence_number_;
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h b/media/cast/net/rtp/rtp_packetizer.h
index ebdbf01018..034a74a2a5 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h
+++ b/media/cast/net/rtp/rtp_packetizer.h
@@ -1,16 +1,16 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
-#define MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
+#ifndef MEDIA_CAST_NET_RTP_RTP_PACKETIZER_H_
+#define MEDIA_CAST_NET_RTP_RTP_PACKETIZER_H_
#include <cmath>
#include <list>
#include <map>
#include "base/time/time.h"
-#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
+#include "media/cast/net/rtp/packet_storage.h"
namespace base {
class TickClock;
@@ -19,8 +19,6 @@ class TickClock;
namespace media {
namespace cast {
-namespace transport {
-
class PacedSender;
struct RtpPacketizerConfig {
@@ -28,21 +26,12 @@ struct RtpPacketizerConfig {
~RtpPacketizerConfig();
// General.
- bool audio;
int payload_type;
uint16 max_payload_length;
uint16 sequence_number;
- int frequency;
// SSRC.
unsigned int ssrc;
-
- // Video.
- VideoCodec video_codec;
-
- // Audio.
- uint8 channels;
- AudioCodec audio_codec;
};
// This object is only called from the main cast thread.
@@ -79,8 +68,7 @@ class RtpPacketizer {
size_t send_octet_count_;
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
+#endif // MEDIA_CAST_NET_RTP_RTP_PACKETIZER_H_
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc b/media/cast/net/rtp/rtp_packetizer_unittest.cc
index 64def4ce7f..1e39e5924f 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
+++ b/media/cast/net/rtp/rtp_packetizer_unittest.cc
@@ -1,23 +1,23 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h"
+#include "media/cast/net/rtp/rtp_packetizer.h"
#include <stdint.h>
#include "base/memory/scoped_ptr.h"
#include "base/test/simple_test_tick_clock.h"
+#include "media/cast/logging/logging_impl.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtp/packet_storage.h"
+#include "media/cast/net/rtp/rtp_header_parser.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
-#include "media/cast/transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
namespace cast {
-namespace transport {
namespace {
static const int kPayload = 127;
@@ -26,7 +26,6 @@ static const uint16 kSeqNum = 33;
static const int kMaxPacketLength = 1500;
static const int kSsrc = 0x12345;
static const unsigned int kFrameSize = 5000;
-static const uint32 kStartFrameId = UINT32_C(0xffffffff);
}
class TestRtpPacketTransport : public PacketSender {
@@ -170,6 +169,5 @@ TEST_F(RtpPacketizerTest, Stats) {
EXPECT_EQ(expected_num_of_packets, transport_->number_of_packets_received());
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/rtp_receiver/rtp_parser/rtp_parser.cc b/media/cast/net/rtp/rtp_parser.cc
index f44e82dac2..bed1d7c8d8 100644
--- a/media/cast/rtp_receiver/rtp_parser/rtp_parser.cc
+++ b/media/cast/net/rtp/rtp_parser.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
+#include "media/cast/net/rtp/rtp_parser.h"
#include "base/big_endian.h"
#include "base/logging.h"
diff --git a/media/cast/rtp_receiver/rtp_parser/rtp_parser.h b/media/cast/net/rtp/rtp_parser.h
index 35118cf144..64586d27c9 100644
--- a/media/cast/rtp_receiver/rtp_parser/rtp_parser.h
+++ b/media/cast/net/rtp/rtp_parser.h
@@ -1,12 +1,12 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_RTP_RECEIVER_RTP_PARSER_RTP_PARSER_H_
-#define MEDIA_CAST_RTP_RECEIVER_RTP_PARSER_RTP_PARSER_H_
+#ifndef MEDIA_CAST_NET_RTP_RTP_PARSER_H_
+#define MEDIA_CAST_NET_RTP_RTP_PARSER_H_
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
-#include "media/cast/transport/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
@@ -36,7 +36,7 @@ class RtpParser {
private:
const uint32 expected_sender_ssrc_;
const uint8 expected_payload_type_;
- transport::FrameIdWrapHelper frame_id_wrap_helper_;
+ FrameIdWrapHelper frame_id_wrap_helper_;
DISALLOW_COPY_AND_ASSIGN(RtpParser);
};
@@ -44,4 +44,4 @@ class RtpParser {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_RTP_RECEIVER_RTP_PARSER_RTP_PARSER_H_
+#endif // MEDIA_CAST_NET_RTP_RTP_PARSER_H_
diff --git a/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc b/media/cast/net/rtp/rtp_parser_unittest.cc
index 47c79139ff..e5c08fe60e 100644
--- a/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc
+++ b/media/cast/net/rtp/rtp_parser_unittest.cc
@@ -1,12 +1,12 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
#include "base/rand_util.h"
-#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
-#include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_packet_builder.h"
+#include "media/cast/net/rtp/rtp_parser.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -39,7 +39,7 @@ class RtpParserTest : public ::testing::Test {
void ExpectParsesPacket() {
RtpCastHeader parsed_header;
const uint8* payload = NULL;
- size_t payload_size = -1;
+ size_t payload_size = static_cast<size_t>(-1);
EXPECT_TRUE(rtp_parser_.ParsePacket(
packet_, kPacketLength, &parsed_header, &payload, &payload_size));
@@ -63,7 +63,7 @@ class RtpParserTest : public ::testing::Test {
void ExpectDoesNotParsePacket() {
RtpCastHeader parsed_header;
const uint8* payload = NULL;
- size_t payload_size = -1;
+ size_t payload_size = static_cast<size_t>(-1);
EXPECT_FALSE(rtp_parser_.ParsePacket(
packet_, kPacketLength, &parsed_header, &payload, &payload_size));
}
diff --git a/media/cast/rtp_receiver/rtp_receiver_defines.cc b/media/cast/net/rtp/rtp_receiver_defines.cc
index e42b2b733c..9b20b5f904 100644
--- a/media/cast/rtp_receiver/rtp_receiver_defines.cc
+++ b/media/cast/net/rtp/rtp_receiver_defines.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtp_receiver/rtp_receiver_defines.h b/media/cast/net/rtp/rtp_receiver_defines.h
index d907436f48..86fbd2296f 100644
--- a/media/cast/rtp_receiver/rtp_receiver_defines.h
+++ b/media/cast/net/rtp/rtp_receiver_defines.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,7 +7,7 @@
#include "base/basictypes.h"
#include "media/cast/cast_config.h"
-#include "media/cast/rtcp/rtcp_defines.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
namespace media {
namespace cast {
diff --git a/media/cast/transport/rtp_sender/rtp_sender.cc b/media/cast/net/rtp/rtp_sender.cc
index b807b34757..0f88c444ec 100644
--- a/media/cast/transport/rtp_sender/rtp_sender.cc
+++ b/media/cast/net/rtp/rtp_sender.cc
@@ -1,18 +1,17 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/rtp_sender/rtp_sender.h"
+#include "media/cast/net/rtp/rtp_sender.h"
#include "base/big_endian.h"
#include "base/logging.h"
#include "base/rand_util.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/pacing/paced_sender.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/pacing/paced_sender.h"
namespace media {
namespace cast {
-namespace transport {
namespace {
@@ -41,30 +40,13 @@ RtpSender::RtpSender(
RtpSender::~RtpSender() {}
-bool RtpSender::InitializeAudio(const CastTransportAudioConfig& config) {
- storage_.reset(new PacketStorage(config.rtp.max_outstanding_frames));
+bool RtpSender::Initialize(const CastTransportRtpConfig& config) {
+ storage_.reset(new PacketStorage(config.stored_frames));
if (!storage_->IsValid()) {
return false;
}
- config_.audio = true;
- config_.ssrc = config.rtp.config.ssrc;
- config_.payload_type = config.rtp.config.payload_type;
- config_.frequency = config.frequency;
- config_.audio_codec = config.codec;
- packetizer_.reset(new RtpPacketizer(transport_, storage_.get(), config_));
- return true;
-}
-
-bool RtpSender::InitializeVideo(const CastTransportVideoConfig& config) {
- storage_.reset(new PacketStorage(config.rtp.max_outstanding_frames));
- if (!storage_->IsValid()) {
- return false;
- }
- config_.audio = false;
- config_.ssrc = config.rtp.config.ssrc;
- config_.payload_type = config.rtp.config.payload_type;
- config_.frequency = kVideoFrequency;
- config_.video_codec = config.codec;
+ config_.ssrc = config.ssrc;
+ config_.payload_type = config.rtp_payload_type;
packetizer_.reset(new RtpPacketizer(transport_, storage_.get(), config_));
return true;
}
@@ -145,6 +127,5 @@ void RtpSender::UpdateSequenceNumber(Packet* packet) {
big_endian_writer.WriteU16(packetizer_->NextSequenceNumber());
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/rtp_sender/rtp_sender.h b/media/cast/net/rtp/rtp_sender.h
index e65326abf1..4dd7966a68 100644
--- a/media/cast/transport/rtp_sender/rtp_sender.h
+++ b/media/cast/net/rtp/rtp_sender.h
@@ -1,32 +1,30 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file contains the interface to the cast RTP sender.
-#ifndef MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_SENDER_H_
-#define MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_SENDER_H_
+#ifndef MEDIA_CAST_NET_RTP_RTP_SENDER_H_
+#define MEDIA_CAST_NET_RTP_RTP_SENDER_H_
#include <map>
#include <set>
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "base/memory/weak_ptr.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
-#include "media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtp/packet_storage.h"
+#include "media/cast/net/rtp/rtp_packetizer.h"
namespace media {
namespace cast {
-namespace transport {
-
// This object is only called from the main cast thread.
// This class handles splitting encoded audio and video frames into packets and
// add an RTP header to each packet. The sent packets are stored until they are
@@ -40,13 +38,9 @@ class RtpSender {
~RtpSender();
- // Initialize audio stack. Audio must be initialized prior to sending encoded
- // audio frames. Returns false if configuration is invalid.
- bool InitializeAudio(const CastTransportAudioConfig& config);
-
- // Initialize video stack. Video must be initialized prior to sending encoded
- // video frames. Returns false if configuration is invalid.
- bool InitializeVideo(const CastTransportVideoConfig& config);
+ // This must be called before sending any frames. Returns false if
+ // configuration is invalid.
+ bool Initialize(const CastTransportRtpConfig& config);
void SendFrame(const EncodedFrame& frame);
@@ -78,8 +72,7 @@ class RtpSender {
DISALLOW_COPY_AND_ASSIGN(RtpSender);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_SENDER_H_
+#endif // MEDIA_CAST_NET_RTP_SENDER_RTP_SENDER_H_
diff --git a/media/cast/transport/transport/udp_transport.cc b/media/cast/net/udp_transport.cc
index 9669b17d43..ae0593d3ac 100644
--- a/media/cast/transport/transport/udp_transport.cc
+++ b/media/cast/net/udp_transport.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/transport/udp_transport.h"
+#include "media/cast/net/udp_transport.h"
#include <algorithm>
#include <string>
@@ -19,7 +19,6 @@
namespace media {
namespace cast {
-namespace transport {
namespace {
const int kMaxPacketSize = 1500;
@@ -237,6 +236,5 @@ void UdpTransport::OnSent(const scoped_refptr<net::IOBuffer>& buf,
}
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/transport/transport/udp_transport.h b/media/cast/net/udp_transport.h
index 1a568501d5..951e9c12d3 100644
--- a/media/cast/transport/transport/udp_transport.h
+++ b/media/cast/net/udp_transport.h
@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_TRANSPORT_TRANSPORT_UDP_TRANSPORT_H_
-#define MEDIA_CAST_TRANSPORT_TRANSPORT_UDP_TRANSPORT_H_
+#ifndef MEDIA_CAST_NET_UDP_TRANSPORT_H_
+#define MEDIA_CAST_NET_UDP_TRANSPORT_H_
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_sender.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_util.h"
#include "net/udp/udp_socket.h"
@@ -23,7 +23,6 @@ class NetLog;
namespace media {
namespace cast {
-namespace transport {
// This class implements UDP transport mechanism for Cast.
class UdpTransport : public PacketSender {
@@ -90,8 +89,7 @@ class UdpTransport : public PacketSender {
DISALLOW_COPY_AND_ASSIGN(UdpTransport);
};
-} // namespace transport
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_TRANSPORT_TRANSPORT_UDP_TRANSPORT_H_
+#endif // MEDIA_CAST_NET_UDP_TRANSPORT_H_
diff --git a/media/cast/transport/transport/udp_transport_unittest.cc b/media/cast/net/udp_transport_unittest.cc
index 26879492f0..7ae938b4ca 100644
--- a/media/cast/transport/transport/udp_transport_unittest.cc
+++ b/media/cast/net/udp_transport_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/transport/transport/udp_transport.h"
+#include "media/cast/net/udp_transport.h"
#include <algorithm>
#include <string>
@@ -12,14 +12,13 @@
#include "base/callback.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
+#include "media/cast/net/cast_transport_config.h"
#include "media/cast/test/utility/net_utility.h"
-#include "media/cast/transport/cast_transport_config.h"
#include "net/base/net_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
namespace cast {
-namespace transport {
class MockPacketReceiver {
public:
@@ -33,7 +32,7 @@ class MockPacketReceiver {
}
std::string packet() const { return packet_; }
- transport::PacketReceiverCallback packet_receiver() {
+ PacketReceiverCallback packet_receiver() {
return base::Bind(&MockPacketReceiver::ReceivedPacket,
base::Unretained(this));
}
@@ -50,7 +49,7 @@ void SendPacket(UdpTransport* transport, Packet packet) {
transport->SendPacket(new base::RefCountedData<Packet>(packet), cb);
}
-static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
+static void UpdateCastTransportStatus(CastTransportStatus status) {
NOTREACHED();
}
@@ -95,6 +94,5 @@ TEST(UdpTransport, SendAndReceive) {
std::equal(packet.begin(), packet.end(), receiver2.packet().begin()));
}
-} // namespace transport
} // namespace cast
} // namespace media
diff --git a/media/cast/receiver/audio_decoder.cc b/media/cast/receiver/audio_decoder.cc
index a4d1896835..dac0a5e9a1 100644
--- a/media/cast/receiver/audio_decoder.cc
+++ b/media/cast/receiver/audio_decoder.cc
@@ -23,7 +23,7 @@ class AudioDecoder::ImplBase
: public base::RefCountedThreadSafe<AudioDecoder::ImplBase> {
public:
ImplBase(const scoped_refptr<CastEnvironment>& cast_environment,
- transport::AudioCodec codec,
+ Codec codec,
int num_channels,
int sampling_rate)
: cast_environment_(cast_environment),
@@ -39,7 +39,7 @@ class AudioDecoder::ImplBase
return cast_initialization_status_;
}
- void DecodeFrame(scoped_ptr<transport::EncodedFrame> encoded_frame,
+ void DecodeFrame(scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback) {
DCHECK_EQ(cast_initialization_status_, STATUS_AUDIO_INITIALIZED);
@@ -77,7 +77,7 @@ class AudioDecoder::ImplBase
virtual scoped_ptr<AudioBus> Decode(uint8* data, int len) = 0;
const scoped_refptr<CastEnvironment> cast_environment_;
- const transport::AudioCodec codec_;
+ const Codec codec_;
const int num_channels_;
// Subclass' ctor is expected to set this to STATUS_AUDIO_INITIALIZED.
@@ -96,7 +96,7 @@ class AudioDecoder::OpusImpl : public AudioDecoder::ImplBase {
int num_channels,
int sampling_rate)
: ImplBase(cast_environment,
- transport::kOpus,
+ CODEC_AUDIO_OPUS,
num_channels,
sampling_rate),
decoder_memory_(new uint8[opus_decoder_get_size(num_channels)]),
@@ -166,7 +166,7 @@ class AudioDecoder::Pcm16Impl : public AudioDecoder::ImplBase {
int num_channels,
int sampling_rate)
: ImplBase(cast_environment,
- transport::kPcm16,
+ CODEC_AUDIO_PCM16,
num_channels,
sampling_rate) {
if (ImplBase::cast_initialization_status_ != STATUS_AUDIO_UNINITIALIZED)
@@ -202,13 +202,13 @@ AudioDecoder::AudioDecoder(
const scoped_refptr<CastEnvironment>& cast_environment,
int channels,
int sampling_rate,
- transport::AudioCodec codec)
+ Codec codec)
: cast_environment_(cast_environment) {
switch (codec) {
- case transport::kOpus:
+ case CODEC_AUDIO_OPUS:
impl_ = new OpusImpl(cast_environment, channels, sampling_rate);
break;
- case transport::kPcm16:
+ case CODEC_AUDIO_PCM16:
impl_ = new Pcm16Impl(cast_environment, channels, sampling_rate);
break;
default:
@@ -226,7 +226,7 @@ CastInitializationStatus AudioDecoder::InitializationResult() const {
}
void AudioDecoder::DecodeFrame(
- scoped_ptr<transport::EncodedFrame> encoded_frame,
+ scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback) {
DCHECK(encoded_frame.get());
DCHECK(!callback.is_null());
diff --git a/media/cast/receiver/audio_decoder.h b/media/cast/receiver/audio_decoder.h
index c66735e4e6..0b13eae6a8 100644
--- a/media/cast/receiver/audio_decoder.h
+++ b/media/cast/receiver/audio_decoder.h
@@ -10,7 +10,7 @@
#include "media/base/audio_bus.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
namespace cast {
@@ -29,7 +29,7 @@ class AudioDecoder {
AudioDecoder(const scoped_refptr<CastEnvironment>& cast_environment,
int channels,
int sampling_rate,
- transport::AudioCodec codec);
+ Codec codec);
virtual ~AudioDecoder();
// Returns STATUS_AUDIO_INITIALIZED if the decoder was successfully
@@ -44,7 +44,7 @@ class AudioDecoder {
// monotonically-increasing by 1 for each successive call to this method.
// When it is not, the decoder will assume one or more frames have been
// dropped (e.g., due to packet loss), and will perform recovery actions.
- void DecodeFrame(scoped_ptr<transport::EncodedFrame> encoded_frame,
+ void DecodeFrame(scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback);
private:
diff --git a/media/cast/receiver/audio_decoder_unittest.cc b/media/cast/receiver/audio_decoder_unittest.cc
index 6985a69423..576e9dbce5 100644
--- a/media/cast/receiver/audio_decoder_unittest.cc
+++ b/media/cast/receiver/audio_decoder_unittest.cc
@@ -20,11 +20,11 @@ namespace cast {
namespace {
struct TestScenario {
- transport::AudioCodec codec;
+ Codec codec;
int num_channels;
int sampling_rate;
- TestScenario(transport::AudioCodec c, int n, int s)
+ TestScenario(Codec c, int n, int s)
: codec(c), num_channels(n), sampling_rate(s) {}
};
} // namespace
@@ -51,7 +51,7 @@ class AudioDecoderTest : public ::testing::TestWithParam<TestScenario> {
last_frame_id_ = 0;
seen_a_decoded_frame_ = false;
- if (GetParam().codec == transport::kOpus) {
+ if (GetParam().codec == CODEC_AUDIO_OPUS) {
opus_encoder_memory_.reset(
new uint8[opus_encoder_get_size(GetParam().num_channels)]);
OpusEncoder* const opus_encoder =
@@ -73,9 +73,9 @@ class AudioDecoderTest : public ::testing::TestWithParam<TestScenario> {
void FeedMoreAudio(const base::TimeDelta& duration,
int num_dropped_frames) {
// Prepare a simulated EncodedFrame to feed into the AudioDecoder.
- scoped_ptr<transport::EncodedFrame> encoded_frame(
- new transport::EncodedFrame());
- encoded_frame->dependency = transport::EncodedFrame::KEY;
+ scoped_ptr<EncodedFrame> encoded_frame(
+ new EncodedFrame());
+ encoded_frame->dependency = EncodedFrame::KEY;
encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames;
encoded_frame->referenced_frame_id = encoded_frame->frame_id;
last_frame_id_ = encoded_frame->frame_id;
@@ -88,13 +88,13 @@ class AudioDecoderTest : public ::testing::TestWithParam<TestScenario> {
std::vector<int16> interleaved(num_elements);
audio_bus->ToInterleaved(
audio_bus->frames(), sizeof(int16), &interleaved.front());
- if (GetParam().codec == transport::kPcm16) {
+ if (GetParam().codec == CODEC_AUDIO_PCM16) {
encoded_frame->data.resize(num_elements * sizeof(int16));
int16* const pcm_data =
reinterpret_cast<int16*>(encoded_frame->mutable_bytes());
for (size_t i = 0; i < interleaved.size(); ++i)
pcm_data[i] = static_cast<int16>(base::HostToNet16(interleaved[i]));
- } else if (GetParam().codec == transport::kOpus) {
+ } else if (GetParam().codec == CODEC_AUDIO_OPUS) {
OpusEncoder* const opus_encoder =
reinterpret_cast<OpusEncoder*>(opus_encoder_memory_.get());
const int kOpusEncodeBufferSize = 4000;
@@ -154,7 +154,7 @@ class AudioDecoderTest : public ::testing::TestWithParam<TestScenario> {
// first frame seen at the start (and immediately after dropped packet
// recovery) because it introduces a tiny, significant delay.
bool examine_signal = true;
- if (GetParam().codec == transport::kOpus) {
+ if (GetParam().codec == CODEC_AUDIO_OPUS) {
examine_signal = seen_a_decoded_frame_ && should_be_continuous;
seen_a_decoded_frame_ = true;
}
@@ -229,13 +229,14 @@ TEST_P(AudioDecoderTest, RecoversFromDroppedFrames) {
WaitForAllAudioToBeDecoded();
}
-INSTANTIATE_TEST_CASE_P(AudioDecoderTestScenarios,
- AudioDecoderTest,
- ::testing::Values(
- TestScenario(transport::kPcm16, 1, 8000),
- TestScenario(transport::kPcm16, 2, 48000),
- TestScenario(transport::kOpus, 1, 8000),
- TestScenario(transport::kOpus, 2, 48000)));
+INSTANTIATE_TEST_CASE_P(
+ AudioDecoderTestScenarios,
+ AudioDecoderTest,
+ ::testing::Values(
+ TestScenario(CODEC_AUDIO_PCM16, 1, 8000),
+ TestScenario(CODEC_AUDIO_PCM16, 2, 48000),
+ TestScenario(CODEC_AUDIO_OPUS, 1, 8000),
+ TestScenario(CODEC_AUDIO_OPUS, 2, 48000)));
} // namespace cast
} // namespace media
diff --git a/media/cast/receiver/cast_receiver_impl.cc b/media/cast/receiver/cast_receiver_impl.cc
index 7cff354c14..36669b9e62 100644
--- a/media/cast/receiver/cast_receiver_impl.cc
+++ b/media/cast/receiver/cast_receiver_impl.cc
@@ -20,7 +20,7 @@ scoped_ptr<CastReceiver> CastReceiver::Create(
scoped_refptr<CastEnvironment> cast_environment,
const FrameReceiverConfig& audio_config,
const FrameReceiverConfig& video_config,
- transport::PacketSender* const packet_sender) {
+ PacketSender* const packet_sender) {
return scoped_ptr<CastReceiver>(new CastReceiverImpl(
cast_environment, audio_config, video_config, packet_sender));
}
@@ -29,7 +29,7 @@ CastReceiverImpl::CastReceiverImpl(
scoped_refptr<CastEnvironment> cast_environment,
const FrameReceiverConfig& audio_config,
const FrameReceiverConfig& video_config,
- transport::PacketSender* const packet_sender)
+ PacketSender* const packet_sender)
: cast_environment_(cast_environment),
pacer_(cast_environment->Clock(),
cast_environment->Logging(),
@@ -41,8 +41,8 @@ CastReceiverImpl::CastReceiverImpl(
ssrc_of_video_sender_(video_config.incoming_ssrc),
num_audio_channels_(audio_config.channels),
audio_sampling_rate_(audio_config.frequency),
- audio_codec_(audio_config.codec.audio),
- video_codec_(video_config.codec.video) {}
+ audio_codec_(audio_config.codec),
+ video_codec_(video_config.codec) {}
CastReceiverImpl::~CastReceiverImpl() {}
@@ -76,7 +76,7 @@ void CastReceiverImpl::DispatchReceivedPacket(scoped_ptr<Packet> packet) {
base::Passed(&packet)));
}
-transport::PacketReceiverCallback CastReceiverImpl::packet_receiver() {
+PacketReceiverCallback CastReceiverImpl::packet_receiver() {
return base::Bind(&CastReceiverImpl::DispatchReceivedPacket,
// TODO(miu): This code structure is dangerous, since the
// callback could be stored and then invoked after
@@ -122,7 +122,7 @@ void CastReceiverImpl::RequestEncodedVideoFrame(
void CastReceiverImpl::DecodeEncodedAudioFrame(
const AudioFrameDecodedCallback& callback,
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
if (!encoded_frame) {
callback.Run(make_scoped_ptr<AudioBus>(NULL), base::TimeTicks(), false);
@@ -150,7 +150,7 @@ void CastReceiverImpl::DecodeEncodedAudioFrame(
void CastReceiverImpl::DecodeEncodedVideoFrame(
const VideoFrameDecodedCallback& callback,
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
if (!encoded_frame) {
callback.Run(
diff --git a/media/cast/receiver/cast_receiver_impl.h b/media/cast/receiver/cast_receiver_impl.h
index c0dd5f38d1..3443561257 100644
--- a/media/cast/receiver/cast_receiver_impl.h
+++ b/media/cast/receiver/cast_receiver_impl.h
@@ -10,8 +10,8 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/cast_receiver.h"
+#include "media/cast/net/pacing/paced_sender.h"
#include "media/cast/receiver/frame_receiver.h"
-#include "media/cast/transport/pacing/paced_sender.h"
namespace media {
namespace cast {
@@ -27,12 +27,12 @@ class CastReceiverImpl : public CastReceiver {
CastReceiverImpl(scoped_refptr<CastEnvironment> cast_environment,
const FrameReceiverConfig& audio_config,
const FrameReceiverConfig& video_config,
- transport::PacketSender* const packet_sender);
+ PacketSender* const packet_sender);
virtual ~CastReceiverImpl();
// CastReceiver implementation.
- virtual transport::PacketReceiverCallback packet_receiver() OVERRIDE;
+ virtual PacketReceiverCallback packet_receiver() OVERRIDE;
virtual void RequestDecodedAudioFrame(
const AudioFrameDecodedCallback& callback) OVERRIDE;
virtual void RequestEncodedAudioFrame(
@@ -51,13 +51,13 @@ class CastReceiverImpl : public CastReceiver {
// uses this as a callback for RequestEncodedAudioFrame().
void DecodeEncodedAudioFrame(
const AudioFrameDecodedCallback& callback,
- scoped_ptr<transport::EncodedFrame> encoded_frame);
+ scoped_ptr<EncodedFrame> encoded_frame);
// Feeds an EncodedFrame into |video_decoder_|. RequestDecodedVideoFrame()
// uses this as a callback for RequestEncodedVideoFrame().
void DecodeEncodedVideoFrame(
const VideoFrameDecodedCallback& callback,
- scoped_ptr<transport::EncodedFrame> encoded_frame);
+ scoped_ptr<EncodedFrame> encoded_frame);
// Receives an AudioBus from |audio_decoder_|, logs the event, and passes the
// data on by running the given |callback|. This method is static to ensure
@@ -88,7 +88,7 @@ class CastReceiverImpl : public CastReceiver {
bool is_continuous);
const scoped_refptr<CastEnvironment> cast_environment_;
- transport::PacedSender pacer_;
+ PacedSender pacer_;
FrameReceiver audio_receiver_;
FrameReceiver video_receiver_;
@@ -102,8 +102,8 @@ class CastReceiverImpl : public CastReceiver {
// the internal software-based decoders.
const int num_audio_channels_;
const int audio_sampling_rate_;
- const transport::AudioCodec audio_codec_;
- const transport::VideoCodec video_codec_;
+ const Codec audio_codec_;
+ const Codec video_codec_;
// Created on-demand to decode frames from |audio_receiver_| into AudioBuses
// for playback.
diff --git a/media/cast/receiver/frame_receiver.cc b/media/cast/receiver/frame_receiver.cc
index e189cc99a7..951e958b80 100644
--- a/media/cast/receiver/frame_receiver.cc
+++ b/media/cast/receiver/frame_receiver.cc
@@ -23,7 +23,7 @@ FrameReceiver::FrameReceiver(
const scoped_refptr<CastEnvironment>& cast_environment,
const FrameReceiverConfig& config,
EventMediaType event_media_type,
- transport::PacedPacketSender* const packet_sender)
+ PacedPacketSender* const packet_sender)
: cast_environment_(cast_environment),
packet_parser_(config.incoming_ssrc, config.rtp_payload_type),
stats_(cast_environment->Clock()),
@@ -193,8 +193,8 @@ void FrameReceiver::EmitAvailableEncodedFrames() {
// Attempt to peek at the next completed frame from the |framer_|.
// TODO(miu): We should only be peeking at the metadata, and not copying the
// payload yet! Or, at least, peek using a StringPiece instead of a copy.
- scoped_ptr<transport::EncodedFrame> encoded_frame(
- new transport::EncodedFrame());
+ scoped_ptr<EncodedFrame> encoded_frame(
+ new EncodedFrame());
bool is_consecutively_next_frame = false;
bool have_multiple_complete_frames = false;
if (!framer_.GetEncodedFrame(encoded_frame.get(),
@@ -239,7 +239,7 @@ void FrameReceiver::EmitAvailableEncodedFrames() {
}
// Decrypt the payload data in the frame, if crypto is being used.
- if (decryptor_.initialized()) {
+ if (decryptor_.is_activated()) {
std::string decrypted_data;
if (!decryptor_.Decrypt(encoded_frame->frame_id,
encoded_frame->data,
diff --git a/media/cast/receiver/frame_receiver.h b/media/cast/receiver/frame_receiver.h
index ac14ab1e0f..f8e4481db2 100644
--- a/media/cast/receiver/frame_receiver.h
+++ b/media/cast/receiver/frame_receiver.h
@@ -9,17 +9,17 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
-#include "media/cast/base/clock_drift_smoother.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_receiver.h"
-#include "media/cast/framer/framer.h"
+#include "media/cast/common/clock_drift_smoother.h"
+#include "media/cast/common/transport_encryption_handler.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_receiver/receiver_stats.h"
-#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
-#include "media/cast/transport/utility/transport_encryption_handler.h"
+#include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/net/rtp/framer.h"
+#include "media/cast/net/rtp/receiver_stats.h"
+#include "media/cast/net/rtp/rtp_parser.h"
+#include "media/cast/net/rtp/rtp_receiver_defines.h"
namespace media {
namespace cast {
@@ -50,7 +50,7 @@ class FrameReceiver : public RtpPayloadFeedback,
FrameReceiver(const scoped_refptr<CastEnvironment>& cast_environment,
const FrameReceiverConfig& config,
EventMediaType event_media_type,
- transport::PacedPacketSender* const packet_sender);
+ PacedPacketSender* const packet_sender);
virtual ~FrameReceiver();
@@ -152,7 +152,7 @@ class FrameReceiver : public RtpPayloadFeedback,
Rtcp rtcp_;
// Decrypts encrypted frames.
- transport::TransportEncryptionHandler decryptor_;
+ TransportEncryptionHandler decryptor_;
// Outstanding callbacks to run to deliver on client requests for frames.
std::list<ReceiveEncodedFrameCallback> frame_request_queue_;
diff --git a/media/cast/receiver/frame_receiver_unittest.cc b/media/cast/receiver/frame_receiver_unittest.cc
index 4d8273e132..121d12e812 100644
--- a/media/cast/receiver/frame_receiver_unittest.cc
+++ b/media/cast/receiver/frame_receiver_unittest.cc
@@ -12,11 +12,11 @@
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/pacing/mock_paced_packet_sender.h"
+#include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/receiver/frame_receiver.h"
-#include "media/cast/rtcp/test_rtcp_packet_builder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/utility/default_config.h"
-#include "media/cast/transport/pacing/mock_paced_packet_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
using ::testing::_;
@@ -41,7 +41,7 @@ class FakeFrameClient {
std::make_pair(expected_frame_id, expected_playout_time));
}
- void DeliverEncodedFrame(scoped_ptr<transport::EncodedFrame> frame) {
+ void DeliverEncodedFrame(scoped_ptr<EncodedFrame> frame) {
SCOPED_TRACE(::testing::Message() << "num_called_ is " << num_called_);
ASSERT_FALSE(!frame)
<< "If at shutdown: There were unsatisfied requests enqueued.";
@@ -136,7 +136,7 @@ class FrameReceiverTest : public ::testing::Test {
RtpCastHeader rtp_header_;
base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
base::TimeTicks start_time_;
- transport::MockPacedPacketSender mock_transport_;
+ MockPacedPacketSender mock_transport_;
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
scoped_refptr<CastEnvironment> cast_environment_;
FakeFrameClient frame_client_;
diff --git a/media/cast/receiver/video_decoder.cc b/media/cast/receiver/video_decoder.cc
index 6db3fd35f3..f4de9c3b31 100644
--- a/media/cast/receiver/video_decoder.cc
+++ b/media/cast/receiver/video_decoder.cc
@@ -30,7 +30,7 @@ class VideoDecoder::ImplBase
: public base::RefCountedThreadSafe<VideoDecoder::ImplBase> {
public:
ImplBase(const scoped_refptr<CastEnvironment>& cast_environment,
- transport::VideoCodec codec)
+ Codec codec)
: cast_environment_(cast_environment),
codec_(codec),
cast_initialization_status_(STATUS_VIDEO_UNINITIALIZED),
@@ -40,7 +40,7 @@ class VideoDecoder::ImplBase
return cast_initialization_status_;
}
- void DecodeFrame(scoped_ptr<transport::EncodedFrame> encoded_frame,
+ void DecodeFrame(scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback) {
DCHECK_EQ(cast_initialization_status_, STATUS_VIDEO_INITIALIZED);
@@ -77,7 +77,7 @@ class VideoDecoder::ImplBase
virtual scoped_refptr<VideoFrame> Decode(uint8* data, int len) = 0;
const scoped_refptr<CastEnvironment> cast_environment_;
- const transport::VideoCodec codec_;
+ const Codec codec_;
// Subclass' ctor is expected to set this to STATUS_VIDEO_INITIALIZED.
CastInitializationStatus cast_initialization_status_;
@@ -92,7 +92,7 @@ class VideoDecoder::ImplBase
class VideoDecoder::Vp8Impl : public VideoDecoder::ImplBase {
public:
explicit Vp8Impl(const scoped_refptr<CastEnvironment>& cast_environment)
- : ImplBase(cast_environment, transport::kVp8) {
+ : ImplBase(cast_environment, CODEC_VIDEO_VP8) {
if (ImplBase::cast_initialization_status_ != STATUS_VIDEO_UNINITIALIZED)
return;
@@ -173,7 +173,7 @@ class VideoDecoder::Vp8Impl : public VideoDecoder::ImplBase {
class VideoDecoder::FakeImpl : public VideoDecoder::ImplBase {
public:
explicit FakeImpl(const scoped_refptr<CastEnvironment>& cast_environment)
- : ImplBase(cast_environment, transport::kFakeSoftwareVideo),
+ : ImplBase(cast_environment, CODEC_VIDEO_FAKE),
last_decoded_id_(-1) {
if (ImplBase::cast_initialization_status_ != STATUS_VIDEO_UNINITIALIZED)
return;
@@ -184,9 +184,14 @@ class VideoDecoder::FakeImpl : public VideoDecoder::ImplBase {
virtual ~FakeImpl() {}
virtual scoped_refptr<VideoFrame> Decode(uint8* data, int len) OVERRIDE {
+ // Make sure this is a JSON string.
+ if (!len || data[0] != '{')
+ return NULL;
base::JSONReader reader;
scoped_ptr<base::Value> values(
- reader.Read(base::StringPiece(reinterpret_cast<char*>(data))));
+ reader.Read(base::StringPiece(reinterpret_cast<char*>(data), len)));
+ if (!values)
+ return NULL;
base::DictionaryValue* dict = NULL;
values->GetAsDictionary(&dict);
@@ -209,18 +214,18 @@ class VideoDecoder::FakeImpl : public VideoDecoder::ImplBase {
VideoDecoder::VideoDecoder(
const scoped_refptr<CastEnvironment>& cast_environment,
- transport::VideoCodec codec)
+ Codec codec)
: cast_environment_(cast_environment) {
switch (codec) {
#ifndef OFFICIAL_BUILD
- case transport::kFakeSoftwareVideo:
+ case CODEC_VIDEO_FAKE:
impl_ = new FakeImpl(cast_environment);
break;
#endif
- case transport::kVp8:
+ case CODEC_VIDEO_VP8:
impl_ = new Vp8Impl(cast_environment);
break;
- case transport::kH264:
+ case CODEC_VIDEO_H264:
// TODO(miu): Need implementation.
NOTIMPLEMENTED();
break;
@@ -239,7 +244,7 @@ CastInitializationStatus VideoDecoder::InitializationResult() const {
}
void VideoDecoder::DecodeFrame(
- scoped_ptr<transport::EncodedFrame> encoded_frame,
+ scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback) {
DCHECK(encoded_frame.get());
DCHECK(!callback.is_null());
diff --git a/media/cast/receiver/video_decoder.h b/media/cast/receiver/video_decoder.h
index 66dc36bb2a..f3d8ca202e 100644
--- a/media/cast/receiver/video_decoder.h
+++ b/media/cast/receiver/video_decoder.h
@@ -10,7 +10,7 @@
#include "base/memory/scoped_ptr.h"
#include "media/base/video_frame.h"
#include "media/cast/cast_config.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace media {
namespace cast {
@@ -28,7 +28,7 @@ class VideoDecoder {
bool is_continuous)> DecodeFrameCallback;
VideoDecoder(const scoped_refptr<CastEnvironment>& cast_environment,
- transport::VideoCodec codec);
+ Codec codec);
virtual ~VideoDecoder();
// Returns STATUS_VIDEO_INITIALIZED if the decoder was successfully
@@ -43,7 +43,7 @@ class VideoDecoder {
// monotonically-increasing by 1 for each successive call to this method.
// When it is not, the decoder will assume one or more frames have been
// dropped (e.g., due to packet loss), and will perform recovery actions.
- void DecodeFrame(scoped_ptr<transport::EncodedFrame> encoded_frame,
+ void DecodeFrame(scoped_ptr<EncodedFrame> encoded_frame,
const DecodeFrameCallback& callback);
private:
diff --git a/media/cast/receiver/video_decoder_unittest.cc b/media/cast/receiver/video_decoder_unittest.cc
index 1d16534b96..c7c39ad2d0 100644
--- a/media/cast/receiver/video_decoder_unittest.cc
+++ b/media/cast/receiver/video_decoder_unittest.cc
@@ -11,9 +11,9 @@
#include "base/time/time.h"
#include "media/cast/cast_config.h"
#include "media/cast/receiver/video_decoder.h"
+#include "media/cast/sender/vp8_encoder.h"
#include "media/cast/test/utility/standalone_cast_environment.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -35,8 +35,7 @@ VideoSenderConfig GetVideoSenderConfigForTest() {
} // namespace
-class VideoDecoderTest
- : public ::testing::TestWithParam<transport::VideoCodec> {
+class VideoDecoderTest : public ::testing::TestWithParam<Codec> {
public:
VideoDecoderTest()
: cast_environment_(new StandaloneCastEnvironment()),
@@ -74,9 +73,10 @@ class VideoDecoderTest
PopulateVideoFrame(video_frame, 0);
// Encode |frame| into |encoded_frame->data|.
- scoped_ptr<transport::EncodedFrame> encoded_frame(
- new transport::EncodedFrame());
- CHECK_EQ(transport::kVp8, GetParam()); // Only support VP8 test currently.
+ scoped_ptr<EncodedFrame> encoded_frame(
+ new EncodedFrame());
+ // Test only supports VP8, currently.
+ CHECK_EQ(CODEC_VIDEO_VP8, GetParam());
vp8_encoder_.Encode(video_frame, encoded_frame.get());
encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames;
last_frame_id_ = encoded_frame->frame_id;
@@ -177,7 +177,7 @@ TEST_P(VideoDecoderTest, RecoversFromDroppedFrames) {
INSTANTIATE_TEST_CASE_P(VideoDecoderTestScenarios,
VideoDecoderTest,
- ::testing::Values(transport::kVp8));
+ ::testing::Values(CODEC_VIDEO_VP8));
} // namespace cast
} // namespace media
diff --git a/media/cast/audio_sender/audio_encoder.cc b/media/cast/sender/audio_encoder.cc
index 8860c7dd2d..83bd594fb6 100644
--- a/media/cast/audio_sender/audio_encoder.cc
+++ b/media/cast/sender/audio_encoder.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/audio_sender/audio_encoder.h"
+#include "media/cast/sender/audio_encoder.h"
#include <algorithm>
@@ -44,7 +44,7 @@ class AudioEncoder::ImplBase
: public base::RefCountedThreadSafe<AudioEncoder::ImplBase> {
public:
ImplBase(const scoped_refptr<CastEnvironment>& cast_environment,
- transport::AudioCodec codec,
+ Codec codec,
int num_channels,
int sampling_rate,
const FrameEncodedCallback& callback)
@@ -117,9 +117,9 @@ class AudioEncoder::ImplBase
if (buffer_fill_end_ < samples_per_frame_)
break;
- scoped_ptr<transport::EncodedFrame> audio_frame(
- new transport::EncodedFrame());
- audio_frame->dependency = transport::EncodedFrame::KEY;
+ scoped_ptr<EncodedFrame> audio_frame(
+ new EncodedFrame());
+ audio_frame->dependency = EncodedFrame::KEY;
audio_frame->frame_id = frame_id_;
audio_frame->referenced_frame_id = frame_id_;
audio_frame->rtp_timestamp = frame_rtp_timestamp_;
@@ -151,7 +151,7 @@ class AudioEncoder::ImplBase
virtual bool EncodeFromFilledBuffer(std::string* out) = 0;
const scoped_refptr<CastEnvironment> cast_environment_;
- const transport::AudioCodec codec_;
+ const Codec codec_;
const int num_channels_;
const int samples_per_frame_;
const FrameEncodedCallback callback_;
@@ -193,7 +193,7 @@ class AudioEncoder::OpusImpl : public AudioEncoder::ImplBase {
int bitrate,
const FrameEncodedCallback& callback)
: ImplBase(cast_environment,
- transport::kOpus,
+ CODEC_AUDIO_OPUS,
num_channels,
sampling_rate,
callback),
@@ -283,7 +283,7 @@ class AudioEncoder::Pcm16Impl : public AudioEncoder::ImplBase {
int sampling_rate,
const FrameEncodedCallback& callback)
: ImplBase(cast_environment,
- transport::kPcm16,
+ CODEC_AUDIO_PCM16,
num_channels,
sampling_rate,
callback),
@@ -326,24 +326,27 @@ class AudioEncoder::Pcm16Impl : public AudioEncoder::ImplBase {
AudioEncoder::AudioEncoder(
const scoped_refptr<CastEnvironment>& cast_environment,
- const AudioSenderConfig& audio_config,
+ int num_channels,
+ int sampling_rate,
+ int bitrate,
+ Codec codec,
const FrameEncodedCallback& frame_encoded_callback)
: cast_environment_(cast_environment) {
// Note: It doesn't matter which thread constructs AudioEncoder, just so long
// as all calls to InsertAudio() are by the same thread.
insert_thread_checker_.DetachFromThread();
- switch (audio_config.codec) {
- case transport::kOpus:
+ switch (codec) {
+ case CODEC_AUDIO_OPUS:
impl_ = new OpusImpl(cast_environment,
- audio_config.channels,
- audio_config.frequency,
- audio_config.bitrate,
+ num_channels,
+ sampling_rate,
+ bitrate,
frame_encoded_callback);
break;
- case transport::kPcm16:
+ case CODEC_AUDIO_PCM16:
impl_ = new Pcm16Impl(cast_environment,
- audio_config.channels,
- audio_config.frequency,
+ num_channels,
+ sampling_rate,
frame_encoded_callback);
break;
default:
diff --git a/media/cast/audio_sender/audio_encoder.h b/media/cast/sender/audio_encoder.h
index 2297672b74..5f080c6cb6 100644
--- a/media/cast/audio_sender/audio_encoder.h
+++ b/media/cast/sender/audio_encoder.h
@@ -1,15 +1,14 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_AUDIO_SENDER_AUDIO_ENCODER_H_
-#define MEDIA_CAST_AUDIO_SENDER_AUDIO_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_AUDIO_ENCODER_H_
+#define MEDIA_CAST_SENDER_AUDIO_ENCODER_H_
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/thread_checker.h"
#include "media/base/audio_bus.h"
-#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
namespace base {
@@ -21,11 +20,14 @@ namespace cast {
class AudioEncoder {
public:
- typedef base::Callback<void(scoped_ptr<transport::EncodedFrame>)>
+ typedef base::Callback<void(scoped_ptr<EncodedFrame>)>
FrameEncodedCallback;
AudioEncoder(const scoped_refptr<CastEnvironment>& cast_environment,
- const AudioSenderConfig& audio_config,
+ int num_channels,
+ int sampling_rate,
+ int bitrate,
+ Codec codec,
const FrameEncodedCallback& frame_encoded_callback);
virtual ~AudioEncoder();
@@ -51,4 +53,4 @@ class AudioEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_AUDIO_SENDER_AUDIO_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_AUDIO_ENCODER_H_
diff --git a/media/cast/audio_sender/audio_encoder_unittest.cc b/media/cast/sender/audio_encoder_unittest.cc
index b521099243..0764148a4c 100644
--- a/media/cast/audio_sender/audio_encoder_unittest.cc
+++ b/media/cast/sender/audio_encoder_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,9 +12,8 @@
#include "base/memory/scoped_ptr.h"
#include "media/base/audio_bus.h"
#include "media/base/media.h"
-#include "media/cast/audio_sender/audio_encoder.h"
-#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
+#include "media/cast/sender/audio_encoder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/utility/audio_utility.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -22,13 +21,13 @@
namespace media {
namespace cast {
-static const int64 kStartMillisecond = INT64_C(12345678900000);
+static const int kNumChannels = 2;
namespace {
class TestEncodedAudioFrameReceiver {
public:
- explicit TestEncodedAudioFrameReceiver(transport::AudioCodec codec)
+ explicit TestEncodedAudioFrameReceiver(Codec codec)
: codec_(codec), frames_received_(0), rtp_lower_bound_(0) {}
virtual ~TestEncodedAudioFrameReceiver() {}
@@ -40,8 +39,8 @@ class TestEncodedAudioFrameReceiver {
upper_bound_ = upper_bound;
}
- void FrameEncoded(scoped_ptr<transport::EncodedFrame> encoded_frame) {
- EXPECT_EQ(encoded_frame->dependency, transport::EncodedFrame::KEY);
+ void FrameEncoded(scoped_ptr<EncodedFrame> encoded_frame) {
+ EXPECT_EQ(encoded_frame->dependency, EncodedFrame::KEY);
EXPECT_EQ(static_cast<uint8>(frames_received_ & 0xff),
encoded_frame->frame_id);
EXPECT_EQ(encoded_frame->frame_id, encoded_frame->referenced_frame_id);
@@ -62,7 +61,7 @@ class TestEncodedAudioFrameReceiver {
}
private:
- const transport::AudioCodec codec_;
+ const Codec codec_;
int frames_received_;
uint32 rtp_lower_bound_;
base::TimeTicks lower_bound_;
@@ -96,8 +95,7 @@ class AudioEncoderTest : public ::testing::TestWithParam<TestScenario> {
AudioEncoderTest() {
InitializeMediaLibraryForTesting();
testing_clock_ = new base::SimpleTestTickClock();
- testing_clock_->Advance(
- base::TimeDelta::FromMilliseconds(kStartMillisecond));
+ testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
}
virtual void SetUp() {
@@ -111,7 +109,7 @@ class AudioEncoderTest : public ::testing::TestWithParam<TestScenario> {
virtual ~AudioEncoderTest() {}
- void RunTestForCodec(transport::AudioCodec codec) {
+ void RunTestForCodec(Codec codec) {
const TestScenario& scenario = GetParam();
SCOPED_TRACE(::testing::Message() << "Durations: " << scenario.ToString());
@@ -144,18 +142,10 @@ class AudioEncoderTest : public ::testing::TestWithParam<TestScenario> {
}
private:
- void CreateObjectsForCodec(transport::AudioCodec codec) {
- AudioSenderConfig audio_config;
- audio_config.codec = codec;
- audio_config.use_external_encoder = false;
- audio_config.frequency = kDefaultAudioSamplingRate;
- audio_config.channels = 2;
- audio_config.bitrate = kDefaultAudioEncoderBitrate;
- audio_config.rtp_config.payload_type = 127;
-
+ void CreateObjectsForCodec(Codec codec) {
audio_bus_factory_.reset(
- new TestAudioBusFactory(audio_config.channels,
- audio_config.frequency,
+ new TestAudioBusFactory(kNumChannels,
+ kDefaultAudioSamplingRate,
TestAudioBusFactory::kMiddleANoteFreq,
0.5f));
@@ -163,7 +153,10 @@ class AudioEncoderTest : public ::testing::TestWithParam<TestScenario> {
audio_encoder_.reset(new AudioEncoder(
cast_environment_,
- audio_config,
+ kNumChannels,
+ kDefaultAudioSamplingRate,
+ kDefaultAudioEncoderBitrate,
+ codec,
base::Bind(&TestEncodedAudioFrameReceiver::FrameEncoded,
base::Unretained(receiver_.get()))));
}
@@ -178,9 +171,13 @@ class AudioEncoderTest : public ::testing::TestWithParam<TestScenario> {
DISALLOW_COPY_AND_ASSIGN(AudioEncoderTest);
};
-TEST_P(AudioEncoderTest, EncodeOpus) { RunTestForCodec(transport::kOpus); }
+TEST_P(AudioEncoderTest, EncodeOpus) {
+ RunTestForCodec(CODEC_AUDIO_OPUS);
+}
-TEST_P(AudioEncoderTest, EncodePcm16) { RunTestForCodec(transport::kPcm16); }
+TEST_P(AudioEncoderTest, EncodePcm16) {
+ RunTestForCodec(CODEC_AUDIO_PCM16);
+}
static const int64 kOneCall_3Millis[] = {3};
static const int64 kOneCall_10Millis[] = {10};
diff --git a/media/cast/audio_sender/audio_sender.cc b/media/cast/sender/audio_sender.cc
index 878f3456c8..7c7c696125 100644
--- a/media/cast/audio_sender/audio_sender.cc
+++ b/media/cast/sender/audio_sender.cc
@@ -1,19 +1,20 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/audio_sender/audio_sender.h"
+#include "media/cast/sender/audio_sender.h"
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
-#include "media/cast/audio_sender/audio_encoder.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/sender/audio_encoder.h"
namespace media {
namespace cast {
+namespace {
const int kNumAggressiveReportsSentAtStart = 100;
const int kMinSchedulingDelayMs = 1;
@@ -23,18 +24,25 @@ const int kMinSchedulingDelayMs = 1;
// well.
const int kAudioFrameRate = 100;
+// Helper function to compute the maximum unacked audio frames that is sent.
+int GetMaxUnackedFrames(base::TimeDelta target_delay) {
+ // As long as it doesn't go over |kMaxUnackedFrames|, it is okay to send more
+ // audio data than the target delay would suggest. Audio packets are tiny and
+ // receiver has the ability to drop any one of the packets.
+ // We send up to three times of the target delay of audio frames.
+ int frames =
+ 1 + 3 * target_delay * kAudioFrameRate / base::TimeDelta::FromSeconds(1);
+ return std::min(kMaxUnackedFrames, frames);
+}
+} // namespace
+
AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment,
const AudioSenderConfig& audio_config,
- transport::CastTransportSender* const transport_sender)
+ CastTransportSender* const transport_sender)
: cast_environment_(cast_environment),
- target_playout_delay_(base::TimeDelta::FromMilliseconds(
- audio_config.rtp_config.max_delay_ms)),
+ target_playout_delay_(audio_config.target_playout_delay),
transport_sender_(transport_sender),
- max_unacked_frames_(
- std::min(kMaxUnackedFrames,
- 1 + static_cast<int>(target_playout_delay_ *
- kAudioFrameRate /
- base::TimeDelta::FromSeconds(1)))),
+ max_unacked_frames_(GetMaxUnackedFrames(target_playout_delay_)),
configured_encoder_bitrate_(audio_config.bitrate),
rtcp_(cast_environment,
this,
@@ -43,7 +51,7 @@ AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment,
NULL,
audio_config.rtcp_mode,
base::TimeDelta::FromMilliseconds(audio_config.rtcp_interval),
- audio_config.rtp_config.ssrc,
+ audio_config.ssrc,
audio_config.incoming_feedback_ssrc,
audio_config.rtcp_c_name,
AUDIO_EVENT),
@@ -60,7 +68,10 @@ AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment,
if (!audio_config.use_external_encoder) {
audio_encoder_.reset(
new AudioEncoder(cast_environment,
- audio_config,
+ audio_config.channels,
+ audio_config.frequency,
+ audio_config.bitrate,
+ audio_config.codec,
base::Bind(&AudioSender::SendEncodedAudioFrame,
weak_factory_.GetWeakPtr())));
cast_initialization_status_ = audio_encoder_->InitializationResult();
@@ -69,12 +80,14 @@ AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment,
cast_initialization_status_ = STATUS_AUDIO_UNINITIALIZED;
}
- media::cast::transport::CastTransportAudioConfig transport_config;
- transport_config.codec = audio_config.codec;
- transport_config.rtp.config = audio_config.rtp_config;
- transport_config.frequency = audio_config.frequency;
- transport_config.channels = audio_config.channels;
- transport_config.rtp.max_outstanding_frames = max_unacked_frames_;
+ media::cast::CastTransportRtpConfig transport_config;
+ transport_config.ssrc = audio_config.ssrc;
+ transport_config.rtp_payload_type = audio_config.rtp_payload_type;
+ // TODO(miu): AudioSender needs to be like VideoSender in providing an upper
+ // limit on the number of in-flight frames.
+ transport_config.stored_frames = max_unacked_frames_;
+ transport_config.aes_key = audio_config.aes_key;
+ transport_config.aes_iv_mask = audio_config.aes_iv_mask;
transport_sender_->InitializeAudio(transport_config);
rtcp_.SetCastReceiverEventHistorySize(kReceiverRtcpEventHistorySize);
@@ -102,7 +115,7 @@ void AudioSender::InsertAudio(scoped_ptr<AudioBus> audio_bus,
}
void AudioSender::SendEncodedAudioFrame(
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
const uint32 frame_id = encoded_frame->frame_id;
@@ -121,7 +134,7 @@ void AudioSender::SendEncodedAudioFrame(
cast_environment_->Logging()->InsertEncodedFrameEvent(
last_send_time_, FRAME_ENCODED, AUDIO_EVENT, encoded_frame->rtp_timestamp,
frame_id, static_cast<int>(encoded_frame->data.size()),
- encoded_frame->dependency == transport::EncodedFrame::KEY,
+ encoded_frame->dependency == EncodedFrame::KEY,
configured_encoder_bitrate_);
// Only use lowest 8 bits as key.
frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp;
diff --git a/media/cast/audio_sender/audio_sender.h b/media/cast/sender/audio_sender.h
index 80cf8a4e9e..efaa2b3d03 100644
--- a/media/cast/audio_sender/audio_sender.h
+++ b/media/cast/sender/audio_sender.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_AUDIO_SENDER_H_
-#define MEDIA_CAST_AUDIO_SENDER_H_
+#ifndef MEDIA_CAST_SENDER_AUDIO_SENDER_H_
+#define MEDIA_CAST_SENDER_AUDIO_SENDER_H_
#include "base/callback.h"
#include "base/memory/ref_counted.h"
@@ -16,8 +16,8 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_timestamp_helper.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/sender/rtp_timestamp_helper.h"
namespace media {
namespace cast {
@@ -36,7 +36,7 @@ class AudioSender : public RtcpSenderFeedback,
public:
AudioSender(scoped_refptr<CastEnvironment> cast_environment,
const AudioSenderConfig& audio_config,
- transport::CastTransportSender* const transport_sender);
+ CastTransportSender* const transport_sender);
virtual ~AudioSender();
@@ -82,7 +82,7 @@ class AudioSender : public RtcpSenderFeedback,
bool AreTooManyFramesInFlight() const;
// Called by the |audio_encoder_| with the next EncodedFrame to send.
- void SendEncodedAudioFrame(scoped_ptr<transport::EncodedFrame> audio_frame);
+ void SendEncodedAudioFrame(scoped_ptr<EncodedFrame> audio_frame);
const scoped_refptr<CastEnvironment> cast_environment_;
@@ -99,7 +99,7 @@ class AudioSender : public RtcpSenderFeedback,
// process to the browser process over IPC, with the browser process being
// responsible for "packetizing" the frames and pushing packets into the
// network layer.
- transport::CastTransportSender* const transport_sender_;
+ CastTransportSender* const transport_sender_;
// Maximum number of outstanding frames before the encoding and sending of
// new frames shall halt.
@@ -159,4 +159,4 @@ class AudioSender : public RtcpSenderFeedback,
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_AUDIO_SENDER_H_
+#endif // MEDIA_CAST_SENDER_AUDIO_SENDER_H_
diff --git a/media/cast/audio_sender/audio_sender_unittest.cc b/media/cast/sender/audio_sender_unittest.cc
index 51edd49602..ab923811aa 100644
--- a/media/cast/audio_sender/audio_sender_unittest.cc
+++ b/media/cast/sender/audio_sender_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -9,24 +9,24 @@
#include "base/memory/scoped_ptr.h"
#include "base/test/simple_test_tick_clock.h"
#include "media/base/media.h"
-#include "media/cast/audio_sender/audio_sender.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/rtcp/rtcp.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/sender/audio_sender.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/utility/audio_utility.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
namespace cast {
-class TestPacketSender : public transport::PacketSender {
+class TestPacketSender : public PacketSender {
public:
TestPacketSender() : number_of_rtp_packets_(0), number_of_rtcp_packets_(0) {}
- virtual bool SendPacket(transport::PacketRef packet,
+ virtual bool SendPacket(PacketRef packet,
const base::Closure& cb) OVERRIDE {
if (Rtcp::IsRtcpPacket(&packet->data[0], packet->data.size())) {
++number_of_rtcp_packets_;
@@ -65,21 +65,21 @@ class AudioSenderTest : public ::testing::Test {
task_runner_,
task_runner_,
task_runner_);
- audio_config_.codec = transport::kOpus;
+ audio_config_.codec = CODEC_AUDIO_OPUS;
audio_config_.use_external_encoder = false;
audio_config_.frequency = kDefaultAudioSamplingRate;
audio_config_.channels = 2;
audio_config_.bitrate = kDefaultAudioEncoderBitrate;
- audio_config_.rtp_config.payload_type = 127;
+ audio_config_.rtp_payload_type = 127;
net::IPEndPoint dummy_endpoint;
- transport_sender_.reset(new transport::CastTransportSenderImpl(
+ transport_sender_.reset(new CastTransportSenderImpl(
NULL,
testing_clock_,
dummy_endpoint,
base::Bind(&UpdateCastTransportStatus),
- transport::BulkRawEventsCallback(),
+ BulkRawEventsCallback(),
base::TimeDelta(),
task_runner_,
&transport_));
@@ -90,13 +90,13 @@ class AudioSenderTest : public ::testing::Test {
virtual ~AudioSenderTest() {}
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- EXPECT_EQ(transport::TRANSPORT_AUDIO_INITIALIZED, status);
+ static void UpdateCastTransportStatus(CastTransportStatus status) {
+ EXPECT_EQ(TRANSPORT_AUDIO_INITIALIZED, status);
}
base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
TestPacketSender transport_;
- scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
+ scoped_ptr<CastTransportSenderImpl> transport_sender_;
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
scoped_ptr<AudioSender> audio_sender_;
scoped_refptr<CastEnvironment> cast_environment_;
diff --git a/media/cast/congestion_control/congestion_control.cc b/media/cast/sender/congestion_control.cc
index d24e0ac3d0..70fcfe9dc9 100644
--- a/media/cast/congestion_control/congestion_control.cc
+++ b/media/cast/sender/congestion_control.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,7 +13,7 @@
// If we estimate that our virtual buffer is mostly empty, we try to use
// more bandwidth than our recent usage, otherwise we use less.
-#include "media/cast/congestion_control/congestion_control.h"
+#include "media/cast/sender/congestion_control.h"
#include "base/logging.h"
#include "media/cast/cast_config.h"
@@ -59,8 +59,7 @@ CongestionControl::CongestionControl(base::TickClock* clock,
CongestionControl::~CongestionControl() {}
void CongestionControl::UpdateRtt(base::TimeDelta rtt) {
- rtt_ = base::TimeDelta::FromSecondsD(
- (rtt_.InSecondsF() * 7 + rtt.InSecondsF()) / 8);
+ rtt_ = (7 * rtt_ + rtt) / 8;
}
// Calculate how much "dead air" there is between two frames.
diff --git a/media/cast/congestion_control/congestion_control.h b/media/cast/sender/congestion_control.h
index 54622ab114..8537037c71 100644
--- a/media/cast/congestion_control/congestion_control.h
+++ b/media/cast/sender/congestion_control.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -54,7 +54,7 @@ class CongestionControl {
// Get the FrameStats for a given |frame_id|.
// Note: Older FrameStats will be removed automatically.
FrameStats* GetFrameStats(uint32 frame_id);
- // Calculata safe bitrate. This is based on how much we've been
+ // Calculate a safe bitrate. This is based on how much we've been
// sending in the past.
double CalculateSafeBitrate();
@@ -63,7 +63,7 @@ class CongestionControl {
base::TimeTicks EstimatedAckTime(uint32 frame_id, double bitrate);
// Calculate when we start sending the data for a given frame.
// This is done by calculating when we were done sending the previous
- // frame, but obvoiusly can't be less than |sent_time| (if known).
+ // frame, but obviously can't be less than |sent_time| (if known).
base::TimeTicks EstimatedSendingTime(uint32 frame_id, double bitrate);
base::TickClock* const clock_; // Not owned by this class.
diff --git a/media/cast/congestion_control/congestion_control_unittest.cc b/media/cast/sender/congestion_control_unittest.cc
index 5745eab21d..afdce0031f 100644
--- a/media/cast/congestion_control/congestion_control_unittest.cc
+++ b/media/cast/sender/congestion_control_unittest.cc
@@ -1,12 +1,13 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdint.h>
+#include "base/bind.h"
#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/congestion_control/congestion_control.h"
+#include "media/cast/sender/congestion_control.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/cast/video_sender/external_video_encoder.cc b/media/cast/sender/external_video_encoder.cc
index ca30bcd47a..e3abecd407 100644
--- a/media/cast/video_sender/external_video_encoder.cc
+++ b/media/cast/sender/external_video_encoder.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/video_sender/external_video_encoder.h"
+#include "media/cast/sender/external_video_encoder.h"
#include "base/bind.h"
#include "base/logging.h"
@@ -13,7 +13,7 @@
#include "media/base/video_util.h"
#include "media/cast/cast_defines.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
#include "media/video/video_encode_accelerator.h"
namespace media {
@@ -99,20 +99,19 @@ class LocalVideoEncodeAcceleratorClient
VideoCodecProfile output_profile = media::VIDEO_CODEC_PROFILE_UNKNOWN;
switch (video_config.codec) {
- case transport::kVp8:
+ case CODEC_VIDEO_VP8:
output_profile = media::VP8PROFILE_MAIN;
break;
- case transport::kH264:
+ case CODEC_VIDEO_H264:
output_profile = media::H264PROFILE_MAIN;
break;
- case transport::kFakeSoftwareVideo:
+ case CODEC_VIDEO_FAKE:
NOTREACHED() << "Fake software video encoder cannot be external";
break;
- case transport::kUnknownVideoCodec:
- NOTREACHED() << "Video codec not specified";
+ default:
+ NOTREACHED() << "Video codec not specified or not supported";
break;
}
- codec_ = video_config.codec;
max_frame_rate_ = video_config.max_frame_rate;
if (!video_encode_accelerator_->Initialize(
@@ -221,10 +220,10 @@ class LocalVideoEncodeAcceleratorClient
stream_header_.append(static_cast<const char*>(output_buffer->memory()),
payload_size);
} else if (!encoded_frame_data_storage_.empty()) {
- scoped_ptr<transport::EncodedFrame> encoded_frame(
- new transport::EncodedFrame());
- encoded_frame->dependency = key_frame ? transport::EncodedFrame::KEY :
- transport::EncodedFrame::DEPENDENT;
+ scoped_ptr<EncodedFrame> encoded_frame(
+ new EncodedFrame());
+ encoded_frame->dependency = key_frame ? EncodedFrame::KEY :
+ EncodedFrame::DEPENDENT;
encoded_frame->frame_id = ++last_encoded_frame_id_;
if (key_frame)
encoded_frame->referenced_frame_id = encoded_frame->frame_id;
@@ -313,7 +312,6 @@ class LocalVideoEncodeAcceleratorClient
const CreateVideoEncodeMemoryCallback create_video_encode_memory_cb_;
const base::WeakPtr<ExternalVideoEncoder> weak_owner_;
int max_frame_rate_;
- transport::VideoCodec codec_;
uint32 last_encoded_frame_id_;
bool key_frame_encountered_;
std::string stream_header_;
diff --git a/media/cast/video_sender/external_video_encoder.h b/media/cast/sender/external_video_encoder.h
index 29fe0c5fcd..84de7f08f4 100644
--- a/media/cast/video_sender/external_video_encoder.h
+++ b/media/cast/sender/external_video_encoder.h
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_EXTERNAL_VIDEO_ENCODER_H_
-#define MEDIA_CAST_VIDEO_SENDER_EXTERNAL_VIDEO_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_EXTERNAL_VIDEO_ENCODER_H_
+#define MEDIA_CAST_SENDER_EXTERNAL_VIDEO_ENCODER_H_
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/video_sender/video_encoder.h"
+#include "media/cast/sender/video_encoder.h"
#include "media/video/video_encode_accelerator.h"
namespace media {
@@ -83,4 +83,4 @@ class ExternalVideoEncoder : public VideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_EXTERNAL_VIDEO_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_EXTERNAL_VIDEO_ENCODER_H_
diff --git a/media/cast/video_sender/external_video_encoder_unittest.cc b/media/cast/sender/external_video_encoder_unittest.cc
index 853258ce30..0b446f866e 100644
--- a/media/cast/video_sender/external_video_encoder_unittest.cc
+++ b/media/cast/sender/external_video_encoder_unittest.cc
@@ -10,10 +10,10 @@
#include "media/base/video_frame.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
+#include "media/cast/sender/external_video_encoder.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/fake_video_encode_accelerator.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/video_sender/external_video_encoder.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -54,11 +54,11 @@ class TestVideoEncoderCallback
}
void DeliverEncodedVideoFrame(
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
if (expected_frame_id_ == expected_last_referenced_frame_id_) {
- EXPECT_EQ(transport::EncodedFrame::KEY, encoded_frame->dependency);
+ EXPECT_EQ(EncodedFrame::KEY, encoded_frame->dependency);
} else {
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT,
+ EXPECT_EQ(EncodedFrame::DEPENDENT,
encoded_frame->dependency);
}
EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id);
@@ -86,9 +86,9 @@ class ExternalVideoEncoderTest : public ::testing::Test {
protected:
ExternalVideoEncoderTest()
: test_video_encoder_callback_(new TestVideoEncoderCallback()) {
- video_config_.rtp_config.ssrc = 1;
+ video_config_.ssrc = 1;
video_config_.incoming_feedback_ssrc = 2;
- video_config_.rtp_config.payload_type = 127;
+ video_config_.rtp_payload_type = 127;
video_config_.use_external_encoder = true;
video_config_.width = 320;
video_config_.height = 240;
@@ -99,7 +99,7 @@ class ExternalVideoEncoderTest : public ::testing::Test {
video_config_.min_qp = 0;
video_config_.max_frame_rate = 30;
video_config_.max_number_of_video_buffers_used = 3;
- video_config_.codec = transport::kVp8;
+ video_config_.codec = CODEC_VIDEO_VP8;
gfx::Size size(video_config_.width, video_config_.height);
video_frame_ = media::VideoFrame::CreateFrame(
VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta());
diff --git a/media/cast/video_sender/fake_software_video_encoder.cc b/media/cast/sender/fake_software_video_encoder.cc
index 7c5c952641..bd96f78c89 100644
--- a/media/cast/video_sender/fake_software_video_encoder.cc
+++ b/media/cast/sender/fake_software_video_encoder.cc
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/video_sender/fake_software_video_encoder.h"
+#include "media/cast/sender/fake_software_video_encoder.h"
#include "base/json/json_writer.h"
#include "base/values.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
#ifndef OFFICIAL_BUILD
@@ -28,26 +28,26 @@ void FakeSoftwareVideoEncoder::Initialize() {}
bool FakeSoftwareVideoEncoder::Encode(
const scoped_refptr<media::VideoFrame>& video_frame,
- transport::EncodedFrame* encoded_image) {
+ EncodedFrame* encoded_image) {
encoded_image->frame_id = frame_id_++;
if (next_frame_is_key_) {
- encoded_image->dependency = transport::EncodedFrame::KEY;
+ encoded_image->dependency = EncodedFrame::KEY;
encoded_image->referenced_frame_id = encoded_image->frame_id;
next_frame_is_key_ = false;
} else {
- encoded_image->dependency = transport::EncodedFrame::DEPENDENT;
+ encoded_image->dependency = EncodedFrame::DEPENDENT;
encoded_image->referenced_frame_id = encoded_image->frame_id - 1;
}
base::DictionaryValue values;
values.SetBoolean("key",
- encoded_image->dependency == transport::EncodedFrame::KEY);
+ encoded_image->dependency == EncodedFrame::KEY);
values.SetInteger("ref", encoded_image->referenced_frame_id);
values.SetInteger("id", encoded_image->frame_id);
values.SetInteger("size", frame_size_);
base::JSONWriter::Write(&values, &encoded_image->data);
encoded_image->data.resize(
- std::max<size_t>(encoded_image->data.size(), frame_size_));
+ std::max<size_t>(encoded_image->data.size(), frame_size_), ' ');
return true;
}
diff --git a/media/cast/video_sender/fake_software_video_encoder.h b/media/cast/sender/fake_software_video_encoder.h
index 0eb88ddfe1..5491ae0cc8 100644
--- a/media/cast/video_sender/fake_software_video_encoder.h
+++ b/media/cast/sender/fake_software_video_encoder.h
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
-#define MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
+#define MEDIA_CAST_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
#include "media/cast/cast_config.h"
-#include "media/cast/video_sender/software_video_encoder.h"
+#include "media/cast/sender/software_video_encoder.h"
namespace media {
namespace cast {
@@ -19,7 +19,7 @@ class FakeSoftwareVideoEncoder : public SoftwareVideoEncoder {
// SoftwareVideoEncoder implementations.
virtual void Initialize() OVERRIDE;
virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
- transport::EncodedFrame* encoded_image) OVERRIDE;
+ EncodedFrame* encoded_image) OVERRIDE;
virtual void UpdateRates(uint32 new_bitrate) OVERRIDE;
virtual void GenerateKeyFrame() OVERRIDE;
virtual void LatestFrameIdToReference(uint32 frame_id) OVERRIDE;
@@ -35,4 +35,4 @@ class FakeSoftwareVideoEncoder : public SoftwareVideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
diff --git a/media/cast/rtp_timestamp_helper.cc b/media/cast/sender/rtp_timestamp_helper.cc
index 3349e7b33f..ea0c35c66f 100644
--- a/media/cast/rtp_timestamp_helper.cc
+++ b/media/cast/sender/rtp_timestamp_helper.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/rtp_timestamp_helper.h"
+#include "media/cast/sender/rtp_timestamp_helper.h"
namespace media {
namespace cast {
diff --git a/media/cast/rtp_timestamp_helper.h b/media/cast/sender/rtp_timestamp_helper.h
index b9c650c506..8f56681dac 100644
--- a/media/cast/rtp_timestamp_helper.h
+++ b/media/cast/sender/rtp_timestamp_helper.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_RTP_TIMESTAMP_HELPER_H_
-#define MEDIA_CAST_RTP_TIMESTAMP_HELPER_H_
+#ifndef MEDIA_CAST_SENDER_RTP_TIMESTAMP_HELPER_H_
+#define MEDIA_CAST_SENDER_RTP_TIMESTAMP_HELPER_H_
#include "base/basictypes.h"
#include "base/time/time.h"
@@ -38,4 +38,4 @@ class RtpTimestampHelper {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_CAST_DEFINES_H_
+#endif // MEDIA_CAST_SENDER_RTP_TIMESTAMP_HELPER_H_
diff --git a/media/cast/video_sender/software_video_encoder.h b/media/cast/sender/software_video_encoder.h
index f1bf6f6331..16c8cd3473 100644
--- a/media/cast/video_sender/software_video_encoder.h
+++ b/media/cast/sender/software_video_encoder.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
-#define MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_
+#define MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
@@ -14,9 +14,7 @@ class VideoFrame;
namespace media {
namespace cast {
-namespace transport {
struct EncodedFrame;
-} // namespace transport
class SoftwareVideoEncoder {
public:
@@ -28,7 +26,7 @@ class SoftwareVideoEncoder {
// Encode a raw image (as a part of a video stream).
virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
- transport::EncodedFrame* encoded_image) = 0;
+ EncodedFrame* encoded_image) = 0;
// Update the encoder with a new target bit rate.
virtual void UpdateRates(uint32 new_bitrate) = 0;
@@ -43,4 +41,4 @@ class SoftwareVideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_
diff --git a/media/cast/video_sender/video_encoder.h b/media/cast/sender/video_encoder.h
index c7b1049ce6..d788c7b2aa 100644
--- a/media/cast/video_sender/video_encoder.h
+++ b/media/cast/sender/video_encoder.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_H_
-#define MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_VIDEO_ENCODER_H_
+#define MEDIA_CAST_SENDER_VIDEO_ENCODER_H_
#include "base/callback.h"
#include "base/memory/ref_counted.h"
@@ -20,7 +20,7 @@ namespace cast {
// All these functions are called from the main cast thread.
class VideoEncoder {
public:
- typedef base::Callback<void(scoped_ptr<transport::EncodedFrame>)>
+ typedef base::Callback<void(scoped_ptr<EncodedFrame>)>
FrameEncodedCallback;
virtual ~VideoEncoder() {}
@@ -48,4 +48,4 @@ class VideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_VIDEO_ENCODER_H_
diff --git a/media/cast/video_sender/video_encoder_impl.cc b/media/cast/sender/video_encoder_impl.cc
index b90ef0f07e..d21649784e 100644
--- a/media/cast/video_sender/video_encoder_impl.cc
+++ b/media/cast/sender/video_encoder_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/video_sender/video_encoder_impl.h"
+#include "media/cast/sender/video_encoder_impl.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
@@ -11,8 +11,8 @@
#include "base/message_loop/message_loop.h"
#include "media/base/video_frame.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
-#include "media/cast/video_sender/fake_software_video_encoder.h"
+#include "media/cast/sender/fake_software_video_encoder.h"
+#include "media/cast/sender/vp8_encoder.h"
namespace media {
namespace cast {
@@ -43,8 +43,8 @@ void EncodeVideoFrameOnEncoderThread(
dynamic_config.latest_frame_id_to_reference);
encoder->UpdateRates(dynamic_config.bit_rate);
- scoped_ptr<transport::EncodedFrame> encoded_frame(
- new transport::EncodedFrame());
+ scoped_ptr<EncodedFrame> encoded_frame(
+ new EncodedFrame());
if (!encoder->Encode(video_frame, encoded_frame.get())) {
VLOG(1) << "Encoding failed";
return;
@@ -53,7 +53,7 @@ void EncodeVideoFrameOnEncoderThread(
VLOG(1) << "Encoding resulted in an empty frame";
return;
}
- encoded_frame->rtp_timestamp = transport::GetVideoRtpTimestamp(capture_time);
+ encoded_frame->rtp_timestamp = GetVideoRtpTimestamp(capture_time);
encoded_frame->reference_time = capture_time;
environment->PostTask(
@@ -68,9 +68,8 @@ VideoEncoderImpl::VideoEncoderImpl(
scoped_refptr<CastEnvironment> cast_environment,
const VideoSenderConfig& video_config,
int max_unacked_frames)
- : video_config_(video_config),
- cast_environment_(cast_environment) {
- if (video_config.codec == transport::kVp8) {
+ : cast_environment_(cast_environment) {
+ if (video_config.codec == CODEC_VIDEO_VP8) {
encoder_.reset(new Vp8Encoder(video_config, max_unacked_frames));
cast_environment_->PostTask(CastEnvironment::VIDEO,
FROM_HERE,
@@ -78,7 +77,7 @@ VideoEncoderImpl::VideoEncoderImpl(
cast_environment,
encoder_.get()));
#ifndef OFFICIAL_BUILD
- } else if (video_config.codec == transport::kFakeSoftwareVideo) {
+ } else if (video_config.codec == CODEC_VIDEO_FAKE) {
encoder_.reset(new FakeSoftwareVideoEncoder(video_config));
#endif
} else {
diff --git a/media/cast/video_sender/video_encoder_impl.h b/media/cast/sender/video_encoder_impl.h
index b34b440c93..54a380265c 100644
--- a/media/cast/video_sender/video_encoder_impl.h
+++ b/media/cast/sender/video_encoder_impl.h
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_IMPL_H_
-#define MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_IMPL_H_
+#ifndef MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_
+#define MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_
#include "base/memory/scoped_ptr.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/video_sender/software_video_encoder.h"
-#include "media/cast/video_sender/video_encoder.h"
+#include "media/cast/sender/software_video_encoder.h"
+#include "media/cast/sender/video_encoder.h"
namespace media {
class VideoFrame;
@@ -26,7 +26,7 @@ class VideoEncoderImpl : public VideoEncoder {
int bit_rate;
};
- typedef base::Callback<void(scoped_ptr<transport::EncodedFrame>)>
+ typedef base::Callback<void(scoped_ptr<EncodedFrame>)>
FrameEncodedCallback;
VideoEncoderImpl(scoped_refptr<CastEnvironment> cast_environment,
@@ -53,7 +53,6 @@ class VideoEncoderImpl : public VideoEncoder {
virtual void LatestFrameIdToReference(uint32 frame_id) OVERRIDE;
private:
- const VideoSenderConfig video_config_;
scoped_refptr<CastEnvironment> cast_environment_;
CodecDynamicConfig dynamic_config_;
@@ -69,4 +68,4 @@ class VideoEncoderImpl : public VideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_VIDEO_ENCODER_IMPL_H_
+#endif // MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_
diff --git a/media/cast/video_sender/video_encoder_impl_unittest.cc b/media/cast/sender/video_encoder_impl_unittest.cc
index a60812304f..190ca2aacc 100644
--- a/media/cast/video_sender/video_encoder_impl_unittest.cc
+++ b/media/cast/sender/video_encoder_impl_unittest.cc
@@ -10,9 +10,9 @@
#include "media/base/video_frame.h"
#include "media/cast/cast_defines.h"
#include "media/cast/cast_environment.h"
+#include "media/cast/sender/video_encoder_impl.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/video_sender/video_encoder_impl.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
@@ -35,11 +35,11 @@ class TestVideoEncoderCallback
}
void DeliverEncodedVideoFrame(
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
if (expected_frame_id_ == expected_last_referenced_frame_id_) {
- EXPECT_EQ(transport::EncodedFrame::KEY, encoded_frame->dependency);
+ EXPECT_EQ(EncodedFrame::KEY, encoded_frame->dependency);
} else {
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT,
+ EXPECT_EQ(EncodedFrame::DEPENDENT,
encoded_frame->dependency);
}
EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id);
@@ -66,9 +66,9 @@ class VideoEncoderImplTest : public ::testing::Test {
protected:
VideoEncoderImplTest()
: test_video_encoder_callback_(new TestVideoEncoderCallback()) {
- video_config_.rtp_config.ssrc = 1;
+ video_config_.ssrc = 1;
video_config_.incoming_feedback_ssrc = 2;
- video_config_.rtp_config.payload_type = 127;
+ video_config_.rtp_payload_type = 127;
video_config_.use_external_encoder = false;
video_config_.width = 320;
video_config_.height = 240;
@@ -79,7 +79,7 @@ class VideoEncoderImplTest : public ::testing::Test {
video_config_.min_qp = 0;
video_config_.max_frame_rate = 30;
video_config_.max_number_of_video_buffers_used = 3;
- video_config_.codec = transport::kVp8;
+ video_config_.codec = CODEC_VIDEO_VP8;
gfx::Size size(video_config_.width, video_config_.height);
video_frame_ = media::VideoFrame::CreateFrame(
VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta());
diff --git a/media/cast/video_sender/video_sender.cc b/media/cast/sender/video_sender.cc
index cf050b7f10..0d826903fd 100644
--- a/media/cast/video_sender/video_sender.cc
+++ b/media/cast/sender/video_sender.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "media/cast/video_sender/video_sender.h"
+#include "media/cast/sender/video_sender.h"
#include <algorithm>
#include <cstring>
@@ -12,10 +12,10 @@
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/rtcp/rtcp_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/video_sender/external_video_encoder.h"
-#include "media/cast/video_sender/video_encoder_impl.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/rtcp/rtcp_defines.h"
+#include "media/cast/sender/external_video_encoder.h"
+#include "media/cast/sender/video_encoder_impl.h"
namespace media {
namespace cast {
@@ -28,10 +28,9 @@ VideoSender::VideoSender(
const VideoSenderConfig& video_config,
const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
- transport::CastTransportSender* const transport_sender)
+ CastTransportSender* const transport_sender)
: cast_environment_(cast_environment),
- target_playout_delay_(base::TimeDelta::FromMilliseconds(
- video_config.rtp_config.max_delay_ms)),
+ target_playout_delay_(video_config.target_playout_delay),
transport_sender_(transport_sender),
max_unacked_frames_(
std::min(kMaxUnackedFrames,
@@ -45,7 +44,7 @@ VideoSender::VideoSender(
NULL,
video_config.rtcp_mode,
base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
- video_config.rtp_config.ssrc,
+ video_config.ssrc,
video_config.incoming_feedback_ssrc,
video_config.rtcp_c_name,
VIDEO_EVENT),
@@ -75,10 +74,12 @@ VideoSender::VideoSender(
}
cast_initialization_status_ = STATUS_VIDEO_INITIALIZED;
- media::cast::transport::CastTransportVideoConfig transport_config;
- transport_config.codec = video_config.codec;
- transport_config.rtp.config = video_config.rtp_config;
- transport_config.rtp.max_outstanding_frames = max_unacked_frames_;
+ media::cast::CastTransportRtpConfig transport_config;
+ transport_config.ssrc = video_config.ssrc;
+ transport_config.rtp_payload_type = video_config.rtp_payload_type;
+ transport_config.stored_frames = max_unacked_frames_;
+ transport_config.aes_key = video_config.aes_key;
+ transport_config.aes_iv_mask = video_config.aes_iv_mask;
transport_sender_->InitializeVideo(transport_config);
rtcp_.SetCastReceiverEventHistorySize(kReceiverRtcpEventHistorySize);
@@ -140,7 +141,7 @@ void VideoSender::InsertRawVideoFrame(
void VideoSender::SendEncodedVideoFrame(
int requested_bitrate_before_encode,
- scoped_ptr<transport::EncodedFrame> encoded_frame) {
+ scoped_ptr<EncodedFrame> encoded_frame) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
DCHECK_GT(frames_in_encoder_, 0);
@@ -159,13 +160,13 @@ void VideoSender::SendEncodedVideoFrame(
ScheduleNextResendCheck();
}
- VLOG_IF(1, encoded_frame->dependency == transport::EncodedFrame::KEY)
+ VLOG_IF(1, encoded_frame->dependency == EncodedFrame::KEY)
<< "Send encoded key frame; frame_id: " << frame_id;
cast_environment_->Logging()->InsertEncodedFrameEvent(
last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp,
frame_id, static_cast<int>(encoded_frame->data.size()),
- encoded_frame->dependency == transport::EncodedFrame::KEY,
+ encoded_frame->dependency == EncodedFrame::KEY,
requested_bitrate_before_encode);
// Only use lowest 8 bits as key.
frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp;
diff --git a/media/cast/video_sender/video_sender.h b/media/cast/sender/video_sender.h
index cf8d27511c..6587572806 100644
--- a/media/cast/video_sender/video_sender.h
+++ b/media/cast/sender/video_sender.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_VIDEO_SENDER_H_
-#define MEDIA_CAST_VIDEO_SENDER_VIDEO_SENDER_H_
+#ifndef MEDIA_CAST_SENDER_VIDEO_SENDER_H_
+#define MEDIA_CAST_SENDER_VIDEO_SENDER_H_
#include "base/callback.h"
#include "base/memory/ref_counted.h"
@@ -14,10 +14,10 @@
#include "base/time/time.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
-#include "media/cast/congestion_control/congestion_control.h"
#include "media/cast/logging/logging_defines.h"
-#include "media/cast/rtcp/rtcp.h"
-#include "media/cast/rtp_timestamp_helper.h"
+#include "media/cast/net/rtcp/rtcp.h"
+#include "media/cast/sender/congestion_control.h"
+#include "media/cast/sender/rtp_timestamp_helper.h"
namespace media {
@@ -25,13 +25,10 @@ class VideoFrame;
namespace cast {
+class CastTransportSender;
class LocalVideoEncoderCallback;
class VideoEncoder;
-namespace transport {
-class CastTransportSender;
-}
-
// Not thread safe. Only called from the main cast thread.
// This class owns all objects related to sending video, objects that create RTP
// packets, congestion control, video encoder, parsing and sending of
@@ -46,7 +43,7 @@ class VideoSender : public RtcpSenderFeedback,
const VideoSenderConfig& video_config,
const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
- transport::CastTransportSender* const transport_sender);
+ CastTransportSender* const transport_sender);
virtual ~VideoSender();
@@ -93,7 +90,7 @@ class VideoSender : public RtcpSenderFeedback,
// Called by the |video_encoder_| with the next EncodeFrame to send.
void SendEncodedVideoFrame(int requested_bitrate_before_encode,
- scoped_ptr<transport::EncodedFrame> encoded_frame);
+ scoped_ptr<EncodedFrame> encoded_frame);
const scoped_refptr<CastEnvironment> cast_environment_;
@@ -110,7 +107,7 @@ class VideoSender : public RtcpSenderFeedback,
// process to the browser process over IPC, with the browser process being
// responsible for "packetizing" the frames and pushing packets into the
// network layer.
- transport::CastTransportSender* const transport_sender_;
+ CastTransportSender* const transport_sender_;
// Maximum number of outstanding frames before the encoding and sending of
// new frames shall halt.
@@ -179,4 +176,4 @@ class VideoSender : public RtcpSenderFeedback,
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_VIDEO_SENDER_H_
+#endif // MEDIA_CAST_SENDER_VIDEO_SENDER_H_
diff --git a/media/cast/video_sender/video_sender_unittest.cc b/media/cast/sender/video_sender_unittest.cc
index 49fae46c73..bccc248680 100644
--- a/media/cast/video_sender/video_sender_unittest.cc
+++ b/media/cast/sender/video_sender_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,14 +12,14 @@
#include "media/base/video_frame.h"
#include "media/cast/cast_environment.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#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/video_sender.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/fake_video_encode_accelerator.h"
#include "media/cast/test/utility/default_config.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "media/cast/video_sender/video_sender.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -51,7 +51,7 @@ void CreateSharedMemory(
callback.Run(shm.Pass());
}
-class TestPacketSender : public transport::PacketSender {
+class TestPacketSender : public PacketSender {
public:
TestPacketSender()
: number_of_rtp_packets_(0),
@@ -59,7 +59,7 @@ class TestPacketSender : public transport::PacketSender {
paused_(false) {}
// A singular packet implies a RTCP packet.
- virtual bool SendPacket(transport::PacketRef packet,
+ virtual bool SendPacket(PacketRef packet,
const base::Closure& cb) OVERRIDE {
if (paused_) {
stored_packet_ = packet;
@@ -97,7 +97,7 @@ class TestPacketSender : public transport::PacketSender {
int number_of_rtcp_packets_;
bool paused_;
base::Closure callback_;
- transport::PacketRef stored_packet_;
+ PacketRef stored_packet_;
DISALLOW_COPY_AND_ASSIGN(TestPacketSender);
};
@@ -109,7 +109,7 @@ class PeerVideoSender : public VideoSender {
const VideoSenderConfig& video_config,
const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
- transport::CastTransportSender* const transport_sender)
+ CastTransportSender* const transport_sender)
: VideoSender(cast_environment,
video_config,
create_vea_cb,
@@ -132,12 +132,12 @@ class VideoSenderTest : public ::testing::Test {
task_runner_);
last_pixel_value_ = kPixelValue;
net::IPEndPoint dummy_endpoint;
- transport_sender_.reset(new transport::CastTransportSenderImpl(
+ transport_sender_.reset(new CastTransportSenderImpl(
NULL,
testing_clock_,
dummy_endpoint,
base::Bind(&UpdateCastTransportStatus),
- transport::BulkRawEventsCallback(),
+ BulkRawEventsCallback(),
base::TimeDelta(),
task_runner_,
&transport_));
@@ -150,16 +150,16 @@ class VideoSenderTest : public ::testing::Test {
task_runner_->RunTasks();
}
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- EXPECT_EQ(transport::TRANSPORT_VIDEO_INITIALIZED, status);
+ static void UpdateCastTransportStatus(CastTransportStatus status) {
+ EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status);
}
void InitEncoder(bool external) {
VideoSenderConfig video_config;
- video_config.rtp_config.ssrc = 1;
+ video_config.ssrc = 1;
video_config.incoming_feedback_ssrc = 2;
video_config.rtcp_c_name = "video_test@10.1.1.1";
- video_config.rtp_config.payload_type = 127;
+ video_config.rtp_payload_type = 127;
video_config.use_external_encoder = external;
video_config.width = kWidth;
video_config.height = kHeight;
@@ -170,7 +170,7 @@ class VideoSenderTest : public ::testing::Test {
video_config.min_qp = 0;
video_config.max_frame_rate = 30;
video_config.max_number_of_video_buffers_used = 1;
- video_config.codec = transport::kVp8;
+ video_config.codec = CODEC_VIDEO_VP8;
if (external) {
scoped_ptr<VideoEncodeAccelerator> fake_vea(
@@ -218,7 +218,7 @@ class VideoSenderTest : public ::testing::Test {
base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
TestPacketSender transport_;
- scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
+ scoped_ptr<CastTransportSenderImpl> transport_sender_;
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
scoped_ptr<PeerVideoSender> video_sender_;
scoped_refptr<CastEnvironment> cast_environment_;
diff --git a/media/cast/video_sender/codecs/vp8/vp8_encoder.cc b/media/cast/sender/vp8_encoder.cc
index c7374babd1..b43b5c881e 100644
--- a/media/cast/video_sender/codecs/vp8/vp8_encoder.cc
+++ b/media/cast/sender/vp8_encoder.cc
@@ -1,17 +1,15 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-//
-// TODO (pwestin): add a link to the design document describing the generic
-// protocol and the VP8 specific details.
-#include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
+
+#include "media/cast/sender/vp8_encoder.h"
#include <vector>
#include "base/logging.h"
#include "media/base/video_frame.h"
#include "media/cast/cast_defines.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
#include "third_party/libvpx/source/libvpx/vpx/vp8cx.h"
namespace media {
@@ -135,7 +133,7 @@ void Vp8Encoder::InitEncode(int number_of_encode_threads) {
}
bool Vp8Encoder::Encode(const scoped_refptr<media::VideoFrame>& video_frame,
- transport::EncodedFrame* encoded_image) {
+ EncodedFrame* encoded_image) {
DCHECK(thread_checker_.CalledOnValidThread());
// Image in vpx_image_t format.
// Input image is const. VP8's raw image is not defined as const.
@@ -216,10 +214,10 @@ bool Vp8Encoder::Encode(const scoped_refptr<media::VideoFrame>& video_frame,
// Populate the encoded frame.
encoded_image->frame_id = ++last_encoded_frame_id_;
if (is_key_frame) {
- encoded_image->dependency = transport::EncodedFrame::KEY;
+ encoded_image->dependency = EncodedFrame::KEY;
encoded_image->referenced_frame_id = encoded_image->frame_id;
} else {
- encoded_image->dependency = transport::EncodedFrame::DEPENDENT;
+ encoded_image->dependency = EncodedFrame::DEPENDENT;
encoded_image->referenced_frame_id = latest_frame_id_to_reference;
}
diff --git a/media/cast/video_sender/codecs/vp8/vp8_encoder.h b/media/cast/sender/vp8_encoder.h
index 2421cf1511..0437dbc2f5 100644
--- a/media/cast/video_sender/codecs/vp8/vp8_encoder.h
+++ b/media/cast/sender/vp8_encoder.h
@@ -1,16 +1,16 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MEDIA_CAST_VIDEO_SENDER_CODECS_VP8_VP8_ENCODER_H_
-#define MEDIA_CAST_VIDEO_SENDER_CODECS_VP8_VP8_ENCODER_H_
+#ifndef MEDIA_CAST_SENDER_CODECS_VP8_VP8_ENCODER_H_
+#define MEDIA_CAST_SENDER_CODECS_VP8_VP8_ENCODER_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/thread_checker.h"
#include "base/time/time.h"
#include "media/cast/cast_config.h"
-#include "media/cast/video_sender/software_video_encoder.h"
+#include "media/cast/sender/software_video_encoder.h"
#include "third_party/libvpx/source/libvpx/vpx/vpx_encoder.h"
namespace media {
@@ -37,7 +37,7 @@ class Vp8Encoder : public SoftwareVideoEncoder {
// Encode a raw image (as a part of a video stream).
virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
- transport::EncodedFrame* encoded_image) OVERRIDE;
+ EncodedFrame* encoded_image) OVERRIDE;
// Update the encoder with a new target bit rate.
virtual void UpdateRates(uint32 new_bitrate) OVERRIDE;
@@ -100,4 +100,4 @@ class Vp8Encoder : public SoftwareVideoEncoder {
} // namespace cast
} // namespace media
-#endif // MEDIA_CAST_VIDEO_SENDER_CODECS_VP8_VP8_ENCODER_H_
+#endif // MEDIA_CAST_SENDER_CODECS_VP8_VP8_ENCODER_H_
diff --git a/media/cast/test/cast_benchmarks.cc b/media/cast/test/cast_benchmarks.cc
index 66257626bd..a2483facff 100644
--- a/media/cast/test/cast_benchmarks.cc
+++ b/media/cast/test/cast_benchmarks.cc
@@ -45,7 +45,12 @@
#include "media/cast/cast_receiver.h"
#include "media/cast/cast_sender.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
+#include "media/cast/test/loopback_transport.h"
#include "media/cast/test/skewed_single_thread_task_runner.h"
#include "media/cast/test/skewed_tick_clock.h"
#include "media/cast/test/utility/audio_utility.h"
@@ -53,10 +58,6 @@
#include "media/cast/test/utility/test_util.h"
#include "media/cast/test/utility/udp_proxy.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -68,15 +69,15 @@ static const int64 kStartMillisecond = INT64_C(1245);
static const int kAudioChannels = 2;
static const int kVideoHdWidth = 1280;
static const int kVideoHdHeight = 720;
-static const int kTargetDelay = 300;
+static const int kTargetPlayoutDelayMs = 300;
// The tests are commonly implemented with |kFrameTimerMs| RunTask function;
// a normal video is 30 fps hence the 33 ms between frames.
static const int kFrameTimerMs = 33;
-void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- bool result = (status == transport::TRANSPORT_AUDIO_INITIALIZED ||
- status == transport::TRANSPORT_VIDEO_INITIALIZED);
+void UpdateCastTransportStatus(CastTransportStatus status) {
+ bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
+ status == TRANSPORT_VIDEO_INITIALIZED);
EXPECT_TRUE(result);
}
@@ -93,68 +94,9 @@ void IgnoreRawEvents(const std::vector<PacketEvent>& packet_events) {
} // namespace
-// Shim that turns forwards packets from a test::PacketPipe to a
-// PacketReceiverCallback.
-class LoopBackPacketPipe : public test::PacketPipe {
- public:
- LoopBackPacketPipe(const transport::PacketReceiverCallback& packet_receiver)
- : packet_receiver_(packet_receiver) {}
-
- virtual ~LoopBackPacketPipe() {}
-
- // PacketPipe implementations.
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
- packet_receiver_.Run(packet.Pass());
- }
-
- private:
- transport::PacketReceiverCallback packet_receiver_;
-};
-
-// Class that sends the packet direct from sender into the receiver with the
-// ability to drop packets between the two.
-// TODO(hubbe): Break this out and share code with end2end_unittest.cc
-class LoopBackTransport : public transport::PacketSender {
- public:
- explicit LoopBackTransport(scoped_refptr<CastEnvironment> cast_environment)
- : cast_environment_(cast_environment) {}
-
- void SetPacketReceiver(
- const transport::PacketReceiverCallback& packet_receiver,
- const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
- base::TickClock* clock) {
- scoped_ptr<test::PacketPipe> loopback_pipe(
- new LoopBackPacketPipe(packet_receiver));
- if (packet_pipe_) {
- packet_pipe_->AppendToPipe(loopback_pipe.Pass());
- } else {
- packet_pipe_ = loopback_pipe.Pass();
- }
- packet_pipe_->InitOnIOThread(task_runner, clock);
- }
-
- virtual bool SendPacket(transport::PacketRef packet,
- const base::Closure& cb) OVERRIDE {
- DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
- scoped_ptr<Packet> packet_copy(new Packet(packet->data));
- packet_pipe_->Send(packet_copy.Pass());
- return true;
- }
-
- void SetPacketPipe(scoped_ptr<test::PacketPipe> pipe) {
- // Append the loopback pipe to the end.
- pipe->AppendToPipe(packet_pipe_.Pass());
- packet_pipe_ = pipe.Pass();
- }
-
- private:
- scoped_refptr<CastEnvironment> cast_environment_;
- scoped_ptr<test::PacketPipe> packet_pipe_;
-};
-
// Wraps a CastTransportSender and records some statistics about
// the data that goes through it.
-class CastTransportSenderWrapper : public transport::CastTransportSender {
+class CastTransportSenderWrapper : public CastTransportSender {
public:
// Takes ownership of |transport|.
void Init(CastTransportSender* transport,
@@ -166,28 +108,28 @@ class CastTransportSenderWrapper : public transport::CastTransportSender {
}
virtual void InitializeAudio(
- const transport::CastTransportAudioConfig& config) OVERRIDE {
+ const CastTransportRtpConfig& config) OVERRIDE {
transport_->InitializeAudio(config);
}
virtual void InitializeVideo(
- const transport::CastTransportVideoConfig& config) OVERRIDE {
+ const CastTransportRtpConfig& config) OVERRIDE {
transport_->InitializeVideo(config);
}
virtual void SetPacketReceiver(
- const transport::PacketReceiverCallback& packet_receiver) OVERRIDE {
+ const PacketReceiverCallback& packet_receiver) OVERRIDE {
transport_->SetPacketReceiver(packet_receiver);
}
virtual void InsertCodedAudioFrame(
- const transport::EncodedFrame& audio_frame) OVERRIDE {
+ const EncodedFrame& audio_frame) OVERRIDE {
*encoded_audio_bytes_ += audio_frame.data.size();
transport_->InsertCodedAudioFrame(audio_frame);
}
virtual void InsertCodedVideoFrame(
- const transport::EncodedFrame& video_frame) OVERRIDE {
+ const EncodedFrame& video_frame) OVERRIDE {
*encoded_video_bytes_ += video_frame.data.size();
transport_->InsertCodedVideoFrame(video_frame);
}
@@ -196,7 +138,7 @@ class CastTransportSenderWrapper : public transport::CastTransportSender {
uint32 ntp_seconds,
uint32 ntp_fraction,
uint32 rtp_timestamp,
- const transport::RtcpDlrrReportBlock& dlrr,
+ const RtcpDlrrReportBlock& dlrr,
uint32 sending_ssrc,
const std::string& c_name) OVERRIDE {
transport_->SendRtcpFromRtpSender(packet_type_flags,
@@ -219,7 +161,7 @@ class CastTransportSenderWrapper : public transport::CastTransportSender {
}
private:
- scoped_ptr<transport::CastTransportSender> transport_;
+ scoped_ptr<CastTransportSender> transport_;
uint64* encoded_video_bytes_;
uint64* encoded_audio_bytes_;
};
@@ -278,34 +220,37 @@ class RunOneBenchmark {
base::TimeDelta::FromMilliseconds(kStartMillisecond));
}
- void Configure(transport::VideoCodec video_codec,
- transport::AudioCodec audio_codec,
+ void Configure(Codec video_codec,
+ Codec audio_codec,
int audio_sampling_frequency,
int max_number_of_video_buffers_used) {
- audio_sender_config_.rtp_config.ssrc = 1;
+ audio_sender_config_.ssrc = 1;
audio_sender_config_.incoming_feedback_ssrc = 2;
- audio_sender_config_.rtp_config.payload_type = 96;
+ audio_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs);
+ audio_sender_config_.rtp_payload_type = 96;
audio_sender_config_.use_external_encoder = false;
audio_sender_config_.frequency = audio_sampling_frequency;
audio_sender_config_.channels = kAudioChannels;
audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate;
audio_sender_config_.codec = audio_codec;
- audio_sender_config_.rtp_config.max_delay_ms = kTargetDelay;
audio_receiver_config_.feedback_ssrc =
audio_sender_config_.incoming_feedback_ssrc;
- audio_receiver_config_.incoming_ssrc = audio_sender_config_.rtp_config.ssrc;
+ audio_receiver_config_.incoming_ssrc = audio_sender_config_.ssrc;
audio_receiver_config_.rtp_payload_type =
- audio_sender_config_.rtp_config.payload_type;
+ audio_sender_config_.rtp_payload_type;
audio_receiver_config_.frequency = audio_sender_config_.frequency;
audio_receiver_config_.channels = kAudioChannels;
audio_receiver_config_.max_frame_rate = 100;
- audio_receiver_config_.codec.audio = audio_sender_config_.codec;
- audio_receiver_config_.rtp_max_delay_ms = kTargetDelay;
+ audio_receiver_config_.codec = audio_sender_config_.codec;
+ audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
- video_sender_config_.rtp_config.ssrc = 3;
+ video_sender_config_.ssrc = 3;
video_sender_config_.incoming_feedback_ssrc = 4;
- video_sender_config_.rtp_config.payload_type = 97;
+ video_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs);
+ video_sender_config_.rtp_payload_type = 97;
video_sender_config_.use_external_encoder = false;
video_sender_config_.width = kVideoHdWidth;
video_sender_config_.height = kVideoHdHeight;
@@ -324,18 +269,17 @@ class RunOneBenchmark {
video_sender_config_.max_number_of_video_buffers_used =
max_number_of_video_buffers_used;
video_sender_config_.codec = video_codec;
- video_sender_config_.rtp_config.max_delay_ms = kTargetDelay;
video_receiver_config_.feedback_ssrc =
video_sender_config_.incoming_feedback_ssrc;
- video_receiver_config_.incoming_ssrc = video_sender_config_.rtp_config.ssrc;
+ video_receiver_config_.incoming_ssrc = video_sender_config_.ssrc;
video_receiver_config_.rtp_payload_type =
- video_sender_config_.rtp_config.payload_type;
- video_receiver_config_.codec.video = video_sender_config_.codec;
+ video_sender_config_.rtp_payload_type;
+ video_receiver_config_.codec = video_sender_config_.codec;
video_receiver_config_.frequency = kVideoFrequency;
video_receiver_config_.channels = 1;
video_receiver_config_.max_frame_rate = 100;
- video_receiver_config_.rtp_max_delay_ms = kTargetDelay;
+ video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
}
void SetSenderClockSkew(double skew, base::TimeDelta offset) {
@@ -348,13 +292,13 @@ class RunOneBenchmark {
task_runner_receiver_->SetSkew(1.0 / skew);
}
- void Create() {
+ void Create(const MeasuringPoint& p) {
cast_receiver_ = CastReceiver::Create(cast_environment_receiver_,
audio_receiver_config_,
video_receiver_config_,
&receiver_to_sender_);
net::IPEndPoint dummy_endpoint;
- transport_sender_.Init(new transport::CastTransportSenderImpl(
+ transport_sender_.Init(new CastTransportSenderImpl(
NULL,
testing_clock_sender_,
dummy_endpoint,
@@ -377,10 +321,12 @@ class RunOneBenchmark {
CreateDefaultVideoEncodeAcceleratorCallback(),
CreateDefaultVideoEncodeMemoryCallback());
- receiver_to_sender_.SetPacketReceiver(
- cast_sender_->packet_receiver(), task_runner_, &testing_clock_);
- sender_to_receiver_.SetPacketReceiver(
- cast_receiver_->packet_receiver(), task_runner_, &testing_clock_);
+ receiver_to_sender_.Initialize(
+ CreateSimplePipe(p).Pass(), cast_sender_->packet_receiver(),
+ task_runner_, &testing_clock_);
+ sender_to_receiver_.Initialize(
+ CreateSimplePipe(p).Pass(), cast_receiver_->packet_receiver(),
+ task_runner_, &testing_clock_);
}
virtual ~RunOneBenchmark() {
@@ -436,10 +382,9 @@ class RunOneBenchmark {
void Run(const MeasuringPoint& p) {
available_bitrate_ = p.bitrate;
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
- receiver_to_sender_.SetPacketPipe(CreateSimplePipe(p).Pass());
- sender_to_receiver_.SetPacketPipe(CreateSimplePipe(p).Pass());
- Create();
+ Configure(
+ CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1);
+ Create(p);
StartBasicPlayer();
for (int frame = 0; frame < 1000; frame++) {
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
index 4a0d820214..a1d4a3ab34 100644
--- a/media/cast/test/end2end_unittest.cc
+++ b/media/cast/test/end2end_unittest.cc
@@ -29,6 +29,10 @@
#include "media/cast/cast_receiver.h"
#include "media/cast/cast_sender.h"
#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
#include "media/cast/test/fake_single_thread_task_runner.h"
#include "media/cast/test/skewed_single_thread_task_runner.h"
#include "media/cast/test/skewed_tick_clock.h"
@@ -36,10 +40,6 @@
#include "media/cast/test/utility/default_config.h"
#include "media/cast/test/utility/udp_proxy.h"
#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/cast_transport_sender_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
@@ -97,9 +97,9 @@ std::string ConvertFromBase16String(const std::string base_16) {
return compressed;
}
-void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- bool result = (status == transport::TRANSPORT_AUDIO_INITIALIZED ||
- status == transport::TRANSPORT_VIDEO_INITIALIZED);
+void UpdateCastTransportStatus(CastTransportStatus status) {
+ bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
+ status == TRANSPORT_VIDEO_INITIALIZED);
EXPECT_TRUE(result);
}
@@ -168,23 +168,23 @@ std::map<uint16, LoggingEventCounts> GetEventCountForPacketEvents(
// PacketReceiverCallback.
class LoopBackPacketPipe : public test::PacketPipe {
public:
- LoopBackPacketPipe(const transport::PacketReceiverCallback& packet_receiver)
+ LoopBackPacketPipe(const PacketReceiverCallback& packet_receiver)
: packet_receiver_(packet_receiver) {}
virtual ~LoopBackPacketPipe() {}
// PacketPipe implementations.
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
packet_receiver_.Run(packet.Pass());
}
private:
- transport::PacketReceiverCallback packet_receiver_;
+ PacketReceiverCallback packet_receiver_;
};
// Class that sends the packet direct from sender into the receiver with the
// ability to drop packets between the two.
-class LoopBackTransport : public transport::PacketSender {
+class LoopBackTransport : public PacketSender {
public:
explicit LoopBackTransport(scoped_refptr<CastEnvironment> cast_environment)
: send_packets_(true),
@@ -192,7 +192,7 @@ class LoopBackTransport : public transport::PacketSender {
cast_environment_(cast_environment) {}
void SetPacketReceiver(
- const transport::PacketReceiverCallback& packet_receiver,
+ const PacketReceiverCallback& packet_receiver,
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
base::TickClock* clock) {
scoped_ptr<test::PacketPipe> loopback_pipe(
@@ -205,7 +205,7 @@ class LoopBackTransport : public transport::PacketSender {
packet_pipe_->InitOnIOThread(task_runner, clock);
}
- virtual bool SendPacket(transport::PacketRef packet,
+ virtual bool SendPacket(PacketRef packet,
const base::Closure& cb) OVERRIDE {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
if (!send_packets_)
@@ -307,7 +307,7 @@ class TestReceiverAudioCallback
EXPECT_TRUE(is_continuous);
}
- void CheckCodedAudioFrame(scoped_ptr<transport::EncodedFrame> audio_frame) {
+ void CheckCodedAudioFrame(scoped_ptr<EncodedFrame> audio_frame) {
ASSERT_TRUE(!!audio_frame);
ASSERT_FALSE(expected_frames_.empty());
const ExpectedAudioFrame& expected_audio_frame =
@@ -458,14 +458,15 @@ class End2EndTest : public ::testing::Test {
&event_subscriber_sender_);
}
- void Configure(transport::VideoCodec video_codec,
- transport::AudioCodec audio_codec,
+ void Configure(Codec video_codec,
+ Codec audio_codec,
int audio_sampling_frequency,
int max_number_of_video_buffers_used) {
- audio_sender_config_.rtp_config.ssrc = 1;
- audio_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs;
+ audio_sender_config_.ssrc = 1;
audio_sender_config_.incoming_feedback_ssrc = 2;
- audio_sender_config_.rtp_config.payload_type = 96;
+ audio_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs);
+ audio_sender_config_.rtp_payload_type = 96;
audio_sender_config_.use_external_encoder = false;
audio_sender_config_.frequency = audio_sampling_frequency;
audio_sender_config_.channels = kAudioChannels;
@@ -474,22 +475,23 @@ class End2EndTest : public ::testing::Test {
audio_receiver_config_.feedback_ssrc =
audio_sender_config_.incoming_feedback_ssrc;
- audio_receiver_config_.incoming_ssrc = audio_sender_config_.rtp_config.ssrc;
+ audio_receiver_config_.incoming_ssrc = audio_sender_config_.ssrc;
audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
audio_receiver_config_.rtp_payload_type =
- audio_sender_config_.rtp_config.payload_type;
+ audio_sender_config_.rtp_payload_type;
audio_receiver_config_.frequency = audio_sender_config_.frequency;
audio_receiver_config_.channels = kAudioChannels;
audio_receiver_config_.max_frame_rate = 100;
- audio_receiver_config_.codec.audio = audio_sender_config_.codec;
+ audio_receiver_config_.codec = audio_sender_config_.codec;
test_receiver_audio_callback_->SetExpectedSamplingFrequency(
audio_receiver_config_.frequency);
- video_sender_config_.rtp_config.ssrc = 3;
- video_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs;
+ video_sender_config_.ssrc = 3;
video_sender_config_.incoming_feedback_ssrc = 4;
- video_sender_config_.rtp_config.payload_type = 97;
+ video_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs);
+ video_sender_config_.rtp_payload_type = 97;
video_sender_config_.use_external_encoder = false;
video_sender_config_.width = kVideoHdWidth;
video_sender_config_.height = kVideoHdHeight;
@@ -505,14 +507,14 @@ class End2EndTest : public ::testing::Test {
video_receiver_config_.feedback_ssrc =
video_sender_config_.incoming_feedback_ssrc;
- video_receiver_config_.incoming_ssrc = video_sender_config_.rtp_config.ssrc;
+ video_receiver_config_.incoming_ssrc = video_sender_config_.ssrc;
video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
video_receiver_config_.rtp_payload_type =
- video_sender_config_.rtp_config.payload_type;
+ video_sender_config_.rtp_payload_type;
video_receiver_config_.frequency = kVideoFrequency;
video_receiver_config_.channels = 1;
video_receiver_config_.max_frame_rate = video_sender_config_.max_frame_rate;
- video_receiver_config_.codec.video = video_sender_config_.codec;
+ video_receiver_config_.codec = video_sender_config_.codec;
}
void SetReceiverSkew(double skew, base::TimeDelta offset) {
@@ -580,7 +582,7 @@ class End2EndTest : public ::testing::Test {
&receiver_to_sender_);
net::IPEndPoint dummy_endpoint;
- transport_sender_.reset(new transport::CastTransportSenderImpl(
+ transport_sender_.reset(new CastTransportSenderImpl(
NULL,
testing_clock_sender_,
dummy_endpoint,
@@ -760,7 +762,7 @@ class End2EndTest : public ::testing::Test {
LoopBackTransport receiver_to_sender_;
LoopBackTransport sender_to_receiver_;
- scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
+ scoped_ptr<CastTransportSenderImpl> transport_sender_;
scoped_ptr<CastReceiver> cast_receiver_;
scoped_ptr<CastSender> cast_sender_;
@@ -782,7 +784,7 @@ class End2EndTest : public ::testing::Test {
};
TEST_F(End2EndTest, LoopNoLossPcm16) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
// Reduce video resolution to allow processing multiple frames within a
// reasonable time frame.
video_sender_config_.width = kVideoQcifWidth;
@@ -836,7 +838,7 @@ TEST_F(End2EndTest, LoopNoLossPcm16) {
// This tests our external decoder interface for Audio.
// Audio test without packet loss using raw PCM 16 audio "codec";
TEST_F(End2EndTest, LoopNoLossPcm16ExternalDecoder) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
Create();
const int kNumIterations = 10;
@@ -854,7 +856,8 @@ TEST_F(End2EndTest, LoopNoLossPcm16ExternalDecoder) {
// This tests our Opus audio codec without video.
TEST_F(End2EndTest, LoopNoLossOpus) {
- Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS,
+ kDefaultAudioSamplingRate, 1);
Create();
const int kNumIterations = 300;
@@ -880,7 +883,8 @@ TEST_F(End2EndTest, LoopNoLossOpus) {
// in audio_receiver.cc for likely cause(s) of this bug.
// http://crbug.com/356942
TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
- Configure(transport::kVp8, transport::kPcm16, kDefaultAudioSamplingRate, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16,
+ kDefaultAudioSamplingRate, 1);
Create();
int video_start = kVideoStart;
@@ -968,8 +972,10 @@ TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
// This tests a network glitch lasting for 10 video frames.
// Flaky. See crbug.com/351596.
TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) {
- Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 3);
- video_sender_config_.rtp_config.max_delay_ms = 67;
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS,
+ kDefaultAudioSamplingRate, 3);
+ video_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(67);
video_receiver_config_.rtp_max_delay_ms = 67;
Create();
@@ -1031,8 +1037,10 @@ TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) {
// Disabled due to flakiness and crashiness. http://crbug.com/360951
TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
- Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 3);
- video_sender_config_.rtp_config.max_delay_ms = 67;
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS,
+ kDefaultAudioSamplingRate, 3);
+ video_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(67);
video_receiver_config_.rtp_max_delay_ms = 67;
Create();
sender_to_receiver_.DropAllPacketsBelongingToOddFrames();
@@ -1069,17 +1077,17 @@ TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
}
TEST_F(End2EndTest, CryptoVideo) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
- video_sender_config_.rtp_config.aes_iv_mask =
+ video_sender_config_.aes_iv_mask =
ConvertFromBase16String("1234567890abcdeffedcba0987654321");
- video_sender_config_.rtp_config.aes_key =
+ video_sender_config_.aes_key =
ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
video_receiver_config_.aes_iv_mask =
- video_sender_config_.rtp_config.aes_iv_mask;
+ video_sender_config_.aes_iv_mask;
video_receiver_config_.aes_key =
- video_sender_config_.rtp_config.aes_key;
+ video_sender_config_.aes_key;
Create();
@@ -1107,17 +1115,17 @@ TEST_F(End2EndTest, CryptoVideo) {
}
TEST_F(End2EndTest, CryptoAudio) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
- audio_sender_config_.rtp_config.aes_iv_mask =
+ audio_sender_config_.aes_iv_mask =
ConvertFromBase16String("abcdeffedcba12345678900987654321");
- audio_sender_config_.rtp_config.aes_key =
+ audio_sender_config_.aes_key =
ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0");
audio_receiver_config_.aes_iv_mask =
- audio_sender_config_.rtp_config.aes_iv_mask;
+ audio_sender_config_.aes_iv_mask;
audio_receiver_config_.aes_key =
- audio_sender_config_.rtp_config.aes_key;
+ audio_sender_config_.aes_key;
Create();
@@ -1136,7 +1144,7 @@ TEST_F(End2EndTest, CryptoAudio) {
// Video test without packet loss - tests the logging aspects of the end2end,
// but is basically equivalent to LoopNoLossPcm16.
TEST_F(End2EndTest, VideoLogging) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
Create();
int video_start = kVideoStart;
@@ -1260,7 +1268,7 @@ TEST_F(End2EndTest, VideoLogging) {
// Audio test without packet loss - tests the logging aspects of the end2end,
// but is basically equivalent to LoopNoLossPcm16.
TEST_F(End2EndTest, AudioLogging) {
- Configure(transport::kVp8, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_PCM16, 32000, 1);
Create();
int audio_diff = kFrameTimerMs;
@@ -1341,7 +1349,8 @@ TEST_F(End2EndTest, AudioLogging) {
}
TEST_F(End2EndTest, BasicFakeSoftwareVideo) {
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
+ 1);
Create();
StartBasicPlayer();
SetReceiverSkew(1.0, base::TimeDelta::FromMilliseconds(1));
@@ -1362,7 +1371,8 @@ TEST_F(End2EndTest, BasicFakeSoftwareVideo) {
}
TEST_F(End2EndTest, ReceiverClockFast) {
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
+ 1);
Create();
StartBasicPlayer();
SetReceiverSkew(2.0, base::TimeDelta::FromMicroseconds(1234567));
@@ -1377,7 +1387,8 @@ TEST_F(End2EndTest, ReceiverClockFast) {
}
TEST_F(End2EndTest, ReceiverClockSlow) {
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
+ 1);
Create();
StartBasicPlayer();
SetReceiverSkew(0.5, base::TimeDelta::FromMicroseconds(-765432));
@@ -1392,7 +1403,8 @@ TEST_F(End2EndTest, ReceiverClockSlow) {
}
TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) {
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
+ 1);
Create();
StartBasicPlayer();
SetReceiverSkew(1.05, base::TimeDelta::FromMilliseconds(-42));
@@ -1413,7 +1425,8 @@ TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) {
}
TEST_F(End2EndTest, EvilNetwork) {
- Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
+ Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000,
+ 1);
receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass());
sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass());
Create();
diff --git a/media/cast/test/fake_media_source.cc b/media/cast/test/fake_media_source.cc
new file mode 100644
index 0000000000..07baebe6e3
--- /dev/null
+++ b/media/cast/test/fake_media_source.cc
@@ -0,0 +1,594 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/cast/test/fake_media_source.h"
+
+#include "base/files/memory_mapped_file.h"
+#include "base/files/scoped_file.h"
+#include "base/logging.h"
+#include "base/strings/string_number_conversions.h"
+#include "media/audio/audio_parameters.h"
+#include "media/base/audio_buffer.h"
+#include "media/base/audio_bus.h"
+#include "media/base/audio_fifo.h"
+#include "media/base/audio_timestamp_helper.h"
+#include "media/base/media.h"
+#include "media/base/multi_channel_resampler.h"
+#include "media/base/video_frame.h"
+#include "media/base/video_util.h"
+#include "media/cast/cast_sender.h"
+#include "media/cast/test/utility/audio_utility.h"
+#include "media/cast/test/utility/video_utility.h"
+#include "media/ffmpeg/ffmpeg_common.h"
+#include "media/ffmpeg/ffmpeg_deleters.h"
+#include "media/filters/audio_renderer_algorithm.h"
+#include "media/filters/ffmpeg_demuxer.h"
+#include "media/filters/ffmpeg_glue.h"
+#include "media/filters/in_memory_url_protocol.h"
+#include "ui/gfx/size.h"
+
+namespace {
+
+static const int kAudioChannels = 2;
+static const int kAudioSamplingFrequency = 48000;
+static const int kSoundFrequency = 1234; // Frequency of sinusoid wave.
+static const float kSoundVolume = 0.5f;
+static const int kAudioFrameMs = 10; // Each audio frame is exactly 10ms.
+static const int kAudioPacketsPerSecond = 1000 / kAudioFrameMs;
+
+void AVFreeFrame(AVFrame* frame) {
+ av_frame_free(&frame);
+}
+
+} // namespace
+
+namespace media {
+namespace cast {
+
+FakeMediaSource::FakeMediaSource(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ base::TickClock* clock,
+ const VideoSenderConfig& video_config)
+ : task_runner_(task_runner),
+ video_config_(video_config),
+ synthetic_count_(0),
+ clock_(clock),
+ audio_frame_count_(0),
+ video_frame_count_(0),
+ weak_factory_(this),
+ av_format_context_(NULL),
+ audio_stream_index_(-1),
+ playback_rate_(1.0),
+ video_stream_index_(-1),
+ video_frame_rate_numerator_(video_config.max_frame_rate),
+ video_frame_rate_denominator_(1),
+ video_first_pts_(0),
+ video_first_pts_set_(false) {
+ audio_bus_factory_.reset(new TestAudioBusFactory(kAudioChannels,
+ kAudioSamplingFrequency,
+ kSoundFrequency,
+ kSoundVolume));
+}
+
+FakeMediaSource::~FakeMediaSource() {
+}
+
+void FakeMediaSource::SetSourceFile(const base::FilePath& video_file,
+ int override_fps) {
+ DCHECK(!video_file.empty());
+
+ if (override_fps) {
+ video_config_.max_frame_rate = override_fps;
+ video_frame_rate_numerator_ = override_fps;
+ }
+
+ LOG(INFO) << "Source: " << video_file.value();
+ if (!file_data_.Initialize(video_file)) {
+ LOG(ERROR) << "Cannot load file.";
+ return;
+ }
+ protocol_.reset(
+ new InMemoryUrlProtocol(file_data_.data(), file_data_.length(), false));
+ glue_.reset(new FFmpegGlue(protocol_.get()));
+
+ if (!glue_->OpenContext()) {
+ LOG(ERROR) << "Cannot open file.";
+ return;
+ }
+
+ // AVFormatContext is owned by the glue.
+ av_format_context_ = glue_->format_context();
+ if (avformat_find_stream_info(av_format_context_, NULL) < 0) {
+ LOG(ERROR) << "Cannot find stream information.";
+ return;
+ }
+
+ // Prepare FFmpeg decoders.
+ for (unsigned int i = 0; i < av_format_context_->nb_streams; ++i) {
+ AVStream* av_stream = av_format_context_->streams[i];
+ AVCodecContext* av_codec_context = av_stream->codec;
+ AVCodec* av_codec = avcodec_find_decoder(av_codec_context->codec_id);
+
+ if (!av_codec) {
+ LOG(ERROR) << "Cannot find decoder for the codec: "
+ << av_codec_context->codec_id;
+ continue;
+ }
+
+ // Number of threads for decoding.
+ av_codec_context->thread_count = 2;
+ av_codec_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
+ av_codec_context->request_sample_fmt = AV_SAMPLE_FMT_S16;
+
+ if (avcodec_open2(av_codec_context, av_codec, NULL) < 0) {
+ LOG(ERROR) << "Cannot open AVCodecContext for the codec: "
+ << av_codec_context->codec_id;
+ return;
+ }
+
+ if (av_codec->type == AVMEDIA_TYPE_AUDIO) {
+ if (av_codec_context->sample_fmt == AV_SAMPLE_FMT_S16P) {
+ LOG(ERROR) << "Audio format not supported.";
+ continue;
+ }
+ ChannelLayout layout = ChannelLayoutToChromeChannelLayout(
+ av_codec_context->channel_layout,
+ av_codec_context->channels);
+ if (layout == CHANNEL_LAYOUT_UNSUPPORTED) {
+ LOG(ERROR) << "Unsupported audio channels layout.";
+ continue;
+ }
+ if (audio_stream_index_ != -1) {
+ LOG(WARNING) << "Found multiple audio streams.";
+ }
+ audio_stream_index_ = static_cast<int>(i);
+ audio_params_.Reset(
+ AudioParameters::AUDIO_PCM_LINEAR,
+ layout,
+ av_codec_context->channels,
+ av_codec_context->channels,
+ av_codec_context->sample_rate,
+ 8 * av_get_bytes_per_sample(av_codec_context->sample_fmt),
+ av_codec_context->sample_rate / kAudioPacketsPerSecond);
+ LOG(INFO) << "Source file has audio.";
+ } else if (av_codec->type == AVMEDIA_TYPE_VIDEO) {
+ VideoFrame::Format format =
+ PixelFormatToVideoFormat(av_codec_context->pix_fmt);
+ if (format != VideoFrame::YV12) {
+ LOG(ERROR) << "Cannot handle non YV12 video format: " << format;
+ continue;
+ }
+ if (video_stream_index_ != -1) {
+ LOG(WARNING) << "Found multiple video streams.";
+ }
+ video_stream_index_ = static_cast<int>(i);
+ if (!override_fps) {
+ video_frame_rate_numerator_ = av_stream->r_frame_rate.num;
+ video_frame_rate_denominator_ = av_stream->r_frame_rate.den;
+ // Max frame rate is rounded up.
+ video_config_.max_frame_rate =
+ video_frame_rate_denominator_ +
+ video_frame_rate_numerator_ - 1;
+ video_config_.max_frame_rate /= video_frame_rate_denominator_;
+ } else {
+ // If video is played at a manual speed audio needs to match.
+ playback_rate_ = 1.0 * override_fps *
+ av_stream->r_frame_rate.den / av_stream->r_frame_rate.num;
+ }
+ LOG(INFO) << "Source file has video.";
+ } else {
+ LOG(ERROR) << "Unknown stream type; ignore.";
+ }
+ }
+
+ Rewind();
+}
+
+void FakeMediaSource::Start(scoped_refptr<AudioFrameInput> audio_frame_input,
+ scoped_refptr<VideoFrameInput> video_frame_input) {
+ audio_frame_input_ = audio_frame_input;
+ video_frame_input_ = video_frame_input;
+
+ LOG(INFO) << "Max Frame rate: " << video_config_.max_frame_rate;
+ LOG(INFO) << "Real Frame rate: "
+ << video_frame_rate_numerator_ << "/"
+ << video_frame_rate_denominator_ << " fps.";
+ LOG(INFO) << "Audio playback rate: " << playback_rate_;
+
+ if (!is_transcoding_audio() && !is_transcoding_video()) {
+ // Send fake patterns.
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(
+ &FakeMediaSource::SendNextFakeFrame,
+ base::Unretained(this)));
+ return;
+ }
+
+ // Send transcoding streams.
+ audio_algo_.Initialize(playback_rate_, audio_params_);
+ audio_algo_.FlushBuffers();
+ audio_fifo_input_bus_ =
+ AudioBus::Create(
+ audio_params_.channels(), audio_params_.frames_per_buffer());
+ // Audio FIFO can carry all data fron AudioRendererAlgorithm.
+ audio_fifo_.reset(
+ new AudioFifo(audio_params_.channels(),
+ audio_algo_.QueueCapacity()));
+ audio_resampler_.reset(new media::MultiChannelResampler(
+ audio_params_.channels(),
+ static_cast<double>(audio_params_.sample_rate()) /
+ kAudioSamplingFrequency,
+ audio_params_.frames_per_buffer(),
+ base::Bind(&FakeMediaSource::ProvideData, base::Unretained(this))));
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(
+ &FakeMediaSource::SendNextFrame,
+ base::Unretained(this)));
+}
+
+void FakeMediaSource::SendNextFakeFrame() {
+ gfx::Size size(video_config_.width, video_config_.height);
+ scoped_refptr<VideoFrame> video_frame =
+ VideoFrame::CreateBlackFrame(size);
+ PopulateVideoFrame(video_frame, synthetic_count_);
+ ++synthetic_count_;
+
+ base::TimeTicks now = clock_->NowTicks();
+ if (start_time_.is_null())
+ start_time_ = now;
+
+ base::TimeDelta video_time = VideoFrameTime(++video_frame_count_);
+ video_frame->set_timestamp(video_time);
+ video_frame_input_->InsertRawVideoFrame(video_frame,
+ start_time_ + video_time);
+
+ // Send just enough audio data to match next video frame's time.
+ base::TimeDelta audio_time = AudioFrameTime(audio_frame_count_);
+ while (audio_time < video_time) {
+ if (is_transcoding_audio()) {
+ Decode(true);
+ CHECK(!audio_bus_queue_.empty()) << "No audio decoded.";
+ scoped_ptr<AudioBus> bus(audio_bus_queue_.front());
+ audio_bus_queue_.pop();
+ audio_frame_input_->InsertAudio(
+ bus.Pass(), start_time_ + audio_time);
+ } else {
+ audio_frame_input_->InsertAudio(
+ audio_bus_factory_->NextAudioBus(
+ base::TimeDelta::FromMilliseconds(kAudioFrameMs)),
+ start_time_ + audio_time);
+ }
+ audio_time = AudioFrameTime(++audio_frame_count_);
+ }
+
+ // This is the time since the stream started.
+ const base::TimeDelta elapsed_time = now - start_time_;
+
+ // Handle the case when frame generation cannot keep up.
+ // Move the time ahead to match the next frame.
+ while (video_time < elapsed_time) {
+ LOG(WARNING) << "Skipping one frame.";
+ video_time = VideoFrameTime(++video_frame_count_);
+ }
+
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&FakeMediaSource::SendNextFakeFrame,
+ weak_factory_.GetWeakPtr()),
+ video_time - elapsed_time);
+}
+
+bool FakeMediaSource::SendNextTranscodedVideo(base::TimeDelta elapsed_time) {
+ if (!is_transcoding_video())
+ return false;
+
+ Decode(false);
+ if (video_frame_queue_.empty())
+ return false;
+
+ scoped_refptr<VideoFrame> decoded_frame =
+ video_frame_queue_.front();
+ if (elapsed_time < decoded_frame->timestamp())
+ return false;
+
+ gfx::Size size(video_config_.width, video_config_.height);
+ scoped_refptr<VideoFrame> video_frame =
+ VideoFrame::CreateBlackFrame(size);
+ video_frame_queue_.pop();
+ media::CopyPlane(VideoFrame::kYPlane,
+ decoded_frame->data(VideoFrame::kYPlane),
+ decoded_frame->stride(VideoFrame::kYPlane),
+ decoded_frame->rows(VideoFrame::kYPlane),
+ video_frame);
+ media::CopyPlane(VideoFrame::kUPlane,
+ decoded_frame->data(VideoFrame::kUPlane),
+ decoded_frame->stride(VideoFrame::kUPlane),
+ decoded_frame->rows(VideoFrame::kUPlane),
+ video_frame);
+ media::CopyPlane(VideoFrame::kVPlane,
+ decoded_frame->data(VideoFrame::kVPlane),
+ decoded_frame->stride(VideoFrame::kVPlane),
+ decoded_frame->rows(VideoFrame::kVPlane),
+ video_frame);
+
+ base::TimeDelta video_time;
+ // Use the timestamp from the file if we're transcoding.
+ video_time = ScaleTimestamp(decoded_frame->timestamp());
+ video_frame_input_->InsertRawVideoFrame(
+ video_frame, start_time_ + video_time);
+
+ // Make sure queue is not empty.
+ Decode(false);
+ return true;
+}
+
+bool FakeMediaSource::SendNextTranscodedAudio(base::TimeDelta elapsed_time) {
+ if (!is_transcoding_audio())
+ return false;
+
+ Decode(true);
+ if (audio_bus_queue_.empty())
+ return false;
+
+ base::TimeDelta audio_time = audio_sent_ts_->GetTimestamp();
+ if (elapsed_time < audio_time)
+ return false;
+ scoped_ptr<AudioBus> bus(audio_bus_queue_.front());
+ audio_bus_queue_.pop();
+ audio_sent_ts_->AddFrames(bus->frames());
+ audio_frame_input_->InsertAudio(
+ bus.Pass(), start_time_ + audio_time);
+
+ // Make sure queue is not empty.
+ Decode(true);
+ return true;
+}
+
+void FakeMediaSource::SendNextFrame() {
+ if (start_time_.is_null())
+ start_time_ = clock_->NowTicks();
+ if (start_time_.is_null())
+ start_time_ = clock_->NowTicks();
+
+ // Send as much as possible. Audio is sent according to
+ // system time.
+ while (SendNextTranscodedAudio(clock_->NowTicks() - start_time_));
+
+ // Video is sync'ed to audio.
+ while (SendNextTranscodedVideo(audio_sent_ts_->GetTimestamp()));
+
+ if (audio_bus_queue_.empty() && video_frame_queue_.empty()) {
+ // Both queues are empty can only mean that we have reached
+ // the end of the stream.
+ LOG(INFO) << "Rewind.";
+ Rewind();
+ start_time_ = base::TimeTicks();
+ audio_sent_ts_.reset();
+ video_first_pts_set_ = false;
+ }
+
+ // Send next send.
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(
+ &FakeMediaSource::SendNextFrame,
+ base::Unretained(this)),
+ base::TimeDelta::FromMilliseconds(kAudioFrameMs));
+}
+
+base::TimeDelta FakeMediaSource::VideoFrameTime(int frame_number) {
+ return frame_number * base::TimeDelta::FromSeconds(1) *
+ video_frame_rate_denominator_ / video_frame_rate_numerator_;
+}
+
+base::TimeDelta FakeMediaSource::ScaleTimestamp(base::TimeDelta timestamp) {
+ return base::TimeDelta::FromMicroseconds(
+ timestamp.InMicroseconds() / playback_rate_);
+}
+
+base::TimeDelta FakeMediaSource::AudioFrameTime(int frame_number) {
+ return frame_number * base::TimeDelta::FromMilliseconds(kAudioFrameMs);
+}
+
+void FakeMediaSource::Rewind() {
+ CHECK(av_seek_frame(av_format_context_, -1, 0, AVSEEK_FLAG_BACKWARD) >= 0)
+ << "Failed to rewind to the beginning.";
+}
+
+ScopedAVPacket FakeMediaSource::DemuxOnePacket(bool* audio) {
+ ScopedAVPacket packet(new AVPacket());
+ if (av_read_frame(av_format_context_, packet.get()) < 0) {
+ LOG(ERROR) << "Failed to read one AVPacket.";
+ packet.reset();
+ return packet.Pass();
+ }
+
+ int stream_index = static_cast<int>(packet->stream_index);
+ if (stream_index == audio_stream_index_) {
+ *audio = true;
+ } else if (stream_index == video_stream_index_) {
+ *audio = false;
+ } else {
+ // Ignore unknown packet.
+ LOG(INFO) << "Unknown packet.";
+ packet.reset();
+ }
+ return packet.Pass();
+}
+
+void FakeMediaSource::DecodeAudio(ScopedAVPacket packet) {
+ // Audio.
+ AVFrame* avframe = av_frame_alloc();
+
+ // Make a shallow copy of packet so we can slide packet.data as frames are
+ // decoded from the packet; otherwise av_free_packet() will corrupt memory.
+ AVPacket packet_temp = *packet.get();
+
+ do {
+ int frame_decoded = 0;
+ int result = avcodec_decode_audio4(
+ av_audio_context(), avframe, &frame_decoded, &packet_temp);
+ CHECK(result >= 0) << "Failed to decode audio.";
+ packet_temp.size -= result;
+ packet_temp.data += result;
+ if (!frame_decoded)
+ continue;
+
+ int frames_read = avframe->nb_samples;
+ if (frames_read < 0)
+ break;
+
+ if (!audio_sent_ts_) {
+ // Initialize the base time to the first packet in the file.
+ // This is set to the frequency we send to the receiver.
+ // Not the frequency of the source file. This is because we
+ // increment the frame count by samples we sent.
+ audio_sent_ts_.reset(
+ new AudioTimestampHelper(kAudioSamplingFrequency));
+ // For some files this is an invalid value.
+ base::TimeDelta base_ts;
+ audio_sent_ts_->SetBaseTimestamp(base_ts);
+ }
+
+ scoped_refptr<AudioBuffer> buffer =
+ AudioBuffer::CopyFrom(
+ AVSampleFormatToSampleFormat(
+ av_audio_context()->sample_fmt),
+ ChannelLayoutToChromeChannelLayout(
+ av_audio_context()->channel_layout,
+ av_audio_context()->channels),
+ av_audio_context()->channels,
+ av_audio_context()->sample_rate,
+ frames_read,
+ &avframe->data[0],
+ // Note: Not all files have correct values for pkt_pts.
+ base::TimeDelta::FromMilliseconds(avframe->pkt_pts));
+ audio_algo_.EnqueueBuffer(buffer);
+ av_frame_unref(avframe);
+ } while (packet_temp.size > 0);
+ av_frame_free(&avframe);
+
+ const int frames_needed_to_scale =
+ playback_rate_ * av_audio_context()->sample_rate /
+ kAudioPacketsPerSecond;
+ while (frames_needed_to_scale <= audio_algo_.frames_buffered()) {
+ if (!audio_algo_.FillBuffer(audio_fifo_input_bus_.get(),
+ audio_fifo_input_bus_->frames())) {
+ // Nothing can be scaled. Decode some more.
+ return;
+ }
+
+ // Prevent overflow of audio data in the FIFO.
+ if (audio_fifo_input_bus_->frames() + audio_fifo_->frames()
+ <= audio_fifo_->max_frames()) {
+ audio_fifo_->Push(audio_fifo_input_bus_.get());
+ } else {
+ LOG(WARNING) << "Audio FIFO full; dropping samples.";
+ }
+
+ // Make sure there's enough data to resample audio.
+ if (audio_fifo_->frames() <
+ 2 * audio_params_.sample_rate() / kAudioPacketsPerSecond) {
+ continue;
+ }
+
+ scoped_ptr<media::AudioBus> resampled_bus(
+ media::AudioBus::Create(
+ audio_params_.channels(),
+ kAudioSamplingFrequency / kAudioPacketsPerSecond));
+ audio_resampler_->Resample(resampled_bus->frames(),
+ resampled_bus.get());
+ audio_bus_queue_.push(resampled_bus.release());
+ }
+}
+
+void FakeMediaSource::DecodeVideo(ScopedAVPacket packet) {
+ // Video.
+ int got_picture;
+ AVFrame* avframe = av_frame_alloc();
+ // Tell the decoder to reorder for us.
+ avframe->reordered_opaque =
+ av_video_context()->reordered_opaque = packet->pts;
+ CHECK(avcodec_decode_video2(
+ av_video_context(), avframe, &got_picture, packet.get()) >= 0)
+ << "Video decode error.";
+ if (!got_picture) {
+ av_frame_free(&avframe);
+ return;
+ }
+ gfx::Size size(av_video_context()->width, av_video_context()->height);
+ if (!video_first_pts_set_ ||
+ avframe->reordered_opaque < video_first_pts_) {
+ video_first_pts_set_ = true;
+ video_first_pts_ = avframe->reordered_opaque;
+ }
+ int64 pts = avframe->reordered_opaque - video_first_pts_;
+ video_frame_queue_.push(
+ VideoFrame::WrapExternalYuvData(
+ media::VideoFrame::YV12,
+ size,
+ gfx::Rect(size),
+ size,
+ avframe->linesize[0],
+ avframe->linesize[1],
+ avframe->linesize[2],
+ avframe->data[0],
+ avframe->data[1],
+ avframe->data[2],
+ base::TimeDelta::FromMilliseconds(pts),
+ base::Bind(&AVFreeFrame, avframe)));
+}
+
+void FakeMediaSource::Decode(bool decode_audio) {
+ // Read the stream until one video frame can be decoded.
+ while (true) {
+ if (decode_audio && !audio_bus_queue_.empty())
+ return;
+ if (!decode_audio && !video_frame_queue_.empty())
+ return;
+
+ bool audio_packet = false;
+ ScopedAVPacket packet = DemuxOnePacket(&audio_packet);
+ if (!packet) {
+ LOG(INFO) << "End of stream.";
+ return;
+ }
+
+ if (audio_packet)
+ DecodeAudio(packet.Pass());
+ else
+ DecodeVideo(packet.Pass());
+ }
+}
+
+void FakeMediaSource::ProvideData(int frame_delay,
+ media::AudioBus* output_bus) {
+ if (audio_fifo_->frames() >= output_bus->frames()) {
+ audio_fifo_->Consume(output_bus, 0, output_bus->frames());
+ } else {
+ LOG(WARNING) << "Not enough audio data for resampling.";
+ output_bus->Zero();
+ }
+}
+
+AVStream* FakeMediaSource::av_audio_stream() {
+ return av_format_context_->streams[audio_stream_index_];
+}
+
+AVStream* FakeMediaSource::av_video_stream() {
+ return av_format_context_->streams[video_stream_index_];
+}
+
+AVCodecContext* FakeMediaSource::av_audio_context() {
+ return av_audio_stream()->codec;
+}
+
+AVCodecContext* FakeMediaSource::av_video_context() {
+ return av_video_stream()->codec;
+}
+
+} // namespace cast
+} // namespace media
diff --git a/media/cast/test/fake_media_source.h b/media/cast/test/fake_media_source.h
new file mode 100644
index 0000000000..b18d44ea2a
--- /dev/null
+++ b/media/cast/test/fake_media_source.h
@@ -0,0 +1,152 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// A fake media source that generates video and audio frames to a cast
+// sender.
+// This class can transcode a WebM file using FFmpeg. It can also
+// generate an animation and audio of fixed frequency.
+
+#ifndef MEDIA_CAST_TEST_FAKE_MEDIA_SOURCE_H_
+#define MEDIA_CAST_TEST_FAKE_MEDIA_SOURCE_H_
+
+#include <queue>
+
+#include "base/files/file_path.h"
+#include "base/files/memory_mapped_file.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/time/tick_clock.h"
+#include "media/audio/audio_parameters.h"
+#include "media/cast/cast_config.h"
+#include "media/filters/audio_renderer_algorithm.h"
+#include "media/filters/ffmpeg_demuxer.h"
+
+struct AVCodecContext;
+struct AVFormatContext;
+
+namespace media {
+
+class AudioBus;
+class AudioFifo;
+class AudioTimestampHelper;
+class FFmpegGlue;
+class InMemoryUrlProtocol;
+class MultiChannelResampler;
+
+namespace cast {
+
+class AudioFrameInput;
+class VideoFrameInput;
+class TestAudioBusFactory;
+
+class FakeMediaSource {
+ public:
+ // |task_runner| is to schedule decoding tasks.
+ // |clock| is used by this source but is not owned.
+ // |video_config| is the desired video config.
+ FakeMediaSource(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ base::TickClock* clock,
+ const VideoSenderConfig& video_config);
+ ~FakeMediaSource();
+
+ // Transcode this file as the source of video and audio frames.
+ // If |override_fps| is non zero then the file is played at the desired rate.
+ void SetSourceFile(const base::FilePath& video_file, int override_fps);
+
+ void Start(scoped_refptr<AudioFrameInput> audio_frame_input,
+ scoped_refptr<VideoFrameInput> video_frame_input);
+
+ const VideoSenderConfig& get_video_config() const { return video_config_; }
+
+ private:
+ bool is_transcoding_audio() const { return audio_stream_index_ >= 0; }
+ bool is_transcoding_video() const { return video_stream_index_ >= 0; }
+
+ void SendNextFrame();
+ void SendNextFakeFrame();
+
+ // Return true if a frame was sent.
+ bool SendNextTranscodedVideo(base::TimeDelta elapsed_time);
+
+ // Return true if a frame was sent.
+ bool SendNextTranscodedAudio(base::TimeDelta elapsed_time);
+
+ // Helper methods to compute timestamps for the frame number specified.
+ base::TimeDelta VideoFrameTime(int frame_number);
+
+ base::TimeDelta ScaleTimestamp(base::TimeDelta timestamp);
+
+ base::TimeDelta AudioFrameTime(int frame_number);
+
+ // Go to the beginning of the stream.
+ void Rewind();
+
+ // Call FFmpeg to fetch one packet.
+ ScopedAVPacket DemuxOnePacket(bool* audio);
+
+ void DecodeAudio(ScopedAVPacket packet);
+ void DecodeVideo(ScopedAVPacket packet);
+ void Decode(bool decode_audio);
+
+ void ProvideData(int frame_delay, media::AudioBus* output_bus);
+
+ AVStream* av_audio_stream();
+ AVStream* av_video_stream();
+ AVCodecContext* av_audio_context();
+ AVCodecContext* av_video_context();
+
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ VideoSenderConfig video_config_;
+ scoped_refptr<AudioFrameInput> audio_frame_input_;
+ scoped_refptr<VideoFrameInput> video_frame_input_;
+ uint8 synthetic_count_;
+ base::TickClock* const clock_; // Not owned by this class.
+
+ // Time when the stream starts.
+ base::TimeTicks start_time_;
+
+ // The following three members are used only for fake frames.
+ int audio_frame_count_; // Each audio frame is exactly 10ms.
+ int video_frame_count_;
+ scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
+
+ // NOTE: Weak pointers must be invalidated before all other member variables.
+ base::WeakPtrFactory<FakeMediaSource> weak_factory_;
+
+ base::MemoryMappedFile file_data_;
+ scoped_ptr<InMemoryUrlProtocol> protocol_;
+ scoped_ptr<FFmpegGlue> glue_;
+ AVFormatContext* av_format_context_;
+
+ int audio_stream_index_;
+ AudioParameters audio_params_;
+ double playback_rate_;
+
+ int video_stream_index_;
+ int video_frame_rate_numerator_;
+ int video_frame_rate_denominator_;
+
+ // These are used for audio resampling.
+ scoped_ptr<media::MultiChannelResampler> audio_resampler_;
+ scoped_ptr<media::AudioFifo> audio_fifo_;
+ scoped_ptr<media::AudioBus> audio_fifo_input_bus_;
+ media::AudioRendererAlgorithm audio_algo_;
+
+ // Track the timestamp of audio sent to the receiver.
+ scoped_ptr<media::AudioTimestampHelper> audio_sent_ts_;
+
+ std::queue<scoped_refptr<VideoFrame> > video_frame_queue_;
+ int64 video_first_pts_;
+ bool video_first_pts_set_;
+
+ std::queue<AudioBus*> audio_bus_queue_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeMediaSource);
+};
+
+} // namespace cast
+} // namespace media
+
+#endif // MEDIA_CAST_TEST_FAKE_MEDIA_SOURCE_H_
diff --git a/media/cast/test/loopback_transport.cc b/media/cast/test/loopback_transport.cc
new file mode 100644
index 0000000000..3b72a7ef5a
--- /dev/null
+++ b/media/cast/test/loopback_transport.cc
@@ -0,0 +1,68 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/cast/test/loopback_transport.h"
+
+#include "base/single_thread_task_runner.h"
+#include "base/time/tick_clock.h"
+#include "media/cast/test/utility/udp_proxy.h"
+
+namespace media {
+namespace cast {
+namespace {
+
+// Shim that turns forwards packets from a test::PacketPipe to a
+// PacketReceiverCallback.
+class LoopBackPacketPipe : public test::PacketPipe {
+ public:
+ LoopBackPacketPipe(
+ const PacketReceiverCallback& packet_receiver)
+ : packet_receiver_(packet_receiver) {}
+
+ virtual ~LoopBackPacketPipe() {}
+
+ // PacketPipe implementations.
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
+ packet_receiver_.Run(packet.Pass());
+ }
+
+ private:
+ PacketReceiverCallback packet_receiver_;
+
+ DISALLOW_COPY_AND_ASSIGN(LoopBackPacketPipe);
+};
+
+} // namespace
+
+LoopBackTransport::LoopBackTransport(
+ scoped_refptr<CastEnvironment> cast_environment)
+ : cast_environment_(cast_environment) {
+}
+
+LoopBackTransport::~LoopBackTransport() {
+}
+
+bool LoopBackTransport::SendPacket(PacketRef packet,
+ const base::Closure& cb) {
+ DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
+ scoped_ptr<Packet> packet_copy(new Packet(packet->data));
+ packet_pipe_->Send(packet_copy.Pass());
+ return true;
+}
+
+void LoopBackTransport::Initialize(
+ scoped_ptr<test::PacketPipe> pipe,
+ const PacketReceiverCallback& packet_receiver,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ base::TickClock* clock) {
+ scoped_ptr<test::PacketPipe> loopback_pipe(
+ new LoopBackPacketPipe(packet_receiver));
+ // Append the loopback pipe to the end.
+ pipe->AppendToPipe(loopback_pipe.Pass());
+ packet_pipe_ = pipe.Pass();
+ packet_pipe_->InitOnIOThread(task_runner, clock);
+}
+
+} // namespace cast
+} // namespace media
diff --git a/media/cast/test/loopback_transport.h b/media/cast/test/loopback_transport.h
new file mode 100644
index 0000000000..8942caa4b9
--- /dev/null
+++ b/media/cast/test/loopback_transport.h
@@ -0,0 +1,55 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_CAST_TEST_LOOPBACK_TRANSPORT_H_
+#define MEDIA_CAST_TEST_LOOPBACK_TRANSPORT_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "media/cast/cast_environment.h"
+#include "media/cast/net/cast_transport_config.h"
+
+namespace base {
+class SingleThreadTaskRunner;
+class TickClock;
+} // namespace base
+
+namespace media {
+namespace cast {
+
+namespace test {
+class PacketPipe;
+} // namespace test
+
+// Class that sends the packet to a receiver through a stack of PacketPipes.
+class LoopBackTransport : public PacketSender {
+ public:
+ explicit LoopBackTransport(
+ scoped_refptr<CastEnvironment> cast_environment);
+ virtual ~LoopBackTransport();
+
+ virtual bool SendPacket(PacketRef packet,
+ const base::Closure& cb) OVERRIDE;
+
+ // Initiailize this loopback transport.
+ // Establish a flow of packets from |pipe| to |packet_receiver|.
+ // The data flow looks like:
+ // SendPacket() -> |pipe| -> Fake loopback pipe -> |packet_receiver|.
+ void Initialize(
+ scoped_ptr<test::PacketPipe> pipe,
+ const PacketReceiverCallback& packet_receiver,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ base::TickClock* clock);
+
+ private:
+ const scoped_refptr<CastEnvironment> cast_environment_;
+ scoped_ptr<test::PacketPipe> packet_pipe_;
+
+ DISALLOW_COPY_AND_ASSIGN(LoopBackTransport);
+};
+
+} // namespace cast
+} // namespace media
+
+#endif // MEDIA_CAST_TEST_LOOPBACK_TRANSPORT_H_
diff --git a/media/cast/test/proto/BUILD.gn b/media/cast/test/proto/BUILD.gn
new file mode 100644
index 0000000000..7ac71d2e7f
--- /dev/null
+++ b/media/cast/test/proto/BUILD.gn
@@ -0,0 +1,14 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/protobuf/proto_library.gni")
+
+# GYP version: media/cast/cast.gyp:cast_logging_proto
+proto_library("cast_network_simulation_proto") {
+ visibility = ":proto"
+ sources = [
+ "network_simulation_model.proto",
+ ]
+}
+
diff --git a/media/cast/test/proto/network_simulation_model.proto b/media/cast/test/proto/network_simulation_model.proto
new file mode 100644
index 0000000000..902712f7fa
--- /dev/null
+++ b/media/cast/test/proto/network_simulation_model.proto
@@ -0,0 +1,27 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Contains parameters for a network simulation model.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+
+package media.cast.proto;
+
+message NetworkSimulationModel {
+ optional NetworkSimulationModelType type = 1;
+ optional IPPModel ipp = 2;
+}
+
+enum NetworkSimulationModelType {
+ INTERRUPTED_POISSON_PROCESS = 1;
+}
+
+message IPPModel {
+ optional double coef_burstiness = 1;
+ optional double coef_variance = 2;
+ repeated double average_rate = 3;
+}
+
diff --git a/media/cast/test/receiver.cc b/media/cast/test/receiver.cc
index 9861d3834e..e87055420f 100644
--- a/media/cast/test/receiver.cc
+++ b/media/cast/test/receiver.cc
@@ -33,13 +33,13 @@
#include "media/cast/cast_environment.h"
#include "media/cast/cast_receiver.h"
#include "media/cast/logging/logging_defines.h"
+#include "media/cast/net/udp_transport.h"
#include "media/cast/test/utility/audio_utility.h"
#include "media/cast/test/utility/barcode.h"
#include "media/cast/test/utility/default_config.h"
#include "media/cast/test/utility/in_process_receiver.h"
#include "media/cast/test/utility/input_builder.h"
#include "media/cast/test/utility/standalone_cast_environment.h"
-#include "media/cast/transport/transport/udp_transport.h"
#include "net/base/net_util.h"
#if defined(OS_LINUX)
diff --git a/media/cast/test/sender.cc b/media/cast/test/sender.cc
index e457e2c9fe..6f9074f17e 100644
--- a/media/cast/test/sender.cc
+++ b/media/cast/test/sender.cc
@@ -10,10 +10,7 @@
#include "base/at_exit.h"
#include "base/base_paths.h"
#include "base/command_line.h"
-#include "base/file_util.h"
#include "base/files/file_path.h"
-#include "base/files/memory_mapped_file.h"
-#include "base/files/scoped_file.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
@@ -22,15 +19,8 @@
#include "base/threading/thread.h"
#include "base/time/default_tick_clock.h"
#include "base/values.h"
-#include "media/audio/audio_parameters.h"
-#include "media/base/audio_buffer.h"
-#include "media/base/audio_bus.h"
-#include "media/base/audio_fifo.h"
-#include "media/base/audio_timestamp_helper.h"
#include "media/base/media.h"
-#include "media/base/multi_channel_resampler.h"
#include "media/base/video_frame.h"
-#include "media/base/video_util.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/cast_sender.h"
@@ -40,28 +30,16 @@
#include "media/cast/logging/proto/raw_events.pb.h"
#include "media/cast/logging/receiver_time_offset_estimator_impl.h"
#include "media/cast/logging/stats_event_subscriber.h"
-#include "media/cast/test/utility/audio_utility.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/udp_transport.h"
+#include "media/cast/test/fake_media_source.h"
#include "media/cast/test/utility/default_config.h"
#include "media/cast/test/utility/input_builder.h"
-#include "media/cast/test/utility/video_utility.h"
-#include "media/cast/transport/cast_transport_defines.h"
-#include "media/cast/transport/cast_transport_sender.h"
-#include "media/cast/transport/transport/udp_transport.h"
-#include "media/ffmpeg/ffmpeg_common.h"
-#include "media/ffmpeg/ffmpeg_deleters.h"
-#include "media/filters/audio_renderer_algorithm.h"
-#include "media/filters/ffmpeg_demuxer.h"
-#include "media/filters/ffmpeg_glue.h"
-#include "media/filters/in_memory_url_protocol.h"
-#include "ui/gfx/size.h"
namespace {
static const int kAudioChannels = 2;
static const int kAudioSamplingFrequency = 48000;
-static const int kSoundFrequency = 1234; // Frequency of sinusoid wave.
-static const float kSoundVolume = 0.5f;
-static const int kAudioFrameMs = 10; // Each audio frame is exactly 10ms.
-static const int kAudioPacketsPerSecond = 1000 / kAudioFrameMs;
// The max allowed size of serialized log.
const int kMaxSerializedLogBytes = 10 * 1000 * 1000;
@@ -79,36 +57,32 @@ const int kMaxSerializedLogBytes = 10 * 1000 * 1000;
//
// --fps=xx
// Override framerate of the video stream.
-
const char kSwitchAddress[] = "address";
const char kSwitchPort[] = "port";
const char kSwitchSourceFile[] = "source-file";
const char kSwitchFps[] = "fps";
-} // namespace
-
-namespace media {
-namespace cast {
-
-AudioSenderConfig GetAudioSenderConfig() {
- AudioSenderConfig audio_config;
+media::cast::AudioSenderConfig GetAudioSenderConfig() {
+ media::cast::AudioSenderConfig audio_config;
audio_config.rtcp_c_name = "audio_sender@a.b.c.d";
audio_config.use_external_encoder = false;
audio_config.frequency = kAudioSamplingFrequency;
audio_config.channels = kAudioChannels;
- audio_config.bitrate = 64000;
- audio_config.codec = transport::kOpus;
- audio_config.rtp_config.ssrc = 1;
+ audio_config.bitrate = 0; // Use Opus auto-VBR mode.
+ audio_config.codec = media::cast::CODEC_AUDIO_OPUS;
+ audio_config.ssrc = 1;
audio_config.incoming_feedback_ssrc = 2;
- audio_config.rtp_config.payload_type = 127;
- audio_config.rtp_config.max_delay_ms = 300;
+ 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.target_playout_delay = base::TimeDelta::FromMilliseconds(300);
return audio_config;
}
-VideoSenderConfig GetVideoSenderConfig() {
- VideoSenderConfig video_config;
+media::cast::VideoSenderConfig GetVideoSenderConfig() {
+ media::cast::VideoSenderConfig video_config;
video_config.rtcp_c_name = "video_sender@a.b.c.d";
video_config.use_external_encoder = false;
@@ -124,7 +98,7 @@ VideoSenderConfig GetVideoSenderConfig() {
video_config.start_bitrate = video_config.min_bitrate;
// Codec.
- video_config.codec = transport::kVp8;
+ video_config.codec = media::cast::CODEC_VIDEO_VP8;
video_config.max_number_of_video_buffers_used = 1;
video_config.number_of_encode_threads = 2;
@@ -133,620 +107,17 @@ VideoSenderConfig GetVideoSenderConfig() {
video_config.max_qp = 40;
// SSRCs and payload type. Don't change them.
- video_config.rtp_config.ssrc = 11;
+ video_config.ssrc = 11;
video_config.incoming_feedback_ssrc = 12;
- video_config.rtp_config.payload_type = 96;
- video_config.rtp_config.max_delay_ms = 300;
+ 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.target_playout_delay = base::TimeDelta::FromMilliseconds(300);
return video_config;
}
-void AVFreeFrame(AVFrame* frame) { av_frame_free(&frame); }
-
-class SendProcess {
- public:
- SendProcess(scoped_refptr<base::SingleThreadTaskRunner> thread_proxy,
- base::TickClock* clock,
- const VideoSenderConfig& video_config)
- : test_app_thread_proxy_(thread_proxy),
- video_config_(video_config),
- synthetic_count_(0),
- clock_(clock),
- audio_frame_count_(0),
- video_frame_count_(0),
- weak_factory_(this),
- av_format_context_(NULL),
- audio_stream_index_(-1),
- playback_rate_(1.0),
- video_stream_index_(-1),
- video_frame_rate_numerator_(video_config.max_frame_rate),
- video_frame_rate_denominator_(1),
- video_first_pts_(0),
- video_first_pts_set_(false) {
- audio_bus_factory_.reset(new TestAudioBusFactory(kAudioChannels,
- kAudioSamplingFrequency,
- kSoundFrequency,
- kSoundVolume));
- const CommandLine* cmd = CommandLine::ForCurrentProcess();
- int override_fps = 0;
- if (base::StringToInt(cmd->GetSwitchValueASCII(kSwitchFps),
- &override_fps)) {
- video_config_.max_frame_rate = override_fps;
- video_frame_rate_numerator_ = override_fps;
- }
-
- // Load source file and prepare FFmpeg demuxer.
- base::FilePath source_path = cmd->GetSwitchValuePath(kSwitchSourceFile);
- if (source_path.empty())
- return;
-
- LOG(INFO) << "Source: " << source_path.value();
- if (!file_data_.Initialize(source_path)) {
- LOG(ERROR) << "Cannot load file.";
- return;
- }
- protocol_.reset(
- new InMemoryUrlProtocol(file_data_.data(), file_data_.length(), false));
- glue_.reset(new FFmpegGlue(protocol_.get()));
-
- if (!glue_->OpenContext()) {
- LOG(ERROR) << "Cannot open file.";
- return;
- }
-
- // AVFormatContext is owned by the glue.
- av_format_context_ = glue_->format_context();
- if (avformat_find_stream_info(av_format_context_, NULL) < 0) {
- LOG(ERROR) << "Cannot find stream information.";
- return;
- }
-
- // Prepare FFmpeg decoders.
- for (unsigned int i = 0; i < av_format_context_->nb_streams; ++i) {
- AVStream* av_stream = av_format_context_->streams[i];
- AVCodecContext* av_codec_context = av_stream->codec;
- AVCodec* av_codec = avcodec_find_decoder(av_codec_context->codec_id);
-
- if (!av_codec) {
- LOG(ERROR) << "Cannot find decoder for the codec: "
- << av_codec_context->codec_id;
- continue;
- }
-
- // Number of threads for decoding.
- av_codec_context->thread_count = 2;
- av_codec_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
- av_codec_context->request_sample_fmt = AV_SAMPLE_FMT_S16;
-
- if (avcodec_open2(av_codec_context, av_codec, NULL) < 0) {
- LOG(ERROR) << "Cannot open AVCodecContext for the codec: "
- << av_codec_context->codec_id;
- return;
- }
-
- if (av_codec->type == AVMEDIA_TYPE_AUDIO) {
- if (av_codec_context->sample_fmt == AV_SAMPLE_FMT_S16P) {
- LOG(ERROR) << "Audio format not supported.";
- continue;
- }
- ChannelLayout layout = ChannelLayoutToChromeChannelLayout(
- av_codec_context->channel_layout,
- av_codec_context->channels);
- if (layout == CHANNEL_LAYOUT_UNSUPPORTED) {
- LOG(ERROR) << "Unsupported audio channels layout.";
- continue;
- }
- if (audio_stream_index_ != -1) {
- LOG(WARNING) << "Found multiple audio streams.";
- }
- audio_stream_index_ = static_cast<int>(i);
- audio_params_.Reset(
- AudioParameters::AUDIO_PCM_LINEAR,
- layout,
- av_codec_context->channels,
- av_codec_context->channels,
- av_codec_context->sample_rate,
- 8 * av_get_bytes_per_sample(av_codec_context->sample_fmt),
- av_codec_context->sample_rate / kAudioPacketsPerSecond);
- LOG(INFO) << "Source file has audio.";
- } else if (av_codec->type == AVMEDIA_TYPE_VIDEO) {
- VideoFrame::Format format =
- PixelFormatToVideoFormat(av_codec_context->pix_fmt);
- if (format != VideoFrame::YV12) {
- LOG(ERROR) << "Cannot handle non YV12 video format: " << format;
- continue;
- }
- if (video_stream_index_ != -1) {
- LOG(WARNING) << "Found multiple video streams.";
- }
- video_stream_index_ = static_cast<int>(i);
- if (!override_fps) {
- video_frame_rate_numerator_ = av_stream->r_frame_rate.num;
- video_frame_rate_denominator_ = av_stream->r_frame_rate.den;
- // Max frame rate is rounded up.
- video_config_.max_frame_rate =
- video_frame_rate_denominator_ +
- video_frame_rate_numerator_ - 1;
- video_config_.max_frame_rate /= video_frame_rate_denominator_;
- } else {
- // If video is played at a manual speed audio needs to match.
- playback_rate_ = 1.0 * override_fps *
- av_stream->r_frame_rate.den / av_stream->r_frame_rate.num;
- }
- LOG(INFO) << "Source file has video.";
- } else {
- LOG(ERROR) << "Unknown stream type; ignore.";
- }
- }
-
- Rewind();
- }
-
- ~SendProcess() {
- }
-
- void Start(scoped_refptr<AudioFrameInput> audio_frame_input,
- scoped_refptr<VideoFrameInput> video_frame_input) {
- audio_frame_input_ = audio_frame_input;
- video_frame_input_ = video_frame_input;
-
- LOG(INFO) << "Max Frame rate: " << video_config_.max_frame_rate;
- LOG(INFO) << "Real Frame rate: "
- << video_frame_rate_numerator_ << "/"
- << video_frame_rate_denominator_ << " fps.";
- LOG(INFO) << "Audio playback rate: " << playback_rate_;
-
- if (!is_transcoding_audio() && !is_transcoding_video()) {
- // Send fake patterns.
- test_app_thread_proxy_->PostTask(
- FROM_HERE,
- base::Bind(
- &SendProcess::SendNextFakeFrame,
- base::Unretained(this)));
- return;
- }
-
- // Send transcoding streams.
- audio_algo_.Initialize(playback_rate_, audio_params_);
- audio_algo_.FlushBuffers();
- audio_fifo_input_bus_ =
- AudioBus::Create(
- audio_params_.channels(), audio_params_.frames_per_buffer());
- // Audio FIFO can carry all data fron AudioRendererAlgorithm.
- audio_fifo_.reset(
- new AudioFifo(audio_params_.channels(),
- audio_algo_.QueueCapacity()));
- audio_resampler_.reset(new media::MultiChannelResampler(
- audio_params_.channels(),
- static_cast<double>(audio_params_.sample_rate()) /
- kAudioSamplingFrequency,
- audio_params_.frames_per_buffer(),
- base::Bind(&SendProcess::ProvideData, base::Unretained(this))));
- test_app_thread_proxy_->PostTask(
- FROM_HERE,
- base::Bind(
- &SendProcess::SendNextFrame,
- base::Unretained(this)));
- }
-
- void SendNextFakeFrame() {
- gfx::Size size(video_config_.width, video_config_.height);
- scoped_refptr<VideoFrame> video_frame =
- VideoFrame::CreateBlackFrame(size);
- PopulateVideoFrame(video_frame, synthetic_count_);
- ++synthetic_count_;
-
- base::TimeTicks now = clock_->NowTicks();
- if (start_time_.is_null())
- start_time_ = now;
-
- base::TimeDelta video_time = VideoFrameTime(video_frame_count_);
- video_frame->set_timestamp(video_time);
- video_frame_input_->InsertRawVideoFrame(video_frame,
- start_time_ + video_time);
-
- // Send just enough audio data to match next video frame's time.
- base::TimeDelta audio_time = AudioFrameTime(audio_frame_count_);
- while (audio_time < video_time) {
- if (is_transcoding_audio()) {
- Decode(true);
- CHECK(!audio_bus_queue_.empty()) << "No audio decoded.";
- scoped_ptr<AudioBus> bus(audio_bus_queue_.front());
- audio_bus_queue_.pop();
- audio_frame_input_->InsertAudio(
- bus.Pass(), start_time_ + audio_time);
- } else {
- audio_frame_input_->InsertAudio(
- audio_bus_factory_->NextAudioBus(
- base::TimeDelta::FromMilliseconds(kAudioFrameMs)),
- start_time_ + audio_time);
- }
- audio_time = AudioFrameTime(++audio_frame_count_);
- }
-
- // This is the time since the stream started.
- const base::TimeDelta elapsed_time = now - start_time_;
-
- // Handle the case when frame generation cannot keep up.
- // Move the time ahead to match the next frame.
- while (video_time < elapsed_time) {
- LOG(WARNING) << "Skipping one frame.";
- video_time = VideoFrameTime(++video_frame_count_);
- }
-
- test_app_thread_proxy_->PostDelayedTask(
- FROM_HERE,
- base::Bind(&SendProcess::SendNextFakeFrame,
- weak_factory_.GetWeakPtr()),
- video_time - elapsed_time);
- }
-
- // Return true if a frame was sent.
- bool SendNextTranscodedVideo(base::TimeDelta elapsed_time) {
- if (!is_transcoding_video())
- return false;
-
- Decode(false);
- if (video_frame_queue_.empty())
- return false;
-
- scoped_refptr<VideoFrame> decoded_frame =
- video_frame_queue_.front();
- if (elapsed_time < decoded_frame->timestamp())
- return false;
-
- gfx::Size size(video_config_.width, video_config_.height);
- scoped_refptr<VideoFrame> video_frame =
- VideoFrame::CreateBlackFrame(size);
- video_frame_queue_.pop();
- media::CopyPlane(VideoFrame::kYPlane,
- decoded_frame->data(VideoFrame::kYPlane),
- decoded_frame->stride(VideoFrame::kYPlane),
- decoded_frame->rows(VideoFrame::kYPlane),
- video_frame);
- media::CopyPlane(VideoFrame::kUPlane,
- decoded_frame->data(VideoFrame::kUPlane),
- decoded_frame->stride(VideoFrame::kUPlane),
- decoded_frame->rows(VideoFrame::kUPlane),
- video_frame);
- media::CopyPlane(VideoFrame::kVPlane,
- decoded_frame->data(VideoFrame::kVPlane),
- decoded_frame->stride(VideoFrame::kVPlane),
- decoded_frame->rows(VideoFrame::kVPlane),
- video_frame);
-
- base::TimeDelta video_time;
- // Use the timestamp from the file if we're transcoding.
- video_time = ScaleTimestamp(decoded_frame->timestamp());
- video_frame_input_->InsertRawVideoFrame(
- video_frame, start_time_ + video_time);
-
- // Make sure queue is not empty.
- Decode(false);
- return true;
- }
-
- // Return true if a frame was sent.
- bool SendNextTranscodedAudio(base::TimeDelta elapsed_time) {
- if (!is_transcoding_audio())
- return false;
-
- Decode(true);
- if (audio_bus_queue_.empty())
- return false;
-
- base::TimeDelta audio_time = audio_sent_ts_->GetTimestamp();
- if (elapsed_time < audio_time)
- return false;
- scoped_ptr<AudioBus> bus(audio_bus_queue_.front());
- audio_bus_queue_.pop();
- audio_sent_ts_->AddFrames(bus->frames());
- audio_frame_input_->InsertAudio(
- bus.Pass(), start_time_ + audio_time);
-
- // Make sure queue is not empty.
- Decode(true);
- return true;
- }
-
- void SendNextFrame() {
- if (start_time_.is_null())
- start_time_ = clock_->NowTicks();
- if (start_time_.is_null())
- start_time_ = clock_->NowTicks();
-
- // Send as much as possible. Audio is sent according to
- // system time.
- while (SendNextTranscodedAudio(clock_->NowTicks() - start_time_));
-
- // Video is sync'ed to audio.
- while (SendNextTranscodedVideo(audio_sent_ts_->GetTimestamp()));
-
- if (audio_bus_queue_.empty() && video_frame_queue_.empty()) {
- // Both queues are empty can only mean that we have reached
- // the end of the stream.
- LOG(INFO) << "Rewind.";
- Rewind();
- start_time_ = base::TimeTicks();
- audio_sent_ts_.reset();
- video_first_pts_set_ = false;
- }
-
- // Send next send.
- test_app_thread_proxy_->PostDelayedTask(
- FROM_HERE,
- base::Bind(
- &SendProcess::SendNextFrame,
- base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(kAudioFrameMs));
- }
-
- const VideoSenderConfig& get_video_config() const { return video_config_; }
-
- private:
- bool is_transcoding_audio() { return audio_stream_index_ >= 0; }
- bool is_transcoding_video() { return video_stream_index_ >= 0; }
-
- // Helper methods to compute timestamps for the frame number specified.
- base::TimeDelta VideoFrameTime(int frame_number) {
- return frame_number * base::TimeDelta::FromSeconds(1) *
- video_frame_rate_denominator_ / video_frame_rate_numerator_;
- }
-
- base::TimeDelta ScaleTimestamp(base::TimeDelta timestamp) {
- return base::TimeDelta::FromMicroseconds(
- timestamp.InMicroseconds() / playback_rate_);
- }
-
- base::TimeDelta AudioFrameTime(int frame_number) {
- return frame_number * base::TimeDelta::FromMilliseconds(kAudioFrameMs);
- }
-
- // Go to the beginning of the stream.
- void Rewind() {
- CHECK(av_seek_frame(av_format_context_, -1, 0, AVSEEK_FLAG_BACKWARD) >= 0)
- << "Failed to rewind to the beginning.";
- }
-
- // Call FFmpeg to fetch one packet.
- ScopedAVPacket DemuxOnePacket(bool* audio) {
- ScopedAVPacket packet(new AVPacket());
- if (av_read_frame(av_format_context_, packet.get()) < 0) {
- LOG(ERROR) << "Failed to read one AVPacket.";
- packet.reset();
- return packet.Pass();
- }
-
- int stream_index = static_cast<int>(packet->stream_index);
- if (stream_index == audio_stream_index_) {
- *audio = true;
- } else if (stream_index == video_stream_index_) {
- *audio = false;
- } else {
- // Ignore unknown packet.
- LOG(INFO) << "Unknown packet.";
- packet.reset();
- }
- return packet.Pass();
- }
-
- void DecodeAudio(ScopedAVPacket packet) {
- // Audio.
- AVFrame* avframe = av_frame_alloc();
-
- // Make a shallow copy of packet so we can slide packet.data as frames are
- // decoded from the packet; otherwise av_free_packet() will corrupt memory.
- AVPacket packet_temp = *packet.get();
-
- do {
- int frame_decoded = 0;
- int result = avcodec_decode_audio4(
- av_audio_context(), avframe, &frame_decoded, &packet_temp);
- CHECK(result >= 0) << "Failed to decode audio.";
- packet_temp.size -= result;
- packet_temp.data += result;
- if (!frame_decoded)
- continue;
-
- int frames_read = avframe->nb_samples;
- if (frames_read < 0)
- break;
-
- if (!audio_sent_ts_) {
- // Initialize the base time to the first packet in the file.
- // This is set to the frequency we send to the receiver.
- // Not the frequency of the source file. This is because we
- // increment the frame count by samples we sent.
- audio_sent_ts_.reset(
- new AudioTimestampHelper(kAudioSamplingFrequency));
- // For some files this is an invalid value.
- base::TimeDelta base_ts;
- audio_sent_ts_->SetBaseTimestamp(base_ts);
- }
-
- scoped_refptr<AudioBuffer> buffer =
- AudioBuffer::CopyFrom(
- AVSampleFormatToSampleFormat(
- av_audio_context()->sample_fmt),
- ChannelLayoutToChromeChannelLayout(
- av_audio_context()->channel_layout,
- av_audio_context()->channels),
- av_audio_context()->channels,
- av_audio_context()->sample_rate,
- frames_read,
- &avframe->data[0],
- // Note: Not all files have correct values for pkt_pts.
- base::TimeDelta::FromMilliseconds(avframe->pkt_pts));
- audio_algo_.EnqueueBuffer(buffer);
- av_frame_unref(avframe);
- } while (packet_temp.size > 0);
- av_frame_free(&avframe);
-
- const int frames_needed_to_scale =
- playback_rate_ * av_audio_context()->sample_rate /
- kAudioPacketsPerSecond;
- while (frames_needed_to_scale <= audio_algo_.frames_buffered()) {
- if (!audio_algo_.FillBuffer(audio_fifo_input_bus_.get(),
- audio_fifo_input_bus_->frames())) {
- // Nothing can be scaled. Decode some more.
- return;
- }
-
- // Prevent overflow of audio data in the FIFO.
- if (audio_fifo_input_bus_->frames() + audio_fifo_->frames()
- <= audio_fifo_->max_frames()) {
- audio_fifo_->Push(audio_fifo_input_bus_.get());
- } else {
- LOG(WARNING) << "Audio FIFO full; dropping samples.";
- }
-
- // Make sure there's enough data to resample audio.
- if (audio_fifo_->frames() <
- 2 * audio_params_.sample_rate() / kAudioPacketsPerSecond) {
- continue;
- }
-
- scoped_ptr<media::AudioBus> resampled_bus(
- media::AudioBus::Create(
- audio_params_.channels(),
- kAudioSamplingFrequency / kAudioPacketsPerSecond));
- audio_resampler_->Resample(resampled_bus->frames(),
- resampled_bus.get());
- audio_bus_queue_.push(resampled_bus.release());
- }
- }
-
- void DecodeVideo(ScopedAVPacket packet) {
- // Video.
- int got_picture;
- AVFrame* avframe = av_frame_alloc();
- // Tell the decoder to reorder for us.
- avframe->reordered_opaque =
- av_video_context()->reordered_opaque = packet->pts;
- CHECK(avcodec_decode_video2(
- av_video_context(), avframe, &got_picture, packet.get()) >= 0)
- << "Video decode error.";
- if (!got_picture) {
- av_frame_free(&avframe);
- return;
- }
- gfx::Size size(av_video_context()->width, av_video_context()->height);
- if (!video_first_pts_set_ ||
- avframe->reordered_opaque < video_first_pts_) {
- video_first_pts_set_ = true;
- video_first_pts_ = avframe->reordered_opaque;
- }
- int64 pts = avframe->reordered_opaque - video_first_pts_;
- video_frame_queue_.push(
- VideoFrame::WrapExternalYuvData(
- media::VideoFrame::YV12,
- size,
- gfx::Rect(size),
- size,
- avframe->linesize[0],
- avframe->linesize[1],
- avframe->linesize[2],
- avframe->data[0],
- avframe->data[1],
- avframe->data[2],
- base::TimeDelta::FromMilliseconds(pts),
- base::Bind(&AVFreeFrame, avframe)));
- }
-
- void Decode(bool decode_audio) {
- // Read the stream until one video frame can be decoded.
- while (true) {
- if (decode_audio && !audio_bus_queue_.empty())
- return;
- if (!decode_audio && !video_frame_queue_.empty())
- return;
-
- bool audio_packet = false;
- ScopedAVPacket packet = DemuxOnePacket(&audio_packet);
- if (!packet) {
- LOG(INFO) << "End of stream.";
- return;
- }
-
- if (audio_packet)
- DecodeAudio(packet.Pass());
- else
- DecodeVideo(packet.Pass());
- }
- }
-
- void ProvideData(int frame_delay, media::AudioBus* output_bus) {
- if (audio_fifo_->frames() >= output_bus->frames()) {
- audio_fifo_->Consume(output_bus, 0, output_bus->frames());
- } else {
- LOG(WARNING) << "Not enough audio data for resampling.";
- output_bus->Zero();
- }
- }
-
- AVStream* av_audio_stream() {
- return av_format_context_->streams[audio_stream_index_];
- }
- AVStream* av_video_stream() {
- return av_format_context_->streams[video_stream_index_];
- }
- AVCodecContext* av_audio_context() { return av_audio_stream()->codec; }
- AVCodecContext* av_video_context() { return av_video_stream()->codec; }
-
- scoped_refptr<base::SingleThreadTaskRunner> test_app_thread_proxy_;
- VideoSenderConfig video_config_;
- scoped_refptr<AudioFrameInput> audio_frame_input_;
- scoped_refptr<VideoFrameInput> video_frame_input_;
- uint8 synthetic_count_;
- base::TickClock* const clock_; // Not owned by this class.
-
- // Time when the stream starts.
- base::TimeTicks start_time_;
-
- // The following three members are used only for fake frames.
- int audio_frame_count_; // Each audio frame is exactly 10ms.
- int video_frame_count_;
- scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
-
- // NOTE: Weak pointers must be invalidated before all other member variables.
- base::WeakPtrFactory<SendProcess> weak_factory_;
-
- base::MemoryMappedFile file_data_;
- scoped_ptr<InMemoryUrlProtocol> protocol_;
- scoped_ptr<FFmpegGlue> glue_;
- AVFormatContext* av_format_context_;
-
- int audio_stream_index_;
- AudioParameters audio_params_;
- double playback_rate_;
-
- int video_stream_index_;
- int video_frame_rate_numerator_;
- int video_frame_rate_denominator_;
-
- // These are used for audio resampling.
- scoped_ptr<media::MultiChannelResampler> audio_resampler_;
- scoped_ptr<media::AudioFifo> audio_fifo_;
- scoped_ptr<media::AudioBus> audio_fifo_input_bus_;
- media::AudioRendererAlgorithm audio_algo_;
-
- // Track the timestamp of audio sent to the receiver.
- scoped_ptr<media::AudioTimestampHelper> audio_sent_ts_;
-
- std::queue<scoped_refptr<VideoFrame> > video_frame_queue_;
- int64 video_first_pts_;
- bool video_first_pts_set_;
-
- std::queue<AudioBus*> audio_bus_queue_;
-
- DISALLOW_COPY_AND_ASSIGN(SendProcess);
-};
-
-} // namespace cast
-} // namespace media
-
-namespace {
void UpdateCastTransportStatus(
- media::cast::transport::CastTransportStatus status) {
+ media::cast::CastTransportStatus status) {
VLOG(1) << "Transport status: " << status;
}
@@ -902,10 +273,8 @@ int main(int argc, char** argv) {
LOG(INFO) << "Sending to " << remote_ip_address << ":" << remote_port
<< ".";
- media::cast::AudioSenderConfig audio_config =
- media::cast::GetAudioSenderConfig();
- media::cast::VideoSenderConfig video_config =
- media::cast::GetVideoSenderConfig();
+ media::cast::AudioSenderConfig audio_config = GetAudioSenderConfig();
+ media::cast::VideoSenderConfig video_config = GetVideoSenderConfig();
// Running transport on the main thread.
// Setting up transport config.
@@ -922,14 +291,25 @@ int main(int argc, char** argv) {
video_thread.message_loop_proxy()));
// SendProcess initialization.
- scoped_ptr<media::cast::SendProcess> send_process(
- new media::cast::SendProcess(test_thread.message_loop_proxy(),
- cast_environment->Clock(),
- video_config));
+ scoped_ptr<media::cast::FakeMediaSource> fake_media_source(
+ new media::cast::FakeMediaSource(test_thread.message_loop_proxy(),
+ cast_environment->Clock(),
+ video_config));
+
+ int override_fps = 0;
+ if (!base::StringToInt(cmd->GetSwitchValueASCII(kSwitchFps),
+ &override_fps)){
+ override_fps = 0;
+ }
+ base::FilePath source_path = cmd->GetSwitchValuePath(kSwitchSourceFile);
+ if (!source_path.empty()) {
+ LOG(INFO) << "Source: " << source_path.value();
+ fake_media_source->SetSourceFile(source_path, override_fps);
+ }
// CastTransportSender initialization.
- scoped_ptr<media::cast::transport::CastTransportSender> transport_sender =
- media::cast::transport::CastTransportSender::Create(
+ scoped_ptr<media::cast::CastTransportSender> transport_sender =
+ media::cast::CastTransportSender::Create(
NULL, // net log.
cast_environment->Clock(),
remote_endpoint,
@@ -942,7 +322,7 @@ int main(int argc, char** argv) {
scoped_ptr<media::cast::CastSender> cast_sender =
media::cast::CastSender::Create(cast_environment, transport_sender.get());
cast_sender->InitializeVideo(
- send_process->get_video_config(),
+ fake_media_source->get_video_config(),
base::Bind(&InitializationResult),
media::cast::CreateDefaultVideoEncodeAcceleratorCallback(),
media::cast::CreateDefaultVideoEncodeMemoryCallback());
@@ -1014,8 +394,8 @@ int main(int argc, char** argv) {
base::Passed(&offset_estimator)),
base::TimeDelta::FromSeconds(logging_duration_seconds));
- send_process->Start(cast_sender->audio_frame_input(),
- cast_sender->video_frame_input());
+ fake_media_source->Start(cast_sender->audio_frame_input(),
+ cast_sender->video_frame_input());
io_message_loop.Run();
return 0;
diff --git a/media/cast/test/simulator.cc b/media/cast/test/simulator.cc
new file mode 100644
index 0000000000..43b3a02dc6
--- /dev/null
+++ b/media/cast/test/simulator.cc
@@ -0,0 +1,445 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Simulate end to end streaming.
+//
+// Input:
+// --source=
+// WebM used as the source of video and audio frames.
+// --output=
+// File path to writing out the raw event log of the simulation session.
+// --sim-id=
+// Unique simulation ID.
+//
+// Output:
+// - Raw event log of the simulation session tagged with the unique test ID,
+// written out to the specified file path.
+
+#include "base/at_exit.h"
+#include "base/base_paths.h"
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/files/file_path.h"
+#include "base/files/memory_mapped_file.h"
+#include "base/files/scoped_file.h"
+#include "base/json/json_writer.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/time/tick_clock.h"
+#include "base/values.h"
+#include "media/base/audio_bus.h"
+#include "media/base/media.h"
+#include "media/base/video_frame.h"
+#include "media/cast/cast_config.h"
+#include "media/cast/cast_environment.h"
+#include "media/cast/cast_receiver.h"
+#include "media/cast/cast_sender.h"
+#include "media/cast/logging/encoding_event_subscriber.h"
+#include "media/cast/logging/log_serializer.h"
+#include "media/cast/logging/logging_defines.h"
+#include "media/cast/logging/proto/raw_events.pb.h"
+#include "media/cast/logging/raw_event_subscriber_bundle.h"
+#include "media/cast/logging/simple_event_subscriber.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/cast_transport_defines.h"
+#include "media/cast/net/cast_transport_sender.h"
+#include "media/cast/net/cast_transport_sender_impl.h"
+#include "media/cast/test/fake_media_source.h"
+#include "media/cast/test/fake_single_thread_task_runner.h"
+#include "media/cast/test/loopback_transport.h"
+#include "media/cast/test/proto/network_simulation_model.pb.h"
+#include "media/cast/test/skewed_tick_clock.h"
+#include "media/cast/test/utility/audio_utility.h"
+#include "media/cast/test/utility/default_config.h"
+#include "media/cast/test/utility/test_util.h"
+#include "media/cast/test/utility/udp_proxy.h"
+#include "media/cast/test/utility/video_utility.h"
+
+using media::cast::proto::IPPModel;
+using media::cast::proto::NetworkSimulationModel;
+using media::cast::proto::NetworkSimulationModelType;
+
+namespace media {
+namespace cast {
+namespace {
+const int kTargetDelay = 300;
+const char kSourcePath[] = "source";
+const char kModelPath[] = "model";
+const char kOutputPath[] = "output";
+const char kSimulationId[] = "sim-id";
+const char kLibDir[] = "lib-dir";
+
+void UpdateCastTransportStatus(CastTransportStatus status) {
+ LOG(INFO) << "Cast transport status: " << status;
+}
+
+void AudioInitializationStatus(CastInitializationStatus status) {
+ LOG(INFO) << "Audio status: " << status;
+}
+
+void VideoInitializationStatus(CastInitializationStatus status) {
+ LOG(INFO) << "Video status: " << status;
+}
+
+void LogTransportEvents(const scoped_refptr<CastEnvironment>& env,
+ const std::vector<PacketEvent>& packet_events) {
+ for (std::vector<media::cast::PacketEvent>::const_iterator it =
+ packet_events.begin();
+ it != packet_events.end();
+ ++it) {
+ env->Logging()->InsertPacketEvent(it->timestamp,
+ it->type,
+ it->media_type,
+ it->rtp_timestamp,
+ it->frame_id,
+ it->packet_id,
+ it->max_packet_id,
+ it->size);
+ }
+}
+
+void GotVideoFrame(
+ int* counter,
+ CastReceiver* cast_receiver,
+ const scoped_refptr<media::VideoFrame>& video_frame,
+ const base::TimeTicks& render_time,
+ bool continuous) {
+ ++*counter;
+ cast_receiver->RequestDecodedVideoFrame(
+ base::Bind(&GotVideoFrame, counter, cast_receiver));
+}
+
+void GotAudioFrame(
+ int* counter,
+ CastReceiver* cast_receiver,
+ scoped_ptr<AudioBus> audio_bus,
+ const base::TimeTicks& playout_time,
+ bool is_continuous) {
+ ++*counter;
+ cast_receiver->RequestDecodedAudioFrame(
+ base::Bind(&GotAudioFrame, counter, cast_receiver));
+}
+
+void AppendLog(EncodingEventSubscriber* subscriber,
+ const std::string& extra_data,
+ const base::FilePath& output_path) {
+ media::cast::proto::LogMetadata metadata;
+ metadata.set_extra_data(extra_data);
+
+ media::cast::FrameEventList frame_events;
+ media::cast::PacketEventList packet_events;
+ subscriber->GetEventsAndReset(
+ &metadata, &frame_events, &packet_events);
+ media::cast::proto::GeneralDescription* gen_desc =
+ metadata.mutable_general_description();
+ gen_desc->set_product("Cast Simulator");
+ gen_desc->set_product_version("0.1");
+
+ scoped_ptr<char[]> serialized_log(new char[media::cast::kMaxSerializedBytes]);
+ int output_bytes;
+ bool success = media::cast::SerializeEvents(metadata,
+ frame_events,
+ packet_events,
+ true,
+ media::cast::kMaxSerializedBytes,
+ serialized_log.get(),
+ &output_bytes);
+
+ if (!success) {
+ LOG(ERROR) << "Failed to serialize log.";
+ return;
+ }
+
+ if (AppendToFile(output_path, serialized_log.get(), output_bytes) == -1) {
+ LOG(ERROR) << "Failed to append to log.";
+ }
+}
+
+// Run simulation once.
+//
+// |output_path| is the path to write serialized log.
+// |extra_data| is extra tagging information to write to log.
+void RunSimulation(const base::FilePath& source_path,
+ const base::FilePath& output_path,
+ const std::string& extra_data,
+ const NetworkSimulationModel& model) {
+ // Fake clock. Make sure start time is non zero.
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromSeconds(1));
+
+ // Task runner.
+ scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner =
+ new test::FakeSingleThreadTaskRunner(&testing_clock);
+ base::ThreadTaskRunnerHandle task_runner_handle(task_runner);
+
+ // CastEnvironments.
+ scoped_refptr<CastEnvironment> sender_env =
+ new CastEnvironment(
+ scoped_ptr<base::TickClock>(
+ new test::SkewedTickClock(&testing_clock)).Pass(),
+ task_runner,
+ task_runner,
+ task_runner);
+ scoped_refptr<CastEnvironment> receiver_env =
+ new CastEnvironment(
+ scoped_ptr<base::TickClock>(
+ new test::SkewedTickClock(&testing_clock)).Pass(),
+ task_runner,
+ task_runner,
+ task_runner);
+
+ // Event subscriber. Store at most 1 hour of events.
+ EncodingEventSubscriber audio_event_subscriber(AUDIO_EVENT,
+ 100 * 60 * 60);
+ EncodingEventSubscriber video_event_subscriber(VIDEO_EVENT,
+ 30 * 60 * 60);
+ sender_env->Logging()->AddRawEventSubscriber(&audio_event_subscriber);
+ sender_env->Logging()->AddRawEventSubscriber(&video_event_subscriber);
+
+ // Audio sender config.
+ AudioSenderConfig audio_sender_config = GetDefaultAudioSenderConfig();
+ audio_sender_config.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetDelay);
+
+ // Audio receiver config.
+ FrameReceiverConfig audio_receiver_config =
+ GetDefaultAudioReceiverConfig();
+ audio_receiver_config.rtp_max_delay_ms =
+ audio_sender_config.target_playout_delay.InMilliseconds();
+
+ // Video sender config.
+ VideoSenderConfig video_sender_config = GetDefaultVideoSenderConfig();
+ video_sender_config.max_bitrate = 4000000;
+ video_sender_config.min_bitrate = 2000000;
+ video_sender_config.start_bitrate = 4000000;
+ video_sender_config.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kTargetDelay);
+
+ // Video receiver config.
+ FrameReceiverConfig video_receiver_config =
+ GetDefaultVideoReceiverConfig();
+ video_receiver_config.rtp_max_delay_ms =
+ video_sender_config.target_playout_delay.InMilliseconds();
+
+ // Loopback transport.
+ LoopBackTransport receiver_to_sender(receiver_env);
+ LoopBackTransport sender_to_receiver(sender_env);
+
+ // Cast receiver.
+ scoped_ptr<CastReceiver> cast_receiver(
+ CastReceiver::Create(receiver_env,
+ audio_receiver_config,
+ video_receiver_config,
+ &receiver_to_sender));
+
+ // Cast sender and transport sender.
+ scoped_ptr<CastTransportSender> transport_sender(
+ new CastTransportSenderImpl(
+ NULL,
+ &testing_clock,
+ net::IPEndPoint(),
+ base::Bind(&UpdateCastTransportStatus),
+ base::Bind(&LogTransportEvents, sender_env),
+ base::TimeDelta::FromSeconds(1),
+ task_runner,
+ &sender_to_receiver));
+ scoped_ptr<CastSender> cast_sender(
+ CastSender::Create(sender_env, transport_sender.get()));
+
+ // Build packet pipe.
+ if (model.type() != media::cast::proto::INTERRUPTED_POISSON_PROCESS) {
+ LOG(ERROR) << "Unknown model type " << model.type() << ".";
+ return;
+ }
+
+ const IPPModel& ipp_model = model.ipp();
+
+ std::vector<double> average_rates(ipp_model.average_rate_size());
+ std::copy(ipp_model.average_rate().begin(), ipp_model.average_rate().end(),
+ average_rates.begin());
+ test::InterruptedPoissonProcess ipp(average_rates,
+ ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0);
+
+ // Connect sender to receiver. This initializes the pipe.
+ receiver_to_sender.Initialize(
+ ipp.NewBuffer(128 * 1024), cast_sender->packet_receiver(), task_runner,
+ &testing_clock);
+ sender_to_receiver.Initialize(
+ ipp.NewBuffer(128 * 1024), cast_receiver->packet_receiver(), task_runner,
+ &testing_clock);
+
+ // Start receiver.
+ int audio_frame_count = 0;
+ int video_frame_count = 0;
+ cast_receiver->RequestDecodedVideoFrame(
+ base::Bind(&GotVideoFrame, &video_frame_count, cast_receiver.get()));
+ cast_receiver->RequestDecodedAudioFrame(
+ base::Bind(&GotAudioFrame, &audio_frame_count, cast_receiver.get()));
+
+ FakeMediaSource media_source(task_runner,
+ &testing_clock,
+ video_sender_config);
+
+ // Initializing audio and video senders.
+ cast_sender->InitializeAudio(audio_sender_config,
+ base::Bind(&AudioInitializationStatus));
+ cast_sender->InitializeVideo(media_source.get_video_config(),
+ base::Bind(&VideoInitializationStatus),
+ CreateDefaultVideoEncodeAcceleratorCallback(),
+ CreateDefaultVideoEncodeMemoryCallback());
+
+ // Start sending.
+ if (!source_path.empty()) {
+ // 0 means using the FPS from the file.
+ media_source.SetSourceFile(source_path, 0);
+ }
+ media_source.Start(cast_sender->audio_frame_input(),
+ cast_sender->video_frame_input());
+
+ // Run for 3 minutes.
+ base::TimeDelta elapsed_time;
+ while (elapsed_time.InMinutes() < 3) {
+ // Each step is 100us.
+ base::TimeDelta step = base::TimeDelta::FromMicroseconds(100);
+ task_runner->Sleep(step);
+ elapsed_time += step;
+ }
+
+ LOG(INFO) << "Audio frame count: " << audio_frame_count;
+ LOG(INFO) << "Video frame count: " << video_frame_count;
+ LOG(INFO) << "Writing log: " << output_path.value();
+
+ // Truncate file and then write serialized log.
+ {
+ base::ScopedFILE file(base::OpenFile(output_path, "wb"));
+ if (!file.get()) {
+ LOG(INFO) << "Cannot write to log.";
+ return;
+ }
+ }
+ AppendLog(&video_event_subscriber, extra_data, output_path);
+ AppendLog(&audio_event_subscriber, extra_data, output_path);
+}
+
+NetworkSimulationModel DefaultModel() {
+ NetworkSimulationModel model;
+ model.set_type(cast::proto::INTERRUPTED_POISSON_PROCESS);
+ IPPModel* ipp = model.mutable_ipp();
+ ipp->set_coef_burstiness(0.609);
+ ipp->set_coef_variance(4.1);
+
+ ipp->add_average_rate(0.609);
+ ipp->add_average_rate(0.495);
+ ipp->add_average_rate(0.561);
+ ipp->add_average_rate(0.458);
+ ipp->add_average_rate(0.538);
+ ipp->add_average_rate(0.513);
+ ipp->add_average_rate(0.585);
+ ipp->add_average_rate(0.592);
+ ipp->add_average_rate(0.658);
+ ipp->add_average_rate(0.556);
+ ipp->add_average_rate(0.371);
+ ipp->add_average_rate(0.595);
+ ipp->add_average_rate(0.490);
+ ipp->add_average_rate(0.980);
+ ipp->add_average_rate(0.781);
+ ipp->add_average_rate(0.463);
+
+ return model;
+}
+
+bool IsModelValid(const NetworkSimulationModel& model) {
+ if (!model.has_type())
+ return false;
+ NetworkSimulationModelType type = model.type();
+ if (type == media::cast::proto::INTERRUPTED_POISSON_PROCESS) {
+ if (!model.has_ipp())
+ return false;
+ const IPPModel& ipp = model.ipp();
+ if (ipp.coef_burstiness() <= 0.0 || ipp.coef_variance() <= 0.0)
+ return false;
+ if (ipp.average_rate_size() == 0)
+ return false;
+ for (int i = 0; i < ipp.average_rate_size(); i++) {
+ if (ipp.average_rate(i) <= 0.0)
+ return false;
+ }
+ }
+
+ return true;
+}
+
+NetworkSimulationModel LoadModel(const base::FilePath& model_path) {
+ if (model_path.empty()) {
+ LOG(ERROR) << "Model path not set.";
+ return DefaultModel();
+ }
+ std::string model_str;
+ if (!base::ReadFileToString(model_path, &model_str)) {
+ LOG(ERROR) << "Failed to read model file.";
+ return DefaultModel();
+ }
+
+ NetworkSimulationModel model;
+ if (!model.ParseFromString(model_str)) {
+ LOG(ERROR) << "Failed to parse model.";
+ return DefaultModel();
+ }
+ if (!IsModelValid(model)) {
+ LOG(ERROR) << "Invalid model.";
+ return DefaultModel();
+ }
+
+ return model;
+}
+
+} // namespace
+} // namespace cast
+} // namespace media
+
+int main(int argc, char** argv) {
+ base::AtExitManager at_exit;
+ CommandLine::Init(argc, argv);
+ InitLogging(logging::LoggingSettings());
+
+ const CommandLine* cmd = CommandLine::ForCurrentProcess();
+ base::FilePath media_path = cmd->GetSwitchValuePath(media::cast::kLibDir);
+ if (media_path.empty()) {
+ if (!PathService::Get(base::DIR_MODULE, &media_path)) {
+ LOG(ERROR) << "Failed to load FFmpeg.";
+ return 1;
+ }
+ }
+
+ if (!media::InitializeMediaLibrary(media_path)) {
+ LOG(ERROR) << "Failed to initialize FFmpeg.";
+ return 1;
+ }
+
+ base::FilePath source_path = cmd->GetSwitchValuePath(
+ media::cast::kSourcePath);
+ base::FilePath output_path = cmd->GetSwitchValuePath(
+ media::cast::kOutputPath);
+ if (output_path.empty()) {
+ base::GetTempDir(&output_path);
+ output_path = output_path.AppendASCII("sim-events.gz");
+ }
+ std::string sim_id = cmd->GetSwitchValueASCII(media::cast::kSimulationId);
+
+ NetworkSimulationModel model = media::cast::LoadModel(
+ cmd->GetSwitchValuePath(media::cast::kModelPath));
+
+ base::DictionaryValue values;
+ values.SetBoolean("sim", true);
+ values.SetString("sim-id", sim_id);
+
+ std::string extra_data;
+ base::JSONWriter::Write(&values, &extra_data);
+
+ // Run.
+ media::cast::RunSimulation(source_path, output_path, extra_data, model);
+ return 0;
+}
diff --git a/media/cast/test/utility/default_config.cc b/media/cast/test/utility/default_config.cc
index b5de5ed690..6743146b70 100644
--- a/media/cast/test/utility/default_config.cc
+++ b/media/cast/test/utility/default_config.cc
@@ -5,7 +5,7 @@
#include "media/cast/test/utility/default_config.h"
#include "base/bind.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
namespace {
@@ -35,7 +35,7 @@ FrameReceiverConfig GetDefaultAudioReceiverConfig() {
config.frequency = 48000;
config.channels = 2;
config.max_frame_rate = 100; // 10ms of signal per frame
- config.codec.audio = media::cast::transport::kOpus;
+ config.codec = media::cast::CODEC_AUDIO_OPUS;
return config;
}
@@ -49,7 +49,44 @@ FrameReceiverConfig GetDefaultVideoReceiverConfig() {
config.frequency = kVideoFrequency;
config.channels = 1;
config.max_frame_rate = kDefaultMaxFrameRate;
- config.codec.video = media::cast::transport::kVp8;
+ config.codec = media::cast::CODEC_VIDEO_VP8;
+ return config;
+}
+
+AudioSenderConfig GetDefaultAudioSenderConfig() {
+ FrameReceiverConfig recv_config = GetDefaultAudioReceiverConfig();
+ AudioSenderConfig config;
+ config.ssrc = recv_config.incoming_ssrc;
+ config.incoming_feedback_ssrc = recv_config.feedback_ssrc;
+ config.rtp_payload_type = recv_config.rtp_payload_type;
+ config.use_external_encoder = false;
+ config.frequency = recv_config.frequency;
+ config.channels = recv_config.channels;
+ config.bitrate = kDefaultAudioEncoderBitrate;
+ config.codec = recv_config.codec;
+ config.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs);
+ return config;
+}
+
+VideoSenderConfig GetDefaultVideoSenderConfig() {
+ FrameReceiverConfig recv_config = GetDefaultVideoReceiverConfig();
+ VideoSenderConfig config;
+ config.ssrc = recv_config.incoming_ssrc;
+ config.incoming_feedback_ssrc = recv_config.feedback_ssrc;
+ config.rtp_payload_type = recv_config.rtp_payload_type;
+ config.use_external_encoder = false;
+ config.width = 1280;
+ config.height = 720;
+ config.max_bitrate = 4000000;
+ config.min_bitrate = 2000000;
+ config.start_bitrate = 4000000;
+ config.max_frame_rate = recv_config.max_frame_rate;
+ config.max_number_of_video_buffers_used = 1;
+ config.codec = recv_config.codec;
+ config.number_of_encode_threads = 2;
+ config.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs);
return config;
}
diff --git a/media/cast/test/utility/default_config.h b/media/cast/test/utility/default_config.h
index eaa3c96415..2cc52a7a72 100644
--- a/media/cast/test/utility/default_config.h
+++ b/media/cast/test/utility/default_config.h
@@ -20,6 +20,15 @@ FrameReceiverConfig GetDefaultAudioReceiverConfig();
// name.
FrameReceiverConfig GetDefaultVideoReceiverConfig();
+// Returns a AudioSenderConfig initialized to default values. This means
+// 48 kHz, 2-channel Opus-coded audio. Default values for SSRCs and payload
+// type.
+AudioSenderConfig GetDefaultAudioSenderConfig();
+
+// Returns a VideoSenderConfig initialized to default values. This means
+// 30 Hz VP8 coded code. Default values for SSRCs and payload type.
+VideoSenderConfig GetDefaultVideoSenderConfig();
+
// Returns a callback that does nothing.
CreateVideoEncodeAcceleratorCallback
CreateDefaultVideoEncodeAcceleratorCallback();
diff --git a/media/cast/test/utility/in_process_receiver.cc b/media/cast/test/utility/in_process_receiver.cc
index cfcc1fcb46..6c739ecdb6 100644
--- a/media/cast/test/utility/in_process_receiver.cc
+++ b/media/cast/test/utility/in_process_receiver.cc
@@ -11,11 +11,11 @@
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/cast_receiver.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/transport/udp_transport.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "media/cast/net/udp_transport.h"
-using media::cast::transport::CastTransportStatus;
-using media::cast::transport::UdpTransport;
+using media::cast::CastTransportStatus;
+using media::cast::UdpTransport;
namespace media {
namespace cast {
@@ -67,7 +67,7 @@ void InProcessReceiver::StopOnMainThread(base::WaitableEvent* event) {
}
void InProcessReceiver::UpdateCastTransportStatus(CastTransportStatus status) {
- LOG_IF(ERROR, status == media::cast::transport::TRANSPORT_SOCKET_ERROR)
+ LOG_IF(ERROR, status == media::cast::TRANSPORT_SOCKET_ERROR)
<< "Transport socket error occurred. InProcessReceiver is likely dead.";
VLOG(1) << "CastTransportStatus is now " << status;
}
diff --git a/media/cast/test/utility/in_process_receiver.h b/media/cast/test/utility/in_process_receiver.h
index cf25da9cee..454dc937ae 100644
--- a/media/cast/test/utility/in_process_receiver.h
+++ b/media/cast/test/utility/in_process_receiver.h
@@ -10,7 +10,8 @@
#include "base/memory/weak_ptr.h"
#include "media/base/audio_bus.h"
#include "media/cast/cast_config.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
+#include "net/base/ip_endpoint.h"
namespace base {
class TimeTicks;
@@ -29,10 +30,7 @@ namespace cast {
class CastEnvironment;
class CastReceiver;
-
-namespace transport {
class UdpTransport;
-} // namespace transport
// Common base functionality for an in-process Cast receiver. This is meant to
// be subclassed with the OnAudioFrame() and OnVideoFrame() methods implemented,
@@ -85,7 +83,7 @@ class InProcessReceiver {
// Callback for the transport to notify of status changes. A default
// implementation is provided here that simply logs socket errors.
- virtual void UpdateCastTransportStatus(transport::CastTransportStatus status);
+ virtual void UpdateCastTransportStatus(CastTransportStatus status);
private:
friend class base::RefCountedThreadSafe<InProcessReceiver>;
@@ -108,7 +106,7 @@ class InProcessReceiver {
const FrameReceiverConfig audio_config_;
const FrameReceiverConfig video_config_;
- scoped_ptr<transport::UdpTransport> transport_;
+ scoped_ptr<UdpTransport> transport_;
scoped_ptr<CastReceiver> cast_receiver_;
// NOTE: Weak pointers must be invalidated before all other member variables.
diff --git a/media/cast/test/utility/udp_proxy.cc b/media/cast/test/utility/udp_proxy.cc
index 9fc3b4a44d..4714b7ed67 100644
--- a/media/cast/test/utility/udp_proxy.cc
+++ b/media/cast/test/utility/udp_proxy.cc
@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <math.h>
#include <stdlib.h>
+#include <vector>
#include "media/cast/test/utility/udp_proxy.h"
#include "base/logging.h"
-#include "base/memory/linked_ptr.h"
#include "base/rand_util.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/thread.h"
@@ -55,10 +56,10 @@ class Buffer : public PacketPipe {
CHECK_GT(max_megabits_per_second, 0);
}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
if (packet->size() + buffer_size_ <= max_buffer_size_) {
buffer_size_ += packet->size();
- buffer_.push_back(linked_ptr<transport::Packet>(packet.release()));
+ buffer_.push_back(linked_ptr<Packet>(packet.release()));
if (buffer_.size() == 1) {
Schedule();
}
@@ -78,7 +79,7 @@ class Buffer : public PacketPipe {
void ProcessBuffer() {
CHECK(!buffer_.empty());
- scoped_ptr<transport::Packet> packet(buffer_.front().release());
+ scoped_ptr<Packet> packet(buffer_.front().release());
buffer_size_ -= packet->size();
buffer_.pop_front();
pipe_->Send(packet.Pass());
@@ -87,7 +88,7 @@ class Buffer : public PacketPipe {
}
}
- std::deque<linked_ptr<transport::Packet> > buffer_;
+ std::deque<linked_ptr<Packet> > buffer_;
size_t buffer_size_;
size_t max_buffer_size_;
double max_megabits_per_second_; // megabits per second
@@ -103,7 +104,7 @@ class RandomDrop : public PacketPipe {
RandomDrop(double drop_fraction)
: drop_fraction_(static_cast<int>(drop_fraction * RAND_MAX)) {}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
if (rand() > drop_fraction_) {
pipe_->Send(packet.Pass());
}
@@ -122,7 +123,7 @@ class SimpleDelayBase : public PacketPipe {
SimpleDelayBase() : weak_factory_(this) {}
virtual ~SimpleDelayBase() {}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
double seconds = GetDelay();
task_runner_->PostDelayedTask(
FROM_HERE,
@@ -135,7 +136,7 @@ class SimpleDelayBase : public PacketPipe {
virtual double GetDelay() = 0;
private:
- virtual void SendInternal(scoped_ptr<transport::Packet> packet) {
+ virtual void SendInternal(scoped_ptr<Packet> packet) {
pipe_->Send(packet.Pass());
}
@@ -184,8 +185,8 @@ class RandomSortedDelay : public PacketPipe {
seconds_between_extra_delay_(seconds_between_extra_delay),
weak_factory_(this) {}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
- buffer_.push_back(linked_ptr<transport::Packet>(packet.release()));
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
+ buffer_.push_back(linked_ptr<Packet>(packet.release()));
if (buffer_.size() == 1) {
Schedule();
}
@@ -238,7 +239,7 @@ class RandomSortedDelay : public PacketPipe {
void ProcessBuffer() {
CHECK(!buffer_.empty());
- scoped_ptr<transport::Packet> packet(buffer_.front().release());
+ scoped_ptr<Packet> packet(buffer_.front().release());
pipe_->Send(packet.Pass());
buffer_.pop_front();
if (!buffer_.empty()) {
@@ -247,7 +248,7 @@ class RandomSortedDelay : public PacketPipe {
}
base::TimeTicks block_until_;
- std::deque<linked_ptr<transport::Packet> > buffer_;
+ std::deque<linked_ptr<Packet> > buffer_;
double random_delay_;
double extra_delay_;
double seconds_between_extra_delay_;
@@ -279,7 +280,7 @@ class NetworkGlitchPipe : public PacketPipe {
Flip();
}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
if (works_) {
pipe_->Send(packet.Pass());
}
@@ -310,13 +311,212 @@ scoped_ptr<PacketPipe> NewNetworkGlitchPipe(double average_work_time,
.Pass();
}
+
+// Internal buffer object for a client of the IPP model.
+class InterruptedPoissonProcess::InternalBuffer : public PacketPipe {
+ public:
+ InternalBuffer(base::WeakPtr<InterruptedPoissonProcess> ipp,
+ size_t size)
+ : ipp_(ipp),
+ stored_size_(0),
+ stored_limit_(size),
+ clock_(NULL),
+ weak_factory_(this) {
+ }
+
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE {
+ // Drop if buffer is full.
+ if (stored_size_ >= stored_limit_)
+ return;
+ stored_size_ += packet->size();
+ buffer_.push_back(linked_ptr<Packet>(packet.release()));
+ buffer_time_.push_back(clock_->NowTicks());
+ DCHECK(buffer_.size() == buffer_time_.size());
+ }
+
+ virtual void InitOnIOThread(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ base::TickClock* clock) OVERRIDE {
+ clock_ = clock;
+ if (ipp_)
+ ipp_->InitOnIOThread(task_runner, clock);
+ PacketPipe::InitOnIOThread(task_runner, clock);
+ }
+
+ void SendOnePacket() {
+ scoped_ptr<Packet> packet(buffer_.front().release());
+ stored_size_ -= packet->size();
+ buffer_.pop_front();
+ buffer_time_.pop_front();
+ pipe_->Send(packet.Pass());
+ DCHECK(buffer_.size() == buffer_time_.size());
+ }
+
+ bool Empty() const {
+ return buffer_.empty();
+ }
+
+ base::TimeTicks FirstPacketTime() const {
+ DCHECK(!buffer_time_.empty());
+ return buffer_time_.front();
+ }
+
+ base::WeakPtr<InternalBuffer> GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+
+ }
+
+ private:
+ const base::WeakPtr<InterruptedPoissonProcess> ipp_;
+ size_t stored_size_;
+ const size_t stored_limit_;
+ std::deque<linked_ptr<Packet> > buffer_;
+ std::deque<base::TimeTicks> buffer_time_;
+ base::TickClock* clock_;
+ base::WeakPtrFactory<InternalBuffer> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(InternalBuffer);
+};
+
+InterruptedPoissonProcess::InterruptedPoissonProcess(
+ const std::vector<double>& average_rates,
+ double coef_burstiness,
+ double coef_variance,
+ uint32 rand_seed)
+ : clock_(NULL),
+ average_rates_(average_rates),
+ coef_burstiness_(coef_burstiness),
+ coef_variance_(coef_variance),
+ rate_index_(0),
+ on_state_(true),
+ weak_factory_(this) {
+ mt_rand_.init_genrand(rand_seed);
+ DCHECK(!average_rates.empty());
+ ComputeRates();
+}
+
+InterruptedPoissonProcess::~InterruptedPoissonProcess() {
+}
+
+void InterruptedPoissonProcess::InitOnIOThread(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ base::TickClock* clock) {
+ // Already initialized and started.
+ if (task_runner_ && clock_)
+ return;
+ task_runner_ = task_runner;
+ clock_ = clock;
+ UpdateRates();
+ SwitchOn();
+ SendPacket();
+}
+
+scoped_ptr<PacketPipe> InterruptedPoissonProcess::NewBuffer(size_t size) {
+ scoped_ptr<InternalBuffer> buffer(
+ new InternalBuffer(weak_factory_.GetWeakPtr(), size));
+ send_buffers_.push_back(buffer->GetWeakPtr());
+ return buffer.PassAs<PacketPipe>();
+}
+
+base::TimeDelta InterruptedPoissonProcess::NextEvent(double rate) {
+ // Rate is per milliseconds.
+ // The time until next event is exponentially distributed to the
+ // inverse of |rate|.
+ return base::TimeDelta::FromMillisecondsD(
+ fabs(-log(1.0 - RandDouble()) / rate));
+}
+
+double InterruptedPoissonProcess::RandDouble() {
+ // Generate a 64-bits random number from MT19937 and then convert
+ // it to double.
+ uint64 rand = mt_rand_.genrand_int32();
+ rand <<= 32;
+ rand |= mt_rand_.genrand_int32();
+ return base::BitsToOpenEndedUnitInterval(rand);
+}
+
+void InterruptedPoissonProcess::ComputeRates() {
+ double avg_rate = average_rates_[rate_index_];
+
+ send_rate_ = avg_rate / coef_burstiness_;
+ switch_off_rate_ =
+ 2 * avg_rate * (1 - coef_burstiness_) * (1 - coef_burstiness_) /
+ coef_burstiness_ / (coef_variance_ - 1);
+ switch_on_rate_ =
+ 2 * avg_rate * (1 - coef_burstiness_) / (coef_variance_ - 1);
+}
+
+void InterruptedPoissonProcess::UpdateRates() {
+ ComputeRates();
+
+ // Rates are updated once per second.
+ rate_index_ = (rate_index_ + 1) % average_rates_.size();
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&InterruptedPoissonProcess::UpdateRates,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(1));
+}
+
+void InterruptedPoissonProcess::SwitchOff() {
+ on_state_ = false;
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&InterruptedPoissonProcess::SwitchOn,
+ weak_factory_.GetWeakPtr()),
+ NextEvent(switch_on_rate_));
+}
+
+void InterruptedPoissonProcess::SwitchOn() {
+ on_state_ = true;
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&InterruptedPoissonProcess::SwitchOff,
+ weak_factory_.GetWeakPtr()),
+ NextEvent(switch_off_rate_));
+}
+
+void InterruptedPoissonProcess::SendPacket() {
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&InterruptedPoissonProcess::SendPacket,
+ weak_factory_.GetWeakPtr()),
+ NextEvent(send_rate_));
+
+ // If OFF then don't send.
+ if (!on_state_)
+ return;
+
+ // Find the earliest packet to send.
+ base::TimeTicks earliest_time;
+ for (size_t i = 0; i < send_buffers_.size(); ++i) {
+ if (!send_buffers_[i])
+ continue;
+ if (send_buffers_[i]->Empty())
+ continue;
+ if (earliest_time.is_null() ||
+ send_buffers_[i]->FirstPacketTime() < earliest_time)
+ earliest_time = send_buffers_[i]->FirstPacketTime();
+ }
+ for (size_t i = 0; i < send_buffers_.size(); ++i) {
+ if (!send_buffers_[i])
+ continue;
+ if (send_buffers_[i]->Empty())
+ continue;
+ if (send_buffers_[i]->FirstPacketTime() != earliest_time)
+ continue;
+ send_buffers_[i]->SendOnePacket();
+ break;
+ }
+}
+
class UDPProxyImpl;
class PacketSender : public PacketPipe {
public:
PacketSender(UDPProxyImpl* udp_proxy, const net::IPEndPoint* destination)
: udp_proxy_(udp_proxy), destination_(destination) {}
- virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE;
+ virtual void Send(scoped_ptr<Packet> packet) OVERRIDE;
virtual void AppendToPipe(scoped_ptr<PacketPipe> pipe) OVERRIDE {
NOTREACHED();
}
@@ -426,7 +626,7 @@ class UDPProxyImpl : public UDPProxy {
proxy_thread_.Stop();
}
- void Send(scoped_ptr<transport::Packet> packet,
+ void Send(scoped_ptr<Packet> packet,
const net::IPEndPoint& destination) {
if (blocked_) {
LOG(ERROR) << "Cannot write packet right now: blocked";
@@ -522,7 +722,7 @@ class UDPProxyImpl : public UDPProxy {
void PollRead() {
while (true) {
- packet_.reset(new transport::Packet(kMaxPacketSize));
+ packet_.reset(new Packet(kMaxPacketSize));
scoped_refptr<net::IOBuffer> recv_buf =
new net::WrappedIOBuffer(reinterpret_cast<char*>(&packet_->front()));
int len = socket_->RecvFrom(
@@ -539,7 +739,7 @@ class UDPProxyImpl : public UDPProxy {
}
void AllowWrite(scoped_refptr<net::IOBuffer> buf,
- scoped_ptr<transport::Packet> packet,
+ scoped_ptr<Packet> packet,
int unused_len) {
DCHECK(blocked_);
blocked_ = false;
@@ -562,7 +762,7 @@ class UDPProxyImpl : public UDPProxy {
// For receiving.
net::IPEndPoint recv_address_;
- scoped_ptr<transport::Packet> packet_;
+ scoped_ptr<Packet> packet_;
// For sending.
bool blocked_;
@@ -570,7 +770,7 @@ class UDPProxyImpl : public UDPProxy {
base::WeakPtrFactory<UDPProxyImpl> weak_factory_;
};
-void PacketSender::Send(scoped_ptr<transport::Packet> packet) {
+void PacketSender::Send(scoped_ptr<Packet> packet) {
udp_proxy_->Send(packet.Pass(), *destination_);
}
diff --git a/media/cast/test/utility/udp_proxy.h b/media/cast/test/utility/udp_proxy.h
index b102573a94..ea50a2c86a 100644
--- a/media/cast/test/utility/udp_proxy.h
+++ b/media/cast/test/utility/udp_proxy.h
@@ -8,11 +8,14 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
-#include "media/cast/transport/cast_transport_config.h"
+#include "media/cast/net/cast_transport_config.h"
#include "net/base/ip_endpoint.h"
+#include "third_party/mt19937ar/mt19937ar.h"
namespace net {
class NetLog;
@@ -30,7 +33,7 @@ class PacketPipe {
public:
PacketPipe();
virtual ~PacketPipe();
- virtual void Send(scoped_ptr<transport::Packet> packet) = 0;
+ virtual void Send(scoped_ptr<Packet> packet) = 0;
// Allows injection of fake test runner for testing.
virtual void InitOnIOThread(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
@@ -43,6 +46,63 @@ class PacketPipe {
base::TickClock* clock_;
};
+// Implements a Interrupted Poisson Process for packet delivery.
+// The process has 2 states: ON and OFF, the rate of switching between
+// these two states are defined.
+// When in ON state packets are sent according to a defined rate.
+// When in OFF state packets are not sent.
+// The rate above is the average rate of a poisson distribution.
+class InterruptedPoissonProcess {
+ public:
+ InterruptedPoissonProcess(
+ const std::vector<double>& average_rates,
+ double coef_burstiness,
+ double coef_variance,
+ uint32 rand_seed);
+ ~InterruptedPoissonProcess();
+
+ scoped_ptr<PacketPipe> NewBuffer(size_t size);
+
+ private:
+ class InternalBuffer;
+
+ // |task_runner| is the executor of the IO thread.
+ // |clock| is the system clock.
+ void InitOnIOThread(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ base::TickClock* clock);
+
+ base::TimeDelta NextEvent(double rate);
+ double RandDouble();
+ void ComputeRates();
+ void UpdateRates();
+ void SwitchOff();
+ void SwitchOn();
+ void SendPacket();
+
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ base::TickClock* clock_;
+ const std::vector<double> average_rates_;
+ const double coef_burstiness_;
+ const double coef_variance_;
+ int rate_index_;
+
+ // The following rates are per milliseconds.
+ double send_rate_;
+ double switch_off_rate_;
+ double switch_on_rate_;
+ bool on_state_;
+
+ std::vector<base::WeakPtr<InternalBuffer> > send_buffers_;
+
+ // Fast pseudo random number generator.
+ MersenneTwister mt_rand_;
+
+ base::WeakPtrFactory<InterruptedPoissonProcess> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(InterruptedPoissonProcess);
+};
+
// A UDPProxy will set up a UDP socket and bind to |local_port|.
// Packets send to that port will be forwarded to |destination|.
// Packets send from |destination| to |local_port| will be returned
diff --git a/media/cast/test/utility/udp_proxy_main.cc b/media/cast/test/utility/udp_proxy_main.cc
index 800f09dc70..9dd047abfd 100644
--- a/media/cast/test/utility/udp_proxy_main.cc
+++ b/media/cast/test/utility/udp_proxy_main.cc
@@ -68,7 +68,7 @@ ByteCounter out_pipe_output_counter;
class ByteCounterPipe : public media::cast::test::PacketPipe {
public:
ByteCounterPipe(ByteCounter* counter) : counter_(counter) {}
- virtual void Send(scoped_ptr<media::cast::transport::Packet> packet)
+ virtual void Send(scoped_ptr<media::cast::Packet> packet)
OVERRIDE {
counter_->Increment(packet->size());
pipe_->Send(packet.Pass());