[FFmpeg-devel] [PATCH 2/5] avcodec/cbs_h2645: add helper macros for signed values

Mark Thompson sw at jkqxz.net
Wed Apr 17 01:57:15 EEST 2019


On 15/04/2019 22:17, James Almer wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavcodec/cbs_h2645.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
> index e74f8dce81..a205293b3c 100644
> --- a/libavcodec/cbs_h2645.c
> +++ b/libavcodec/cbs_h2645.c
> @@ -255,6 +255,8 @@ static int cbs_write_se_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc,
>  #define flag(name) u(1, name, 0, 1)
>  #define ue(name, range_min, range_max) \
>          xue(name, current->name, range_min, range_max, 0)
> +#define i(width, name, range_min, range_max) \
> +        xi(width, name, current->name, range_min, range_max, 0)

I know it's right, but defining "i" as a macro feels like a pretty terrible idea in C :P

>  #define se(name, range_min, range_max) \
>          xse(name, current->name, range_min, range_max, 0)
>  
> @@ -264,6 +266,8 @@ static int cbs_write_se_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc,
>          xu(1, name, current->name, 0, 1, subs, __VA_ARGS__)
>  #define ues(name, range_min, range_max, subs, ...) \
>          xue(name, current->name, range_min, range_max, subs, __VA_ARGS__)
> +#define is(width, name, range_min, range_max, subs, ...) \
> +        xi(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)
>  #define ses(name, range_min, range_max, subs, ...) \
>          xse(name, current->name, range_min, range_max, subs, __VA_ARGS__)
>  
> @@ -291,6 +295,13 @@ static int cbs_write_se_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc,
>                                   &value, range_min, range_max)); \
>          var = value; \
>      } while (0)
> +#define xi(width, name, var, range_min, range_max, subs, ...) do { \
> +        int32_t value = range_min; \
> +        CHECK(ff_cbs_read_signed(ctx, rw, width, #name, \
> +                                 SUBSCRIPTS(subs, __VA_ARGS__), \
> +                                 &value, range_min, range_max)); \
> +        var = value; \
> +    } while (0)
>  #define xse(name, var, range_min, range_max, subs, ...) do { \
>          int32_t value = range_min; \
>          CHECK(cbs_read_se_golomb(ctx, rw, #name, \
> @@ -338,6 +349,7 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
>  #undef READWRITE
>  #undef RWContext
>  #undef xu
> +#undef xi
>  #undef xue
>  #undef xse
>  #undef infer
> @@ -362,6 +374,12 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
>                                    SUBSCRIPTS(subs, __VA_ARGS__), \
>                                    value, range_min, range_max)); \
>      } while (0)
> +#define xi(width, name, var, range_min, range_max, subs, ...) do { \
> +        int32_t value = var; \
> +        CHECK(ff_cbs_write_signed(ctx, rw, width, #name, \
> +                                  SUBSCRIPTS(subs, __VA_ARGS__), \
> +                                  value, range_min, range_max)); \
> +    } while (0)
>  #define xse(name, var, range_min, range_max, subs, ...) do { \
>          int32_t value = var; \
>          CHECK(cbs_write_se_golomb(ctx, rw, #name, \
> @@ -402,9 +420,11 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
>  #undef READWRITE
>  #undef RWContext
>  #undef xu
> +#undef xi
>  #undef xue
>  #undef xse
>  #undef u
> +#undef i
>  #undef flag
>  #undef ue
>  #undef se
> 

LGTM.

Thanks,

- Mark


More information about the ffmpeg-devel mailing list