Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/control
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/control	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/control	(revision 8779)
@@ -0,0 +1,11 @@
+Package: enigma2-plugin-swapplayers-dvdplayer
+Version: 1.0
+Description: DVDPlayer AAF lightmod for Swapstick
+Section: players
+Priority: optional
+Maintainer: AAF Forum
+Architecture: sh4
+OE: DVDPlayer AAF lightmod for Swapstick
+Homepage: http://www.aaf-digital.info
+Depends:
+Source: http://www.aaf-digital.info
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postinst
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postinst	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postinst	(revision 8779)
@@ -0,0 +1,7 @@
+#!/bin/sh
+TMP=/tmp/.players
+echo "successfully installed"
+echo "syncing disk"
+echo "please reboot your box so that the extension will be mounted..."
+sync
+exit 0
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postrm
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postrm	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/postrm	(revision 8779)
@@ -0,0 +1,9 @@
+#!/bin/sh
+TMP=/tmp/.players
+
+rm -rf /var/swap/extensions/DVDPlayer
+
+echo "successfully removed"
+echo "syncing disk"
+sync
+exit 0
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/preinst
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/preinst	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/preinst	(revision 8779)
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+TMP=/tmp/.players
+echo "syncing disk"
+sync
+
+model=`cat /etc/model`
+echo""
+echo "Checking your Boxtype...."
+echo "Some Plugins will not work correctly on your $model!"
+echo ""
+if [ "$model" = "" ]; then
+	echo "Sorry! This Plugin is not available for your $model because it will not work correctly!!!"
+	echo "Aborting installation..."
+	exit 1
+else
+	echo "Boxtype: $model OK"
+fi
+
+echo "checking swapstick"
+if [ ! -d /var/swap/extensions/ ]; then
+  echo "--------------------------"
+	echo "no swapstick found...."
+	echo "--------------------------"
+	exit 1
+fi
+echo "swapstick found...."
+echo "installing DVDPlayer to swapstick..."
+echo "checking OS"
+if  [ `cat /etc/motd | grep AAF | grep M | grep rev | wc -l` -eq 0 ]; then                      
+	echo ---------------------------
+	echo DONT USE this IPK Package!!
+	echo ---
+	echo Only for AAF Image!!
+	echo ---------------------------
+	exit 1
+fi
+exit 0
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/prerm
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/prerm	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/CONTROL/prerm	(revision 8779)
@@ -0,0 +1,6 @@
+#!/bin/sh
+TMP=/tmp/.players
+echo "syncing disk"
+sync
+echo "removing DVDPlayer from swapstick"
+exit 0
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/LICENSE
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/LICENSE	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/LICENSE	(revision 8779)
@@ -0,0 +1,12 @@
+This plugin is licensed under the Creative Commons 
+Attribution-NonCommercial-ShareAlike 3.0 Unported 
+License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative
+Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+
+Alternatively, this plugin may be distributed and executed on hardware which
+is licensed by Dream Multimedia GmbH.
+
+This plugin is NOT free software. It is open source, you are allowed to
+modify it (if you keep the license), but it may not be commercially 
+distributed other than under the conditions noted above.
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/__init__.py
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/__init__.py	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/__init__.py	(revision 8779)
@@ -0,0 +1,1 @@
+ 
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/keymap.xml
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/keymap.xml	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/keymap.xml	(revision 8779)
@@ -0,0 +1,30 @@
+<keymap>
+	<map context="DVDPlayerActions">
+		<key id="KEY_MENU" mapto="dvdMenu" flags="m" />
+		<key id="KEY_INFO" mapto="toggleInfo" flags="m" />
+		<key id="KEY_CHANNELUP" mapto="nextTitle" flags="m" />
+		<key id="KEY_CHANNELDOWN" mapto="prevTitle" flags="m" />
+		<key id="KEY_YELLOW" mapto="dvdAudioMenu" flags="m"/>
+		<key id="KEY_BLUE" mapto="nextAudioTrack" flags="m"/>
+		<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+		<device name="dreambox remote control (native)">
+			<key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
+			<key id="KEY_NEXT" mapto="nextChapter" flags="m" />
+			<key id="KEY_TV" mapto="tv" flags="m" />
+			<key id="KEY_AUDIO" mapto="dvdAudioMenu" flags="m" />
+			<key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
+			<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+			<key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
+		</device>
+		<device name="dreambox advanced remote control (native)">
+			<key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
+			<key id="KEY_NEXT" mapto="nextChapter" flags="m" />
+			<key id="KEY_TV" mapto="tv" flags="m" />
+			<key id="KEY_STOP" mapto="tv" flags="m" />
+			<key id="KEY_RADIO" mapto="dvdAudioMenu" flags="l" />
+			<key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
+			<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+			<key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
+		</device>
+	</map>
+</keymap>
Index: /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/plugin.py
===================================================================
--- /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/plugin.py	(revision 8779)
+++ /ipk/source.sh4/swapplayers_dvdplayer_1_0/var/swap/extensions/DVDPlayer/plugin.py	(revision 8779)
@@ -0,0 +1,1073 @@
+from os import path as os_path, remove as os_remove, listdir as os_listdir, system
+from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys, getDesktop, eAVSwitch, eConsoleAppContainer, evfd
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
+from Screens.HelpMenu import HelpableScreen
+from Screens.InfoBarGenerics import InfoBarSecondInfobar, InfoBarResolutionSelection, InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications
+from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
+from Components.Label import Label
+from Components.Pixmap import Pixmap
+from Components.FileList import FileList
+from Components.MenuList import MenuList
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
+from Components.config import config
+from Tools.Directories import pathExists, fileExists
+from Components.Harddisk import harddiskmanager
+from Components.Console import Console
+from Components.config import config, ConfigYesNo, ConfigSubsection
+try:
+	from Plugins.Extensions.MediaCenter.GlobalFunctions import InfoBarAspectSelection
+except:
+	pass
+import servicedvd # load c++ part of dvd player plugin
+import os
+import time
+
+config.plugins.DVDPlayer = ConfigSubsection()
+config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=False)
+
+lastpath = "/media/"
+tmppolicy = "None"
+
+def command(comandline):
+	comandline = comandline + " >/tmp/command.txt"
+	os.system(comandline)
+	text = ""
+	if os.path.exists("/tmp/command.txt") is True:
+		file = open("/tmp/command.txt", "r")
+		for line in file:
+			text = text + line.strip() + '\n'
+		file.close
+	# if one or last line then remove linefeed
+	if text[-1:] == '\n': text = text[:-1]
+	comandline = text
+	os.system("rm /tmp/command.txt")
+	return comandline
+
+boxversion = command('cat /etc/model')
+
+global HDskin
+global KSskin
+HDskin = False
+KSskin = False
+try:
+	skin_w = getDesktop(0).size().width()
+	if skin_w == 1280:
+		HDskin = True
+		KSskin = False
+	elif skin_w == 1024:
+		HDskin = False
+		KSskin = True
+	else:
+		HDskin = False
+		KSskin = False
+except:
+	HDskin = False
+	KSskin = False
+
+def applySkinVars(skin,dict):
+	for key in dict.keys():
+		try:
+			skin = skin.replace('{'+key+'}',dict[key])
+		except Exception,e:
+			print e,"@key=",key
+	return skin
+
+def tryOpen(filename):
+	try:
+		procFile = open(filename)
+	except IOError:
+		return ""
+	return procFile
+
+class TMPmounter(Screen):
+	skin = """
+		<screen position="center,center" size="550,376" title="RAR | IMG | ISO Mounter @ AAF-MOD - press ok | exit" >
+			<!--widget name="text" position="0,0" size="550,25" font="Regular;20" /-->
+			<widget name="filelist" position="10,0" size="520,376" scrollbarMode="showOnDemand" />
+		</screen>"""
+
+	def __init__(self, session, args = None):
+
+		Screen.__init__(self, session)
+
+		self.container=eConsoleAppContainer()
+		self.container.appClosed.append(self.finished)
+		evfd.getInstance().vfd_write_string("Dvd-Mounter")
+		global lastpath
+		currDir = lastpath
+		if not pathExists(currDir):
+			currDir = "/"
+		lastpath = currDir
+		print "[Dvd_TmpMounter] currDir", currDir
+		print "[Dvd_TmpMounter] lastpath", lastpath
+		if lastpath is not None:
+			currDir = lastpath
+		else:
+			currDir = "/media/dvd/"
+		if not pathExists(currDir):
+			currDir = "/"
+
+		self.filelist = FileList(currDir, matchingPattern = "^.*\.(img|rar|iso)", useServiceRef = False)
+		self["filelist"] = self.filelist
+		self["pixmap"] = Pixmap()
+						
+		self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
+		{
+			"ok": self.ok,
+			"back": self.back,
+		}, -1)
+	
+	def ok(self):
+		global lastpath
+		global running
+		running = "None"
+		filename = self["filelist"].getFilename()
+		if filename is not None:
+			if filename.upper().endswith(".RAR"):
+				running = "rar"
+				swapck = 0
+				if boxversion.upper() == 'UFS910':
+					p1 = self.getActivSwap()
+					if p1 == '' or p1 == '0':
+						print "[Dvd_TmpMounter] no swap % kb" % (p1)
+						self.session.open(MessageBox, _('Use this only with SWAP !'), MessageBox.TYPE_ERROR, timeout=5)
+					else:
+						if int(p1) >= int('16000'):
+							print "[Dvd_TmpMounter] ufs910 swap ok"
+							swapck = 1 
+						else:
+							print "[Dvd_TmpMounter] swap to smal %s kb min 15000 kb" % (p1)
+							self.session.open(MessageBox, _('Your Swapsize %s kb is to smal us min 15000 kb !' % (p1)), MessageBox.TYPE_ERROR, timeout=5)
+
+				elif boxversion.upper() == 'UFS922':
+					swapck = 1
+				elif boxversion.upper() == 'UFS912':
+					swapck = 1
+				elif boxversion.upper() == 'TF7700':
+					swapck = 1
+				elif boxversion.upper() == 'IPBOX91':
+					swapck = 1
+				elif boxversion.upper() == 'IPBOX900':
+					swapck = 1
+				elif boxversion.upper() == 'IPBOX910':
+					swapck = 1
+				elif boxversion.upper() == 'IPBOX9000':
+					swapck = 1
+				elif boxversion.upper() == 'AT7000':
+					swapck = 1
+				elif boxversion.upper() == 'AT7500':
+					swapck = 1					
+				elif boxversion.upper() == 'AT700':
+					swapck = 1
+				else:
+					self.session.open(MessageBox, _('Your Boxtype %s is not supportet ! message obi on AAF !' % (boxversion)), MessageBox.TYPE_ERROR, timeout=5)
+				
+				if swapck == 1:
+					print "[Dvd_TmpMounter] %s file gefunden %s" % (running,filename)
+					print "[Dvd_TmpMounter] %s file lastpath %s" % (running,lastpath)
+					print "[Dvd_TmpMounter] %s file filename %s" % (running,filename)
+					if os.path.exists("/tmp/rarfs") is False:
+						os.system('mkdir /tmp/rarfs')
+					if os.path.exists("/sbin/rarfs") is True:
+						print "[Dvd_TmpMounter] %s mounting file to /tmp/rarfs" % (running)
+						self.container.execute('/sbin/rarfs ' + str(lastpath) + '/' + str(filename) + ' /tmp/rarfs')
+						self.filelist.refresh()
+						return
+					else:
+						self.session.open(MessageBox, _('rarfs not found check /sbin/rarfs'), MessageBox.TYPE_WARNING, timeout=5)
+					self.close()
+			if filename.upper().endswith(".IMG"):
+				running = "img"
+				print "[Dvd_TmpMounter] %s file gefunden %s" % (running,filename)
+				print "[Dvd_TmpMounter] %s file lastpath %s" % (running,lastpath)
+				print "[Dvd_TmpMounter] %s file filename %s" % (running,filename)
+				print "[Dvd_TmpMounter] %s mounting file to /media/dvd" % (running)
+				self.container.execute('mount -o loop ' + str(lastpath) + '/' + str(filename) + ' /media/dvd')
+				self.filelist.refresh()
+				return
+
+			if filename.upper().endswith(".ISO"):
+				running = "iso"
+				print "[Dvd_TmpMounter] %s file gefunden %s" % (running,filename)
+				print "[Dvd_TmpMounter] %s file lastpath %s" % (running,lastpath)
+				print "[Dvd_TmpMounter] %s file filename %s" % (running,filename)
+				print "[Dvd_TmpMounter] %s mounting file to /media/dvd" % (running)
+				self.container.execute('mount ' + str(lastpath) + '/' + str(filename) + ' /media/dvd')
+				self.filelist.refresh()
+				return
+
+			if filename is not None:
+				lastpath = filename[0:filename.rfind("/")]
+	
+			if self["filelist"].canDescent(): # isDir
+				self["filelist"].descent()
+			else:
+				self["pixmap"].instance.setPixmapFromFile(self["filelist"].getFilename())
+
+	def finished(self,retval):
+		print "[Dvd_TmpMounter] finished retval", retval
+		self.filelist.refresh()
+		global lastpath
+		self.container = eConsoleAppContainer()
+		if running  is not None:
+			print "[Dvd_TmpMounter] %s mounting bind to %s" % (running,lastpath)
+			if running == "rar":
+				self.container.execute('/bin/mount --bind /tmp/rarfs ' + str(lastpath))
+				self.filelist.refresh()
+				self.session.open(TMPmounter)
+				self.close()
+			if running == "img":
+				self.container.execute('/bin/mount --bind /media/dvd ' + str(lastpath))
+				self.filelist.refresh()
+				self.session.open(DVDPlayer)
+				self.close()
+			if running == "iso":
+				self.container.execute('/bin/mount --bind /media/dvd ' + str(lastpath))
+				self.filelist.refresh()
+				self.session.open(DVDPlayer)
+				self.close()
+			self.filelist.refresh()
+			return
+		else:
+			print "[Dvd_TmpMounter] %s mounting error" % (running)
+
+	def getActivSwap(self):
+		fp = tryOpen('/proc/swaps')
+		if fp == '':
+			return 0
+		for tmp in fp.readlines():
+			if tmp.startswith('/'):
+				line = tmp.split()
+				swap = line[0].split('/')
+				size = int(line[2])
+				return (size)
+		return 0
+		
+	def keyNumberGlobal(self, number):
+		print "pressed", number
+		self["text"].number(number)
+
+	def back(self):
+		global lastpath
+		print "result: ist TMP-MOUNTER"
+		evfd.getInstance().vfd_write_string("TMP-MOUNTER")
+		lastpath = "/media/"
+		self.close()
+		
+class FileBrowser(Screen):
+	skin = """
+		<screen name="FileBrowser" position="center,center" size="520,376" title="DVD File Browser" >
+			<widget name="filelist" position="0,0" size="520,376" scrollbarMode="showOnDemand" />
+		</screen>"""
+
+	def __init__(self, session, dvd_filelist = [ ]):
+		Screen.__init__(self, session)
+
+		self.dvd_filelist = dvd_filelist
+		if len(dvd_filelist):	
+			self["filelist"] = MenuList(self.dvd_filelist)
+		else:
+			global lastpath
+			if lastpath is not None:
+				currDir = lastpath
+			else:
+				currDir = "/media/dvd/"
+			if not pathExists(currDir):
+				currDir = "/"
+
+			self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(iso)", useServiceRef = True)
+			self["filelist"] = self.filelist
+
+		self["FilelistActions"] = ActionMap(["OkCancelActions"],
+			{
+				"ok": self.ok,
+				"cancel": self.exit
+			})
+
+	def ok(self):
+		if len(self.dvd_filelist):
+			print "OK " + self["filelist"].getCurrent()
+			self.close(self["filelist"].getCurrent())
+		else:
+			global lastpath
+			filename = self["filelist"].getFilename()
+			if filename is not None:
+				if filename.upper().endswith("VIDEO_TS/"):
+					print "dvd structure found, trying to open..."
+					dvdpath = filename[0:-9]
+					lastpath = (dvdpath.rstrip("/").rsplit("/",1))[0]
+					print "lastpath video_ts/=", lastpath
+					self.close(dvdpath)
+					return
+			if self["filelist"].canDescent(): # isDir
+				self["filelist"].descent()
+				pathname = self["filelist"].getCurrentDirectory() or ""
+				if fileExists(pathname+"VIDEO_TS.IFO"):
+					print "dvd structure found, trying to open..."
+					lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
+					print "lastpath video_ts.ifo=", lastpath
+					self.close(pathname)
+			else:
+				lastpath = filename[0:filename.rfind("/")]
+				print "lastpath directory=", lastpath
+				self.close(filename)
+
+	def exit(self):
+		self.close(None)
+
+class DVDSummary(Screen):
+	skin = """
+	<screen position="0,0" size="132,64">
+		<widget source="session.CurrentService" render="Label" position="5,4" size="120,28" font="Regular;12" transparent="1" >
+			<convert type="ServiceName">Name</convert>
+		</widget>
+		<widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;12" transparent="1" />
+		<widget name="Chapter" position="72,30" size="54,16" font="Regular;12" transparent="1" halign="right" />
+		<widget source="session.CurrentService" render="Label" position="66,46" size="60,18" font="Regular;16" transparent="1" halign="right" >
+			<convert type="ServicePosition">Position</convert>
+		</widget>
+		<widget source="session.CurrentService" render="Progress" position="6,46" size="60,18" borderWidth="1" >
+			<convert type="ServicePosition">Position</convert>
+		</widget>
+	</screen>"""
+
+	def __init__(self, session, parent):
+		Screen.__init__(self, session, parent)
+
+		self["DVDPlayer"] = Label("DVD Player")
+		self["Title"] = Label("")
+		self["Time"] = Label("")
+		self["Chapter"] = Label("")
+
+	def updateChapter(self, chapter):
+		self["Chapter"].setText(chapter)
+
+	def setTitle(self, title):
+		self["Title"].setText(title)
+
+class DVDOverlay(Screen):
+	def __init__(self, session, args = None):
+		desktop_size = getDesktop(0).size()
+		DVDOverlay.skin = """<screen name="DVDOverlay" position="0,0" size="%d,%d" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />""" %(desktop_size.width(), desktop_size.height())
+		Screen.__init__(self, session)
+
+class ChapterZap(Screen):
+	skin = """
+	<screen name="ChapterZap" position="center,center" size="250,60" title="Chapter" >
+		<widget name="chapter" position="35,15" size="110,25" font="Regular;23" />
+		<widget name="number" position="145,15" size="80,25" halign="right" font="Regular;23" />
+	</screen>"""
+
+	def quit(self):
+		self.Timer.stop()
+		self.close(0)
+
+	def keyOK(self):
+		self.Timer.stop()
+		self.close(int(self["number"].getText()))
+
+	def keyNumberGlobal(self, number):
+		self.Timer.start(3000, True)		#reset timer
+		self.field = self.field + str(number)
+		self["number"].setText(self.field)
+		if len(self.field) >= 4:
+			self.keyOK()
+
+	def __init__(self, session, number):
+		Screen.__init__(self, session)
+		self.field = str(number)
+
+		self["chapter"] = Label(_("Chapter:"))
+
+		self["number"] = Label(self.field)
+
+		self["actions"] = NumberActionMap( [ "SetupActions" ],
+			{
+				"cancel": self.quit,
+				"ok": self.keyOK,
+				"1": self.keyNumberGlobal,
+				"2": self.keyNumberGlobal,
+				"3": self.keyNumberGlobal,
+				"4": self.keyNumberGlobal,
+				"5": self.keyNumberGlobal,
+				"6": self.keyNumberGlobal,
+				"7": self.keyNumberGlobal,
+				"8": self.keyNumberGlobal,
+				"9": self.keyNumberGlobal,
+				"0": self.keyNumberGlobal
+			})
+
+		self.Timer = eTimer()
+		self.Timer.callback.append(self.keyOK)
+		self.Timer.start(3000, True)
+
+class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarPVRState, InfoBarShowHide, HelpableScreen, InfoBarCueSheetSupport, InfoBarAspectSelection, InfoBarSecondInfobar, InfoBarResolutionSelection):
+#	ALLOW_SUSPEND = True
+	ENABLE_RESUME_SUPPORT = True
+	skin = """
+	<screen name="DVDPlayer" flags="wfNoBorder" position="{screen.pos}" size="720,160" title="InfoBar" backgroundColor="transparent" >
+		<!-- colorbuttons -->
+		<ePixmap position="48,70" zPosition="0" size="108,13" pixmap="skin_default/icons/mp_buttons.png" alphatest="on" />
+		<!-- Servicename -->
+		<ePixmap pixmap="skin_default/icons/icon_event.png" position="207,78" zPosition="1" size="15,10" alphatest="on" />
+		<widget source="session.CurrentService" render="Label" position="230,73" size="300,22" font="Regular;20" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" noWrap="1">
+			<convert type="ServiceName">Name</convert>
+		</widget>
+		<!-- Chapter info -->
+		<widget name="chapterLabel" position="230,96" size="360,22" font="Regular;20" foregroundColor="#c3c3c9" backgroundColor="#263c59" transparent="1" />
+		<!-- Audio track info -->
+		<ePixmap pixmap="skin_default/icons/icon_dolby.png" position="540,60" zPosition="1" size="26,16" alphatest="on"/>
+		<widget name="audioLabel" position="570,60" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+		<!-- Subtitle track info -->
+		<widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_txt.png" position="540,83" zPosition="1" size="26,16" alphatest="on" >
+			<convert type="ServiceInfo">HasTelext</convert>
+			<convert type="ConditionalShowHide" />
+		</widget>
+		<widget name="subtitleLabel" position="570,83" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+		<!-- Angle info -->
+		<widget name="anglePix" pixmap="skin_default/icons/icon_view.png" position="540,106" size="26,16" alphatest="on" />
+		<widget name="angleLabel" position="570,106" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+		<!-- Elapsed time -->
+		<widget source="session.CurrentService" render="Label" position="205,129" size="100,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
+			<convert type="ServicePosition">Position,ShowHours</convert>
+		</widget>
+		<!-- Progressbar (movie position)-->
+		<widget source="session.CurrentService" render="PositionGauge" position="300,133" size="270,10" zPosition="2" pointer="skin_default/position_pointer.png:540,0" transparent="1" >
+			<convert type="ServicePosition">Gauge</convert>
+		</widget>
+		<!-- Remaining time -->
+		<widget source="session.CurrentService" render="Label" position="576,129" size="100,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
+			<convert type="ServicePosition">Remaining,Negate,ShowHours</convert>
+		</widget>
+	</screen>"""
+
+	def save_infobar_seek_config(self):
+		self.saved_config_speeds_forward = config.seek.speeds_forward.value
+		self.saved_config_speeds_backward = config.seek.speeds_backward.value
+		self.saved_config_enter_forward = config.seek.enter_forward.value
+		self.saved_config_enter_backward = config.seek.enter_backward.value
+		self.saved_config_seek_on_pause = config.seek.on_pause.value
+		self.saved_config_seek_speeds_slowmotion = config.seek.speeds_slowmotion.value
+
+	def change_infobar_seek_config(self):
+		config.seek.speeds_forward.value = [2, 4, 8, 16, 32, 64]
+		config.seek.speeds_backward.value = [8, 16, 32, 64]
+		config.seek.speeds_slowmotion.value = [ ]
+		config.seek.enter_forward.value = "2"
+		config.seek.enter_backward.value = "2"
+		config.seek.on_pause.value = "play"
+
+	def restore_infobar_seek_config(self):
+		config.seek.speeds_forward.value = self.saved_config_speeds_forward
+		config.seek.speeds_backward.value = self.saved_config_speeds_backward
+		config.seek.speeds_slowmotion.value = self.saved_config_seek_speeds_slowmotion
+		config.seek.enter_forward.value = self.saved_config_enter_forward
+		config.seek.enter_backward.value = self.saved_config_enter_backward
+		config.seek.on_pause.value = self.saved_config_seek_on_pause
+
+	def __init__(self, session, dvd_device = None, dvd_filelist = [ ], args = None):
+		try:
+			if HDskin:
+				pos_w = 280
+				pos_h = 500
+			elif KSskin:
+				pos_w = 152
+				pos_h = 380
+			else:
+				pos_w = 0
+				pos_h = 380
+		except:
+			pos_w = 0
+			pos_h = 380
+		
+		self.dict = {
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				}
+		self.skin = applySkinVars(DVDPlayer.skin,self.dict)
+
+		config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=True)
+
+		Screen.__init__(self, session)
+		config.SecondInfobar.Enabled = ConfigYesNo(default=False)
+		InfoBarBase.__init__(self)
+		InfoBarNotifications.__init__(self)
+		InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
+		InfoBarShowHide.__init__(self)
+		HelpableScreen.__init__(self)
+		InfoBarSecondInfobar.__init__(self)
+		InfoBarAspectSelection.__init__(self)
+		self.save_infobar_seek_config()
+		self.change_infobar_seek_config()
+		InfoBarSeek.__init__(self)
+		InfoBarPVRState.__init__(self)
+		self.dvdScreen = self.session.instantiateDialog(DVDOverlay)
+
+		self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
+		self.session.nav.stopService()
+		self["audioLabel"] = Label("n/a")
+		self["subtitleLabel"] = Label("")
+		self["angleLabel"] = Label("")
+		self["chapterLabel"] = Label("")
+		self["anglePix"] = Pixmap()
+		self["anglePix"].hide()
+		self.last_audioTuple = None
+		self.last_subtitleTuple = None
+		self.last_angleTuple = None
+		self.totalChapters = 0
+		self.currentChapter = 0
+		self.totalTitles = 0
+		self.currentTitle = 0
+
+		self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
+			{
+				iPlayableService.evStopped: self.__serviceStopped,
+				iPlayableService.evUser: self.__timeUpdated,
+				iPlayableService.evUser+1: self.__statePlay,
+				iPlayableService.evUser+2: self.__statePause,
+				iPlayableService.evUser+3: self.__osdFFwdInfoAvail,
+				iPlayableService.evUser+4: self.__osdFBwdInfoAvail,
+				iPlayableService.evUser+5: self.__osdStringAvail,
+				iPlayableService.evUser+6: self.__osdAudioInfoAvail,
+				iPlayableService.evUser+7: self.__osdSubtitleInfoAvail,
+				iPlayableService.evUser+8: self.__chapterUpdated,
+				iPlayableService.evUser+9: self.__titleUpdated,
+				iPlayableService.evUser+11: self.__menuOpened,
+				iPlayableService.evUser+12: self.__menuClosed,
+				iPlayableService.evUser+13: self.__osdAngleInfoAvail
+			})
+
+		self["DVDPlayerDirectionActions"] = ActionMap(["DirectionActions"],
+			{
+				#MENU KEY DOWN ACTIONS
+				"left": self.keyLeft,
+				"right": self.keyRight,
+				"up": self.keyUp,
+				"down": self.keyDown,
+
+				#MENU KEY REPEATED ACTIONS
+				"leftRepeated": self.doNothing,
+				"rightRepeated": self.doNothing,
+				"upRepeated": self.doNothing,
+				"downRepeated": self.doNothing,
+
+				#MENU KEY UP ACTIONS
+				"leftUp": self.doNothing,
+				"rightUp": self.doNothing,
+				"upUp": self.doNothing,
+				"downUp": self.doNothing,
+			})
+
+		self["OkCancelActions"] = ActionMap(["OkCancelActions"],
+			{
+				"ok": self.keyOk,
+				"cancel": self.keyCancel,
+			})
+
+		self["DVDPlayerPlaybackActions"] = HelpableActionMap(self, "DVDPlayerActions",
+			{
+				#PLAYER ACTIONS
+				"dvdMenu": (self.enterDVDMenu, _("show DVD main menu")),
+				"toggleInfo": (self.toggleInfo, _("toggle time, chapter, audio, subtitle info")),
+#				"toggleInfo": (self.change_ratio, _("change ratio")),
+				"nextChapter": (self.nextChapter, _("forward to the next chapter")),
+				"prevChapter": (self.prevChapter, _("rewind to the previous chapter")),
+				"nextTitle": (self.nextTitle, _("jump forward to the next title")),
+				"prevTitle": (self.prevTitle, _("jump back to the previous title")),
+				"tv": (self.askLeavePlayer, _("exit DVD player or return to file browser")),
+				"dvdAudioMenu": (self.enterDVDAudioMenu, _("(show optional DVD audio menu)")),
+				"nextAudioTrack": (self.nextAudioTrack, _("switch to the next audio track")),
+				"nextSubtitleTrack": (self.nextSubtitleTrack, _("switch to the next subtitle language")),
+				"nextAngle": (self.nextAngle, _("switch to the next angle")),
+				"seekBeginning": self.seekBeginning,
+#				"yellow": self.change_ratio,	
+			}, -2)
+			
+		self["NumberActions"] = NumberActionMap( [ "NumberActions"],
+			{
+				"1": self.keyNumberGlobal,
+				"2": self.keyNumberGlobal,
+				"3": self.keyNumberGlobal,
+				"4": self.keyNumberGlobal,
+				"5": self.keyNumberGlobal,
+				"6": self.keyNumberGlobal,
+				"7": self.keyNumberGlobal,
+				"8": self.keyNumberGlobal,
+				"9": self.keyNumberGlobal,
+				"0": self.keyNumberGlobal,
+			})
+
+		self.onClose.append(self.__onClose)
+
+		from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+		hotplugNotifier.append(self.hotplugCB)
+		
+		if dvd_device:
+			self.physicalDVD = True
+		else:
+			self.scanHotplug()
+
+		self.dvd_filelist = dvd_filelist
+		self.onFirstExecBegin.append(self.opened)
+		self.service = None
+		self.in_menu = False
+
+	def change_ratio(self):
+		print "change ratio by obi"		
+		policy_input = open("/proc/stb/video/policy", "r")
+		policy = policy_input.read()
+		policy_input.close()
+
+		print "VideoModeLight policy current", policy
+
+		global tmppolicy
+		print "VideoModeLight tmppolicy current", tmppolicy
+
+		if tmppolicy == "None": 
+			tmppolicy = policy
+												
+		if tmppolicy.find("letterbox") != -1:
+			print "VideoModeLight set policy letterbox"
+			tmppolicy = "non"
+#			os.system('echo letterbox > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(0)
+			self.session.open(MessageBox, 'LETTERBOX', MessageBox.TYPE_WARNING, timeout=2)
+
+		elif tmppolicy.find("non") != -1:
+			print "VideoModeLight set policy non"
+			tmppolicy = "panscan"
+#			os.system('echo non > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(3)
+			self.session.open(MessageBox, 'NONLINEAR', MessageBox.TYPE_WARNING, timeout=2)
+
+		elif tmppolicy.find("panscan") != -1:
+			print "VideoModeLight set policy panscan"
+			tmppolicy = "bestfit"
+#			os.system('echo panscan > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(1)
+			self.session.open(MessageBox, 'PANSCAN', MessageBox.TYPE_WARNING, timeout=2)			
+
+		elif tmppolicy.find("bestfit") != -1:
+			print "VideoModeLight set policy bestfit"
+			tmppolicy = "letterbox"
+#			os.system('echo bestfit > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(2)
+			self.session.open(MessageBox, 'BESTFIT', MessageBox.TYPE_WARNING, timeout=2)
+
+
+	def keyNumberGlobal(self, number):
+		print "You pressed number " + str(number)
+		self.session.openWithCallback(self.numberEntered, ChapterZap, number)
+
+	def numberEntered(self, retval):
+#		print self.servicelist
+		if retval > 0:
+			self.zapToNumber(retval)
+
+	def getServiceInterface(self, iface):
+		service = self.service
+		if service:
+			attr = getattr(service, iface, None)
+			if callable(attr):
+				return attr()
+		return None
+
+	def __serviceStopped(self):
+		self.dvdScreen.hide()
+		subs = self.getServiceInterface("subtitle")
+		if subs:
+			subs.disableSubtitles(self.session.current_dialog.instance)
+
+	def serviceStarted(self): #override InfoBarShowHide function
+		self.dvdScreen.show()
+
+	def doEofInternal(self, playing):
+		if self.in_menu:
+			self.hide()
+
+	def __menuOpened(self):
+		self.hide()
+		self.in_menu = True
+		self["NumberActions"].setEnabled(False)
+
+	def __menuClosed(self):
+		self.show()
+		self.in_menu = False
+		self["NumberActions"].setEnabled(True)
+
+	def setChapterLabel(self):
+		chapterLCD = "Menu"
+		chapterOSD = "DVD Menu"
+		if self.currentTitle > 0:
+			chapterLCD = "%s %d" % (_("Chap."), self.currentChapter)
+			chapterOSD = "DVD %s %d/%d" % (_("Chapter"), self.currentChapter, self.totalChapters)
+			chapterOSD += " (%s %d/%d)" % (_("Title"), self.currentTitle, self.totalTitles)
+		self["chapterLabel"].setText(chapterOSD)
+		try:
+			self.session.summary.updateChapter(chapterLCD)
+		except:
+			pass
+
+	def doNothing(self):
+		pass
+
+	def toggleInfo(self):
+#not work yet
+#		if not self.in_menu:
+#			self.toggleShow()
+			print "toggleInfo"
+
+	def __timeUpdated(self):
+		print "timeUpdated"
+
+	def __statePlay(self):
+		print "statePlay"
+
+	def __statePause(self):
+		print "statePause"
+
+	def __osdFFwdInfoAvail(self):
+		self.setChapterLabel()
+		print "FFwdInfoAvail"
+
+	def __osdFBwdInfoAvail(self):
+		self.setChapterLabel()
+		print "FBwdInfoAvail"
+
+	def __osdStringAvail(self):
+		print "StringAvail"
+
+	def __osdAudioInfoAvail(self):
+		info = self.getServiceInterface("info")
+		audioTuple = info and info.getInfoObject(iServiceInformation.sUser+6)
+		print "AudioInfoAvail ", repr(audioTuple)
+		if audioTuple:
+			audioString = "%d: %s (%s)" % (audioTuple[0],audioTuple[1],audioTuple[2])
+			self["audioLabel"].setText(audioString)
+			if audioTuple != self.last_audioTuple and not self.in_menu:
+				self.doShow()
+		self.last_audioTuple = audioTuple
+
+	def __osdSubtitleInfoAvail(self):
+		info = self.getServiceInterface("info")
+		subtitleTuple = info and info.getInfoObject(iServiceInformation.sUser+7)
+		print "SubtitleInfoAvail ", repr(subtitleTuple)
+		if subtitleTuple:
+			subtitleString = ""
+			if subtitleTuple[0] is not 0:
+				subtitleString = "%d: %s" % (subtitleTuple[0],subtitleTuple[1])
+			self["subtitleLabel"].setText(subtitleString)
+			if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
+				self.doShow()
+		self.last_subtitleTuple = subtitleTuple
+	
+	def __osdAngleInfoAvail(self):
+		info = self.getServiceInterface("info")
+		angleTuple = info and info.getInfoObject(iServiceInformation.sUser+8)
+		print "AngleInfoAvail ", repr(angleTuple)
+		if angleTuple:
+			angleString = ""
+			if angleTuple[1] > 1:
+				angleString = "%d / %d" % (angleTuple[0],angleTuple[1])
+				self["anglePix"].show()
+			else:
+				self["anglePix"].hide()
+			self["angleLabel"].setText(angleString)
+			if angleTuple != self.last_angleTuple and not self.in_menu:
+				self.doShow()
+		self.last_angleTuple = angleTuple
+
+	def __chapterUpdated(self):
+		info = self.getServiceInterface("info")
+		if info:
+			self.currentChapter = info.getInfo(iServiceInformation.sCurrentChapter)
+			self.totalChapters = info.getInfo(iServiceInformation.sTotalChapters)
+			self.setChapterLabel()
+			print "__chapterUpdated: %d/%d" % (self.currentChapter, self.totalChapters)
+
+	def __titleUpdated(self):
+		info = self.getServiceInterface("info")
+		if info:
+			self.currentTitle = info.getInfo(iServiceInformation.sCurrentTitle)
+			self.totalTitles = info.getInfo(iServiceInformation.sTotalTitles)
+			self.setChapterLabel()
+			print "__titleUpdated: %d/%d" % (self.currentTitle, self.totalTitles)
+			if not self.in_menu:
+				self.doShow()
+		
+	def askLeavePlayer(self):
+#--->
+#- 		choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")]
+#---<
+#+++>
+		choices = [(_("Exit"), "exit"), (_("Continue playing"), "play"),(_("LOAD DVD"), "loaddvd"),(_("EJECT DVD"), "ejectdvd")]
+#+++<
+		if True or not self.physicalDVD:
+			choices.insert(1,(_("Return to file browser"), "browser"))
+		if self.physicalDVD:
+			cur = self.session.nav.getCurrentlyPlayingServiceReference()
+			if cur and not cur.toString().endswith(harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())):
+			    choices.insert(0,(_("Play DVD"), "playPhysical" ))
+		self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices)
+
+	def sendKey(self, key):
+		keys = self.getServiceInterface("keys")
+		if keys:
+			keys.keyPressed(key)
+		return keys
+
+	def nextAudioTrack(self):
+		self.sendKey(iServiceKeys.keyUser)
+
+	def nextSubtitleTrack(self):
+		self.sendKey(iServiceKeys.keyUser+1)
+
+	def enterDVDAudioMenu(self):
+		self.sendKey(iServiceKeys.keyUser+2)
+
+	def nextChapter(self):
+		self.sendKey(iServiceKeys.keyUser+3)
+
+	def prevChapter(self):
+		self.sendKey(iServiceKeys.keyUser+4)
+
+	def nextTitle(self):
+		self.sendKey(iServiceKeys.keyUser+5)
+
+	def prevTitle(self):
+		self.sendKey(iServiceKeys.keyUser+6)
+
+	def enterDVDMenu(self):
+		self.sendKey(iServiceKeys.keyUser+7)
+	
+	def nextAngle(self):
+		self.sendKey(iServiceKeys.keyUser+8)
+
+	def seekBeginning(self):
+		if self.service:
+			seekable = self.getSeek()
+			if seekable:
+				seekable.seekTo(0)
+
+	def zapToNumber(self, number):
+		if self.service:
+			seekable = self.getSeek()
+			if seekable:
+				print "seek to chapter %d" % number
+				seekable.seekChapter(number)
+
+#	MENU ACTIONS
+	def keyRight(self):
+		self.sendKey(iServiceKeys.keyRight)
+
+	def keyLeft(self):
+		self.sendKey(iServiceKeys.keyLeft)
+
+	def keyUp(self):
+		self.sendKey(iServiceKeys.keyUp)
+
+	def keyDown(self):
+		self.sendKey(iServiceKeys.keyDown)
+
+	def keyOk(self):
+		if self.sendKey(iServiceKeys.keyOk) and not self.in_menu:
+#			self.toggleInfo()
+			self.change_ratio()
+
+	def keyCancel(self):
+		self.askLeavePlayer()
+
+	def opened(self):
+		if len(self.dvd_filelist) == 1:
+			# opened via autoplay
+			self.FileBrowserClosed(self.dvd_filelist[0])
+		elif self.physicalDVD:
+			# opened from menu with dvd in drive
+			self.session.openWithCallback(self.playPhysicalCB, MessageBox, text=_("Do you want to play DVD in drive?"), timeout=5 )
+		else:
+			# opened from menu without dvd in drive
+			self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, self.dvd_filelist)
+
+	def playPhysicalCB(self, answer):
+		if answer == True:
+			self.FileBrowserClosed(harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()))
+		else:
+			self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+
+	def FileBrowserClosed(self, val):
+		curref = self.session.nav.getCurrentlyPlayingServiceReference()
+		print "FileBrowserClosed", val
+		if val is None:
+			self.askLeavePlayer()
+		else:
+			newref = eServiceReference(4369, 0, val)
+			print "play", newref.toString()
+			if curref is None or curref != newref:
+				self.session.nav.playService(newref)
+				self.service = self.session.nav.getCurrentService()
+				print "self.service", self.service
+				print "cur_dlg", self.session.current_dialog
+				subs = self.getServiceInterface("subtitle")
+				if subs:
+					subs.enableSubtitles(self.dvdScreen.instance, None)
+
+	def exitCB(self, answer):
+		if answer is not None:
+			if answer[1] == "exit":
+				if self.service:
+					self.service = None
+				Console().ePopen(("/bin/umount -l `mount | grep fuse | cut -d ' ' -f3`"))
+				Console().ePopen(("/bin/umount -l `mount | grep iso9660 | cut -d ' ' -f3`"))
+				config.SecondInfobar.Enabled = ConfigYesNo(default=True)
+				config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=False)
+				config.plugins.DVDPlayer.save()
+				self.close()
+			if answer[1] == "browser":
+				#TODO check here if a paused dvd playback is already running... then re-start it...
+				#else
+				if self.service:
+					self.service = None
+				self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+#+++>
+			if answer[1] == "loaddvd":
+				os.system('mount /dev/sr0 /media/dvd')
+				self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+			if answer[1] == "ejectdvd":
+				os.system('umount /media/dvd')
+				os.system('eject /dev/sr0')
+				self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+#+++<
+			if answer[1] == "playPhysical":
+				if self.service:
+					self.service = None
+				self.playPhysicalCB(True)
+			else:
+				pass
+
+	def __onClose(self):
+		self.restore_infobar_seek_config()
+		self.session.nav.playService(self.oldService)
+		from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+		hotplugNotifier.remove(self.hotplugCB)
+
+	def playLastCB(self, answer): # overwrite infobar cuesheet function
+		print "playLastCB", answer, self.resume_point
+		if self.service:
+			if answer == True:
+				seekable = self.getSeek()
+				if seekable:
+					seekable.seekTo(self.resume_point)
+			pause = self.service.pause()
+			pause.unpause()
+		self.hideAfterResume()
+
+	def showAfterCuesheetOperation(self):
+		if not self.in_menu:
+			self.show()
+
+	def createSummary(self):
+		return DVDSummary
+
+#override some InfoBarSeek functions
+	def doEof(self):
+		self.setSeekState(self.SEEK_STATE_PLAY)
+
+	def calcRemainingTime(self):
+		return 0
+
+	def hotplugCB(self, dev, media_state):
+		print "[hotplugCB]", dev, media_state
+		if dev == harddiskmanager.getCD():
+			if media_state == "1":
+				self.scanHotplug()
+			else:
+				self.physicalDVD = False
+
+	def scanHotplug(self):
+		devicepath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
+		if pathExists(devicepath):
+			from Components.Scanner import scanDevice
+			res = scanDevice(devicepath)
+			list = [ (r.description, r, res[r], self.session) for r in res ]
+			if list:
+				(desc, scanner, files, session) = list[0]
+				for file in files:
+					print file
+					if file.mimetype == "video/x-dvd":
+						print "physical dvd found:", devicepath
+						self.physicalDVD = True
+						return
+		self.physicalDVD = False
+
+def main(session, **kwargs):
+	test = "False"
+	session.openWithCallback(letterChosen, ChoiceBox, title=_("DVD-Player Main Menu @ AAF-MOD"), list=[(_("DVD-PLAYER"), session), (_("MOUNTER"), session)])
+
+
+def letterChosen(result):
+	print "!!!!!!!!!!!!!!!!result" ,result
+	if result is not None:
+		if result[0] == "DVD-PLAYER":
+			print "result: ist DVD-PLAYER"
+			os.system('echo "DVD-PLAYER" > /dev/vfd')
+			session = result[1]
+			session.open(DVDPlayer)
+			
+		if result[0] == "MOUNTER":
+			print "result: ist MOUNTER"
+			os.system('echo "MOUNTER" > /dev/vfd')
+			session = result[1]
+			session.open(TMPmounter)
+
+
+def menu(menuid, **kwargs):
+	if menuid == "mainmenu":
+		return [(_("DVD Player"), main, "dvd_player", 46)]
+	return []
+
+from Plugins.Plugin import PluginDescriptor
+
+def filescan_open(list, session, **kwargs):
+	if len(list) == 1 and list[0].mimetype == "video/x-dvd":
+		splitted = list[0].path.split('/')
+		print "splitted", splitted
+		if len(splitted) > 2:
+			if splitted[1] == 'autofs':
+				session.open(DVDPlayer, dvd_device="/dev/%s" %(splitted[2]))
+				return
+			else:
+				print "splitted[0]", splitted[1]
+	else:
+		dvd_filelist = []
+		for x in list:
+			if x.mimetype == "video/x-dvd-iso":
+				dvd_filelist.append(x.path)
+			if x.mimetype == "video/x-dvd":
+				dvd_filelist.append(x.path.rsplit('/',1)[0])			
+		session.open(DVDPlayer, dvd_filelist=dvd_filelist)
+
+def filescan(**kwargs):
+	from Components.Scanner import Scanner, ScanPath
+
+	# Overwrite checkFile to only detect local
+	class LocalScanner(Scanner):
+		def checkFile(self, file):
+			return fileExists(file.path)
+
+	return [
+		LocalScanner(mimetypes = ["video/x-dvd","video/x-dvd-iso"],
+			paths_to_scan =
+				[
+					ScanPath(path = "video_ts", with_subdirs = False),
+					ScanPath(path = "VIDEO_TS", with_subdirs = False),
+					ScanPath(path = "", with_subdirs = False),
+				],
+			name = "DVD",
+			description = _("Play DVD"),
+			openfnc = filescan_open,
+		)]		
+
+def Plugins(**kwargs):
+	return [PluginDescriptor(name = "DVDPlayer", description = "Play DVDs", where = PluginDescriptor.WHERE_MENU, fnc = menu),
+			PluginDescriptor(where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
