From: Maxym Dmytrychenko <[email protected]>
---
Changelog | 1 +
configure | 7 +++++++
libavcodec/Makefile | 2 ++
libavcodec/allcodecs.c | 1 +
libavcodec/qsv.h | 2 +-
libavcodec/qsv_h264.c | 9 ++++-----
libavcodec/version.h | 2 +-
libavutil/pixfmt.h | 1 +
8 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/Changelog b/Changelog
index f56c112..765b87f 100644
--- a/Changelog
+++ b/Changelog
@@ -4,6 +4,7 @@ releases are sorted from youngest to oldest.
version 10:
- av_strnstr
- support ID3v2 tags in ASF files
+- QSV decoder hardware acceleration
version 9:
diff --git a/configure b/configure
index 1aae93b..dcd0c37 100755
--- a/configure
+++ b/configure
@@ -130,6 +130,7 @@ Component options:
Hardware accelerators:
--enable-dxva2 enable DXVA2 code
+ --enable-qsv enable QSV code
--enable-vaapi enable VAAPI code
--enable-vda enable VDA code
--enable-vdpau enable VDPAU code
@@ -1048,6 +1049,7 @@ EXTERNAL_LIBRARY_LIST="
HWACCEL_LIST="
dxva2
+ qsv
vaapi
vda
vdpau
@@ -1624,6 +1626,8 @@ zmbv_encoder_select="zlib"
# hardware accelerators
dxva2_deps="dxva2api_h"
+qsv_deps="mfx_mfxvideo_h"
+qsv_extralibs="-lmfx -lstdc++"
vaapi_deps="va_va_h"
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration
-framework QuartzCore"
@@ -1635,6 +1639,8 @@ h263_vdpau_hwaccel_deps="vdpau"
h263_vdpau_hwaccel_select="h263_decoder"
h264_dxva2_hwaccel_deps="dxva2"
h264_dxva2_hwaccel_select="h264_decoder"
+h264_qsv_decoder_deps="qsv"
+h264_qsv_decoder_select="h264_decoder"
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
h264_vda_hwaccel_deps="vda"
@@ -3468,6 +3474,7 @@ check_header sys/resource.h
check_header sys/select.h
check_header sys/time.h
check_header unistd.h
+check_header mfx/mfxvideo.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header VideoDecodeAcceleration/VDADecoder.h
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 262d2eb..d0b6166 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -5,6 +5,7 @@ HEADERS = avcodec.h
\
avfft.h \
dxva2.h \
old_codec_ids.h \
+ qsv.h \
vaapi.h \
vda.h \
vdpau.h \
@@ -199,6 +200,7 @@ OBJS-$(CONFIG_H264_DECODER) += h264.o
\
cabac.o h264_sei.o h264_ps.o
\
h264_refs.o h264_cavlc.o h264_cabac.o
OBJS-$(CONFIG_H264_DXVA2_HWACCEL) += dxva2_h264.o
+OBJS-$(CONFIG_H264_QSV_DECODER) += qsv.o qsv_h264.o
OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += vaapi_h264.o
OBJS-$(CONFIG_H264_VDA_HWACCEL) += vda_h264.o
OBJS-$(CONFIG_H264_VDPAU_HWACCEL) += vdpau_h264.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 8bfa603..a4f8643 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -150,6 +150,7 @@ void avcodec_register_all(void)
REGISTER_DECODER(H263I, h263i);
REGISTER_ENCODER(H263P, h263p);
REGISTER_DECODER(H264, h264);
+ REGISTER_DECODER(H264_QSV, h264_qsv);
REGISTER_DECODER(H264_VDPAU, h264_vdpau);
REGISTER_ENCDEC (HUFFYUV, huffyuv);
REGISTER_DECODER(IDCIN, idcin);
diff --git a/libavcodec/qsv.h b/libavcodec/qsv.h
index cfbf75c..fc16fea 100644
--- a/libavcodec/qsv.h
+++ b/libavcodec/qsv.h
@@ -335,7 +335,7 @@ typedef struct av_qsv_config {
/**
* Distance between I- or P- key frames; if it is zero, the GOP structure
is unspecified.
- * Note: If GopRefDist = 1, there are no B-frames used.
+ * Note: If GopRefDist = 1 no B-frames are used.
*
* - encoding: Set by user.
* - decoding: unused
diff --git a/libavcodec/qsv_h264.c b/libavcodec/qsv_h264.c
index fbd3aa7..51122c2 100644
--- a/libavcodec/qsv_h264.c
+++ b/libavcodec/qsv_h264.c
@@ -267,8 +267,8 @@ int ff_qsv_decode_init(AVCodecContext *avctx)
"Using default config for QSV decode\n");
avctx->hwaccel_context = &av_qsv_default_config;
} else {
- if ((*qsv_config_context)->io_pattern !=
MFX_IOPATTERN_OUT_OPAQUE_MEMORY
- && (*qsv_config_context)->io_pattern !=
MFX_IOPATTERN_OUT_SYSTEM_MEMORY) {
+ if ((*qsv_config_context)->io_pattern !=
MFX_IOPATTERN_OUT_OPAQUE_MEMORY &&
+ (*qsv_config_context)->io_pattern !=
MFX_IOPATTERN_OUT_SYSTEM_MEMORY) {
av_log_missing_feature(avctx, "MFX_IOPATTERN_OUT_SYSTEM_MEMORY
type", 0);
return AVERROR_PATCHWELCOME;
}
@@ -408,8 +408,7 @@ static int qsv_decode_frame(AVCodecContext *avctx, void
*data,
sts = MFX_ERR_NONE;
// ignore warnings, where warnings >0 , and not error codes <0
- while (MFX_ERR_NONE <= sts || MFX_ERR_MORE_SURFACE == sts
- || MFX_WRN_DEVICE_BUSY == sts) {
+ while (MFX_ERR_NONE <= sts || MFX_ERR_MORE_SURFACE == sts ||
MFX_WRN_DEVICE_BUSY == sts) {
if (MFX_ERR_MORE_SURFACE == sts || MFX_ERR_NONE == sts) {
surface_idx = av_qsv_get_free_surface(qsv_decode, qsv,
&qsv_decode->request[0].Info, QSV_PART_ANY);
if (surface_idx == -1) {
@@ -766,7 +765,7 @@ mfxStatus ff_qsv_mem_buffer_alloc(mfxHDL pthis, mfxU32
nbytes, mfxU16 type,
if (!mid)
return MFX_ERR_NULL_PTR;
- if (0 == (type & MFX_MEMTYPE_SYSTEM_MEMORY))
+ if (!(type & MFX_MEMTYPE_SYSTEM_MEMORY))
return MFX_ERR_UNSUPPORTED;
header_size = AV_QSV_ALIGN32(sizeof(av_qsv_alloc_buffer));
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 7a024d3..23d853a 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -27,7 +27,7 @@
*/
#define LIBAVCODEC_VERSION_MAJOR 54
-#define LIBAVCODEC_VERSION_MINOR 41
+#define LIBAVCODEC_VERSION_MINOR 42
#define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 1863099..dee8d96 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -179,6 +179,7 @@ enum AVPixelFormat {
AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample
per 1x1 Y & A samples, big-endian)
AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample
per 1x1 Y & A samples, little-endian)
AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3]
contains a VdpVideoSurface
+ AV_PIX_FMT_QSV, ///< HW acceleration with QSV, data[2] contains
qsv_atom information for MFX_IOPATTERN_OUT_OPAQUE_MEMORY,
MFX_IOPATTERN_OUT_VIDEO_MEMORY
AV_PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you
want to link with shared libav* because the number of formats might differ
between versions
#if FF_API_PIX_FMT
--
1.7.7.6
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel