From 9145542156e3f45330e831ebddbcf735018a1d7f Mon Sep 17 00:00:00 2001 From: deva Date: Mon, 9 May 2005 15:42:59 +0000 Subject: *** empty log message *** --- TODO | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/TODO b/TODO index a55bfab..c006ed2 100644 --- a/TODO +++ b/TODO @@ -159,3 +159,47 @@ email. \ ,-----------. ->| Encoder | `-----------' + + +========================================================================== + This code should convert yuv to yuv422 planar +========================================================================== +int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] ) +{ + unsigned char *pixels[ 3 ]; + int pitches[ 3 ]; + int width = GetWidth(), height = GetHeight(); + + pixels[ 0 ] = ( unsigned char* ) yuv; + pitches[ 0 ] = decoder->width * 2; + + dv_decode_full_frame( decoder, data, e_dv_color_yuv, pixels, pitches ); + + int w2 = width / 2; + uint8_t *y = output[ 0 ]; + uint8_t *cb = output[ 1 ]; + uint8_t *cr = output[ 2 ]; + uint8_t *p = yuv; + + for ( int i = 0; i < height; i += 2 ) + { + /* process two scanlines (one from each field, interleaved) */ + for ( int j = 0; j < w2; j++ ) + { + /* packed YUV 422 is: Y[i] U[i] Y[i+1] V[i] */ + *( y++ ) = *( p++ ); + *( cb++ ) = *( p++ ); + *( y++ ) = *( p++ ); + *( cr++ ) = *( p++ ); + } + /* process next two scanlines (one from each field, interleaved) */ + for ( int j = 0; j < w2; j++ ) + { + /* skip every second line for U and V */ + *( y++ ) = *( p++ ); + p++; + *( y++ ) = *( p++ ); + p++; + } + } +} \ No newline at end of file -- cgit v1.2.3