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 (4)
......@@ -1824,7 +1824,7 @@ You can get an updated one from http://www.live555.com/liveMedia .])
other_libs="$other_libs -lws2_32"
])
dnl We need to check for pic because live555 don't provide shared libs
dnl We need to check for pic because live555 do not provide shared libs
dnl and we want to build a plugins so we need -fPIC on some arch.
VLC_ADD_CXXFLAGS([live555], [${CPPFLAGS_live555}])
VLC_ADD_LDFLAGS([live555], [${LDFLAGS_live555}])
......@@ -1945,7 +1945,7 @@ 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)]))
[disable AMD Scaler 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], [
......@@ -1955,6 +1955,17 @@ AS_IF([test "$enable_amf_scaler" != "no"], [
])
AM_CONDITIONAL([HAVE_AMF_SCALER], [test "${have_amf_scaler}" != "no"])
AC_ARG_ENABLE([amf-enhancer], AS_HELP_STRING([--disable-amf-enhancer],
[disable AMD Enhancer API (default auto)]))
have_amf_enhancer="no"
AS_IF([test "$enable_amf_enhancer" != "no"], [
AC_CHECK_HEADERS([AMF/core/PropertyStorage.h AMF/components/VQEnhancer.h], [
have_amf_enhancer="yes"
AC_DEFINE(HAVE_AMF_ENHANCER, 1, AMD VQ Enhancer supported)
])
])
AM_CONDITIONAL([HAVE_AMF_ENHANCER], [test "${have_amf_enhancer}" != "no"])
dnl
dnl special access module for Blackmagic SDI cards
dnl
......
......@@ -11,25 +11,46 @@
#include <AMF/core/Context.h>
#include <AMF/core/Factory.h>
#ifdef _WIN32
#include "../../video_chroma/d3d11_fmt.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct vlc_amf_context
{
#ifdef __cplusplus
amf::AMFFactory *pFactory;
amf::AMFContext *Context;
#define AMT_TYPE(t) amf::t
#else
AMFFactory *pFactory;
AMFContext *Context;
#define AMT_TYPE(t) t
#endif
struct vlc_amf_context
{
AMT_TYPE(AMFFactory) *pFactory;
AMT_TYPE(AMFContext) *Context;
void *Private;
};
int vlc_AMFCreateContext(struct vlc_amf_context *);
void vlc_AMFReleaseContext(struct vlc_amf_context *);
#ifdef _WIN32
static inline AMT_TYPE(AMF_SURFACE_FORMAT) DXGIToAMF(DXGI_FORMAT fmt)
{
switch (fmt)
{
case DXGI_FORMAT_NV12: return AMT_TYPE(AMF_SURFACE_NV12);
case DXGI_FORMAT_P010: return AMT_TYPE(AMF_SURFACE_P010);
case DXGI_FORMAT_P016: return AMT_TYPE(AMF_SURFACE_P016);
case DXGI_FORMAT_B8G8R8A8_UNORM: return AMT_TYPE(AMF_SURFACE_BGRA);
case DXGI_FORMAT_R8G8B8A8_UNORM: return AMT_TYPE(AMF_SURFACE_RGBA);
case DXGI_FORMAT_R10G10B10A2_UNORM: return AMT_TYPE(AMF_SURFACE_R10G10B10A2);
default: return AMT_TYPE(AMF_SURFACE_UNKNOWN);
}
}
#endif
#ifdef __cplusplus
} // extern "C"
#endif
......
......@@ -11,6 +11,11 @@ if HAVE_WINSTORE
libdirect3d11_filters_plugin_la_LIBADD += -ld3d11
endif
if HAVE_AMF_ENHANCER
libdirect3d11_filters_plugin_la_SOURCES += video_filter/amf_vqenhancer.c \
hw/amf/amf_helper.c hw/amf/amf_helper.h
endif
d3d11_LTLIBRARIES = $(LTLIBdirect3d11_filters)
EXTRA_LTLIBRARIES += libdirect3d11_filters_plugin.la
......@@ -665,6 +665,13 @@ vlc_module_begin()
set_callbacks( D3D11OpenDeinterlace, D3D11CloseDeinterlace )
add_shortcut ("deinterlace")
#ifdef HAVE_AMF_ENHANCER
add_submodule()
set_description(N_("AMD VQ Enhancer"))
add_shortcut(N_("amf_vqenhancer"))
set_callbacks( D3D11CreateAMFVQE, D3D11CloseAMFVQE )
#endif
add_submodule()
set_capability( "video converter", 10 )
set_callbacks( D3D11OpenConverter, D3D11CloseConverter )
......
......@@ -33,6 +33,8 @@ int D3D11OpenConverter(vlc_object_t *);
void D3D11CloseConverter(vlc_object_t *);
int D3D11OpenCPUConverter(vlc_object_t *);
void D3D11CloseCPUConverter(vlc_object_t *);
int D3D11CreateAMFVQE(vlc_object_t *);
void D3D11CloseAMFVQE(vlc_object_t *);
void D3D11_FilterHoldInstance(filter_t *, d3d11_device_t *, D3D11_TEXTURE2D_DESC *);
void D3D11_FilterReleaseInstance(d3d11_device_t *);
......
// SPDX-License-Identifier: LGPL-2.1-or-later
/*****************************************************************************
* amf_vqenhancer: Enhance video with low bitrates
*****************************************************************************
* Copyright © 2024 Videolabs, VLC authors and VideoLAN
*
* Authors: Steve Lhomme <robux4@videolabs.io>
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc_common.h>
#include <vlc_filter.h>
#include <vlc_plugin.h>
#define COBJMACROS
#include "../hw/amf/amf_helper.h"
#include <AMF/components/VQEnhancer.h>
#include "../video_chroma/d3d11_fmt.h"
#include "../hw/d3d11/d3d11_filters.h"
#include <assert.h>
struct filter_sys_t
{
d3d11_handle_t hd3d;
d3d11_device_t d3d_dev;
struct vlc_amf_context amf;
AMFComponent *amf_vqe;
AMFSurface *amfInput;
const d3d_format_t *cfg;
};
static picture_t *PictureFromTexture(filter_t *filter, d3d11_device_t *d3d_dev, ID3D11Texture2D *out)
{
struct filter_sys_t *sys = filter->p_sys;
picture_t *p_outpic = filter_NewPicture( filter );
if( !p_outpic )
{
return NULL;
}
picture_sys_t *src_sys = ActivePictureSys(p_outpic);
if (unlikely(!src_sys))
{
/* the output filter configuration may have changed since the filter
* was opened */
picture_Release(p_outpic);
return NULL;
}
d3d11_device_lock( d3d_dev );
ID3D11DeviceContext_CopySubresourceRegion(src_sys->context,
src_sys->resource[KNOWN_DXGI_INDEX],
src_sys->slice_index,
0, 0, 0,
(ID3D11Resource*)out,
0,
NULL);
d3d11_device_unlock( d3d_dev );
return p_outpic;
}
static picture_t * Filter(filter_t *filter, picture_t *p_pic)
{
struct filter_sys_t *sys = filter->p_sys;
picture_sys_t *src_sys = ActivePictureSys(p_pic);
AMF_RESULT res;
AMFSurface *submitSurface;
AMFPlane *packedStaging = sys->amfInput->pVtbl->GetPlane(sys->amfInput, AMF_PLANE_PACKED);
ID3D11Resource *amfStaging = packedStaging->pVtbl->GetNative(packedStaging);
#ifndef NDEBUG
ID3D11Texture2D *staging = (ID3D11Texture2D *)amfStaging;
D3D11_TEXTURE2D_DESC stagingDesc, inputDesc;
ID3D11Texture2D_GetDesc(staging, &stagingDesc);
ID3D11Texture2D_GetDesc(src_sys->texture[KNOWN_DXGI_INDEX], &inputDesc);
assert(stagingDesc.Width == inputDesc.Width);
assert(stagingDesc.Height == inputDesc.Height);
assert(stagingDesc.Format == inputDesc.Format);
#endif
struct filter_sys_t *dev_sys = sys;
#if 0
if (src_sys->slice_index == 0)
sys->amf.Context->pVtbl->CreateSurfaceFromDX11Native(sys->amf.Context, )
#endif
// copy source into staging as it may not be shared and we can't select a slice
d3d11_device_lock( &dev_sys->d3d_dev );
ID3D11DeviceContext_CopySubresourceRegion(src_sys->context, amfStaging,
0,
0, 0, 0,
src_sys->resource[KNOWN_DXGI_INDEX],
src_sys->slice_index,
NULL);
d3d11_device_unlock( &dev_sys->d3d_dev );
submitSurface = sys->amfInput;
res = sys->amf_vqe->pVtbl->SubmitInput(sys->amf_vqe, (AMFData*)submitSurface);
if (res == AMF_INPUT_FULL)
{
msg_Dbg(filter, "filter input full, skip this frame");
return p_pic;
}
if (res != AMF_OK)
{
msg_Err(filter, "filter input failed (err=%d)", res);
return p_pic;
}
AMFData *amfOutput = NULL;
res = sys->amf_vqe->pVtbl->QueryOutput(sys->amf_vqe, &amfOutput);
if (res != AMF_OK)
{
msg_Err(filter, "filter gave no output (err=%d)", res);
return p_pic;
}
AMFSurface *amfOutputSurface = (AMFSurface*)amfOutput;
AMFPlane *packed = amfOutputSurface->pVtbl->GetPlane(amfOutputSurface, AMF_PLANE_PACKED);
assert(amfOutput->pVtbl->GetMemoryType(amfOutput) == AMF_MEMORY_DX11);
ID3D11Texture2D *out = packed->pVtbl->GetNative(packed);
picture_t *dst = PictureFromTexture(filter, &dev_sys->d3d_dev, out);
amfOutput->pVtbl->Release(amfOutput);
if (dst == NULL)
return p_pic;
picture_CopyProperties(dst, p_pic);
picture_Release(p_pic);
return dst;
}
void D3D11CloseAMFVQE(vlc_object_t *p_this)
{
filter_t *filter = container_of(p_this, filter_t, obj);
struct filter_sys_t *sys = filter->p_sys;
sys->amfInput->pVtbl->Release(sys->amfInput);
sys->amf_vqe->pVtbl->Release(sys->amf_vqe);
if (sys->d3d_dev.d3dcontext)
D3D11_FilterReleaseInstance(&sys->d3d_dev);
D3D11_Destroy(&sys->hd3d);
}
int D3D11CreateAMFVQE(vlc_object_t *p_this)
{
filter_t *filter = container_of(p_this, filter_t, obj);
if (!is_d3d11_opaque(filter->fmt_in.video.i_chroma))
return VLC_EGENERIC;
if (!video_format_IsSimilar(&filter->fmt_in.video, &filter->fmt_out.video))
return VLC_EGENERIC;
struct filter_sys_t *sys = vlc_obj_calloc(VLC_OBJECT(filter), 1, sizeof(*sys));
if (unlikely(sys == NULL))
return VLC_ENOMEM;
if ( unlikely(D3D11_Create(filter, &sys->hd3d, false) != VLC_SUCCESS ))
{
msg_Err(filter, "Could not access the d3d11.");
goto error;
}
D3D11_TEXTURE2D_DESC dstDesc;
D3D11_FilterHoldInstance(filter, &sys->d3d_dev, &dstDesc);
if (unlikely(sys->d3d_dev.d3dcontext==NULL))
{
msg_Dbg(filter, "Filter without a context");
return VLC_ENOOBJ;
}
DXGI_FORMAT input_format = dstDesc.Format;
const d3d_format_t *cfg;
for (cfg = GetRenderFormatList(); cfg->name != NULL; ++cfg)
{
if (cfg->formatTexture == input_format &&
is_d3d11_opaque(cfg->fourcc))
break;
}
assert(cfg != NULL);
AMF_SURFACE_FORMAT amf_fmt = DXGIToAMF(input_format);
if (amf_fmt == AMF_SURFACE_UNKNOWN)
{
msg_Err(filter, "Unsupported DXGI format %s", cfg->name);
return VLC_EGENERIC;
}
struct filter_sys_t *dev_sys = sys;
HRESULT hr;
HANDLE context_lock = INVALID_HANDLE_VALUE;
UINT dataSize = sizeof(context_lock);
hr = ID3D11DeviceContext_GetPrivateData(sys->d3d_dev.d3dcontext, &GUID_CONTEXT_MUTEX, &dataSize, &context_lock);
if (FAILED(hr))
msg_Warn(filter, "No mutex found to lock the decoder");
sys->d3d_dev.context_mutex = context_lock;
int err = vlc_AMFCreateContext(&sys->amf);
if (err != VLC_SUCCESS)
return err;
AMF_RESULT res;
res = sys->amf.Context->pVtbl->InitDX11(sys->amf.Context, dev_sys->d3d_dev.d3ddevice, AMF_DX11_0);
if (res != AMF_OK)
goto error;
res = sys->amf.pFactory->pVtbl->CreateComponent(sys->amf.pFactory, sys->amf.Context, AMFVQEnhancer, &sys->amf_vqe);
if (res != AMF_OK || sys->amf_vqe == NULL)
goto error;
#if 0
AMFVariantStruct val;
val.int64Value = AMF_MEMORY_DX11;
val.type = AMF_VARIANT_INT64;
res = sys->amf_vqe->pVtbl->SetProperty(sys->amf_vqe, AMF_VIDEO_ENHANCER_ENGINE_TYPE, val);
if (res != AMF_OK)
goto error;
#if 0 // this parameter doesn't exist
val.sizeValue = AMFConstructSize(filter->fmt_in.video.i_width, filter->fmt_in.video.i_height);
val.type = AMF_VARIANT_SIZE;
res = sys->amf_vqe->pVtbl->SetProperty(sys->amf_vqe, AMF_VIDEO_ENHANCER_OUTPUT_SIZE, val);
if (res != AMF_OK)
goto error;
#endif
#if 0 // debug test
val.boolValue = 1;
val.type = AMF_VARIANT_BOOL;
res = sys->amf_vqe->pVtbl->SetProperty(sys->amf_vqe, AMF_VE_FCR_SPLIT_VIEW, val);
if (res != AMF_OK)
goto error;
#endif
#endif
res = sys->amf_vqe->pVtbl->Init(sys->amf_vqe, amf_fmt,
filter->fmt_in.video.i_width,
filter->fmt_in.video.i_height);
if (res != AMF_OK)
goto error;
res = sys->amf.Context->pVtbl->AllocSurface(sys->amf.Context, AMF_MEMORY_DX11,
amf_fmt,
filter->fmt_in.video.i_width,
filter->fmt_in.video.i_height,
&sys->amfInput);
if (res != AMF_OK)
goto error;
sys->cfg = cfg;
filter->pf_video_filter = Filter;
filter->p_sys = sys;
return VLC_SUCCESS;
error:
if (sys->d3d_dev.d3dcontext)
D3D11_FilterReleaseInstance(&sys->d3d_dev);
if (sys->amfInput)
sys->amfInput->pVtbl->Release(sys->amfInput);
if (sys->amf_vqe != NULL)
sys->amf_vqe->pVtbl->Release(sys->amf_vqe);
vlc_AMFReleaseContext(&sys->amf);
D3D11_Destroy(&sys->hd3d);
return VLC_EGENERIC;
}
......@@ -19,20 +19,6 @@
#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>
......