[vlc-commits] Contribs: ffmpeg, fix hw decoding

Jean-Baptiste Kempf git at videolan.org
Sun Dec 10 18:45:05 CET 2017


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Sun Dec 10 18:02:52 2017 +0100| [2007dae6e53bcd89cf2286e5f152aacc51cea6e6] | committer: Jean-Baptiste Kempf

Contribs: ffmpeg, fix hw decoding

Patches from tguillem

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2007dae6e53bcd89cf2286e5f152aacc51cea6e6
---

 ...AD_HOC-method-for-DXVA2-D3D11-VAAPI-VDPAU.patch | 24 ++++++++++++
 .../lavc-change-HW_CONFIG_HWACCEL-arguments.patch  | 44 ++++++++++++++++++++++
 contrib/src/ffmpeg/rules.mak                       |  2 +
 3 files changed, 70 insertions(+)

diff --git a/contrib/src/ffmpeg/lavc-add-back-AD_HOC-method-for-DXVA2-D3D11-VAAPI-VDPAU.patch b/contrib/src/ffmpeg/lavc-add-back-AD_HOC-method-for-DXVA2-D3D11-VAAPI-VDPAU.patch
new file mode 100644
index 0000000000..08a98743dc
--- /dev/null
+++ b/contrib/src/ffmpeg/lavc-add-back-AD_HOC-method-for-DXVA2-D3D11-VAAPI-VDPAU.patch
@@ -0,0 +1,24 @@
+diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h
+index 16ee822920..292a87f6b5 100644
+--- a/libavcodec/hwaccel.h
++++ b/libavcodec/hwaccel.h
+@@ -75,15 +75,15 @@ typedef struct AVCodecHWConfigInternal {
+     }
+ 
+ #define HWACCEL_DXVA2(codec) \
+-    HW_CONFIG_HWACCEL(DXVA2_VLD, 0,  DXVA2,   ff_ ## codec ## _dxva2_hwaccel)
++    HW_CONFIG_HWACCEL(DXVA2_VLD, 1,  DXVA2,   ff_ ## codec ## _dxva2_hwaccel)
+ #define HWACCEL_D3D11VA2(codec) \
+-    HW_CONFIG_HWACCEL(D3D11,     0,  D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
++    HW_CONFIG_HWACCEL(D3D11,     1,  D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
+ #define HWACCEL_NVDEC(codec) \
+     HW_CONFIG_HWACCEL(CUDA,      0, CUDA,    ff_ ## codec ## _nvdec_hwaccel)
+ #define HWACCEL_VAAPI(codec) \
+-    HW_CONFIG_HWACCEL(VAAPI,     0,  VAAPI,   ff_ ## codec ## _vaapi_hwaccel)
++    HW_CONFIG_HWACCEL(VAAPI,     1,  VAAPI,   ff_ ## codec ## _vaapi_hwaccel)
+ #define HWACCEL_VDPAU(codec) \
+-    HW_CONFIG_HWACCEL(VDPAU,     0,  VDPAU,   ff_ ## codec ## _vdpau_hwaccel)
++    HW_CONFIG_HWACCEL(VDPAU,     1,  VDPAU,   ff_ ## codec ## _vdpau_hwaccel)
+ #define HWACCEL_VIDEOTOOLBOX(codec) \
+     HW_CONFIG_HWACCEL(VIDEOTOOLBOX, 0, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
+ 
diff --git a/contrib/src/ffmpeg/lavc-change-HW_CONFIG_HWACCEL-arguments.patch b/contrib/src/ffmpeg/lavc-change-HW_CONFIG_HWACCEL-arguments.patch
new file mode 100644
index 0000000000..1df7182298
--- /dev/null
+++ b/contrib/src/ffmpeg/lavc-change-HW_CONFIG_HWACCEL-arguments.patch
@@ -0,0 +1,44 @@
+diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h
+index ae55527c2f..16ee822920 100644
+--- a/libavcodec/hwaccel.h
++++ b/libavcodec/hwaccel.h
+@@ -42,12 +42,13 @@ typedef struct AVCodecHWConfigInternal {
+ 
+ // These macros are used to simplify AVCodecHWConfigInternal definitions.
+ 
+-#define HW_CONFIG_HWACCEL(format, device, name) \
++#define HW_CONFIG_HWACCEL(format, ad_hoc, device, name) \
+     &(const AVCodecHWConfigInternal) { \
+         .public          = { \
+             .pix_fmt     = AV_PIX_FMT_ ## format, \
+             .methods     = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX | \
+-                           AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, \
++                           AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX | \
++                           ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0, \
+             .device_type = AV_HWDEVICE_TYPE_ ## device, \
+         }, \
+         .hwaccel         = &name, \
+@@ -74,17 +75,17 @@ typedef struct AVCodecHWConfigInternal {
+     }
+ 
+ #define HWACCEL_DXVA2(codec) \
+-    HW_CONFIG_HWACCEL(DXVA2_VLD, DXVA2,   ff_ ## codec ## _dxva2_hwaccel)
++    HW_CONFIG_HWACCEL(DXVA2_VLD, 0,  DXVA2,   ff_ ## codec ## _dxva2_hwaccel)
+ #define HWACCEL_D3D11VA2(codec) \
+-    HW_CONFIG_HWACCEL(D3D11,     D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
++    HW_CONFIG_HWACCEL(D3D11,     0,  D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
+ #define HWACCEL_NVDEC(codec) \
+-    HW_CONFIG_HWACCEL(CUDA,      CUDA,    ff_ ## codec ## _nvdec_hwaccel)
++    HW_CONFIG_HWACCEL(CUDA,      0, CUDA,    ff_ ## codec ## _nvdec_hwaccel)
+ #define HWACCEL_VAAPI(codec) \
+-    HW_CONFIG_HWACCEL(VAAPI,     VAAPI,   ff_ ## codec ## _vaapi_hwaccel)
++    HW_CONFIG_HWACCEL(VAAPI,     0,  VAAPI,   ff_ ## codec ## _vaapi_hwaccel)
+ #define HWACCEL_VDPAU(codec) \
+-    HW_CONFIG_HWACCEL(VDPAU,     VDPAU,   ff_ ## codec ## _vdpau_hwaccel)
++    HW_CONFIG_HWACCEL(VDPAU,     0,  VDPAU,   ff_ ## codec ## _vdpau_hwaccel)
+ #define HWACCEL_VIDEOTOOLBOX(codec) \
+-    HW_CONFIG_HWACCEL(VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
++    HW_CONFIG_HWACCEL(VIDEOTOOLBOX, 0, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
+ 
+ #define HWACCEL_D3D11VA(codec) \
+     HW_CONFIG_AD_HOC_HWACCEL(D3D11VA_VLD, ff_ ## codec ## _d3d11va_hwaccel)
diff --git a/contrib/src/ffmpeg/rules.mak b/contrib/src/ffmpeg/rules.mak
index 4a49cbc5be..b129d6a897 100644
--- a/contrib/src/ffmpeg/rules.mak
+++ b/contrib/src/ffmpeg/rules.mak
@@ -231,6 +231,8 @@ ffmpeg: ffmpeg-$(FFMPEG_BASENAME).tar.xz .sum-ffmpeg
 	tar xvJf "$<" --strip-components=1 -C $@-$(FFMPEG_BASENAME)
 ifdef USE_FFMPEG
 	$(APPLY) $(SRC)/ffmpeg/armv7_fixup.patch
+	$(APPLY) $(SRC)/ffmpeg/lavc-change-HW_CONFIG_HWACCEL-arguments.patch
+	$(APPLY) $(SRC)/ffmpeg/lavc-add-back-AD_HOC-method-for-DXVA2-D3D11-VAAPI-VDPAU.patch
 endif
 ifdef USE_LIBAV
 	$(APPLY) $(SRC)/ffmpeg/libav_gsm.patch



More information about the vlc-commits mailing list