ConvertToXXXX function¶
RGB interleaved (packed)
ConvertToRGB(clip [, string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToRGB24(clip [, string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToRGB32(clip [, string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToRGB48(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToRGB64(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
RGB planar
ConvertToPlanarRGB(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToPlanarRGBA(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
YUV444, YUVA444
ConvertToYV24(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUV444(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUVA444(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample, float param1, float param2, float param3,
int bits, bool quality] )
YUV422, YUVA422
ConvertToYV16(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement
float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUV422(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUVA422(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
YUY2
ConvertToYUY2(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
ConvertBackToYUY2(clip [, string matrix ] )
YUV420, YUVA420
ConvertToYV12(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUV420(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUVA420(clip, [ string matrix, bool interlaced,
string ChromaInPlacement,
string chromaresample,
string ChromaOutPlacement,
float param1, float param2, float param3,
int bits, bool quality] )
YUV411
ConvertToYV411(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample,
float param1, float param2, float param3,
int bits, bool quality] )
ConvertToYUV411(clip [, bool interlaced, string matrix,
string ChromaInPlacement,
string chromaresample,
float param1, float param2, float param3,
int bits, bool quality] )
(the 2nd one is just an alias)
Y-only
ConvertToY8(clip [, string matrix, int bits, bool quality] )] )
ConvertToY(clip [, string matrix, int bits, bool quality] ) ] )
Color formats¶
The following formats can be converted to and from.
Notes:
Interleaved RGB formats (RGB24/32/48/64) are kept for compatibility, they come with fixed 8 and 16 bits.
The successor RGB format is planar RGB/RGBA, which support any Avisynth+ high bit depth format.
8 bit YUV formats has their own old names, but can be written in the generic naming convention: YV12=YUV420P8, YV16=YUV422P8, YV24=YUV444P8
If possible, avoid using YUY2 which is kept for compatibility. Use YV16 instead. YUY2 is always 8-bit and packed; YV16 is the planar equivalent supporting all bit depths and is handled more efficiently throughout the filter chain.
Color formats |
Bit depth |
Sample ratio |
Description |
planar/ interleaved |
|||
|---|---|---|---|---|---|---|---|
RGB24, RGB48 |
8, 16 |
4:4:4 |
full chroma |
interleaved |
|||
RGB32, RGB64 |
8, 16 |
4:4:4:4 |
full chroma + alpha |
interleaved |
|||
RGBPxx |
8-16, 32 |
4:4:4 |
full chroma - known as planar RGB |
planar |
|||
RGBAPxx |
8-16, 32 |
4:4:4:4 |
full chroma + alpha - known as planar RGBA |
planar |
|||
YV24,YUV444Pxx |
8-16, 32 |
4:4:4 |
full chroma |
planar |
|||
YUVA444Pxx |
8-16, 32 |
4:4:4:4 |
full chroma + alpha |
planar |
|||
YV16,YUV422Pxx |
8-16, 32 |
4:2:2 |
chroma shared between 2 pixels |
planar |
|||
YUVA422Pxx |
8-16, 32 |
4:2:2:4 |
chroma shared between 2 pixels + alpha |
planar |
|||
YV12,YUV420Pxx |
8-16, 32 |
4:2:0 |
chroma shared between 2x2 pixels |
planar |
|||
YUVA420Pxx |
8-16, 32 |
4:2:0:4 |
chroma shared between 2x2 pixels + alpha |
planar |
|||
YV411,YUV411P8 |
8 |
4:1:1 |
chroma shared between 4 pixels |
planar |
|||
Y8,Y10-16,Y32 |
8-16, 32 |
4:0:0 |
no chroma |
both |
|||
YUY2 |
8 |
4:2:2 |
chroma shared between 2 pixels. Deprecated format, use YV16 |
interleaved |
|||
xx refers to the bit depth, where 8-16 = 8,10,12,14,16 bit integer; S or 32 is the 32 bit float. Use "S" in format names, except for Y, where Y32 is used. |
|||||||
When the target format is the same as the source format, the original clip will be returned unchanged,
except for the cases where the ChromaInPlacement and ChromaOutPlacement parameters are different,
or the target placement is different from the source chroma placement read from _ChromaLocation frame property.
Such functions are ConvertToYV12/ConvertToYUV420/ConvertToYUVA420 or
ConvertToYV16/ConvertToYUV422/ConvertToYUVA422.
ConvertToRGB (without numeric suffix) is adaptive:
Packed RGB source (RGB24/32/48/64): returned unchanged.
Planar RGB source: converted to the matching packed format, preserving bit depth and alpha capability. PlanarRGBA converts to RGB32/64 (with alpha); PlanarRGB converts to RGB24/48 (without alpha).
YUV 8-bit source: converted to RGB32.
YUV 16-bit source: converted to RGB64.
YUV 10/12/14-bit or float source: not supported; use
ConvertToRGB64orConvertToPlanarRGBexplicitly, or reduce bit depth withConvertBits(8)/ConvertBits(16)first.
The bits parameter (8 or 16) overrides ConvertToRGB's adaptive target bit depth,
allowing for example a 16-bit source to be converted to an 8-bit packed
RGB output. Values other than 8 or 16 are not accepted.
For explicit control of output format use ConvertToRGB24,
ConvertToRGB32, ConvertToRGB48 or ConvertToRGB64.
Syntax and operation of ConvertToRGB24 is identical to ConvertToRGB,
except that the output format is 24-bit; if the source is RGB32 or planar RGBA,
the alpha channel will be stripped.
ConvertBackToYUY2 is kept for backward compatibility with 2.5x scripts.
It is now equivalent to ConvertToYUY2. It was an old hack. See "History" section at the end of this document.
There is no unique way of converting YUV to RGB or vice-versa. There are different conversion matrices in use. The following should be correct in most cases, see here for more.
Rec.601 should be used when your source is standard definition (usually defined as smaller than 720p):
ConvertToRGB(clip) (using default "Rec601")Rec.709 should be used when your source is DVD or HDTV:
ConvertToRGB(clip, matrix="Rec709")The special-purpose matrices PC.601 and PC.709 keep the range unchanged (!), instead of converting between 0d-255d RGB and 16d-235d YUV, as is the normal practice. Note that if you want to convert from Y and no
_ColorRangeframe property present then it will treat it as limited range.The special-purpose matrix AVERAGE is used for (rarely found) sources with unweighted luma, where
Y = (R + G + B) / 3.
How conversion detects whether full or limited (narrow range for RGB) conversion needed:
Avisynth can use the
_ColorRangeframe property to detect whether the source clip is of full or limited (narrow) range.If frame property
_ColorRangeis not present, thenfullfor RGB sourceslimitedfor YUV or Y (greyscale) sources
is assumed.
Along with frame properties, the matrix string can contain additional "hints", such as
:f,:l, ,:auto,:same.When no other hint is given, some old-style Avisynth matrix name can specify limited/full: e.g.
"Rec.709"implies limited range. Note: unlikePC.709orPC.601: these matrix names do not force the clip being full or limited.
See also: ConvertBits to convert between bit depths and/or between full-limited range.
Syntax and parameters¶
- matrix
string matrix = "Rec601"Controls the colour coefficients and scaling factors used in colour space conversions.
Old-style constants (still valid):
These names remain fully supported for backward compatibility.
"Rec601": Rec.601 coefficients; limited-range YUV ↔ full-range RGB."Rec709": Rec.709 (HD) coefficients; limited-range YUV ↔ full-range RGB."Rec2020": Rec.2020 (UHD) coefficients; limited-range YUV ↔ full-range RGB."PC.601","PC601": Rec.601 coefficients; range unchanged (passes through as-is)."PC.709","PC709": Rec.709 (HD) coefficients; range unchanged."PC.2020","PC2020": Rec.2020 (UHD) coefficients; range unchanged."Average": Averaged luma (Y = (R+G+B)/3); range unchanged.
Using old-style matrix names implies the full/limited range behaviour described above.
PC.601,PC.709andPC.2020do not force a range conversion: the input range is passed through to the output unchanged, equivalent to the new-style":same"modifier (see below).New-style syntax:
Two forms are available:
"matrixname[:rangehint]" "matrixname:rangehint=>matrixname:rangehint"
The first (single) form covers all common RGB ↔ YUV conversions. The second (two-part) form is required when independent control of both sides is needed, in particular for YUV → YUV conversions or when the RGB side needs an explicit range different from its default.
matrixname can be one of:
Name
Int
Description
rgb0
Identity / RGB (valid on either side of
=>)7091
BT.709 (HD)
unspec2
Unspecified
470bg5
BT.470 BG (same coefficients as Rec.601)
6015
Alias for
470bgfcc4
BT.470 M / FCC
bt470m4
Alias for
fcc170m6
SMPTE 170M
240m7
SMPTE 240M
2020ncl9
BT.2020 Non-Constant Luminance
20209
Alias for
2020ncl2020cl10
BT.2020 Constant Luminance (treated as NCL internally)
ycgco8
YCgCo (not supported)
chromancl12
Chromaticity Derived NCL (not supported)
chromacl13
Chromaticity Derived CL (not supported)
ictcp14
ICtCp (not supported)
rangehint specifies the colour range for that side of the conversion:
fullorf— force full rangelimitedorl— force limited rangeauto— use_ColorRangeframe property if present, otherwise usethe format default (full for RGB, limited for YUV/Y)
same— output side only in the two-part form; copies the resolvedinput range to the output. Invalid on the input (left) side.
When no rangehint is given at all,
autobehaviour applies.Single form — the range hint refers to the YUV side:
In the single
"matrixname:rangehint"form the range hint always describes the YUV side of the conversion, whichever side that is:YUV → RGB: the hint describes the input (YUV) range. The RGB output defaults to full range independently of the hint.
RGB → YUV: the hint describes the output (YUV) range. The RGB input defaults to full range independently of the hint, unless overridden by a
_ColorRangeframe property on the source.
This means
"709:l"is unambiguous regardless of direction: the YUV side is limited, using BT.709 coefficients. The RGB side resolves its range independently.The special value
samein the single form propagates from the input to the output, regardless of direction. For YUV → RGB, the YUV input range (from frame property or default) is copied to the RGB output. For RGB → YUV, the RGB input range is copied to the YUV output. In both cases the net effect is range pass-through, equivalent to the legacyPC.709/PC.601behaviour.Note
For RGB → YUV with an explicit range hint, the hint sets the YUV output range only. The RGB input range is always resolved independently from the
_ColorRangeframe property (defaulting to full if absent) and cannot be overridden by the hint. Use the two-part form if you need to declare both sides explicitly.Two-part form
"matrixname:rangehint=>matrixname:rangehint":Both sides must specify a matrixname and a rangehint. No implicit defaults apply across the
=>. Thesamemodifier is only valid on the right (output) side; using it on the left side is an error.This form is used when:
A YUV → YUV conversion is needed. Internally the two matrices are combined and applied as a single pass in the 32-bit float unclipped domain, so any out-of-range RGB intermediate values that would arise from a naïve chained conversion are handled safely without clipping artefacts.
YUV→RGB→YUV conversion using the specified matrix and range for each leg:
ConvertToYUV444(clip, matrix="601:l=>709:l") # SD limited input, HD limited output ConvertToYUV444(clip, matrix="709:auto=>2020:same") # detect input range from frame prop; output matches resolved input range ConvertToYUV444(clip, matrix="709:f=>709:l") # full-range YUV input, limited-range YUV output, same matrix
An RGB side range needs to be declared explicitly, overriding the default. The matrixname
"rgb"is valid on either side:ConvertToPlanarRGB(clip, matrix="709:auto=>rgb:limited") # detect YUV input range from frame prop; RGB output is forced limited ConvertToYUV444(clip, matrix="rgb:limited=>709:l") # explicitly declare limited RGB input; limited YUV output
Note
In the two-part form,
sameon the right side resolves relative to the left side's resolved range, not relative to the source clip's format default. For example,"709:f=>2020:same"produces full-range output because the left side resolved to full, regardless of what the default for the output format would otherwise be.Equivalence table — old-style names and their new-style equivalents:
Old name
New equivalent
Notes
Rec601470bg:llimited YUV ↔ full RGB
Rec709709:llimited YUV ↔ full RGB
Rec20202020ncl:llimited YUV ↔ full RGB
PC.601470bg:samerange preserved
PC.709709:samerange preserved
PC.20202020ncl:samerange preserved
Averageaverageno standard
_MatrixequivalentRange detection defaults summary:
Side
Default range
Notes
YUV / Y input
limited
overridden by
_ColorRangeframe propYUV / Y output
limited
overridden by rangehint or
sameor two-part formRGB input
full
overridden by
_ColorRangeframe propRGB output
full
overridden by
sameor two-part form
- interlaced
bool interlaced = false
If true, it is assumed that clip is interlaced; by default, it is assumed to be progressive. This option is needed because for example, the following (assuming clip is interlaced YV12):
SeparateFields(clip) ConvertToYV16 Weave
...is upsampled incorrectly. Instead it is better to use:
ConvertToYV16(clip, interlaced=true)
Note, interlaced=true has an effect only on YV12 <-> YV16/YUY2 or YV12 <-> RGB conversions. (and their high bit depth equivalents). More about that can be found here: Color conversions and interlaced / field-based video.
- ChromaInPlacement, ChromaOutPlacement
string ChromaInPlacement = "MPEG2"
string ChromaOutPlacement = "MPEG2"
ChromaInPlacement determines the chroma placement in the clip when converting from YV12/YUV420 or YV16/YUV422. ChromaOutPlacement determines the chroma placement in the clip when converting to YV12/YUV420 or YV16/YUV422.
The placement can be one of these strings:
"MPEG2"(synonyms:"left") Subsampling used in MPEG-2 4:2:x and most other formats. Chroma samples are located on the left pixel column of the group (default)."MPEG1"(synonyms:"jpeg","center") Subsampling used in MPEG-1 4:2:0. Chroma samples are located on the center of each group of 4 pixels."DV"Like MPEG-2, but U and V channels are co-sited vertically: V on the top row, and U on the bottom row. For 4:1:1, chroma is located on the leftmost column."top_left"Subsampling used in UHD 4:2:0. Chroma samples are located on the top left pixel column of the group.bottom_left4:2:0 onlybottom4:2:0 only
See also the Frame properties section below.
- chromaresample
string chromaresample = "bicubic"
Determines which chroma resampler is used in the conversion. Only used when the chroma resolutions of the source and target are different. All AviSynth resizers are allowed ("point", "bilinear", "bicubic", "lanczos", "lanczos4", "blackman", "spline16", "spline36", "spline64", "gauss" and "sinc", "sinpow", "sinclin2" and "userdefined2").
Default is "bicubic".
- param1, param2, param3
These 'float' type parameters can be the additional parameters for the chroma resamplers. Some resizer algorithms would need and can be fine tuned with up to 3 parameters. Their default values depend on the selected chromaresample resizer kernel,
- bits
Used to perform output bit-depth conversion. Between Planar RGB and YUV/Y formats the conversion is single-pass. When intermediate format conversion is needed (e.g. RGB64->YUV444P8 is RGB64->PlanarRGB16->YUV444P8, the bit-depth conversion occurs in the RGBP->YUV part.
Internal calculation methods of 8-16 bit sources (when conversion is needed)
Target Range
Internal Math
Internal Math (quality=true)
Output Handling
Full-range
32-bit float
32-bit float
Direct output
Limited-range → integer
S18.13 fixed-point
32-bit float
Truncated to target bit depth
Limited-range → float
S18.13 fixed-point
32-bit float
Converted to float (no truncation)
When
quality=true(see below), the S18.13 fixed-point path is replaced by 32-bit float processing regardless of target range or bit depth.Note: Limited-range to float conversion preserves the full precision of the S18.13 fixed-point calculation by converting directly to 32-bit float without the truncation that occurs with integer targets.
- quality
bool quality = falseOnly affects YUV (Y) - RGB conversions, where matrix operation is involved.
When
false(default), the internal calculation method is chosen automatically based on the target range and bit depth, as described in thebitstable above: full-range targets use 32-bit float, limited-range targets use the faster S18.13 scaled integer path.When
true, all internal processing is forced to 32-bit float regardless of target range or bit depth. This avoids the rounding that occurs when the S18.13 fixed-point path truncates to an integer target, at the cost of slightly more computation. Recommended when the output will undergo further processing and maximum precision is desired.
Frame properties¶
Since Avisynth v3.7.1 frame property (_ChromaLocation) support appears in selected filters (e.g. ConvertToYUV422). Property can be read and/or set. A frame property can replace default behaviour of location parameters and is set (or deleted) upon finishing conversion. Since a format without subsampling - such as 4:4:4 (YV24) - does not have chroma location, the property is deleted automatically when converting to YUV444 or RGB.
"ChromaInPlacement" rules:
if source has _ChromaLocation frame property it will be used else the default is "mpeg2" ("left")
if parameter is "auto" or not given at all, ChromaInLocation will be set to the above mentioned default value
if parameter is explicitely given, it will be used
"ChromaOutPlacement" rules:
default is "mpeg2" ("left")
if parameter is "auto" or not given at all, ChromaOutLocation will be set to the above mentioned default value
if parameter is explicitely given, it will be used
Accepted values for "ChromaInPlacement" and "ChromaOutPlacement" (when source/target is a chroma subsampled format) (full list):
"left" or "mpeg2"
"center" or "jpeg" or "mpeg1"
"top_left"
"dv"
"top"
"bottom_left"
"bottom"
_ChromaLocation constants - just for info: as seen in propShow
AVS_CHROMA_LEFT = 0
AVS_CHROMA_CENTER = 1
AVS_CHROMA_TOP_LEFT = 2 (4:2:0 only)
AVS_CHROMA_TOP = 3 (4:2:0 only)
AVS_CHROMA_BOTTOM_LEFT = 4 (4:2:0 only)
AVS_CHROMA_BOTTOM = 5 (4:2:0 only)
AVS_CHROMA_DV = 6 Special to Avisynth
Conversion paths¶
The ChromaInPlacement, chromaresample and ChromaOutPlacement options are only used in the 'planar conversion part' of the conversion path, and they process the chroma of the clip.
The following conversion paths occur
411/420/422 YUV planar -> RGB via YUV444
YUV planar -> YUY2 via YV16 (8 bit YUV422)
YUV planar -> Y: direct
Planar RGB -> 444: direct
Planar RGB -> Y planar: direct
Packed RGB -> Y/YUV planar: via Planar RGB(A) (A: depending on the target YUV's alpha-needs)
Any RGB -> 411/420/422 YUV planar via YUV444
YUY2 -> Y: direct
YUY2 -> Any: via YV16
Any -> YUY2: via YV16
YV24 -> packed RGB24/32: (quality=false): direct conversion.
YV24 -> packed RGB24/32: (quality=true): via planar RGB.
YUV planar -> packed RGB48/64: via planar RGB
When bit depth change needed, and the transformation does not integrate bit-depth conversion (E.g. clipYUV.ConvertToPlanarRGB(bits=xxx) does include, but clipY8bit.ConvertToY(bits=yyy) does not). then an extra ConvertBits() is called internally.
Suppose you have a YUY2 clip for example and you convert it to YV24.
The YUY2 will be converted to YV16 first without applying ChromaInPlacement, chromaresample and ChromaOutPlacement.
Then YV16 will be converted to YV24 while applying chromaresample. ChromaOutPlacement won't be used since our target is YV24.
History¶
ConvertBackToYUY2 was introduced in Avisynth 2.02 (circa 2002) as an explicit
workaround for a horizontal chroma shift introduced by ConvertToYUY2's 1-2-1
averaging kernel in the YUY2 → RGB → YUY2 roundtrip workflow that was common
before native YUV processing was available.
When Avisynth 2.50 added YV12 support, the YV12↔YUY2 conversion used XviD's
routines, which were later replaced in 2.51 with custom SSE/iSSE code using a
0.75/0.25 weighted vertical kernel — faster than a correct resampler but
geometrically wrong: it introduced a quarter-pixel vertical chroma shift for
progressive material, and asymmetric opposite-direction shifts for top and bottom
fields in interlaced material. This was diagnosed precisely by Gavino in 2009
(Doom9 thread #147629), who showed the round-trip kernel was [3,12,1]/16 and
[1,12,3]/16 for top and bottom fields respectively, where the correct MPEG-2
kernel would give [3,26,3]/32. The speed rationale for the approximation was
confirmed by Tritical: the double-pavgb trick with a subtract-one correction
was the fastest available implementation at the time.
When ConvertToPlanarGeneric was introduced with AviSynth+ (based on the 2.60
development work by IanB), the correct infrastructure — placement-aware resampling
with proper _ChromaLocation frame property handling — became available. However
the legacy fast-path shortcuts were preserved alongside it, meaning most scripts
continued to hit the old buggy kernels unless explicit options were passed.
In 3.7.6 the legacy direct conversion kernels are removed entirely. All
ConvertToYUY2 paths now route through YV16 via ConvertToPlanarGeneric,
giving correct chroma placement, full frame property support, and access to the
AVX2/AVX512 resampler paths in Intel. ConvertBackToYUY2 forwards to ConvertToYUY2;
the left-pixel-only hack is no longer needed since the YV16 lossless repack path
eliminates chroma resampling loss entirely for roundtrip workflows.
Sampling¶
This part of the documentation covers the sampling methods and color formats in more detail.
Color conversions¶
This page covers the color conversions, "YUV <-> RGB", in more detail.
Changes: |
|
|---|---|
v3.7.6 |
Add "quality" parameter to ConvertToXXXX
Add "bits" parameter to ConvertToXXXX
Document ":same" in matrix specifier
|
v3.7.3 |
Added "sinpow", "sinclin2" and "userdefined2" to
chromaresampler options
Add "param1", "param2" and "param3" to ConvertToXXXX where
'chromaresample' exists (b,c,s,taps and p parameters can
be set, depending on the resizer.)
Add ConvertToYUVA420, ConvertToYUVA422, ConvertToYUVA444
|
v3.7.1 |
Added ChromaOutPlacement to 4:2:2 related functions
Added new matrix constants, optional new syntax
Added new chroma location constants
Added _ChromaLocation frame property
|
v2.60 |
Added: ConvertToY8, ConvertToYV411,
ConvertToYV16, ConvertToYV24,
Added ChromaInPlacement, ChromaOutPlacement and
chromaresample, matrix="AVERAGE"
|
v2.50 |
ConvertToYV12 |
$Date: 2026/03/06 20:20:00 $