summaryrefslogtreecommitdiff
path: root/libavfilter/vf_scale_vulkan.c
Commit message (Collapse)AuthorAge
* lavfi/vf_scale_vulkan: fix buildrcombs2022-06-01
| | | | This was broken in d42b410e05ad1c4d6e74aa981b4a4423103291fb.
* avfilter/scale_vulkan: use RET for checking return valueWu Jianhua2022-02-22
| | | | Signed-off-by: Wu Jianhua <jianhua.wu@intel.com>
* avfilter/vf_scale_vulkan: align struct ScaleVulkanContextWu Jianhua2022-01-03
| | | | | | | | On 64 bit Operating System, sizeof(ScaleVulkanContext): reduce from 2400 to 2392 on Linux reduce from 2416 to 2408 on Windows Signed-off-by: Wu Jianhua <jianhua.wu@intel.com>
* avfilter/scale_vulkan: call av_vkfmt_from_pixfmt only one timeWu Jianhua2021-11-19
| | | | Signed-off-by: Wu Jianhua <jianhua.wu@intel.com>
* avfilter/scale_vulkan: call av_pix_fmt_count_planes only one timeWu Jianhua2021-11-19
| | | | Signed-off-by: Wu Jianhua <jianhua.wu@intel.com>
* avfilter/scale_vulkan: use FF_ARRAY_ELEMS instead of magic numberWu Jianhua2021-11-19
| | | | Signed-off-by: Wu Jianhua <jianhua.wu@intel.com>
* lavfi/vulkan: split off lavfi-specific code into vulkan_filter.cLynne2021-11-19
| | | | | | | | | | | | | | | | | The issue is that libavfilter depends on libavcodec, and when doing a static build, if libavcodec also includes "libavfilter/vulkan.c", then during link-time, compiling programs will fail as there would be multiple definitions of the same symbols in both libavfilter and libavcodec's object files. Linkers are, however, more permitting if both files that include a common file that's used as a template are one-to-one identical. Hence, to make both files the same in the future, export all avfilter specific functions to a separate file. There is some work in progress to make templated files like this be compiled only once, so this is not a long-term solution. This also removes a macro that could be used to toggle SPIRV compilation capability on #include-time, as this could cause the files to be different.
* lavu/vulkan: move common Vulkan code from libavfilter to libavutilLynne2021-11-19
|
* lavfi/vulkan: refactor, fix and fully implement multiple queuesLynne2021-11-12
|
* lavfi/glslang: migrate to the C API and robustify library detectionLynne2021-11-12
| | | | | | | | Finally, this is as close to usable as it gets for glslang. Much faster to compile as well, and eliminates the need for a C++ compiler, which is great. Also, changes to the resource limits won't break users, as we can use designated initializers in C90.
* lavfi/vulkan: use libavutil's vulkan loaderLynne2021-11-12
| | | | This finally fully eliminates the need to statically link to libvulkan!
* vulkan: add support for encode and decode queues and refactor queue codeLynne2021-11-12
| | | | | | | | | This simplifies and makes queue family picking simpler and more robust. The requirements on the device context are relaxed. They made no sense in the first place. The video encode/decode extension is still in beta, at least on paper, but I really doubt they'd change needing a separate queue family.
* avfilter/vulkan: Store format in filter, remove query functionAndreas Rheinhardt2021-10-05
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avfilter: Replace query_formats callback with union of list and callbackAndreas Rheinhardt2021-10-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If one looks at the many query_formats callbacks in existence, one will immediately recognize that there is one type of default callback for video and a slightly different default callback for audio: It is "return ff_set_common_formats_from_list(ctx, pix_fmts);" for video with a filter-specific pix_fmts list. For audio, it is the same with a filter-specific sample_fmts list together with ff_set_common_all_samplerates() and ff_set_common_all_channel_counts(). This commit allows to remove the boilerplate query_formats callbacks by replacing said callback with a union consisting the old callback and pointers for pixel and sample format arrays. For the not uncommon case in which these lists only contain a single entry (besides the sentinel) enum AVPixelFormat and enum AVSampleFormat fields are also added to the union to store them directly in the AVFilter, thereby avoiding a relocation. The state of said union will be contained in a new, dedicated AVFilter field (the nb_inputs and nb_outputs fields have been shrunk to uint8_t in order to create a hole for this new field; this is no problem, as the maximum of all the nb_inputs is four; for nb_outputs it is only two). The state's default value coincides with the earlier default of query_formats being unset, namely that the filter accepts all formats (and also sample rates and channel counts/layouts for audio) provided that these properties agree coincide for all inputs and outputs. By using different union members for audio and video filters the type-unsafety of using the same functions for audio and video lists will furthermore be more confined to formats.c than before. When the new fields are used, they will also avoid allocations: Currently something nearly equivalent to ff_default_query_formats() is called after every successful call to a query_formats callback; yet in the common case that the newly allocated AVFilterFormats are not used at all (namely if there are no free links) these newly allocated AVFilterFormats are freed again without ever being used. Filters no longer using the callback will not exhibit this any more. Reviewed-by: Paul B Mahol <onemda@gmail.com> Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avfilter/avfilter: Add numbers of (in|out)pads directly to AVFilterAndreas Rheinhardt2021-08-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Up until now, an AVFilter's lists of input and output AVFilterPads were terminated by a sentinel and the only way to get the length of these lists was by using avfilter_pad_count(). This has two drawbacks: first, sizeof(AVFilterPad) is not negligible (i.e. 64B on 64bit systems); second, getting the size involves a function call instead of just reading the data. This commit therefore changes this. The sentinels are removed and new private fields nb_inputs and nb_outputs are added to AVFilter that contain the number of elements of the respective AVFilterPad array. Given that AVFilter.(in|out)puts are the only arrays of zero-terminated AVFilterPads an API user has access to (AVFilterContext.(in|out)put_pads are not zero-terminated and they already have a size field) the argument to avfilter_pad_count() is always one of these lists, so it just has to find the filter the list belongs to and read said number. This is slower than before, but a replacement function that just reads the internal numbers that users are expected to switch to will be added soon; and furthermore, avfilter_pad_count() is probably never called in hot loops anyway. This saves about 49KiB from the binary; notice that these sentinels are not in .bss despite being zeroed: they are in .data.rel.ro due to the non-sentinels. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avfilter: Constify all AVFiltersAndreas Rheinhardt2021-04-27
| | | | | | | This is possible now that the next-API is gone. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: James Almer <jamrial@gmail.com>
* lavfi/vulkan: use av_get_random_seed instead of randLynne2020-05-29
| | | | | | | | We need at least a few bits of entropy to determine the start index of each queue, in order to let filters run in parallel as much as possible, and rand() is not thread safe and disrupts any external API's usage of rand, so instead replace it with av_get_random_seed. While it has more overhead than rand, we only run it once per filter upon init.
* lavfi/vulkan: use all enabled queues in the queue familyLynne2020-05-23
| | | | | This should significantly improve the performance with certain filterchains.
* scale_vulkan: take frame cropping parameters in account when scalingLynne2020-04-23
| | | | | Then sample_aspect_ratio line at the bottom was cargo-culted from the vaapi scaling filter, but its unnecesary.
* scale_vulkan: correctly copy the colormatrixLynne2020-04-06
|
* scale_vulkan: add support for RGB->YUV conversionsLynne2020-03-17
| | | | Only top-left chroma position supported for now.
* lavfi: add an scale_vulkan filterLynne2020-02-04
This commit adds a basic, non-converting Vulkan scaling filter.