From c7dc2203f2da402c1999e10c99f174b44a6186cd Mon Sep 17 00:00:00 2001 From: James Stembridge Date: Wed, 7 Jan 2004 22:20:59 +0000 Subject: frame copying functions CVS patchset: 6008 CVS date: 2004/01/07 22:20:59 --- src/xine-utils/Makefile.am | 1 + src/xine-utils/copy.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ src/xine-utils/xineutils.h | 15 +++++++-- 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/xine-utils/copy.c (limited to 'src') diff --git a/src/xine-utils/Makefile.am b/src/xine-utils/Makefile.am index cca80ad78..412817b6b 100644 --- a/src/xine-utils/Makefile.am +++ b/src/xine-utils/Makefile.am @@ -14,6 +14,7 @@ AM_CFLAGS = $(THREAD_CFLAGS) $(X_CFLAGS) libxineutils_la_SOURCES = $(pppc_files) \ cpu_accel.c \ color.c \ + copy.c \ list.c \ memcpy.c \ monitor.c \ diff --git a/src/xine-utils/copy.c b/src/xine-utils/copy.c new file mode 100644 index 000000000..bcf4f350d --- /dev/null +++ b/src/xine-utils/copy.c @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2004 the xine project + * + * This file is part of xine, a free video player. + * + * xine is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * xine is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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-1307, USA + * + * $Id: + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "xineutils.h" + +void yv12_to_yv12 + (unsigned char *y_src, int y_src_pitch, unsigned char *y_dst, int y_dst_pitch, + unsigned char *u_src, int u_src_pitch, unsigned char *u_dst, int u_dst_pitch, + unsigned char *v_src, int v_src_pitch, unsigned char *v_dst, int v_dst_pitch, + int width, int height) { + + int y, half_width = width / 2; + + /* Y Plane */ + if(y_src_pitch == y_dst_pitch) + xine_fast_memcpy(y_dst, y_src, y_src_pitch*height); + else { + for(y = 0; y < height; y++) { + xine_fast_memcpy(y_dst, y_src, width); + y_src += y_src_pitch; + y_dst += y_dst_pitch; + } + } + + /* U/V Planes */ + if((u_src_pitch == u_dst_pitch) && (v_src_pitch == v_dst_pitch)) { + xine_fast_memcpy(u_dst, u_src, u_src_pitch*height/2); + xine_fast_memcpy(v_dst, v_src, v_src_pitch*height/2); + } else { + for(y = 0; y < (height / 2); y++) { + xine_fast_memcpy(u_dst, u_src, half_width); + xine_fast_memcpy(v_dst, v_src, half_width); + + u_src += u_src_pitch; + v_src += v_src_pitch; + + u_dst += u_dst_pitch; + v_dst += v_dst_pitch; + } + } +} + +void yuy2_to_yuy2 + (unsigned char *src, int src_pitch, + unsigned char *dst, int dst_pitch, + int width, int height) { + + int y, double_width = width * 2; + + if(src_pitch == dst_pitch) + xine_fast_memcpy(dst, src, src_pitch*height); + else { + for(y = 0; y < height; y++) { + xine_fast_memcpy(dst, src, double_width); + src += src_pitch; + dst += dst_pitch; + } + } +} diff --git a/src/xine-utils/xineutils.h b/src/xine-utils/xineutils.h index 22bfb9e8f..b5d51309b 100644 --- a/src/xine-utils/xineutils.h +++ b/src/xine-utils/xineutils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2003 the xine project + * Copyright (C) 2000-2004 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xineutils.h,v 1.78 2003/12/29 16:24:33 mroi Exp $ + * $Id: xineutils.h,v 1.79 2004/01/07 22:20:59 jstembridge Exp $ * */ #ifndef XINEUTILS_H @@ -819,6 +819,17 @@ extern int v_r_table[256]; extern int v_g_table[256]; extern int v_b_table[256]; +/* frame copying functions */ +extern void yv12_to_yv12 + (unsigned char *y_src, int y_src_pitch, unsigned char *y_dst, int y_dst_pitch, + unsigned char *u_src, int u_src_pitch, unsigned char *u_dst, int u_dst_pitch, + unsigned char *v_src, int v_src_pitch, unsigned char *v_dst, int v_dst_pitch, + int width, int height); +extern void yuy2_to_yuy2 + (unsigned char *src, int src_pitch, + unsigned char *dst, int dst_pitch, + int width, int height); + /* print a hexdump of the given data */ void xine_hexdump (const char *buf, int length); -- cgit v1.2.3