From 2d52b68c2d9d5dc0e9bbb4d599b68e7374fb8fc8 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Thu, 5 Jul 2012 20:24:40 +0200 Subject: [PATCH] spark: implement cVideo::getBlank() this is a hack: the "mailbox" irq count does not increase if the decoders are not decoding, so we use this to determine if the video is in really playing. --- libspark/video.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/libspark/video.cpp b/libspark/video.cpp index b18fa11..49aae66 100644 --- a/libspark/video.cpp +++ b/libspark/video.cpp @@ -490,8 +490,34 @@ void cVideo::Standby(unsigned int bOn) int cVideo::getBlank(void) { - lt_debug("%s\n", __FUNCTION__); - return 0; + static unsigned int lastcount = 0; + unsigned int count = 0; + size_t n = 0; + ssize_t r; + char *line = NULL; + char *p; + /* hack: the "mailbox" irq is not increasing if + * no audio or video is decoded... */ + FILE *f = fopen("/proc/interrupts", "r"); + if (! f) /* huh? */ + return 0; + while ((r = getline(&line, &n, f)) != -1) + { + if (r <= strlen("mailbox")) /* should not happen... */ + continue; + line[r - 1] = 0; /* remove \n */ + if (!strcmp(&line[r - 1 - strlen("mailbox")], "mailbox")) + { + count = atoi(line + 5); + break; + } + } + free(line); + fclose(f); + int ret = (count == lastcount); /* no new decode -> return 1 */ + lt_debug("%s: %d (irq++: %d)\n", __func__, ret, count - lastcount); + lastcount = count; + return ret; } /* this function is regularly called, checks if video parameters