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