/ \
special converter [Input to YUV converter]
| |
- | (8bit YUV 4:4:4 / 4:2:2 / 4:2:0 / 4:0:0 )
+ | (8-bit YUV 4:4:4 / 4:2:2 / 4:2:0 / 4:0:0 )
| |
| v
| Horizontal scaler
| |
- | (15bit YUV 4:4:4 / 4:2:2 / 4:2:0 / 4:1:1 / 4:0:0 )
+ | (15-bit YUV 4:4:4 / 4:2:2 / 4:2:0 / 4:1:1 / 4:0:0 )
| |
| v
| Vertical scaler and output converter
special converter
These generally are unscaled converters of common
- formats, like YUV 4:2:0/4:2:2 -> RGB15/16/24/32. Though it could also
+ formats, like YUV 4:2:0/4:2:2 -> RGB12/15/16/24/32. Though it could also
in principle contain scalers optimized for specific common cases.
Main path
Input to YUV Converter
When the input to the main path is not planar 8 bits per component YUV or
- 8-bit gray then it is converted to planar 8-bit YUV. 2 sets of converters
+ 8-bit gray, it is converted to planar 8-bit YUV. Two sets of converters
exist for this currently: One performs horizontal downscaling by 2
- before the conversion, the other leaves the full chroma resolution
+ before the conversion, the other leaves the full chroma resolution,
but is slightly slower. The scaler will try to preserve full chroma
- here when the output uses it. It is possible to force full chroma with
+ when the output uses it. It is possible to force full chroma with
SWS_FULL_CHR_H_INP even for cases where the scaler thinks it is useless.
Horizontal scaler
There are several horizontal scalers. A special case worth mentioning is
- the fast bilinear scaler that is made of runtime-generated MMX2 code
+ the fast bilinear scaler that is made of runtime-generated MMXEXT code
using specially tuned pshufw instructions.
The remaining scalers are specially-tuned for various filter lengths.
They scale 8-bit unsigned planar data to 16-bit signed planar data.
- Future >8 bits per component inputs will need to add a new scaler here
- that preserves the input precision.
+ Future >8 bits per component inputs will need to add a new horizontal
+ scaler that preserves the input precision.
Vertical scaler and output converter
There is a large number of combined vertical scalers + output converters.
Also, as already hinted at, initFilter() accepts an optional convolutional
filter as input that can be used for contrast, saturation, blur, sharpening
shift, chroma vs. luma shift, ...
-