[FFmpeg-cvslog] avfilter/vsrc_ddagrab: dynamically load SetThreadDpiAwarenessContext
ffmpeg | branch: master | Timo Rothenpieler | Tue Jul 19 00:51:18 2022 +0200| [61c151a09892d7f70c51c18110a1edf8796d7568] | committer: Timo Rothenpieler avfilter/vsrc_ddagrab: dynamically load SetThreadDpiAwarenessContext It's a Windows 10 only function, and its presence alone prevents the binary from loading on older Windows versions. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=61c151a09892d7f70c51c18110a1edf8796d7568 --- configure | 2 -- libavfilter/vsrc_ddagrab.c | 41 + 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 18d9b61a99..91444cdc53 100755 --- a/configure +++ b/configure @@ -2309,7 +2309,6 @@ SYSTEM_FUNCS=" SetDllDirectory setmode setrlimit -SetThreadDpiAwarenessContext Sleep strerror_r sysconf @@ -6401,7 +6400,6 @@ check_type "windows.h d3d11.h" "ID3D11VideoDecoder" check_type "windows.h d3d11.h" "ID3D11VideoContext" check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602 check_func_headers mfapi.h MFCreateAlignedMemoryBuffer -lmfplat -check_func_headers windows.h SetThreadDpiAwarenessContext -D_WIN32_WINNT=0x0A00 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC" check_type "vdpau/vdpau.h" "VdpPictureInfoVP9" diff --git a/libavfilter/vsrc_ddagrab.c b/libavfilter/vsrc_ddagrab.c index 4a90ad7a02..5668eda051 100644 --- a/libavfilter/vsrc_ddagrab.c +++ b/libavfilter/vsrc_ddagrab.c @@ -18,9 +18,9 @@ #include "config.h" -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0A00 +#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 #undef _WIN32_WINNT -#define _WIN32_WINNT 0x0A00 +#define _WIN32_WINNT 0x0602 #endif #define WIN32_LEAN_AND_MEAN @@ -41,6 +41,7 @@ #include "libavutil/avassert.h" #include "libavutil/hwcontext.h" #include "libavutil/hwcontext_d3d11va.h" +#include "compat/w32dlfcn.h" #include "avfilter.h" #include "internal.h" #include "formats.h" @@ -150,8 +151,12 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) IDXGIAdapter *dxgi_adapter = NULL; IDXGIOutput *dxgi_output = NULL; IDXGIOutput1 *dxgi_output1 = NULL; -#if HAVE_IDXGIOUTPUT5 && HAVE_SETTHREADDPIAWARENESSCONTEXT +#if HAVE_IDXGIOUTPUT5 IDXGIOutput5 *dxgi_output5 = NULL; + +typedef DPI_AWARENESS_CONTEXT (*set_thread_dpi_t)(DPI_AWARENESS_CONTEXT); +set_thread_dpi_t set_thread_dpi; +HMODULE user32_module; #endif int w, h; HRESULT hr; @@ -185,9 +190,19 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) return AVERROR_EXTERNAL; } -#if HAVE_IDXGIOUTPUT5 && HAVE_SETTHREADDPIAWARENESSCONTEXT -hr = IDXGIOutput_QueryInterface(dxgi_output, &IID_IDXGIOutput5, (void**)&dxgi_output5); -if (SUCCEEDED(hr)) { +#if HAVE_IDXGIOUTPUT5 +user32_module = dlopen("user32.dll", 0); +if (!user32_module) { +av_log(avctx, AV_LOG_ERROR, "Failed loading user32.dll\n"); +return AVERROR_EXTERNAL; +} + +set_thread_dpi = (set_thread_dpi_t)dlsym(user32_module, "SetThreadDpiAwarenessContext"); + +if (set_thread_dpi) +hr = IDXGIOutput_QueryInterface(dxgi_output, &IID_IDXGIOutput5, (void**)&dxgi_output5); + +if (set_thread_dpi && SUCCEEDED(hr)) { DPI_AWARENESS_CONTEXT prev_dpi_ctx; DXGI_FORMAT formats[] = { DXGI_FORMAT_R10G10B10A2_UNORM, @@ -197,7 +212,7 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) IDXGIOutput_Release(dxgi_output); dxgi_output = NULL; -prev_dpi_ctx = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); +prev_dpi_ctx = set_thread_dpi(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); if (!prev_dpi_ctx) av_log(avctx, AV_LOG_WARNING, "Failed enabling DPI awareness for DDA\n"); @@ -211,8 +226,18 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) dxgi_output5 = NULL; if (prev_dpi_ctx) -SetThreadDpiAwarenessContext(prev_dpi_ctx); +set_thread_dpi(prev_dpi_ctx); + +dlclose(user32_module); +user32_module = NULL; +set_thread_dpi = NULL; + +av_log(avctx, AV_LOG_DEBUG, "Using IDXGIOutput5 interface\n"); } else { +dlclose(user32_module); +user32_module = NULL; +set_thread_dpi = NULL; + av_log(avctx, AV_LOG_DEBUG, "Falling back to IDXGIOutput1\n"); #else { ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/wrapped_avframe: Don't presume AVPacket to be writable
ffmpeg | branch: master | Andreas Rheinhardt | Mon Jul 18 19:26:58 2022 +0200| [d72a671c601ae1c7969ab17e2f931b6807add3b9] | committer: Andreas Rheinhardt avcodec/wrapped_avframe: Don't presume AVPacket to be writable It need not be writable; in fact, it is often not writable even if the packet sent to the decoder was writable, because the generic code calls av_packet_ref() on it. It is never writable if a user drains the decoder after every packet, because in this case the decode callback is called from avcodec_send_packet(). Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d72a671c601ae1c7969ab17e2f931b6807add3b9 --- libavcodec/wrapped_avframe.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/wrapped_avframe.c b/libavcodec/wrapped_avframe.c index 3d2137ccbf..def29a9060 100644 --- a/libavcodec/wrapped_avframe.c +++ b/libavcodec/wrapped_avframe.c @@ -92,7 +92,9 @@ static int wrapped_avframe_decode(AVCodecContext *avctx, AVFrame *out, in = (AVFrame*)pkt->data; -av_frame_move_ref(out, in); +err = av_frame_ref(out, in); +if (err < 0) +return err; err = ff_decode_frame_props(avctx, out); if (err < 0) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/wrapped_avframe: Don't leak frame metadata, side-data
ffmpeg | branch: master | Andreas Rheinhardt | Mon Jul 18 18:48:15 2022 +0200| [425b309fa43236f4b7c098c7829b70a421fc1dd7] | committer: Andreas Rheinhardt avcodec/wrapped_avframe: Don't leak frame metadata, side-data wrapped_avframe_decode() uses an AVFrame as dst in av_frame_move_ref() after having called ff_decode_frame_props() to attach side-date to this very frame. This leaks all the side-data and metadata that ff_decode_frame_props() has attached. This happens in various fate-filter-metadata tests since 6ca43a9675d651d7ea47c7ba2fafb1bf831c4d0b. These particular leaks (which affect metadata-only) could be fixed by not adding metadata side-data to AVPackets in libavdevice if they are also available from the AVFrames. Yet this would break users that extract the metadata from AVPackets. The changes to FATE happen because of the way av_dict_set() works when it overwrites an already existing entry: It overwrites the entry to be overwritten with the last entry and adds the new entry at the end. The end result is that the first entry of the dict is the second-to-last-entry of the original dict, the last entry of the dict is the last entry of the old dict and the first count - 2 entries of the original dict are at positions 1..count - 2 in their original order. Reviewed-by: Timo Rothenpieler Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=425b309fa43236f4b7c098c7829b70a421fc1dd7 --- libavcodec/wrapped_avframe.c | 4 +- tests/ref/fate/filter-metadata-cropdetect | 60 +++--- tests/ref/fate/filter-metadata-freezedetect| 4 +- tests/ref/fate/filter-metadata-scdet | 22 tests/ref/fate/filter-metadata-signalstats-yuv420p | 2 +- .../ref/fate/filter-metadata-signalstats-yuv420p10 | 2 +- 6 files changed, 47 insertions(+), 47 deletions(-) diff --git a/libavcodec/wrapped_avframe.c b/libavcodec/wrapped_avframe.c index 4e4fd06816..3d2137ccbf 100644 --- a/libavcodec/wrapped_avframe.c +++ b/libavcodec/wrapped_avframe.c @@ -92,12 +92,12 @@ static int wrapped_avframe_decode(AVCodecContext *avctx, AVFrame *out, in = (AVFrame*)pkt->data; +av_frame_move_ref(out, in); + err = ff_decode_frame_props(avctx, out); if (err < 0) return err; -av_frame_move_ref(out, in); - *got_frame = 1; return 0; } diff --git a/tests/ref/fate/filter-metadata-cropdetect b/tests/ref/fate/filter-metadata-cropdetect index 104acdd77f..f3e1865abd 100644 --- a/tests/ref/fate/filter-metadata-cropdetect +++ b/tests/ref/fate/filter-metadata-cropdetect @@ -1,33 +1,33 @@ pts=0| pts=400 -pts=800|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=1200|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=1600|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=2000|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=2400|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=2800|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=3200|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=3600|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=4000|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=4400|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68 -pts=4800|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=6
[FFmpeg-cvslog] avcodec: Add FF_CODEC_CAP_NOT_INIT_THREADSAFE
ffmpeg | branch: master | Andreas Rheinhardt | Sat Jul 9 22:25:41 2022 +0200| [6aad1204ccea90113d19a8b829c8b81891f9474e] | committer: Andreas Rheinhardt avcodec: Add FF_CODEC_CAP_NOT_INIT_THREADSAFE This is in preparation of switching the default init-thread-safety to a codec being init-thread-safe. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6aad1204ccea90113d19a8b829c8b81891f9474e --- libavcodec/amfenc_h264.c| 3 ++- libavcodec/amfenc_hevc.c| 3 ++- libavcodec/codec_internal.h | 7 +++ libavcodec/crystalhd.c | 3 ++- libavcodec/cuviddec.c | 3 ++- libavcodec/libaomdec.c | 3 ++- libavcodec/libaomenc.c | 3 ++- libavcodec/libaribb24.c | 1 + libavcodec/libcelt_dec.c| 1 + libavcodec/libcodec2.c | 2 ++ libavcodec/libdavs2.c | 3 ++- libavcodec/libfdk-aacenc.c | 1 + libavcodec/libgsmdec.c | 2 ++ libavcodec/libgsmenc.c | 2 ++ libavcodec/libilbc.c| 2 ++ libavcodec/libjxldec.c | 3 ++- libavcodec/libjxlenc.c | 3 ++- libavcodec/libmp3lame.c | 1 + libavcodec/libopencore-amr.c| 3 +++ libavcodec/libopenjpegdec.c | 1 + libavcodec/libopenjpegenc.c | 1 + libavcodec/libopusdec.c | 3 ++- libavcodec/libopusenc.c | 1 + libavcodec/librav1e.c | 3 ++- libavcodec/libshine.c | 1 + libavcodec/libspeexdec.c| 1 + libavcodec/libspeexenc.c| 1 + libavcodec/libsvtav1.c | 3 ++- libavcodec/libtheoraenc.c | 1 + libavcodec/libtwolame.c | 1 + libavcodec/libuavs3d.c | 3 ++- libavcodec/libvo-amrwbenc.c | 1 + libavcodec/libvorbisdec.c | 1 + libavcodec/libvorbisenc.c | 1 + libavcodec/libvpxdec.c | 6 -- libavcodec/libvpxenc.c | 6 -- libavcodec/libwebpenc.c | 1 + libavcodec/libwebpenc_animencoder.c | 1 + libavcodec/libx264.c| 7 ++- libavcodec/libx265.c| 3 ++- libavcodec/libxavs.c| 3 ++- libavcodec/libxavs2.c | 3 ++- libavcodec/libzvbi-teletextdec.c| 1 + libavcodec/mediacodecdec.c | 3 ++- libavcodec/mmaldec.c| 3 ++- libavcodec/nvenc_h264.c | 3 ++- libavcodec/nvenc_hevc.c | 3 ++- libavcodec/qsvdec.c | 1 + libavcodec/qsvenc_h264.c| 3 ++- libavcodec/qsvenc_hevc.c| 3 ++- libavcodec/qsvenc_jpeg.c| 1 + libavcodec/qsvenc_mpeg2.c | 3 ++- libavcodec/qsvenc_vp9.c | 3 ++- libavcodec/rkmppdec.c | 1 + libavcodec/v4l2_m2m_dec.c | 3 ++- libavcodec/v4l2_m2m_enc.c | 3 ++- libavcodec/vaapi_encode_h264.c | 3 ++- libavcodec/vaapi_encode_h265.c | 3 ++- libavcodec/vaapi_encode_mjpeg.c | 3 ++- libavcodec/vaapi_encode_mpeg2.c | 3 ++- libavcodec/vaapi_encode_vp8.c | 3 ++- libavcodec/vaapi_encode_vp9.c | 3 ++- 62 files changed, 117 insertions(+), 37 deletions(-) diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index efb04589f6..eba8c23cdd 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -391,7 +391,8 @@ const FFCodec ff_h264_amf_encoder = { .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, -.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, +.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 8ab9330730..583e39 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -323,7 +323,8 @@ const FFCodec ff_hevc_amf_encoder = { .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, -.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, +.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 5df286ce52..a90c19d61a 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -29,6 +29,13 @@ * allowing to call the init function without locking any global mutexes. */ #define FF_CODEC_CAP_INIT_THREADSAFE(1 << 0) +/** + * The codec is not known to be init-threadsafe (i.e. it might be unsafe + * to initialize this codec and another codec concurrent
[FFmpeg-cvslog] avcodec/pnmdec: Mark PHM decoder as init-threadsafe
ffmpeg | branch: master | Andreas Rheinhardt | Sat Jul 9 21:12:49 2022 +0200| [c597510434f2950df09d218106279c880bdc146c] | committer: Andreas Rheinhardt avcodec/pnmdec: Mark PHM decoder as init-threadsafe Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c597510434f2950df09d218106279c880bdc146c --- libavcodec/pnmdec.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/pnmdec.c b/libavcodec/pnmdec.c index bb2ce53496..f012ed288b 100644 --- a/libavcodec/pnmdec.c +++ b/libavcodec/pnmdec.c @@ -513,5 +513,6 @@ const FFCodec ff_phm_decoder = { .priv_data_size = sizeof(PNMContext), .init = phm_dec_init, FF_CODEC_DECODE_CB(pnm_decode_frame), +.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] Changelog: move ddagrab addition to correct version
ffmpeg | branch: master | Timo Rothenpieler | Mon Jul 18 13:52:48 2022 +0200| [90810bb37cf7076074acf5a9c5a24feaaaf87bc9] | committer: Timo Rothenpieler Changelog: move ddagrab addition to correct version > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=90810bb37cf7076074acf5a9c5a24feaaaf87bc9 --- Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Changelog b/Changelog index 0ceb878bee..f9cd44f184 100644 --- a/Changelog +++ b/Changelog @@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. version : - Radiance HDR image support +- ddagrab (Desktop Duplication) video capture filter version 5.1: @@ -29,7 +30,6 @@ version 5.1: - PHM image format support - remap_opencl filter - added chromakey_cuda filter -- ddagrab (Desktop Duplication) video capture filter version 5.0: ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avfilter/vsrc_ddagrab: fix checkheaders error
ffmpeg | branch: master | Timo Rothenpieler | Mon Jul 18 13:08:39 2022 +0200| [cb22d5ea3c30194ac35cd16639dbb572ca30f8d3] | committer: Timo Rothenpieler avfilter/vsrc_ddagrab: fix checkheaders error > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cb22d5ea3c30194ac35cd16639dbb572ca30f8d3 --- libavfilter/vsrc_ddagrab_shaders.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavfilter/vsrc_ddagrab_shaders.h b/libavfilter/vsrc_ddagrab_shaders.h index 0305f8de1c..894cba88b4 100644 --- a/libavfilter/vsrc_ddagrab_shaders.h +++ b/libavfilter/vsrc_ddagrab_shaders.h @@ -19,6 +19,8 @@ #ifndef AVFILTER_VSRC_DDAGRAB_SHADERS_H #define AVFILTER_VSRC_DDAGRAB_SHADERS_H +#include + #if 0 cbuffer PARAMS : register ( b0 ) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".