[vlc-commits] [Git][videolan/vlc][master] 9 commits: direct3d11: fix initial position when using upscaler
Steve Lhomme (@robUx4)
gitlab at videolan.org
Mon Feb 19 08:22:30 UTC 2024
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
0a55cd68 by Steve Lhomme at 2024-02-19T07:39:41+00:00
direct3d11: fix initial position when using upscaler
- - - - -
2a8d33da by Steve Lhomme at 2024-02-19T07:39:41+00:00
configure: assume d3dx9effect.h is always there
It's already true for mingw-w64 v5 and above.
- - - - -
fb93aaaf by Steve Lhomme at 2024-02-19T07:39:41+00:00
configure: assume d3d9.h is always there
It's already true for mingw-w64 v5 and above.
- - - - -
827b4e04 by Steve Lhomme at 2024-02-19T07:39:41+00:00
configure: assume d3d11.h is always there
It's already true for mingw-w64 v5 and above.
- - - - -
86c2cf55 by Steve Lhomme at 2024-02-19T07:39:41+00:00
contrib: amf: update to 1.4.33
It contains the HQScaler
- - - - -
d0c47046 by Steve Lhomme at 2024-02-19T07:39:41+00:00
contrib: amf: fix compilation errors and warnings
Patchsets sent upstream:
- https://github.com/GPUOpen-LibrariesAndSDKs/AMF/pull/448
- https://github.com/GPUOpen-LibrariesAndSDKs/AMF/pull/449
- https://github.com/GPUOpen-LibrariesAndSDKs/AMF/pull/450
- https://github.com/GPUOpen-LibrariesAndSDKs/AMF/pull/451
- https://github.com/GPUOpen-LibrariesAndSDKs/AMF/pull/452
- - - - -
803499c5 by Steve Lhomme at 2024-02-19T07:39:41+00:00
configure: detect AMD HQScaler
- - - - -
6f1ec768 by Steve Lhomme at 2024-02-19T07:39:41+00:00
hw/amf: add a helper to create an AMFContext
- - - - -
ffd3f0e7 by Steve Lhomme at 2024-02-19T07:39:41+00:00
d3d11_scaler: add AMD HQScaler support
- - - - -
16 changed files:
- configure.ac
- + contrib/src/amf/0001-Differentiate-the-AMF_NO_VTABLE-based-on-the-compile.patch
- + contrib/src/amf/0001-Don-t-cast-amf_int64-when-using-a-format-string.patch
- + contrib/src/amf/0001-Fix-const-on-return-by-value-AMF_DECLARE_IID.patch
- + contrib/src/amf/0001-Fix-warning-when-_MSC_VER-is-not-defined.patch
- + contrib/src/amf/0001-Move-AMF_UNICODE-into-Platform.h.patch
- + contrib/src/amf/0002-Define-LPRI-d-ud-x-64-as-Unicode-wide-versions-of-AM.patch
- + contrib/src/amf/0002-Fix-const-on-return-by-value-Variant-values.patch
- + contrib/src/amf/0003-Define-AMFPRI-d-ud-x-64-using-the-standard-C-format-.patch
- contrib/src/amf/rules.mak
- + modules/hw/amf/amf_helper.c
- + modules/hw/amf/amf_helper.h
- modules/video_output/Makefile.am
- modules/video_output/win32/d3d11_scaler.cpp
- modules/video_output/win32/direct3d11.cpp
- modules/video_output/win32/direct3d9.c
Changes:
=====================================
configure.ac
=====================================
@@ -2160,6 +2160,20 @@ AS_IF([test "$enable_nvdec" != "no"], [
])
AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
+dnl
+dnl AMD Advanced Media Framework API
+dnl
+AC_ARG_ENABLE([amf-scaler], AS_HELP_STRING([--disable-amf-scaler],
+ [disable AMD AMF API (default auto)]))
+have_amf_scaler="no"
+AS_IF([test "$enable_amf_scaler" != "no"], [
+ AC_CHECK_HEADERS([AMF/core/PropertyStorage.h AMF/components/HQScaler.h], [
+ have_amf_scaler="yes"
+ AC_DEFINE(HAVE_AMF_SCALER, 1, AMD HQScaler supported)
+ ])
+])
+AM_CONDITIONAL([HAVE_AMF_SCALER], [test "${have_amf_scaler}" != "no"])
+
dnl
dnl special access module for Blackmagic SDI cards
dnl
@@ -3611,15 +3625,10 @@ AC_ARG_ENABLE([directx],
])
AS_IF([test "${enable_directx}" != "no"], [
dnl Direct3D11
- AC_CHECK_HEADERS([d3d11.h], [
- VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
- ])
+ VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
dnl Direct3D9
- AC_CHECK_HEADERS([d3d9.h], [
- VLC_ADD_PLUGIN([direct3d9 direct3d9_filters])
- AC_CHECK_HEADERS([d3dx9effect.h])
- ])
+ VLC_ADD_PLUGIN([direct3d9 direct3d9_filters])
])
dnl
=====================================
contrib/src/amf/0001-Differentiate-the-AMF_NO_VTABLE-based-on-the-compile.patch
=====================================
@@ -0,0 +1,47 @@
+From cf190d084644d3d3e2ea1ffbb740ad8e7aede760 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 08:18:19 +0100
+Subject: [PATCH] Differentiate the AMF_NO_VTABLE based on the compiler
+
+This is a Microsoft specific extension: https://learn.microsoft.com/en-us/cpp/cpp/novtable
+Clang and gcc can compile for Windows but don't support this.
+---
+ amf/public/include/core/Platform.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/amf/public/include/core/Platform.h b/amf/public/include/core/Platform.h
+index d6496d4..378f789 100644
+--- a/amf/public/include/core/Platform.h
++++ b/amf/public/include/core/Platform.h
+@@ -100,6 +100,12 @@ typedef signed int HRESULT;
+ #include <stdint.h>
+ #include <string.h>
+
++#if defined(_MSC_VER)
++ #define AMF_NO_VTABLE __declspec(novtable)
++#else
++ #define AMF_NO_VTABLE
++#endif
++
+ #if defined(_WIN32)
+
+
+@@ -116,7 +122,6 @@ typedef signed int HRESULT;
+ #define AMF_INLINE __inline
+ #define AMF_FORCEINLINE __forceinline
+ #endif
+- #define AMF_NO_VTABLE __declspec(novtable)
+
+ #else // !WIN32 - Linux and Mac
+
+@@ -130,7 +135,6 @@ typedef signed int HRESULT;
+ #define AMF_INLINE __inline__
+ #define AMF_FORCEINLINE __inline__
+ #endif
+- #define AMF_NO_VTABLE
+
+ #endif // WIN32
+
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0001-Don-t-cast-amf_int64-when-using-a-format-string.patch
=====================================
@@ -0,0 +1,34 @@
+From e5498eb5e82c54c93fdd56127a8bb6dc96961e46 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 08:05:13 +0100
+Subject: [PATCH] Don't cast amf_int64 when using a format string
+
+The format string is designed to match amf_int64.
+---
+ amf/public/include/core/Variant.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/amf/public/include/core/Variant.h b/amf/public/include/core/Variant.h
+index edf14ae..a44fbf5 100644
+--- a/amf/public/include/core/Variant.h
++++ b/amf/public/include/core/Variant.h
+@@ -872,14 +872,14 @@ namespace amf
+ {
+ res = AMF_OK;
+ char buff[0xFF];
+- sprintf(buff, "%" AMFPRId64, (long long)value);
++ sprintf(buff, "%" AMFPRId64, value);
+ return buff;
+ }
+ static AMF_INLINE AMFVariant::WString AMFConvertInt64ToWString(amf_int64 value, AMF_RESULT& res)
+ {
+ res = AMF_OK;
+ wchar_t buff[0xFF];
+- swprintf(buff, 0xFF, L"%" LPRId64, (long long)value);
++ swprintf(buff, 0xFF, L"%" LPRId64, value);
+ return buff;
+ }
+
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0001-Fix-const-on-return-by-value-AMF_DECLARE_IID.patch
=====================================
@@ -0,0 +1,29 @@
+From 17cc77f3185ca562c7c0aa4e439c8f4bace1360a Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 08:12:20 +0100
+Subject: [PATCH 1/2] Fix const on return by value AMF_DECLARE_IID()
+
+The returned value won't be const in C.
+
+Fixes this kind of warning:
+include/AMF/core/../components/Component.h:326:5: warning: 'const' type qualifier on return type has no effect [-Wignored-qualifiers]
+---
+ amf/public/include/core/Interface.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/amf/public/include/core/Interface.h b/amf/public/include/core/Interface.h
+index 9ac7e41..96117f0 100644
+--- a/amf/public/include/core/Interface.h
++++ b/amf/public/include/core/Interface.h
+@@ -49,7 +49,7 @@ namespace amf
+ }
+ #else
+ #define AMF_DECLARE_IID(name, _data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48) \
+- AMF_INLINE static const AMFGuid IID_##name(void) \
++ AMF_INLINE static AMFGuid IID_##name(void) \
+ { \
+ AMFGuid uid = {_data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48}; \
+ return uid; \
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0001-Fix-warning-when-_MSC_VER-is-not-defined.patch
=====================================
@@ -0,0 +1,52 @@
+From 6c26950f67fb07550b86f3064fb0f7b7b53eec5d Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 08:57:46 +0100
+Subject: [PATCH] Fix warning when _MSC_VER is not defined
+
+---
+ amf/public/include/core/Variant.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/amf/public/include/core/Variant.h b/amf/public/include/core/Variant.h
+index edf14ae..879f092 100644
+--- a/amf/public/include/core/Variant.h
++++ b/amf/public/include/core/Variant.h
+@@ -365,7 +365,7 @@ namespace amf
+ operator=(p_other);
+ }
+
+-#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600)
++#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+ #pragma warning (push)
+ #pragma warning (disable : 26439) //This kind of function may not throw. Declare it 'noexcept'.
+ String(String&& p_other) : m_Str(nullptr)
+@@ -393,7 +393,7 @@ namespace amf
+ m_Str = AMFVariantDuplicateString(p_other.m_Str);
+ return *this;
+ }
+-#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600)
++#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+ String& operator=(String&& p_other)
+ {
+ Free();
+@@ -475,7 +475,7 @@ namespace amf
+ {
+ operator=(p_other);
+ }
+-#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600)
++#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+ WString(WString&& p_other) : m_Str(nullptr)
+ {
+ operator=(p_other);
+@@ -492,7 +492,7 @@ namespace amf
+ m_Str = AMFVariantDuplicateWString(p_other.m_Str);
+ return *this;
+ }
+-#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600)
++#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+ WString& operator=(WString&& p_other)
+ {
+ Free();
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0001-Move-AMF_UNICODE-into-Platform.h.patch
=====================================
@@ -0,0 +1,38 @@
+From a9ee7691cf2535f58695769893e92a634f810523 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 07:43:32 +0100
+Subject: [PATCH 1/4] Move AMF_UNICODE into Platform.h
+
+It's a common macro that can be used in other places.
+---
+ amf/public/include/core/Platform.h | 14 ++++++++++++++
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/amf/public/include/core/Platform.h b/amf/public/include/core/Platform.h
+index 3f997fe..cdab1b2 100644
+--- a/amf/public/include/core/Platform.h
++++ b/amf/public/include/core/Platform.h
+@@ -66,6 +66,20 @@
+
+ #define AMF_TODO(_todo) (__FILE__ "(" AMF_MACRO_STRING(__LINE__) "): TODO: "_todo)
+
++/**
++*******************************************************************************
++* AMF_UNICODE
++*
++* @brief
++* Macro to convert string constant into wide char string constant
++*
++* Auxilary AMF_UNICODE_ macro is needed as otherwise it is not possible to use AMF_UNICODE(__FILE__)
++* Microsoft macro _T also uses 2 passes to accomplish that
++*******************************************************************************
++*/
++#define AMF_UNICODE(s) AMF_UNICODE_(s)
++#define AMF_UNICODE_(s) L ## s
++
+
+ #if defined(__GNUC__) || defined(__clang__)
+ #define AMF_ALIGN(n) __attribute__((aligned(n)))
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0002-Define-LPRI-d-ud-x-64-as-Unicode-wide-versions-of-AM.patch
=====================================
@@ -0,0 +1,54 @@
+From 7a0df0c174dce8d383be26e7b96d410865c62cf1 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 07:45:25 +0100
+Subject: [PATCH 2/4] Define LPRI(d|ud|x)64 as Unicode (wide) versions of
+ AMFPRI(d|ud|x)64
+
+It's always true for all platforms.
+---
+ amf/public/include/core/Platform.h | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/amf/public/include/core/Platform.h b/amf/public/include/core/Platform.h
+index cdab1b2..12ee75c 100644
+--- a/amf/public/include/core/Platform.h
++++ b/amf/public/include/core/Platform.h
+@@ -119,13 +119,10 @@ typedef signed int HRESULT;
+ #define AMF_NO_VTABLE __declspec(novtable)
+
+ #define AMFPRId64 "I64d"
+- #define LPRId64 L"I64d"
+
+ #define AMFPRIud64 "Iu64d"
+- #define LPRIud64 L"Iu64d"
+
+ #define AMFPRIx64 "I64x"
+- #define LPRIx64 L"I64x"
+
+ #else // !WIN32 - Linux and Mac
+
+@@ -143,17 +140,18 @@ typedef signed int HRESULT;
+
+ #if !defined(AMFPRId64)
+ #define AMFPRId64 "lld"
+- #define LPRId64 L"lld"
+
+ #define AMFPRIud64 "ulld"
+- #define LPRIud64 L"ulld"
+
+ #define AMFPRIx64 "llx"
+- #define LPRIx64 L"llx"
+ #endif
+
+ #endif // WIN32
+
++#define LPRId64 AMF_UNICODE(AMFPRId64)
++#define LPRIud64 AMF_UNICODE(AMFPRIud64)
++#define LPRIx64 AMF_UNICODE(AMFPRIx64)
++
+
+ #if defined(_WIN32)
+ #define AMF_WEAK __declspec( selectany )
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0002-Fix-const-on-return-by-value-Variant-values.patch
=====================================
@@ -0,0 +1,49 @@
+From 18c87b557f7d5b9f1850a66705b551ac482e47e3 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 08:50:28 +0100
+Subject: [PATCH 2/2] Fix const on return by value Variant values
+
+Fix const on return by value AMF_DECLARE_IID()
+
+The returned value won't be const in C.
+
+Fixes this kind of warning:
+include/AMF/core/Variant.h:135:23: warning: 'const' type qualifier on return type has no effect [-Wignored-qualifiers]
+---
+ amf/public/include/core/Variant.h | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/amf/public/include/core/Variant.h b/amf/public/include/core/Variant.h
+index edf14ae..a0a7eb8 100644
+--- a/amf/public/include/core/Variant.h
++++ b/amf/public/include/core/Variant.h
+@@ -132,16 +132,16 @@ namespace amf
+ static AMF_INLINE const AMFRatio& AMF_STD_CALL AMFVariantGetRatio(const AMFVariantStruct* _variant) { return (_variant)->ratioValue; }
+ static AMF_INLINE const AMFColor& AMF_STD_CALL AMFVariantGetColor(const AMFVariantStruct* _variant) { return (_variant)->colorValue; }
+ #else // #if defined(__cplusplus)
+- static AMF_INLINE const AMFRect AMF_STD_CALL AMFVariantGetRect (const AMFVariantStruct* _variant) { return (_variant)->rectValue; }
+- static AMF_INLINE const AMFSize AMF_STD_CALL AMFVariantGetSize (const AMFVariantStruct* _variant) { return (_variant)->sizeValue; }
+- static AMF_INLINE const AMFPoint AMF_STD_CALL AMFVariantGetPoint(const AMFVariantStruct* _variant) { return (_variant)->pointValue; }
+- static AMF_INLINE const AMFFloatSize AMF_STD_CALL AMFVariantGetFloatSize(const AMFVariantStruct* _variant) { return (_variant)->floatSizeValue; }
+- static AMF_INLINE const AMFFloatPoint2D AMF_STD_CALL AMFVariantGetFloatPoint2D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint2DValue; }
+- static AMF_INLINE const AMFFloatPoint3D AMF_STD_CALL AMFVariantGetFloatPoint3D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint3DValue; }
+- static AMF_INLINE const AMFFloatVector4D AMF_STD_CALL AMFVariantGetFloatVector4D(const AMFVariantStruct* _variant) { return (_variant)->floatVector4DValue; }
+- static AMF_INLINE const AMFRate AMF_STD_CALL AMFVariantGetRate (const AMFVariantStruct* _variant) { return (_variant)->rateValue; }
+- static AMF_INLINE const AMFRatio AMF_STD_CALL AMFVariantGetRatio(const AMFVariantStruct* _variant) { return (_variant)->ratioValue; }
+- static AMF_INLINE const AMFColor AMF_STD_CALL AMFVariantGetColor(const AMFVariantStruct* _variant) { return (_variant)->colorValue; }
++ static AMF_INLINE AMFRect AMF_STD_CALL AMFVariantGetRect (const AMFVariantStruct* _variant) { return (_variant)->rectValue; }
++ static AMF_INLINE AMFSize AMF_STD_CALL AMFVariantGetSize (const AMFVariantStruct* _variant) { return (_variant)->sizeValue; }
++ static AMF_INLINE AMFPoint AMF_STD_CALL AMFVariantGetPoint(const AMFVariantStruct* _variant) { return (_variant)->pointValue; }
++ static AMF_INLINE AMFFloatSize AMF_STD_CALL AMFVariantGetFloatSize(const AMFVariantStruct* _variant) { return (_variant)->floatSizeValue; }
++ static AMF_INLINE AMFFloatPoint2D AMF_STD_CALL AMFVariantGetFloatPoint2D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint2DValue; }
++ static AMF_INLINE AMFFloatPoint3D AMF_STD_CALL AMFVariantGetFloatPoint3D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint3DValue; }
++ static AMF_INLINE AMFFloatVector4D AMF_STD_CALL AMFVariantGetFloatVector4D(const AMFVariantStruct* _variant) { return (_variant)->floatVector4DValue; }
++ static AMF_INLINE AMFRate AMF_STD_CALL AMFVariantGetRate (const AMFVariantStruct* _variant) { return (_variant)->rateValue; }
++ static AMF_INLINE AMFRatio AMF_STD_CALL AMFVariantGetRatio(const AMFVariantStruct* _variant) { return (_variant)->ratioValue; }
++ static AMF_INLINE AMFColor AMF_STD_CALL AMFVariantGetColor(const AMFVariantStruct* _variant) { return (_variant)->colorValue; }
+ #endif // #if defined(__cplusplus)
+
+
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/0003-Define-AMFPRI-d-ud-x-64-using-the-standard-C-format-.patch
=====================================
@@ -0,0 +1,70 @@
+From 4069f86effdc36ba3f12d120212c8f077b96cdb0 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at videolabs.io>
+Date: Fri, 16 Feb 2024 07:50:03 +0100
+Subject: [PATCH 3/4] Define AMFPRI(d|ud|x)64 using the standard C++ format for
+ C+11 and up
+
+See https://en.cppreference.com/w/cpp/types/integer
+
+When compiled in C, it depends whether it's the Microsoft flavor or the standard C format. Not
+whether it's Win32 or not. Clang or GCC use the proper string formats on windows.
+---
+ amf/public/include/core/Platform.h | 29 ++++++++++++++++++++---------
+ 1 file changed, 20 insertions(+), 9 deletions(-)
+
+diff --git a/amf/public/include/core/Platform.h b/amf/public/include/core/Platform.h
+index 12ee75c..d6496d4 100644
+--- a/amf/public/include/core/Platform.h
++++ b/amf/public/include/core/Platform.h
+@@ -118,12 +118,6 @@ typedef signed int HRESULT;
+ #endif
+ #define AMF_NO_VTABLE __declspec(novtable)
+
+- #define AMFPRId64 "I64d"
+-
+- #define AMFPRIud64 "Iu64d"
+-
+- #define AMFPRIx64 "I64x"
+-
+ #else // !WIN32 - Linux and Mac
+
+ #define AMF_STD_CALL
+@@ -138,15 +132,32 @@ typedef signed int HRESULT;
+ #endif
+ #define AMF_NO_VTABLE
+
++#endif // WIN32
++
++#if defined(__cplusplus) && (__cplusplus >= 201103L)
++ #include <cinttypes>
++ #define AMFPRId64 PRId64
++
++ #define AMFPRIud64 PRIu64
++
++ #define AMFPRIx64 PRIx64
++#else
++#if defined(_MSC_VER)
++ #define AMFPRId64 "I64d"
++
++ #define AMFPRIud64 "Iu64d"
++
++ #define AMFPRIx64 "I64x"
++#else
+ #if !defined(AMFPRId64)
+ #define AMFPRId64 "lld"
+
+- #define AMFPRIud64 "ulld"
++ #define AMFPRIud64 "ulld"
+
+ #define AMFPRIx64 "llx"
+ #endif
+-
+-#endif // WIN32
++#endif
++#endif
+
+ #define LPRId64 AMF_UNICODE(AMFPRId64)
+ #define LPRIud64 AMF_UNICODE(AMFPRIud64)
+--
+2.37.3.windows.1
+
=====================================
contrib/src/amf/rules.mak
=====================================
@@ -1,10 +1,10 @@
# AMF
-AMF_VERSION := 1.4.30
+AMF_VERSION := 1.4.33
AMF_URL := $(GITHUB)/GPUOpen-LibrariesAndSDKs/AMF/archive/refs/tags/v$(AMF_VERSION).tar.gz
AMF_GITURL := $(GITHUB)/GPUOpen-LibrariesAndSDKs/AMF.git
AMF_BRANCH := v$(AMF_VERSION)
-AMF_GITVERSION := a118570647cfa579af8875c3955a314c3ddd7058
+AMF_GITVERSION := e8c7cd7c10d4e05c1913aa8dfd2be9f9dbdb03d6
ifeq ($(ARCH),x86_64)
ifdef HAVE_WIN32
@@ -37,6 +37,14 @@ $(TARBALLS)/AMF-$(AMF_GITVERSION).tar.xz:
# amf: AMF-$(AMF_VERSION).tar.gz .sum-amf
amf: AMF-$(AMF_GITVERSION).tar.xz .sum-amf
$(UNPACK)
+ $(APPLY) $(SRC)/amf/0001-Move-AMF_UNICODE-into-Platform.h.patch
+ $(APPLY) $(SRC)/amf/0002-Define-LPRI-d-ud-x-64-as-Unicode-wide-versions-of-AM.patch
+ $(APPLY) $(SRC)/amf/0003-Define-AMFPRI-d-ud-x-64-using-the-standard-C-format-.patch
+ $(APPLY) $(SRC)/amf/0001-Don-t-cast-amf_int64-when-using-a-format-string.patch
+ $(APPLY) $(SRC)/amf/0001-Differentiate-the-AMF_NO_VTABLE-based-on-the-compile.patch
+ $(APPLY) $(SRC)/amf/0001-Fix-const-on-return-by-value-AMF_DECLARE_IID.patch
+ $(APPLY) $(SRC)/amf/0002-Fix-const-on-return-by-value-Variant-values.patch
+ $(APPLY) $(SRC)/amf/0001-Fix-warning-when-_MSC_VER-is-not-defined.patch
$(MOVE)
.amf: amf
=====================================
modules/hw/amf/amf_helper.c
=====================================
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+// amf_helper.c: AMD Advanced Media Framework helper
+// Copyright © 2024 VideoLabs, VLC authors and VideoLAN
+
+// Authors: Steve Lhomme <robux4 at videolabs.io>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "amf_helper.h"
+
+#include <vlc_common.h>
+
+int vlc_AMFCreateContext(struct vlc_amf_context *c)
+{
+#ifdef _WIN32
+# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+ HMODULE hLib = LoadLibraryA(AMF_DLL_NAMEA);
+ if (hLib == NULL)
+ return VLC_ENOTSUP;
+
+ amf_uint64 version = 0;
+ AMF_RESULT res;
+ AMFQueryVersion_Fn queryVersion = (AMFQueryVersion_Fn)GetProcAddress(hLib, AMF_QUERY_VERSION_FUNCTION_NAME);
+ if (unlikely(queryVersion == NULL))
+ goto error;
+ res = queryVersion(&version);
+ if (unlikely(res != AMF_OK))
+ goto error;
+
+ c->pFactory = NULL;
+ c->Context = NULL;
+
+ AMFInit_Fn init = (AMFInit_Fn)GetProcAddress(hLib, AMF_INIT_FUNCTION_NAME);
+ res = init(version, &c->pFactory);
+ if (unlikely(res != AMF_OK))
+ goto error;
+
+ res = c->pFactory->pVtbl->CreateContext(c->pFactory, &c->Context);
+ if (res != AMF_OK || c->Context == NULL)
+ goto error;
+
+ c->Private = hLib;
+ return VLC_SUCCESS;
+
+error:
+ FreeLibrary(hLib);
+ return VLC_ENOTSUP;
+
+# else // !WINAPI_PARTITION_DESKTOP
+ // we can't load external DLLs in UWP
+ return VLC_ENOTSUP;
+# endif // !WINAPI_PARTITION_DESKTOP
+
+#else
+ return NULL; // TODO
+#endif
+}
+
+void vlc_AMFReleaseContext(struct vlc_amf_context *c)
+{
+ c->Context->pVtbl->Terminate(c->Context);
+ c->Context->pVtbl->Release(c->Context);
+#ifdef _WIN32
+ FreeLibrary(c->Private);
+#endif
+}
=====================================
modules/hw/amf/amf_helper.h
=====================================
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+// amf_helper.h: AMD Advanced Media Framework helper
+// Copyright © 2024 VideoLabs, VLC authors and VideoLAN
+
+// Authors: Steve Lhomme <robux4 at videolabs.io>
+
+#ifndef VLC_AMF_HELPER_H
+#define VLC_AMF_HELPER_H
+
+#include <AMF/core/Context.h>
+#include <AMF/core/Factory.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct vlc_amf_context
+{
+#ifdef __cplusplus
+ amf::AMFFactory *pFactory;
+ amf::AMFContext *Context;
+#else
+ AMFFactory *pFactory;
+ AMFContext *Context;
+#endif
+ void *Private;
+};
+
+int vlc_AMFCreateContext(struct vlc_amf_context *);
+void vlc_AMFReleaseContext(struct vlc_amf_context *);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // VLC_AMF_HELPER_H
=====================================
modules/video_output/Makefile.am
=====================================
@@ -223,6 +223,9 @@ endif
if HAVE_NVDEC
libdirect3d11_plugin_la_SOURCES += hw/nvdec/nvdec_fmt.h
endif
+if HAVE_AMF_SCALER
+libdirect3d11_plugin_la_SOURCES += hw/amf/amf_helper.c hw/amf/amf_helper.h
+endif
libdirect3d11_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(voutdir)'
vout_LTLIBRARIES += $(LTLIBdirect3d11)
EXTRA_LTLIBRARIES += libdirect3d11_plugin.la
=====================================
modules/video_output/win32/d3d11_scaler.cpp
=====================================
@@ -15,6 +15,24 @@
#include <vlc_common.h>
#include "d3d11_scaler.h"
+#ifdef HAVE_AMF_SCALER
+#include "../../hw/amf/amf_helper.h"
+#include <AMF/components/HQScaler.h>
+
+amf::AMF_SURFACE_FORMAT DXGIToAMF(DXGI_FORMAT fmt)
+{
+ switch (fmt)
+ {
+ case DXGI_FORMAT_NV12: return amf::AMF_SURFACE_NV12;
+ case DXGI_FORMAT_P010: return amf::AMF_SURFACE_P010;
+ case DXGI_FORMAT_P016: return amf::AMF_SURFACE_P016;
+ case DXGI_FORMAT_B8G8R8A8_UNORM: return amf::AMF_SURFACE_BGRA;
+ case DXGI_FORMAT_R8G8B8A8_UNORM: return amf::AMF_SURFACE_RGBA;
+ case DXGI_FORMAT_R10G10B10A2_UNORM: return amf::AMF_SURFACE_R10G10B10A2;
+ default: return amf::AMF_SURFACE_UNKNOWN;
+ }
+}
+#endif
#include <new>
#include <wrl/client.h>
@@ -35,6 +53,13 @@ struct d3d11_scaler
ComPtr<ID3D11VideoProcessor> processor;
ComPtr<ID3D11VideoProcessorOutputView> outputView;
ID3D11ShaderResourceView *SRVs[DXGI_MAX_SHADER_VIEW] = {};
+#ifdef HAVE_AMF_SCALER
+ vlc_amf_context amf = {};
+ amf::AMFComponent *amf_scaler = nullptr;
+ amf::AMFSurface *amfInput = nullptr;
+ ComPtr<ID3D11Texture2D> amfStaging;
+ d3d11_device_t *d3d_dev = nullptr;
+#endif
};
static const d3d_format_t *GetDirectRenderingFormat(vlc_object_t *vd, d3d11_device_t *d3d_dev, vlc_fourcc_t i_src_chroma)
@@ -47,7 +72,17 @@ static const d3d_format_t *GetDirectRenderingFormat(vlc_object_t *vd, d3d11_devi
d3d11_scaler *D3D11_UpscalerCreate(vlc_object_t *vd, d3d11_device_t *d3d_dev, vlc_fourcc_t i_chroma,
bool super_res, const d3d_format_t **out_fmt)
{
+ if ((*out_fmt)->formatTexture == DXGI_FORMAT_UNKNOWN)
+ {
+ msg_Warn(vd, "chroma upscale of %4.4s not supported", (char*)&i_chroma);
+ return nullptr;
+ }
+
bool canProcess = !super_res;
+#ifdef HAVE_AMF_SCALER
+ struct vlc_amf_context amf = {};
+ amf::AMFComponent *amf_scaler = nullptr;
+#endif
// NVIDIA 530+ driver
if (d3d_dev->adapterDesc.VendorId == GPU_MANUFACTURER_NVIDIA &&
(d3d_dev->WDDM.revision * 10000 + d3d_dev->WDDM.build) > 153000)
@@ -60,20 +95,43 @@ d3d11_scaler *D3D11_UpscalerCreate(vlc_object_t *vd, d3d11_device_t *d3d_dev, vl
// TODO refine which GPU and drivers can do it
canProcess = true;
}
+#ifdef HAVE_AMF_SCALER
+ else if (d3d_dev->adapterDesc.VendorId == GPU_MANUFACTURER_AMD && !canProcess)
+ {
+ int res = vlc_AMFCreateContext(&amf);
+ if (res == VLC_SUCCESS)
+ {
+ AMF_RESULT res = amf.pFactory->CreateComponent(amf.Context, AMFHQScaler, &amf_scaler);
+ if (res == AMF_OK && amf_scaler)
+ {
+ res = amf.Context->InitDX11(d3d_dev->d3ddevice);
+ canProcess = res == AMF_OK;
+ }
+ }
+ }
+#endif
+ d3d11_scaler *scaleProc = nullptr;
+ const d3d_format_t *fmt = nullptr;
if (!canProcess)
{
msg_Err(vd, "Super Resolution filter not supported");
- return nullptr;
+ goto error;
}
- if ((*out_fmt)->formatTexture == DXGI_FORMAT_UNKNOWN)
+#ifdef HAVE_AMF_SCALER
+ if (amf_scaler != nullptr)
{
- msg_Warn(vd, "chroma upscale of %4.4s not supported", (char*)&i_chroma);
- return nullptr;
+ auto amf_fmt = DXGIToAMF((*out_fmt)->formatTexture);
+ if (amf_fmt == amf::AMF_SURFACE_UNKNOWN)
+ {
+ msg_Warn(vd, "upscale of DXGI %s not supported", DxgiFormatToStr((*out_fmt)->formatTexture));
+ goto error;
+ }
+ fmt = *out_fmt;
}
- const d3d_format_t *fmt = nullptr;
- if ((*out_fmt)->bitsPerChannel > 10)
+#endif
+ if (fmt == nullptr && (*out_fmt)->bitsPerChannel > 10)
fmt = GetDirectRenderingFormat(vd, d3d_dev, VLC_CODEC_RGBA64);
if (fmt == nullptr && (*out_fmt)->bitsPerChannel > 8)
fmt = GetDirectRenderingFormat(vd, d3d_dev, VLC_CODEC_RGBA10LE);
@@ -84,13 +142,23 @@ d3d11_scaler *D3D11_UpscalerCreate(vlc_object_t *vd, d3d11_device_t *d3d_dev, vl
if (fmt == nullptr || fmt->formatTexture == DXGI_FORMAT_UNKNOWN)
{
msg_Warn(vd, "chroma upscale of %4.4s not supported", (char*)&i_chroma);
- return nullptr;
+ goto error;
}
- d3d11_scaler *scaleProc = new (std::nothrow) d3d11_scaler;
+ scaleProc = new (std::nothrow) d3d11_scaler;
if (unlikely(scaleProc == nullptr))
- return nullptr;
+ goto error;
+#ifdef HAVE_AMF_SCALER
+ if (amf_scaler != nullptr)
+ {
+ scaleProc->amf = amf;
+ scaleProc->amf_scaler = amf_scaler;
+ scaleProc->d3d_dev = d3d_dev;
+ }
+ else
+ {
+#endif
HRESULT hr;
hr = d3d_dev->d3ddevice->QueryInterface(IID_GRAPHICS_PPV_ARGS(&scaleProc->d3dviddev));
if (unlikely(FAILED(hr)))
@@ -105,12 +173,21 @@ d3d11_scaler *D3D11_UpscalerCreate(vlc_object_t *vd, d3d11_device_t *d3d_dev, vl
msg_Err(vd, "Could not Query ID3D11VideoContext Interface. (hr=0x%lX)", hr);
goto error;
}
+#ifdef HAVE_AMF_SCALER
+ }
+#endif
scaleProc->d3d_fmt = fmt;
scaleProc->super_res = super_res;
*out_fmt = scaleProc->d3d_fmt;
return scaleProc;
error:
+#ifdef HAVE_AMF_SCALER
+ if (amf_scaler)
+ amf_scaler->Release();
+ if (amf.Context)
+ vlc_AMFReleaseContext(&amf);
+#endif
delete scaleProc;
return nullptr;
}
@@ -163,6 +240,9 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
scaleProc->usable = false;
+#ifdef HAVE_AMF_SCALER
+ if (!scaleProc->amf_scaler)
+#endif
if (scaleProc->enumerator.Get() == nullptr)
{
d3d11_device_lock(d3d_dev);
@@ -207,7 +287,6 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
ZeroMemory(&texDesc, sizeof(texDesc));
texDesc.MipLevels = 1;
texDesc.SampleDesc.Count = 1;
- texDesc.MiscFlags = 0;
texDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
texDesc.Usage = D3D11_USAGE_DEFAULT;
texDesc.CPUAccessFlags = 0;
@@ -215,6 +294,11 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
texDesc.Format = scaleProc->d3d_fmt->formatTexture;
texDesc.Width = scaleProc->Width;
texDesc.Height = scaleProc->Height;
+ texDesc.MiscFlags = 0;
+#ifdef HAVE_AMF_SCALER
+ if (scaleProc->amf_scaler)
+ texDesc.MiscFlags |= D3D11_RESOURCE_MISC_SHARED;
+#endif
hr = d3d_dev->d3ddevice->CreateTexture2D(&texDesc, nullptr, upscaled.GetAddressOf());
if (FAILED(hr))
{
@@ -226,6 +310,37 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
outDesc.ViewDimension = D3D11_VPOV_DIMENSION_TEXTURE2D;
outDesc.Texture2D.MipSlice = 0;
+#ifdef HAVE_AMF_SCALER
+ if (scaleProc->amf_scaler)
+ {
+ AMF_RESULT res;
+
+ if (scaleProc->amfInput != nullptr)
+ {
+ scaleProc->amfInput->Release();
+ scaleProc->amfInput = nullptr;
+ }
+
+ texDesc.Width = fmt->i_x_offset + fmt->i_visible_width;
+ texDesc.Height = fmt->i_y_offset + fmt->i_visible_height;
+ hr = d3d_dev->d3ddevice->CreateTexture2D(&texDesc, nullptr, scaleProc->amfStaging.ReleaseAndGetAddressOf());
+ if (FAILED(hr))
+ {
+ msg_Err(vd, "Failed to create the staging texture. (hr=0x%lX)", hr);
+ goto done_super;
+ }
+ res = scaleProc->amf.Context->CreateSurfaceFromDX11Native(scaleProc->amfStaging.Get(),
+ &scaleProc->amfInput,
+ nullptr);
+ if (unlikely(res != AMF_OK || scaleProc->amfInput == nullptr))
+ {
+ msg_Err(vd, "Failed to wrap D3D11 output texture. %d", res);
+ goto done_super;
+ }
+ }
+ else
+ {
+#endif
hr = scaleProc->d3dviddev->CreateVideoProcessorOutputView(
upscaled.Get(),
scaleProc->enumerator.Get(),
@@ -236,6 +351,9 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
msg_Dbg(vd,"Failed to create processor output. (hr=0x%lX)", hr);
goto done_super;
}
+#ifdef HAVE_AMF_SCALER
+ }
+#endif
ReleaseSRVs(scaleProc);
_upscaled[0] = upscaled.Get();
@@ -247,6 +365,29 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
goto done_super;
}
+#ifdef HAVE_AMF_SCALER
+ if (scaleProc->amf_scaler)
+ {
+ AMF_RESULT res;
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_OUTPUT_SIZE, ::AMFConstructSize(out_width, out_height));
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_ENGINE_TYPE, amf::AMF_MEMORY_DX11);
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_ALGORITHM, AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_0);
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_FROM_SRGB, 0);
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_SHARPNESS, 0.5);
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_FILL, 1);
+ AMFColor black{0,0,0,255};
+ res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_FILL_COLOR, black);
+ // res = scaleProc->amf_scaler->SetProperty(AMF_HQ_SCALER_FRAME_RATE, oFrameRate);
+ auto amf_fmt = DXGIToAMF(scaleProc->d3d_fmt->formatTexture);
+ res = scaleProc->amf_scaler->Init(amf_fmt,
+ fmt->i_x_offset + fmt->i_visible_width,
+ fmt->i_y_offset + fmt->i_visible_height);
+ if (res != AMF_OK)
+ return false;
+ }
+ else
+ {
+#endif
RECT srcRect;
srcRect.left = fmt->i_x_offset;
srcRect.top = fmt->i_y_offset;
@@ -365,6 +506,9 @@ int D3D11_UpscalerUpdate(vlc_object_t *vd, d3d11_scaler *scaleProc, d3d11_device
}
}
d3d11_device_unlock(d3d_dev);
+#ifdef HAVE_AMF_SCALER
+ }
+#endif
if (scaleProc->upscaling != upscale)
{
@@ -384,6 +528,20 @@ done_super:
void D3D11_UpscalerDestroy(d3d11_scaler *scaleProc)
{
ReleaseSRVs(scaleProc);
+#ifdef HAVE_AMF_SCALER
+ if (scaleProc->amfInput != nullptr)
+ {
+ scaleProc->amfInput->Release();
+ scaleProc->amfInput = nullptr;
+ }
+ if (scaleProc->amf_scaler)
+ {
+ scaleProc->amf_scaler->Terminate();
+ scaleProc->amf_scaler->Release();
+ }
+ if (scaleProc->amf.Context)
+ vlc_AMFReleaseContext(&scaleProc->amf);
+#endif
delete scaleProc;
}
@@ -420,6 +578,62 @@ int D3D11_UpscalerScale(vlc_object_t *vd, d3d11_scaler *scaleProc, picture_sys_d
{
HRESULT hr;
+#ifdef HAVE_AMF_SCALER
+ if (scaleProc->amf_scaler)
+ {
+ AMF_RESULT res;
+ amf::AMFSurface *submitSurface;
+
+ D3D11_TEXTURE2D_DESC texDesc;
+ p_sys->texture[0]->GetDesc(&texDesc);
+ // copy source into staging as it may not be shared
+ d3d11_device_lock( scaleProc->d3d_dev );
+ scaleProc->d3d_dev->d3dcontext->CopySubresourceRegion(scaleProc->amfStaging.Get(),
+ 0,
+ 0, 0, 0,
+ p_sys->resource[KNOWN_DXGI_INDEX],
+ p_sys->slice_index,
+ NULL);
+ d3d11_device_unlock( scaleProc->d3d_dev );
+ submitSurface = scaleProc->amfInput;
+
+ res = scaleProc->amf_scaler->SubmitInput(submitSurface);
+ if (res == AMF_INPUT_FULL)
+ {
+ msg_Dbg(vd, "scaler input full, skip this frame");
+ return VLC_SUCCESS;
+ }
+ if (res != AMF_OK)
+ return VLC_EGENERIC;
+
+ amf::AMFData *amfOutput = nullptr;
+ res = scaleProc->amf_scaler->QueryOutput(&amfOutput);
+ if (res != AMF_OK)
+ return VLC_EGENERIC;
+
+ assert(amfOutput->GetMemoryType() == amf::AMF_MEMORY_DX11);
+ amf::AMFSurface *amfOutputSurface = reinterpret_cast<amf::AMFSurface*>(amfOutput);
+ auto packed = amfOutputSurface->GetPlane(amf::AMF_PLANE_PACKED);
+
+ ID3D11Texture2D *out = reinterpret_cast<ID3D11Texture2D *>(packed->GetNative());
+
+ ReleaseSRVs(scaleProc);
+ ID3D11Texture2D *_upscaled[DXGI_MAX_SHADER_VIEW];
+ _upscaled[0] = out;
+ _upscaled[1] = out;
+ _upscaled[2] = out;
+ _upscaled[3] = out;
+ if (D3D11_AllocateResourceView(vlc_object_logger(vd), scaleProc->d3d_dev->d3ddevice, scaleProc->d3d_fmt,
+ _upscaled, 0, scaleProc->SRVs) != VLC_SUCCESS)
+ {
+ return VLC_ENOTSUP;
+ }
+
+ amfOutput->Release();
+
+ return VLC_SUCCESS;
+ }
+#endif
if (assert_ProcessorInput(vd, scaleProc, p_sys) != VLC_SUCCESS)
{
msg_Err(vd, "fail to create upscaler input");
=====================================
modules/video_output/win32/direct3d11.cpp
=====================================
@@ -212,6 +212,21 @@ static int UpdateDisplayFormat(vout_display_t *vd, const video_format_t *fmt)
{
D3D11_UpscalerUpdate(VLC_OBJECT(vd), sys->scaleProc, sys->d3d_dev,
vd->source, &sys->picQuad.quad_fmt, &vd->cfg->display);
+
+ if (D3D11_UpscalerUsed(sys->scaleProc))
+ {
+ D3D11_UpscalerGetSize(sys->scaleProc, &sys->picQuad.quad_fmt.i_width, &sys->picQuad.quad_fmt.i_height);
+
+ sys->picQuad.quad_fmt.i_x_offset = 0;
+ sys->picQuad.quad_fmt.i_y_offset = 0;
+ sys->picQuad.quad_fmt.i_visible_width = sys->picQuad.quad_fmt.i_width;
+ sys->picQuad.quad_fmt.i_visible_height = sys->picQuad.quad_fmt.i_height;
+
+ sys->picQuad.generic.i_width = sys->picQuad.quad_fmt.i_width;
+ sys->picQuad.generic.i_height = sys->picQuad.quad_fmt.i_height;
+
+ CommonPlacePicture(vd, &sys->area);
+ }
}
display_info_t new_display = { };
@@ -1127,10 +1142,10 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma
}
RECT source_rect;
- source_rect.left = fmt->i_x_offset;
- source_rect.right = fmt->i_x_offset + fmt->i_visible_width;
- source_rect.top = fmt->i_y_offset;
- source_rect.bottom = fmt->i_y_offset + fmt->i_visible_height;
+ source_rect.left = sys->picQuad.quad_fmt.i_x_offset;
+ source_rect.right = sys->picQuad.quad_fmt.i_x_offset + sys->picQuad.quad_fmt.i_visible_width;
+ source_rect.top = sys->picQuad.quad_fmt.i_y_offset;
+ source_rect.bottom = sys->picQuad.quad_fmt.i_y_offset + sys->picQuad.quad_fmt.i_visible_height;
if (!D3D11_UpdateQuadPosition(vd, sys->d3d_dev, &sys->picQuad, &source_rect,
video_format_GetTransform(sys->picQuad.quad_fmt.orientation, sys->display.orientation)))
{
=====================================
modules/video_output/win32/direct3d9.c
=====================================
@@ -52,9 +52,7 @@
#include <windows.h>
#include <d3d9.h>
-#ifdef HAVE_D3DX9EFFECT_H
#include <d3dx9effect.h>
-#endif
#include "../../video_chroma/d3d9_fmt.h"
#include <dxvahd.h>
@@ -657,7 +655,6 @@ static int Direct3D9CreateScene(vout_display_t *vd, const video_format_t *fmt)
return VLC_SUCCESS;
}
-#ifdef HAVE_D3DX9EFFECT_H
static int Direct3D9CompileShader(vout_display_t *vd, const char *shader_source, size_t source_length)
{
vout_display_sys_t *sys = vd->sys;
@@ -711,9 +708,6 @@ static int Direct3D9CompileShader(vout_display_t *vd, const char *shader_source,
}
return VLC_SUCCESS;
}
-#else
-# define Direct3D9CompileShader(a,b,c) VLC_EGENERIC
-#endif
#define MAX_SHADER_FILE_SIZE (1024*1024)
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/a04b04197e0b7b4ff3c7f5a23af668373dc4c374...ffd3f0e70a1b61d9d919387fa14558c1d4bf7881
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/a04b04197e0b7b4ff3c7f5a23af668373dc4c374...ffd3f0e70a1b61d9d919387fa14558c1d4bf7881
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list