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

Reply via email to