From patchwork Sun Aug 12 14:40:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Jourdan X-Patchwork-Id: 9957 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp2185020jad; Sun, 12 Aug 2018 07:41:45 -0700 (PDT) X-Google-Smtp-Source: AA+uWPyWdPNJoJMZnsgdoLbwEQFOA539E4sjN2Aa4pytwEEO60yHj+O9ZZjLa6cTvLwQewud18wV X-Received: by 2002:a1c:b84e:: with SMTP id i75-v6mr5592900wmf.158.1534084904931; Sun, 12 Aug 2018 07:41:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534084904; cv=none; d=google.com; s=arc-20160816; b=HOOKAPCD9Qa9A5yKdVD2jZFWv+2Mp26d9jWAwz7c8UULXaVqfhTHtf9+3bfpF5MURn 9EUah9Z9Cc94YV2OQEm6Ly1apDm/vZfd87qSjBHBYrr6x23FUBfS7AgBN6yAKgK5HCku LS2oxL+noVlZsJB7dvhNINbT04vvuK4uIewLpBQyz35T4LuvhCLoMl/xcJHOY94K4+JF z6h6m7ARIyfcAjOgLnt4FUZfc03KUxsIWdEcw+C3tBfu5htQjtRzGMQWkE7g2gP1mfU/ sEWROYX/uiqICntwQPXM3xDq9dLvuYvKqoNNgeymgxTLduFhU1cgDZ0ntFhRv3jzwomP HwVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to :arc-authentication-results; bh=ADZN2opawUgIpT/f8xtTB1oGsFKkAKn0/CrE1s6Zp9Q=; b=j0EY5fRs6BL/AtlBzbb+fLw/lZ4BU/TayrvdC62V1Jahn3U++gxYYesw7PNLdXktu9 800zqVAe/7I0ySwcP6/69R6klhGAZkcm9ZQBzDX2qfFfCrXZ7tJ6B1uFj5LBSMM21kNL diRifGlO1ZUpfGFiBbAWE19TRz0xAuGn0KR/aYBRtx9V1niX7qnaIKkPfGrPJ9KcAlDM kdeMyTpbekARny4wk49/xs0mBXBIkWPpnwrPFWsdmtTyvjDky4k0SwZpPNQmRabddKTA bnPN7OTZLEPQuTgp5UHfyVT+Fmh6DIwALS5EkphH8iozl3YYRRVSVgAU7mXxNPsiIdxr +4PA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l18-v6si12209021wre.443.2018.08.12.07.41.43; Sun, 12 Aug 2018 07:41:44 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D9E0F68A570; Sun, 12 Aug 2018 17:41:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48AB568A391 for ; Sun, 12 Aug 2018 17:41:12 +0300 (EEST) Received: from localhost.localdomain ([81.67.76.113]) by mwinf5d48 with ME id NEhW1y0052Sg6Vd03EhZc2; Sun, 12 Aug 2018 16:41:33 +0200 X-ME-Helo: localhost.localdomain X-ME-Auth: bWF4aS5qb3VyZGFuQHdhbmFkb28uZnI= X-ME-Date: Sun, 12 Aug 2018 16:41:33 +0200 X-ME-IP: 81.67.76.113 From: Maxime Jourdan To: jramirez@baylibre.com Date: Sun, 12 Aug 2018 16:40:35 +0200 Message-Id: <20180812144035.17956-1-maxi.jourdan@wanadoo.fr> X-Mailer: git-send-email 2.18.0 Subject: [FFmpeg-devel] [PATCH] avcodec: v4l2_m2m: add MJPEG enc/dec support X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Maxime Jourdan , ffmpeg-devel@ffmpeg.org MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Tested on an Odroid-C2 with a V4L2 M2M MJPEG decoder. Signed-off-by: Maxime Jourdan --- 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);