xref: /aosp_15_r20/external/webrtc/test/fake_encoded_frame.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "test/fake_encoded_frame.h"
12 
13 #include <memory>
14 
15 #include "api/video/video_frame_type.h"
16 
17 namespace webrtc {
18 
PrintTo(const EncodedFrame & frame,std::ostream * os)19 void PrintTo(const EncodedFrame& frame,
20              std::ostream* os) /* no-presubmit-check TODO(webrtc:8982) */ {
21   *os << "EncodedFrame with id=" << frame.Id() << " rtp=" << frame.Timestamp()
22       << " size=" << frame.size() << " refs=[";
23   for (size_t ref = 0; ref < frame.num_references; ++ref) {
24     *os << frame.references[ref] << ",";
25   }
26   *os << "]";
27 }
28 
29 namespace test {
30 
ReceivedTime() const31 int64_t FakeEncodedFrame::ReceivedTime() const {
32   return received_time_;
33 }
34 
RenderTime() const35 int64_t FakeEncodedFrame::RenderTime() const {
36   return _renderTimeMs;
37 }
38 
SetReceivedTime(int64_t received_time)39 void FakeEncodedFrame::SetReceivedTime(int64_t received_time) {
40   received_time_ = received_time;
41 }
42 
SetPayloadType(int payload_type)43 void FakeEncodedFrame::SetPayloadType(int payload_type) {
44   _payloadType = payload_type;
45 }
46 
Time(uint32_t rtp_timestamp)47 FakeFrameBuilder& FakeFrameBuilder::Time(uint32_t rtp_timestamp) {
48   rtp_timestamp_ = rtp_timestamp;
49   return *this;
50 }
51 
Id(int64_t frame_id)52 FakeFrameBuilder& FakeFrameBuilder::Id(int64_t frame_id) {
53   frame_id_ = frame_id;
54   return *this;
55 }
56 
AsLast()57 FakeFrameBuilder& FakeFrameBuilder::AsLast() {
58   last_spatial_layer_ = true;
59   return *this;
60 }
61 
Refs(const std::vector<int64_t> & references)62 FakeFrameBuilder& FakeFrameBuilder::Refs(
63     const std::vector<int64_t>& references) {
64   references_ = references;
65   return *this;
66 }
67 
PlayoutDelay(VideoPlayoutDelay playout_delay)68 FakeFrameBuilder& FakeFrameBuilder::PlayoutDelay(
69     VideoPlayoutDelay playout_delay) {
70   playout_delay_ = playout_delay;
71   return *this;
72 }
73 
SpatialLayer(int spatial_layer)74 FakeFrameBuilder& FakeFrameBuilder::SpatialLayer(int spatial_layer) {
75   spatial_layer_ = spatial_layer;
76   return *this;
77 }
78 
ReceivedTime(Timestamp receive_time)79 FakeFrameBuilder& FakeFrameBuilder::ReceivedTime(Timestamp receive_time) {
80   received_time_ = receive_time;
81   return *this;
82 }
83 
Size(size_t size)84 FakeFrameBuilder& FakeFrameBuilder::Size(size_t size) {
85   size_ = size;
86   return *this;
87 }
88 
Build()89 std::unique_ptr<FakeEncodedFrame> FakeFrameBuilder::Build() {
90   RTC_CHECK_LE(references_.size(), EncodedFrame::kMaxFrameReferences);
91 
92   auto frame = std::make_unique<FakeEncodedFrame>();
93   frame->is_last_spatial_layer = last_spatial_layer_;
94   frame->SetEncodedData(EncodedImageBuffer::Create(size_));
95 
96   if (rtp_timestamp_)
97     frame->SetTimestamp(*rtp_timestamp_);
98   if (frame_id_)
99     frame->SetId(*frame_id_);
100   if (playout_delay_)
101     frame->SetPlayoutDelay(*playout_delay_);
102   frame->SetFrameType(references_.empty() ? VideoFrameType::kVideoFrameKey
103                                           : VideoFrameType::kVideoFrameDelta);
104   for (int64_t ref : references_) {
105     frame->references[frame->num_references] = ref;
106     frame->num_references++;
107   }
108   if (spatial_layer_)
109     frame->SetSpatialIndex(spatial_layer_);
110   if (received_time_)
111     frame->SetReceivedTime(received_time_->ms());
112   if (payload_type_)
113     frame->SetPayloadType(*payload_type_);
114   if (ntp_time_)
115     frame->ntp_time_ms_ = ntp_time_->ms();
116   if (rotation_)
117     frame->rotation_ = *rotation_;
118   if (packet_infos_)
119     frame->SetPacketInfos(*packet_infos_);
120   return frame;
121 }
122 
PayloadType(int payload_type)123 FakeFrameBuilder& FakeFrameBuilder::PayloadType(int payload_type) {
124   payload_type_ = payload_type;
125   return *this;
126 }
127 
NtpTime(Timestamp ntp_time)128 FakeFrameBuilder& FakeFrameBuilder::NtpTime(Timestamp ntp_time) {
129   ntp_time_ = ntp_time;
130   return *this;
131 }
132 
Rotation(VideoRotation rotation)133 FakeFrameBuilder& FakeFrameBuilder::Rotation(VideoRotation rotation) {
134   rotation_ = rotation;
135   return *this;
136 }
137 
PacketInfos(RtpPacketInfos packet_infos)138 FakeFrameBuilder& FakeFrameBuilder::PacketInfos(RtpPacketInfos packet_infos) {
139   packet_infos_ = packet_infos;
140   return *this;
141 }
142 
143 }  // namespace test
144 }  // namespace webrtc
145