From affb93ab169aadfa61a659982327e6d069e377ae Mon Sep 17 00:00:00 2001 From: lilo_booter Date: Wed, 29 Mar 2006 08:30:01 +0000 Subject: [PATCH] + Preparation for a QT image loader (to allow optional and functionally equivalent qt or gtk2 usage for image loading) git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@900 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/framework/mlt_frame.c | 81 +++++++++++++++++++++++++++++++++++++++ src/framework/mlt_frame.h | 2 + 2 files changed, 83 insertions(+) diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index f072bdd1..3028e2cb 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -610,6 +610,87 @@ int mlt_convert_rgb24_to_yuv422( uint8_t *rgb, int width, int height, int stride return ret; } +int mlt_convert_bgr24a_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++ ) + { + b = *s++; + g = *s++; + r = *s++; + *alpha++ = *s++; + RGB2YUV (r, g, b, y0, u0 , v0); + b = *s++; + g = *s++; + r = *s++; + *alpha++ = *s++; + RGB2YUV (r, g, b, y1, u1 , v1); + *d++ = y0; + *d++ = (u0+u1) >> 1; + *d++ = y1; + *d++ = (v0+v1) >> 1; + } + if ( width % 2 ) + { + b = *s++; + g = *s++; + r = *s++; + *alpha++ = *s++; + RGB2YUV (r, g, b, y0, u0 , v0); + *d++ = y0; + *d++ = u0; + } + } + return ret; +} + +int mlt_convert_bgr24_to_yuv422( uint8_t *rgb, int width, int height, int stride, uint8_t *yuv ) +{ + 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 = rgb + ( stride * i ); + for ( j = 0; j < ( width / 2 ); j++ ) + { + b = *s++; + g = *s++; + r = *s++; + RGB2YUV (r, g, b, y0, u0 , v0); + b = *s++; + g = *s++; + r = *s++; + RGB2YUV (r, g, b, y1, u1 , v1); + *d++ = y0; + *d++ = (u0+u1) >> 1; + *d++ = y1; + *d++ = (v0+v1) >> 1; + } + if ( width % 2 ) + { + b = *s++; + g = *s++; + r = *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 9aa996c9..7742f5a6 100644 --- a/src/framework/mlt_frame.h +++ b/src/framework/mlt_frame.h @@ -76,6 +76,8 @@ extern void mlt_frame_close( mlt_frame self ); /* convenience functions */ 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_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 ); extern uint8_t *mlt_frame_rescale_yuv422( mlt_frame self, int owidth, int oheight ); -- 2.39.2