aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/mplayer
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2010-11-25 14:37:07 +0100
committerMartin Jansa <Martin.Jansa@gmail.com>2010-11-25 17:27:59 +0100
commit92ff61c470dc833e60e569da7303cfe5cff9510d (patch)
treee97d1fe26b563ca5307a582b50b12b799fb163eb /recipes/mplayer
parenta1275a163465c02dddc0137dbc30c156d0b49534 (diff)
downloadopenembedded-92ff61c470dc833e60e569da7303cfe5cff9510d.tar.gz
mplayer: bump SRCREV, remove mencoder, merge omapfb patches
* mencoder was removed from git repo http://repo.or.cz/w/mplayer.git/commit/389c32b5c72897a8b1b3c929c8f278e8980f2290 if you need it, build from mplayer_svn.bb Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'recipes/mplayer')
-rw-r--r--recipes/mplayer/mplayer/0001-video-out-for-omapfb-support.patch823
-rw-r--r--recipes/mplayer/mplayer/mplayer-git_omapfb.patch33
-rw-r--r--recipes/mplayer/mplayer/omapfb_control_arguments.patch13
-rw-r--r--recipes/mplayer/mplayer_git.bb18
4 files changed, 827 insertions, 60 deletions
diff --git a/recipes/mplayer/mplayer/0001-video-out-for-omapfb-support.patch b/recipes/mplayer/mplayer/0001-video-out-for-omapfb-support.patch
new file mode 100644
index 0000000000..aec7a15f81
--- /dev/null
+++ b/recipes/mplayer/mplayer/0001-video-out-for-omapfb-support.patch
@@ -0,0 +1,823 @@
+From b86ce816a3a3aedcf63bf513ce268c93abc5fd11 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
+
+---
+ 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 d025f4f..44ed9d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -538,7 +538,7 @@ SRCS_MPLAYER-$(DIRECTX) += libao2/ao_dsound.c libvo/vo_directx.c
+ SRCS_MPLAYER-$(DXR2) += libao2/ao_dxr2.c libvo/vo_dxr2.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 74b7c52..7b3c01a 100644
+--- a/libvo/video_out.c
++++ b/libvo/video_out.c
+@@ -97,6 +97,7 @@ extern struct vo_driver video_out_zr2;
+ 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;
+@@ -198,6 +199,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..b26ee3a
+--- /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.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 "osdep/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.3.2
+
diff --git a/recipes/mplayer/mplayer/mplayer-git_omapfb.patch b/recipes/mplayer/mplayer/mplayer-git_omapfb.patch
deleted file mode 100644
index f5d41e937e..0000000000
--- a/recipes/mplayer/mplayer/mplayer-git_omapfb.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2010-09-12 21:47:39.272215523 +0200
-+++ git/Makefile 2010-09-12 21:49:13.359100591 +0200
-@@ -538,7 +538,7 @@
- SRCS_MPLAYER-$(DXR2) += libao2/ao_dxr2.c libvo/vo_dxr2.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-$(GGI) += libvo/vo_ggi.c
- SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c
- SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c \
-Index: git/libvo/video_out.c
-===================================================================
---- git.orig/libvo/video_out.c 2010-09-12 21:47:49.882156069 +0200
-+++ git/libvo/video_out.c 2010-09-12 21:49:13.359100591 +0200
-@@ -101,6 +101,7 @@
- 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;
-@@ -202,6 +203,7 @@
- #ifdef CONFIG_FBDEV
- &video_out_fbdev,
- &video_out_fbdev2,
-+ &video_out_omapfb,
- #endif
- #ifdef CONFIG_SVGALIB
- &video_out_svga,
diff --git a/recipes/mplayer/mplayer/omapfb_control_arguments.patch b/recipes/mplayer/mplayer/omapfb_control_arguments.patch
deleted file mode 100644
index 04351112b0..0000000000
--- a/recipes/mplayer/mplayer/omapfb_control_arguments.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: mplayer-0.0+1.0rc4+gitr0+d1c686f6a63c31276b0811baf7c78aa6f4c6c6a6-r5/vo_omapfb.c
-===================================================================
---- mplayer-0.0+1.0rc4+gitr0+d1c686f6a63c31276b0811baf7c78aa6f4c6c6a6-r5.orig/vo_omapfb.c 2010-09-12 22:42:52.589660557 +0200
-+++ mplayer-0.0+1.0rc4+gitr0+d1c686f6a63c31276b0811baf7c78aa6f4c6c6a6-r5/vo_omapfb.c 2010-09-12 22:43:01.759065169 +0200
-@@ -556,7 +556,7 @@
- }
-
-
--static int control(uint32_t request, void *data, ...)
-+static int control(uint32_t request, void *data)
- {
- switch (request) {
- case VOCTRL_QUERY_FORMAT:
diff --git a/recipes/mplayer/mplayer_git.bb b/recipes/mplayer/mplayer_git.bb
index f51f2977e2..a762da81a5 100644
--- a/recipes/mplayer/mplayer_git.bb
+++ b/recipes/mplayer/mplayer_git.bb
@@ -8,14 +8,10 @@ DEPENDS = "libvpx live555 libdvdread libtheora virtual/libsdl ffmpeg xsp zlib li
RDEPENDS_${PN} = "mplayer-common"
LICENSE = "GPL"
SRC_URI = "git://repo.or.cz/mplayer/glamo.git;protocol=git;branch=master \
- file://makefile-nostrip-svn.patch \
"
SRC_URI_append_armv7a = " \
- file://mplayer-git_omapfb.patch \
- file://vo_omapfb.c \
- file://yuv.S \
- file://omapfb_control_arguments.patch;patchdir=.. \
+ file://0001-video-out-for-omapfb-support.patch \
"
# This is required for the collie machine only as all stacks in that
@@ -24,7 +20,7 @@ SRC_URI_append_armv7a = " \
# ie. for all armv4 machines.
SRC_URI_append_collie = "file://disable-executable-stack-test.patch"
-SRCREV = "d1c686f6a63c31276b0811baf7c78aa6f4c6c6a6"
+SRCREV = "81f0b8dacff926d46438faedb1a56da3946a8d2a"
PACKAGE_ARCH_collie = "collie"
PACKAGE_ARCH_c7x0 = "c7x0"
@@ -44,10 +40,7 @@ PARALLEL_MAKE = ""
S = "${WORKDIR}/git"
-PACKAGES =+ "mencoder"
-
FILES_${PN} = "${bindir}/mplayer ${libdir} /usr/etc/mplayer/"
-FILES_mencoder = "${bindir}/mencoder"
CONFFILES_${PN} += "/usr/etc/mplayer/input.conf \
/usr/etc/mplayer/example.conf \
/usr/etc/mplayer/codecs.conf \
@@ -63,10 +56,8 @@ EXTRA_OECONF = " \
--mandir=${mandir} \
--target=${SIMPLE_TARGET_SYS} \
\
- --enable-mencoder \
--disable-gui \
--enable-largefiles \
- --disable-linux-devfs \
--disable-lirc \
--disable-lircc \
--disable-joystick \
@@ -77,7 +68,7 @@ EXTRA_OECONF = " \
--enable-tv-v4l2 \
--disable-tv-bsdbt848 \
--enable-rtc \
- --enable-network \
+ --enable-networking \
--disable-smb \
--enable-live \
--disable-dvdnav \
@@ -188,8 +179,6 @@ FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -ftree-vectorize -fomit-f
BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
do_configure_prepend_armv7a() {
- cp ${WORKDIR}/yuv.S ${S}/libvo
- cp ${WORKDIR}/vo_omapfb.c ${S}/libvo
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
@@ -203,6 +192,7 @@ do_configure() {
sed -i 's|/usr/lib|${STAGING_LIBDIR}|g' ${S}/configure
sed -i 's|/usr/\S*include[\w/]*||g' ${S}/configure
sed -i 's|/usr/\S*lib[\w/]*||g' ${S}/configure
+ sed -i 's|_install_strip="-s"|_install_strip=""|g' ${S}/configure
sed -i 's|HOST_CC|BUILD_CC|' ${S}/Makefile
export SIMPLE_TARGET_SYS="$(echo ${TARGET_SYS} | sed s:${TARGET_VENDOR}::g)"