DVD support is now optional

This commit is contained in:
Klaus Schmidinger 2001-08-06 16:19:20 +02:00
parent 81cf0719fe
commit c19ad04a21
9 changed files with 101 additions and 26 deletions

14
INSTALL
View File

@ -15,12 +15,16 @@ If you have the DVB driver source in a different location
you will have to change the definition of DVBDIR in the you will have to change the definition of DVBDIR in the
Makefile. Makefile.
VDR also needs the package 'libdvdread' in order to replay DVDs. If you want to use your DVD drive you will need to compile VDR with
This package is expected to be located in the directory ../DVD (seen
from the VDR directory). Adjust the definition of DVDDIR in the
Makefile if necessary.
This program requires the card driver version 0.9.0 or higher make DVD=1
to activate DVD support. VDR then also needs the package 'libdvdread'
in order to replay DVDs. This package is expected to be located in the
directory ../DVD (seen from the VDR directory). Adjust the definition
of DVDDIR in the Makefile if necessary.
VDR requires the card driver version 0.9.0 or higher
to work properly. You need to load the dvb.o module *without* option to work properly. You need to load the dvb.o module *without* option
'outstream=0' (previous versions of VDR required this option to have 'outstream=0' (previous versions of VDR required this option to have
the driver supply the data in AV_PES format; as of version 0.70 VDR the driver supply the data in AV_PES format; as of version 0.70 VDR

View File

@ -4,14 +4,22 @@
# See the main source file 'vdr.c' for copyright information and # See the main source file 'vdr.c' for copyright information and
# how to reach the author. # how to reach the author.
# #
# $Id: Makefile 1.23 2001/08/03 13:10:52 kls Exp $ # $Id: Makefile 1.24 2001/08/06 16:13:42 kls Exp $
DVBDIR = ../DVB DVBDIR = ../DVB
DVDDIR = ../DVD DVDDIR = ../DVD
AC3DIR = ./ac3dec AC3DIR = ./ac3dec
INCLUDES = -I$(DVBDIR)/ost/include -I$(DVDDIR)/libdvdread INCLUDES = -I$(DVBDIR)/ost/include
LIBDIRS = -L$(DVDDIR)/libdvdread/dvdread/.libs
ifdef DVD
INCLUDES += -I$(DVDDIR)/libdvdread
LIBDIRS += -L$(DVDDIR)/libdvdread/dvdread/.libs
DEFINES += -DDVDSUPPORT
DEFINES += -D_LARGEFILE64_SOURCE # needed by libdvdread
AC3LIB = $(AC3DIR)/libac3.a
DVDLIB = -ldvdread
endif
OBJS = config.o dvbapi.o dvbosd.o dvd.o eit.o font.o i18n.o interface.o menu.o osd.o\ OBJS = config.o dvbapi.o dvbosd.o dvd.o eit.o font.o i18n.o interface.o menu.o osd.o\
recording.o remote.o remux.o ringbuffer.o svdrp.o thread.o tools.o vdr.o\ recording.o remote.o remux.o ringbuffer.o svdrp.o thread.o tools.o vdr.o\
@ -20,8 +28,6 @@ OBJS = config.o dvbapi.o dvbosd.o dvd.o eit.o font.o i18n.o interface.o menu.o o
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1 OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1 FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
DEFINES += -D_LARGEFILE64_SOURCE
ifndef REMOTE ifndef REMOTE
REMOTE = KBD REMOTE = KBD
endif endif
@ -70,8 +76,8 @@ videodir.o : videodir.c tools.h videodir.h
# The main program: # The main program:
vdr: $(OBJS) $(AC3DIR)/libac3.a vdr: $(OBJS) $(AC3LIB)
g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread $(LIBDIRS) -ldvdread $(AC3DIR)/libac3.a -o vdr g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread $(LIBDIRS) $(DVDLIB) $(AC3LIB) -o vdr
# The font files: # The font files:
@ -89,7 +95,7 @@ genfontfile: genfontfile.o
# The ac3dec library: # The ac3dec library:
$(AC3DIR)/libac3.a: $(AC3LIB):
make -C $(AC3DIR) all make -C $(AC3DIR) all
# Housekeeping: # Housekeeping:

View File

@ -5,8 +5,9 @@
* how to reach the author. * how to reach the author.
* *
* DVD support initially written by Andreas Schultz <aschultz@warp10.net> * DVD support initially written by Andreas Schultz <aschultz@warp10.net>
* based on dvdplayer-0.5 by Matjaz Thaler <matjaz.thaler@guest.arnes.si>
* *
* $Id: dvbapi.c 1.99 2001/08/05 15:46:21 kls Exp $ * $Id: dvbapi.c 1.100 2001/08/06 16:19:20 kls Exp $
*/ */
//#define DVDDEBUG 1 //#define DVDDEBUG 1
@ -27,9 +28,11 @@ extern "C" {
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#ifdef DVDSUPPORT
extern "C" { extern "C" {
#include "ac3dec/ac3.h" #include "ac3dec/ac3.h"
} }
#endif //DVDSUPPORT
#include "config.h" #include "config.h"
#include "recording.h" #include "recording.h"
@ -1124,6 +1127,7 @@ bool cReplayBuffer::NextFile(uchar FileNumber, int FileOffset)
return replayFile >= 0; return replayFile >= 0;
} }
#ifdef DVDSUPPORT
// --- cDVDplayBuffer -------------------------------------------------------- // --- cDVDplayBuffer --------------------------------------------------------
class cDVDplayBuffer : public cPlayBuffer { class cDVDplayBuffer : public cPlayBuffer {
@ -1651,7 +1655,7 @@ void cDVDplayBuffer::Input(void)
// dsyslog(LOG_INF, "DVD: new cyclestate: %d, pktcnt: %d, cur: %d", cyclestate, pktcnt, cur_output_size); // dsyslog(LOG_INF, "DVD: new cyclestate: %d, pktcnt: %d, cur: %d", cyclestate, pktcnt, cur_output_size);
} }
dsyslog(LOG_INFO, "output thread ended (pid=%d)", getpid()); dsyslog(LOG_INFO, "input thread ended (pid=%d)", getpid());
} }
#define NO_PICTURE 0 #define NO_PICTURE 0
@ -2004,6 +2008,7 @@ void cDVDplayBuffer::GetIndex(int &Current, int &Total, bool SnapToIFrame)
{ {
Current = Total = -1; Current = Total = -1;
} }
#endif //DVDSUPPORT
// --- cTransferBuffer ------------------------------------------------------- // --- cTransferBuffer -------------------------------------------------------
@ -3332,6 +3337,7 @@ bool cDvbApi::StartReplay(const char *FileName)
return false; return false;
} }
#ifdef DVDSUPPORT
bool cDvbApi::StartDVDplay(cDVD *dvd, int TitleID) bool cDvbApi::StartDVDplay(cDVD *dvd, int TitleID)
{ {
if (Recording()) { if (Recording()) {
@ -3359,6 +3365,7 @@ bool cDvbApi::StartDVDplay(cDVD *dvd, int TitleID)
} }
return false; return false;
} }
#endif //DVDSUPPORT
void cDvbApi::StopReplay(void) void cDvbApi::StopReplay(void)
{ {

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: dvbapi.h 1.43 2001/08/02 14:50:48 kls Exp $ * $Id: dvbapi.h 1.44 2001/08/05 15:57:45 kls Exp $
*/ */
#ifndef __DVBAPI_H #ifndef __DVBAPI_H
@ -28,7 +28,9 @@
#include <stdio.h> #include <stdio.h>
#include "dvbosd.h" #include "dvbosd.h"
#ifdef DVDSUPPORT
#include "dvd.h" #include "dvd.h"
#endif //DVDSUPPORT
#include "eit.h" #include "eit.h"
#include "thread.h" #include "thread.h"
@ -48,7 +50,9 @@ class cChannel;
class cRecordBuffer; class cRecordBuffer;
class cPlayBuffer; class cPlayBuffer;
class cReplayBuffer; class cReplayBuffer;
#ifdef DVDSUPPORT
class cDVDplayBuffer; class cDVDplayBuffer;
#endif //DVDSUPPORT
class cTransferBuffer; class cTransferBuffer;
class cCuttingBuffer; class cCuttingBuffer;
@ -64,7 +68,9 @@ public:
class cDvbApi { class cDvbApi {
friend class cRecordBuffer; friend class cRecordBuffer;
friend class cReplayBuffer; friend class cReplayBuffer;
#ifdef DVDSUPPORT
friend class cDVDplayBuffer; friend class cDVDplayBuffer;
#endif //DVDSUPPORT
friend class cTransferBuffer; friend class cTransferBuffer;
private: private:
int videoDev; int videoDev;
@ -243,8 +249,10 @@ public:
// Starts replaying the given file. // Starts replaying the given file.
// If there is already a replay session active, it will be stopped // If there is already a replay session active, it will be stopped
// and the new file will be played back. // and the new file will be played back.
#ifdef DVDSUPPORT
bool StartDVDplay(cDVD *dvd, int TitleID);//XXX dvd parameter necessary??? bool StartDVDplay(cDVD *dvd, int TitleID);//XXX dvd parameter necessary???
// Starts replaying the given TitleID on the DVD. // Starts replaying the given TitleID on the DVD.
#endif //DVDSUPPORT
void StopReplay(void); void StopReplay(void);
// Stops the current replay session (if any). // Stops the current replay session (if any).
void Pause(void); void Pause(void);

11
dvd.c
View File

@ -6,11 +6,13 @@
* *
* Initially written by Andreas Schultz <aschultz@warp10.net> * Initially written by Andreas Schultz <aschultz@warp10.net>
* *
* $Id: dvd.c 1.2 2001/08/05 15:00:45 kls Exp $ * $Id: dvd.c 1.3 2001/08/06 16:07:44 kls Exp $
*/ */
//XXX //#define DVDDEBUG 1 #ifdef DVDSUPPORT
//XXX //#define DEBUG_BUFFER 1
//#define DVDSUPPORTDEBUG 1
//#define DEBUG_BUFFER 1
#include <fcntl.h> #include <fcntl.h>
#include <linux/cdrom.h> #include <linux/cdrom.h>
@ -92,7 +94,7 @@ void cDVD::Open(void)
void cDVD::Close(void) void cDVD::Close(void)
{ {
#ifdef DVDDEBUG #ifdef DVDSUPPORTDEBUG
dsyslog(LOG_INFO, "DVD: cDVD::Close(%p): vts: %p, vmg: %p, title: %p, dvd: %p", this, vts_file, vmg_file, title, dvd); dsyslog(LOG_INFO, "DVD: cDVD::Close(%p): vts: %p, vmg: %p, title: %p, dvd: %p", this, vts_file, vmg_file, title, dvd);
#endif #endif
if (vts_file) if (vts_file)
@ -143,3 +145,4 @@ dvd_file_t *cDVD::openTitle(int Title, dvd_read_domain_t domain)
return title; return title;
} }
#endif //DVDSUPPORT

6
dvd.h
View File

@ -6,12 +6,14 @@
* *
* Initially written by Andreas Schultz <aschultz@warp10.net> * Initially written by Andreas Schultz <aschultz@warp10.net>
* *
* $Id: dvd.h 1.2 2001/08/05 15:00:23 kls Exp $ * $Id: dvd.h 1.3 2001/08/05 16:00:57 kls Exp $
*/ */
#ifndef __DVD_H #ifndef __DVD_H
#define __DVD_H #define __DVD_H
#ifdef DVDSUPPORT
#include <dvdread/dvd_reader.h> #include <dvdread/dvd_reader.h>
#include <dvdread/ifo_types.h> #include <dvdread/ifo_types.h>
#include <dvdread/ifo_read.h> #include <dvdread/ifo_read.h>
@ -46,4 +48,6 @@ public:
static cDVD *getDVD(void); static cDVD *getDVD(void);
}; };
#endif //DVDSUPPORT
#endif //__DVD_H #endif //__DVD_H

24
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.c 1.94 2001/08/05 15:11:35 kls Exp $ * $Id: menu.c 1.95 2001/08/05 16:09:41 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -1590,6 +1590,7 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
return state; return state;
} }
#ifdef DVDSUPPORT
// --- cMenuDVDItem ---------------------------------------------------------- // --- cMenuDVDItem ----------------------------------------------------------
class cMenuDVDItem : public cOsdItem { class cMenuDVDItem : public cOsdItem {
@ -1661,6 +1662,7 @@ eOSState cMenuDVD::ProcessKey(eKeys Key)
} }
return state; return state;
} }
#endif //DVDSUPPORT
// --- cMenuSetup ------------------------------------------------------------ // --- cMenuSetup ------------------------------------------------------------
@ -1794,8 +1796,10 @@ cMenuMain::cMenuMain(bool Replaying)
Add(new cOsdItem(hk(tr("Channels")), osChannels)); Add(new cOsdItem(hk(tr("Channels")), osChannels));
Add(new cOsdItem(hk(tr("Timers")), osTimers)); Add(new cOsdItem(hk(tr("Timers")), osTimers));
Add(new cOsdItem(hk(tr("Recordings")), osRecordings)); Add(new cOsdItem(hk(tr("Recordings")), osRecordings));
#ifdef DVDSUPPORT
if (cDVD::DriveExists()) if (cDVD::DriveExists())
Add(new cOsdItem(hk(tr("DVD")), osDVD)); Add(new cOsdItem(hk(tr("DVD")), osDVD));
#endif //DVDSUPPORT
Add(new cOsdItem(hk(tr("Setup")), osSetup)); Add(new cOsdItem(hk(tr("Setup")), osSetup));
if (Commands.Count()) if (Commands.Count())
Add(new cOsdItem(hk(tr("Commands")), osCommands)); Add(new cOsdItem(hk(tr("Commands")), osCommands));
@ -1810,7 +1814,13 @@ cMenuMain::cMenuMain(bool Replaying)
} }
if (cVideoCutter::Active()) if (cVideoCutter::Active())
Add(new cOsdItem(hk(tr(" Cancel editing")), osCancelEdit)); Add(new cOsdItem(hk(tr(" Cancel editing")), osCancelEdit));
SetHelp(tr("Record"), cDvbApi::PrimaryDvbApi->CanToggleAudioTrack() ? tr("Language") : NULL, cDVD::DiscOk() ? tr("Eject DVD") : NULL, cReplayControl::LastReplayed() ? tr("Resume") : NULL); const char *DVDbutton =
#ifdef DVDSUPPORT
cDVD::DiscOk() ? tr("Eject DVD") : NULL;
#else
NULL;
#endif //DVDSUPPORT
SetHelp(tr("Record"), cDvbApi::PrimaryDvbApi->CanToggleAudioTrack() ? tr("Language") : NULL, DVDbutton, cReplayControl::LastReplayed() ? tr("Resume") : NULL);
Display(); Display();
lastActivity = time(NULL); lastActivity = time(NULL);
SetHasHotkeys(); SetHasHotkeys();
@ -1836,7 +1846,9 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
case osChannels: return AddSubMenu(new cMenuChannels); case osChannels: return AddSubMenu(new cMenuChannels);
case osTimers: return AddSubMenu(new cMenuTimers); case osTimers: return AddSubMenu(new cMenuTimers);
case osRecordings: return AddSubMenu(new cMenuRecordings); case osRecordings: return AddSubMenu(new cMenuRecordings);
#ifdef DVDSUPPORT
case osDVD: return AddSubMenu(new cMenuDVD); case osDVD: return AddSubMenu(new cMenuDVD);
#endif //DVDSUPPORT
case osSetup: return AddSubMenu(new cMenuSetup); case osSetup: return AddSubMenu(new cMenuSetup);
case osCommands: return AddSubMenu(new cMenuCommands); case osCommands: return AddSubMenu(new cMenuCommands);
case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) { case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
@ -1865,6 +1877,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
} }
} }
break; break;
#ifdef DVDSUPPORT
case kYellow: if (!HasSubMenu()) { case kYellow: if (!HasSubMenu()) {
if (cDVD::DiscOk()) { if (cDVD::DiscOk()) {
cDVD::Eject(); cDVD::Eject();
@ -1872,6 +1885,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
} }
} }
break; break;
#endif //DVDSUPPORT
case kBlue: if (!HasSubMenu()) case kBlue: if (!HasSubMenu())
state = osReplay; state = osReplay;
break; break;
@ -2231,8 +2245,10 @@ void cProgressBar::Mark(int x, bool Start, bool Current)
char *cReplayControl::fileName = NULL; char *cReplayControl::fileName = NULL;
char *cReplayControl::title = NULL; char *cReplayControl::title = NULL;
#ifdef DVDSUPPORT
cDVD *cReplayControl::dvd = NULL;//XXX cDVD *cReplayControl::dvd = NULL;//XXX
int cReplayControl::titleid = 0;//XXX int cReplayControl::titleid = 0;//XXX
#endif //DVDSUPPORT
cReplayControl::cReplayControl(void) cReplayControl::cReplayControl(void)
{ {
@ -2244,8 +2260,10 @@ cReplayControl::cReplayControl(void)
marks.Load(fileName); marks.Load(fileName);
dvbApi->StartReplay(fileName); dvbApi->StartReplay(fileName);
} }
#ifdef DVDSUPPORT
else if (dvd) else if (dvd)
dvbApi->StartDVDplay(dvd, titleid);//XXX dvbApi->StartDVDplay(dvd, titleid);//XXX
#endif //DVDSUPPORT
} }
cReplayControl::~cReplayControl() cReplayControl::~cReplayControl()
@ -2262,12 +2280,14 @@ void cReplayControl::SetRecording(const char *FileName, const char *Title)
title = Title ? strdup(Title) : NULL; title = Title ? strdup(Title) : NULL;
} }
#ifdef DVDSUPPORT
void cReplayControl::SetDVD(cDVD *DVD, int Title)//XXX void cReplayControl::SetDVD(cDVD *DVD, int Title)//XXX
{ {
SetRecording(NULL, NULL); SetRecording(NULL, NULL);
dvd = DVD; dvd = DVD;
titleid = Title; titleid = Title;
} }
#endif //DVDSUPPORT
const char *cReplayControl::LastReplayed(void) const char *cReplayControl::LastReplayed(void)
{ {

11
menu.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.h 1.21 2001/08/02 14:53:29 kls Exp $ * $Id: menu.h 1.22 2001/08/05 16:04:58 kls Exp $
*/ */
#ifndef _MENU_H #ifndef _MENU_H
@ -13,6 +13,9 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include "dvbapi.h" #include "dvbapi.h"
#ifdef DVDSUPPORT
#include "dvd.h"
#endif //DVDSUPPORT
#include "osd.h" #include "osd.h"
#include "recording.h" #include "recording.h"
@ -41,6 +44,7 @@ public:
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
}; };
#ifdef DVDSUPPORT
class cMenuDVD : public cOsdMenu { class cMenuDVD : public cOsdMenu {
private: private:
cDVD *dvd;//XXX member really necessary??? cDVD *dvd;//XXX member really necessary???
@ -50,6 +54,7 @@ public:
cMenuDVD(void); cMenuDVD(void);
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
}; };
#endif //DVDSUPPORT
class cMenuRecordings : public cOsdMenu { class cMenuRecordings : public cOsdMenu {
private: private:
@ -100,8 +105,10 @@ private:
void Show(int Seconds = 0); void Show(int Seconds = 0);
void Hide(void); void Hide(void);
static char *fileName; static char *fileName;
#ifdef DVDSUPPORT
static cDVD *dvd;//XXX member really necessary??? static cDVD *dvd;//XXX member really necessary???
static int titleid;//XXX static int titleid;//XXX
#endif //DVDSUPPORT
static char *title; static char *title;
bool ShowProgress(bool Initial); bool ShowProgress(bool Initial);
void MarkToggle(void); void MarkToggle(void);
@ -115,7 +122,9 @@ public:
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
bool Visible(void) { return visible; } bool Visible(void) { return visible; }
static void SetRecording(const char *FileName, const char *Title); static void SetRecording(const char *FileName, const char *Title);
#ifdef DVDSUPPORT
static void SetDVD(cDVD *DVD, int Title);//XXX static void SetDVD(cDVD *DVD, int Title);//XXX
#endif //DVDSUPPORT
static const char *LastReplayed(void); static const char *LastReplayed(void);
static void ClearLastReplayed(const char *FileName); static void ClearLastReplayed(const char *FileName);
}; };

18
vdr.c
View File

@ -22,7 +22,7 @@
* *
* The project's page is at http://www.cadsoft.de/people/kls/vdr * The project's page is at http://www.cadsoft.de/people/kls/vdr
* *
* $Id: vdr.c 1.60 2001/08/05 12:58:12 kls Exp $ * $Id: vdr.c 1.61 2001/08/05 16:15:51 kls Exp $
*/ */
#include <getopt.h> #include <getopt.h>
@ -31,7 +31,9 @@
#include <unistd.h> #include <unistd.h>
#include "config.h" #include "config.h"
#include "dvbapi.h" #include "dvbapi.h"
#ifdef DVDSUPPORT
#include "dvd.h" #include "dvd.h"
#endif //DVDSUPPORT
#include "i18n.h" #include "i18n.h"
#include "interface.h" #include "interface.h"
#include "menu.h" #include "menu.h"
@ -134,7 +136,11 @@ int main(int argc, char *argv[])
"Report bugs to <vdr-bugs@cadsoft.de>\n", "Report bugs to <vdr-bugs@cadsoft.de>\n",
DEFAULTSVDRPPORT, DEFAULTSVDRPPORT,
VideoDirectory, VideoDirectory,
#ifdef DVDSUPPORT
cDVD::DeviceName(), cDVD::DeviceName(),
#else
"no DVD support",
#endif //DVDSUPPORT
DEFAULTWATCHDOG DEFAULTWATCHDOG
); );
return 0; return 0;
@ -162,11 +168,17 @@ int main(int argc, char *argv[])
while (optarg && *optarg && optarg[strlen(optarg) - 1] == '/') while (optarg && *optarg && optarg[strlen(optarg) - 1] == '/')
optarg[strlen(optarg) - 1] = 0; optarg[strlen(optarg) - 1] = 0;
break; break;
case 'V': cDVD::SetDeviceName(optarg); case 'V':
#ifdef DVDSUPPORT
cDVD::SetDeviceName(optarg);
if (!cDVD::DriveExists()) { if (!cDVD::DriveExists()) {
fprintf(stderr, "vdr: DVD drive not found: %s\n", optarg); fprintf(stderr, "vdr: DVD drive not found: %s\n", optarg);
return 2; return 2;
} }
#else
fprintf(stderr, "vdr: DVD support has not been compiled in!");
return 2;
#endif //DVDSUPPORT
break; break;
case 'w': if (isnumber(optarg)) { case 'w': if (isnumber(optarg)) {
int t = atoi(optarg); int t = atoi(optarg);
@ -334,10 +346,12 @@ int main(int argc, char *argv[])
DELETENULL(ReplayControl); DELETENULL(ReplayControl);
ReplayControl = new cReplayControl; ReplayControl = new cReplayControl;
break; break;
#ifdef DVDSUPPORT
case osDVD: DELETENULL(Menu); case osDVD: DELETENULL(Menu);
DELETENULL(ReplayControl); DELETENULL(ReplayControl);
Menu = new cMenuDVD; Menu = new cMenuDVD;
break; break;
#endif //DVDSUPPORT
case osStopReplay: case osStopReplay:
DELETENULL(*Interact); DELETENULL(*Interact);
DELETENULL(ReplayControl); DELETENULL(ReplayControl);