summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/api/video/video_frame_metadata.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/libwebrtc/api/video/video_frame_metadata.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/third_party/libwebrtc/api/video/video_frame_metadata.h b/third_party/libwebrtc/api/video/video_frame_metadata.h
new file mode 100644
index 0000000000..2703f11324
--- /dev/null
+++ b/third_party/libwebrtc/api/video/video_frame_metadata.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#ifndef API_VIDEO_VIDEO_FRAME_METADATA_H_
+#define API_VIDEO_VIDEO_FRAME_METADATA_H_
+
+#include <cstdint>
+
+#include "absl/container/inlined_vector.h"
+#include "absl/types/optional.h"
+#include "absl/types/variant.h"
+#include "api/array_view.h"
+#include "api/transport/rtp/dependency_descriptor.h"
+#include "api/video/video_codec_type.h"
+#include "api/video/video_content_type.h"
+#include "api/video/video_frame_type.h"
+#include "api/video/video_rotation.h"
+#include "modules/video_coding/codecs/h264/include/h264_globals.h"
+#include "modules/video_coding/codecs/vp8/include/vp8_globals.h"
+#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
+#include "rtc_base/system/rtc_export.h"
+
+namespace webrtc {
+
+using RTPVideoHeaderCodecSpecifics = absl::variant<absl::monostate,
+ RTPVideoHeaderVP8,
+ RTPVideoHeaderVP9,
+ RTPVideoHeaderH264>;
+
+// A subset of metadata from the RTP video header, exposed in insertable streams
+// API.
+class RTC_EXPORT VideoFrameMetadata {
+ public:
+ VideoFrameMetadata();
+ VideoFrameMetadata(const VideoFrameMetadata&) = default;
+ VideoFrameMetadata& operator=(const VideoFrameMetadata&) = default;
+
+ VideoFrameType GetFrameType() const;
+ void SetFrameType(VideoFrameType frame_type);
+
+ uint16_t GetWidth() const;
+ void SetWidth(uint16_t width);
+
+ uint16_t GetHeight() const;
+ void SetHeight(uint16_t height);
+
+ VideoRotation GetRotation() const;
+ void SetRotation(VideoRotation rotation);
+
+ VideoContentType GetContentType() const;
+ void SetContentType(VideoContentType content_type);
+
+ 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;
+ void SetFrameDependencies(rtc::ArrayView<const int64_t> frame_dependencies);
+
+ rtc::ArrayView<const DecodeTargetIndication> GetDecodeTargetIndications()
+ const;
+ void SetDecodeTargetIndications(
+ rtc::ArrayView<const DecodeTargetIndication> decode_target_indications);
+
+ bool GetIsLastFrameInPicture() const;
+ void SetIsLastFrameInPicture(bool is_last_frame_in_picture);
+
+ uint8_t GetSimulcastIdx() const;
+ void SetSimulcastIdx(uint8_t simulcast_idx);
+
+ VideoCodecType GetCodec() const;
+ void SetCodec(VideoCodecType codec);
+
+ // Which varient is used depends on the VideoCodecType from GetCodecs().
+ const RTPVideoHeaderCodecSpecifics& GetRTPVideoHeaderCodecSpecifics() const;
+ void SetRTPVideoHeaderCodecSpecifics(
+ RTPVideoHeaderCodecSpecifics codec_specifics);
+
+ private:
+ VideoFrameType frame_type_ = VideoFrameType::kEmptyFrame;
+ int16_t width_ = 0;
+ int16_t height_ = 0;
+ VideoRotation rotation_ = VideoRotation::kVideoRotation_0;
+ VideoContentType content_type_ = VideoContentType::UNSPECIFIED;
+
+ // Corresponding to GenericDescriptorInfo.
+ absl::optional<int64_t> frame_id_;
+ int spatial_index_ = 0;
+ int temporal_index_ = 0;
+ absl::InlinedVector<int64_t, 5> frame_dependencies_;
+ absl::InlinedVector<DecodeTargetIndication, 10> decode_target_indications_;
+
+ bool is_last_frame_in_picture_ = true;
+ uint8_t simulcast_idx_ = 0;
+ VideoCodecType codec_ = VideoCodecType::kVideoCodecGeneric;
+ RTPVideoHeaderCodecSpecifics codec_specifics_;
+};
+} // namespace webrtc
+
+#endif // API_VIDEO_VIDEO_FRAME_METADATA_H_