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)19void 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() const31int64_t FakeEncodedFrame::ReceivedTime() const { 32 return received_time_; 33 } 34 RenderTime() const35int64_t FakeEncodedFrame::RenderTime() const { 36 return _renderTimeMs; 37 } 38 SetReceivedTime(int64_t received_time)39void FakeEncodedFrame::SetReceivedTime(int64_t received_time) { 40 received_time_ = received_time; 41 } 42 SetPayloadType(int payload_type)43void FakeEncodedFrame::SetPayloadType(int payload_type) { 44 _payloadType = payload_type; 45 } 46 Time(uint32_t rtp_timestamp)47FakeFrameBuilder& FakeFrameBuilder::Time(uint32_t rtp_timestamp) { 48 rtp_timestamp_ = rtp_timestamp; 49 return *this; 50 } 51 Id(int64_t frame_id)52FakeFrameBuilder& FakeFrameBuilder::Id(int64_t frame_id) { 53 frame_id_ = frame_id; 54 return *this; 55 } 56 AsLast()57FakeFrameBuilder& FakeFrameBuilder::AsLast() { 58 last_spatial_layer_ = true; 59 return *this; 60 } 61 Refs(const std::vector<int64_t> & references)62FakeFrameBuilder& FakeFrameBuilder::Refs( 63 const std::vector<int64_t>& references) { 64 references_ = references; 65 return *this; 66 } 67 PlayoutDelay(VideoPlayoutDelay playout_delay)68FakeFrameBuilder& FakeFrameBuilder::PlayoutDelay( 69 VideoPlayoutDelay playout_delay) { 70 playout_delay_ = playout_delay; 71 return *this; 72 } 73 SpatialLayer(int spatial_layer)74FakeFrameBuilder& FakeFrameBuilder::SpatialLayer(int spatial_layer) { 75 spatial_layer_ = spatial_layer; 76 return *this; 77 } 78 ReceivedTime(Timestamp receive_time)79FakeFrameBuilder& FakeFrameBuilder::ReceivedTime(Timestamp receive_time) { 80 received_time_ = receive_time; 81 return *this; 82 } 83 Size(size_t size)84FakeFrameBuilder& FakeFrameBuilder::Size(size_t size) { 85 size_ = size; 86 return *this; 87 } 88 Build()89std::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)123FakeFrameBuilder& FakeFrameBuilder::PayloadType(int payload_type) { 124 payload_type_ = payload_type; 125 return *this; 126 } 127 NtpTime(Timestamp ntp_time)128FakeFrameBuilder& FakeFrameBuilder::NtpTime(Timestamp ntp_time) { 129 ntp_time_ = ntp_time; 130 return *this; 131 } 132 Rotation(VideoRotation rotation)133FakeFrameBuilder& FakeFrameBuilder::Rotation(VideoRotation rotation) { 134 rotation_ = rotation; 135 return *this; 136 } 137 PacketInfos(RtpPacketInfos packet_infos)138FakeFrameBuilder& FakeFrameBuilder::PacketInfos(RtpPacketInfos packet_infos) { 139 packet_infos_ = packet_infos; 140 return *this; 141 } 142 143 } // namespace test 144 } // namespace webrtc 145