
It no longer has to interact with the decode queue, that will only happen in VideoReceieveStream2. This moves some members in VideoReceieveStream2 to the packet sequence which removes a few post-tasks. Bug: webrtc:14003, webrtc:11993 Change-Id: I4641b593b1a2f68e017c384b73ee4e75d06cf559 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271700 Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37802}
145 lines
3.8 KiB
C++
145 lines
3.8 KiB
C++
/*
|
|
* 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
|