From 3845b56dd16fa3d1a168f3e8b7e3ac37ff78422e Mon Sep 17 00:00:00 2001 From: Alan Curry Date: Wed, 8 Feb 2006 13:14:19 +0000 Subject: altivec_yuv2packedX() ignores the requested output format and unconditionally outputs RGBA. This patch supports 6 output formats and prints an error message if it is asked to provide an output format it is not capable of. patch by Alan Curry, pacman_at_world_dot_std_dot_com Originally committed as revision 17561 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc --- postproc/yuv2rgb_altivec.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'postproc') diff --git a/postproc/yuv2rgb_altivec.c b/postproc/yuv2rgb_altivec.c index 69b5b302da..eea7134e96 100644 --- a/postproc/yuv2rgb_altivec.c +++ b/postproc/yuv2rgb_altivec.c @@ -867,7 +867,25 @@ altivec_yuv2packedX (SwsContext *c, G = vec_packclp (G0,G1); B = vec_packclp (B0,B1); - out_rgba (R,G,B,out); + switch(c->dstFormat) { + case IMGFMT_ABGR: out_abgr (R,G,B,out); break; + case IMGFMT_BGRA: out_bgra (R,G,B,out); break; + case IMGFMT_RGBA: out_rgba (R,G,B,out); break; + case IMGFMT_ARGB: out_argb (R,G,B,out); break; + case IMGFMT_RGB24: out_rgb24 (R,G,B,out); break; + case IMGFMT_BGR24: out_bgr24 (R,G,B,out); break; + default: + { + /* FIXME: either write more out_* macros or punt to yuv2packedXinC */ + static int printed_error_message; + if(!printed_error_message) { + MSG_ERR("altivec_yuv2packedX doesn't support %s output\n", + vo_format_name(c->dstFormat)); + printed_error_message=1; + } + return; + } + } } if (i < dstW) { @@ -927,7 +945,19 @@ altivec_yuv2packedX (SwsContext *c, B = vec_packclp (B0,B1); nout = (vector unsigned char *)scratch; - out_rgba (R,G,B,nout); + switch(c->dstFormat) { + case IMGFMT_ABGR: out_abgr (R,G,B,nout); break; + case IMGFMT_BGRA: out_bgra (R,G,B,nout); break; + case IMGFMT_RGBA: out_rgba (R,G,B,nout); break; + case IMGFMT_ARGB: out_argb (R,G,B,nout); break; + case IMGFMT_RGB24: out_rgb24 (R,G,B,nout); break; + case IMGFMT_BGR24: out_bgr24 (R,G,B,nout); break; + default: + /* Unreachable, I think. */ + MSG_ERR("altivec_yuv2packedX doesn't support %s output\n", + vo_format_name(c->dstFormat)); + return; + } memcpy (&((uint32_t*)dest)[i], scratch, (dstW-i)/4); } -- cgit v1.2.3