diff options
| -rw-r--r-- | TODO | 44 | 
1 files changed, 44 insertions, 0 deletions
| @@ -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 | 
