* [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing
@ 2024-06-26 23:12 James Almer
2024-06-26 23:12 ` [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h266: move decoded_picture_hash to CBS SEI James Almer
2024-06-28 14:51 ` [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
0 siblings, 2 replies; 3+ messages in thread
From: James Almer @ 2024-06-26 23:12 UTC (permalink / raw)
To: ffmpeg-devel
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/cbs_h264.h | 20 ++++++++++++++++
libavcodec/cbs_h2645.c | 22 +++++++++++++----
libavcodec/cbs_h264_syntax_template.c | 34 +++++++++++++++++++++++++++
libavcodec/cbs_sei.h | 20 ++++++++++++++++
libavcodec/cbs_sei_syntax_template.c | 34 +++++++++++++++++++++++++++
5 files changed, 125 insertions(+), 5 deletions(-)
diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h
index db91231337..3763f2492b 100644
--- a/libavcodec/cbs_h264.h
+++ b/libavcodec/cbs_h264.h
@@ -293,6 +293,26 @@ typedef struct H264RawFilmGrainCharacteristics {
uint8_t film_grain_characteristics_repetition_period;
} H264RawFilmGrainCharacteristics;
+typedef struct H264RawSEIFramePackingArrangement {
+ uint32_t frame_packing_arrangement_id;
+ uint8_t frame_packing_arrangement_cancel_flag;
+ uint8_t frame_packing_arrangement_type;
+ uint8_t quincunx_sampling_flag;
+ uint8_t content_interpretation_type;
+ uint8_t spatial_flipping_flag;
+ uint8_t frame0_flipped_flag;
+ uint8_t field_views_flag;
+ uint8_t current_frame_is_frame0_flag;
+ uint8_t frame0_self_contained_flag;
+ uint8_t frame1_self_contained_flag;
+ uint8_t frame0_grid_position_x;
+ uint8_t frame0_grid_position_y;
+ uint8_t frame1_grid_position_x;
+ uint8_t frame1_grid_position_y;
+ uint16_t frame_packing_arrangement_repetition_period;
+ uint8_t frame_packing_arrangement_extension_flag;
+} H264RawSEIFramePackingArrangement;
+
typedef struct H264RawSEIDisplayOrientation {
uint8_t display_orientation_cancel_flag;
uint8_t hor_flip;
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index e2389f124e..283925f937 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -2128,6 +2128,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = {
sizeof(SEIRawUserDataUnregistered),
SEI_MESSAGE_RW(sei, user_data_unregistered),
},
+ {
+ SEI_TYPE_FRAME_PACKING_ARRANGEMENT,
+ 1, 0,
+ sizeof(SEIRawFramePackingArrangement),
+ SEI_MESSAGE_RW(sei, frame_packing_arrangement),
+ },
{
SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME,
1, 0,
@@ -2186,6 +2192,12 @@ static const SEIMessageTypeDescriptor cbs_sei_h264_types[] = {
sizeof(H264RawFilmGrainCharacteristics),
SEI_MESSAGE_RW(h264, film_grain_characteristics),
},
+ {
+ SEI_TYPE_FRAME_PACKING_ARRANGEMENT,
+ 1, 0,
+ sizeof(H264RawSEIFramePackingArrangement),
+ SEI_MESSAGE_RW(h264, sei_frame_packing_arrangement),
+ },
{
SEI_TYPE_DISPLAY_ORIENTATION,
1, 0,
@@ -2275,11 +2287,6 @@ const SEIMessageTypeDescriptor *ff_cbs_sei_find_type(CodedBitstreamContext *ctx,
const SEIMessageTypeDescriptor *codec_list;
int i;
- for (i = 0; cbs_sei_common_types[i].type >= 0; i++) {
- if (cbs_sei_common_types[i].type == payload_type)
- return &cbs_sei_common_types[i];
- }
-
switch (ctx->codec->codec_id) {
case AV_CODEC_ID_H264:
codec_list = cbs_sei_h264_types;
@@ -2299,5 +2306,10 @@ const SEIMessageTypeDescriptor *ff_cbs_sei_find_type(CodedBitstreamContext *ctx,
return &codec_list[i];
}
+ for (i = 0; cbs_sei_common_types[i].type >= 0; i++) {
+ if (cbs_sei_common_types[i].type == payload_type)
+ return &cbs_sei_common_types[i];
+ }
+
return NULL;
}
diff --git a/libavcodec/cbs_h264_syntax_template.c b/libavcodec/cbs_h264_syntax_template.c
index 4d2d303722..9d0386c24d 100644
--- a/libavcodec/cbs_h264_syntax_template.c
+++ b/libavcodec/cbs_h264_syntax_template.c
@@ -801,6 +801,40 @@ SEI_FUNC(film_grain_characteristics, (CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
+SEI_FUNC(sei_frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw,
+ H264RawSEIFramePackingArrangement *current,
+ SEIMessageState *sei))
+{
+ int err;
+
+ HEADER("Frame Packing Arrangement");
+
+ ue(frame_packing_arrangement_id, 0, MAX_UINT_BITS(31));
+ flag(frame_packing_arrangement_cancel_flag);
+ if (!current->frame_packing_arrangement_cancel_flag) {
+ u(7, frame_packing_arrangement_type, 0, 7);
+ flag(quincunx_sampling_flag);
+ u(6, content_interpretation_type, 0, 2);
+ flag(spatial_flipping_flag);
+ flag(frame0_flipped_flag);
+ flag(field_views_flag);
+ flag(current_frame_is_frame0_flag);
+ flag(frame0_self_contained_flag);
+ flag(frame1_self_contained_flag);
+ if (!current->quincunx_sampling_flag && current->frame_packing_arrangement_type != 5) {
+ ub(4, frame0_grid_position_x);
+ ub(4, frame0_grid_position_y);
+ ub(4, frame1_grid_position_x);
+ ub(4, frame1_grid_position_y);
+ }
+ fixed(8, frame_packing_arrangement_reserved_byte, 0);
+ ue(frame_packing_arrangement_repetition_period, 0, 16384);
+ }
+ flag(frame_packing_arrangement_extension_flag);
+
+ return 0;
+}
+
SEI_FUNC(sei_display_orientation, (CodedBitstreamContext *ctx, RWContext *rw,
H264RawSEIDisplayOrientation *current,
SEIMessageState *sei))
diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h
index ec7cdb62f0..cc7d6f797d 100644
--- a/libavcodec/cbs_sei.h
+++ b/libavcodec/cbs_sei.h
@@ -43,6 +43,26 @@ typedef struct SEIRawUserDataUnregistered {
size_t data_length;
} SEIRawUserDataUnregistered;
+typedef struct SEIRawFramePackingArrangement {
+ uint32_t fp_arrangement_id;
+ uint8_t fp_arrangement_cancel_flag;
+ uint8_t fp_arrangement_type;
+ uint8_t fp_quincunx_sampling_flag;
+ uint8_t fp_content_interpretation_type;
+ uint8_t fp_spatial_flipping_flag;
+ uint8_t fp_frame0_flipped_flag;
+ uint8_t fp_field_views_flag;
+ uint8_t fp_current_frame_is_frame0_flag;
+ uint8_t fp_frame0_self_contained_flag;
+ uint8_t fp_frame1_self_contained_flag;
+ uint8_t fp_frame0_grid_position_x;
+ uint8_t fp_frame0_grid_position_y;
+ uint8_t fp_frame1_grid_position_x;
+ uint8_t fp_frame1_grid_position_y;
+ uint8_t fp_arrangement_persistence_flag;
+ uint8_t fp_upsampled_aspect_ratio_flag;
+} SEIRawFramePackingArrangement;
+
typedef struct SEIRawMasteringDisplayColourVolume {
uint16_t display_primaries_x[3];
uint16_t display_primaries_y[3];
diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c
index 81448ef3f2..03ef9ab473 100644
--- a/libavcodec/cbs_sei_syntax_template.c
+++ b/libavcodec/cbs_sei_syntax_template.c
@@ -94,6 +94,40 @@ SEI_FUNC(user_data_unregistered, (CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
+SEI_FUNC(frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw,
+ SEIRawFramePackingArrangement *current,
+ SEIMessageState *unused))
+{
+ int err;
+
+ HEADER("Frame Packing Arrangement");
+
+ ue(fp_arrangement_id, 0, MAX_UINT_BITS(31));
+ flag(fp_arrangement_cancel_flag);
+ if (!current->fp_arrangement_cancel_flag) {
+ u(7, fp_arrangement_type, 3, 5);
+ flag(fp_quincunx_sampling_flag);
+ u(6, fp_content_interpretation_type, 0, 2);
+ flag(fp_spatial_flipping_flag);
+ flag(fp_frame0_flipped_flag);
+ flag(fp_field_views_flag);
+ flag(fp_current_frame_is_frame0_flag);
+ flag(fp_frame0_self_contained_flag);
+ flag(fp_frame1_self_contained_flag);
+ if (!current->fp_quincunx_sampling_flag && current->fp_arrangement_type != 5) {
+ ub(4, fp_frame0_grid_position_x);
+ ub(4, fp_frame0_grid_position_y);
+ ub(4, fp_frame1_grid_position_x);
+ ub(4, fp_frame1_grid_position_y);
+ }
+ fixed(8, fp_arrangement_reserved_byte, 0);
+ flag(fp_arrangement_persistence_flag);
+ }
+ flag(fp_upsampled_aspect_ratio_flag);
+
+ return 0;
+}
+
SEI_FUNC(mastering_display_colour_volume,
(CodedBitstreamContext *ctx, RWContext *rw,
SEIRawMasteringDisplayColourVolume *current,
--
2.45.2
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h266: move decoded_picture_hash to CBS SEI
2024-06-26 23:12 [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
@ 2024-06-26 23:12 ` James Almer
2024-06-28 14:51 ` [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
1 sibling, 0 replies; 3+ messages in thread
From: James Almer @ 2024-06-26 23:12 UTC (permalink / raw)
To: ffmpeg-devel
It's defined in H.274 as a common SEI message type and not in H.266
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/cbs_h2645.c | 12 ++++++------
libavcodec/cbs_h266.h | 10 ----------
libavcodec/cbs_h266_syntax_template.c | 28 ---------------------------
libavcodec/cbs_sei.h | 10 ++++++++++
libavcodec/cbs_sei_syntax_template.c | 28 +++++++++++++++++++++++++++
5 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 283925f937..5ec781ddab 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -2134,6 +2134,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = {
sizeof(SEIRawFramePackingArrangement),
SEI_MESSAGE_RW(sei, frame_packing_arrangement),
},
+ {
+ SEI_TYPE_DECODED_PICTURE_HASH,
+ 0, 1,
+ sizeof(SEIRawDecodedPictureHash),
+ SEI_MESSAGE_RW(sei, decoded_picture_hash),
+ },
{
SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME,
1, 0,
@@ -2272,12 +2278,6 @@ static const SEIMessageTypeDescriptor cbs_sei_h265_types[] = {
};
static const SEIMessageTypeDescriptor cbs_sei_h266_types[] = {
- {
- SEI_TYPE_DECODED_PICTURE_HASH,
- 0, 1,
- sizeof(H266RawSEIDecodedPictureHash),
- SEI_MESSAGE_RW(h266, sei_decoded_picture_hash),
- },
SEI_MESSAGE_TYPE_END
};
diff --git a/libavcodec/cbs_h266.h b/libavcodec/cbs_h266.h
index 5f12915b65..d24a8e9313 100644
--- a/libavcodec/cbs_h266.h
+++ b/libavcodec/cbs_h266.h
@@ -848,16 +848,6 @@ typedef struct H266RawSlice {
int data_bit_start;
} H266RawSlice;
-typedef struct H266RawSEIDecodedPictureHash {
- uint8_t dph_sei_hash_type;
- uint8_t dph_sei_single_component_flag;
- uint8_t dph_sei_picture_md5[3][16];
- uint16_t dph_sei_picture_crc[3];
- uint32_t dph_sei_picture_checksum[3];
-
- uint8_t dph_sei_reserved_zero_7bits;
-} H266RawSEIDecodedPictureHash;
-
typedef struct H266RawSEI {
H266RawNALUnitHeader nal_unit_header;
SEIRawMessageList message_list;
diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c
index 34b766c7af..9c37996947 100644
--- a/libavcodec/cbs_h266_syntax_template.c
+++ b/libavcodec/cbs_h266_syntax_template.c
@@ -3442,34 +3442,6 @@ static int FUNC(slice_header) (CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
-SEI_FUNC(sei_decoded_picture_hash, (CodedBitstreamContext *ctx,
- RWContext *rw,
- H266RawSEIDecodedPictureHash *current,
- SEIMessageState *unused))
-{
- int err, c_idx, i;
-
- HEADER("Decoded Picture Hash");
-
- u(8, dph_sei_hash_type, 0, 2);
- flag(dph_sei_single_component_flag);
- ub(7, dph_sei_reserved_zero_7bits);
-
- for (c_idx = 0; c_idx < (current->dph_sei_single_component_flag ? 1 : 3);
- c_idx++) {
- if (current->dph_sei_hash_type == 0) {
- for (i = 0; i < 16; i++)
- us(8, dph_sei_picture_md5[c_idx][i], 0x00, 0xff, 2, c_idx, i);
- } else if (current->dph_sei_hash_type == 1) {
- us(16, dph_sei_picture_crc[c_idx], 0x0000, 0xffff, 1, c_idx);
- } else if (current->dph_sei_hash_type == 2) {
- us(32, dph_sei_picture_checksum[c_idx], 0x00000000, 0xffffffff, 1,
- c_idx);
- }
- }
- return 0;
-}
-
static int FUNC(sei) (CodedBitstreamContext *ctx, RWContext *rw,
H266RawSEI *current, int prefix)
{
diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h
index cc7d6f797d..15ef3415ab 100644
--- a/libavcodec/cbs_sei.h
+++ b/libavcodec/cbs_sei.h
@@ -63,6 +63,16 @@ typedef struct SEIRawFramePackingArrangement {
uint8_t fp_upsampled_aspect_ratio_flag;
} SEIRawFramePackingArrangement;
+typedef struct SEIRawDecodedPictureHash {
+ uint8_t dph_sei_hash_type;
+ uint8_t dph_sei_single_component_flag;
+ uint8_t dph_sei_picture_md5[3][16];
+ uint16_t dph_sei_picture_crc[3];
+ uint32_t dph_sei_picture_checksum[3];
+
+ uint8_t dph_sei_reserved_zero_7bits;
+} SEIRawDecodedPictureHash;
+
typedef struct SEIRawMasteringDisplayColourVolume {
uint16_t display_primaries_x[3];
uint16_t display_primaries_y[3];
diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c
index 03ef9ab473..0205bb47aa 100644
--- a/libavcodec/cbs_sei_syntax_template.c
+++ b/libavcodec/cbs_sei_syntax_template.c
@@ -128,6 +128,34 @@ SEI_FUNC(frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
+SEI_FUNC(decoded_picture_hash, (CodedBitstreamContext *ctx,
+ RWContext *rw,
+ SEIRawDecodedPictureHash *current,
+ SEIMessageState *unused))
+{
+ int err, c_idx, i;
+
+ HEADER("Decoded Picture Hash");
+
+ u(8, dph_sei_hash_type, 0, 2);
+ flag(dph_sei_single_component_flag);
+ ub(7, dph_sei_reserved_zero_7bits);
+
+ for (c_idx = 0; c_idx < (current->dph_sei_single_component_flag ? 1 : 3);
+ c_idx++) {
+ if (current->dph_sei_hash_type == 0) {
+ for (i = 0; i < 16; i++)
+ us(8, dph_sei_picture_md5[c_idx][i], 0x00, 0xff, 2, c_idx, i);
+ } else if (current->dph_sei_hash_type == 1) {
+ us(16, dph_sei_picture_crc[c_idx], 0x0000, 0xffff, 1, c_idx);
+ } else if (current->dph_sei_hash_type == 2) {
+ us(32, dph_sei_picture_checksum[c_idx], 0x00000000, 0xffffffff, 1,
+ c_idx);
+ }
+ }
+ return 0;
+}
+
SEI_FUNC(mastering_display_colour_volume,
(CodedBitstreamContext *ctx, RWContext *rw,
SEIRawMasteringDisplayColourVolume *current,
--
2.45.2
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing
2024-06-26 23:12 [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
2024-06-26 23:12 ` [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h266: move decoded_picture_hash to CBS SEI James Almer
@ 2024-06-28 14:51 ` James Almer
1 sibling, 0 replies; 3+ messages in thread
From: James Almer @ 2024-06-28 14:51 UTC (permalink / raw)
To: ffmpeg-devel
On 6/26/2024 8:12 PM, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> libavcodec/cbs_h264.h | 20 ++++++++++++++++
> libavcodec/cbs_h2645.c | 22 +++++++++++++----
> libavcodec/cbs_h264_syntax_template.c | 34 +++++++++++++++++++++++++++
> libavcodec/cbs_sei.h | 20 ++++++++++++++++
> libavcodec/cbs_sei_syntax_template.c | 34 +++++++++++++++++++++++++++
> 5 files changed, 125 insertions(+), 5 deletions(-)
Will apply set.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-06-28 14:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-26 23:12 [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
2024-06-26 23:12 ` [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h266: move decoded_picture_hash to CBS SEI James Almer
2024-06-28 14:51 ` [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing James Almer
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git