Change #272498
| Category | ffmpeg |
| Changed by | Diego de Souza <ddesouza@nvidia.com> |
| Changed at | Wed 24 Jun 2026 14:18:15 |
| Repository | https://git.ffmpeg.org/ffmpeg.git |
| Project | ffmpeg |
| Branch | master |
| Revision | df94900c98f38b9bd9979ae6e6101ba21f15612d |
Comments
avfilter/cuda: support P012/P212 and MSB 4:4:4 in scale/transpose/thumbnail NVDEC and CUVID now output AV_PIX_FMT_P012 (12-bit 4:2:0), AV_PIX_FMT_P212 (12-bit 4:2:2) and AV_PIX_FMT_YUV444P10MSB / AV_PIX_FMT_YUV444P12MSB (10/12-bit 4:4:4) for high-bit-depth content, but these CUDA filters rejected the formats in their supported-format lists, breaking pipelines such as "-hwaccel cuda ... -vf scale_cuda" on 12-bit input. These formats use 16-bit sample storage, and the filters select their CUDA kernel by byte-storage size and plane layout, not by the number of valid bits, so they can reuse the existing 16-bit kernels: - scale_cuda: P012/P212 -> "semiplanar16", YUV444P10MSB/YUV444P12MSB -> "planar16". - transpose_cuda: the ushort/ushort2 kernels are chosen from the pixel descriptor (byte size + channel count); just allow the new formats. - thumbnail_cuda: P012 reuses the P010/P016 path and the MSB 4:4:4 formats reuse the YUV444P16 path; P012 is added to the 4:2:0 chroma-histogram scaling as well. (thumbnail has no 4:2:2 path, so P212 is not added.) The CUDA deinterlacers (bwdif_cuda, yadif_cuda) already accept any format with <= 2 bytes per sample and <= 2 channels, so they need no change. The 8-bit-only filters (overlay_cuda, pad_cuda, bilateral_cuda, chromakey_cuda, colorspace_cuda) do not support high bit depths and are left untouched. Signed-off-by: Diego de Souza <ddesouza@nvidia.com>
Changed files
- libavfilter/vf_scale_cuda.c
- libavfilter/vf_thumbnail_cuda.c
- libavfilter/vf_transpose_cuda.c