[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[465] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-11-27 15:55:44
|
Revision: 465 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=465&view=rev Author: nickols_k Date: 2012-11-27 15:55:31 +0000 (Tue, 27 Nov 2012) Log Message: ----------- clarity: rename osd.* ->osd_render.* Modified Paths: -------------- mplayerxp/libvo/Makefile mplayerxp/libvo/sub.cpp mplayerxp/libvo/sub.h mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out_internal.h mplayerxp/libvo/vidix_system.cpp mplayerxp/libvo/vo_fbdev.cpp mplayerxp/postproc/libmenu/menu.cpp mplayerxp/postproc/vf_expand.cpp mplayerxp/postproc/vf_panscan.cpp Added Paths: ----------- mplayerxp/libvo/osd_render.cpp mplayerxp/libvo/osd_render.h mplayerxp/libvo/osd_render_template.h Removed Paths: ------------- mplayerxp/libvo/osd.cpp mplayerxp/libvo/osd.h mplayerxp/libvo/osd_template.h Modified: mplayerxp/libvo/Makefile =================================================================== --- mplayerxp/libvo/Makefile 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/Makefile 2012-11-27 15:55:31 UTC (rev 465) @@ -2,8 +2,8 @@ LIBNAME = libvo.a -CXXSRCS=video_out.cpp font_load.cpp img_format.cpp screenshot.cpp sub.cpp osd.cpp -CXXSRCS+=aspect.cpp vo_null.cpp +CXXSRCS=video_out.cpp font_load.cpp img_format.cpp screenshot.cpp sub.cpp +CXXSRCS+=osd_render.cpp aspect.cpp vo_null.cpp ifeq ($(HAVE_SDL),yes) CXXSRCS+=vo_sdl.cpp endif Deleted: mplayerxp/libvo/osd.cpp =================================================================== --- mplayerxp/libvo/osd.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -1,261 +0,0 @@ -#include "mp_config.h" -#include "osdep/mplib.h" -using namespace mpxp; -/* - Generic alpha renderers for all YUV modes and RGB depths. - These are "reference implementations", should be optimized later (MMX, etc) - Templating Code from Michael Niedermayer (mic...@gm...) is under GPL -*/ - -#include <stdio.h> -#include <pthread.h> - -#include <inttypes.h> -#include "osdep/cpudetect.h" -#include "osdep/mangle.h" -#include "mplayerxp.h" -#include "osd.h" -#include "vo_msg.h" - -#if defined(__MMX__) -static const uint64_t bFF __attribute__((used)) __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; -static const unsigned long long mask24lh __attribute__((used)) __attribute__((aligned(8))) = 0xFFFF000000000000ULL; -static const unsigned long long mask24hl __attribute__((used)) __attribute__((aligned(8))) = 0x0000FFFFFFFFFFFFULL; -#endif - -#define PVECTOR_ACCEL_H "osd_template.h" -#include "pvector/pvector_inc.h" - -#ifdef FAST_OSD_TABLE -static unsigned short fast_osd_15bpp_table[256]; -static unsigned short fast_osd_16bpp_table[256]; -#endif - -static void __FASTCALL__ vo_draw_alpha_rgb15_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned short *dst = (unsigned short*) dstbase; - register int x; - for(x=0;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD -#ifdef FAST_OSD_TABLE - dst[x]=fast_osd_15bpp_table[src[x]]; -#else - register unsigned int a=src[x]>>3; - dst[x]=(a<<10)|(a<<5)|a; -#endif -#else - unsigned char r=dst[x]&0x1F; - unsigned char g=(dst[x]>>5)&0x1F; - unsigned char b=(dst[x]>>10)&0x1F; - r=(((r*srca[x])>>5)+src[x])>>3; - g=(((g*srca[x])>>5)+src[x])>>3; - b=(((b*srca[x])>>5)+src[x])>>3; - dst[x]=(b<<10)|(g<<5)|r; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } - return; -} - -static void __FASTCALL__ vo_draw_alpha_rgb16_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned short *dst = (unsigned short*) dstbase; - register int x; - for(x=0;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD -#ifdef FAST_OSD_TABLE - dst[x]=fast_osd_16bpp_table[src[x]]; -#else - dst[x]=((src[x]>>3)<<11)|((src[x]>>2)<<5)|(src[x]>>3); -#endif -#else - unsigned char r=dst[x]&0x1F; - unsigned char g=(dst[x]>>5)&0x3F; - unsigned char b=(dst[x]>>11)&0x1F; - r=(((r*srca[x])>>5)+src[x])>>3; - g=(((g*srca[x])>>6)+src[x])>>2; - b=(((b*srca[x])>>5)+src[x])>>3; - dst[x]=(b<<11)|(g<<5)|r; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } - return; -} - -static void __FASTCALL__ vo_draw_alpha_uyvy_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - vo_draw_alpha_yuy2_c(w,h,src,srca,srcstride,dstbase+1,dststride,finalize); -} - -static void __FASTCALL__ vo_draw_alpha_null(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - UNUSED(w); - UNUSED(h); - UNUSED(src); - UNUSED(srca); - UNUSED(srcstride); - UNUSED(dstbase); - UNUSED(dststride); - UNUSED(finalize); -} - -void OSD_Render::render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize) -{ - (*draw_alpha_ptr)(w,h,src,srca,srcstride,dstbase,dststride,finalize); -} - -void OSD_Render::get_draw_alpha(unsigned fmt) { - MSG_DBG2("get_draw_alpha(%s)\n",vo_format_name(fmt)); - switch(fmt) { - case IMGFMT_BGR15: - case IMGFMT_RGB15: - draw_alpha_ptr=draw_alpha_rgb15_ptr; - break; - case IMGFMT_BGR16: - case IMGFMT_RGB16: - draw_alpha_ptr=draw_alpha_rgb16_ptr; - break; - case IMGFMT_BGR24: - case IMGFMT_RGB24: - draw_alpha_ptr=draw_alpha_rgb24_ptr; - break; - case IMGFMT_BGR32: - case IMGFMT_RGB32: - draw_alpha_ptr=draw_alpha_rgb32_ptr; - break; - case IMGFMT_YV12: - case IMGFMT_I420: - case IMGFMT_IYUV: - case IMGFMT_YVU9: - case IMGFMT_IF09: - case IMGFMT_Y800: - case IMGFMT_Y8: - draw_alpha_ptr=draw_alpha_yv12_ptr; - break; - case IMGFMT_YUY2: - draw_alpha_ptr=draw_alpha_yuy2_ptr; - break; - case IMGFMT_UYVY: - draw_alpha_ptr=draw_alpha_uyvy_ptr; - break; - default: - MSG_ERR("draw alpha for %s fourcc not implemented yet!",vo_format_name(fmt)); - draw_alpha_ptr=vo_draw_alpha_null; - break; - } -} - -OSD_Render::OSD_Render(unsigned fourcc) -{ -#ifdef FAST_OSD_TABLE - int i; - for(i=0;i<256;i++){ - fast_osd_15bpp_table[i]=((i>>3)<<10)|((i>>3)<<5)|(i>>3); - fast_osd_16bpp_table[i]=((i>>3)<<11)|((i>>2)<<5)|(i>>3); - } -#endif -/*FIXME the optimized stuff is a lie for 15/16bpp as they arent optimized yet*/ -// ordered per speed fasterst first -#ifdef __AVX__ -if(gCpuCaps.hasSSE41) -{ - MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_AVX; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_AVX; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_AVX; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_AVX; -} -else -#endif -#ifdef __SSE4_1__ -if(gCpuCaps.hasSSE41) -{ - MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE4; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE4; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE4; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE4; -} -else -#endif -#ifdef __SSSE3__ -if(gCpuCaps.hasSSSE3) -{ - MSG_V("Using SSSE3 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSSE3; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSSE3; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSSE3; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSSE3; -} -else -#endif -#ifdef __SSE3__ -if(gCpuCaps.hasSSE3) -{ - MSG_V("Using SSE3 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE3; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE3; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE3; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE3; -} -else -#endif -#ifdef __SSE2__ -if(gCpuCaps.hasSSE2) -{ - MSG_V("Using SSE2 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE2; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE2; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE2; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE2; -} -else -#endif -#ifndef __x86_64__ -#ifdef __SSE__ -if(gCpuCaps.hasMMX2) -{ - MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE; -} -else -#endif -//#ifdef __MMX__ -//if(gCpuCaps.hasMMX) -//{ -// MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); -// draw_alpha_yv12_ptr=vo_draw_alpha_yv12_MMX; -// draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_MMX; -// draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_MMX; -// draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_MMX; -//} -//else -//#endif -#endif -{ - MSG_V("Using generic OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_c; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_c; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_c; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_c; -} - draw_alpha_uyvy_ptr=vo_draw_alpha_uyvy_c; - draw_alpha_rgb15_ptr=vo_draw_alpha_rgb15_c; - draw_alpha_rgb16_ptr=vo_draw_alpha_rgb16_c; - get_draw_alpha(fourcc); -} - -OSD_Render::~OSD_Render(){} Deleted: mplayerxp/libvo/osd.h =================================================================== --- mplayerxp/libvo/osd.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,25 +0,0 @@ -#ifndef __MPLAYER_OSD_H -#define __MPLAYER_OSD_H - -/* Generic alpha renderers for all YUV modes and RGB depths. */ -/* These are "reference implementations", should be optimized later (MMX, etc) */ -class OSD_Render : public Opaque { - public: - OSD_Render(unsigned fourcc); - virtual ~OSD_Render(); - - void render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); - private: - void get_draw_alpha(unsigned fmt); - typedef void (* __FASTCALL__ draw_alpha_f)(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); - draw_alpha_f draw_alpha_ptr; - draw_alpha_f draw_alpha_yv12_ptr; - draw_alpha_f draw_alpha_yuy2_ptr; - draw_alpha_f draw_alpha_uyvy_ptr; - draw_alpha_f draw_alpha_rgb24_ptr; - draw_alpha_f draw_alpha_rgb32_ptr; - draw_alpha_f draw_alpha_rgb15_ptr; - draw_alpha_f draw_alpha_rgb16_ptr; -}; - -#endif Copied: mplayerxp/libvo/osd_render.cpp (from rev 464, mplayerxp/libvo/osd.cpp) =================================================================== --- mplayerxp/libvo/osd_render.cpp (rev 0) +++ mplayerxp/libvo/osd_render.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,261 @@ +#include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; +/* + Generic alpha renderers for all YUV modes and RGB depths. + These are "reference implementations", should be optimized later (MMX, etc) + Templating Code from Michael Niedermayer (mic...@gm...) is under GPL +*/ + +#include <stdio.h> +#include <pthread.h> + +#include <inttypes.h> +#include "osdep/cpudetect.h" +#include "osdep/mangle.h" +#include "mplayerxp.h" +#include "osd_render.h" +#include "vo_msg.h" + +#if defined(__MMX__) +static const uint64_t bFF __attribute__((used)) __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; +static const unsigned long long mask24lh __attribute__((used)) __attribute__((aligned(8))) = 0xFFFF000000000000ULL; +static const unsigned long long mask24hl __attribute__((used)) __attribute__((aligned(8))) = 0x0000FFFFFFFFFFFFULL; +#endif + +#define PVECTOR_ACCEL_H "osd_render_template.h" +#include "pvector/pvector_inc.h" + +#ifdef FAST_OSD_TABLE +static unsigned short fast_osd_15bpp_table[256]; +static unsigned short fast_osd_16bpp_table[256]; +#endif + +static void __FASTCALL__ vo_draw_alpha_rgb15_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for(x=0;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x]=fast_osd_15bpp_table[src[x]]; +#else + register unsigned int a=src[x]>>3; + dst[x]=(a<<10)|(a<<5)|a; +#endif +#else + unsigned char r=dst[x]&0x1F; + unsigned char g=(dst[x]>>5)&0x1F; + unsigned char b=(dst[x]>>10)&0x1F; + r=(((r*srca[x])>>5)+src[x])>>3; + g=(((g*srca[x])>>5)+src[x])>>3; + b=(((b*srca[x])>>5)+src[x])>>3; + dst[x]=(b<<10)|(g<<5)|r; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } + return; +} + +static void __FASTCALL__ vo_draw_alpha_rgb16_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for(x=0;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x]=fast_osd_16bpp_table[src[x]]; +#else + dst[x]=((src[x]>>3)<<11)|((src[x]>>2)<<5)|(src[x]>>3); +#endif +#else + unsigned char r=dst[x]&0x1F; + unsigned char g=(dst[x]>>5)&0x3F; + unsigned char b=(dst[x]>>11)&0x1F; + r=(((r*srca[x])>>5)+src[x])>>3; + g=(((g*srca[x])>>6)+src[x])>>2; + b=(((b*srca[x])>>5)+src[x])>>3; + dst[x]=(b<<11)|(g<<5)|r; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } + return; +} + +static void __FASTCALL__ vo_draw_alpha_uyvy_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + vo_draw_alpha_yuy2_c(w,h,src,srca,srcstride,dstbase+1,dststride,finalize); +} + +static void __FASTCALL__ vo_draw_alpha_null(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + UNUSED(w); + UNUSED(h); + UNUSED(src); + UNUSED(srca); + UNUSED(srcstride); + UNUSED(dstbase); + UNUSED(dststride); + UNUSED(finalize); +} + +void OSD_Render::render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize) +{ + (*draw_alpha_ptr)(w,h,src,srca,srcstride,dstbase,dststride,finalize); +} + +void OSD_Render::get_draw_alpha(unsigned fmt) { + MSG_DBG2("get_draw_alpha(%s)\n",vo_format_name(fmt)); + switch(fmt) { + case IMGFMT_BGR15: + case IMGFMT_RGB15: + draw_alpha_ptr=draw_alpha_rgb15_ptr; + break; + case IMGFMT_BGR16: + case IMGFMT_RGB16: + draw_alpha_ptr=draw_alpha_rgb16_ptr; + break; + case IMGFMT_BGR24: + case IMGFMT_RGB24: + draw_alpha_ptr=draw_alpha_rgb24_ptr; + break; + case IMGFMT_BGR32: + case IMGFMT_RGB32: + draw_alpha_ptr=draw_alpha_rgb32_ptr; + break; + case IMGFMT_YV12: + case IMGFMT_I420: + case IMGFMT_IYUV: + case IMGFMT_YVU9: + case IMGFMT_IF09: + case IMGFMT_Y800: + case IMGFMT_Y8: + draw_alpha_ptr=draw_alpha_yv12_ptr; + break; + case IMGFMT_YUY2: + draw_alpha_ptr=draw_alpha_yuy2_ptr; + break; + case IMGFMT_UYVY: + draw_alpha_ptr=draw_alpha_uyvy_ptr; + break; + default: + MSG_ERR("draw alpha for %s fourcc not implemented yet!",vo_format_name(fmt)); + draw_alpha_ptr=vo_draw_alpha_null; + break; + } +} + +OSD_Render::OSD_Render(unsigned fourcc) +{ +#ifdef FAST_OSD_TABLE + int i; + for(i=0;i<256;i++){ + fast_osd_15bpp_table[i]=((i>>3)<<10)|((i>>3)<<5)|(i>>3); + fast_osd_16bpp_table[i]=((i>>3)<<11)|((i>>2)<<5)|(i>>3); + } +#endif +/*FIXME the optimized stuff is a lie for 15/16bpp as they arent optimized yet*/ +// ordered per speed fasterst first +#ifdef __AVX__ +if(gCpuCaps.hasSSE41) +{ + MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_AVX; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_AVX; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_AVX; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_AVX; +} +else +#endif +#ifdef __SSE4_1__ +if(gCpuCaps.hasSSE41) +{ + MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE4; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE4; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE4; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE4; +} +else +#endif +#ifdef __SSSE3__ +if(gCpuCaps.hasSSSE3) +{ + MSG_V("Using SSSE3 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSSE3; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSSE3; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSSE3; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSSE3; +} +else +#endif +#ifdef __SSE3__ +if(gCpuCaps.hasSSE3) +{ + MSG_V("Using SSE3 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE3; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE3; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE3; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE3; +} +else +#endif +#ifdef __SSE2__ +if(gCpuCaps.hasSSE2) +{ + MSG_V("Using SSE2 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE2; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE2; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE2; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE2; +} +else +#endif +#ifndef __x86_64__ +#ifdef __SSE__ +if(gCpuCaps.hasMMX2) +{ + MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE; +} +else +#endif +//#ifdef __MMX__ +//if(gCpuCaps.hasMMX) +//{ +// MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); +// draw_alpha_yv12_ptr=vo_draw_alpha_yv12_MMX; +// draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_MMX; +// draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_MMX; +// draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_MMX; +//} +//else +//#endif +#endif +{ + MSG_V("Using generic OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_c; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_c; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_c; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_c; +} + draw_alpha_uyvy_ptr=vo_draw_alpha_uyvy_c; + draw_alpha_rgb15_ptr=vo_draw_alpha_rgb15_c; + draw_alpha_rgb16_ptr=vo_draw_alpha_rgb16_c; + get_draw_alpha(fourcc); +} + +OSD_Render::~OSD_Render(){} Copied: mplayerxp/libvo/osd_render.h (from rev 464, mplayerxp/libvo/osd.h) =================================================================== --- mplayerxp/libvo/osd_render.h (rev 0) +++ mplayerxp/libvo/osd_render.h 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,25 @@ +#ifndef __MPLAYER_OSD_RENDER_H_INCLUDED +#define __MPLAYER_OSD_RENDER_H_INCLUDED 1 + +/* Generic alpha renderers for all YUV modes and RGB depths. */ +/* These are "reference implementations", should be optimized later (MMX, etc) */ +class OSD_Render : public Opaque { + public: + OSD_Render(unsigned fourcc); + virtual ~OSD_Render(); + + void render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); + private: + void get_draw_alpha(unsigned fmt); + typedef void (* __FASTCALL__ draw_alpha_f)(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); + draw_alpha_f draw_alpha_ptr; + draw_alpha_f draw_alpha_yv12_ptr; + draw_alpha_f draw_alpha_yuy2_ptr; + draw_alpha_f draw_alpha_uyvy_ptr; + draw_alpha_f draw_alpha_rgb24_ptr; + draw_alpha_f draw_alpha_rgb32_ptr; + draw_alpha_f draw_alpha_rgb15_ptr; + draw_alpha_f draw_alpha_rgb16_ptr; +}; + +#endif Copied: mplayerxp/libvo/osd_render_template.h (from rev 463, mplayerxp/libvo/osd_template.h) =================================================================== --- mplayerxp/libvo/osd_render_template.h (rev 0) +++ mplayerxp/libvo/osd_render_template.h 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,318 @@ +// Generic alpha renderers for all YUV modes and RGB depths. +// Optimized by Nick and Michael +// Code from Michael Niedermayer (mic...@gm...) is under GPL +#include "pvector/pvector.h" + +#ifdef HAVE_INT_PVECTOR +static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_load)(const any_t*__P) +{ + return *(const __m64 *)__P; +} +#undef _m_load +#define _m_load PVECTOR_RENAME(_m_load) + +static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_load_half)(const any_t*__P) +{ + return _mm_cvtsi32_si64 (*(const int *)__P); +} +#undef _m_load_half +#define _m_load_half PVECTOR_RENAME(_m_load_half) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_store)(any_t*__P, __m64 src) +{ + *(__m64 *)__P = src; +} +#undef _m_store +#define _m_store PVECTOR_RENAME(_m_store) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_store_half)(any_t*__P, __m64 src) +{ + *(int *)__P = _mm_cvtsi64_si32(src); +} +#undef _m_store_half +#define _m_store_half PVECTOR_RENAME(_m_store_half) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_movntq)(any_t*__P, __m64 src) +{ +#ifdef HAVE_MMX2 + _mm_stream_pi(__P,src); +#else + _m_store(__P,src); +#endif +} +#undef _m_movntq +#define _m_movntq PVECTOR_RENAME(_m_movntq) + +#endif + +static inline void PVECTOR_RENAME(vo_draw_alpha_yv12)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + unsigned y; +#ifdef HAVE_INT_PVECTOR + __ivec vzero = _ivec_setzero(); +#endif +PROFILE_START(); + for(y=0;y<(unsigned)h;y++){ + int x; + x=0; +#ifdef HAVE_INT_PVECTOR + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + /* MOVNTDQ: #GP(0) - If memory operand is not aligned on a 16-byte boundary */ + if(!_ivec_aligned(dstbase)) + for(;x<w;x++){ + unsigned char *dst=&dstbase[x]; + if(srca[x]) *dst=((dstbase[x]*srca[x])>>8)+src[x]; + if(_ivec_aligned(dst)) break; /* align on sizeof(MMREG) boundary */ + } + if((w-x)>=_ivec_size()) + for(;x<w;x+=_ivec_size()){ + __ivec vmsk,vdest,vsrc,vsrca,vt[4]; + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + vdest = _ivec_loada(&dstbase[x]); + if(_ivec_aligned(&src[x])) + vsrc = _ivec_loada(&src[x]); + else + vsrc = _ivec_loadu(&src[x]); + if(_ivec_aligned(&srca[x])) + vsrca = _ivec_loada(&srca[x]); + else + vsrca = _ivec_loadu(&srca[x]); + vmsk = _ivec_not(_ivec_cmpeq_s8(vsrca,vzero)); + vt[0] = _ivec_u16_from_u8(vdest,&vt[1]); + vt[2] = _ivec_u16_from_u8(vsrca,&vt[3]); + vt[0] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[0],vt[2]),8); + vt[1] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[1],vt[3]),8); + vt[0] = _ivec_add_s8(_ivec_u8_from_u16(vt[0],vt[1]),vsrc); + vt[1] = _ivec_blend_u8(vdest,vt[0],vmsk); + if(finalize) + _ivec_stream(&dstbase[x],vt[1]); + else + _ivec_storea(&dstbase[x],vt[1]); + } +#endif + for(;x<w;x++){ + if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_yv12"); + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_yuy2)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; +#if defined(FAST_OSD) && !defined(HAVE_MMX) + w=w>>1; +#endif +PROFILE_START(); + for(y=0;y<h;y++){ + register int x=0; +#ifdef HAVE_INT_PVECTOR + /* TODO: port this stuff on PVector */ + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[5]=_mm_set1_pi8(0xFF); + mm[4]=mm[5]; + mm[5]=_m_psllwi(mm[5],8); + mm[4]=_m_psrlwi(mm[4],8); + for(;x<w;x+=4){ + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&(((char *)dstbase)[x*2])); + mm[1]=mm[0]; + mm[0]=_m_pand(mm[0],mm[4]); + mm[2]=_m_load_half(&(((char *)srca)[x])); + mm[2]=_m_paddb(mm[2],_m_load(&bFF)); + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_pand(mm[1],mm[5]); + mm[2]=_m_load_half(&(((char *)src)[x])); + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[0]=_m_por(mm[0],mm[1]); + mm[0]=_m_paddb(mm[0],mm[2]); + if(finalize) + _m_movntq(&(((char *)dstbase)[x*2]),mm[0]); + else + _m_store(&(((char *)dstbase)[x*2]),mm[0]); + } +#endif + for(;x<w;x++){ +#ifdef FAST_OSD + if(srca[2*x+0]) dstbase[4*x+0]=src[2*x+0]; + if(srca[2*x+1]) dstbase[4*x+2]=src[2*x+1]; +#else + if(srca[x]) { + dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; + dstbase[2*x+1]=((((signed)dstbase[2*x+1]-128)*srca[x])>>8)+128; + } +#endif + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_yuy2"); + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_rgb24)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned char *dst = dstbase; + register int x=0; +#ifdef HAVE_INT_PVECTOR + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[6]=_mm_set1_pi8(0xFF); + for(;x<w;x+=2){ + if(srca[x] || srca[x+1]) { + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&dstbase[0]); + mm[1]=mm[0]; + mm[5]=mm[0]; + mm[0]=_m_punpcklbw(mm[0],mm[7]); + mm[1]=_m_punpckhbw(mm[1],mm[7]); + mm[2]=_m_load_half(&srca[x]); + mm[2]=_m_paddb(mm[2],mm[6]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[3]=mm[2]; + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[3]=_m_punpckhbw(mm[3],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[1]=_m_pmullw(mm[1],mm[3]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_psrlwi(mm[1],8); + mm[0]=_m_packuswb(mm[0],mm[1]); + mm[2]=_m_load_half(&src[x]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[0]=_m_paddb(mm[0],mm[2]); + mm[5]=_m_pand(mm[5],_m_load(&mask24lh)); + mm[0]=_m_pand(mm[0],_m_load(&mask24hl)); + mm[5]=_m_por(mm[5],mm[0]); + if(finalize) + _m_movntq(&dstbase[0],mm[5]); + else + _m_store(&dstbase[0],mm[5]); + } + dst += 6; + } +#endif /* arch_x86 */ + for(;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD + dst[0]=dst[1]=dst[2]=src[x]; +#else + dst[0]=((dst[0]*srca[x])>>8)+src[x]; + dst[1]=((dst[1]*srca[x])>>8)+src[x]; + dst[2]=((dst[2]*srca[x])>>8)+src[x]; +#endif + } + dst+=3; // 24bpp + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_rgb32)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; +PROFILE_START(); + for(y=0;y<h;y++){ + register int x=0; +#ifdef HAVE_INT_PVECTOR + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[6]=_mm_set1_pi8(0xFF); + for(;x<w;x+=2){ + if(srca[x] || srca[x+1]) { + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&dstbase[4*x]); + mm[1]=mm[0]; + mm[0]=_m_punpcklbw(mm[0],mm[7]); + mm[1]=_m_punpckhbw(mm[1],mm[7]); + mm[2]=_m_load_half(&srca[x]); + mm[2]=_m_paddb(mm[2],mm[6]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[3]=mm[2]; + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[3]=_m_punpckhbw(mm[3],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[1]=_m_pmullw(mm[1],mm[3]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_psrlwi(mm[1],8); + mm[0]=_m_packuswb(mm[0],mm[1]); + mm[2]=_m_load_half(&src[x]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[0]=_m_paddb(mm[0],mm[2]); + if(finalize) + _m_movntq(&dstbase[4*x],mm[0]); + else + _m_store(&dstbase[4*x],mm[0]); + } + } +#endif /* arch_x86 */ + for(;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD + dstbase[4*x+0]=dstbase[4*x+1]=dstbase[4*x+2]=src[x]; +#else + dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; + dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; + dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_rgb32"); + return; +} Deleted: mplayerxp/libvo/osd_template.h =================================================================== --- mplayerxp/libvo/osd_template.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd_template.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,318 +0,0 @@ -// Generic alpha renderers for all YUV modes and RGB depths. -// Optimized by Nick and Michael -// Code from Michael Niedermayer (mic...@gm...) is under GPL -#include "pvector/pvector.h" - -#ifdef HAVE_INT_PVECTOR -static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_load)(const any_t*__P) -{ - return *(const __m64 *)__P; -} -#undef _m_load -#define _m_load PVECTOR_RENAME(_m_load) - -static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_load_half)(const any_t*__P) -{ - return _mm_cvtsi32_si64 (*(const int *)__P); -} -#undef _m_load_half -#define _m_load_half PVECTOR_RENAME(_m_load_half) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_store)(any_t*__P, __m64 src) -{ - *(__m64 *)__P = src; -} -#undef _m_store -#define _m_store PVECTOR_RENAME(_m_store) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_store_half)(any_t*__P, __m64 src) -{ - *(int *)__P = _mm_cvtsi64_si32(src); -} -#undef _m_store_half -#define _m_store_half PVECTOR_RENAME(_m_store_half) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_movntq)(any_t*__P, __m64 src) -{ -#ifdef HAVE_MMX2 - _mm_stream_pi(__P,src); -#else - _m_store(__P,src); -#endif -} -#undef _m_movntq -#define _m_movntq PVECTOR_RENAME(_m_movntq) - -#endif - -static inline void PVECTOR_RENAME(vo_draw_alpha_yv12)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - unsigned y; -#ifdef HAVE_INT_PVECTOR - __ivec vzero = _ivec_setzero(); -#endif -PROFILE_START(); - for(y=0;y<(unsigned)h;y++){ - int x; - x=0; -#ifdef HAVE_INT_PVECTOR - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - /* MOVNTDQ: #GP(0) - If memory operand is not aligned on a 16-byte boundary */ - if(!_ivec_aligned(dstbase)) - for(;x<w;x++){ - unsigned char *dst=&dstbase[x]; - if(srca[x]) *dst=((dstbase[x]*srca[x])>>8)+src[x]; - if(_ivec_aligned(dst)) break; /* align on sizeof(MMREG) boundary */ - } - if((w-x)>=_ivec_size()) - for(;x<w;x+=_ivec_size()){ - __ivec vmsk,vdest,vsrc,vsrca,vt[4]; - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - vdest = _ivec_loada(&dstbase[x]); - if(_ivec_aligned(&src[x])) - vsrc = _ivec_loada(&src[x]); - else - vsrc = _ivec_loadu(&src[x]); - if(_ivec_aligned(&srca[x])) - vsrca = _ivec_loada(&srca[x]); - else - vsrca = _ivec_loadu(&srca[x]); - vmsk = _ivec_not(_ivec_cmpeq_s8(vsrca,vzero)); - vt[0] = _ivec_u16_from_u8(vdest,&vt[1]); - vt[2] = _ivec_u16_from_u8(vsrca,&vt[3]); - vt[0] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[0],vt[2]),8); - vt[1] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[1],vt[3]),8); - vt[0] = _ivec_add_s8(_ivec_u8_from_u16(vt[0],vt[1]),vsrc); - vt[1] = _ivec_blend_u8(vdest,vt[0],vmsk); - if(finalize) - _ivec_stream(&dstbase[x],vt[1]); - else - _ivec_storea(&dstbase[x],vt[1]); - } -#endif - for(;x<w;x++){ - if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_yv12"); - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_yuy2)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; -#if defined(FAST_OSD) && !defined(HAVE_MMX) - w=w>>1; -#endif -PROFILE_START(); - for(y=0;y<h;y++){ - register int x=0; -#ifdef HAVE_INT_PVECTOR - /* TODO: port this stuff on PVector */ - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[5]=_mm_set1_pi8(0xFF); - mm[4]=mm[5]; - mm[5]=_m_psllwi(mm[5],8); - mm[4]=_m_psrlwi(mm[4],8); - for(;x<w;x+=4){ - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&(((char *)dstbase)[x*2])); - mm[1]=mm[0]; - mm[0]=_m_pand(mm[0],mm[4]); - mm[2]=_m_load_half(&(((char *)srca)[x])); - mm[2]=_m_paddb(mm[2],_m_load(&bFF)); - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_pand(mm[1],mm[5]); - mm[2]=_m_load_half(&(((char *)src)[x])); - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[0]=_m_por(mm[0],mm[1]); - mm[0]=_m_paddb(mm[0],mm[2]); - if(finalize) - _m_movntq(&(((char *)dstbase)[x*2]),mm[0]); - else - _m_store(&(((char *)dstbase)[x*2]),mm[0]); - } -#endif - for(;x<w;x++){ -#ifdef FAST_OSD - if(srca[2*x+0]) dstbase[4*x+0]=src[2*x+0]; - if(srca[2*x+1]) dstbase[4*x+2]=src[2*x+1]; -#else - if(srca[x]) { - dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; - dstbase[2*x+1]=((((signed)dstbase[2*x+1]-128)*srca[x])>>8)+128; - } -#endif - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_yuy2"); - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_rgb24)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned char *dst = dstbase; - register int x=0; -#ifdef HAVE_INT_PVECTOR - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[6]=_mm_set1_pi8(0xFF); - for(;x<w;x+=2){ - if(srca[x] || srca[x+1]) { - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&dstbase[0]); - mm[1]=mm[0]; - mm[5]=mm[0]; - mm[0]=_m_punpcklbw(mm[0],mm[7]); - mm[1]=_m_punpckhbw(mm[1],mm[7]); - mm[2]=_m_load_half(&srca[x]); - mm[2]=_m_paddb(mm[2],mm[6]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[3]=mm[2]; - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[3]=_m_punpckhbw(mm[3],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[1]=_m_pmullw(mm[1],mm[3]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_psrlwi(mm[1],8); - mm[0]=_m_packuswb(mm[0],mm[1]); - mm[2]=_m_load_half(&src[x]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[0]=_m_paddb(mm[0],mm[2]); - mm[5]=_m_pand(mm[5],_m_load(&mask24lh)); - mm[0]=_m_pand(mm[0],_m_load(&mask24hl)); - mm[5]=_m_por(mm[5],mm[0]); - if(finalize) - _m_movntq(&dstbase[0],mm[5]); - else - _m_store(&dstbase[0],mm[5]); - } - dst += 6; - } -#endif /* arch_x86 */ - for(;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD - dst[0]=dst[1]=dst[2]=src[x]; -#else - dst[0]=((dst[0]*srca[x])>>8)+src[x]; - dst[1]=((dst[1]*srca[x])>>8)+src[x]; - dst[2]=((dst[2]*srca[x])>>8)+src[x]; -#endif - } - dst+=3; // 24bpp - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_rgb32)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; -PROFILE_START(); - for(y=0;y<h;y++){ - register int x=0; -#ifdef HAVE_INT_PVECTOR - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[6]=_mm_set1_pi8(0xFF); - for(;x<w;x+=2){ - if(srca[x] || srca[x+1]) { - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&dstbase[4*x]); - mm[1]=mm[0]; - mm[0]=_m_punpcklbw(mm[0],mm[7]); - mm[1]=_m_punpckhbw(mm[1],mm[7]); - mm[2]=_m_load_half(&srca[x]); - mm[2]=_m_paddb(mm[2],mm[6]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[3]=mm[2]; - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[3]=_m_punpckhbw(mm[3],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[1]=_m_pmullw(mm[1],mm[3]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_psrlwi(mm[1],8); - mm[0]=_m_packuswb(mm[0],mm[1]); - mm[2]=_m_load_half(&src[x]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[0]=_m_paddb(mm[0],mm[2]); - if(finalize) - _m_movntq(&dstbase[4*x],mm[0]); - else - _m_store(&dstbase[4*x],mm[0]); - } - } -#endif /* arch_x86 */ - for(;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD - dstbase[4*x+0]=dstbase[4*x+1]=dstbase[4*x+2]=src[x]; -#else - dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; - dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; - dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_rgb32"); - return; -} Modified: mplayerxp/libvo/sub.cpp =================================================================== --- mplayerxp/libvo/sub.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/sub.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -11,7 +11,6 @@ #include "video_out.h" #include "font_load.h" #include "sub.h" -#include "osd.h" #include "libmpsub/spudec.h" #include "libmpsub/vobsub.h" #define MSGT_CLASS MSGT_OSD Modified: mplayerxp/libvo/sub.h =================================================================== --- mplayerxp/libvo/sub.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/sub.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,7 +1,7 @@ #ifndef __MPLAYER_SUB_H #define __MPLAYER_SUB_H #include <inttypes.h> -#include "osd.h" +#include "osd_render.h" typedef struct mp_osd_bbox_s { int x1,y1,x2,y2; Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/video_out.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -44,7 +44,7 @@ #include "screenshot.h" #include "osdep/bswap.h" #include "dri_vo.h" -#include "osd.h" +#include "osd_render.h" #include "sub.h" #include "vo_msg.h" Modified: mplayerxp/libvo/video_out_internal.h =================================================================== --- mplayerxp/libvo/video_out_internal.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/video_out_internal.h 2012-11-27 15:55:31 UTC (rev 465) @@ -52,6 +52,4 @@ virtual MPXP_Rc ctrl(uint32_t request, any_t*data) = 0; }; -#include "osd.h" - #endif Modified: mplayerxp/libvo/vidix_system.cpp =================================================================== --- mplayerxp/libvo/vidix_system.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/vidix_system.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -27,8 +27,6 @@ #include "vidix_system.h" #include "osdep/fastmemcpy.h" -#include "osd.h" -#include "sub.h" #include "xmpcore/mp_image.h" #include "vo_msg.h" Modified: mplayerxp/libvo/vo_fbdev.cpp =================================================================== --- mplayerxp/libvo/vo_fbdev.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/vo_fbdev.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -34,7 +34,6 @@ #include "vidix_system.h" #endif #include "aspect.h" -#include "osd.h" #include "dri_vo.h" #include "libmpstream/mrl.h" #include "vo_msg.h" Modified: mplayerxp/postproc/libmenu/menu.cpp =================================================================== --- mplayerxp/postproc/libmenu/menu.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/libmenu/menu.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -11,7 +11,7 @@ #include <fcntl.h> #include <unistd.h> -#include "libvo/osd.h" +#include "libvo/osd_render.h" #include "libvo/font_load.h" #include "libvo/sub.h" #include "osdep/keycodes.h" Modified: mplayerxp/postproc/vf_expand.cpp =================================================================== --- mplayerxp/postproc/vf_expand.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/vf_expand.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -16,7 +16,6 @@ #ifdef OSD_SUPPORT #include "libvo/video_out.h" #include "libvo/sub.h" -#include "libvo/osd.h" #endif #include "pp_msg.h" #include "mplayerxp.h" // vo_data Modified: mplayerxp/postproc/vf_panscan.cpp =================================================================== --- mplayerxp/postproc/vf_panscan.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/vf_panscan.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -17,7 +17,6 @@ #ifdef OSD_SUPPORT #include "libvo/sub.h" -#include "libvo/osd.h" #endif #include "pp_msg.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |