Unified · Split
| @@ -2323,6 +2323,12 @@ static const SEIMessageTypeDescriptor cbs_sei_h274_types[] = { · 2322 unmodified lines | |||
| 2323 | sizeof(SEIRawDisplayOrientation), | 2323 | sizeof(SEIRawDisplayOrientation), |
| 2324 | SEI_MESSAGE_RW(sei, display_orientation) | 2324 | SEI_MESSAGE_RW(sei, display_orientation) |
| 2325 | }, | 2325 | }, |
| 2326 | { | ||
| 2327 | SEI_TYPE_FRAME_FIELD_INFO, | ||
| 2328 | 1, 0, | ||
| 2329 | sizeof(SEIRawFrameFieldInformation), | ||
| 2330 | SEI_MESSAGE_RW(sei, frame_field_information) | ||
| 2331 | }, | ||
| 2326 | SEI_MESSAGE_TYPE_END, | 2332 | SEI_MESSAGE_TYPE_END, |
| 2327 | }; | 2333 | }; |
| 2328 | 2334 | ||
| @@ -125,6 +125,18 @@ typedef struct SEIRawDisplayOrientation { · 124 unmodified lines | |||
| 125 | uint8_t display_orientation_reserved_zero_3bits; | 125 | uint8_t display_orientation_reserved_zero_3bits; |
| 126 | } SEIRawDisplayOrientation; | 126 | } SEIRawDisplayOrientation; |
| 127 | 127 | ||
| 128 | typedef struct SEIRawFrameFieldInformation { | ||
| 129 | uint8_t ffi_field_pic_flag; | ||
| 130 | uint8_t ffi_bottom_field_flag; | ||
| 131 | uint8_t ffi_pairing_indicated_flag; | ||
| 132 | uint8_t ffi_paired_with_next_field_flag; | ||
| 133 | uint8_t ffi_display_fields_from_frame_flag; | ||
| 134 | uint8_t ffi_top_field_first_flag; | ||
| 135 | uint8_t ffi_display_elemental_periods_minus1; | ||
| 136 | uint8_t ffi_source_scan_type; | ||
| 137 | uint8_t ffi_duplicate_flag; | ||
| 138 | } SEIRawFrameFieldInformation; | ||
| 139 | |||
| 128 | typedef struct SEIRawMessage { | 140 | typedef struct SEIRawMessage { |
| 129 | uint32_t payload_type; | 141 | uint32_t payload_type; |
| 130 | uint32_t payload_size; | 142 | uint32_t payload_size; |
| @@ -295,6 +295,32 @@ SEI_FUNC(display_orientation, (CodedBitstreamContext *ctx, RWContext *rw, · 294 unmodified lines | |||
| 295 | return 0; | 295 | return 0; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | SEI_FUNC(frame_field_information, (CodedBitstreamContext *ctx, RWContext *rw, | ||
| 299 | SEIRawFrameFieldInformation *current, | ||
| 300 | SEIMessageState *state)) | ||
| 301 | { | ||
| 302 | int err; | ||
| 303 | |||
| 304 | HEADER("Frame-field information"); | ||
| 305 | |||
| 306 | flag(ffi_field_pic_flag); | ||
| 307 | if (current->ffi_field_pic_flag) { | ||
| 308 | flag(ffi_bottom_field_flag); | ||
| 309 | flag(ffi_pairing_indicated_flag); | ||
| 310 | if (current->ffi_pairing_indicated_flag) | ||
| 311 | flag(ffi_paired_with_next_field_flag); | ||
| 312 | } else { | ||
| 313 | flag(ffi_display_fields_from_frame_flag); | ||
| 314 | if (current->ffi_display_fields_from_frame_flag) | ||
| 315 | flag(ffi_top_field_first_flag); | ||
| 316 | u(8, ffi_display_elemental_periods_minus1, 0, 0xff); | ||
| 317 | } | ||
| 318 | u(2, ffi_source_scan_type, 0, 3); | ||
| 319 | flag(ffi_duplicate_flag); | ||
| 320 | |||
| 321 | return 0; | ||
| 322 | } | ||
| 323 | |||
| 298 | static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw, | 324 | static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw, |
| 299 | SEIRawMessage *current) | 325 | SEIRawMessage *current) |
| 300 | { | 326 | { |