| /* |
| * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include <memory> |
| |
| #include "webrtc/modules/video_coding/test/receiver_tests.h" |
| #include "webrtc/modules/video_coding/test/vcm_payload_sink_factory.h" |
| #include "webrtc/system_wrappers/include/trace.h" |
| #include "webrtc/test/testsupport/fileutils.h" |
| |
| namespace { |
| |
| const bool kConfigProtectionEnabled = true; |
| const webrtc::VCMVideoProtection kConfigProtectionMethod = |
| webrtc::kProtectionNack; |
| const float kConfigLossRate = 0.0f; |
| const bool kConfigReordering = false; |
| const int64_t kConfigRttMs = 0; |
| const uint32_t kConfigRenderDelayMs = 0; |
| const uint32_t kConfigMinPlayoutDelayMs = 0; |
| const int64_t kConfigMaxRuntimeMs = -1; |
| const uint8_t kDefaultUlpFecPayloadType = 97; |
| const uint8_t kDefaultRedPayloadType = 96; |
| const uint8_t kDefaultVp8PayloadType = 100; |
| } // namespace |
| |
| int RtpPlay(const CmdArgs& args) { |
| std::string trace_file = webrtc::test::OutputPath() + "receiverTestTrace.txt"; |
| webrtc::Trace::CreateTrace(); |
| webrtc::Trace::SetTraceFile(trace_file.c_str()); |
| webrtc::Trace::set_level_filter(webrtc::kTraceAll); |
| |
| webrtc::rtpplayer::PayloadTypes payload_types; |
| payload_types.push_back(webrtc::rtpplayer::PayloadCodecTuple( |
| kDefaultUlpFecPayloadType, "ULPFEC", webrtc::kVideoCodecULPFEC)); |
| payload_types.push_back(webrtc::rtpplayer::PayloadCodecTuple( |
| kDefaultRedPayloadType, "RED", webrtc::kVideoCodecRED)); |
| payload_types.push_back(webrtc::rtpplayer::PayloadCodecTuple( |
| kDefaultVp8PayloadType, "VP8", webrtc::kVideoCodecVP8)); |
| |
| std::string output_file = args.outputFile; |
| if (output_file.empty()) |
| output_file = webrtc::test::OutputPath() + "RtpPlay_decoded.yuv"; |
| |
| webrtc::SimulatedClock clock(0); |
| webrtc::rtpplayer::VcmPayloadSinkFactory factory( |
| output_file, &clock, kConfigProtectionEnabled, kConfigProtectionMethod, |
| kConfigRttMs, kConfigRenderDelayMs, kConfigMinPlayoutDelayMs); |
| std::unique_ptr<webrtc::rtpplayer::RtpPlayerInterface> rtp_player( |
| webrtc::rtpplayer::Create(args.inputFile, &factory, &clock, payload_types, |
| kConfigLossRate, kConfigRttMs, |
| kConfigReordering)); |
| if (rtp_player.get() == NULL) { |
| return -1; |
| } |
| |
| int ret = 0; |
| while ((ret = rtp_player->NextPacket(clock.TimeInMilliseconds())) == 0) { |
| ret = factory.DecodeAndProcessAll(true); |
| if (ret < 0 || (kConfigMaxRuntimeMs > -1 && |
| clock.TimeInMilliseconds() >= kConfigMaxRuntimeMs)) { |
| break; |
| } |
| clock.AdvanceTimeMilliseconds(1); |
| } |
| |
| rtp_player->Print(); |
| |
| switch (ret) { |
| case 1: |
| printf("Success\n"); |
| return 0; |
| case -1: |
| printf("Failed\n"); |
| return -1; |
| case 0: |
| printf("Timeout\n"); |
| return -1; |
| } |
| |
| webrtc::Trace::ReturnTrace(); |
| return 0; |
| } |