From d61a4ab32e7b834996d394b2e8032680e05109ff Mon Sep 17 00:00:00 2001 From: lilo_booter Date: Wed, 29 Mar 2006 11:17:52 +0000 Subject: [PATCH] + Sigh - big endian issues on ppc based macs git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@903 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/framework/mlt_frame.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/framework/mlt_frame.h | 1 + 2 files changed, 43 insertions(+), 0 deletions(-) diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index 3028e2c..e178984 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -691,6 +691,48 @@ int mlt_convert_bgr24_to_yuv422( uint8_t *rgb, int width, int height, int stride return ret; } +int mlt_convert_argb_to_yuv422( uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha ) +{ + int ret = 0; + register int y0, y1, u0, u1, v0, v1; + register int r, g, b; + register uint8_t *d = yuv; + register int i, j; + + for ( i = 0; i < height; i++ ) + { + register uint8_t *s = rgba + ( stride * i ); + for ( j = 0; j < ( width / 2 ); j++ ) + { + *alpha++ = *s++; + r = *s++; + g = *s++; + b = *s++; + RGB2YUV (r, g, b, y0, u0 , v0); + *alpha++ = *s++; + r = *s++; + g = *s++; + b = *s++; + RGB2YUV (r, g, b, y1, u1 , v1); + *d++ = y0; + *d++ = (u0+u1) >> 1; + *d++ = y1; + *d++ = (v0+v1) >> 1; + } + if ( width % 2 ) + { + *alpha++ = *s++; + r = *s++; + g = *s++; + b = *s++; + RGB2YUV (r, g, b, y0, u0 , v0); + *d++ = y0; + *d++ = u0; + } + } + return ret; +} + int mlt_convert_yuv420p_to_yuv422( uint8_t *yuv420p, int width, int height, int stride, uint8_t *yuv ) { int ret = 0; diff --git a/src/framework/mlt_frame.h b/src/framework/mlt_frame.h index 7742f5a..bd2ea27 100644 --- a/src/framework/mlt_frame.h +++ b/src/framework/mlt_frame.h @@ -77,6 +77,7 @@ extern void mlt_frame_close( mlt_frame self ); extern int mlt_convert_rgb24a_to_yuv422( uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha ); extern int mlt_convert_rgb24_to_yuv422( uint8_t *rgb, int width, int height, int stride, uint8_t *yuv ); extern int mlt_convert_bgr24a_to_yuv422( uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha ); +extern int mlt_convert_argb_to_yuv422( uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha ); extern int mlt_convert_bgr24_to_yuv422( uint8_t *rgb, int width, int height, int stride, uint8_t *yuv ); extern int mlt_convert_yuv420p_to_yuv422( uint8_t *yuv420p, int width, int height, int stride, uint8_t *yuv ); extern uint8_t *mlt_frame_resize_yuv422( mlt_frame self, int owidth, int oheight ); -- 1.7.4.4