[vlc-devel] [PATCH] color extraction: removing unecessary red, green and blue specific functions

victorien.lecouviour.tuffet at gmail.com victorien.lecouviour.tuffet at gmail.com
Tue Apr 4 13:02:00 CEST 2017


From: Psilokos <victorien.lecouviour-tuffet at epitech.eu>

---
 modules/video_filter/extract.c | 592 +++--------------------------------------
 1 file changed, 36 insertions(+), 556 deletions(-)

diff --git a/modules/video_filter/extract.c b/modules/video_filter/extract.c
index acb903c022..ba52e235c6 100644
--- a/modules/video_filter/extract.c
+++ b/modules/video_filter/extract.c
@@ -47,18 +47,9 @@ static picture_t *Filter( filter_t *, picture_t * );
 static int ExtractCallback( vlc_object_t *, char const *,
                             vlc_value_t, vlc_value_t, void * );
 
-static void get_red_from_yuv420( picture_t *, picture_t *, int, int, int );
-static void get_green_from_yuv420( picture_t *, picture_t *, int, int, int );
-static void get_blue_from_yuv420( picture_t *, picture_t *, int, int, int );
-static void get_red_from_yuv10( picture_t *, picture_t *, int, int, int );
-static void get_green_from_yuv10( picture_t *, picture_t *, int, int, int );
-static void get_blue_from_yuv10( picture_t *, picture_t *, int, int, int );
-static void get_red_from_yuv422( picture_t *, picture_t *, int, int, int );
-static void get_green_from_yuv422( picture_t *, picture_t *, int, int, int );
-static void get_blue_from_yuv422( picture_t *, picture_t *, int, int, int );
 static void make_projection_matrix( filter_t *, int color, int *matrix );
 static void get_custom_from_yuv420( picture_t *, picture_t *, int, int, int, int * );
-static void get_custom_from_yuv10( picture_t *, picture_t *, int, int, int, int * );
+static void get_custom_from_yuv420_10( picture_t *, picture_t *, int, int, int, int * );
 static void get_custom_from_yuv422( picture_t *, picture_t *, int, int, int, int * );
 static void get_custom_from_packedyuv422( picture_t *, picture_t *, int * );
 
@@ -191,92 +182,41 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
 
     vlc_mutex_lock( &p_sys->lock );
     switch( p_pic->format.i_chroma )
-    {
-        case VLC_CODEC_I420:
-        case VLC_CODEC_J420:
-        case VLC_CODEC_YV12:
-            switch( p_sys->i_color )
-            {
-                case RED:
-                    get_red_from_yuv420( p_pic, p_outpic,
-                                         Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                case GREEN:
-                    get_green_from_yuv420( p_pic, p_outpic,
-                                           Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                case BLUE:
-                    get_blue_from_yuv420( p_pic, p_outpic,
-                                          Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                default:
-                    get_custom_from_yuv420( p_pic, p_outpic,
-                                            Y_PLANE, U_PLANE, V_PLANE,
-                                            p_sys->projection_matrix);
-                    break;
-            }
-            break;
-
-        case VLC_CODEC_I422:
-        case VLC_CODEC_J422:
-            switch( p_filter->p_sys->i_color )
-            {
-                case RED:
-                    get_red_from_yuv422( p_pic, p_outpic,
-                                         Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                case GREEN:
-                    get_green_from_yuv422( p_pic, p_outpic,
-                                           Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                case BLUE:
-                    get_blue_from_yuv422( p_pic, p_outpic,
-                                          Y_PLANE, U_PLANE, V_PLANE );
-                    break;
-                default:
-                    get_custom_from_yuv422( p_pic, p_outpic,
-                                            Y_PLANE, U_PLANE, V_PLANE,
-                                            p_sys->projection_matrix);
-                    break;
-            }
-            break;
-
-    case VLC_CODEC_I420_10L:
-    case VLC_CODEC_I420_10B:
-      switch( p_filter->p_sys->i_color )
-	{
-	case RED:
-	  get_red_from_yuv10( p_pic, p_outpic,
-			      Y_PLANE, U_PLANE, V_PLANE );
-	  break;
-	case GREEN:
-	  get_green_from_yuv10( p_pic, p_outpic,
-				Y_PLANE, U_PLANE, V_PLANE );
-	  break;
-	case BLUE:
-	  get_blue_from_yuv10( p_pic, p_outpic,
-			       Y_PLANE, U_PLANE, V_PLANE );
-	  break;
-	default:
-	  get_custom_from_yuv10( p_pic, p_outpic,
-				 Y_PLANE, U_PLANE, V_PLANE,
-				 p_sys->projection_matrix);
-	  break;
-	}
-      break;
+      {
+      case VLC_CODEC_I420:
+      case VLC_CODEC_J420:
+      case VLC_CODEC_YV12:
+	get_custom_from_yuv420( p_pic, p_outpic,
+				Y_PLANE, U_PLANE, V_PLANE,
+				p_sys->projection_matrix);
+	break;
+
+      case VLC_CODEC_I422:
+      case VLC_CODEC_J422:
+	get_custom_from_yuv422( p_pic, p_outpic,
+				Y_PLANE, U_PLANE, V_PLANE,
+				p_sys->projection_matrix);
+	break;
+
+      case VLC_CODEC_I420_10L:
+      case VLC_CODEC_I420_10B:
+	get_custom_from_yuv420_10( p_pic, p_outpic,
+				   Y_PLANE, U_PLANE, V_PLANE,
+				   p_sys->projection_matrix);
+	break;
 
         CASE_PACKED_YUV_422
-            get_custom_from_packedyuv422( p_pic, p_outpic,
-                                          p_sys->projection_matrix );
-            break;
-
-        default:
-            vlc_mutex_unlock( &p_sys->lock );
-            msg_Warn( p_filter, "Unsupported input chroma (%4.4s)",
-                      (char*)&(p_pic->format.i_chroma) );
-            picture_Release( p_pic );
-            return NULL;
-    }
+	  get_custom_from_packedyuv422( p_pic, p_outpic,
+					p_sys->projection_matrix );
+	break;
+
+      default:
+	vlc_mutex_unlock( &p_sys->lock );
+	msg_Warn( p_filter, "Unsupported input chroma (%4.4s)",
+		  (char*)&(p_pic->format.i_chroma) );
+	picture_Release( p_pic );
+	return NULL;
+      }
     vlc_mutex_unlock( &p_sys->lock );
 
     return CopyInfoAndRelease( p_outpic, p_pic );
@@ -394,8 +334,8 @@ static void get_custom_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,
     }
 }
 
-static void get_custom_from_yuv10( picture_t *p_inpic, picture_t *p_outpic,
-                                    int yp, int up, int vp, int *m )
+static void get_custom_from_yuv420_10( picture_t *p_inpic, picture_t *p_outpic,
+				       int yp, int up, int vp, int *m )
 {
     uint16_t *y1in = p_inpic->p[yp].p_pixels;
     uint16_t *y2in;
@@ -540,466 +480,6 @@ static void get_custom_from_packedyuv422( picture_t *p_inpic,
     }
 }
 
-static void get_red_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,
-                                 int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *y2in;
-    uint8_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *y2out;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        y2in  = y1in + i_in_pitch;
-        y2out = y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-19595   0   27473
--11058  0   -15504
-32768   0   45941
-*/
-            *uout++ = vlc_uint8( (*y1in * -11058 + (*vin - V8) * -15504)
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * 32768 + (*vin - V8) * 45941)
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 19595 + (*vin - V8) * 27473)
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 19595 + (*vin - V8) * 27473)
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 19594 + (*vin - V8) * 27473)
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 19594 + (*vin++ - V8) * 27473)
-                       / 65536 );
-        }
-        y1in  += 2*i_in_pitch  - i_visible_pitch;
-        y1out += 2*i_out_pitch - i_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vin   += p_inpic->p[vp].i_pitch  - i_uv_visible_pitch;
-        vout  += p_outpic->p[vp].i_pitch - i_uv_visible_pitch;
-    }
-}
-
-static void get_green_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,
-                                 int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *y2in;
-    uint8_t *uin  = p_inpic->p[up].p_pixels;
-    uint8_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *y2out;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        y2in  = y1in + i_in_pitch;
-        y2out = y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-38470   -13239  -27473
--21710  7471    15504
--27439  9443    19595
-*/
-            *uout++ = vlc_uint8( (*y1in * -21710 + (*uin-U8) * 7471 + (*vin-V8) * 15504)
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * -27439 + (*uin-U8) * 9443 + (*vin-V8) * 19595)
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 38470 + (*uin-U8) * -13239 + (*vin-V8) * -27473)
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 38470 + (*uin-U8) * -13239 + (*vin-V8) * -27473)
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 38470 + (*uin-U8) * -13239 + (*vin-V8) * -27473)
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 38470 + (*uin++ - U8) * -13239 + (*vin++ -V8) * -27473)
-                       / 65536 );
-        }
-        y1in  += 2*i_in_pitch  - i_visible_pitch;
-        y1out += 2*i_out_pitch - i_visible_pitch;
-        uin   += p_inpic->p[up].i_pitch  - i_uv_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vin   += p_inpic->p[vp].i_pitch  - i_uv_visible_pitch;
-        vout  += p_outpic->p[vp].i_pitch - i_uv_visible_pitch;
-    }
-}
-
-static void get_blue_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,
-                                 int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *y2in;
-    uint8_t *uin  = p_inpic->p[up].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *y2out;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        y2in  = y1in + i_in_pitch;
-        y2out = y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-7471    13239   0
-32768   58065   0
--5329   -9443   0
-*/
-            *uout++ = vlc_uint8( (*y1in* 32768 + (*uin - U8) * 58065 )
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * -5329 + (*uin - U8) * -9443 )
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 7471 + (*uin - U8) * 13239 )
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 7471 + (*uin - U8) * 13239 )
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 7471 + (*uin - U8) * 13239 )
-                       / 65536 );
-            *y2out++ = vlc_uint8( (*y2in++ * 7471 + (*uin++ - U8) * 13239 )
-                       / 65536 );
-        }
-        y1in  += 2*i_in_pitch  - i_visible_pitch;
-        y1out += 2*i_out_pitch - i_visible_pitch;
-        uin   += p_inpic->p[up].i_pitch  - i_uv_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vout  += p_inpic->p[vp].i_pitch  - i_uv_visible_pitch;
-    }
-}
-
-static void get_red_from_yuv10( picture_t *p_inpic, picture_t *p_outpic,
-				int yp, int up, int vp )
-{
-    uint16_t *y1in = p_inpic->p[yp].p_pixels;
-    uint16_t *y2in;
-    uint16_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint16_t *y1out = p_outpic->p[yp].p_pixels;
-    uint16_t *y2out;
-    uint16_t *uout  = p_outpic->p[up].p_pixels;
-    uint16_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint16_t *yend = (uint8_t*)y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint16_t *y1end = (uint8_t*)y1in + i_visible_pitch;
-        y2in  = (uint8_t*)y1in + i_in_pitch;
-        y2out = (uint8_t*)y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-19595   0   27473
--11058  0   -15504
-32768   0   45941
-*/
-	  *uout++ = vlc_uint10( (*y1in * -11058 + (*vin - V10) * -15504)
-                      / 65536 + U10 );
-            *vout++ = vlc_uint10( (*y1in * 32768 + (*vin - V10) * 45941)
-                      / 65536 + V10 );
-            *y1out++ = vlc_uint10( (*y1in++ * 19595 + (*vin - V10) * 27473)
-                       / 65536 );
-            *y1out++ = vlc_uint10( (*y1in++ * 19595 + (*vin - V10) * 27473)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 19594 + (*vin - V10) * 27473)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 19594 + (*vin++ - V10) * 27473)
-                       / 65536 );
-        }
-        y1in  = (uint8_t*)y1in + (2*i_in_pitch  - i_visible_pitch);
-        y1out = (uint8_t*)y1out + (2*i_out_pitch - i_visible_pitch);
-	uout  = (uint8_t*)uout + (p_outpic->p[up].i_pitch - i_uv_visible_pitch);
-	vin   = (uint8_t*)vin + (p_inpic->p[vp].i_pitch  - i_uv_visible_pitch);
-	vout  = (uint8_t*)vout + (p_outpic->p[vp].i_pitch - i_uv_visible_pitch);
-    }
-}
-
-static void get_green_from_yuv10( picture_t *p_inpic, picture_t *p_outpic,
-				  int yp, int up, int vp )
-{
-    uint16_t *y1in = p_inpic->p[yp].p_pixels;
-    uint16_t *y2in;
-    uint16_t *uin  = p_inpic->p[up].p_pixels;
-    uint16_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint16_t *y1out = p_outpic->p[yp].p_pixels;
-    uint16_t *y2out;
-    uint16_t *uout  = p_outpic->p[up].p_pixels;
-    uint16_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint16_t *yend = (uint8_t*)y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint16_t *y1end = (uint8_t*)y1in + i_visible_pitch;
-        y2in  = (uint8_t*)y1in + i_in_pitch;
-        y2out = (uint8_t*)y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-19595   0   27473
--11058  0   -15504
-32768   0   45941
-*/
-	  *uout++ = vlc_uint10( (*y1in * -21710 + (*uin - U10) * 7471 + (*vin - V10) * 15504)
-                      / 65536 + U10 );
-	  *vout++ = vlc_uint10( (*y1in * -27439 + (*uin - U10) * 9443 + (*vin - V10) * 19595)
-                      / 65536 + V10 );
-	  *y1out++ = vlc_uint10( (*y1in++ * 38470 + (*uin - U10) * -13239 + (*vin - V10) * -27473)
-                       / 65536 );
-            *y1out++ = vlc_uint10( (*y1in++ * 38470 + (*uin - U10) * -13239 + (*vin - V10) * -27473)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 38470 + (*uin - U10) * -13239 + (*vin - V10) * -27473)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 38470 + (*uin++ - U10) * -13239 + (*vin++ - V10) * -27473)
-                       / 65536 );
-
-}
-        y1in  = (uint8_t*)y1in + (2*i_in_pitch  - i_visible_pitch);
-        y1out = (uint8_t*)y1out + (2*i_out_pitch - i_visible_pitch);
-	uin   = (uint8_t*)uin + (p_inpic->p[up].i_pitch  - i_uv_visible_pitch);
-	uout  = (uint8_t*)uout + (p_outpic->p[up].i_pitch - i_uv_visible_pitch);
-	vin   = (uint8_t*)vin + (p_inpic->p[vp].i_pitch  - i_uv_visible_pitch);
-	vout  = (uint8_t*)vout + (p_outpic->p[vp].i_pitch - i_uv_visible_pitch);
-    }
-}
-
-static void get_blue_from_yuv10( picture_t *p_inpic, picture_t *p_outpic,
-				 int yp, int up, int vp )
-{
-    uint16_t *y1in = p_inpic->p[yp].p_pixels;
-    uint16_t *y2in;
-    uint16_t *uin  = p_inpic->p[up].p_pixels;
-
-    uint16_t *y1out = p_outpic->p[yp].p_pixels;
-    uint16_t *y2out;
-    uint16_t *uout  = p_outpic->p[up].p_pixels;
-    uint16_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint16_t *yend = (uint8_t*)y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint16_t *y1end = (uint8_t*)y1in + i_visible_pitch;
-        y2in  = (uint8_t*)y1in + i_in_pitch;
-        y2out = (uint8_t*)y1out + i_out_pitch;
-        while( y1in < y1end )
-        {
-/*
-19595   0   27473
--11058  0   -15504
-32768   0   45941
-*/
-	  *uout++ = vlc_uint10( (*y1in * 32768 + (*uin - V10) * 58065)
-                      / 65536 + U10 );
-            *vout++ = vlc_uint10( (*y1in * -5329 + (*uin - V10) * -9443)
-                      / 65536 + V10 );
-            *y1out++ = vlc_uint10( (*y1in++ * 7471 + (*uin - V10) * 13239)
-                       / 65536 );
-            *y1out++ = vlc_uint10( (*y1in++ * 7471 + (*uin - V10) * 13239)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 7471 + (*uin - V10) * 13239)
-                       / 65536 );
-            *y2out++ = vlc_uint10( (*y2in++ * 7471 + (*uin++ - V10) * 13239)
-                       / 65536 );
-        }
-        y1in  = (uint8_t*)y1in + (2*i_in_pitch  - i_visible_pitch);
-        y1out = (uint8_t*)y1out + (2*i_out_pitch - i_visible_pitch);
-	uout  = (uint8_t*)uout + (p_outpic->p[up].i_pitch - i_uv_visible_pitch);
-	vout  = (uint8_t*)vout + (p_outpic->p[vp].i_pitch - i_uv_visible_pitch);
-    }
-}
-
-static void get_red_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,
-                                 int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_inpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        while( y1in < y1end )
-        {
-/*
-19595   0   27473
--11058  0   -15504
-32768   0   45941
-*/
-            *uout++ = vlc_uint8( (*y1in * -11058 + (*vin - V8) * -15504)
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * 32768 + (*vin - V8) * 45941)
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 19595 + (*vin - V8) * 27473)
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 19595 + (*vin++ - V8) * 27473)
-                       / 65536 );
-        }
-        y1in  += i_in_pitch  - i_visible_pitch;
-        y1out += i_out_pitch - i_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vin   += p_inpic->p[vp].i_pitch  - i_uv_visible_pitch;
-        vout  += p_outpic->p[vp].i_pitch - i_uv_visible_pitch;
-    }
-}
-
-static void get_green_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,
-                                   int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *uin  = p_inpic->p[up].p_pixels;
-    uint8_t *vin  = p_inpic->p[vp].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        while( y1in < y1end )
-        {
-/*
-38470   -13239  -27473
--21710  7471    15504
--27439  9443    19595
-*/
-            *uout++ = vlc_uint8( (*y1in * -21710 + (*uin-U8) * 7471 + (*vin-V8) * 15504)
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * -27439 + (*uin-U8) * 9443 + (*vin-V8) * 19595)
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 38470 + (*uin-U8) * -13239 + (*vin-V8) * -27473)
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 38470 + (*uin++-U8) * -13239 + (*vin++-V8) * -27473)
-                       / 65536 );
-        }
-        y1in  += i_in_pitch  - i_visible_pitch;
-        y1out += i_out_pitch - i_visible_pitch;
-        uin   += p_inpic->p[up].i_pitch  - i_uv_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vin   += p_inpic->p[vp].i_pitch  - i_uv_visible_pitch;
-        vout  += p_outpic->p[vp].i_pitch - i_uv_visible_pitch;
-    }
-}
-
-static void get_blue_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,
-                                 int yp, int up, int vp )
-{
-    uint8_t *y1in = p_inpic->p[yp].p_pixels;
-    uint8_t *uin  = p_inpic->p[up].p_pixels;
-
-    uint8_t *y1out = p_outpic->p[yp].p_pixels;
-    uint8_t *uout  = p_outpic->p[up].p_pixels;
-    uint8_t *vout  = p_outpic->p[vp].p_pixels;
-
-    const int i_in_pitch  = p_inpic->p[yp].i_pitch;
-    const int i_out_pitch = p_outpic->p[yp].i_pitch;
-
-    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;
-    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;
-    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;
-
-    const uint8_t *yend = y1in + i_visible_lines * i_in_pitch;
-    while( y1in < yend )
-    {
-        const uint8_t *y1end = y1in + i_visible_pitch;
-        while( y1in < y1end )
-        {
-/*
-7471    13239   0
-32768   58065   0
--5329   -9443   0
-*/
-            *uout++ = vlc_uint8( (*y1in* 32768 + (*uin - U8) * 58065 )
-                      / 65536 + U8 );
-            *vout++ = vlc_uint8( (*y1in * -5329 + (*uin - U8) * -9443 )
-                      / 65536 + V8 );
-            *y1out++ = vlc_uint8( (*y1in++ * 7471 + (*uin - U8) * 13239 )
-                       / 65536 );
-            *y1out++ = vlc_uint8( (*y1in++ * 7471 + (*uin++ - U8) * 13239 )
-                       / 65536 );
-        }
-        y1in  += i_in_pitch  - i_visible_pitch;
-        y1out += i_out_pitch - i_visible_pitch;
-        uin   += p_inpic->p[up].i_pitch - i_uv_visible_pitch;
-        uout  += p_outpic->p[up].i_pitch - i_uv_visible_pitch;
-        vout  += p_outpic->p[vp].i_pitch - i_uv_visible_pitch;
-    }
-}
-
 static int ExtractCallback( vlc_object_t *p_this, char const *psz_var,
                             vlc_value_t oldval, vlc_value_t newval,
                             void *p_data )
-- 
2.12.0



More information about the vlc-devel mailing list