diff options
author | Henrik Boström <hbos@webrtc.org> | 2022-11-25 14:46:40 +0100 |
---|---|---|
committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-25 14:40:30 +0000 |
commit | 158d5e3078bdf119ba34ad58495e72ecc1ca0abc (patch) | |
tree | 92e9dac90ed155a834ca7b3c38a112a16cf11522 /modules | |
parent | e862da376f11d8279eeaca4fee144ae8b042d327 (diff) | |
download | webrtc-158d5e3078bdf119ba34ad58495e72ecc1ca0abc.tar.gz |
Add RTPVideoHeader::GetAsMetadata().
In preparation of adding RTPVideoHeader::SetFromMetadata() method, the
VideoFrameMetadata construct-from-RTPVideoHeader is replaced by
RTPVideoHeader::GetAsMetadata(). This serves two purposes:
1. Having "GetAs" and "SetFrom" in the same file reduces the risk of
these two methods getting out of sync as we expand its usage.
2. This is necessary to avoid a circular dependency that would
otherwise be introduced by RTPVideoHeader::SetFromMetadata().
Bug: webrtc:14709
Change-Id: I127b3d15f9a8c6af210449a5a50d414c9ba79930
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/285080
Reviewed-by: Tony Herre <herre@google.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38735}
Diffstat (limited to 'modules')
-rw-r--r-- | modules/rtp_rtcp/BUILD.gn | 1 | ||||
-rw-r--r-- | modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc | 2 | ||||
-rw-r--r-- | modules/rtp_rtcp/source/rtp_video_header.cc | 22 | ||||
-rw-r--r-- | modules/rtp_rtcp/source/rtp_video_header.h | 4 |
4 files changed, 24 insertions, 5 deletions
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn index e046882357..a23f595da1 100644 --- a/modules/rtp_rtcp/BUILD.gn +++ b/modules/rtp_rtcp/BUILD.gn @@ -425,6 +425,7 @@ rtc_library("rtp_video_header") { "../../api:rtp_headers", "../../api/transport/rtp:dependency_descriptor", "../../api/video:video_frame", + "../../api/video:video_frame_metadata", "../../api/video:video_frame_type", "../../api/video:video_rtp_headers", "../../modules/video_coding:codec_globals_headers", diff --git a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc index a60c39395a..ef0437ab2a 100644 --- a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc +++ b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc @@ -35,7 +35,7 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface { uint32_t ssrc) : encoded_data_(encoded_image.GetEncodedData()), header_(video_header), - metadata_(header_), + metadata_(header_.GetAsMetadata()), frame_type_(encoded_image._frameType), payload_type_(payload_type), codec_type_(codec_type), diff --git a/modules/rtp_rtcp/source/rtp_video_header.cc b/modules/rtp_rtcp/source/rtp_video_header.cc index bb9413ddd5..d800b7d3c7 100644 --- a/modules/rtp_rtcp/source/rtp_video_header.cc +++ b/modules/rtp_rtcp/source/rtp_video_header.cc @@ -12,13 +12,27 @@ namespace webrtc { -RTPVideoHeader::RTPVideoHeader() : video_timing() {} -RTPVideoHeader::RTPVideoHeader(const RTPVideoHeader& other) = default; -RTPVideoHeader::~RTPVideoHeader() = default; - RTPVideoHeader::GenericDescriptorInfo::GenericDescriptorInfo() = default; RTPVideoHeader::GenericDescriptorInfo::GenericDescriptorInfo( const GenericDescriptorInfo& other) = default; RTPVideoHeader::GenericDescriptorInfo::~GenericDescriptorInfo() = default; +RTPVideoHeader::RTPVideoHeader() : video_timing() {} +RTPVideoHeader::RTPVideoHeader(const RTPVideoHeader& other) = default; +RTPVideoHeader::~RTPVideoHeader() = default; + +VideoFrameMetadata RTPVideoHeader::GetAsMetadata() const { + VideoFrameMetadata metadata; + metadata.SetWidth(width); + metadata.SetHeight(height); + if (generic) { + metadata.SetFrameId(generic->frame_id); + metadata.SetSpatialIndex(generic->spatial_index); + metadata.SetTemporalIndex(generic->temporal_index); + metadata.SetFrameDependencies(generic->dependencies); + metadata.SetDecodeTargetIndications(generic->decode_target_indications); + } + return metadata; +} + } // namespace webrtc diff --git a/modules/rtp_rtcp/source/rtp_video_header.h b/modules/rtp_rtcp/source/rtp_video_header.h index 115b17d36d..c65bde9fab 100644 --- a/modules/rtp_rtcp/source/rtp_video_header.h +++ b/modules/rtp_rtcp/source/rtp_video_header.h @@ -21,6 +21,7 @@ #include "api/video/color_space.h" #include "api/video/video_codec_type.h" #include "api/video/video_content_type.h" +#include "api/video/video_frame_metadata.h" #include "api/video/video_frame_type.h" #include "api/video/video_rotation.h" #include "api/video/video_timing.h" @@ -62,6 +63,9 @@ struct RTPVideoHeader { ~RTPVideoHeader(); + // The subset of RTPVideoHeader that is exposed in the Insertable Streams API. + VideoFrameMetadata GetAsMetadata() const; + absl::optional<GenericDescriptorInfo> generic; VideoFrameType frame_type = VideoFrameType::kEmptyFrame; |