[FFmpeg-devel] [PATCH] avcodec: v4l2_m2m: add MJPEG enc/dec support
Maxime Jourdan
maxi.jourdan at wanadoo.fr
Sun Aug 12 17:40:35 EEST 2018
Tested on an Odroid-C2 with a V4L2 M2M MJPEG decoder.
Signed-off-by: Maxime Jourdan <maxi.jourdan at wanadoo.fr>
---
configure | 3 +++
libavcodec/Makefile | 2 ++
libavcodec/allcodecs.c | 2 ++
libavcodec/v4l2_m2m_dec.c | 1 +
libavcodec/v4l2_m2m_enc.c | 1 +
5 files changed, 9 insertions(+)
diff --git a/configure b/configure
index e718c1531c..5a5ba1ebcf 100755
--- a/configure
+++ b/configure
@@ -2939,6 +2939,8 @@ hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
+mjpeg_v4l2m2m_decoder_deps="v4l2_m2m mjpeg_v4l2_m2m"
+mjpeg_v4l2m2m_encoder_deps="v4l2_m2m mjpeg_v4l2_m2m"
mjpeg_cuvid_decoder_deps="cuvid"
mjpeg_qsv_encoder_deps="libmfx"
mjpeg_qsv_encoder_select="qsvenc"
@@ -6252,6 +6254,7 @@ check_header linux/videodev2.h
test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
+check_cc mjpeg_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MJPEG;"
check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 6e40702947..cd975739ef 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -415,7 +415,9 @@ OBJS-$(CONFIG_METASOUND_DECODER) += metasound.o metasound_data.o \
twinvq.o
OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o
OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o
+OBJS-$(CONFIG_MJPEG_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o
+OBJS-$(CONFIG_MJPEG_V4L2M2M_ENCODER) += v4l2_m2m_enc.o
OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpegenc_common.o \
mjpegenc_huffman.o
OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index ab3ec04251..af4870a54d 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -173,7 +173,9 @@ extern AVCodec ff_magicyuv_encoder;
extern AVCodec ff_magicyuv_decoder;
extern AVCodec ff_mdec_decoder;
extern AVCodec ff_mimic_decoder;
+extern AVCodec ff_mjpeg_v4l2m2m_encoder;
extern AVCodec ff_mjpeg_encoder;
+extern AVCodec ff_mjpeg_v4l2m2m_decoder;
extern AVCodec ff_mjpeg_decoder;
extern AVCodec ff_mjpegb_decoder;
extern AVCodec ff_mmvideo_decoder;
diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c
index a4e2f02596..80a09f7a43 100644
--- a/libavcodec/v4l2_m2m_dec.c
+++ b/libavcodec/v4l2_m2m_dec.c
@@ -231,6 +231,7 @@ AVCodec ff_ ## NAME ## _v4l2m2m_decoder = { \
M2MDEC(h264, "H.264", AV_CODEC_ID_H264, "h264_mp4toannexb");
M2MDEC(hevc, "HEVC", AV_CODEC_ID_HEVC, "hevc_mp4toannexb");
+M2MDEC(mjpeg, "MJPEG", AV_CODEC_ID_MJPEG, NULL);
M2MDEC(mpeg1, "MPEG1", AV_CODEC_ID_MPEG1VIDEO, NULL);
M2MDEC(mpeg2, "MPEG2", AV_CODEC_ID_MPEG2VIDEO, NULL);
M2MDEC(mpeg4, "MPEG4", AV_CODEC_ID_MPEG4, NULL);
diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c
index 4c9ea1fd92..b025f59275 100644
--- a/libavcodec/v4l2_m2m_enc.c
+++ b/libavcodec/v4l2_m2m_enc.c
@@ -345,6 +345,7 @@ AVCodec ff_ ## NAME ## _v4l2m2m_encoder = { \
.wrapper_name = "v4l2m2m", \
};
+M2MENC(mjpeg,"MJPEG", AV_CODEC_ID_MJPEG);
M2MENC(mpeg4,"MPEG4", AV_CODEC_ID_MPEG4);
M2MENC(h263, "H.263", AV_CODEC_ID_H263);
M2MENC(h264, "H.264", AV_CODEC_ID_H264);
--
2.18.0
More information about the ffmpeg-devel
mailing list