/*****************************************************************************
* i422_yuy2.c : YUV to YUV conversion module for vlc
*****************************************************************************
- * Copyright (C) 2000, 2001 VideoLAN
- * $Id: i422_yuy2.c,v 1.4 2003/11/06 17:08:12 nitrox Exp $
+ * Copyright (C) 2000, 2001 the VideoLAN team
+ * $Id$
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
#include <stdlib.h> /* malloc(), free() */
#include <vlc/vlc.h>
-#include <vlc/vout.h>
+#include <vlc_vout.h>
#include "i422_yuy2.h"
*****************************************************************************/
vlc_module_begin();
#if defined (MODULE_NAME_IS_i422_yuy2)
- set_description( _("conversions from " SRC_FOURCC " to " DEST_FOURCC) );
+ set_description( _("Conversions from " SRC_FOURCC " to " DEST_FOURCC) );
set_capability( "chroma", 80 );
#elif defined (MODULE_NAME_IS_i422_yuy2_mmx)
set_description( _("MMX conversions from " SRC_FOURCC " to " DEST_FOURCC) );
static void I422_YUY2( vout_thread_t *p_vout, picture_t *p_source,
picture_t *p_dest )
{
- uint8_t *p_line = p_dest->p->p_pixels;
+ uint8_t *p_pixels = p_dest->p->p_pixels;
+ int i_pitch = p_dest->p->i_pitch;
uint8_t *p_y = p_source->Y_PIXELS;
uint8_t *p_u = p_source->U_PIXELS;
uint8_t *p_v = p_source->V_PIXELS;
for( i_y = p_vout->render.i_height ; i_y-- ; )
{
+ uint8_t *p_line = p_pixels;
for( i_x = p_vout->render.i_width / 8 ; i_x-- ; )
{
#if defined (MODULE_NAME_IS_i422_yuy2)
C_YUV422_YUYV( p_line, p_y, p_u, p_v );
C_YUV422_YUYV( p_line, p_y, p_u, p_v );
#else
- __asm__( ".align 8" MMX_YUV422_YUYV
+ __asm__( ".p2align 3" MMX_YUV422_YUYV
: : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
-
- __asm__( ".align 8" MMX_YUV422_YUYV
- : : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
-
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
+ p_line += 16; p_y += 8; p_u += 4; p_v += 4;
#endif
}
+ p_pixels += i_pitch;
}
}
static void I422_YVYU( vout_thread_t *p_vout, picture_t *p_source,
picture_t *p_dest )
{
- uint8_t *p_line = p_dest->p->p_pixels;
+ uint8_t *p_pixels = p_dest->p->p_pixels;
+ int i_pitch = p_dest->p->i_pitch;
uint8_t *p_y = p_source->Y_PIXELS;
uint8_t *p_u = p_source->U_PIXELS;
uint8_t *p_v = p_source->V_PIXELS;
for( i_y = p_vout->render.i_height ; i_y-- ; )
{
+ uint8_t *p_line = p_pixels;
for( i_x = p_vout->render.i_width / 8 ; i_x-- ; )
{
#if defined (MODULE_NAME_IS_i422_yuy2)
C_YUV422_YVYU( p_line, p_y, p_u, p_v );
C_YUV422_YVYU( p_line, p_y, p_u, p_v );
#else
- __asm__( ".align 8" MMX_YUV422_YVYU
- : : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
-
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
-
- __asm__( ".align 8" MMX_YUV422_YVYU
+ __asm__( ".p2align 3" MMX_YUV422_YVYU
: : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
+ p_line += 16; p_y += 8; p_u += 4; p_v += 4;
#endif
}
+ p_pixels += i_pitch;
}
}
static void I422_UYVY( vout_thread_t *p_vout, picture_t *p_source,
picture_t *p_dest )
{
- uint8_t *p_line = p_dest->p->p_pixels;
+ uint8_t *p_pixels = p_dest->p->p_pixels;
+ int i_pitch = p_dest->p->i_pitch;
uint8_t *p_y = p_source->Y_PIXELS;
uint8_t *p_u = p_source->U_PIXELS;
uint8_t *p_v = p_source->V_PIXELS;
for( i_y = p_vout->render.i_height ; i_y-- ; )
{
+ uint8_t *p_line = p_pixels;
for( i_x = p_vout->render.i_width / 8 ; i_x-- ; )
{
#if defined (MODULE_NAME_IS_i422_yuy2)
C_YUV422_UYVY( p_line, p_y, p_u, p_v );
C_YUV422_UYVY( p_line, p_y, p_u, p_v );
#else
- __asm__( ".align 8" MMX_YUV422_UYVY
+ __asm__( ".p2align 3" MMX_YUV422_UYVY
: : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
-
- __asm__( ".align 8" MMX_YUV422_UYVY
- : : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
-
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
+ p_line += 16; p_y += 8; p_u += 4; p_v += 4;
#endif
}
+ p_pixels += i_pitch;
}
}
static void I422_cyuv( vout_thread_t *p_vout, picture_t *p_source,
picture_t *p_dest )
{
- uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_lines * p_dest->p->i_pitch;
+ uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_visible_lines * p_dest->p->i_pitch;
uint8_t *p_y = p_source->Y_PIXELS;
uint8_t *p_u = p_source->U_PIXELS;
uint8_t *p_v = p_source->V_PIXELS;
C_YUV422_UYVY( p_line, p_y, p_u, p_v );
C_YUV422_UYVY( p_line, p_y, p_u, p_v );
#else
- __asm__( ".align 8" MMX_YUV422_UYVY
- : : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
-
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
-
- __asm__( ".align 8" MMX_YUV422_UYVY
+ __asm__( ".p2align 3" MMX_YUV422_UYVY
: : "r" (p_line), "r" (p_y), "r" (p_u), "r" (p_v) );
- p_line += 8; p_y += 4; p_u += 2; p_v += 2;
+ p_line += 16; p_y += 8; p_u += 4; p_v += 4;
#endif
}
}
static void I422_Y211( vout_thread_t *p_vout, picture_t *p_source,
picture_t *p_dest )
{
- uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_lines * p_dest->p->i_pitch;
+ uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_visible_lines * p_dest->p->i_pitch;
uint8_t *p_y = p_source->Y_PIXELS;
uint8_t *p_u = p_source->U_PIXELS;
uint8_t *p_v = p_source->V_PIXELS;