| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include <stdio.h> | 11 #include <stdio.h> |
| 12 | 12 |
| 13 #include <map> | 13 #include <map> |
| 14 #include <memory> |
| 14 #include <sstream> | 15 #include <sstream> |
| 15 | 16 |
| 16 #include "gflags/gflags.h" | 17 #include "gflags/gflags.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 #include "webrtc/base/checks.h" | 20 #include "webrtc/base/checks.h" |
| 20 #include "webrtc/base/scoped_ptr.h" | |
| 21 #include "webrtc/call.h" | 21 #include "webrtc/call.h" |
| 22 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | 22 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
| 23 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" | 23 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
| 24 #include "webrtc/system_wrappers/include/clock.h" | 24 #include "webrtc/system_wrappers/include/clock.h" |
| 25 #include "webrtc/system_wrappers/include/sleep.h" | 25 #include "webrtc/system_wrappers/include/sleep.h" |
| 26 #include "webrtc/test/encoder_settings.h" | 26 #include "webrtc/test/encoder_settings.h" |
| 27 #include "webrtc/test/null_transport.h" | 27 #include "webrtc/test/null_transport.h" |
| 28 #include "webrtc/test/fake_decoder.h" | 28 #include "webrtc/test/fake_decoder.h" |
| 29 #include "webrtc/test/rtp_file_reader.h" | 29 #include "webrtc/test/rtp_file_reader.h" |
| 30 #include "webrtc/test/run_loop.h" | 30 #include "webrtc/test/run_loop.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 | 202 |
| 203 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { | 203 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { |
| 204 fwrite(encoded_frame.data_, 1, encoded_frame.length_, file_); | 204 fwrite(encoded_frame.data_, 1, encoded_frame.length_, file_); |
| 205 } | 205 } |
| 206 | 206 |
| 207 private: | 207 private: |
| 208 FILE* file_; | 208 FILE* file_; |
| 209 }; | 209 }; |
| 210 | 210 |
| 211 void RtpReplay() { | 211 void RtpReplay() { |
| 212 rtc::scoped_ptr<test::VideoRenderer> playback_video( | 212 std::unique_ptr<test::VideoRenderer> playback_video( |
| 213 test::VideoRenderer::Create("Playback Video", 640, 480)); | 213 test::VideoRenderer::Create("Playback Video", 640, 480)); |
| 214 FileRenderPassthrough file_passthrough(flags::OutBase(), | 214 FileRenderPassthrough file_passthrough(flags::OutBase(), |
| 215 playback_video.get()); | 215 playback_video.get()); |
| 216 | 216 |
| 217 rtc::scoped_ptr<Call> call(Call::Create(Call::Config())); | 217 std::unique_ptr<Call> call(Call::Create(Call::Config())); |
| 218 | 218 |
| 219 test::NullTransport transport; | 219 test::NullTransport transport; |
| 220 VideoReceiveStream::Config receive_config(&transport); | 220 VideoReceiveStream::Config receive_config(&transport); |
| 221 receive_config.rtp.remote_ssrc = flags::Ssrc(); | 221 receive_config.rtp.remote_ssrc = flags::Ssrc(); |
| 222 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; | 222 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; |
| 223 receive_config.rtp.fec.ulpfec_payload_type = flags::FecPayloadType(); | 223 receive_config.rtp.fec.ulpfec_payload_type = flags::FecPayloadType(); |
| 224 receive_config.rtp.fec.red_payload_type = flags::RedPayloadType(); | 224 receive_config.rtp.fec.red_payload_type = flags::RedPayloadType(); |
| 225 receive_config.rtp.nack.rtp_history_ms = 1000; | 225 receive_config.rtp.nack.rtp_history_ms = 1000; |
| 226 if (flags::TransmissionOffsetId() != -1) { | 226 if (flags::TransmissionOffsetId() != -1) { |
| 227 receive_config.rtp.extensions.push_back( | 227 receive_config.rtp.extensions.push_back( |
| 228 RtpExtension(RtpExtension::kTOffset, flags::TransmissionOffsetId())); | 228 RtpExtension(RtpExtension::kTOffset, flags::TransmissionOffsetId())); |
| 229 } | 229 } |
| 230 if (flags::AbsSendTimeId() != -1) { | 230 if (flags::AbsSendTimeId() != -1) { |
| 231 receive_config.rtp.extensions.push_back( | 231 receive_config.rtp.extensions.push_back( |
| 232 RtpExtension(RtpExtension::kAbsSendTime, flags::AbsSendTimeId())); | 232 RtpExtension(RtpExtension::kAbsSendTime, flags::AbsSendTimeId())); |
| 233 } | 233 } |
| 234 receive_config.renderer = &file_passthrough; | 234 receive_config.renderer = &file_passthrough; |
| 235 | 235 |
| 236 VideoSendStream::Config::EncoderSettings encoder_settings; | 236 VideoSendStream::Config::EncoderSettings encoder_settings; |
| 237 encoder_settings.payload_name = flags::Codec(); | 237 encoder_settings.payload_name = flags::Codec(); |
| 238 encoder_settings.payload_type = flags::PayloadType(); | 238 encoder_settings.payload_type = flags::PayloadType(); |
| 239 VideoReceiveStream::Decoder decoder; | 239 VideoReceiveStream::Decoder decoder; |
| 240 rtc::scoped_ptr<DecoderBitstreamFileWriter> bitstream_writer; | 240 std::unique_ptr<DecoderBitstreamFileWriter> bitstream_writer; |
| 241 if (!flags::DecoderBitstreamFilename().empty()) { | 241 if (!flags::DecoderBitstreamFilename().empty()) { |
| 242 bitstream_writer.reset(new DecoderBitstreamFileWriter( | 242 bitstream_writer.reset(new DecoderBitstreamFileWriter( |
| 243 flags::DecoderBitstreamFilename().c_str())); | 243 flags::DecoderBitstreamFilename().c_str())); |
| 244 receive_config.pre_decode_callback = bitstream_writer.get(); | 244 receive_config.pre_decode_callback = bitstream_writer.get(); |
| 245 } | 245 } |
| 246 decoder = test::CreateMatchingDecoder(encoder_settings); | 246 decoder = test::CreateMatchingDecoder(encoder_settings); |
| 247 if (!flags::DecoderBitstreamFilename().empty()) { | 247 if (!flags::DecoderBitstreamFilename().empty()) { |
| 248 // Replace with a null decoder if we're writing the bitstream to a file | 248 // Replace with a null decoder if we're writing the bitstream to a file |
| 249 // instead. | 249 // instead. |
| 250 delete decoder.decoder; | 250 delete decoder.decoder; |
| 251 decoder.decoder = new test::FakeNullDecoder(); | 251 decoder.decoder = new test::FakeNullDecoder(); |
| 252 } | 252 } |
| 253 receive_config.decoders.push_back(decoder); | 253 receive_config.decoders.push_back(decoder); |
| 254 | 254 |
| 255 VideoReceiveStream* receive_stream = | 255 VideoReceiveStream* receive_stream = |
| 256 call->CreateVideoReceiveStream(receive_config); | 256 call->CreateVideoReceiveStream(receive_config); |
| 257 | 257 |
| 258 rtc::scoped_ptr<test::RtpFileReader> rtp_reader(test::RtpFileReader::Create( | 258 std::unique_ptr<test::RtpFileReader> rtp_reader(test::RtpFileReader::Create( |
| 259 test::RtpFileReader::kRtpDump, flags::InputFile())); | 259 test::RtpFileReader::kRtpDump, flags::InputFile())); |
| 260 if (rtp_reader.get() == nullptr) { | 260 if (rtp_reader.get() == nullptr) { |
| 261 rtp_reader.reset(test::RtpFileReader::Create(test::RtpFileReader::kPcap, | 261 rtp_reader.reset(test::RtpFileReader::Create(test::RtpFileReader::kPcap, |
| 262 flags::InputFile())); | 262 flags::InputFile())); |
| 263 if (rtp_reader.get() == nullptr) { | 263 if (rtp_reader.get() == nullptr) { |
| 264 fprintf(stderr, | 264 fprintf(stderr, |
| 265 "Couldn't open input file as either a rtpdump or .pcap. Note " | 265 "Couldn't open input file as either a rtpdump or .pcap. Note " |
| 266 "that .pcapng is not supported.\nTrying to interpret the file as " | 266 "that .pcapng is not supported.\nTrying to interpret the file as " |
| 267 "length/packet interleaved.\n"); | 267 "length/packet interleaved.\n"); |
| 268 rtp_reader.reset(test::RtpFileReader::Create( | 268 rtp_reader.reset(test::RtpFileReader::Create( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 283 test::RtpPacket packet; | 283 test::RtpPacket packet; |
| 284 if (!rtp_reader->NextPacket(&packet)) | 284 if (!rtp_reader->NextPacket(&packet)) |
| 285 break; | 285 break; |
| 286 ++num_packets; | 286 ++num_packets; |
| 287 switch (call->Receiver()->DeliverPacket(webrtc::MediaType::ANY, packet.data, | 287 switch (call->Receiver()->DeliverPacket(webrtc::MediaType::ANY, packet.data, |
| 288 packet.length, PacketTime())) { | 288 packet.length, PacketTime())) { |
| 289 case PacketReceiver::DELIVERY_OK: | 289 case PacketReceiver::DELIVERY_OK: |
| 290 break; | 290 break; |
| 291 case PacketReceiver::DELIVERY_UNKNOWN_SSRC: { | 291 case PacketReceiver::DELIVERY_UNKNOWN_SSRC: { |
| 292 RTPHeader header; | 292 RTPHeader header; |
| 293 rtc::scoped_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); | 293 std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); |
| 294 parser->Parse(packet.data, packet.length, &header); | 294 parser->Parse(packet.data, packet.length, &header); |
| 295 if (unknown_packets[header.ssrc] == 0) | 295 if (unknown_packets[header.ssrc] == 0) |
| 296 fprintf(stderr, "Unknown SSRC: %u!\n", header.ssrc); | 296 fprintf(stderr, "Unknown SSRC: %u!\n", header.ssrc); |
| 297 ++unknown_packets[header.ssrc]; | 297 ++unknown_packets[header.ssrc]; |
| 298 break; | 298 break; |
| 299 } | 299 } |
| 300 case PacketReceiver::DELIVERY_PACKET_ERROR: | 300 case PacketReceiver::DELIVERY_PACKET_ERROR: |
| 301 fprintf(stderr, "Packet error, corrupt packets or incorrect setup?\n"); | 301 fprintf(stderr, "Packet error, corrupt packets or incorrect setup?\n"); |
| 302 break; | 302 break; |
| 303 } | 303 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 321 } | 321 } |
| 322 } // namespace webrtc | 322 } // namespace webrtc |
| 323 | 323 |
| 324 int main(int argc, char* argv[]) { | 324 int main(int argc, char* argv[]) { |
| 325 ::testing::InitGoogleTest(&argc, argv); | 325 ::testing::InitGoogleTest(&argc, argv); |
| 326 google::ParseCommandLineFlags(&argc, &argv, true); | 326 google::ParseCommandLineFlags(&argc, &argv, true); |
| 327 | 327 |
| 328 webrtc::test::RunTest(webrtc::RtpReplay); | 328 webrtc::test::RunTest(webrtc::RtpReplay); |
| 329 return 0; | 329 return 0; |
| 330 } | 330 } |
| OLD | NEW |