From 17ebb975a47cd21918959aa226b3607e5a8e45e9 Mon Sep 17 00:00:00 2001 From: Kai Uwe Jesussek Date: Thu, 2 Jun 2011 01:07:02 +0200 Subject: [PATCH] added pxa270 optimized mplayer --- aur/mplayer-z2/PKGBUILD | 51 +++ aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch | 393 +++++++++++++++++++ aur/mplayer-z2/mplayer.conf | 3 + 3 files changed, 447 insertions(+) create mode 100644 aur/mplayer-z2/PKGBUILD create mode 100644 aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch create mode 100644 aur/mplayer-z2/mplayer.conf diff --git a/aur/mplayer-z2/PKGBUILD b/aur/mplayer-z2/PKGBUILD new file mode 100644 index 000000000..9d81570a3 --- /dev/null +++ b/aur/mplayer-z2/PKGBUILD @@ -0,0 +1,51 @@ +# $Id: PKGBUILD 117246 2011-03-30 14:23:30Z ibiru $ +# Maintainer: Kai Uwe Jesussek +# Contributor: Ionut Biru +# Contributor: Hugo Doria + +pkgname=mplayer-z2 +pkgver=1.0rc4 +pkgrel=1 +pkgdesc="A movie player for linux" +arch=('i686' 'x86_64' 'arm') +depends=('libmad' 'cdparanoia' 'libxinerama' 'sdl' 'lame' 'libtheora' 'xvidcore' 'libmng' 'libxss' + 'smbclient' 'aalib' 'libcaca' 'x264' 'faac' 'ttf-dejavu' 'libxvmc' 'enca' 'mpg123-arm' + 'opencore-amr' 'libdca' 'a52dec') +license=('GPL') +url="http://www.mplayerhq.hu/" +makedepends=('unzip' 'yasm') +backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf') +source=('mplayer-1.0rc4-pxa-wejp.patch' 'mplayer.conf' 'http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc4.tar.bz2' ) +conflicts=('mplayer') +provides=('mplayer') +md5sums=('480d11daa4962629e6fb26bd61993a0f' + '6e960e87b4aee28889f0ea5c65f711fb' + '1699c94de39da9c4c5d34e8f58e418f0') + +build() { + # Custom CFLAGS break the mplayer build + unset CFLAGS LDFLAGS + + cd ${srcdir}/MPlayer-1.0rc4 +#patch -p1 < ${srcdir}/mplayer-1.0rc4-pxa-wejp.patch +#./configure --enable-armv5te --enable-iwmmxt --enable-pxa \ +#--enable-faad-fixed --enable-tremor-low \ +#--disable-mp3lib --disable-libvorbis --disable-vidix \ +#--extra-cflags="-march=iwmmxt" \ +#--disable-runtime-cpudetection --disable-sighandler \ +#--disable-live --enable-alsa --enable-mpg123 \ +#--extra-ldflags="-lmpg123" \ +##--confdir=/etc/mplayer + + [ "$CARCH" = "i686" ] && sed 's|-march=i486|-march=i686|g' -i config.mak + + #make + make -j1 DESTDIR=${pkgdir} install + install -Dm644 etc/{codecs.conf,input.conf,example.conf} ${pkgdir}/etc/mplayer/ + mkdir -p ${pkgdir}/etc/mplayer/ + cp ${srcdir}/mplayer.conf ${pkgdir}/etc/mplayer/ + install -dm755 ${pkgdir}/usr/share/mplayer/ + ln -s /usr/share/fonts/TTF/DejaVuSans.ttf ${pkgdir}/usr/share/mplayer/subfont.ttf + rm -rf ${pkgdir}/usr/share/mplayer/font +} + diff --git a/aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch b/aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch new file mode 100644 index 000000000..8b6ab3ae2 --- /dev/null +++ b/aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch @@ -0,0 +1,393 @@ +diff -ruN MPlayer-1.0rc4/configure MPlayer-1.0rc4-pxa/configure +--- MPlayer-1.0rc4/configure 2010-07-29 02:31:57.000000000 +0200 ++++ MPlayer-1.0rc4-pxa/configure 2011-02-27 14:12:12.000000000 +0100 +@@ -630,6 +630,7 @@ + _svga=auto + _vesa=auto + _fbdev=auto ++_pxa=no + _dvb=auto + _dxr2=auto + _dxr3=auto +@@ -997,6 +998,8 @@ + --enable-fbdev) _fbdev=yes ;; + --disable-fbdev) _fbdev=no ;; + --enable-dvb) _dvb=yes ;; ++ --enable-pxa) _pxa=yes ;; ++ --disable-pxa) _pxa=no ;; + --disable-dvb) _dvb=no ;; + --enable-dxr2) _dxr2=yes ;; + --disable-dxr2) _dxr2=no ;; +@@ -4875,7 +4878,15 @@ + fi + echores "$_fbdev" + +- ++echocheck "PXA27x Overlay Support" ++if test "$_pxa" = yes ; then ++ def_pxa='#define CONFIG_PXA 1' ++ vomodules="pxa $vomodules" ++else ++ def_pxa='#undef CONFIG_PXA' ++ novomodules="pxa $novomodules" ++fi ++echores "$_pxa" + + echocheck "DVB" + if test "$_dvb" = auto ; then +@@ -8644,6 +8655,7 @@ + PRIORITY = $_priority + PULSE = $_pulse + PVR = $_pvr ++PXA = $_pxa + QTX_CODECS = $_qtx + QTX_CODECS_WIN32 = $_qtx_codecs_win32 + QTX_EMULATION = $_qtx_emulation +@@ -9121,6 +9133,7 @@ + $def_dxr2 + $def_dxr3 + $def_fbdev ++$def_pxa + $def_ggi + $def_ggiwmh + $def_gif +diff -ruN MPlayer-1.0rc4/libvo/video_out.c MPlayer-1.0rc4-pxa/libvo/video_out.c +--- MPlayer-1.0rc4/libvo/video_out.c 2010-06-13 14:04:13.000000000 +0200 ++++ MPlayer-1.0rc4-pxa/libvo/video_out.c 2011-02-27 03:24:10.000000000 +0100 +@@ -114,6 +114,7 @@ + extern vo_functions_t video_out_fbdev; + extern const vo_functions_t video_out_fbdev2; + extern vo_functions_t video_out_svga; ++extern const vo_functions_t video_out_pxa; + extern const vo_functions_t video_out_png; + extern const vo_functions_t video_out_ggi; + extern const vo_functions_t video_out_aa; +@@ -214,6 +215,9 @@ + &video_out_fbdev, + &video_out_fbdev2, + #endif ++#ifdef CONFIG_PXA ++ &video_out_pxa, ++#endif + #ifdef CONFIG_SVGALIB + &video_out_svga, + #endif +diff -ruN MPlayer-1.0rc4/libvo/vo_pxa.c MPlayer-1.0rc4-pxa/libvo/vo_pxa.c +--- MPlayer-1.0rc4/libvo/vo_pxa.c 1970-01-01 01:00:00.000000000 +0100 ++++ MPlayer-1.0rc4-pxa/libvo/vo_pxa.c 2011-02-26 22:18:06.000000000 +0100 +@@ -0,0 +1,304 @@ ++/* ++ * Video driver for PXA27x/3xx Overlay 2 ++ * by Vasily Khoruzhick ++ * (C) 2007 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "config.h" ++#include "video_out.h" ++#include "video_out_internal.h" ++#include "sub.h" ++#include "aspect.h" ++#include "mp_msg.h" ++#include "subopt-helper.h" ++ ++static vo_info_t info = { ++ "PXA27x/3xx overlay", ++ "pxa", ++ "Vasily Khoruzhick ", ++ "" ++}; ++ ++LIBVO_EXTERN(pxa); ++ ++/* VO driver state */ ++ ++static int overlay_width, overlay_height, overlay_x, overlay_y; ++static int overlay_fd = -1; ++static void *overlay_mem; ++static size_t overlay_mem_size; ++static uint8_t *y_plane; ++static uint8_t *u_plane; ++static uint8_t *v_plane; ++ ++static int vo_pxa_check_format(uint32_t format) ++{ ++ switch (format) ++ { ++ /* Planar YUV Formats */ ++ case IMGFMT_YV12: ++ case IMGFMT_IYUV: ++ case IMGFMT_I420: ++ return( VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW ++ | VFCAP_ACCEPT_STRIDE ); ++ break; ++ ++ } ++ ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: format %s is not supported\n", ++ vo_format_name(format)); ++ ++ return 0; ++} ++ ++/***************************************************************************** ++ * preinit ++ * ++ * Preinitializes driver ++ * arg - currently it's vo_subdevice ++ * returns: zero on successful initialization, non-zero on error. ++ * ++ ****************************************************************************/ ++static int preinit(const char *vo_subdevice) ++{ ++ int r, fb = -1; ++ struct fb_var_screeninfo fbvar; ++ ++ fb = open("/dev/fb0", O_RDWR); ++ r = ioctl(fb, FBIOGET_VSCREENINFO, &fbvar); ++ if (r) { ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: get_vscreeninfo ioctl failed"); ++ return -1; ++ } ++ ++ overlay_width = fbvar.xres; ++ overlay_height = fbvar.yres; ++ ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: main plane res is %dx%d\n", ++ overlay_width, overlay_height); ++ ++ close(fb); ++ ++ return 0; ++} ++ ++ ++/***************************************************************************** ++ * config ++ * ++ * Config the display driver. ++ * params: ++ * src_width,srcheight: image source size ++ * dst_width,dst_height: size of the requested window size, just a hint ++ * fullscreen: flag, 0=windowd 1=fullscreen, just a hint ++ * title: window title, if available ++ * format: fourcc of pixel format ++ * returns : zero on successful initialization, non-zero on error. ++ * ++ ****************************************************************************/ ++static int config(uint32_t src_width, uint32_t src_height, ++ uint32_t dst_width, uint32_t dst_height, uint32_t flags, ++ char *title, uint32_t format) ++{ ++ int r; ++ struct fb_var_screeninfo fbvar; ++ struct fb_fix_screeninfo fbfix; ++ int i; ++ ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: config() src_width:%d, src_height:%d, dst_width:%d, dst_height:%d\n", ++ src_width, src_height, dst_width, dst_height); ++ ++ /* Check format */ ++ if (!vo_pxa_check_format(format)) ++ goto error; ++ ++ /* Check src image */ ++ if (src_width > overlay_width || src_height > overlay_height) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: src image is too big, scaling not supported.\n"); ++ goto error; ++ } ++ ++ if (dst_width > overlay_width || dst_height > overlay_height) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: dst is too big, scaling not supported.\n"); ++ goto error; ++ } ++ ++ if (src_width != dst_width || src_height != dst_height) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: src != dst, scaling not supported.\n"); ++ goto error; ++ } ++ ++ overlay_x = (overlay_width - dst_width) / 2; ++ overlay_y = (overlay_height - dst_height) / 2; ++ ++ overlay_fd = open("/dev/fb2", O_RDWR); ++ r = ioctl(overlay_fd, FBIOGET_VSCREENINFO, &fbvar); ++ if (r) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: get_vscreeninfo ioctl failed\n"); ++ goto error; ++ } ++ ++ fbvar.xres_virtual = fbvar.xres = overlay_width; ++ fbvar.yres_virtual = fbvar.yres = overlay_height; ++ fbvar.bits_per_pixel = 16; ++ fbvar.activate = FB_ACTIVATE_NOW; ++ ++ fbvar.nonstd = (4 << 20) | (0 << 10) | (0); /* YUV420P, X=0, Y=0 */ ++ ++ r = ioctl(overlay_fd, FBIOPUT_VSCREENINFO, &fbvar); ++ if (r) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: put_vscreeninfo ioctl failed\n"); ++ goto error; ++ } ++ r = ioctl(overlay_fd, FBIOGET_FSCREENINFO, &fbfix); ++ if (r) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: get_fscreeninfo ioctl failed\n"); ++ goto error; ++ } ++ ++ overlay_mem_size = fbfix.smem_len; ++ overlay_mem = mmap(NULL, overlay_mem_size, (PROT_READ | PROT_WRITE), ++ MAP_SHARED, overlay_fd, 0); ++ ++ if (overlay_mem == MAP_FAILED) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: failed to mmap overlay"); ++ goto error; ++ } ++ ++ y_plane = overlay_mem; ++ u_plane = y_plane + overlay_width * overlay_height; ++ v_plane = u_plane + overlay_width * overlay_height / 4; ++ ++ /* Fill the overlay with black */ ++ memset(y_plane, 16, ++ overlay_width * overlay_height); ++ memset(u_plane, 128, ++ overlay_width * overlay_height / 4); ++ memset(v_plane, 128, ++ overlay_width * overlay_height / 4); ++ ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: configured and opened 2nd overlay"); ++ ++ return 0; ++ ++error: ++ if (overlay_mem) ++ munmap(overlay_mem, overlay_mem_size); ++ if (overlay_fd != -1) ++ close(overlay_fd); ++ ++ overlay_mem = NULL; ++ overlay_fd = -1; ++ ++ return -1; ++} ++ ++static int control(uint32_t request, void *data, ...) ++{ ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: control %08x\n", request ); ++ ++ switch( request ) ++ { ++ case VOCTRL_QUERY_FORMAT: ++ return( vo_pxa_check_format( *(uint32_t *)data ) ); ++ break; ++ } ++ ++ return VO_NOTIMPL; ++} ++ ++ ++int draw_frame(uint8_t *src[]) ++{ ++ return 1; ++} ++ ++ ++/***************************************************************************** ++ * ++ * draw_slice ++ * ++ * Draw a planar YUV slice to the buffer: ++ * params: ++ * src[3] = source image planes (Y,U,V) ++ * stride[3] = source image planes line widths (in bytes) ++ * w,h = width*height of area to be copied (in Y pixels) ++ * x,y = position at the destination image (in Y pixels) ++ * ++ ****************************************************************************/ ++int draw_slice(uint8_t *src[], int stride[], int w,int h, int x,int y) ++{ ++ int i; ++ ++ x += overlay_x; ++ y += overlay_y; ++ ++ uint8_t *dst_y = y_plane + y * overlay_width + x; ++ uint8_t *dst_u = u_plane + y * overlay_width / 4 + x / 2; ++ uint8_t *dst_v = v_plane + y * overlay_width / 4 + x / 2; ++ uint8_t *src_y = src[0]; ++ uint8_t *src_u = src[1]; ++ uint8_t *src_v = src[2]; ++ ++ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: draw_slice() w %d h %d x %d y %d stride %d %d %d\n", ++ w, h, x, y, stride[0], stride[1], stride[2] ); ++ ++ if (w + x > overlay_width || h + y > overlay_height) { ++ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: too big image\n"); ++ return 0; ++ } ++ ++ for (i = 0; i < h; i++) { ++ fast_memcpy(dst_y, src_y, w); ++ src_y += stride[0]; ++ dst_y += overlay_width; ++ } ++ for (i = 0; i < h / 2; i++) { ++ fast_memcpy(dst_u, src_u, w / 2); ++ fast_memcpy(dst_v, src_v, w / 2); ++ src_u += stride[1]; ++ src_v += stride[2]; ++ dst_u += overlay_width / 2; ++ dst_v += overlay_width / 2; ++ } ++ ++ return 0; ++} ++ ++static void draw_osd(void) ++{ ++ /* FIXME */ ++ /* vo_draw_text(in_width, in_height, draw_alpha); */ ++} ++ ++static void flip_page(void) ++{ ++} ++ ++static void check_events(void) ++{ ++} ++ ++static void uninit(void) ++{ ++ if (overlay_mem) ++ munmap(overlay_mem, overlay_mem_size); ++ if (overlay_fd != -1) ++ close(overlay_fd); ++ ++ overlay_mem = NULL; ++ overlay_fd = -1; ++} +diff -ruN MPlayer-1.0rc4/Makefile MPlayer-1.0rc4-pxa/Makefile +--- MPlayer-1.0rc4/Makefile 2010-07-29 19:08:19.000000000 +0200 ++++ MPlayer-1.0rc4-pxa/Makefile 2011-02-27 14:14:21.000000000 +0100 +@@ -541,6 +541,7 @@ + SRCS_MPLAYER-$(DXR3) += libvo/vo_dxr3.c + SRCS_MPLAYER-$(ESD) += libao2/ao_esd.c + SRCS_MPLAYER-$(FBDEV) += libvo/vo_fbdev.c libvo/vo_fbdev2.c ++SRCS_MPLAYER-$(PXA) += libvo/vo_pxa.c + SRCS_MPLAYER-$(GGI) += libvo/vo_ggi.c + SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c + SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c \ diff --git a/aur/mplayer-z2/mplayer.conf b/aur/mplayer-z2/mplayer.conf new file mode 100644 index 000000000..a8c9a7feb --- /dev/null +++ b/aur/mplayer-z2/mplayer.conf @@ -0,0 +1,3 @@ +ao=alsa +vo=pxa +vf=rotate=2