Skip to contentSkip to conversation

mplayer changes and gconf-native drop

PATCH In review Martin Jansa 2 participants 8 messages Nov 30, 2011

lore
Share & tools
lore
#0 lore raw

cover mplayer changes and gconf-native drop

The following changes since commit f3ca7acd0b678a9247e432aee34512a26e30f509:

libsdl-x11: drop from meta-oe (2011-11-30 08:52:38 +0100)

are available in the git repository at:
git://git.openembedded.org/meta-openembedded-contrib jansa/pull
http://cgit.openembedded.org/cgit.cgi/meta-openembedded-contrib/log/?h=jansa/pull

Martin Jansa (4):
mplayer-common: import from OE-classic
mplayer2: drop armv7a/omapfb optimizations, those can be applied from
bsp layer if needed
mplayer2: drop OPTIMIZATIONs for now
gconf-native: drop from meta-gnome, newer version is in oe-core

 .../recipes-gnome/gconf/gconf-native_2.6.1.bb      |   17 -
 .../recipes-multimedia/mplayer/mplayer-common.bb   |   22 +
 .../mplayer/mplayer-common/mplayer.conf            |   15 +
 .../0001-video-out-for-omapfb-support.patch        |  826 --------------------
 meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb |   28 +-
 5 files changed, 43 insertions(+), 865 deletions(-)
 delete mode 100644 meta-gnome/recipes-gnome/gconf/gconf-native_2.6.1.bb
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common.bb
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf
 delete mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch
Signature · 1 line
1.7.8.rc4
#1 lore raw

PATCH 1/4 mplayer-common: import from OE-classic

From: Martin Jansa <[email protected]>

* default ao is now alsa instead of oss
* ffmp3float is terribly slow on armv4t without FPU, mad is better
* commit b28081b6039db85f18bf9e722fece59bff6e7b0f

---
 .../recipes-multimedia/mplayer/mplayer-common.bb   |   22 ++++++++++++++++++++
 .../mplayer/mplayer-common/mplayer.conf            |   15 +++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common.bb
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf
meta-oe/recipes-multimedia/mplayer/mplayer-common.bb new file +22 -0
new file mode 100644
index 0000000..889bb95
@@ -0,0 +1,22 @@
+# Copyright Matthias Hentges <[email protected]> (c) 2006
+# License: MIT (see COPYING.MIT)
+
+DESCRIPTION = "Preconfigured mplayer preferences"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PV = "0.0.1"
+
+SRC_URI = "file://mplayer.conf"
+
+# Yes, really /usr/etc!!!
+do_install() {
+	install -d "${D}/usr${sysconfdir}/mplayer"
+
+	install -m 0644 ${WORKDIR}/mplayer.conf "${D}/usr${sysconfdir}/mplayer"
+}
+
+FILES_${PN} = "/usr${sysconfdir}/mplayer"
+
+inherit allarch
meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf new file +15 -0
new file mode 100644
index 0000000..37ad65f
@@ -0,0 +1,15 @@
+
+# You probably shouldn't touch these
+ac=mad,
+ao=alsa,
+
+# Required on SL-Cxxxx for correct rotation in the *VT*,
+# breaks rotation in X!
+# vf=rotate=1
+
+# Enable fullscreen display by default
+# fs=true
+
+# Drop frames to keep audio and video in sync
+framedrop=true
+
Signature · 1 line
1.7.8.rc4
#2 lore raw

PATCH 2/4 mplayer2: drop armv7a/omapfb optimizations, those can be applied from bsp layer if needed

* not everybody has FEED_ARCH in OVERRIDES
* and not everybody has PKGARCHCOMPAT_ARMV7A enabled so we would need to duplicate armv7a and armv7a-vfp-neon
* example of working omapfb patch and optimizations is in meta-smartphone layer
http://git.shr-project.org/git/?p=meta-smartphone.git;a=commit;h=483afbee82869a0b2dacadc4b9580c47dcb59d26

---
 .../0001-video-out-for-omapfb-support.patch        |  826 --------------------
 meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb |   21 +-
 2 files changed, 1 insertions(+), 846 deletions(-)
 delete mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch
meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch deleted +0 -826
deleted file mode 100644
index a362ef6..0000000
@@ -1,826 +0,0 @@
-From 2a42cec41a018008d07ea33b2b91dca191d78481 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <[email protected]>
-Date: Thu, 25 Nov 2010 16:49:53 +0100
-Subject: [PATCH] video out for omapfb support
-
-Upstream-Status: Pending
-Signed-off-by: Martin Jansa <[email protected]>
-Signed-off-by: Koen Kooi <[email protected]>
----
- Makefile          |    2 +-
- libvo/video_out.c |    2 +
- libvo/vo_omapfb.c |  591 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- libvo/yuv.S       |  170 +++++++++++++++
- 4 files changed, 764 insertions(+), 1 deletions(-)
- create mode 100644 libvo/vo_omapfb.c
- create mode 100644 libvo/yuv.S
-
-diff --git a/Makefile b/Makefile
-index 83304a2..1e88d40 100644
---- a/Makefile
-+++ b/Makefile
-@@ -450,7 +450,7 @@ SRCS_MPLAYER-$(DIRECTFB)     += libvo/vo_directfb2.c libvo/vo_dfbmga.c
- SRCS_MPLAYER-$(DIRECTX)      += libao2/ao_dsound.c libvo/vo_directx.c
- 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-$(FBDEV)        += libvo/vo_fbdev.c libvo/vo_fbdev2.c libvo/vo_omapfb.c libvo/yuv.S
- SRCS_MPLAYER-$(FFMPEG)       += libvo/vo_png.c
- SRCS_MPLAYER-$(GGI)          += libvo/vo_ggi.c
- SRCS_MPLAYER-$(GIF)          += libvo/vo_gif89a.c
-diff --git a/libvo/video_out.c b/libvo/video_out.c
-index e796784..1433834 100644
---- a/libvo/video_out.c
-+++ b/libvo/video_out.c
-@@ -95,6 +95,7 @@ extern struct vo_driver video_out_null;
- extern struct vo_driver video_out_bl;
- extern struct vo_driver video_out_fbdev;
- extern struct vo_driver video_out_fbdev2;
-+extern struct vo_driver video_out_omapfb;
- extern struct vo_driver video_out_svga;
- extern struct vo_driver video_out_png;
- extern struct vo_driver video_out_ggi;
-@@ -193,6 +194,7 @@ const struct vo_driver *video_out_drivers[] =
- #ifdef CONFIG_FBDEV
-         &video_out_fbdev,
-         &video_out_fbdev2,
-+        &video_out_omapfb,
- #endif
- #ifdef CONFIG_SVGALIB
-         &video_out_svga,
-diff --git a/libvo/vo_omapfb.c b/libvo/vo_omapfb.c
-new file mode 100644
-index 0000000..7bd8927
---- /dev/null
-+++ b/libvo/vo_omapfb.c
-@@ -0,0 +1,591 @@
-+/*
-+ 
-+Copyright (C) 2008 Gregoire Gentil <[email protected]>
-+Portions Copyright (C) 2009 Howard Chu <[email protected]>
-+This file adds an optimized vo output to mplayer for the OMAP platform. This is a first pass and an attempt to help to improve
-+media playing on the OMAP platform. The usual disclaimer comes here: this code is provided without any warranty.
-+Many bugs and issues still exist. Feed-back is welcome.
-+
-+This output uses the yuv420_to_yuv422 conversion from Mans Rullgard, and is heavily inspired from the work of Siarhei Siamashka.
-+I would like to thank those two persons here, without them this code would certainly not exist.
-+
-+Two options of the output are available:
-+fb_overlay_only (disabled by default): only the overlay is drawn. X11 stuff is ignored.
-+dbl_buffer (disabled by default): add double buffering. Some tearsync flags are probably missing in the code.
-+
-+Syntax is the following:
-+mplayer -ao alsa -vo omapfb /test.avi
-+mplayer -nosound -vo omapfb:fb_overlay_only:dbl_buffer /test.avi
-+
-+You need to have two planes on your system. On beagleboard, it means something like: video=omapfb:vram:2M,vram:4M
-+
-+Known issues:
-+1) A green line or some vertical lines (if mplayer decides to draw bands instead of frame) may appear.
-+It's an interpolation bug in the color conversion that needs to be fixed
-+
-+2) The color conversion accepts only 16-pixel multiple for width and height.
-+
-+3) The scaling down is disabled as the scaling down kernel patch for the OMAP3 platform doesn't seem to work yet.
-+
-+ * This program 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.
-+ *
-+ * This program 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+*/
-+ 
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <errno.h>
-+
-+#include <sys/mman.h>
-+#include <sys/ioctl.h>
-+#include <linux/fb.h>
-+
-+#include "config.h"
-+#include "video_out.h"
-+#include "video_out_internal.h"
-+#include "fastmemcpy.h"
-+#include "sub/sub.h"
-+#include "mp_msg.h"
-+#include "omapfb.h"
-+#include "x11_common.h"
-+
-+#include "libswscale/swscale.h"
-+#include "libmpcodecs/vf_scale.h"
-+#include "libavcodec/avcodec.h"
-+
-+#include "aspect.h"
-+
-+#include "subopt-helper.h"
-+
-+#include <X11/Xlib.h>
-+#include <X11/Xutil.h>
-+#include <X11/Xatom.h>
-+#include "wskeys.h"
-+
-+static vo_info_t info = {
-+	"omapfb video driver",
-+	"omapfb",
-+	"",
-+	""
-+};
-+
-+LIBVO_EXTERN(omapfb)
-+
-+static int fb_overlay_only = 0; // if set, we need only framebuffer overlay, but do not need any x11 code
-+static int dbl_buffer = 0;
-+static int fullscreen_flag = 0;
-+static int plane_ready = 0;
-+static uint32_t drwX, drwY;
-+
-+extern void yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v, int w, int h, int yw, int cw, int dw);
-+static struct fb_var_screeninfo sinfo_p0;
-+static struct fb_var_screeninfo sinfo;
-+static struct fb_var_screeninfo sinfo2;
-+static struct fb_fix_screeninfo finfo;
-+static struct omapfb_mem_info minfo;
-+static struct omapfb_plane_info pinfo;
-+static int xoff, yoff;
-+
-+static struct {
-+    unsigned x;
-+    unsigned y;
-+    uint8_t *buf;
-+} fb_pages[2];
-+static int dev_fd = -1;
-+static int fb_page_flip = 0;
-+static int page = 0;
-+static void omapfb_update(int x, int y, int out_w, int out_h, int show);
-+
-+extern void mplayer_put_key( int code );
-+#include "input/keycodes.h"
-+
-+#define TRANSPARENT_COLOR_KEY 0xff0
-+
-+static Display *display = NULL; // pointer to X Display structure.
-+static int screen_num; // number of screen to place the window on.
-+static Window win = 0;
-+static Window parent = 0; // pointer to the newly created window.
-+
-+/* This is used to intercept window closing requests.  */
-+static Atom wm_delete_window;
-+
-+
-+void vo_calc_drwXY(uint32_t *drwX, uint32_t *drwY)
-+{
-+    *drwX = *drwY = 0;
-+    if (vo_fs) {
-+        aspect(&vo_dwidth, &vo_dheight, A_ZOOM);
-+        vo_dwidth  = FFMIN(vo_dwidth, vo_screenwidth);
-+        vo_dheight = FFMIN(vo_dheight, vo_screenheight);
-+        *drwX      = (vo_screenwidth - vo_dwidth) / 2;
-+        *drwY      = (vo_screenheight - vo_dheight) / 2;
-+        mp_msg(MSGT_VO, MSGL_V, "[vo-fs] dx: %d dy: %d dw: %d dh: %d\n",
-+               *drwX, *drwY, vo_dwidth, vo_dheight);
-+    } else if (WinID == 0) {
-+        *drwX = vo_dx;
-+        *drwY = vo_dy;
-+    }
-+}
-+
-+static void getPrimaryPlaneInfo()
-+{
-+    int dev_fd = open("/dev/fb0", O_RDWR);
-+
-+    if (dev_fd == -1) {
-+        mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error /dev/fb0\n");
-+        return -1;
-+    }
-+
-+    ioctl(dev_fd, FBIOGET_VSCREENINFO, &sinfo_p0);
-+    close(dev_fd);
-+}
-+
-+/**
-+ * Function to get the offset to be used when in windowed mode
-+ * or when using -wid option
-+ */
-+static void x11_get_window_abs_position(Display *display, Window window,
-+                                             int *wx, int *wy, int *ww, int *wh)
-+{
-+    Window root, parent;
-+    Window *child;
-+    unsigned int n_children;
-+    XWindowAttributes attribs;
-+
-+    /* Get window attributes */
-+    XGetWindowAttributes(display, window, &attribs);
-+
-+    /* Get relative position of given window */
-+    *wx = attribs.x;
-+    *wy = attribs.y;
-+    if (ww)
-+        *ww = attribs.width;
-+    if (wh)
-+        *wh = attribs.height;
-+
-+    /* Query window tree information */
-+    XQueryTree(display, window, &root, &parent, &child, &n_children);
-+    if (parent)
-+    {
-+      int x, y;
-+      /* If we have a parent we must go there and discover his position*/
-+      x11_get_window_abs_position(display, parent, &x, &y, NULL, NULL);
-+      *wx += x;
-+      *wy += y;
-+    }
-+
-+    /* If we had children, free it */
-+    if(n_children)
-+        XFree(child);
-+}
-+
-+static void x11_check_events(void)
-+{
-+    int e = vo_x11_check_events(mDisplay);
-+
-+    if (e & VO_EVENT_RESIZE)
-+        vo_calc_drwXY(&drwX, &drwY);
-+
-+    if (e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE)
-+    {
-+        vo_xv_draw_colorkey(drwX, drwY, vo_dwidth - 1, vo_dheight - 1);
-+        omapfb_update(0, 0, 0, 0, 1);
-+    }
-+}
-+
-+static void x11_uninit()
-+{
-+    if (display) {
-+        XCloseDisplay(display);
-+        display = NULL;
-+    }
-+}
-+
-+/**
-+ * Initialize framebuffer
-+ */
-+static int preinit(const char *arg)
-+{
-+    opt_t subopts[] = {
-+        {"fb_overlay_only", OPT_ARG_BOOL, &fb_overlay_only, NULL},
-+        {"dbl_buffer", OPT_ARG_BOOL, &dbl_buffer, NULL},
-+        {NULL}
-+    };
-+
-+    if (subopt_parse(arg, subopts) != 0) {
-+        mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] unknown suboptions: %s\n", arg);
-+        return -1;
-+    }
-+
-+    getPrimaryPlaneInfo();
-+    dev_fd = open("/dev/fb1", O_RDWR);
-+
-+    if (dev_fd == -1) {
-+        mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error /dev/fb1\n");
-+        return -1;
-+    }
-+
-+    ioctl(dev_fd, FBIOGET_VSCREENINFO, &sinfo);
-+    ioctl(dev_fd, OMAPFB_QUERY_PLANE, &pinfo);
-+    ioctl(dev_fd, OMAPFB_QUERY_MEM, &minfo);
-+
-+    if (!fb_overlay_only && !vo_init())
-+    {
-+        mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Could not open X, overlay only...\n");        
-+        fb_overlay_only = 1;
-+    }
-+
-+    return 0;
-+}
-+
-+static void omapfb_update(int x, int y, int out_w, int out_h, int show)
-+{
-+    int xres, yres;
-+    if (!fb_overlay_only)
-+        x11_get_window_abs_position(mDisplay, vo_window, &x, &y, &out_w, &out_h);
-+
-+    /* Check for new screen rotation */
-+    ioctl(dev_fd, FBIOGET_VSCREENINFO, &sinfo2);
-+    if (sinfo2.rotate != sinfo_p0.rotate)
-+        getPrimaryPlaneInfo();
-+
-+    if ( (!x && !y && !out_w && !out_h) ||
-+        (out_w < sinfo.xres_virtual / 4) || (out_h < sinfo.yres_virtual / 4) ||  /* HW can't scale down by more than 4x */
-+        (out_w > sinfo.xres_virtual * 8) || (out_h > sinfo.yres_virtual * 8) ) { /* HW can't scale up by more than 8x */
-+        pinfo.enabled = 0;
-+        pinfo.pos_x = 0;
-+        pinfo.pos_y = 0;
-+        ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo);
-+        return;
-+    }
-+
-+    xres = sinfo.xres_virtual;
-+    yres = sinfo.yres_virtual;
-+
-+    /* Handle clipping: if the left or top edge of the window goes
-+     * offscreen, clamp the overlay to the left or top edge of the
-+     * screen, and set the difference into the frame offset. Also
-+     * decrease the overlay size by the offset. The offset must
-+     * take window scaling into account as well.
-+     *
-+     * Likewise, if the right or bottom edge of the window goes
-+     * offscreen, clamp the overlay to the right or bottom edge of
-+     * the screen, and decrease the overlay size accordingly. The
-+     * hardware will truncate the output accordingly, so no offset
-+     * is needed. Also take window scaling into account.  -- hyc
-+     */
-+    if (x < 0) {
-+        /* clamp to left edge */
-+        xoff = -x;
-+        if (out_w != sinfo.xres_virtual) {
-+            /* account for scaling */
-+            xoff *= sinfo.xres_virtual;
-+            xoff /= out_w;
-+        }
-+        xres -= xoff;
-+        out_w += x;
-+        x = 0;
-+    } else {
-+        xoff = 0;
-+        if (x + out_w > sinfo_p0.xres) {
-+            /* clamp to right edge */
-+            int diff = sinfo_p0.xres - x;
-+            if (out_w != sinfo.xres_virtual) {
-+                /* account for scaling */
-+                xres = diff * sinfo.xres_virtual;
-+                xres /= out_w;
-+            } else {
-+                xres = diff;
-+            }
-+            out_w = diff;
-+        }
-+    }
-+
-+    if (y < 0) {
-+        /* clamp to top edge - this seldom occurs since the window
-+         * titlebar is usually forced to stay visible
-+         */
-+        yoff = -y;
-+        if (out_h != sinfo.yres_virtual) {
-+            /* account for scaling */
-+            yoff *= sinfo.yres_virtual;
-+            yoff /= out_h;
-+        }
-+        yres -= yoff;
-+        out_h += y;
-+        y = 0;
-+    } else {
-+        yoff = 0;
-+        if (y + out_h > sinfo_p0.yres) {
-+            /* clamp to bottom edge */
-+            int diff = sinfo_p0.yres - y;
-+            if (out_h != sinfo.yres_virtual) {
-+                /* account for scaling */
-+                yres = diff * sinfo.yres_virtual;
-+                yres /= out_h;
-+            } else {
-+                yres = diff;
-+            }
-+            out_h = diff;
-+        }
-+    }
-+
-+    if (xoff & 1)
-+        xoff++;
-+    if (xres & 1)
-+        xres--;
-+
-+    pinfo.enabled = show;
-+    pinfo.pos_x = x;
-+    pinfo.pos_y = y;
-+    pinfo.out_width  = out_w;
-+    pinfo.out_height = out_h;
-+
-+    sinfo.xoffset = fb_pages[page].x + xoff;
-+    sinfo.yoffset = fb_pages[page].y + yoff;
-+    /* If we had to change the overlay dimensions, update it */
-+    if (xres != sinfo2.xres || yres != sinfo2.yres ||
-+        sinfo.xoffset != sinfo2.xoffset ||
-+        sinfo.yoffset != sinfo2.yoffset) {
-+        sinfo.xres = xres;
-+        sinfo.yres = yres;
-+        sinfo.rotate = sinfo2.rotate;
-+        ioctl(dev_fd, FBIOPUT_VSCREENINFO, &sinfo);
-+    }
-+
-+    ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo);
-+}
-+
-+static int config(uint32_t width, uint32_t height, uint32_t d_width,
-+		uint32_t d_height, uint32_t flags, char *title,
-+		uint32_t format)
-+{
-+    uint8_t *fbmem;
-+    int i;
-+    struct omapfb_color_key color_key;
-+
-+    XVisualInfo vinfo;
-+    XSetWindowAttributes xswa;
-+    XWindowAttributes attribs;
-+    unsigned long xswamask;
-+    int depth;
-+
-+    Window root, parent;
-+    Window *child;
-+    unsigned int n_children;
-+
-+    fullscreen_flag = flags & VOFLAG_FULLSCREEN;
-+    if (!fb_overlay_only)
-+    {
-+        if (!title)
-+            title = "MPlayer OMAPFB (X11/FB) render";
-+
-+        XGetWindowAttributes(mDisplay, mRootWin, &attribs);
-+        depth = attribs.depth;
-+        if (depth != 15 && depth != 16 && depth != 24 && depth != 32)
-+            depth = 24;
-+        XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
-+
-+        xswa.border_pixel = 0;
-+        xswa.background_pixel = xv_colorkey = TRANSPARENT_COLOR_KEY;
-+
-+        xswamask = CWBackPixel | CWBorderPixel;
-+        xv_ck_info.method = CK_METHOD_BACKGROUND;
-+
-+        vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, vo_dwidth, vo_dheight,
-+                                flags, CopyFromParent, "omapfb", title);
-+        XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
-+
-+        /* Need to receive events on the parent window -- so when it is
-+           moved / resized / etc., we know. */
-+        if(WinID > 0)
-+        {
-+            /* Query window tree information */
-+            XQueryTree(mDisplay, vo_window, &root, &parent, &child, &n_children);
-+            if (n_children)
-+                XFree(child);
-+
-+            XUnmapWindow(mDisplay, vo_window);
-+            if (parent)
-+                XSelectInput(mDisplay, parent, StructureNotifyMask);
-+            XMapWindow(mDisplay, vo_window);
-+        }
-+
-+        vo_calc_drwXY(&drwX, &drwY);
-+        vo_xv_draw_colorkey(drwX, drwY, vo_dwidth - 1, vo_dheight - 1);
-+    }
-+
-+    fbmem = mmap(NULL, minfo.size, PROT_READ|PROT_WRITE, MAP_SHARED, dev_fd, 0);
-+    if (fbmem == MAP_FAILED) {
-+        mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error mmap\n");
-+        return -1;
-+    }
-+
-+    for (i = 0; i < minfo.size / 4; i++)
-+        ((uint32_t*)fbmem)[i] = 0x80008000;
-+
-+    sinfo.xres = width & ~15;
-+    sinfo.yres = height & ~15;
-+    sinfo.xoffset = 0;
-+    sinfo.yoffset = 0;
-+    sinfo.nonstd = OMAPFB_COLOR_YUY422;
-+
-+    fb_pages[0].x = 0;
-+    fb_pages[0].y = 0;
-+    fb_pages[0].buf = fbmem;
-+
-+    if (dbl_buffer && minfo.size >= sinfo.xres * sinfo.yres * 2) {
-+        sinfo.xres_virtual = sinfo.xres;
-+        sinfo.yres_virtual = sinfo.yres * 2;
-+        fb_pages[1].x = 0;
-+        fb_pages[1].y = sinfo.yres;
-+        fb_pages[1].buf = fbmem + sinfo.xres * sinfo.yres * 2;
-+        fb_page_flip = 1;
-+    } else {
-+        sinfo.xres_virtual = sinfo.xres;
-+        sinfo.yres_virtual = sinfo.yres;
-+        fb_page_flip = 0;
-+    }
-+
-+    ioctl(dev_fd, FBIOPUT_VSCREENINFO, &sinfo);
-+    ioctl(dev_fd, FBIOGET_FSCREENINFO, &finfo);
-+
-+    if (WinID <= 0) {
-+        if (fullscreen_flag) {
-+            omapfb_update(0, 0, sinfo_p0.xres, sinfo_p0.yres, 1);
-+        } else {
-+            omapfb_update(sinfo_p0.xres / 2 - sinfo.xres / 2, sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres, sinfo.yres, 1);
-+        }
-+    }
-+
-+    color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD;
-+    color_key.background = 0x0;
-+    color_key.trans_key = TRANSPARENT_COLOR_KEY;
-+    if (fb_overlay_only)
-+        color_key.key_type = OMAPFB_COLOR_KEY_DISABLED;
-+    else
-+        color_key.key_type = OMAPFB_COLOR_KEY_GFX_DST;
-+    ioctl(dev_fd, OMAPFB_SET_COLOR_KEY, &color_key);
-+
-+    plane_ready = 1;
-+    return 0;
-+}
-+
-+static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
-+{
-+    vo_draw_alpha_yuy2(w, h, src, srca, stride, fb_pages[page].buf + y0 * finfo.line_length + x0 * 2, finfo.line_length);
-+}
-+
-+static void draw_osd(void)
-+{
-+    vo_draw_text(sinfo.xres, sinfo.yres, draw_alpha);
-+}
-+
-+static int draw_frame(uint8_t *src[])
-+{
-+    return 1;
-+}
-+
-+static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
-+{
-+    if (x!=0)
-+        return 0;
-+
-+    if (!plane_ready)
-+        return 0;
-+
-+    ioctl(dev_fd, OMAPFB_SYNC_GFX);
-+
-+    yuv420_to_yuv422(fb_pages[page].buf + y * finfo.line_length, src[0], src[1], src[2], w & ~15, h, stride[0], stride[1], finfo.line_length);
-+    return 0;
-+}
-+
-+static void flip_page(void)
-+{
-+    if (fb_page_flip) {
-+        sinfo.xoffset = fb_pages[page].x + xoff;
-+        sinfo.yoffset = fb_pages[page].y + yoff;
-+        ioctl(dev_fd, FBIOPAN_DISPLAY, &sinfo);
-+        page ^= fb_page_flip;
-+    }
-+}
-+
-+static int query_format(uint32_t format)
-+{
-+    // For simplicity pretend that we can only do YV12, support for
-+    // other formats can be added quite easily if/when needed
-+    if (format != IMGFMT_YV12)
-+        return 0;
-+
-+    return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE;
-+}
-+
-+
-+/**
-+ * Uninitialize framebuffer
-+ */
-+static void uninit()
-+{
-+    pinfo.enabled = 0;
-+    ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo);
-+
-+    if (!fb_overlay_only) {
-+        struct omapfb_color_key color_key;
-+        color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD;
-+        color_key.key_type = OMAPFB_COLOR_KEY_DISABLED;
-+        ioctl(dev_fd, OMAPFB_SET_COLOR_KEY, &color_key);
-+    }
-+
-+    close(dev_fd);
-+
-+    if (!fb_overlay_only)
-+        x11_uninit();
-+}
-+
-+
-+static int control(uint32_t request, void *data, ...)
-+{
-+    switch (request) {
-+        case VOCTRL_QUERY_FORMAT:
-+            return query_format(*((uint32_t*)data));
-+        case VOCTRL_FULLSCREEN: {
-+            if (WinID > 0) return VO_FALSE;
-+            if (fullscreen_flag) {
-+                if (!fb_overlay_only)
-+                    vo_x11_fullscreen();
-+                fullscreen_flag = 0;
-+                omapfb_update(sinfo_p0.xres / 2 - sinfo.xres / 2, sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres, sinfo.yres, 1);
-+            } else {
-+                if (!fb_overlay_only)
-+                    vo_x11_fullscreen();
-+                fullscreen_flag = 1;
-+                omapfb_update(0, 0, sinfo_p0.xres, sinfo_p0.yres, 1);
-+            }
-+            return VO_TRUE;
-+        }
-+        case VOCTRL_UPDATE_SCREENINFO:
-+            update_xinerama_info();
-+            return VO_TRUE;
-+    }
-+    return VO_NOTIMPL;
-+}
-+
-+
-+static void check_events(void)
-+{
-+    if (!fb_overlay_only)
-+        x11_check_events();
-+}
-diff --git a/libvo/yuv.S b/libvo/yuv.S
-new file mode 100644
-index 0000000..1cd2c1d
---- /dev/null
-+++ b/libvo/yuv.S
-@@ -0,0 +1,170 @@
-+/*
-+    Copyright (C) 2008 Mans Rullgard
-+
-+    Permission is hereby granted, free of charge, to any person
-+    obtaining a copy of this software and associated documentation
-+    files (the "Software"), to deal in the Software without
-+    restriction, including without limitation the rights to use, copy,
-+    modify, merge, publish, distribute, sublicense, and/or sell copies
-+    of the Software, and to permit persons to whom the Software is
-+    furnished to do so, subject to the following conditions:
-+
-+    The above copyright notice and this permission notice shall be
-+    included in all copies or substantial portions of the Software.
-+
-+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+    DEALINGS IN THE SOFTWARE.
-+ */
-+
-+        .macro mov32    rd, val
-+        movw            \rd, #:lower16:\val
-+        movt            \rd, #:upper16:\val
-+        .endm
-+
-+        .fpu neon
-+        .text
-+
-+@ yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v,
-+@                  int w, int h, int yw, int cw, int dw)
-+
-+#define yuv  r0
-+#define y    r1
-+#define u    r2
-+#define v    r3
-+#define w    r4
-+#define h    r5
-+#define yw   r6
-+#define cw   r7
-+#define dw   r8
-+
-+#define tyuv r9
-+#define ty   r10
-+#define tu   r11
-+#define tv   r12
-+#define i    lr
-+
-+        .global yuv420_to_yuv422
-+        .func   yuv420_to_yuv422
-+yuv420_to_yuv422:
-+        push            {r4-r11,lr}
-+        add             r4,  sp,  #36
-+.Ldo_conv:
-+        ldm             r4, {r4-r8}
-+        push            {r4}
-+1:
-+        mov             tu,   u
-+        mov             tv,   v
-+        vld1.64         {d2}, [u,:64], cw               @ u0
-+        vld1.64         {d3}, [v,:64], cw               @ v0
-+        mov             tyuv, yuv
-+        mov             ty,   y
-+        vzip.8          d2,   d3                        @ u0v0
-+        mov             i,    #16
-+2:                      
-+        pld             [y, #64]
-+        vld1.64         {d0, d1},   [y,:128], yw        @ y0
-+        pld             [u, #64]
-+        subs            i,    i,    #4
-+        vld1.64         {d6},       [u,:64],  cw        @ u2
-+        pld             [y, #64]
-+        vld1.64         {d4, d5},   [y,:128], yw        @ y1
-+        pld             [v, #64]
-+        vld1.64         {d7},       [v,:64],  cw        @ v2
-+        pld             [y, #64]
-+        vld1.64         {d16,d17},  [y,:128], yw        @ y2
-+        vzip.8          d6,   d7                        @ u2v2
-+        pld             [u, #64]
-+        vld1.64         {d22},      [u,:64],  cw        @ u4
-+        pld             [v, #64]
-+        vld1.64         {d23},      [v,:64],  cw        @ v4
-+        pld             [y, #64]
-+        vld1.64         {d20,d21},  [y,:128], yw        @ y3
-+        vmov            q9,   q3                        @ u2v2
-+        vzip.8          d22,  d23                       @ u4v4
-+        vrhadd.u8       q3,   q1,   q3                  @ u1v1
-+        vzip.8          q0,   q1                        @ y0u0y0v0
-+        vmov            q12,  q11                       @ u4v4
-+        vzip.8          q2,   q3                        @ y1u1y1v1
-+        vrhadd.u8       q11,  q9,   q11                 @ u3v3
-+        vst1.64         {d0-d3},    [yuv,:128], dw      @ y0u0y0v0
-+        vzip.8          q8,   q9                        @ y2u2y2v2
-+        vst1.64         {d4-d7},    [yuv,:128], dw      @ y1u1y1v1
-+        vzip.8          q10,  q11                       @ y3u3y3v3
-+        vst1.64         {d16-d19},  [yuv,:128], dw      @ y2u2y2v2
-+        vmov            q1,   q12
-+        vst1.64         {d20-d23},  [yuv,:128], dw      @ y3u3y3v3
-+        bgt             2b
-+
-+        subs            w,    w,    #16
-+        add             yuv,  tyuv, #32
-+        add             y,    ty,   #16
-+        add             u,    tu,   #8
-+        add             v,    tv,   #8
-+        bgt             1b
-+
-+        ldr             w,    [sp]
-+        subs            h,    h,    #16
-+        add             yuv,  yuv,  dw, lsl #4
-+        sub             yuv,  yuv,  w,  lsl #1
-+        add             y,    y,    yw, lsl #4
-+        sub             y,    y,    w
-+        add             u,    u,    cw, lsl #3
-+        sub             u,    u,    w,  asr #1
-+        add             v,    v,    cw, lsl #3
-+        sub             v,    v,    w,  asr #1
-+        bgt             1b
-+
-+        pop             {r3-r11,pc}
-+        .endfunc
-+
-+        .func   neon_open
-+neon_open:
-+        push            {r4-r8,lr}
-+        ldrd            r4,  r5,  [r0, #16]
-+        ldrd            r6,  r7,  [r0, #24]
-+        lsl             r8,  r4,  #1
-+        mov32           r0,  conv_params
-+        stm             r0,  {r4-r8}
-+        mov             r0,  #0
-+        pop             {r4-r8,pc}
-+        .endfunc
-+
-+        .func   neon_convert
-+neon_convert:
-+        push            {r4-r11,lr}
-+        ldr             r0,  [r0]
-+        mov32           r4,  conv_params
-+        ldm             r1,  {r1-r3}
-+        b               .Ldo_conv
-+        .endfunc
-+
-+        .func   neon_nop
-+neon_nop:
-+        bx              lr
-+        .endfunc
-+
-+        .section .bss
-+conv_params:
-+        .skip           5*4
-+        .size           conv_params, . - conv_params
-+
-+        .section        .rodata
-+.Lname: .asciz          "neon"
-+ofb_pixconv_neon:
-+        .word           .Lname
-+        .word           0               @ flags
-+        .word           neon_open
-+        .word           neon_convert
-+        .word           neon_nop        @ finish
-+        .word           neon_nop        @ close
-+        .size           ofb_pixconv_neon, . - ofb_pixconv_neon
-+
-+        .section        .ofb_pixconv, "a"
-+ofb_pixconv_neon_p:
-+        .word           ofb_pixconv_neon
--- 
-1.7.2.5
-
meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +1 -20
index 10a69a9..c24cc4a 100644
@@ -5,7 +5,7 @@ HOMEPAGE = "http://www.mplayerhq.hu/"
 DEPENDS = "libvpx live555 libdvdread libtheora virtual/libsdl ffmpeg xsp zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11 virtual/kernel libass \
 	   ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad liba52 lame', d)}"
 
-#RDEPENDS_${PN} = "mplayer-common"
+RDEPENDS_${PN} = "mplayer-common"
 PROVIDES = "mplayer"
 RPROVIDES_${PN} = "mplayer"
 RCONFLICTS_${PN} = "mplayer"
@@ -17,10 +17,6 @@ SRC_URI = "git://repo.or.cz/mplayer.git;protocol=git;branch=master \
            file://cross.compile.codec-cfg.patch \
 "
 
-SRC_URI_append_aarmv7a = " \
-	   file://0001-video-out-for-omapfb-support.patch \
-	  "
-
 SRCREV = "e3f5043233336d8b4b0731c6a8b42a8fda5535ac"
 
 ARM_INSTRUCTION_SET = "ARM"
@@ -40,9 +36,6 @@ CONFFILES_${PN} += "/usr/etc/mplayer/input.conf \
 
 inherit autotools pkgconfig
 
-# We want a kernel header for armv7a, but we don't want to make mplayer machine specific for that
-STAGING_KERNEL_DIR = "${STAGING_DIR}/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/kernel"
-
 EXTRA_OECONF = " \
 	--prefix=/usr \
 	--mandir=${mandir} \
@@ -135,21 +128,9 @@ EXTRA_OECONF = " \
 	--extra-libs=' -lXext -lX11 -lBasicUsageEnvironment -lUsageEnvironment -lgroupsock -lliveMedia -lstdc++' \
 "
 
-EXTRA_OECONF_append_armv6 = " --enable-armv6"
-EXTRA_OECONF_append_armv7a = " --enable-armv6 --enable-neon"
-
 FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O4 -ffast-math"
-FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations  -ftree-vectorize -fomit-frame-pointer -O4 -ffast-math"
 BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
 
-do_configure_prepend_armv7a() {
-	cp ${STAGING_KERNEL_DIR}/arch/arm/plat-omap/include/mach/omapfb.h ${S}/libvo/omapfb.h || true
-	cp ${STAGING_KERNEL_DIR}/include/asm-arm/arch-omap/omapfb.h ${S}/libvo/omapfb.h || true
-	cp ${STAGING_KERNEL_DIR}/include/linux/omapfb.h ${S}/libvo/omapfb.h || true
-	cp ${STAGING_DIR_TARGET}/kernel/include/linux/omapfb.h ${S}/libvo/omapfb.h || true
-	sed -e 's/__user//g' -i ${S}/libvo/omapfb.h || true
-}
-
 CFLAGS_append = " -I${S}/libdvdread4 "
 
 do_configure() {
Signature · 1 line
1.7.8.rc4
#3 lore raw

Re: [meta-oo 2/4] mplayer2: drop armv7a/omapfb optimizations, those can be applied from bsp layer if needed

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Op 30-11-11 09:06, Martin Jansa schreef:

Quoted 3 lines

* not everybody has FEED_ARCH in OVERRIDES * and not everybody has PKGARCHCOMPAT_ARMV7A enabled so we would need to duplicate armv7a and armv7a-vfp-neon

NAK on that. I'm not going to cripple mplayer because some distros lack FEED_ARCH in overrides.

Quoted 3 lines

* example of working omapfb patch and optimizations is in meta-smartphone layer
http://git.shr-project.org/git/?p=meta-smartphone.git;a=commit;h=483afbee82869a0b2dacadc4b9580c47dcb59d26

I

Quoted 1 line

do agree that that omapfb patch belongs in a BSP, not in the recipe.

regards,

Koen

Quoted 8 lines

.../0001-video-out-for-omapfb-support.patch | 826
-------------------- meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb | 21 +- 2 files changed, 1 insertions(+), 846 deletions(-) delete mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

Quoted 5 lines

diff --git
a/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch b/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

deleted file mode 100644

Quoted 4 lines

index a362ef6..0000000 --- a/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

+++ /dev/null

Quoted 439 lines
(quoted diff) +0 -0
@@ -1,826 +0,0 @@ -From 2a42cec41a018008d07ea33b2b91dca191d78481 Mon Sep

17 00:00:00 2001 -From: Martin Jansa <[email protected]> -Date: Thu, 25 Nov 2010 16:49:53 +0100 -Subject: [PATCH] video out for omapfb support - -Upstream-Status: Pending -Signed-off-by: Martin Jansa <[email protected]> -Signed-off-by: Koen Kooi
<[email protected]> ---- - Makefile | 2 +- -
libvo/video_out.c | 2 + - libvo/vo_omapfb.c | 591
+++++++++++++++++++++++++++++++++++++++++++++++++++++ - libvo/yuv.S | 170 +++++++++++++++ - 4 files changed, 764 insertions(+), 1 deletions(-) - create mode 100644 libvo/vo_omapfb.c - create mode 100644 libvo/yuv.S - -diff --git a/Makefile b/Makefile -index 83304a2..1e88d40 100644 ---- a/Makefile -+++ b/Makefile -@@ -450,7 +450,7 @@

SRCS_MPLAYER-$(DIRECTFB)     += libvo/vo_directfb2.c libvo/vo_dfbmga.c -
SRCS_MPLAYER-$(DIRECTX)      += libao2/ao_dsound.c libvo/vo_directx.c -
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-$(FBDEV)        += libvo/vo_fbdev.c
libvo/vo_fbdev2.c libvo/vo_omapfb.c libvo/yuv.S - SRCS_MPLAYER-$(FFMPEG)
+= libvo/vo_png.c - SRCS_MPLAYER-$(GGI)          += libvo/vo_ggi.c -
SRCS_MPLAYER-$(GIF)          += libvo/vo_gif89a.c -diff --git

a/libvo/video_out.c b/libvo/video_out.c -index e796784..1433834 100644 ---- a/libvo/video_out.c -+++ b/libvo/video_out.c -@@ -95,6 +95,7 @@ extern struct vo_driver video_out_null; - extern struct vo_driver video_out_bl; - extern struct vo_driver video_out_fbdev; - extern struct vo_driver video_out_fbdev2; -+extern struct vo_driver video_out_omapfb; - extern struct vo_driver video_out_svga; - extern struct vo_driver video_out_png; - extern struct vo_driver video_out_ggi; -@@ -193,6 +194,7 @@ const struct vo_driver *video_out_drivers[] = - #ifdef CONFIG_FBDEV -
&video_out_fbdev, - &video_out_fbdev2, -+
&video_out_omapfb, - #endif - #ifdef CONFIG_SVGALIB - &video_out_svga, -diff --git a/libvo/vo_omapfb.c b/libvo/vo_omapfb.c -new file mode 100644 -index 0000000..7bd8927 ---- /dev/null -+++ b/libvo/vo_omapfb.c -@@ -0,0 +1,591 @@ -+/* -+ -+Copyright (C) 2008 Gregoire Gentil <[email protected]> -+Portions Copyright (C) 2009 Howard Chu <[email protected]> -+This file adds an optimized vo output to mplayer for the OMAP platform. This is a first pass and an attempt to help to improve -+media playing on the OMAP platform. The usual disclaimer comes here: this code is provided without any warranty. -+Many bugs and issues still exist. Feed-back is welcome. -+ -+This output uses the yuv420_to_yuv422 conversion from Mans Rullgard, and is heavily inspired from the work of Siarhei Siamashka. -+I would like to thank those two persons here, without them this code would certainly not exist. -+ -+Two options of the output are available: -+fb_overlay_only (disabled by default): only the overlay is drawn. X11 stuff is ignored. -+dbl_buffer (disabled by default): add double buffering. Some tearsync flags are probably missing in the code. -+ -+Syntax is the following:
-+mplayer -ao alsa -vo omapfb /test.avi -+mplayer -nosound -vo omapfb:fb_overlay_only:dbl_buffer /test.avi -+ -+You need to have two planes on your system. On beagleboard, it means something like:
video=omapfb:vram:2M,vram:4M -+ -+Known issues: -+1) A green line or some vertical lines (if mplayer decides to draw bands instead of frame) may appear. -+It's an interpolation bug in the color conversion that needs to be fixed -+ -+2) The color conversion accepts only 16-pixel multiple for width and height. -+ -+3) The scaling down is disabled as the scaling down kernel patch for the OMAP3 platform doesn't seem to work yet. -+ -+
* This program 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. -+ * -+ * This program 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+*/ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> -+#include <fcntl.h> -+#include <unistd.h> -+#include <errno.h> -+ -+#include <sys/mman.h> -+#include <sys/ioctl.h> -+#include <linux/fb.h> -+ -+#include "config.h" -+#include "video_out.h" -+#include "video_out_internal.h" -+#include "fastmemcpy.h" -+#include "sub/sub.h" -+#include "mp_msg.h" -+#include "omapfb.h" -+#include "x11_common.h" -+ -+#include "libswscale/swscale.h" -+#include "libmpcodecs/vf_scale.h" -+#include "libavcodec/avcodec.h" -+ -+#include "aspect.h" -+ -+#include "subopt-helper.h" -+ -+#include <X11/Xlib.h> -+#include <X11/Xutil.h> -+#include <X11/Xatom.h> -+#include "wskeys.h" -+ -+static vo_info_t info
= { -+ "omapfb video driver", -+ "omapfb", -+ "", -+ "" -+}; -+
-+LIBVO_EXTERN(omapfb) -+ -+static int fb_overlay_only = 0; // if set, we need only framebuffer overlay, but do not need any x11 code -+static int dbl_buffer = 0; -+static int fullscreen_flag = 0; -+static int plane_ready = 0; -+static uint32_t drwX, drwY; -+ -+extern void yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v, int w, int h, int yw, int cw, int dw); -+static struct fb_var_screeninfo sinfo_p0; -+static struct fb_var_screeninfo sinfo; -+static struct fb_var_screeninfo sinfo2; -+static struct fb_fix_screeninfo finfo; -+static struct omapfb_mem_info minfo; -+static struct omapfb_plane_info
pinfo; -+static int xoff, yoff; -+ -+static struct { -+ unsigned x; -+
unsigned y; -+ uint8_t *buf; -+} fb_pages[2]; -+static int dev_fd =
-1; -+static int fb_page_flip = 0; -+static int page = 0; -+static void omapfb_update(int x, int y, int out_w, int out_h, int show); -+ -+extern void mplayer_put_key( int code ); -+#include "input/keycodes.h" -+ -+#define TRANSPARENT_COLOR_KEY 0xff0 -+ -+static Display *display = NULL; // pointer to X Display structure. -+static int screen_num; // number of screen to place the window on. -+static Window win = 0; -+static Window parent = 0; // pointer to the newly created window. -+ -+/* This is used to intercept window closing requests. */ -+static Atom wm_delete_window; -+ -+ -+void vo_calc_drwXY(uint32_t *drwX, uint32_t
*drwY) -+{ -+ *drwX = *drwY = 0; -+ if (vo_fs) { -+
aspect(&vo_dwidth, &vo_dheight, A_ZOOM); -+ vo_dwidth =
FFMIN(vo_dwidth, vo_screenwidth); -+ vo_dheight =
FFMIN(vo_dheight, vo_screenheight); -+ *drwX =
(vo_screenwidth - vo_dwidth) / 2; -+ *drwY = (vo_screenheight
- vo_dheight) / 2; -+ mp_msg(MSGT_VO, MSGL_V, "[vo-fs] dx: %d dy:
%d dw: %d dh: %d\n", -+ *drwX, *drwY, vo_dwidth,
vo_dheight); -+ } else if (WinID == 0) { -+ *drwX = vo_dx; -+
*drwY = vo_dy; -+ } -+} -+ -+static void getPrimaryPlaneInfo() -+{ -+
int dev_fd = open("/dev/fb0", O_RDWR); -+ -+ if (dev_fd == -1) { -+
mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error /dev/fb0\n"); -+
return -1; -+ } -+ -+ ioctl(dev_fd, FBIOGET_VSCREENINFO,
&sinfo_p0); -+ close(dev_fd); -+} -+ -+/** -+ * Function to get the
offset to be used when in windowed mode -+ * or when using -wid option -+ */ -+static void x11_get_window_abs_position(Display *display, Window
window, -+ int *wx, int *wy,
int *ww, int *wh) -+{ -+ Window root, parent; -+ Window *child; -+
unsigned int n_children; -+ XWindowAttributes attribs; -+ -+ /* Get
window attributes */ -+ XGetWindowAttributes(display, window,
&attribs); -+ -+ /* Get relative position of given window */ -+ *wx
= attribs.x; -+ *wy = attribs.y; -+ if (ww) -+ *ww =
attribs.width; -+ if (wh) -+ *wh = attribs.height; -+ -+ /*
Query window tree information */ -+ XQueryTree(display, window, &root,
&parent, &child, &n_children); -+ if (parent) -+ { -+ int x,
y; -+ /* If we have a parent we must go there and discover his
position*/ -+ x11_get_window_abs_position(display, parent, &x, &y,
NULL, NULL); -+ *wx += x; -+ *wy += y; -+ } -+ -+ /* If
we had children, free it */ -+ if(n_children) -+ XFree(child);
-+} -+ -+static void x11_check_events(void) -+{ -+ int e =
vo_x11_check_events(mDisplay); -+ -+ if (e & VO_EVENT_RESIZE) -+
vo_calc_drwXY(&drwX, &drwY); -+ -+ if (e & VO_EVENT_EXPOSE || e &
VO_EVENT_RESIZE) -+ { -+ vo_xv_draw_colorkey(drwX, drwY,
vo_dwidth - 1, vo_dheight - 1); -+ omapfb_update(0, 0, 0, 0, 1);
-+ } -+} -+ -+static void x11_uninit() -+{ -+ if (display) { -+
XCloseDisplay(display); -+ display = NULL; -+ } -+} -+ -+/** -+
* Initialize framebuffer -+ */ -+static int preinit(const char *arg) -+{
-+ opt_t subopts[] = { -+ {"fb_overlay_only", OPT_ARG_BOOL,
&fb_overlay_only, NULL}, -+ {"dbl_buffer", OPT_ARG_BOOL,
&dbl_buffer, NULL}, -+ {NULL} -+ }; -+ -+ if
(subopt_parse(arg, subopts) != 0) { -+ mp_msg(MSGT_VO, MSGL_FATAL,
"[omapfb] unknown suboptions: %s\n", arg); -+ return -1; -+ }
-+ -+ getPrimaryPlaneInfo(); -+ dev_fd = open("/dev/fb1", O_RDWR);
-+ -+ if (dev_fd == -1) { -+ mp_msg(MSGT_VO, MSGL_FATAL,
"[omapfb] Error /dev/fb1\n"); -+ return -1; -+ } -+ -+
ioctl(dev_fd, FBIOGET_VSCREENINFO, &sinfo); -+ ioctl(dev_fd,
OMAPFB_QUERY_PLANE, &pinfo); -+ ioctl(dev_fd, OMAPFB_QUERY_MEM,
&minfo); -+ -+ if (!fb_overlay_only && !vo_init()) -+ { -+
mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Could not open X, overlay
only...\n"); -+ fb_overlay_only = 1; -+ } -+ -+ return 0;
-+} -+ -+static void omapfb_update(int x, int y, int out_w, int out_h,
int show) -+{ -+ int xres, yres; -+ if (!fb_overlay_only) -+
x11_get_window_abs_position(mDisplay, vo_window, &x, &y, &out_w,
&out_h); -+ -+ /* Check for new screen rotation */ -+ ioctl(dev_fd,
FBIOGET_VSCREENINFO, &sinfo2); -+ if (sinfo2.rotate !=
sinfo_p0.rotate) -+ getPrimaryPlaneInfo(); -+ -+ if ( (!x && !y
&& !out_w && !out_h) || -+ (out_w < sinfo.xres_virtual / 4) ||
(out_h < sinfo.yres_virtual / 4) || /* HW can't scale down by more than
4x */ -+ (out_w > sinfo.xres_virtual * 8) || (out_h >
sinfo.yres_virtual * 8) ) { /* HW can't scale up by more than 8x */ -+
pinfo.enabled = 0; -+ pinfo.pos_x = 0; -+ pinfo.pos_y = 0;
-+ ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+ return; -+
} -+ -+ xres = sinfo.xres_virtual; -+ yres = sinfo.yres_virtual;
-+ -+ /* Handle clipping: if the left or top edge of the window goes
-+ * offscreen, clamp the overlay to the left or top edge of the -+
* screen, and set the difference into the frame offset. Also -+ *
decrease the overlay size by the offset. The offset must -+ * take
window scaling into account as well. -+ * -+ * Likewise, if the
right or bottom edge of the window goes -+ * offscreen, clamp the
overlay to the right or bottom edge of -+ * the screen, and decrease
the overlay size accordingly. The -+ * hardware will truncate the
output accordingly, so no offset -+ * is needed. Also take window
scaling into account. -- hyc -+ */ -+ if (x < 0) { -+ /*
clamp to left edge */ -+ xoff = -x; -+ if (out_w !=
sinfo.xres_virtual) { -+ /* account for scaling */ -+
xoff *= sinfo.xres_virtual; -+ xoff /= out_w; -+ } -+
xres -= xoff; -+ out_w += x; -+ x = 0; -+ } else { -+
xoff = 0; -+ if (x + out_w > sinfo_p0.xres) { -+ /*
clamp to right edge */ -+ int diff = sinfo_p0.xres - x; -+
if (out_w != sinfo.xres_virtual) { -+ /* account for
scaling */ -+ xres = diff * sinfo.xres_virtual; -+
xres /= out_w; -+ } else { -+ xres = diff; -+
} -+ out_w = diff; -+ } -+ } -+ -+ if (y < 0) {
-+ /* clamp to top edge - this seldom occurs since the window -+
* titlebar is usually forced to stay visible -+ */ -+ yoff
= -y; -+ if (out_h != sinfo.yres_virtual) { -+ /*
account for scaling */ -+ yoff *= sinfo.yres_virtual; -+
yoff /= out_h; -+ } -+ yres -= yoff; -+ out_h += y;
-+ y = 0; -+ } else { -+ yoff = 0; -+ if (y +
out_h > sinfo_p0.yres) { -+ /* clamp to bottom edge */ -+
int diff = sinfo_p0.yres - y; -+ if (out_h !=
sinfo.yres_virtual) { -+ /* account for scaling */ -+
yres = diff * sinfo.yres_virtual; -+ yres /= out_h; -+
} else { -+ yres = diff; -+ } -+
out_h = diff; -+ } -+ } -+ -+ if (xoff & 1) -+
xoff++; -+ if (xres & 1) -+ xres--; -+ -+ pinfo.enabled =
show; -+ pinfo.pos_x = x; -+ pinfo.pos_y = y; -+ pinfo.out_width
= out_w; -+ pinfo.out_height = out_h; -+ -+ sinfo.xoffset =
fb_pages[page].x + xoff; -+ sinfo.yoffset = fb_pages[page].y + yoff;
-+ /* If we had to change the overlay dimensions, update it */ -+
if (xres != sinfo2.xres || yres != sinfo2.yres || -+ sinfo.xoffset
!= sinfo2.xoffset || -+ sinfo.yoffset != sinfo2.yoffset) { -+
sinfo.xres = xres; -+ sinfo.yres = yres; -+ sinfo.rotate =
sinfo2.rotate; -+ ioctl(dev_fd, FBIOPUT_VSCREENINFO, &sinfo); -+
} -+ -+ ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+} -+ -+static int
config(uint32_t width, uint32_t height, uint32_t d_width, -+ uint32_t
d_height, uint32_t flags, char *title, -+ uint32_t format) -+{ -+
uint8_t *fbmem; -+ int i; -+ struct omapfb_color_key color_key; -+
-+ XVisualInfo vinfo; -+ XSetWindowAttributes xswa; -+
XWindowAttributes attribs; -+ unsigned long xswamask; -+ int
depth; -+ -+ Window root, parent; -+ Window *child; -+ unsigned
int n_children; -+ -+ fullscreen_flag = flags & VOFLAG_FULLSCREEN; -+
if (!fb_overlay_only) -+ { -+ if (!title) -+ title =
"MPlayer OMAPFB (X11/FB) render"; -+ -+
XGetWindowAttributes(mDisplay, mRootWin, &attribs); -+ depth =
attribs.depth; -+ if (depth != 15 && depth != 16 && depth != 24 &&
depth != 32) -+ depth = 24; -+
XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo); -+ -+
xswa.border_pixel = 0; -+ xswa.background_pixel = xv_colorkey =
TRANSPARENT_COLOR_KEY; -+ -+ xswamask = CWBackPixel |
CWBorderPixel; -+ xv_ck_info.method = CK_METHOD_BACKGROUND; -+ -+
vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, vo_dwidth, vo_dheight, -+ flags, CopyFromParent, "omapfb", title); -+ XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); -+ -+ /* Need to receive events on the parent window -- so when it is -+
moved / resized / etc., we know. */ -+ if(WinID > 0) -+ {
-+ /* Query window tree information */ -+
XQueryTree(mDisplay, vo_window, &root, &parent, &child, &n_children); -+
if (n_children) -+ XFree(child); -+ -+
XUnmapWindow(mDisplay, vo_window); -+ if (parent) -+
XSelectInput(mDisplay, parent, StructureNotifyMask); -+
XMapWindow(mDisplay, vo_window); -+ } -+ -+
vo_calc_drwXY(&drwX, &drwY); -+ vo_xv_draw_colorkey(drwX, drwY,
vo_dwidth - 1, vo_dheight - 1); -+ } -+ -+ fbmem = mmap(NULL,
minfo.size, PROT_READ|PROT_WRITE, MAP_SHARED, dev_fd, 0); -+ if (fbmem
== MAP_FAILED) { -+ mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error
mmap\n"); -+ return -1; -+ } -+ -+ for (i = 0; i <
minfo.size / 4; i++) -+ ((uint32_t*)fbmem)[i] = 0x80008000; -+ -+
sinfo.xres = width & ~15; -+ sinfo.yres = height & ~15; -+
sinfo.xoffset = 0; -+ sinfo.yoffset = 0; -+ sinfo.nonstd =
OMAPFB_COLOR_YUY422; -+ -+ fb_pages[0].x = 0; -+ fb_pages[0].y =
0; -+ fb_pages[0].buf = fbmem; -+ -+ if (dbl_buffer && minfo.size

Quoted 1 line

= sinfo.xres * sinfo.yres * 2) { -+ sinfo.xres_virtual =

sinfo.xres; -+ sinfo.yres_virtual = sinfo.yres * 2; -+
fb_pages[1].x = 0; -+ fb_pages[1].y = sinfo.yres; -+
fb_pages[1].buf = fbmem + sinfo.xres * sinfo.yres * 2; -+
fb_page_flip = 1; -+ } else { -+ sinfo.xres_virtual =
sinfo.xres; -+ sinfo.yres_virtual = sinfo.yres; -+
fb_page_flip = 0; -+ } -+ -+ ioctl(dev_fd, FBIOPUT_VSCREENINFO,
&sinfo); -+ ioctl(dev_fd, FBIOGET_FSCREENINFO, &finfo); -+ -+ if
(WinID <= 0) { -+ if (fullscreen_flag) { -+
omapfb_update(0, 0, sinfo_p0.xres, sinfo_p0.yres, 1); -+ } else {
-+ omapfb_update(sinfo_p0.xres / 2 - sinfo.xres / 2,
sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres, sinfo.yres, 1); -+
} -+ } -+ -+ color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD; -+
color_key.background = 0x0; -+ color_key.trans_key =
TRANSPARENT_COLOR_KEY; -+ if (fb_overlay_only) -+
color_key.key_type = OMAPFB_COLOR_KEY_DISABLED; -+ else -+
color_key.key_type = OMAPFB_COLOR_KEY_GFX_DST; -+ ioctl(dev_fd,
OMAPFB_SET_COLOR_KEY, &color_key); -+ -+ plane_ready = 1; -+ return
0; -+} -+ -+static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) -+{ -+ vo_draw_alpha_yuy2(w, h, src, srca, stride, fb_pages[page].buf + y0 * finfo.line_length + x0 * 2, finfo.line_length); -+} -+ -+static void
draw_osd(void) -+{ -+ vo_draw_text(sinfo.xres, sinfo.yres,
draw_alpha); -+} -+ -+static int draw_frame(uint8_t *src[]) -+{ -+ return 1; -+} -+ -+static int draw_slice(uint8_t *src[], int stride[],
int w, int h, int x, int y) -+{ -+ if (x!=0) -+ return 0; -+ -+
if (!plane_ready) -+ return 0; -+ -+ ioctl(dev_fd,
OMAPFB_SYNC_GFX); -+ -+ yuv420_to_yuv422(fb_pages[page].buf + y *
finfo.line_length, src[0], src[1], src[2], w & ~15, h, stride[0],
stride[1], finfo.line_length); -+ return 0; -+} -+ -+static void
flip_page(void) -+{ -+ if (fb_page_flip) { -+ sinfo.xoffset =
fb_pages[page].x + xoff; -+ sinfo.yoffset = fb_pages[page].y +
yoff; -+ ioctl(dev_fd, FBIOPAN_DISPLAY, &sinfo); -+ page ^=
fb_page_flip; -+ } -+} -+ -+static int query_format(uint32_t format)
-+{ -+ // For simplicity pretend that we can only do YV12, support
for -+ // other formats can be added quite easily if/when needed -+
if (format != IMGFMT_YV12) -+ return 0; -+ -+ return
VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE; -+} -+ -+ -+/** -+ * Uninitialize
framebuffer -+ */ -+static void uninit() -+{ -+ pinfo.enabled = 0; -+
ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+ -+ if (!fb_overlay_only)
{ -+ struct omapfb_color_key color_key; -+
color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD; -+
color_key.key_type = OMAPFB_COLOR_KEY_DISABLED; -+ ioctl(dev_fd,
OMAPFB_SET_COLOR_KEY, &color_key); -+ } -+ -+ close(dev_fd); -+ -+
if (!fb_overlay_only) -+ x11_uninit(); -+} -+ -+ -+static int
control(uint32_t request, void *data, ...) -+{ -+ switch (request) {
-+ case VOCTRL_QUERY_FORMAT: -+ return
query_format(*((uint32_t*)data)); -+ case VOCTRL_FULLSCREEN: { -+
if (WinID > 0) return VO_FALSE; -+ if (fullscreen_flag) { -+
if (!fb_overlay_only) -+ vo_x11_fullscreen(); -+
fullscreen_flag = 0; -+ omapfb_update(sinfo_p0.xres / 2 -
sinfo.xres / 2, sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres,
sinfo.yres, 1); -+ } else { -+ if
(!fb_overlay_only) -+ vo_x11_fullscreen(); -+
fullscreen_flag = 1; -+ omapfb_update(0, 0, sinfo_p0.xres,
sinfo_p0.yres, 1); -+ } -+ return VO_TRUE; -+
} -+ case VOCTRL_UPDATE_SCREENINFO: -+
update_xinerama_info(); -+ return VO_TRUE; -+ } -+
return VO_NOTIMPL; -+} -+ -+ -+static void check_events(void) -+{ -+
if (!fb_overlay_only) -+ x11_check_events(); -+} -diff --git
a/libvo/yuv.S b/libvo/yuv.S -new file mode 100644 -index 0000000..1cd2c1d ---- /dev/null -+++ b/libvo/yuv.S -@@ -0,0 +1,170 @@
-+/* -+ Copyright (C) 2008 Mans Rullgard -+ -+ Permission is hereby
granted, free of charge, to any person -+ obtaining a copy of this
software and associated documentation -+ files (the "Software"), to
deal in the Software without -+ restriction, including without
limitation the rights to use, copy, -+ modify, merge, publish,
distribute, sublicense, and/or sell copies -+ of the Software, and to
permit persons to whom the Software is -+ furnished to do so, subject
to the following conditions: -+ -+ The above copyright notice and this
permission notice shall be -+ included in all copies or substantial
portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS",
WITHOUT WARRANTY OF ANY KIND, -+ EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF -+ MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND -+ NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT -+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, -+ WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ */ -+ -+
.macro mov32 rd, val -+ movw \rd, #:lower16:\val -+
movt \rd, #:upper16:\val -+ .endm -+ -+ .fpu
neon -+ .text -+ -+@ yuv420_to_yuv422(uint8_t *yuv, uint8_t *y,
uint8_t *u, uint8_t *v, -+@ int w, int h, int yw, int
cw, int dw) -+ -+#define yuv r0 -+#define y r1 -+#define u r2

-+#define v    r3 -+#define w    r4 -+#define h    r5 -+#define yw   r6 
-+#define cw   r7 -+#define dw   r8 -+ -+#define tyuv r9 -+#define ty

r10 -+#define tu r11 -+#define tv r12 -+#define i lr -+ -+
.global yuv420_to_yuv422 -+ .func yuv420_to_yuv422
-+yuv420_to_yuv422: -+ push {r4-r11,lr} -+ add
r4, sp, #36 -+.Ldo_conv: -+ ldm r4, {r4-r8} -+
push {r4} -+1: -+ mov tu, u -+ mov
tv, v -+ vld1.64 {d2}, [u,:64], cw @ u0 -+
vld1.64 {d3}, [v,:64], cw @ v0 -+ mov
tyuv, yuv -+ mov ty, y -+ vzip.8 d2,
d3 @ u0v0 -+ mov i, #16 -+2:
-+ pld [y, #64] -+ vld1.64 {d0, d1},
[y,:128], yw @ y0 -+ pld [u, #64] -+
subs i, i, #4 -+ vld1.64 {d6},
[u,:64], cw @ u2 -+ pld [y, #64] -+
vld1.64 {d4, d5}, [y,:128], yw @ y1 -+ pld
[v, #64] -+ vld1.64 {d7}, [v,:64], cw @ v2
-+ pld [y, #64] -+ vld1.64 {d16,d17},
[y,:128], yw @ y2 -+ vzip.8 d6, d7
@ u2v2 -+ pld [u, #64] -+ vld1.64
{d22}, [u,:64], cw @ u4 -+ pld [v, #64]
-+ vld1.64 {d23}, [v,:64], cw @ v4 -+
pld [y, #64] -+ vld1.64 {d20,d21}, [y,:128],
yw @ y3 -+ vmov q9, q3
@ u2v2 -+ vzip.8 d22, d23 @ u4v4
-+ vrhadd.u8 q3, q1, q3 @ u1v1 -+
vzip.8 q0, q1 @ y0u0y0v0 -+ vmov
q12, q11 @ u4v4 -+ vzip.8 q2, q3
@ y1u1y1v1 -+ vrhadd.u8 q11, q9, q11 @
u3v3 -+ vst1.64 {d0-d3}, [yuv,:128], dw @

y0u0y0v0 -+        vzip.8          q8,   q9                        @
y2u2y2v2 -+        vst1.64         {d4-d7},    [yuv,:128], dw      @
y1u1y1v1 -+        vzip.8          q10,  q11                       @
y3u3y3v3 -+        vst1.64         {d16-d19},  [yuv,:128], dw      @
y2u2y2v2 -+        vmov            q1,   q12 -+        vst1.64

{d20-d23}, [yuv,:128], dw @ y3u3y3v3 -+ bgt 2b
-+ -+ subs w, w, #16 -+ add
yuv, tyuv, #32 -+ add y, ty, #16 -+ add
u, tu, #8 -+ add v, tv, #8 -+ bgt
1b -+ -+ ldr w, [sp] -+ subs h,
h, #16 -+ add yuv, yuv, dw, lsl #4 -+ sub
yuv, yuv, w, lsl #1 -+ add y, y, yw, lsl #4
-+ sub y, y, w -+ add u,
u, cw, lsl #3 -+ sub u, u, w, asr #1 -+
add v, v, cw, lsl #3 -+ sub v, v,
w, asr #1 -+ bgt 1b -+ -+ pop
{r3-r11,pc} -+ .endfunc -+ -+ .func neon_open
-+neon_open: -+ push {r4-r8,lr} -+ ldrd
r4, r5, [r0, #16] -+ ldrd r6, r7, [r0, #24] -+

lsl             r8,  r4,  #1 -+        mov32           r0,  conv_params 
-+        stm             r0,  {r4-r8} -+        mov             r0,  #0 
-+        pop             {r4-r8,pc} -+        .endfunc -+ -+

.func neon_convert -+neon_convert: -+ push
{r4-r11,lr} -+ ldr r0, [r0] -+ mov32
r4, conv_params -+ ldm r1, {r1-r3} -+ b
.Ldo_conv -+ .endfunc -+ -+ .func neon_nop -+neon_nop: -+
bx lr -+ .endfunc -+ -+ .section .bss
-+conv_params: -+ .skip 5*4 -+ .size
conv_params, . - conv_params -+ -+ .section .rodata
-+.Lname: .asciz "neon" -+ofb_pixconv_neon: -+ .word
.Lname -+ .word 0 @ flags -+ .word
neon_open -+ .word neon_convert -+ .word
neon_nop @ finish -+ .word neon_nop @
close -+ .size ofb_pixconv_neon, . - ofb_pixconv_neon
-+ -+ .section .ofb_pixconv, "a" -+ofb_pixconv_neon_p: -+
.word ofb_pixconv_neon --- -1.7.2.5 - diff --git
a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb index 10a69a9..c24cc4a 100644 --- a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +++ b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb @@ -5,7 +5,7 @@ HOMEPAGE = "http://www.mplayerhq.hu/" DEPENDS = "libvpx live555 libdvdread libtheora virtual/libsdl ffmpeg xsp zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11 virtual/kernel libass \ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad liba52 lame', d)}"

-#RDEPENDS_${PN} = "mplayer-common" +RDEPENDS_${PN} = "mplayer-common" PROVIDES = "mplayer" RPROVIDES_${PN} = "mplayer" RCONFLICTS_${PN} = "mplayer" @@ -17,10 +17,6 @@ SRC_URI = "git://repo.or.cz/mplayer.git;protocol=git;branch=master \
file://cross.compile.codec-cfg.patch \ "

-SRC_URI_append_aarmv7a = " \ -
file://0001-video-out-for-omapfb-support.patch \ - " - SRCREV =
"e3f5043233336d8b4b0731c6a8b42a8fda5535ac"

ARM_INSTRUCTION_SET = "ARM" @@ -40,9 +36,6 @@ CONFFILES_${PN} += "/usr/etc/mplayer/input.conf \

inherit autotools pkgconfig

-# We want a kernel header for armv7a, but we don't want to make mplayer machine specific for that -STAGING_KERNEL_DIR = "${STAGING_DIR}/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/kernel" - EXTRA_OECONF = " \ --prefix=/usr \ --mandir=${mandir} \ @@ -135,21 +128,9 @@ EXTRA_OECONF = " \ --extra-libs=' -lXext -lX11 -lBasicUsageEnvironment

meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +0 -3
-lUsageEnvironment -lgroupsock -lliveMedia -lstdc++' \ "
 
-EXTRA_OECONF_append_armv6 = " --enable-armv6" 
-EXTRA_OECONF_append_armv7a = " --enable-armv6 --enable-neon" - 

FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O4 -ffast-math" -FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -ftree-vectorize -fomit-frame-pointer -O4

(quoted diff) +0 -2
-ffast-math" BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
 
-do_configure_prepend_armv7a() { -	cp

${STAGING_KERNEL_DIR}/arch/arm/plat-omap/include/mach/omapfb.h
${S}/libvo/omapfb.h || true - cp
${STAGING_KERNEL_DIR}/include/asm-arm/arch-omap/omapfb.h
${S}/libvo/omapfb.h || true - cp
${STAGING_KERNEL_DIR}/include/linux/omapfb.h ${S}/libvo/omapfb.h || true

(quoted diff) +0 -1
-	cp ${STAGING_DIR_TARGET}/kernel/include/linux/omapfb.h

${S}/libvo/omapfb.h || true - sed -e 's/__user//g' -i ${S}/libvo/omapfb.h
|| true -} - CFLAGS_append = " -I${S}/libdvdread4 "

Quoted 1 line

do_configure() {

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
Comment: GPGTools - http://gpgtools.org

iEYEARECAAYFAk7V9jEACgkQMkyGM64RGpGvFgCgmauFl5GYmdtr9KDc69Yu68A4 cAcAn3eIhQeqzypd4tHVsq1d1CJz4FyV
=+jxs
-----END PGP SIGNATURE-----

#4 lore raw

Re: [meta-oo 2/4] mplayer2: drop armv7a/omapfb optimizations, those can be applied from bsp layer if needed

Quoted 10 lines · Koen Kooi

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Op 30-11-11 09:06, Martin Jansa schreef:

Quoted 3 lines

* not everybody has FEED_ARCH in OVERRIDES * and not everybody has PKGARCHCOMPAT_ARMV7A enabled so we would need to duplicate armv7a and armv7a-vfp-neon

NAK on that. I'm not going to cripple mplayer because some distros lack FEED_ARCH in overrides.

Do we also cripple mplayer for people not using PKGARCHCOMPAT_ARMV7A? Or do we want all armv7a-vfp-neon duplicated with armv7a?

I've asked you to propose FEED_ARCH in oe-core before, please do..

Quoted 7 lines
Quoted 3 lines

* example of working omapfb patch and optimizations is in meta-smartphone layer
http://git.shr-project.org/git/?p=meta-smartphone.git;a=commit;h=483afbee82869a0b2dacadc4b9580c47dcb59d26

I

Quoted 1 line

do agree that that omapfb patch belongs in a BSP, not in the recipe.

yes and the current version of that patch in meta-oe is broken IIRC..

Cheers,

Quoted 478 lines

regards,

Koen

Quoted 8 lines

.../0001-video-out-for-omapfb-support.patch | 826
-------------------- meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb | 21 +- 2 files changed, 1 insertions(+), 846 deletions(-) delete mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

Quoted 5 lines

diff --git
a/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch b/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

deleted file mode 100644

Quoted 4 lines

index a362ef6..0000000 --- a/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch

+++ /dev/null

Quoted 439 lines
(quoted diff) +0 -0
@@ -1,826 +0,0 @@ -From 2a42cec41a018008d07ea33b2b91dca191d78481 Mon Sep

17 00:00:00 2001 -From: Martin Jansa <[email protected]> -Date: Thu, 25 Nov 2010 16:49:53 +0100 -Subject: [PATCH] video out for omapfb support - -Upstream-Status: Pending -Signed-off-by: Martin Jansa <[email protected]> -Signed-off-by: Koen Kooi
<[email protected]> ---- - Makefile | 2 +- -
libvo/video_out.c | 2 + - libvo/vo_omapfb.c | 591
+++++++++++++++++++++++++++++++++++++++++++++++++++++ - libvo/yuv.S | 170 +++++++++++++++ - 4 files changed, 764 insertions(+), 1 deletions(-) - create mode 100644 libvo/vo_omapfb.c - create mode 100644 libvo/yuv.S - -diff --git a/Makefile b/Makefile -index 83304a2..1e88d40 100644 ---- a/Makefile -+++ b/Makefile -@@ -450,7 +450,7 @@

SRCS_MPLAYER-$(DIRECTFB)     += libvo/vo_directfb2.c libvo/vo_dfbmga.c -
SRCS_MPLAYER-$(DIRECTX)      += libao2/ao_dsound.c libvo/vo_directx.c -
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-$(FBDEV)        += libvo/vo_fbdev.c
libvo/vo_fbdev2.c libvo/vo_omapfb.c libvo/yuv.S - SRCS_MPLAYER-$(FFMPEG)
+= libvo/vo_png.c - SRCS_MPLAYER-$(GGI)          += libvo/vo_ggi.c -
SRCS_MPLAYER-$(GIF)          += libvo/vo_gif89a.c -diff --git

a/libvo/video_out.c b/libvo/video_out.c -index e796784..1433834 100644 ---- a/libvo/video_out.c -+++ b/libvo/video_out.c -@@ -95,6 +95,7 @@ extern struct vo_driver video_out_null; - extern struct vo_driver video_out_bl; - extern struct vo_driver video_out_fbdev; - extern struct vo_driver video_out_fbdev2; -+extern struct vo_driver video_out_omapfb; - extern struct vo_driver video_out_svga; - extern struct vo_driver video_out_png; - extern struct vo_driver video_out_ggi; -@@ -193,6 +194,7 @@ const struct vo_driver *video_out_drivers[] = - #ifdef CONFIG_FBDEV -
&video_out_fbdev, - &video_out_fbdev2, -+
&video_out_omapfb, - #endif - #ifdef CONFIG_SVGALIB - &video_out_svga, -diff --git a/libvo/vo_omapfb.c b/libvo/vo_omapfb.c -new file mode 100644 -index 0000000..7bd8927 ---- /dev/null -+++ b/libvo/vo_omapfb.c -@@ -0,0 +1,591 @@ -+/* -+ -+Copyright (C) 2008 Gregoire Gentil <[email protected]> -+Portions Copyright (C) 2009 Howard Chu <[email protected]> -+This file adds an optimized vo output to mplayer for the OMAP platform. This is a first pass and an attempt to help to improve -+media playing on the OMAP platform. The usual disclaimer comes here: this code is provided without any warranty. -+Many bugs and issues still exist. Feed-back is welcome. -+ -+This output uses the yuv420_to_yuv422 conversion from Mans Rullgard, and is heavily inspired from the work of Siarhei Siamashka. -+I would like to thank those two persons here, without them this code would certainly not exist. -+ -+Two options of the output are available: -+fb_overlay_only (disabled by default): only the overlay is drawn. X11 stuff is ignored. -+dbl_buffer (disabled by default): add double buffering. Some tearsync flags are probably missing in the code. -+ -+Syntax is the following:
-+mplayer -ao alsa -vo omapfb /test.avi -+mplayer -nosound -vo omapfb:fb_overlay_only:dbl_buffer /test.avi -+ -+You need to have two planes on your system. On beagleboard, it means something like:
video=omapfb:vram:2M,vram:4M -+ -+Known issues: -+1) A green line or some vertical lines (if mplayer decides to draw bands instead of frame) may appear. -+It's an interpolation bug in the color conversion that needs to be fixed -+ -+2) The color conversion accepts only 16-pixel multiple for width and height. -+ -+3) The scaling down is disabled as the scaling down kernel patch for the OMAP3 platform doesn't seem to work yet. -+ -+
* This program 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. -+ * -+ * This program 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+*/ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> -+#include <fcntl.h> -+#include <unistd.h> -+#include <errno.h> -+ -+#include <sys/mman.h> -+#include <sys/ioctl.h> -+#include <linux/fb.h> -+ -+#include "config.h" -+#include "video_out.h" -+#include "video_out_internal.h" -+#include "fastmemcpy.h" -+#include "sub/sub.h" -+#include "mp_msg.h" -+#include "omapfb.h" -+#include "x11_common.h" -+ -+#include "libswscale/swscale.h" -+#include "libmpcodecs/vf_scale.h" -+#include "libavcodec/avcodec.h" -+ -+#include "aspect.h" -+ -+#include "subopt-helper.h" -+ -+#include <X11/Xlib.h> -+#include <X11/Xutil.h> -+#include <X11/Xatom.h> -+#include "wskeys.h" -+ -+static vo_info_t info
= { -+ "omapfb video driver", -+ "omapfb", -+ "", -+ "" -+}; -+
-+LIBVO_EXTERN(omapfb) -+ -+static int fb_overlay_only = 0; // if set, we need only framebuffer overlay, but do not need any x11 code -+static int dbl_buffer = 0; -+static int fullscreen_flag = 0; -+static int plane_ready = 0; -+static uint32_t drwX, drwY; -+ -+extern void yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v, int w, int h, int yw, int cw, int dw); -+static struct fb_var_screeninfo sinfo_p0; -+static struct fb_var_screeninfo sinfo; -+static struct fb_var_screeninfo sinfo2; -+static struct fb_fix_screeninfo finfo; -+static struct omapfb_mem_info minfo; -+static struct omapfb_plane_info
pinfo; -+static int xoff, yoff; -+ -+static struct { -+ unsigned x; -+
unsigned y; -+ uint8_t *buf; -+} fb_pages[2]; -+static int dev_fd =
-1; -+static int fb_page_flip = 0; -+static int page = 0; -+static void omapfb_update(int x, int y, int out_w, int out_h, int show); -+ -+extern void mplayer_put_key( int code ); -+#include "input/keycodes.h" -+ -+#define TRANSPARENT_COLOR_KEY 0xff0 -+ -+static Display *display = NULL; // pointer to X Display structure. -+static int screen_num; // number of screen to place the window on. -+static Window win = 0; -+static Window parent = 0; // pointer to the newly created window. -+ -+/* This is used to intercept window closing requests. */ -+static Atom wm_delete_window; -+ -+ -+void vo_calc_drwXY(uint32_t *drwX, uint32_t
*drwY) -+{ -+ *drwX = *drwY = 0; -+ if (vo_fs) { -+
aspect(&vo_dwidth, &vo_dheight, A_ZOOM); -+ vo_dwidth =
FFMIN(vo_dwidth, vo_screenwidth); -+ vo_dheight =
FFMIN(vo_dheight, vo_screenheight); -+ *drwX =
(vo_screenwidth - vo_dwidth) / 2; -+ *drwY = (vo_screenheight
- vo_dheight) / 2; -+ mp_msg(MSGT_VO, MSGL_V, "[vo-fs] dx: %d dy:
%d dw: %d dh: %d\n", -+ *drwX, *drwY, vo_dwidth,
vo_dheight); -+ } else if (WinID == 0) { -+ *drwX = vo_dx; -+
*drwY = vo_dy; -+ } -+} -+ -+static void getPrimaryPlaneInfo() -+{ -+
int dev_fd = open("/dev/fb0", O_RDWR); -+ -+ if (dev_fd == -1) { -+
mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error /dev/fb0\n"); -+
return -1; -+ } -+ -+ ioctl(dev_fd, FBIOGET_VSCREENINFO,
&sinfo_p0); -+ close(dev_fd); -+} -+ -+/** -+ * Function to get the
offset to be used when in windowed mode -+ * or when using -wid option -+ */ -+static void x11_get_window_abs_position(Display *display, Window
window, -+ int *wx, int *wy,
int *ww, int *wh) -+{ -+ Window root, parent; -+ Window *child; -+
unsigned int n_children; -+ XWindowAttributes attribs; -+ -+ /* Get
window attributes */ -+ XGetWindowAttributes(display, window,
&attribs); -+ -+ /* Get relative position of given window */ -+ *wx
= attribs.x; -+ *wy = attribs.y; -+ if (ww) -+ *ww =
attribs.width; -+ if (wh) -+ *wh = attribs.height; -+ -+ /*
Query window tree information */ -+ XQueryTree(display, window, &root,
&parent, &child, &n_children); -+ if (parent) -+ { -+ int x,
y; -+ /* If we have a parent we must go there and discover his
position*/ -+ x11_get_window_abs_position(display, parent, &x, &y,
NULL, NULL); -+ *wx += x; -+ *wy += y; -+ } -+ -+ /* If
we had children, free it */ -+ if(n_children) -+ XFree(child);
-+} -+ -+static void x11_check_events(void) -+{ -+ int e =
vo_x11_check_events(mDisplay); -+ -+ if (e & VO_EVENT_RESIZE) -+
vo_calc_drwXY(&drwX, &drwY); -+ -+ if (e & VO_EVENT_EXPOSE || e &
VO_EVENT_RESIZE) -+ { -+ vo_xv_draw_colorkey(drwX, drwY,
vo_dwidth - 1, vo_dheight - 1); -+ omapfb_update(0, 0, 0, 0, 1);
-+ } -+} -+ -+static void x11_uninit() -+{ -+ if (display) { -+
XCloseDisplay(display); -+ display = NULL; -+ } -+} -+ -+/** -+
* Initialize framebuffer -+ */ -+static int preinit(const char *arg) -+{
-+ opt_t subopts[] = { -+ {"fb_overlay_only", OPT_ARG_BOOL,
&fb_overlay_only, NULL}, -+ {"dbl_buffer", OPT_ARG_BOOL,
&dbl_buffer, NULL}, -+ {NULL} -+ }; -+ -+ if
(subopt_parse(arg, subopts) != 0) { -+ mp_msg(MSGT_VO, MSGL_FATAL,
"[omapfb] unknown suboptions: %s\n", arg); -+ return -1; -+ }
-+ -+ getPrimaryPlaneInfo(); -+ dev_fd = open("/dev/fb1", O_RDWR);
-+ -+ if (dev_fd == -1) { -+ mp_msg(MSGT_VO, MSGL_FATAL,
"[omapfb] Error /dev/fb1\n"); -+ return -1; -+ } -+ -+
ioctl(dev_fd, FBIOGET_VSCREENINFO, &sinfo); -+ ioctl(dev_fd,
OMAPFB_QUERY_PLANE, &pinfo); -+ ioctl(dev_fd, OMAPFB_QUERY_MEM,
&minfo); -+ -+ if (!fb_overlay_only && !vo_init()) -+ { -+
mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Could not open X, overlay
only...\n"); -+ fb_overlay_only = 1; -+ } -+ -+ return 0;
-+} -+ -+static void omapfb_update(int x, int y, int out_w, int out_h,
int show) -+{ -+ int xres, yres; -+ if (!fb_overlay_only) -+
x11_get_window_abs_position(mDisplay, vo_window, &x, &y, &out_w,
&out_h); -+ -+ /* Check for new screen rotation */ -+ ioctl(dev_fd,
FBIOGET_VSCREENINFO, &sinfo2); -+ if (sinfo2.rotate !=
sinfo_p0.rotate) -+ getPrimaryPlaneInfo(); -+ -+ if ( (!x && !y
&& !out_w && !out_h) || -+ (out_w < sinfo.xres_virtual / 4) ||
(out_h < sinfo.yres_virtual / 4) || /* HW can't scale down by more than
4x */ -+ (out_w > sinfo.xres_virtual * 8) || (out_h >
sinfo.yres_virtual * 8) ) { /* HW can't scale up by more than 8x */ -+
pinfo.enabled = 0; -+ pinfo.pos_x = 0; -+ pinfo.pos_y = 0;
-+ ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+ return; -+
} -+ -+ xres = sinfo.xres_virtual; -+ yres = sinfo.yres_virtual;
-+ -+ /* Handle clipping: if the left or top edge of the window goes
-+ * offscreen, clamp the overlay to the left or top edge of the -+
* screen, and set the difference into the frame offset. Also -+ *
decrease the overlay size by the offset. The offset must -+ * take
window scaling into account as well. -+ * -+ * Likewise, if the
right or bottom edge of the window goes -+ * offscreen, clamp the
overlay to the right or bottom edge of -+ * the screen, and decrease
the overlay size accordingly. The -+ * hardware will truncate the
output accordingly, so no offset -+ * is needed. Also take window
scaling into account. -- hyc -+ */ -+ if (x < 0) { -+ /*
clamp to left edge */ -+ xoff = -x; -+ if (out_w !=
sinfo.xres_virtual) { -+ /* account for scaling */ -+
xoff *= sinfo.xres_virtual; -+ xoff /= out_w; -+ } -+
xres -= xoff; -+ out_w += x; -+ x = 0; -+ } else { -+
xoff = 0; -+ if (x + out_w > sinfo_p0.xres) { -+ /*
clamp to right edge */ -+ int diff = sinfo_p0.xres - x; -+
if (out_w != sinfo.xres_virtual) { -+ /* account for
scaling */ -+ xres = diff * sinfo.xres_virtual; -+
xres /= out_w; -+ } else { -+ xres = diff; -+
} -+ out_w = diff; -+ } -+ } -+ -+ if (y < 0) {
-+ /* clamp to top edge - this seldom occurs since the window -+
* titlebar is usually forced to stay visible -+ */ -+ yoff
= -y; -+ if (out_h != sinfo.yres_virtual) { -+ /*
account for scaling */ -+ yoff *= sinfo.yres_virtual; -+
yoff /= out_h; -+ } -+ yres -= yoff; -+ out_h += y;
-+ y = 0; -+ } else { -+ yoff = 0; -+ if (y +
out_h > sinfo_p0.yres) { -+ /* clamp to bottom edge */ -+
int diff = sinfo_p0.yres - y; -+ if (out_h !=
sinfo.yres_virtual) { -+ /* account for scaling */ -+
yres = diff * sinfo.yres_virtual; -+ yres /= out_h; -+
} else { -+ yres = diff; -+ } -+
out_h = diff; -+ } -+ } -+ -+ if (xoff & 1) -+
xoff++; -+ if (xres & 1) -+ xres--; -+ -+ pinfo.enabled =
show; -+ pinfo.pos_x = x; -+ pinfo.pos_y = y; -+ pinfo.out_width
= out_w; -+ pinfo.out_height = out_h; -+ -+ sinfo.xoffset =
fb_pages[page].x + xoff; -+ sinfo.yoffset = fb_pages[page].y + yoff;
-+ /* If we had to change the overlay dimensions, update it */ -+
if (xres != sinfo2.xres || yres != sinfo2.yres || -+ sinfo.xoffset
!= sinfo2.xoffset || -+ sinfo.yoffset != sinfo2.yoffset) { -+
sinfo.xres = xres; -+ sinfo.yres = yres; -+ sinfo.rotate =
sinfo2.rotate; -+ ioctl(dev_fd, FBIOPUT_VSCREENINFO, &sinfo); -+
} -+ -+ ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+} -+ -+static int
config(uint32_t width, uint32_t height, uint32_t d_width, -+ uint32_t
d_height, uint32_t flags, char *title, -+ uint32_t format) -+{ -+
uint8_t *fbmem; -+ int i; -+ struct omapfb_color_key color_key; -+
-+ XVisualInfo vinfo; -+ XSetWindowAttributes xswa; -+
XWindowAttributes attribs; -+ unsigned long xswamask; -+ int
depth; -+ -+ Window root, parent; -+ Window *child; -+ unsigned
int n_children; -+ -+ fullscreen_flag = flags & VOFLAG_FULLSCREEN; -+
if (!fb_overlay_only) -+ { -+ if (!title) -+ title =
"MPlayer OMAPFB (X11/FB) render"; -+ -+
XGetWindowAttributes(mDisplay, mRootWin, &attribs); -+ depth =
attribs.depth; -+ if (depth != 15 && depth != 16 && depth != 24 &&
depth != 32) -+ depth = 24; -+
XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo); -+ -+
xswa.border_pixel = 0; -+ xswa.background_pixel = xv_colorkey =
TRANSPARENT_COLOR_KEY; -+ -+ xswamask = CWBackPixel |
CWBorderPixel; -+ xv_ck_info.method = CK_METHOD_BACKGROUND; -+ -+
vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, vo_dwidth, vo_dheight, -+ flags, CopyFromParent, "omapfb", title); -+ XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); -+ -+ /* Need to receive events on the parent window -- so when it is -+
moved / resized / etc., we know. */ -+ if(WinID > 0) -+ {
-+ /* Query window tree information */ -+
XQueryTree(mDisplay, vo_window, &root, &parent, &child, &n_children); -+
if (n_children) -+ XFree(child); -+ -+
XUnmapWindow(mDisplay, vo_window); -+ if (parent) -+
XSelectInput(mDisplay, parent, StructureNotifyMask); -+
XMapWindow(mDisplay, vo_window); -+ } -+ -+
vo_calc_drwXY(&drwX, &drwY); -+ vo_xv_draw_colorkey(drwX, drwY,
vo_dwidth - 1, vo_dheight - 1); -+ } -+ -+ fbmem = mmap(NULL,
minfo.size, PROT_READ|PROT_WRITE, MAP_SHARED, dev_fd, 0); -+ if (fbmem
== MAP_FAILED) { -+ mp_msg(MSGT_VO, MSGL_FATAL, "[omapfb] Error
mmap\n"); -+ return -1; -+ } -+ -+ for (i = 0; i <
minfo.size / 4; i++) -+ ((uint32_t*)fbmem)[i] = 0x80008000; -+ -+
sinfo.xres = width & ~15; -+ sinfo.yres = height & ~15; -+
sinfo.xoffset = 0; -+ sinfo.yoffset = 0; -+ sinfo.nonstd =
OMAPFB_COLOR_YUY422; -+ -+ fb_pages[0].x = 0; -+ fb_pages[0].y =
0; -+ fb_pages[0].buf = fbmem; -+ -+ if (dbl_buffer && minfo.size

Quoted 1 line

= sinfo.xres * sinfo.yres * 2) { -+ sinfo.xres_virtual =

sinfo.xres; -+ sinfo.yres_virtual = sinfo.yres * 2; -+
fb_pages[1].x = 0; -+ fb_pages[1].y = sinfo.yres; -+
fb_pages[1].buf = fbmem + sinfo.xres * sinfo.yres * 2; -+
fb_page_flip = 1; -+ } else { -+ sinfo.xres_virtual =
sinfo.xres; -+ sinfo.yres_virtual = sinfo.yres; -+
fb_page_flip = 0; -+ } -+ -+ ioctl(dev_fd, FBIOPUT_VSCREENINFO,
&sinfo); -+ ioctl(dev_fd, FBIOGET_FSCREENINFO, &finfo); -+ -+ if
(WinID <= 0) { -+ if (fullscreen_flag) { -+
omapfb_update(0, 0, sinfo_p0.xres, sinfo_p0.yres, 1); -+ } else {
-+ omapfb_update(sinfo_p0.xres / 2 - sinfo.xres / 2,
sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres, sinfo.yres, 1); -+
} -+ } -+ -+ color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD; -+
color_key.background = 0x0; -+ color_key.trans_key =
TRANSPARENT_COLOR_KEY; -+ if (fb_overlay_only) -+
color_key.key_type = OMAPFB_COLOR_KEY_DISABLED; -+ else -+
color_key.key_type = OMAPFB_COLOR_KEY_GFX_DST; -+ ioctl(dev_fd,
OMAPFB_SET_COLOR_KEY, &color_key); -+ -+ plane_ready = 1; -+ return
0; -+} -+ -+static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) -+{ -+ vo_draw_alpha_yuy2(w, h, src, srca, stride, fb_pages[page].buf + y0 * finfo.line_length + x0 * 2, finfo.line_length); -+} -+ -+static void
draw_osd(void) -+{ -+ vo_draw_text(sinfo.xres, sinfo.yres,
draw_alpha); -+} -+ -+static int draw_frame(uint8_t *src[]) -+{ -+ return 1; -+} -+ -+static int draw_slice(uint8_t *src[], int stride[],
int w, int h, int x, int y) -+{ -+ if (x!=0) -+ return 0; -+ -+
if (!plane_ready) -+ return 0; -+ -+ ioctl(dev_fd,
OMAPFB_SYNC_GFX); -+ -+ yuv420_to_yuv422(fb_pages[page].buf + y *
finfo.line_length, src[0], src[1], src[2], w & ~15, h, stride[0],
stride[1], finfo.line_length); -+ return 0; -+} -+ -+static void
flip_page(void) -+{ -+ if (fb_page_flip) { -+ sinfo.xoffset =
fb_pages[page].x + xoff; -+ sinfo.yoffset = fb_pages[page].y +
yoff; -+ ioctl(dev_fd, FBIOPAN_DISPLAY, &sinfo); -+ page ^=
fb_page_flip; -+ } -+} -+ -+static int query_format(uint32_t format)
-+{ -+ // For simplicity pretend that we can only do YV12, support
for -+ // other formats can be added quite easily if/when needed -+
if (format != IMGFMT_YV12) -+ return 0; -+ -+ return
VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE; -+} -+ -+ -+/** -+ * Uninitialize
framebuffer -+ */ -+static void uninit() -+{ -+ pinfo.enabled = 0; -+
ioctl(dev_fd, OMAPFB_SETUP_PLANE, &pinfo); -+ -+ if (!fb_overlay_only)
{ -+ struct omapfb_color_key color_key; -+
color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD; -+
color_key.key_type = OMAPFB_COLOR_KEY_DISABLED; -+ ioctl(dev_fd,
OMAPFB_SET_COLOR_KEY, &color_key); -+ } -+ -+ close(dev_fd); -+ -+
if (!fb_overlay_only) -+ x11_uninit(); -+} -+ -+ -+static int
control(uint32_t request, void *data, ...) -+{ -+ switch (request) {
-+ case VOCTRL_QUERY_FORMAT: -+ return
query_format(*((uint32_t*)data)); -+ case VOCTRL_FULLSCREEN: { -+
if (WinID > 0) return VO_FALSE; -+ if (fullscreen_flag) { -+
if (!fb_overlay_only) -+ vo_x11_fullscreen(); -+
fullscreen_flag = 0; -+ omapfb_update(sinfo_p0.xres / 2 -
sinfo.xres / 2, sinfo_p0.yres / 2 - sinfo.yres / 2, sinfo.xres,
sinfo.yres, 1); -+ } else { -+ if
(!fb_overlay_only) -+ vo_x11_fullscreen(); -+
fullscreen_flag = 1; -+ omapfb_update(0, 0, sinfo_p0.xres,
sinfo_p0.yres, 1); -+ } -+ return VO_TRUE; -+
} -+ case VOCTRL_UPDATE_SCREENINFO: -+
update_xinerama_info(); -+ return VO_TRUE; -+ } -+
return VO_NOTIMPL; -+} -+ -+ -+static void check_events(void) -+{ -+
if (!fb_overlay_only) -+ x11_check_events(); -+} -diff --git
a/libvo/yuv.S b/libvo/yuv.S -new file mode 100644 -index 0000000..1cd2c1d ---- /dev/null -+++ b/libvo/yuv.S -@@ -0,0 +1,170 @@
-+/* -+ Copyright (C) 2008 Mans Rullgard -+ -+ Permission is hereby
granted, free of charge, to any person -+ obtaining a copy of this
software and associated documentation -+ files (the "Software"), to
deal in the Software without -+ restriction, including without
limitation the rights to use, copy, -+ modify, merge, publish,
distribute, sublicense, and/or sell copies -+ of the Software, and to
permit persons to whom the Software is -+ furnished to do so, subject
to the following conditions: -+ -+ The above copyright notice and this
permission notice shall be -+ included in all copies or substantial
portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS",
WITHOUT WARRANTY OF ANY KIND, -+ EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF -+ MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND -+ NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT -+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, -+ WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, -+ OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ */ -+ -+
.macro mov32 rd, val -+ movw \rd, #:lower16:\val -+
movt \rd, #:upper16:\val -+ .endm -+ -+ .fpu
neon -+ .text -+ -+@ yuv420_to_yuv422(uint8_t *yuv, uint8_t *y,
uint8_t *u, uint8_t *v, -+@ int w, int h, int yw, int
cw, int dw) -+ -+#define yuv r0 -+#define y r1 -+#define u r2

-+#define v    r3 -+#define w    r4 -+#define h    r5 -+#define yw   r6 
-+#define cw   r7 -+#define dw   r8 -+ -+#define tyuv r9 -+#define ty

r10 -+#define tu r11 -+#define tv r12 -+#define i lr -+ -+
.global yuv420_to_yuv422 -+ .func yuv420_to_yuv422
-+yuv420_to_yuv422: -+ push {r4-r11,lr} -+ add
r4, sp, #36 -+.Ldo_conv: -+ ldm r4, {r4-r8} -+
push {r4} -+1: -+ mov tu, u -+ mov
tv, v -+ vld1.64 {d2}, [u,:64], cw @ u0 -+
vld1.64 {d3}, [v,:64], cw @ v0 -+ mov
tyuv, yuv -+ mov ty, y -+ vzip.8 d2,
d3 @ u0v0 -+ mov i, #16 -+2:
-+ pld [y, #64] -+ vld1.64 {d0, d1},
[y,:128], yw @ y0 -+ pld [u, #64] -+
subs i, i, #4 -+ vld1.64 {d6},
[u,:64], cw @ u2 -+ pld [y, #64] -+
vld1.64 {d4, d5}, [y,:128], yw @ y1 -+ pld
[v, #64] -+ vld1.64 {d7}, [v,:64], cw @ v2
-+ pld [y, #64] -+ vld1.64 {d16,d17},
[y,:128], yw @ y2 -+ vzip.8 d6, d7
@ u2v2 -+ pld [u, #64] -+ vld1.64
{d22}, [u,:64], cw @ u4 -+ pld [v, #64]
-+ vld1.64 {d23}, [v,:64], cw @ v4 -+
pld [y, #64] -+ vld1.64 {d20,d21}, [y,:128],
yw @ y3 -+ vmov q9, q3
@ u2v2 -+ vzip.8 d22, d23 @ u4v4
-+ vrhadd.u8 q3, q1, q3 @ u1v1 -+
vzip.8 q0, q1 @ y0u0y0v0 -+ vmov
q12, q11 @ u4v4 -+ vzip.8 q2, q3
@ y1u1y1v1 -+ vrhadd.u8 q11, q9, q11 @
u3v3 -+ vst1.64 {d0-d3}, [yuv,:128], dw @

y0u0y0v0 -+        vzip.8          q8,   q9                        @
y2u2y2v2 -+        vst1.64         {d4-d7},    [yuv,:128], dw      @
y1u1y1v1 -+        vzip.8          q10,  q11                       @
y3u3y3v3 -+        vst1.64         {d16-d19},  [yuv,:128], dw      @
y2u2y2v2 -+        vmov            q1,   q12 -+        vst1.64

{d20-d23}, [yuv,:128], dw @ y3u3y3v3 -+ bgt 2b
-+ -+ subs w, w, #16 -+ add
yuv, tyuv, #32 -+ add y, ty, #16 -+ add
u, tu, #8 -+ add v, tv, #8 -+ bgt
1b -+ -+ ldr w, [sp] -+ subs h,
h, #16 -+ add yuv, yuv, dw, lsl #4 -+ sub
yuv, yuv, w, lsl #1 -+ add y, y, yw, lsl #4
-+ sub y, y, w -+ add u,
u, cw, lsl #3 -+ sub u, u, w, asr #1 -+
add v, v, cw, lsl #3 -+ sub v, v,
w, asr #1 -+ bgt 1b -+ -+ pop
{r3-r11,pc} -+ .endfunc -+ -+ .func neon_open
-+neon_open: -+ push {r4-r8,lr} -+ ldrd
r4, r5, [r0, #16] -+ ldrd r6, r7, [r0, #24] -+

lsl             r8,  r4,  #1 -+        mov32           r0,  conv_params 
-+        stm             r0,  {r4-r8} -+        mov             r0,  #0 
-+        pop             {r4-r8,pc} -+        .endfunc -+ -+

.func neon_convert -+neon_convert: -+ push
{r4-r11,lr} -+ ldr r0, [r0] -+ mov32
r4, conv_params -+ ldm r1, {r1-r3} -+ b
.Ldo_conv -+ .endfunc -+ -+ .func neon_nop -+neon_nop: -+
bx lr -+ .endfunc -+ -+ .section .bss
-+conv_params: -+ .skip 5*4 -+ .size
conv_params, . - conv_params -+ -+ .section .rodata
-+.Lname: .asciz "neon" -+ofb_pixconv_neon: -+ .word
.Lname -+ .word 0 @ flags -+ .word
neon_open -+ .word neon_convert -+ .word
neon_nop @ finish -+ .word neon_nop @
close -+ .size ofb_pixconv_neon, . - ofb_pixconv_neon
-+ -+ .section .ofb_pixconv, "a" -+ofb_pixconv_neon_p: -+
.word ofb_pixconv_neon --- -1.7.2.5 - diff --git
a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb index 10a69a9..c24cc4a 100644 --- a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +++ b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb @@ -5,7 +5,7 @@ HOMEPAGE = "http://www.mplayerhq.hu/" DEPENDS = "libvpx live555 libdvdread libtheora virtual/libsdl ffmpeg xsp zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11 virtual/kernel libass \ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad liba52 lame', d)}"

-#RDEPENDS_${PN} = "mplayer-common" +RDEPENDS_${PN} = "mplayer-common" PROVIDES = "mplayer" RPROVIDES_${PN} = "mplayer" RCONFLICTS_${PN} = "mplayer" @@ -17,10 +17,6 @@ SRC_URI = "git://repo.or.cz/mplayer.git;protocol=git;branch=master \
file://cross.compile.codec-cfg.patch \ "

-SRC_URI_append_aarmv7a = " \ -
file://0001-video-out-for-omapfb-support.patch \ - " - SRCREV =
"e3f5043233336d8b4b0731c6a8b42a8fda5535ac"

ARM_INSTRUCTION_SET = "ARM" @@ -40,9 +36,6 @@ CONFFILES_${PN} += "/usr/etc/mplayer/input.conf \

inherit autotools pkgconfig

-# We want a kernel header for armv7a, but we don't want to make mplayer machine specific for that -STAGING_KERNEL_DIR = "${STAGING_DIR}/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/kernel" - EXTRA_OECONF = " \ --prefix=/usr \ --mandir=${mandir} \ @@ -135,21 +128,9 @@ EXTRA_OECONF = " \ --extra-libs=' -lXext -lX11 -lBasicUsageEnvironment

meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +0 -3
-lUsageEnvironment -lgroupsock -lliveMedia -lstdc++' \ "
 
-EXTRA_OECONF_append_armv6 = " --enable-armv6" 
-EXTRA_OECONF_append_armv7a = " --enable-armv6 --enable-neon" - 

FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O4 -ffast-math" -FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -ftree-vectorize -fomit-frame-pointer -O4

(quoted diff) +0 -2
-ffast-math" BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
 
-do_configure_prepend_armv7a() { -	cp

${STAGING_KERNEL_DIR}/arch/arm/plat-omap/include/mach/omapfb.h
${S}/libvo/omapfb.h || true - cp
${STAGING_KERNEL_DIR}/include/asm-arm/arch-omap/omapfb.h
${S}/libvo/omapfb.h || true - cp
${STAGING_KERNEL_DIR}/include/linux/omapfb.h ${S}/libvo/omapfb.h || true

(quoted diff) +0 -1
-	cp ${STAGING_DIR_TARGET}/kernel/include/linux/omapfb.h

${S}/libvo/omapfb.h || true - sed -e 's/__user//g' -i ${S}/libvo/omapfb.h
|| true -} - CFLAGS_append = " -I${S}/libdvdread4 "

Quoted 1 line

do_configure() {

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
Comment: GPGTools - http://gpgtools.org

iEYEARECAAYFAk7V9jEACgkQMkyGM64RGpGvFgCgmauFl5GYmdtr9KDc69Yu68A4 cAcAn3eIhQeqzypd4tHVsq1d1CJz4FyV
=+jxs
-----END PGP SIGNATURE-----

_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#5 lore raw

PATCH 3/4 mplayer2: drop OPTIMIZATIONs for now

In reply to Martin Jansa
---
 meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb +5 -2
index c24cc4a..d6656fd 100644
@@ -128,8 +128,11 @@ EXTRA_OECONF = " \
 	--extra-libs=' -lXext -lX11 -lBasicUsageEnvironment -lUsageEnvironment -lgroupsock -lliveMedia -lstdc++' \
 "
 
-FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O4 -ffast-math"
-BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
+# drop FULL_OPTIMIZATION for now, because gcc-4.6 got ICE with -O4 and -ffast-math now like in libvpx
+# http://lists.linuxtogo.org/pipermail/openembedded-devel/2011-November/036001.html
+# but lowering to -O3 is not enough in this case
+# FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O4 -ffast-math"
+# BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
 
 CFLAGS_append = " -I${S}/libdvdread4 "
 
Signature · 1 line
1.7.8.rc4
#6 lore raw

PATCH 4/4 gconf-native: drop from meta-gnome, newer version is in oe-core

In reply to Martin Jansa
---
 .../recipes-gnome/gconf/gconf-native_2.6.1.bb      |   17 -----------------
 1 files changed, 0 insertions(+), 17 deletions(-)
 delete mode 100644 meta-gnome/recipes-gnome/gconf/gconf-native_2.6.1.bb
meta-gnome/recipes-gnome/gconf/gconf-native_2.6.1.bb deleted +0 -17
deleted file mode 100644
index 2ca2dad..0000000
@@ -1,17 +0,0 @@
-NOTE = "This is just a dummy package to get packages stop complaining about gconftool-2 \
-        which they are not using anyway... :D"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
-
-PR = "r1"
-
-inherit native
-
-do_install() {
-        install -d ${D}${bindir}
-        echo "#!/bin/sh" >${D}${bindir}/gconftool-2
-        chmod a+rx ${D}${bindir}/gconftool-2
-}
-
-NATIVE_INSTALL_WORKS = "1"
Signature · 1 line
1.7.8.rc4
#7 lore raw
In reply to Martin Jansa
Quoted 1 line · Martin Jansa

The following changes since commit f3ca7acd0b678a9247e432aee34512a26e30f509:

sorry about typo in prefix, but I belive that it will show in koen's patchwork :)

Quoted 28 lines

libsdl-x11: drop from meta-oe (2011-11-30 08:52:38 +0100)

are available in the git repository at:
git://git.openembedded.org/meta-openembedded-contrib jansa/pull
http://cgit.openembedded.org/cgit.cgi/meta-openembedded-contrib/log/?h=jansa/pull

Martin Jansa (4):
mplayer-common: import from OE-classic
mplayer2: drop armv7a/omapfb optimizations, those can be applied from
bsp layer if needed
mplayer2: drop OPTIMIZATIONs for now
gconf-native: drop from meta-gnome, newer version is in oe-core

 .../recipes-gnome/gconf/gconf-native_2.6.1.bb      |   17 -
 .../recipes-multimedia/mplayer/mplayer-common.bb   |   22 +
 .../mplayer/mplayer-common/mplayer.conf            |   15 +
 .../0001-video-out-for-omapfb-support.patch        |  826 --------------------
 meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb |   28 +-
 5 files changed, 43 insertions(+), 865 deletions(-)
 delete mode 100644 meta-gnome/recipes-gnome/gconf/gconf-native_2.6.1.bb
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common.bb
 create mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf
 delete mode 100644 meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch
Signature · 1 line
1.7.8.rc4
Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]