On 5/15/2017 6:51 PM, Mark Thompson wrote:
> This avoids confusion with equivalent H.265 SEI values when both are
> being used at the same time.
> ---
> On 15/05/17 14:22, James Almer wrote:
>> On 5/15/2017 4:47 AM, Mark Thompson wrote:
>>> On 15/05/17 02:25, James Almer wrote:
>>>> On 5/14/2017 6:24 PM, Mark Thompson wrote:
>>>>> Also add a namespace prefix.
>>>>> ---
>>>>>  libavcodec/h264.h              | 12 ++++++++++++
>>>>>  libavcodec/h264_sei.c          | 14 +++++++-------
>>>>>  libavcodec/h264_sei.h          | 14 +-------------
>>>>>  libavcodec/vaapi_encode_h264.c |  6 +++---
>>>>>  4 files changed, 23 insertions(+), 23 deletions(-)
>>>>>
>>>>> diff --git a/libavcodec/h264.h b/libavcodec/h264.h
>>>>> index eb3805c06..ae6b3577d 100644
>>>>> --- a/libavcodec/h264.h
>>>>> +++ b/libavcodec/h264.h
>>>>> @@ -44,4 +44,16 @@ enum {
>>>>>      H264_NAL_AUXILIARY_SLICE = 19,
>>>>>  };
>>>>>  
>>>>> +/* SEI message types */
>>>>> +enum {
>>>>> +    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
>>>>> +};
>>>>
>>>> Why? They were in a standalone SEI specific header, so why move them
>>>> here? You're not untangling anything by moving them here, and saving one
>>>> include line per file doesn't seem like a good reason to me.
>>>
>>> It gets included in cbs_h2645.c, which will contain H.265 SEI stuff as well 
>>> (that part isn't yet done).  Only the SEI types are wanted, not anything 
>>> else in the file.
>>>
>>> Alternative approach would be to add the namespace prefix to everything 
>>> else in h264_sei.h which doesn't currently have it (actually looking, all 
>>> that is is the pic_struct enum immediately below) - would you prefer that?
>>
>> That'd be better, yes. Thanks.
> 
> How about this, then?
> 
> (Replaces previous 2/14.)
> 
> Thanks,
> 
> - Mark

Yeah, this is better. Can go in without the rest of the patchset (Same
as 3/14) IMO.

> 
> 
>  libavcodec/h264_parser.c       | 26 +++++++++++++-------------
>  libavcodec/h264_sei.c          | 16 ++++++++--------
>  libavcodec/h264_sei.h          | 39 ++++++++++++++++++++-------------------
>  libavcodec/h264_slice.c        | 24 ++++++++++++------------
>  libavcodec/vaapi_encode_h264.c |  6 +++---
>  5 files changed, 56 insertions(+), 55 deletions(-)
> 
> diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
> index 22153bd4e..0bb78e09c 100644
> --- a/libavcodec/h264_parser.c
> +++ b/libavcodec/h264_parser.c
> @@ -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:
> diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
> index 17f89cec6..3ca2b7a6c 100644
> --- a/libavcodec/h264_sei.c
> +++ b/libavcodec/h264_sei.c
> @@ -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:
> diff --git a/libavcodec/h264_sei.h b/libavcodec/h264_sei.h
> index 8815aa389..ce9768ec3 100644
> --- a/libavcodec/h264_sei.h
> +++ b/libavcodec/h264_sei.h
> @@ -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.
> diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
> index 427cbe618..95e366605 100644
> --- a/libavcodec/h264_slice.c
> +++ b/libavcodec/h264_slice.c
> @@ -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;
> diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
> index 0c3ac3441..7583a20c1 100644
> --- a/libavcodec/vaapi_encode_h264.c
> +++ b/libavcodec/vaapi_encode_h264.c
> @@ -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;
> 

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to