blob: 32fa5d8ccf43bfa4d31cc3985cf3fae23077dba4 [file] [log] [blame]
/*
* 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