aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-multimedia/mplayer
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2011-11-07 12:22:49 +0100
committerMartin Jansa <Martin.Jansa@gmail.com>2011-12-06 11:19:08 +0100
commit78add3cb4853a6c50ac4f8b41f92b85d6c31a6b3 (patch)
tree143eb119b37dfd0012a8c27ff8c59deaeaf91039 /meta-oe/recipes-multimedia/mplayer
parent084fc20cd5377827a7f5a16e5f7179b89fd26886 (diff)
downloadmeta-openembedded-78add3cb4853a6c50ac4f8b41f92b85d6c31a6b3.tar.gz
mplayer2: drop omapfb patch and support, this can be applied from bsp layer if needed
* 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 Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'meta-oe/recipes-multimedia/mplayer')
-rw-r--r--meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch826
-rw-r--r--meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb15
2 files changed, 0 insertions, 841 deletions
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
index a362ef6792..0000000000
--- a/meta-oe/recipes-multimedia/mplayer/mplayer2/0001-video-out-for-omapfb-support.patch
+++ /dev/null
@@ -1,826 +0,0 @@
-From 2a42cec41a018008d07ea33b2b91dca191d78481 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Thu, 25 Nov 2010 16:49:53 +0100
-Subject: [PATCH] video out for omapfb support
-
-Upstream-Status: Pending
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- 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 <gregoire@gentil.com>
-+Portions Copyright (C) 2009 Howard Chu <hyc@symas.com>
-+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
-
diff --git a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb
index 10a69a9961..f3b254e6d8 100644
--- a/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb
+++ b/meta-oe/recipes-multimedia/mplayer/mplayer2_git.bb
@@ -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} \
@@ -142,14 +135,6 @@ FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-reg
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() {