[FFmpeg-devel,v2,04/11] cbs: Add macros to support defining unit type tables

Submitted by Mark Thompson on May 20, 2019, 11:02 p.m.

Details

Message ID 20190520230224.19221-4-sw@jkqxz.net
State New
Headers show

Commit Message

Mark Thompson May 20, 2019, 11:02 p.m.
---
 libavcodec/cbs_internal.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Andreas Rheinhardt May 22, 2019, 10:24 a.m.
Mark Thompson:
> ---
>  libavcodec/cbs_internal.h | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h
> index 06a8f9b979..439fa7934b 100644
> --- a/libavcodec/cbs_internal.h
> +++ b/libavcodec/cbs_internal.h
> @@ -140,6 +140,27 @@ int ff_cbs_write_signed(CodedBitstreamContext *ctx, PutBitContext *pbc,
>  #define MIN_INT_BITS(length) (-(INT64_C(1) << ((length) - 1)))
>  
>  
> +#define CBS_UNIT_TYPE_POD(type, structure) { \
> +        .unit_type    = type, \
> +        .content_type = CBS_CONTENT_TYPE_POD, \
> +        .content_size = sizeof(structure), \
> +    }
> +#define CBS_UNIT_TYPE_INTERNAL_REFS(type, structure, nb_offsets, offsets) { \
> +        .unit_type      = type, \
> +        .content_type   = CBS_CONTENT_TYPE_INTERNAL_REFS, \
> +        .content_size   = sizeof(structure), \
> +        .nb_ref_offsets = nb_offsets, \
> +        .ref_offsets    = offsets, \
> +    }

Wouldn't it be appropriate to also add (and use) a macro for the
common case of a structure with exactly one internal ref? Something like
#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, offset) \
    CBS_UNIT_TYPE_INTERNAL_REFS(type, structure, 1, {
offsetof(structure, offset) })

> +#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) { \
> +        .unit_type     = type, \
> +        .content_type  = CBS_CONTENT_TYPE_COMPLEX, \
> +        .content_size  = sizeof(structure), \
> +        .content_free  = free_func, \
> +    }
> +#define CBS_UNIT_TYPE_END_OF_LIST { CBS_INVALID_UNIT_TYPE }
> +
> +
>  extern const CodedBitstreamType ff_cbs_type_av1;
>  extern const CodedBitstreamType ff_cbs_type_h264;
>  extern const CodedBitstreamType ff_cbs_type_h265;
>

Patch hide | download patch | download mbox

diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h
index 06a8f9b979..439fa7934b 100644
--- a/libavcodec/cbs_internal.h
+++ b/libavcodec/cbs_internal.h
@@ -140,6 +140,27 @@  int ff_cbs_write_signed(CodedBitstreamContext *ctx, PutBitContext *pbc,
 #define MIN_INT_BITS(length) (-(INT64_C(1) << ((length) - 1)))
 
 
+#define CBS_UNIT_TYPE_POD(type, structure) { \
+        .unit_type    = type, \
+        .content_type = CBS_CONTENT_TYPE_POD, \
+        .content_size = sizeof(structure), \
+    }
+#define CBS_UNIT_TYPE_INTERNAL_REFS(type, structure, nb_offsets, offsets) { \
+        .unit_type      = type, \
+        .content_type   = CBS_CONTENT_TYPE_INTERNAL_REFS, \
+        .content_size   = sizeof(structure), \
+        .nb_ref_offsets = nb_offsets, \
+        .ref_offsets    = offsets, \
+    }
+#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) { \
+        .unit_type     = type, \
+        .content_type  = CBS_CONTENT_TYPE_COMPLEX, \
+        .content_size  = sizeof(structure), \
+        .content_free  = free_func, \
+    }
+#define CBS_UNIT_TYPE_END_OF_LIST { CBS_INVALID_UNIT_TYPE }
+
+
 extern const CodedBitstreamType ff_cbs_type_av1;
 extern const CodedBitstreamType ff_cbs_type_h264;
 extern const CodedBitstreamType ff_cbs_type_h265;