Commit b978a483 authored by Byron Campen's avatar Byron Campen
Browse files

Bug 1822194 - Vendor libwebrtc from 158d5e3078

Upstream commit: https://webrtc.googlesource.com/src/+/158d5e3078bdf119ba34ad58495e72ecc1ca0abc
    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: default avatarTony Herre <herre@google.com>
    Reviewed-by: default avatarHarald Alvestrand <hta@webrtc.org>
    Commit-Queue: Henrik Boström <hbos@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#38735}
parent a642df68
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -19806,3 +19806,6 @@ e40bb38faa
# MOZ_LIBWEBRTC_SRC=/home/bcampen/checkouts/moz-libwebrtc MOZ_LIBWEBRTC_BRANCH=mozpatches bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring
e862da376f
# MOZ_LIBWEBRTC_SRC=/home/bcampen/checkouts/moz-libwebrtc MOZ_LIBWEBRTC_BRANCH=mozpatches bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring
158d5e3078
+2 −0
Original line number Diff line number Diff line
@@ -13226,3 +13226,5 @@ libwebrtc updated from /home/bcampen/checkouts/moz-libwebrtc commit mozpatches o
libwebrtc updated from /home/bcampen/checkouts/moz-libwebrtc commit mozpatches on 2023-04-01T00:22:10.097985.
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/bcampen/checkouts/moz-libwebrtc --commit mozpatches libwebrtc
libwebrtc updated from /home/bcampen/checkouts/moz-libwebrtc commit mozpatches on 2023-04-01T00:23:53.785580.
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/bcampen/checkouts/moz-libwebrtc --commit mozpatches libwebrtc
libwebrtc updated from /home/bcampen/checkouts/moz-libwebrtc commit mozpatches on 2023-04-01T00:25:12.020217.
+1 −1
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ rtc_source_set("video_frame_metadata") {
  ]
  deps = [
    "..:array_view",
    "../../modules/rtp_rtcp:rtp_video_header",
    "../../rtc_base/system:rtc_export",
    "../transport/rtp:dependency_descriptor",
  ]
  absl_deps = [
+61 −11
Original line number Diff line number Diff line
@@ -10,19 +10,69 @@

#include "api/video/video_frame_metadata.h"

#include "modules/rtp_rtcp/source/rtp_video_header.h"

namespace webrtc {

VideoFrameMetadata::VideoFrameMetadata(const RTPVideoHeader& header)
    : width_(header.width), height_(header.height) {
  if (header.generic) {
    frame_id_ = header.generic->frame_id;
    spatial_index_ = header.generic->spatial_index;
    temporal_index_ = header.generic->temporal_index;
    frame_dependencies_ = header.generic->dependencies;
    decode_target_indications_ = header.generic->decode_target_indications;
VideoFrameMetadata::VideoFrameMetadata() = default;

uint16_t VideoFrameMetadata::GetWidth() const {
  return width_;
}

void VideoFrameMetadata::SetWidth(uint16_t width) {
  width_ = width;
}

uint16_t VideoFrameMetadata::GetHeight() const {
  return height_;
}

void VideoFrameMetadata::SetHeight(uint16_t height) {
  height_ = height;
}

absl::optional<int64_t> VideoFrameMetadata::GetFrameId() const {
  return frame_id_;
}

void VideoFrameMetadata::SetFrameId(absl::optional<int64_t> frame_id) {
  frame_id_ = frame_id;
}

int VideoFrameMetadata::GetSpatialIndex() const {
  return spatial_index_;
}

void VideoFrameMetadata::SetSpatialIndex(int spatial_index) {
  spatial_index_ = spatial_index;
}

int VideoFrameMetadata::GetTemporalIndex() const {
  return temporal_index_;
}

void VideoFrameMetadata::SetTemporalIndex(int temporal_index) {
  temporal_index_ = temporal_index;
}

rtc::ArrayView<const int64_t> VideoFrameMetadata::GetFrameDependencies() const {
  return frame_dependencies_;
}

void VideoFrameMetadata::SetFrameDependencies(
    rtc::ArrayView<const int64_t> frame_dependencies) {
  frame_dependencies_.assign(frame_dependencies.begin(),
                             frame_dependencies.end());
}

rtc::ArrayView<const DecodeTargetIndication>
VideoFrameMetadata::GetDecodeTargetIndications() const {
  return decode_target_indications_;
}

void VideoFrameMetadata::SetDecodeTargetIndications(
    rtc::ArrayView<const DecodeTargetIndication> decode_target_indications) {
  decode_target_indications_.assign(decode_target_indications.begin(),
                                    decode_target_indications.end());
}

}  // namespace webrtc
+24 −17
Original line number Diff line number Diff line
@@ -17,37 +17,44 @@
#include "absl/types/optional.h"
#include "api/array_view.h"
#include "api/transport/rtp/dependency_descriptor.h"
#include "rtc_base/system/rtc_export.h"

namespace webrtc {

struct RTPVideoHeader;

// A subset of metadata from the RTP video header, exposed in insertable streams
// API.
class VideoFrameMetadata {
class RTC_EXPORT VideoFrameMetadata {
 public:
  explicit VideoFrameMetadata(const RTPVideoHeader& header);
  VideoFrameMetadata();
  VideoFrameMetadata(const VideoFrameMetadata&) = default;
  VideoFrameMetadata& operator=(const VideoFrameMetadata&) = default;

  uint16_t GetWidth() const { return width_; }
  uint16_t GetHeight() const { return height_; }
  absl::optional<int64_t> GetFrameId() const { return frame_id_; }
  int GetSpatialIndex() const { return spatial_index_; }
  int GetTemporalIndex() const { return temporal_index_; }
  uint16_t GetWidth() const;
  void SetWidth(uint16_t width);

  uint16_t GetHeight() const;
  void SetHeight(uint16_t height);

  absl::optional<int64_t> GetFrameId() const;
  void SetFrameId(absl::optional<int64_t> frame_id);

  int GetSpatialIndex() const;
  void SetSpatialIndex(int spatial_index);

  int GetTemporalIndex() const;
  void SetTemporalIndex(int temporal_index);

  rtc::ArrayView<const int64_t> GetFrameDependencies() const {
    return frame_dependencies_;
  }
  rtc::ArrayView<const int64_t> GetFrameDependencies() const;
  void SetFrameDependencies(rtc::ArrayView<const int64_t> frame_dependencies);

  rtc::ArrayView<const DecodeTargetIndication> GetDecodeTargetIndications()
      const {
    return decode_target_indications_;
  }
      const;
  void SetDecodeTargetIndications(
      rtc::ArrayView<const DecodeTargetIndication> decode_target_indications);

 private:
  int16_t width_;
  int16_t height_;
  int16_t width_ = 0;
  int16_t height_ = 0;
  absl::optional<int64_t> frame_id_;
  int spatial_index_ = 0;
  int temporal_index_ = 0;
Loading