On 2/21/2021 4:51 PM, Mark Thompson wrote:
---
  libavcodec/cbs_h264.h                 | 23 ++++++++++++++++
  libavcodec/cbs_h2645.c                |  6 +++++
  libavcodec/cbs_h264_syntax_template.c | 39 +++++++++++++++++++++++++++
  3 files changed, 68 insertions(+)

diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h
index 9eb97eae24..1466ed12fa 100644
--- a/libavcodec/cbs_h264.h
+++ b/libavcodec/cbs_h264.h
@@ -282,6 +282,29 @@ typedef struct H264RawSEIRecoveryPoint {
      uint8_t changing_slice_group_idc;
  } H264RawSEIRecoveryPoint;
+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;
+    uint8_t  frame_packing_arrangement_reserved_byte;
+    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 6005d46e0d..0c591871d4 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -1570,6 +1570,12 @@ static const SEIMessageTypeDescriptor 
cbs_sei_h264_types[] = {
          sizeof(H264RawSEIRecoveryPoint),
          SEI_MESSAGE_RW(h264, sei_recovery_point),
      },
+    {
+        SEI_TYPE_FRAME_PACKING_ARRANGEMENT,
+        1, 0,
+        sizeof(H264RawSEIFramePackingArrangement),
+        SEI_MESSAGE_RW(h264, sei_frame_packing_arrangement),
+    },
      {
          SEI_TYPE_DISPLAY_ORIENTATION,
          1, 0,
diff --git a/libavcodec/cbs_h264_syntax_template.c 
b/libavcodec/cbs_h264_syntax_template.c
index 9587f33985..e03d41e47a 100644
--- a/libavcodec/cbs_h264_syntax_template.c
+++ b/libavcodec/cbs_h264_syntax_template.c
@@ -719,6 +719,45 @@ static int FUNC(sei_recovery_point)(CodedBitstreamContext 
*ctx, RWContext *rw,
      return 0;
  }
+
+
+static int 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, UINT32_MAX - 1);
+    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) {

nit: maybe H264_SEI_FPA_TYPE_INTERLEAVE_TEMPORAL instead of 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);
+        }
+        u(8, frame_packing_arrangement_reserved_byte, 0, 0);
+        ue(frame_packing_arrangement_repetition_period, 0, 16384);
+    }
+
+    flag(frame_packing_arrangement_extension_flag);
+
+    return 0;
+}
+
  static int FUNC(sei_display_orientation)(CodedBitstreamContext *ctx, 
RWContext *rw,
                                           H264RawSEIDisplayOrientation 
*current,
                                           SEIMessageState *sei)


LGTM.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to