aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/hevc/sei.h
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2024-05-29 09:50:48 +0200
committerAnton Khirnov <anton@khirnov.net>2024-06-04 11:46:27 +0200
commite4601cc3390eec6ccbfc1139bdd102b4e801ae80 (patch)
tree3f31fad838457e80f3f922bc597ea85ab2c81319 /libavcodec/hevc/sei.h
parentba56a300a94bdf5520ac1324a8e7fbaeea430904 (diff)
downloadffmpeg-e4601cc3390eec6ccbfc1139bdd102b4e801ae80.tar.gz
lavc/hevc*: move to hevc/ subdir
Diffstat (limited to 'libavcodec/hevc/sei.h')
-rw-r--r--libavcodec/hevc/sei.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/libavcodec/hevc/sei.h b/libavcodec/hevc/sei.h
new file mode 100644
index 0000000000..c97d22d423
--- /dev/null
+++ b/libavcodec/hevc/sei.h
@@ -0,0 +1,112 @@
+/*
+ * HEVC Supplementary Enhancement Information messages
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_HEVC_SEI_H
+#define AVCODEC_HEVC_SEI_H
+
+#include <stdint.h>
+
+#include "libavutil/buffer.h"
+
+#include "libavcodec/get_bits.h"
+#include "libavcodec/h2645_sei.h"
+#include "libavcodec/sei.h"
+
+#include "hevc.h"
+
+
+typedef enum {
+ HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING = 7,
+ HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING = 8
+} HEVC_SEI_PicStructType;
+
+typedef struct HEVCSEIPictureHash {
+ uint8_t md5[3][16];
+ uint8_t is_md5;
+} HEVCSEIPictureHash;
+
+typedef struct HEVCSEIFramePacking {
+ int present;
+ int arrangement_type;
+ int content_interpretation_type;
+ int quincunx_subsampling;
+ int current_frame_is_frame0_flag;
+} HEVCSEIFramePacking;
+
+typedef struct HEVCSEIPictureTiming {
+ int picture_struct;
+} HEVCSEIPictureTiming;
+
+typedef struct HEVCSEIAlternativeTransfer {
+ int present;
+ int preferred_transfer_characteristics;
+} HEVCSEIAlternativeTransfer;
+
+typedef struct HEVCSEITimeCode {
+ int present;
+ uint8_t num_clock_ts;
+ uint8_t clock_timestamp_flag[3];
+ uint8_t units_field_based_flag[3];
+ uint8_t counting_type[3];
+ uint8_t full_timestamp_flag[3];
+ uint8_t discontinuity_flag[3];
+ uint8_t cnt_dropped_flag[3];
+ uint16_t n_frames[3];
+ uint8_t seconds_value[3];
+ uint8_t minutes_value[3];
+ uint8_t hours_value[3];
+ uint8_t seconds_flag[3];
+ uint8_t minutes_flag[3];
+ uint8_t hours_flag[3];
+ uint8_t time_offset_length[3];
+ int32_t time_offset_value[3];
+} HEVCSEITimeCode;
+
+typedef struct HEVCSEI {
+ H2645SEI common;
+ HEVCSEIPictureHash picture_hash;
+ HEVCSEIPictureTiming picture_timing;
+ int active_seq_parameter_set_id;
+ HEVCSEITimeCode timecode;
+} HEVCSEI;
+
+struct HEVCParamSets;
+
+int ff_hevc_decode_nal_sei(GetBitContext *gb, void *logctx, HEVCSEI *s,
+ const struct HEVCParamSets *ps, enum HEVCNALUnitType type);
+
+static inline int ff_hevc_sei_ctx_replace(HEVCSEI *dst, const HEVCSEI *src)
+{
+ return ff_h2645_sei_ctx_replace(&dst->common, &src->common);
+}
+
+/**
+ * Reset SEI values that are stored on the Context.
+ * e.g. Caption data that was extracted during NAL
+ * parsing.
+ *
+ * @param sei HEVCSEI.
+ */
+static inline void ff_hevc_reset_sei(HEVCSEI *sei)
+{
+ ff_h2645_sei_reset(&sei->common);
+}
+
+#endif /* AVCODEC_HEVC_SEI_H */