[FFmpeg-devel] [FFmpeg-cvslog] ffplay: only use hardware accelerated SDL texture formats

Marton Balint cus at passwd.hu
Tue Apr 17 22:50:15 EEST 2018



On Tue, 17 Apr 2018, Michael Niedermayer wrote:

> On Tue, Apr 17, 2018 at 01:27:48AM +0200, Marton Balint wrote:
>>
>>
>> On Mon, 16 Apr 2018, Michael Niedermayer wrote:
>>
>>> Hi
>>>
>>> On Sat, Nov 04, 2017 at 06:28:58PM +0000, Marton Balint wrote:
>>>> ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sat Oct 28 22:46:08 2017 +0200| [415038f2bd321a3b41564d4e0c6c17d7a096c397] | committer: Marton Balint
>>>>
>>>> ffplay: only use hardware accelerated SDL texture formats
>>>
>>> This breaks ffplay playing some files like:
>>> ./ffplay fate-suite//cvid/catfight-cvid-pal8-partial.mov -noframedrop
>>>
>>> The output is completely black since this commit
>>
>> Seems like a bug in swscale (pal8 -> bgra conversion), the alpha is 0
>> instead of 255.
>
> the file seems to store alpha = 0
> SDL seems to treat alpha=0 different between PAL8 and RGBA, or maybe iam
> missing something

Old code negotiated RGB24 format for render which silently dropped the 
alpha channel. This seems to be because of a bug in pick_format:

libavfilter/avfiltergraph.c, pick_format():
int has_alpha= av_pix_fmt_desc_get(ref->format)->nb_components % 2 == 0;

libavutil/pixdesc.c:
#define pixdesc_has_alpha(pixdesc) \
     ((pixdesc)->nb_components == 2 || (pixdesc)->nb_components == 4 || (pixdesc)->flags & AV_PIX_FMT_FLAG_PAL)


>
> try this:
>
> diff --git a/libavformat/qtpalette.c b/libavformat/qtpalette.c
> index 666c6b7351..51a134d30a 100644
> --- a/libavformat/qtpalette.c
> +++ b/libavformat/qtpalette.c
> @@ -104,6 +104,7 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
>                     avio_r8(pb);
>                     b = avio_r8(pb);
>                     avio_r8(pb);
> +                    a = 0xFF;
>                     palette[i] = (a << 24 ) | (r << 16) | (g << 8) | (b);
>                 }
>             }
>

Obviously this fixes it. Why do we think that the first value is 
alpha? Parsing it was added in 0d59ae32c23 but according to the QuickTime 
specs the first int16 should be simply 0, not alpha:

https://developer.apple.com/standards/qtff-2001.pdf
(page 36, top)

Regards,
Marton


More information about the ffmpeg-devel mailing list