-M2MENC(mpeg4,"MPEG4", AV_CODEC_ID_MPEG4);
-M2MENC(h263, "H.263", AV_CODEC_ID_H263);
-M2MENC(h264, "H.264", AV_CODEC_ID_H264);
-M2MENC(hevc, "HEVC", AV_CODEC_ID_HEVC);
-M2MENC(vp8, "VP8", AV_CODEC_ID_VP8);
+#define M2MENC_CLASS(NAME, OPTIONS_NAME) \
+ static const AVClass v4l2_m2m_ ## NAME ## _enc_class = { \
+ .class_name = #NAME "_v4l2m2m_encoder", \
+ .item_name = av_default_item_name, \
+ .option = OPTIONS_NAME, \
+ .version = LIBAVUTIL_VERSION_INT, \
+ };
+
+#define M2MENC(NAME, LONGNAME, OPTIONS_NAME, CODEC) \
+ M2MENC_CLASS(NAME, OPTIONS_NAME) \
+ const AVCodec ff_ ## NAME ## _v4l2m2m_encoder = { \
+ .name = #NAME "_v4l2m2m" , \
+ .long_name = NULL_IF_CONFIG_SMALL("V4L2 mem2mem " LONGNAME " encoder wrapper"), \
+ .type = AVMEDIA_TYPE_VIDEO, \
+ .id = CODEC , \
+ .priv_data_size = sizeof(V4L2m2mPriv), \
+ .priv_class = &v4l2_m2m_ ## NAME ##_enc_class, \
+ .init = v4l2_encode_init, \
+ .receive_packet = v4l2_receive_packet, \
+ .close = v4l2_encode_close, \
+ .defaults = v4l2_m2m_defaults, \
+ .capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, \
+ .wrapper_name = "v4l2m2m", \
+ }
+
+M2MENC(mpeg4,"MPEG4", mpeg4_options, AV_CODEC_ID_MPEG4);
+M2MENC(h263, "H.263", options, AV_CODEC_ID_H263);
+M2MENC(h264, "H.264", options, AV_CODEC_ID_H264);
+M2MENC(hevc, "HEVC", options, AV_CODEC_ID_HEVC);
+M2MENC(vp8, "VP8", options, AV_CODEC_ID_VP8);