blob: 0b8df36ef3c58207665e73a930f1850dc3886f13 [file] [log] [blame]
/*
* 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;
}