Change #286507
| Category | ffmpeg |
| Changed by | Zhao Zhili <zhilizhao@tencent.com> |
| Changed at | Fri 16 Oct 2026 15:13:51 |
| Repository | https://git.ffmpeg.org/ffmpeg.git |
| Project | ffmpeg |
| Branch | master |
| Revision | 9bbe8397e2c0e58e5bbe1e1e45ef10052b44b165 |
Comments
avfilter/vf_scale_cuda: add RGB to YUV color space conversion The output YCbCr matrix and range are negotiated, and selectable via the new out_color_matrix and out_range options. Without them, the output prefers BT.601 (SMPTE 170M) limited range, matching swscale behavior, while still following a single matrix and range negotiated for the input, as buffersrc does for ordinary YUV. Since RGB input is not constrained, RGB to YUV conversion defaults to BT.601 limited range; RGB output prefers full range without forcing it, so that it does not carry over into YUV output converted from it again. The output frames are tagged with the negotiated properties, and YUV output never carries the RGB tag of the input. As without a requested format the options are negotiated before the output is known to be RGB, they are rejected for RGB output. Without RGB to YUV conversion, the output description must not contradict that of the input, as the samples cannot be converted; an unspecified input takes on the negotiated description, also when frames are passed through. Chroma is averaged over each subsampled block before clamping, high bit depth output uses the code maximum for full range and keeps padding bits clear, and limited range YCgCo uses the luma excursion for chroma. The averaging centers the chroma samples, so with a requested format, the chroma location is negotiated independently of the input, and subsampled output must allow centered chroma. Co-authored-by: Timo Rothenpieler <timo@rothenpieler.org> Co-authored-by: Reinhard Nißl <rnissl@gmx.de> Assisted-By: Claude Opus 5.5
Changed files
- libavfilter/vf_scale_cuda.c
- libavfilter/vf_scale_cuda.cu
- libavfilter/vf_scale_cuda.h