Re: [libav-devel] [PATCH V3] libavcodec/mjpeg_qsv: Add QSV MJPEG encoder

2017-07-21 Thread Maxym Dmytrychenko
besides some syntax issues: align the =

It seems to be working with default input as well as from hwaccel qsv:
-hwaccel qsv -c:v h264_qsv -i input_file -vcodec mjpeg_qsv -r 30 -f mjpeg
output

On Fri, Jul 21, 2017 at 6:12 AM, Huang, Zhengxu 
wrote:

> ---
> Changes from v2:
> * modify some coding-style and comments as per Diego's review
>   ---
> ---
> Changes from v1:
> * separate the mjpeg encoder from h264/hevc/mpeg2 as per Luca's review
> * reuse the global_quality option as per Luca's review
> * modify some coding-style and add changlog as per Diego's review
>   ---
>
>
> ___
> libav-devel mailing list
> libav-devel@libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel
>
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

[libav-devel] [PATCH V3] libavcodec/mjpeg_qsv: Add QSV MJPEG encoder

2017-07-20 Thread Huang, Zhengxu

---
Changes from v2:
* modify some coding-style and comments as per Diego's review
  ---
---
Changes from v1:
* separate the mjpeg encoder from h264/hevc/mpeg2 as per Luca's review
* reuse the global_quality option as per Luca's review
* modify some coding-style and add changlog as per Diego's review
  ---

From b3f7127e32caef5dc59fba1bfd8a150e3c9fc57a Mon Sep 17 00:00:00 2001
From: "Huang, Zhengxu" 
Date: Tue, 18 Jul 2017 01:13:24 +0800
Subject: [PATCH] libavcodec/mjpeg_qsv: Add QSV MJPEG encoder

usage:
-hwaccel qsv -c:v h264_qsv -i in -c:v mjpeg_qsv -global_quality 80 -f mjpeg out

Signed-off-by: ChaoX A Liu 
Signed-off-by: Zhengxu Huang 
Signed-off-by: Andrew Zhang 
Change-Id: I6a8a89d04e200a833b58741836645be0e0482257
---
 Changelog|  1 +
 configure|  2 +
 libavcodec/Makefile  |  1 +
 libavcodec/allcodecs.c   |  1 +
 libavcodec/qsv.c |  3 ++
 libavcodec/qsvenc.c  | 96 +++-
 libavcodec/qsvenc_jpeg.c | 91 +
 7 files changed, 193 insertions(+), 2 deletions(-)
 create mode 100644 libavcodec/qsvenc_jpeg.c

diff --git a/Changelog b/Changelog
index adcca3f..82e3e3a 100644
--- a/Changelog
+++ b/Changelog
@@ -17,6 +17,7 @@ version :
 - ClearVideo decoder (I-frames only)
 - support for decoding through D3D11VA in avconv
 - Cinepak encoder
+- Intel QSV-accelerated MJPEG encoding
 
 
 version 12:
diff --git a/configure b/configure
index d92ce33..35ae031 100755
--- a/configure
+++ b/configure
@@ -2279,6 +2279,8 @@ hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser 
hevc_qsv_hwaccel qsvde
 hevc_qsv_encoder_select="hevc_ps qsvenc"
 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
 hevc_vaapi_encoder_select="vaapi_encode golomb"
+mjpeg_qsv_encoder_deps="libmfx"
+mjpeg_qsv_encoder_select="qsvenc"
 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
 mpeg2_mmal_decoder_deps="mmal"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 2b91588..12bf8fe 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -319,6 +319,7 @@ OBJS-$(CONFIG_MIMIC_DECODER)   += mimic.o
 OBJS-$(CONFIG_MJPEG_DECODER)   += mjpegdec.o
 OBJS-$(CONFIG_MJPEG_ENCODER)   += mjpegenc.o mjpegenc_common.o
 OBJS-$(CONFIG_MJPEGB_DECODER)  += mjpegbdec.o
+OBJS-$(CONFIG_MJPEG_QSV_ENCODER)   += qsvenc_jpeg.o
 OBJS-$(CONFIG_MJPEG_VAAPI_ENCODER) += vaapi_encode_mjpeg.o
 OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o
 OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 5635ae1..3fcea5b 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -509,6 +509,7 @@ void avcodec_register_all(void)
 REGISTER_ENCODER(HEVC_NVENC,hevc_nvenc);
 REGISTER_ENCODER(HEVC_QSV,  hevc_qsv);
 REGISTER_ENCODER(HEVC_VAAPI,hevc_vaapi);
+REGISTER_ENCODER(MJPEG_QSV, mjpeg_qsv);
 REGISTER_ENCODER(MJPEG_VAAPI,   mjpeg_vaapi);
 REGISTER_ENCODER(MPEG2_QSV, mpeg2_qsv);
 REGISTER_ENCODER(MPEG2_VAAPI,   mpeg2_vaapi);
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 30d612f..a8ae656 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -20,6 +20,7 @@
 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -56,6 +57,8 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id)
 case AV_CODEC_ID_VP8:
 return MFX_CODEC_VP8;
 #endif
+case AV_CODEC_ID_MJPEG:
+return MFX_CODEC_JPEG;
 default:
 break;
 }
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index 7c6ad09..41325bc 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -353,6 +353,65 @@ static int rc_supported(QSVEncContext *q)
 return 1;
 }
 
+
+static int init_video_param_jpeg(AVCodecContext *avctx, QSVEncContext *q)
+{
+enum AVPixelFormat sw_format = avctx->pix_fmt == AV_PIX_FMT_QSV ?
+   avctx->sw_pix_fmt : avctx->pix_fmt;
+const AVPixFmtDescriptor *desc;
+int ret;
+
+ret = ff_qsv_codec_id_to_mfx(avctx->codec_id);
+if (ret < 0)
+return AVERROR_BUG;
+q->param.mfx.CodecId = ret;
+
+if (avctx->level > 0)
+q->param.mfx.CodecLevel = avctx->level;
+q->param.mfx.CodecProfile   = q->profile;
+
+desc = av_pix_fmt_desc_get(sw_format);
+if (!desc)
+return AVERROR_BUG;
+
+ff_qsv_map_pixfmt(sw_format, >param.mfx.FrameInfo.FourCC);
+
+q->param.mfx.FrameInfo.CropX  = 0;
+q->param.mfx.FrameInfo.CropY  = 0;
+q->param.mfx.FrameInfo.CropW  = avctx->width;
+q->param.mfx.FrameInfo.CropH  = avctx->height;
+q->param.mfx.FrameInfo.AspectRatioW   = avctx->sample_aspect_ratio.num;
+q->param.mfx.FrameInfo.AspectRatioH   =