Hi, 2011/6/28 Måns Rullgård <[email protected]>: > "Ronald S. Bultje" <[email protected]> writes: > >> Hi, >> >> 2011/6/28 Måns Rullgård <[email protected]>: >>> The pixfmts_scale test fails with Altivec for several reasons: >>> >>> - yuv2yuvX_altivec_real() crashes writing nv12/nv21 since it assumes >>> there are either zero or two chroma planes. Adding a trivial check in >>> that function produces wrong output. >> >> See x86/swscale_template.c, the assignment should only be if pixfmt != >> NV21/12. NV21/12 output writing is obviously different than "regular" >> planar YUV, and thus the function does something else also. >> >>> - yuva420p output is wrong, unknown why. >> >> yuv2yuvX_altivec() doesn't handle alpha (at all). Should probably be >> included in the if() as mentioned above also. > > Like this? > > diff --git a/libswscale/ppc/swscale_altivec.c > b/libswscale/ppc/swscale_altivec.c > index 14f35b6..5e3c42d 100644 > --- a/libswscale/ppc/swscale_altivec.c > +++ b/libswscale/ppc/swscale_altivec.c > @@ -407,7 +407,9 @@ void ff_sws_init_swScale_altivec(SwsContext *c) > return; > > c->hScale = hScale_altivec_real; > - if (!is16BPS(dstFormat) && !is9_OR_10BPS(dstFormat)) { > + if (!is16BPS(dstFormat) && !is9_OR_10BPS(dstFormat) && > + dstFormat != PIX_FMT_NV12 && dstFormat != PIX_FMT_NV21 && > + dstFormat != PIX_FMT_YUVA420P) { > c->yuv2yuvX = yuv2yuvX_altivec_real; > } >
Yep. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
