summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-12-10 23:16:08 +0000
committercehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-12-10 23:16:08 +0000
commite17256978730314b79b851a9f80275065d7b5ca0 (patch)
treec872d449b7e3eaace7d8265033e2cea33272234a
parentde3620319a1ea2f711da09e4d8f3e20f229361bb (diff)
downloadmpv-e17256978730314b79b851a9f80275065d7b5ca0.tar.bz2
mpv-e17256978730314b79b851a9f80275065d7b5ca0.tar.xz
Update the SuperH VEU vidix driver with code that calls fsync() after each
frame to make sure the frame is flushed in case of deferred io. Patch by Magnus Damm, damm opensource se git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29988 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--vidix/sh_veu_vid.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/vidix/sh_veu_vid.c b/vidix/sh_veu_vid.c
index 7ce49b4a94..03868ac364 100644
--- a/vidix/sh_veu_vid.c
+++ b/vidix/sh_veu_vid.c
@@ -1,6 +1,6 @@
/*
* VIDIX driver for SuperH Mobile VEU hardware block.
- * Copyright (C) 2008 Magnus Damm
+ * Copyright (C) 2008, 2009 Magnus Damm
*
* Requires a kernel that exposes the VEU hardware block to user space
* using UIO. Available in upstream linux-2.6.27 or later.
@@ -179,8 +179,7 @@ static int get_fb_info(char *device, struct fb_info *fip)
memset(iomem, 0, fip->line_length * fip->height);
munmap(iomem, fip->size);
- close(fd);
- return 0;
+ return fd;
}
#define VESTR 0x00 /* start register */
@@ -268,6 +267,7 @@ struct sh_veu_plane {
static struct sh_veu_plane _src, _dst;
static vidix_playback_t my_info;
+static int fb_fd;
static int sh_veu_probe(int verbose, int force)
{
@@ -276,6 +276,7 @@ static int sh_veu_probe(int verbose, int force)
ret = get_fb_info("/dev/fb0", &fbi);
if (ret < 0)
return ret;
+ fb_fd = ret;
if (fbi.bpp != 16) {
printf("sh_veu: only 16bpp supported\n");
@@ -315,6 +316,9 @@ static void sh_veu_wait_irq(vidix_playback_t *info)
read(uio_dev.fd, &n_pending, sizeof(unsigned long));
write_reg(&uio_mmio, 0x100, VEVTR); /* ack int, write 0 to bit 0 */
+
+ /* flush framebuffer to handle deferred io case */
+ fsync(fb_fd);
}
static int sh_veu_is_veu2h(void)
@@ -486,6 +490,7 @@ static int sh_veu_init(void)
static void sh_veu_destroy(void)
{
+ close(fb_fd);
}
static int sh_veu_get_caps(vidix_capability_t *to)