| /* | 
 |  *  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; | 
 | } |