This avoids confusion with equivalent H.265 SEI values when both are being used at the same time.tags/n4.0
| @@ -404,23 +404,23 @@ static inline int parse_nal_units(AVCodecParserContext *s, | |||
| if (sps->pic_struct_present_flag && p->sei.picture_timing.present) { | |||
| switch (p->sei.picture_timing.pic_struct) { | |||
| case SEI_PIC_STRUCT_TOP_FIELD: | |||
| case SEI_PIC_STRUCT_BOTTOM_FIELD: | |||
| case H264_SEI_PIC_STRUCT_TOP_FIELD: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_FIELD: | |||
| s->repeat_pict = 0; | |||
| break; | |||
| case SEI_PIC_STRUCT_FRAME: | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_FRAME: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| s->repeat_pict = 1; | |||
| break; | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| s->repeat_pict = 2; | |||
| break; | |||
| case SEI_PIC_STRUCT_FRAME_DOUBLING: | |||
| case H264_SEI_PIC_STRUCT_FRAME_DOUBLING: | |||
| s->repeat_pict = 3; | |||
| break; | |||
| case SEI_PIC_STRUCT_FRAME_TRIPLING: | |||
| case H264_SEI_PIC_STRUCT_FRAME_TRIPLING: | |||
| s->repeat_pict = 5; | |||
| break; | |||
| default: | |||
| @@ -435,12 +435,12 @@ static inline int parse_nal_units(AVCodecParserContext *s, | |||
| s->picture_structure = AV_PICTURE_STRUCTURE_FRAME; | |||
| if (sps->pic_struct_present_flag && p->sei.picture_timing.present) { | |||
| switch (p->sei.picture_timing.pic_struct) { | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| s->field_order = AV_FIELD_TT; | |||
| break; | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| s->field_order = AV_FIELD_BB; | |||
| break; | |||
| default: | |||
| @@ -71,7 +71,7 @@ static int decode_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, | |||
| h->pic_struct = get_bits(gb, 4); | |||
| h->ct_type = 0; | |||
| if (h->pic_struct > SEI_PIC_STRUCT_FRAME_TRIPLING) | |||
| if (h->pic_struct > H264_SEI_PIC_STRUCT_FRAME_TRIPLING) | |||
| return AVERROR_INVALIDDATA; | |||
| num_clock_ts = sei_num_clock_ts_table[h->pic_struct]; | |||
| @@ -375,25 +375,25 @@ int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, | |||
| } | |||
| switch (type) { | |||
| case SEI_TYPE_PIC_TIMING: // Picture timing SEI | |||
| case H264_SEI_TYPE_PIC_TIMING: // Picture timing SEI | |||
| ret = decode_picture_timing(&h->picture_timing, gb, ps->sps, logctx); | |||
| break; | |||
| case SEI_TYPE_USER_DATA_REGISTERED: | |||
| case H264_SEI_TYPE_USER_DATA_REGISTERED: | |||
| ret = decode_registered_user_data(h, gb, logctx, size); | |||
| break; | |||
| case SEI_TYPE_USER_DATA_UNREGISTERED: | |||
| case H264_SEI_TYPE_USER_DATA_UNREGISTERED: | |||
| ret = decode_unregistered_user_data(&h->unregistered, gb, logctx, size); | |||
| break; | |||
| case SEI_TYPE_RECOVERY_POINT: | |||
| case H264_SEI_TYPE_RECOVERY_POINT: | |||
| ret = decode_recovery_point(&h->recovery_point, gb); | |||
| break; | |||
| case SEI_TYPE_BUFFERING_PERIOD: | |||
| case H264_SEI_TYPE_BUFFERING_PERIOD: | |||
| ret = decode_buffering_period(&h->buffering_period, gb, ps, logctx); | |||
| break; | |||
| case SEI_TYPE_FRAME_PACKING: | |||
| case H264_SEI_TYPE_FRAME_PACKING: | |||
| ret = decode_frame_packing_arrangement(&h->frame_packing, gb); | |||
| break; | |||
| case SEI_TYPE_DISPLAY_ORIENTATION: | |||
| case H264_SEI_TYPE_DISPLAY_ORIENTATION: | |||
| ret = decode_display_orientation(&h->display_orientation, gb); | |||
| break; | |||
| default: | |||
| @@ -25,33 +25,34 @@ | |||
| * SEI message types | |||
| */ | |||
| typedef enum { | |||
| SEI_TYPE_BUFFERING_PERIOD = 0, ///< buffering period (H.264, D.1.1) | |||
| SEI_TYPE_PIC_TIMING = 1, ///< picture timing | |||
| SEI_TYPE_USER_DATA_REGISTERED = 4, ///< registered user data as specified by Rec. ITU-T T.35 | |||
| SEI_TYPE_USER_DATA_UNREGISTERED = 5, ///< unregistered user data | |||
| SEI_TYPE_RECOVERY_POINT = 6, ///< recovery point (frame # to decoder sync) | |||
| SEI_TYPE_FRAME_PACKING = 45, ///< frame packing arrangement | |||
| SEI_TYPE_DISPLAY_ORIENTATION = 47, ///< display orientation | |||
| } SEI_Type; | |||
| H264_SEI_TYPE_BUFFERING_PERIOD = 0, ///< buffering period (H.264, D.1.1) | |||
| H264_SEI_TYPE_PIC_TIMING = 1, ///< picture timing | |||
| H264_SEI_TYPE_FILLER_PAYLOAD = 3, ///< filler data | |||
| H264_SEI_TYPE_USER_DATA_REGISTERED = 4, ///< registered user data as specified by Rec. ITU-T T.35 | |||
| H264_SEI_TYPE_USER_DATA_UNREGISTERED = 5, ///< unregistered user data | |||
| H264_SEI_TYPE_RECOVERY_POINT = 6, ///< recovery point (frame # to decoder sync) | |||
| H264_SEI_TYPE_FRAME_PACKING = 45, ///< frame packing arrangement | |||
| H264_SEI_TYPE_DISPLAY_ORIENTATION = 47, ///< display orientation | |||
| } H264_SEI_Type; | |||
| /** | |||
| * pic_struct in picture timing SEI message | |||
| */ | |||
| typedef enum { | |||
| SEI_PIC_STRUCT_FRAME = 0, ///< 0: %frame | |||
| SEI_PIC_STRUCT_TOP_FIELD = 1, ///< 1: top field | |||
| SEI_PIC_STRUCT_BOTTOM_FIELD = 2, ///< 2: bottom field | |||
| SEI_PIC_STRUCT_TOP_BOTTOM = 3, ///< 3: top field, bottom field, in that order | |||
| SEI_PIC_STRUCT_BOTTOM_TOP = 4, ///< 4: bottom field, top field, in that order | |||
| SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, ///< 5: top field, bottom field, top field repeated, in that order | |||
| SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, ///< 6: bottom field, top field, bottom field repeated, in that order | |||
| SEI_PIC_STRUCT_FRAME_DOUBLING = 7, ///< 7: %frame doubling | |||
| SEI_PIC_STRUCT_FRAME_TRIPLING = 8 ///< 8: %frame tripling | |||
| } SEI_PicStructType; | |||
| H264_SEI_PIC_STRUCT_FRAME = 0, ///< 0: %frame | |||
| H264_SEI_PIC_STRUCT_TOP_FIELD = 1, ///< 1: top field | |||
| H264_SEI_PIC_STRUCT_BOTTOM_FIELD = 2, ///< 2: bottom field | |||
| H264_SEI_PIC_STRUCT_TOP_BOTTOM = 3, ///< 3: top field, bottom field, in that order | |||
| H264_SEI_PIC_STRUCT_BOTTOM_TOP = 4, ///< 4: bottom field, top field, in that order | |||
| H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, ///< 5: top field, bottom field, top field repeated, in that order | |||
| H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, ///< 6: bottom field, top field, bottom field repeated, in that order | |||
| H264_SEI_PIC_STRUCT_FRAME_DOUBLING = 7, ///< 7: %frame doubling | |||
| H264_SEI_PIC_STRUCT_FRAME_TRIPLING = 8 ///< 8: %frame tripling | |||
| } H264_SEI_PicStructType; | |||
| typedef struct H264SEIPictureTiming { | |||
| int present; | |||
| SEI_PicStructType pic_struct; | |||
| H264_SEI_PicStructType pic_struct; | |||
| /** | |||
| * Bit set of clock types for fields/frames in picture timing SEI message. | |||
| @@ -1007,37 +1007,37 @@ static int h264_export_frame_props(H264Context *h) | |||
| if (sps->pic_struct_present_flag && h->sei.picture_timing.present) { | |||
| H264SEIPictureTiming *pt = &h->sei.picture_timing; | |||
| switch (pt->pic_struct) { | |||
| case SEI_PIC_STRUCT_FRAME: | |||
| case H264_SEI_PIC_STRUCT_FRAME: | |||
| break; | |||
| case SEI_PIC_STRUCT_TOP_FIELD: | |||
| case SEI_PIC_STRUCT_BOTTOM_FIELD: | |||
| case H264_SEI_PIC_STRUCT_TOP_FIELD: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_FIELD: | |||
| cur->f->interlaced_frame = 1; | |||
| break; | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP: | |||
| if (FIELD_OR_MBAFF_PICTURE(h)) | |||
| cur->f->interlaced_frame = 1; | |||
| else | |||
| // try to flag soft telecine progressive | |||
| cur->f->interlaced_frame = h->prev_interlaced_frame; | |||
| break; | |||
| case SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| case H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP: | |||
| case H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: | |||
| /* Signal the possibility of telecined film externally | |||
| * (pic_struct 5,6). From these hints, let the applications | |||
| * decide if they apply deinterlacing. */ | |||
| cur->f->repeat_pict = 1; | |||
| break; | |||
| case SEI_PIC_STRUCT_FRAME_DOUBLING: | |||
| case H264_SEI_PIC_STRUCT_FRAME_DOUBLING: | |||
| cur->f->repeat_pict = 2; | |||
| break; | |||
| case SEI_PIC_STRUCT_FRAME_TRIPLING: | |||
| case H264_SEI_PIC_STRUCT_FRAME_TRIPLING: | |||
| cur->f->repeat_pict = 4; | |||
| break; | |||
| } | |||
| if ((pt->ct_type & 3) && | |||
| pt->pic_struct <= SEI_PIC_STRUCT_BOTTOM_TOP) | |||
| pt->pic_struct <= H264_SEI_PIC_STRUCT_BOTTOM_TOP) | |||
| cur->f->interlaced_frame = (pt->ct_type & (1 << 1)) != 0; | |||
| } else { | |||
| /* Derive interlacing flag from used decoding process. */ | |||
| @@ -1053,8 +1053,8 @@ static int h264_export_frame_props(H264Context *h) | |||
| (sps->pic_struct_present_flag && h->sei.picture_timing.present)) { | |||
| /* Use picture timing SEI information. Even if it is a | |||
| * information of a past frame, better than nothing. */ | |||
| if (h->sei.picture_timing.pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM || | |||
| h->sei.picture_timing.pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM_TOP) | |||
| if (h->sei.picture_timing.pic_struct == H264_SEI_PIC_STRUCT_TOP_BOTTOM || | |||
| h->sei.picture_timing.pic_struct == H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP) | |||
| cur->f->top_field_first = 1; | |||
| else | |||
| cur->f->top_field_first = 0; | |||
| @@ -650,18 +650,18 @@ static void vaapi_encode_h264_write_sei(PutBitContext *pbc, | |||
| for (payload_type = 0; payload_type < 64; payload_type++) { | |||
| switch (payload_type) { | |||
| case SEI_TYPE_BUFFERING_PERIOD: | |||
| case H264_SEI_TYPE_BUFFERING_PERIOD: | |||
| if (!priv->send_timing_sei || | |||
| pic->type != PICTURE_TYPE_IDR) | |||
| continue; | |||
| write_payload = &vaapi_encode_h264_write_buffering_period; | |||
| break; | |||
| case SEI_TYPE_PIC_TIMING: | |||
| case H264_SEI_TYPE_PIC_TIMING: | |||
| if (!priv->send_timing_sei) | |||
| continue; | |||
| write_payload = &vaapi_encode_h264_write_pic_timing; | |||
| break; | |||
| case SEI_TYPE_USER_DATA_UNREGISTERED: | |||
| case H264_SEI_TYPE_USER_DATA_UNREGISTERED: | |||
| if (pic->encode_order != 0) | |||
| continue; | |||
| write_payload = &vaapi_encode_h264_write_identifier; | |||