diff options
Diffstat (limited to 'third_party/libwebrtc/test/fake_encoded_frame.cc')
-rw-r--r-- | third_party/libwebrtc/test/fake_encoded_frame.cc | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/third_party/libwebrtc/test/fake_encoded_frame.cc b/third_party/libwebrtc/test/fake_encoded_frame.cc new file mode 100644 index 0000000000..32fa5d8ccf --- /dev/null +++ b/third_party/libwebrtc/test/fake_encoded_frame.cc @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2022 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 "test/fake_encoded_frame.h" + +#include <memory> + +#include "api/video/video_frame_type.h" + +namespace webrtc { + +void PrintTo(const EncodedFrame& frame, + std::ostream* os) /* no-presubmit-check TODO(webrtc:8982) */ { + *os << "EncodedFrame with id=" << frame.Id() << " rtp=" << frame.Timestamp() + << " size=" << frame.size() << " refs=["; + for (size_t ref = 0; ref < frame.num_references; ++ref) { + *os << frame.references[ref] << ","; + } + *os << "]"; +} + +namespace test { + +int64_t FakeEncodedFrame::ReceivedTime() const { + return received_time_; +} + +int64_t FakeEncodedFrame::RenderTime() const { + return _renderTimeMs; +} + +void FakeEncodedFrame::SetReceivedTime(int64_t received_time) { + received_time_ = received_time; +} + +void FakeEncodedFrame::SetPayloadType(int payload_type) { + _payloadType = payload_type; +} + +FakeFrameBuilder& FakeFrameBuilder::Time(uint32_t rtp_timestamp) { + rtp_timestamp_ = rtp_timestamp; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::Id(int64_t frame_id) { + frame_id_ = frame_id; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::AsLast() { + last_spatial_layer_ = true; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::Refs( + const std::vector<int64_t>& references) { + references_ = references; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::PlayoutDelay( + VideoPlayoutDelay playout_delay) { + playout_delay_ = playout_delay; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::SpatialLayer(int spatial_layer) { + spatial_layer_ = spatial_layer; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::ReceivedTime(Timestamp receive_time) { + received_time_ = receive_time; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::Size(size_t size) { + size_ = size; + return *this; +} + +std::unique_ptr<FakeEncodedFrame> FakeFrameBuilder::Build() { + RTC_CHECK_LE(references_.size(), EncodedFrame::kMaxFrameReferences); + + auto frame = std::make_unique<FakeEncodedFrame>(); + frame->is_last_spatial_layer = last_spatial_layer_; + frame->SetEncodedData(EncodedImageBuffer::Create(size_)); + + if (rtp_timestamp_) + frame->SetTimestamp(*rtp_timestamp_); + if (frame_id_) + frame->SetId(*frame_id_); + if (playout_delay_) + frame->SetPlayoutDelay(*playout_delay_); + frame->SetFrameType(references_.empty() ? VideoFrameType::kVideoFrameKey + : VideoFrameType::kVideoFrameDelta); + for (int64_t ref : references_) { + frame->references[frame->num_references] = ref; + frame->num_references++; + } + if (spatial_layer_) + frame->SetSpatialIndex(spatial_layer_); + if (received_time_) + frame->SetReceivedTime(received_time_->ms()); + if (payload_type_) + frame->SetPayloadType(*payload_type_); + if (ntp_time_) + frame->ntp_time_ms_ = ntp_time_->ms(); + if (rotation_) + frame->rotation_ = *rotation_; + if (packet_infos_) + frame->SetPacketInfos(*packet_infos_); + return frame; +} + +FakeFrameBuilder& FakeFrameBuilder::PayloadType(int payload_type) { + payload_type_ = payload_type; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::NtpTime(Timestamp ntp_time) { + ntp_time_ = ntp_time; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::Rotation(VideoRotation rotation) { + rotation_ = rotation; + return *this; +} + +FakeFrameBuilder& FakeFrameBuilder::PacketInfos(RtpPacketInfos packet_infos) { + packet_infos_ = packet_infos; + return *this; +} + +} // namespace test +} // namespace webrtc |