[FFmpeg-devel] [PATCH v2 1/2] swscale: Replace illegal vector keyword usage in altivec code

Daniel Kolesa daniel at octaforge.org
Thu Aug 8 16:33:36 EEST 2019


On Thu, Aug 8, 2019, at 15:23, Daniel Kolesa wrote:
> On Thu, Aug 8, 2019, at 14:32, Carl Eugen Hoyos wrote:
> > Am Mi., 7. Aug. 2019 um 19:39 Uhr schrieb Daniel Kolesa <daniel at octaforge.org>:
> > >
> > > While this technically compiles in current ffmpeg, this is only
> > > because ffmpeg is compiled in strict ISO C mode, which disables
> > > the builtin 'vector' keyword for AltiVec/VSX. Instead this gets
> > > replaced with a macro inside altivec.h, which defines vector to
> > > be actually __vector, which accepts random types.
> > >
> > > Normally, the vector keyword should be used only with plain
> > > scalar non-typedef types, such as unsigned int. But we have the
> > > vec_(s|u)(8|16|32) macros, which can be used in a portable manner,
> > > in util_altivec.h in libavutil.
> > >
> > > This is also consistent with other AltiVec/VSX code elsewhere in
> > > the tree.
> > >
> > > Fixes #7861.
> > 
> > Since I cannot reproduce any issue with current FFmpeg on Power8
> > using gcc-8.3.1, at least the commit message has to be changed,
> > same for the other patch.
> 
> I don't see why that would need changing. For one, the commit message 
> for the first patch describes exactly what is wrong and also the reason 
> you can't reproduce it by default (which I also mentioned in the 
> ticket). I believe the second patch's reproducibility is limited to 
> more recent gcc (probably only 9.x series), it was reproduced by me, 
> the other person in the ticket, as well as the Fedora project (see 
> http://koji.rpmfusion.org/koji/taskinfo?taskID=341163).

For further reference, see the docs: https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/PowerPC-AltiVec_002fVSX-Built-in-Functions.html

---
GCC allows using a typedef name as the type specifier for a vector type, but only under the following circumstances:

    When using __vector instead of vector; for example,

    typedef signed short int16;
    __vector int16 data;

    When using vector in keyword-and-predefine mode; for example,

    typedef signed short int16;
    vector int16 data;

    Note that keyword-and-predefine mode is enabled by disabling GNU extensions (e.g., by using -std=c11) and including <altivec.h>.
---

That means you can easily reproduce the first patch by replacing -std=c11 with -std=gnu11 (or no -std). By default, ffmpeg compiles with -std=c11.

> 
> Regards
> 
> > 
> > Carl Eugen
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list