From: Koen Kooi <koen@dominion.thruhere.net>
To: openembedded-devel@lists.openembedded.org
Subject: Re: [meta-oo 2/4] mplayer2: drop armv7a/omapfb optimizations, those can be applied from bsp layer if needed
Date: Wed, 30 Nov 2011 10:24:04 +0100 [thread overview]
Message-ID: <jb4snk$rmo$1@dough.gmane.org> (raw)
In-Reply-To: <8aed264c593ee085d99e335ae04bed95c2536a0b.1322640244.git.Martin.Jansa@gmail.com>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Op 30-11-11 09:06, Martin Jansa schreef:
> * 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.
> * 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
>
do agree that that omapfb patch belongs in a BSP, not in the recipe.
regards,
Koen
>
> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> ---
> .../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
>
> 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 a362ef6..0000000 ---
> 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
> 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
> -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() {
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
Comment: GPGTools - http://gpgtools.org
iEYEARECAAYFAk7V9jEACgkQMkyGM64RGpGvFgCgmauFl5GYmdtr9KDc69Yu68A4
cAcAn3eIhQeqzypd4tHVsq1d1CJz4FyV
=+jxs
-----END PGP SIGNATURE-----
next prev parent reply other threads:[~2011-11-30 9:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-30 8:06 [meta-oo 0/4] mplayer changes and gconf-native drop Martin Jansa
2011-11-30 8:06 ` [meta-oo 1/4] mplayer-common: import from OE-classic Martin Jansa
2011-11-30 8:06 ` [meta-oo 2/4] mplayer2: drop armv7a/omapfb optimizations, those can be applied from bsp layer if needed Martin Jansa
2011-11-30 9:24 ` Koen Kooi [this message]
2011-11-30 9:32 ` Martin Jansa
2011-11-30 8:06 ` [meta-oo 3/4] mplayer2: drop OPTIMIZATIONs for now Martin Jansa
2011-11-30 8:06 ` [meta-oo 4/4] gconf-native: drop from meta-gnome, newer version is in oe-core Martin Jansa
2011-11-30 8:09 ` [meta-oo 0/4] mplayer changes and gconf-native drop Martin Jansa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='jb4snk$rmo$1@dough.gmane.org' \
--to=koen@dominion.thruhere.net \
--cc=openembedded-devel@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.