diff options
| author | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
|---|---|---|
| committer | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
| commit | 0e7005fcc7483c01aa102fbea358c5ac65a48d62 (patch) | |
| tree | 11517ce0d3d2977c6732b3aa583b0008083e0bd3 /plugins/dvd | |
| download | x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.gz x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.bz2 | |
hello world
Diffstat (limited to 'plugins/dvd')
| -rw-r--r-- | plugins/dvd/dvd-cvs20071024_speedcontrol.diff | 123 | ||||
| -rw-r--r-- | plugins/dvd/plugin.sh | 54 |
2 files changed, 177 insertions, 0 deletions
diff --git a/plugins/dvd/dvd-cvs20071024_speedcontrol.diff b/plugins/dvd/dvd-cvs20071024_speedcontrol.diff new file mode 100644 index 0000000..2dd21a9 --- /dev/null +++ b/plugins/dvd/dvd-cvs20071024_speedcontrol.diff @@ -0,0 +1,123 @@ +diff -ruN dvd-cvs20071024/control-dvd.c dvd-cvs20071024-patched/control-dvd.c +--- dvd-cvs20071024/control-dvd.c 2007-09-18 22:26:17.000000000 +0200 ++++ dvd-cvs20071024-patched/control-dvd.c 2007-10-24 23:20:07.000000000 +0200 +@@ -20,6 +20,7 @@ + #include "tools-dvd.h" + #include "player-dvd.h" + #include "control-dvd.h" ++#include "dvddev.h" + + #define MENUTIMEOUT 120 // seconds + #define MAXWAIT4EPGINFO 10 // seconds +@@ -51,6 +52,7 @@ + inputActive = NoneInput; + inputHide = true; + forceDvdNavigation = false; ++ cDVD::SpeedControl(2); + player->setController(this); + cStatus::MsgReplaying(this, "DVD", NULL, true); + } +@@ -63,6 +65,7 @@ + assert(dvd_active == true); + dvd_active = false; + delete player; ++ cDVD::SpeedControl(0); + } + + bool cDvdPlayerControl::Active(void) +diff -ruN dvd-cvs20071024/dvddev.c dvd-cvs20071024-patched/dvddev.c +--- dvd-cvs20071024/dvddev.c 2004-06-30 08:18:24.000000000 +0200 ++++ dvd-cvs20071024-patched/dvddev.c 2007-10-24 23:22:15.000000000 +0200 +@@ -21,6 +21,7 @@ + #endif + + #include "dvddev.h" ++#include <vdr/tools.h> + + #ifndef __QNXNTO__ + #include <linux/cdrom.h> +@@ -70,6 +71,73 @@ + return result; + } + ++bool cDVD::SpeedControl(int speed) ++{ ++ int fd; ++ unsigned long rw_size; ++ unsigned char buffer[28]; ++ struct cdrom_generic_command cgc; ++ struct request_sense sense; ++ ++ fd = open(cDVD::DeviceName(), O_RDONLY | O_NONBLOCK); ++ if (fd < 0) { ++ esyslog("SpeedControl() Can't open device %s", cDVD::DeviceName()); ++ return false; ++ } ++ ++ memset(&cgc, 0, sizeof(cgc)); ++ memset(&sense, 0, sizeof(sense)); ++ memset(&buffer, 0, sizeof(buffer)); ++ ++ /* SET STREAMING command */ ++ cgc.cmd[0] = 0xb6; ++ /* 28 byte parameter list length */ ++ cgc.cmd[10] = 28; ++ ++ cgc.sense = &sense; ++ cgc.buffer = buffer; ++ cgc.buflen = sizeof(buffer); ++ cgc.data_direction = CGC_DATA_WRITE; ++ cgc.quiet = 1; ++ ++ if (speed == 0) buffer[0] = 4;// set Restore Drive Defaults ++ ++ buffer[8] = 0xff; ++ buffer[9] = 0xff; ++ buffer[10] = 0xff; ++ buffer[11] = 0xff; ++ rw_size = 177 * speed; ++ ++ /* read size */ ++ buffer[12] = (rw_size >> 24) & 0xff; ++ buffer[13] = (rw_size >> 16) & 0xff; ++ buffer[14] = (rw_size >> 8) & 0xff; ++ buffer[15] = rw_size & 0xff; ++ ++ /* read time 1 sec. */ ++ buffer[18] = 0x03; ++ buffer[19] = 0xE8; ++ ++ /* write size */ ++ buffer[20] = (rw_size >> 24) & 0xff; ++ buffer[21] = (rw_size >> 16) & 0xff; ++ buffer[22] = (rw_size >> 8) & 0xff; ++ buffer[23] = rw_size & 0xff; ++ ++ /* write time 1 sec. */ ++ buffer[26] = 0x03; ++ buffer[27] = 0xE8; ++ ++ if (ioctl(fd, CDROM_SEND_PACKET, &cgc) != 0) ++ if (ioctl(fd, CDROM_SELECT_SPEED, speed) != 0) { ++ esyslog("SpeedControl() Command failed"); ++ return false; ++ } ++ ++ close(fd); ++ return true; ++} ++ + void cDVD::SetDeviceName(const char *DeviceName) + { + deviceName = strdup(DeviceName); +diff -ruN dvd-cvs20071024/dvddev.h dvd-cvs20071024-patched/dvddev.h +--- dvd-cvs20071024/dvddev.h 2004-06-11 17:27:05.000000000 +0200 ++++ dvd-cvs20071024-patched/dvddev.h 2007-10-24 23:19:56.000000000 +0200 +@@ -20,6 +20,7 @@ + public: + cDVD(void); + ~cDVD(); ++ static bool SpeedControl(int speed); + static void SetDeviceName(const char *DeviceName); + static const char *DeviceName(void); + static bool DriveExists(void); diff --git a/plugins/dvd/plugin.sh b/plugins/dvd/plugin.sh new file mode 100644 index 0000000..37ab54c --- /dev/null +++ b/plugins/dvd/plugin.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# x-vdr (Installations-Skript fuer einen VDR mit Debian als Basis) +# von Marc Wernecke - www.zulu-entertainment.de +# 01.02.2009 +# +# vdr-dvd + +# defaults +source ./../../x-vdr.conf +source ./../../setup.conf +source ./../../functions + +WEB="http://www.zulu-entertainment.de/files/vdr-dvd/vdr-dvd-cvs20090201.tar.bz2" +VERSION="dvd-cvs20090201" +LINK="dvd" + +VAR=`basename $WEB` +DIR=`pwd` + +# plugin entfernen +function clean_plugin() { + cd $SOURCEDIR/VDR/PLUGINS/src + rm -rf $LINK + rm -rf $VERSION + rm -f $VDRLIBDIR/libvdr-$LINK.so* + log "cleaning $LINK" +} + +# plugin installieren +function install_plugin() { + download_plugin + extract_plugin + cd $SOURCEDIR/VDR/PLUGINS/src + rm -f $LINK + ln -vfs $VERSION $LINK + patch_plugin + patch_p1_plugin + + ## plugin specials - start ## + + ## plugin specials - ende ## +} + +# plugin commands +if [ $# \> 0 ]; then + cmd=$1 + cmd_plugin +else + install_plugin + log "install-plugin fuer $VERSION ist fertig" +fi + +exit 0 |
