PKGBUILDs/aur/mplayer-z2/mplayer-1.0rc4-pxa-wejp.patch
2011-06-02 01:07:02 +02:00

393 lines
11 KiB
Diff

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 <anarsoul@gmail.com>
+ * (C) 2007
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <linux/fb.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#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 <anarsoul@gmail.com>",
+ ""
+};
+
+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 \