Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (9)
Showing
with 751 additions and 29 deletions
......@@ -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
......
From cf190d084644d3d3e2ea1ffbb740ad8e7aede760 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From e5498eb5e82c54c93fdd56127a8bb6dc96961e46 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From 17cc77f3185ca562c7c0aa4e439c8f4bace1360a Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From 6c26950f67fb07550b86f3064fb0f7b7b53eec5d Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From a9ee7691cf2535f58695769893e92a634f810523 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From 7a0df0c174dce8d383be26e7b96d410865c62cf1 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From 18c87b557f7d5b9f1850a66705b551ac482e47e3 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
From 4069f86effdc36ba3f12d120212c8f077b96cdb0 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@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
# 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
......
// 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@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
}
// 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@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
......@@ -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
......
......@@ -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");
......
......@@ -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)))
{
......
......@@ -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)
......