Chromium Code Reviews| Index: webrtc/modules/audio_coding/neteq/tools/neteq_packet_source_input.cc |
| diff --git a/webrtc/modules/audio_coding/neteq/tools/neteq_packet_source_input.cc b/webrtc/modules/audio_coding/neteq/tools/neteq_packet_source_input.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..85ba032d9564ada2452da6cc70cf043e186d8a9e |
| --- /dev/null |
| +++ b/webrtc/modules/audio_coding/neteq/tools/neteq_packet_source_input.cc |
| @@ -0,0 +1,100 @@ |
| +/* |
| + * Copyright (c) 2016 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 "webrtc/modules/audio_coding/neteq/tools/neteq_packet_source_input.h" |
| + |
| +#include <algorithm> |
| +#include <limits> |
| + |
| +#include "webrtc/base/checks.h" |
| +#include "webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.h" |
| +#include "webrtc/modules/audio_coding/neteq/tools/rtp_file_source.h" |
| + |
| +namespace webrtc { |
| +namespace test { |
| + |
| +NetEqPacketSourceInput::NetEqPacketSourceInput() : next_output_event_ms_(0) {} |
| + |
| +rtc::Optional<int64_t> NetEqPacketSourceInput::NextPacketTime() const { |
| + return packet_ |
| + ? rtc::Optional<int64_t>(static_cast<int64_t>(packet_->time_ms())) |
| + : rtc::Optional<int64_t>(); |
| +} |
| + |
| +rtc::Optional<RTPHeader> NetEqPacketSourceInput::NextHeader() const { |
| + return packet_ ? rtc::Optional<RTPHeader>(packet_->header()) |
| + : rtc::Optional<RTPHeader>(); |
| +} |
| + |
| +void NetEqPacketSourceInput::LoadNextPacket() { |
| + packet_ = source()->NextPacket(); |
| +} |
| + |
| +std::unique_ptr<NetEqInput::PacketData> NetEqPacketSourceInput::GetPacket() { |
| + if (!packet_) { |
| + return std::unique_ptr<NetEqInput::PacketData>(); |
|
ivoc
2016/06/14 16:39:56
I think the "NetEqInput::" part can be removed (si
hlundin-webrtc
2016/06/17 10:30:08
Done.
|
| + } |
| + std::unique_ptr<PacketData> packet_data(new PacketData); |
| + packet_->ConvertHeader(&packet_data->header); |
| + packet_data->payload.SetData(packet_->payload(), |
| + packet_->payload_length_bytes()); |
| + packet_data->time_ms = packet_->time_ms(); |
| + |
| + LoadNextPacket(); |
| + |
| + return packet_data; |
| +} |
| + |
| +NetEqRtpDumpInput::NetEqRtpDumpInput(const std::string& file_name) |
| + : source_(RtpFileSource::Create(file_name)) { |
| + LoadNextPacket(); |
| +} |
| + |
| +rtc::Optional<int64_t> NetEqRtpDumpInput::NextOutputEventTime() const { |
| + return next_output_event_ms_; |
| +} |
| + |
| +void NetEqRtpDumpInput::AdvanceOutputEvent() { |
| + if (next_output_event_ms_) { |
| + *next_output_event_ms_ += kOutputPeriodMs; |
| + } |
| + if (!NextPacketTime()) { |
| + next_output_event_ms_ = rtc::Optional<int64_t>(); |
| + } |
| +} |
| + |
| +PacketSource* NetEqRtpDumpInput::source() { |
| + return source_.get(); |
| +} |
| + |
| +NetEqEventLogInput::NetEqEventLogInput(const std::string& file_name) |
| + : source_(RtcEventLogSource::Create(file_name)) { |
| + LoadNextPacket(); |
| + AdvanceOutputEvent(); |
| +} |
| + |
| +rtc::Optional<int64_t> NetEqEventLogInput::NextOutputEventTime() const { |
| + return rtc::Optional<int64_t>(next_output_event_ms_); |
| +} |
| + |
| +void NetEqEventLogInput::AdvanceOutputEvent() { |
| + next_output_event_ms_ = |
| + rtc::Optional<int64_t>(source_->NextAudioOutputEventMs()); |
| + if (*next_output_event_ms_ == std::numeric_limits<int64_t>::max()) { |
| + next_output_event_ms_ = rtc::Optional<int64_t>(); |
| + } |
| +} |
| + |
| +PacketSource* NetEqEventLogInput::source() { |
| + return source_.get(); |
| +} |
| + |
| +} // namespace test |
| +} // namespace webrtc |