summaryrefslogtreecommitdiff
path: root/plugins/dvd
diff options
context:
space:
mode:
authorroot <root@elwms02.(none)>2010-04-06 16:13:08 +0200
committerroot <root@elwms02.(none)>2010-04-06 16:13:08 +0200
commit0e7005fcc7483c01aa102fbea358c5ac65a48d62 (patch)
tree11517ce0d3d2977c6732b3aa583b0008083e0bd3 /plugins/dvd
downloadx-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.gz
x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.bz2
hello world
Diffstat (limited to 'plugins/dvd')
-rw-r--r--plugins/dvd/dvd-cvs20071024_speedcontrol.diff123
-rw-r--r--plugins/dvd/plugin.sh54
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