Skip to content

Commit dd3c350

Browse files
committed
qsvdec: add mjpeg decoding support
jpeg/mjpeg decoding can't work currently because mjpeg parser can't provide enough information currently. Signed-off-by: Zhong Li <zhong.li@intel.com>
1 parent 661d373 commit dd3c350

4 files changed

Lines changed: 42 additions & 1 deletion

File tree

configure

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2701,6 +2701,7 @@ hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
27012701
hevc_vdpau_hwaccel_select="hevc_decoder"
27022702
hevc_videotoolbox_hwaccel_deps="videotoolbox"
27032703
hevc_videotoolbox_hwaccel_select="hevc_decoder"
2704+
mjpeg_qsv_hwaccel_deps="libmfx"
27042705
mjpeg_cuvid_hwaccel_deps="cuda cuvid"
27052706
mjpeg_cuvid_hwaccel_select="mjpeg_cuvid_decoder"
27062707
mpeg_xvmc_hwaccel_deps="xvmc"
@@ -2836,6 +2837,8 @@ hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
28362837
hevc_vaapi_encoder_select="vaapi_encode golomb"
28372838
hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
28382839
hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
2840+
mjpeg_qsv_decoder_deps="libmfx"
2841+
mjpeg_qsv_decoder_select="qsvdec mjpeg_qsv_hwaccel mjpeg_parser"
28392842
mjpeg_cuvid_decoder_deps="cuda cuvid"
28402843
mjpeg_qsv_encoder_deps="libmfx"
28412844
mjpeg_qsv_encoder_select="qsvenc"

libavcodec/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ OBJS-$(CONFIG_METASOUND_DECODER) += metasound.o metasound_data.o \
402402
OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o
403403
OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o
404404
OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o
405+
OBJS-$(CONFIG_MJPEG_QSV_DECODER) += qsvdec_other.o
405406
OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpegenc_common.o \
406407
mjpegenc_huffman.o
407408
OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o

libavcodec/allcodecs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ static void register_all(void)
8686
REGISTER_HWACCEL(HEVC_VDPAU, hevc_vdpau);
8787
REGISTER_HWACCEL(HEVC_VIDEOTOOLBOX, hevc_videotoolbox);
8888
REGISTER_HWACCEL(MJPEG_CUVID, mjpeg_cuvid);
89+
REGISTER_HWACCEL(MJPEG_QSV, mjpeg_qsv);
8990
REGISTER_HWACCEL(MPEG1_CUVID, mpeg1_cuvid);
9091
REGISTER_HWACCEL(MPEG1_XVMC, mpeg1_xvmc);
9192
REGISTER_HWACCEL(MPEG1_VDPAU, mpeg1_vdpau);
@@ -691,6 +692,7 @@ static void register_all(void)
691692
REGISTER_ENCODER(HEVC_VAAPI, hevc_vaapi);
692693
REGISTER_ENCODER(LIBKVAZAAR, libkvazaar);
693694
REGISTER_DECODER(MJPEG_CUVID, mjpeg_cuvid);
695+
REGISTER_DECODER(MJPEG_QSV, mjpeg_qsv);
694696
REGISTER_ENCODER(MJPEG_QSV, mjpeg_qsv);
695697
REGISTER_ENCODER(MJPEG_VAAPI, mjpeg_vaapi);
696698
REGISTER_DECODER(MPEG1_CUVID, mpeg1_cuvid);

libavcodec/qsvdec_other.c

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Intel MediaSDK QSV based MPEG-2, VC-1 and VP8 decoders
2+
* Intel MediaSDK QSV based MPEG-2, VC-1, VP8 and MJPEG decoders
33
*
44
* copyright (c) 2015 Anton Khirnov
55
*
@@ -267,3 +267,38 @@ AVCodec ff_vp8_qsv_decoder = {
267267
AV_PIX_FMT_NONE },
268268
};
269269
#endif
270+
271+
#if CONFIG_MJPEG_QSV_HWACCEL
272+
AVHWAccel ff_mjpeg_qsv_hwaccel = {
273+
.name = "mjpeg_qsv",
274+
.type = AVMEDIA_TYPE_VIDEO,
275+
.id = AV_CODEC_ID_MJPEG,
276+
.pix_fmt = AV_PIX_FMT_QSV,
277+
};
278+
#endif
279+
280+
#if CONFIG_MJPEG_QSV_DECODER
281+
static const AVClass mjpeg_qsv_class = {
282+
.class_name = "mjpeg_qsv",
283+
.item_name = av_default_item_name,
284+
.option = options,
285+
.version = LIBAVUTIL_VERSION_INT,
286+
};
287+
288+
AVCodec ff_mjpeg_qsv_decoder = {
289+
.name = "mjpeg_qsv",
290+
.long_name = NULL_IF_CONFIG_SMALL("MJPEG video (Intel Quick Sync Video acceleration)"),
291+
.priv_data_size = sizeof(QSVOtherContext),
292+
.type = AVMEDIA_TYPE_VIDEO,
293+
.id = AV_CODEC_ID_MJPEG,
294+
.init = qsv_decode_init,
295+
.decode = qsv_decode_frame,
296+
.flush = qsv_decode_flush,
297+
.close = qsv_decode_close,
298+
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING,
299+
.priv_class = &mjpeg_qsv_class,
300+
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
301+
AV_PIX_FMT_QSV,
302+
AV_PIX_FMT_NONE },
303+
};
304+
#endif

0 commit comments

Comments
 (0)