Files
ffmpeg/libavcodec/vulkan/prores_reset.comp
averne 98412edfed lavc: add a ProRes Vulkan hwaccel
Add a shader-based Apple ProRes decoder.
It supports all codec features for profiles up to
the 4444 XQ profile, ie.:
- 4:2:2 and 4:4:4 chroma subsampling
- 10- and 12-bit component depth
- Interlacing
- Alpha

The implementation consists in two shaders: the
VLD kernel does entropy decoding for color/alpha,
and the IDCT kernel performs the inverse transform
on color components.

Benchmarks for a 4k yuv422p10 sample:
- AMD Radeon 6700XT:   178 fps
- Intel i7 Tiger Lake: 37 fps
- NVidia Orin Nano:    70 fps
2025-10-25 19:54:13 +00:00

39 lines
1.2 KiB
Plaintext

/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
void main(void)
{
uvec3 gid = gl_GlobalInvocationID;
#ifndef INTERLACED
ivec2 pos = ivec2(gid);
#else
ivec2 pos = ivec2(gid.x, (gid.y << 1) + bottom_field);
#endif
/* Clear luma plane */
imageStore(dst[0], pos, uvec4(0));
/* Clear chroma plane */
if (gid.x < mb_width << (4 - log2_chroma_w)) {
imageStore(dst[1], pos, uvec4(0));
imageStore(dst[2], pos, uvec4(0));
}
/* Alpha plane doesn't need a clear because it is not sparsely encoded */
}