• Philip Langdale's avatar
    lavu/pixfmt: Add P012, Y212, XV30, and XV36 formats · d75c4693
    Philip Langdale authored
    These are the formats we want/need to use when dealing with the Intel
    VAAPI decoder for 12bit 4:2:0, 12bit 4:2:2, 10bit 4:4:4 and 12bit 4:4:4
    respectively.
    
    As with the already supported Y210 and YUVX (XVUY) formats, they are
    based on formats Microsoft picked as their preferred 4:2:2 and 4:4:4
    video formats, and Intel ran with it.
    
    P12 and Y212 are simply an extension of 10 bit formats to say 12 bits
    will be used, with 4 unused bits instead of 6.
    
    XV30, and XV36, as exotic as they sound, are variants of Y410 and Y412
    where the alpha channel is left formally undefined. We prefer these
    over the alpha versions because the hardware cannot actually do
    anything with the alpha channel and respecting it is just overhead.
    
    Y412/XV46 is a normal looking packed 4 channel format where each
    channel is 16bits wide but only the 12msb are used (like P012).
    
    Y410/XV30 packs three 10bit channels in 32bits with 2bits of alpha,
    like A/X2RGB10 style formats. This annoying layout forced me to define
    the BE version as a bitstream format. It seems like our pixdesc
    infrastructure can handle the LE version being byte-defined, but not
    when it's reversed. If there's a better way to handle this, please
    let me know. Our existing X2 formats all have the 2 bits at the MSB
    end, but this format places them at the LSB end and that seems to be
    the root of the problem.
    d75c4693
pixfmt.h 38.3 KB