--- trunk/xvidcore/src/image/image.c 2006/10/13 07:38:09 1733 +++ trunk/xvidcore/src/image/image.c 2006/11/10 18:58:39 1759 @@ -19,7 +19,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: image.c,v 1.36 2006-10-13 07:38:09 Skal Exp $ + * $Id: image.c,v 1.39 2006-11-10 18:58:39 chl Exp $ * ****************************************************************************/ @@ -473,6 +473,14 @@ interlacing?abgri_to_yv12_c:abgr_to_yv12_c, 4); break; + case XVID_CSP_RGB: + safe_packed_conv( + src[0], src_stride[0], image->y, image->u, image->v, + edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP), + interlacing?rgbi_to_yv12 :rgb_to_yv12, + interlacing?rgbi_to_yv12_c:rgb_to_yv12_c, 4); + break; + case XVID_CSP_RGBA : safe_packed_conv( src[0], src_stride[0], image->y, image->u, image->v, @@ -649,6 +657,14 @@ interlacing?yv12_to_abgri_c:yv12_to_abgr_c, 4); return 0; + case XVID_CSP_RGB: + safe_packed_conv( + dst[0], dst_stride[0], image->y, image->u, image->v, + edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP), + interlacing?yv12_to_rgbi :yv12_to_rgb, + interlacing?yv12_to_rgbi_c:yv12_to_rgb_c, 4); + return 0; + case XVID_CSP_RGBA: safe_packed_conv( dst[0], dst_stride[0], image->y, image->u, image->v, @@ -1018,12 +1034,12 @@ /****************************************************************************/ -static void (*deintl_core)(unsigned char *, int width, int height, const int stride) = 0; -extern void xvid_deinterlace_sse(unsigned char *, int width, int height, const int stride); +static void (*deintl_core)(uint8_t *, int width, int height, const int stride) = 0; +extern void xvid_deinterlace_sse(uint8_t *, int width, int height, const int stride); #define CLIP_255(x) ( ((x)&~255) ? ((-(x)) >> (8*sizeof((x))-1))&0xff : (x) ) -static void deinterlace_c(unsigned char *pix, int width, int height, const int bps) +static void deinterlace_c(uint8_t *pix, int width, int height, const int bps) { pix += bps; while(width-->0) @@ -1058,11 +1074,13 @@ if (img->csp!=XVID_CSP_PLANAR && img->csp!=XVID_CSP_I420 && img->csp!=XVID_CSP_YV12) return 0; /* not yet supported */ if (deintl_core==0) { - const int cpu_flags = check_cpu_features(); deintl_core = deinterlace_c; #ifdef ARCH_IS_IA32 - if (cpu_flags & XVID_CPU_MMX) - deintl_core = xvid_deinterlace_sse; + { + int cpu_flags = check_cpu_features(); + if (cpu_flags & XVID_CPU_MMX) + deintl_core = xvid_deinterlace_sse; + } #endif } if (!bottom_first) { @@ -1071,9 +1089,9 @@ deintl_core(img->plane[2], width>>1, height>>1, img->stride[2]); } else { - deintl_core(img->plane[0] + ( height -1)*img->stride[0], width, height, -img->stride[0]); - deintl_core(img->plane[1] + ((height>>1)-1)*img->stride[1], width>>1, height>>1, -img->stride[1]); - deintl_core(img->plane[2] + ((height>>1)-1)*img->stride[2], width>>1, height>>1, -img->stride[2]); + deintl_core((uint8_t *)img->plane[0] + ( height -1)*img->stride[0], width, height, -img->stride[0]); + deintl_core((uint8_t *)img->plane[1] + ((height>>1)-1)*img->stride[1], width>>1, height>>1, -img->stride[1]); + deintl_core((uint8_t *)img->plane[2] + ((height>>1)-1)*img->stride[2], width>>1, height>>1, -img->stride[2]); } emms();