summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2001-08-06 16:19:20 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2001-08-06 16:19:20 +0200
commitc19ad04a214169430f2db45f631c3d49dbcb6af9 (patch)
tree9e3d04c86a5865e2c47d2af4a5ef1f948fd7be34
parent81cf0719fe0375407b304d17b2d6760940e06cfa (diff)
downloadvdr-c19ad04a214169430f2db45f631c3d49dbcb6af9.tar.gz
vdr-c19ad04a214169430f2db45f631c3d49dbcb6af9.tar.bz2
DVD support is now optional
-rw-r--r--INSTALL14
-rw-r--r--Makefile22
-rw-r--r--dvbapi.c11
-rw-r--r--dvbapi.h10
-rw-r--r--dvd.c11
-rw-r--r--dvd.h6
-rw-r--r--menu.c24
-rw-r--r--menu.h11
-rw-r--r--vdr.c18
9 files changed, 101 insertions, 26 deletions
diff --git a/INSTALL b/INSTALL
index d9e4e705..86b4a1ee 100644
--- a/INSTALL
+++ b/INSTALL
@@ -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
Makefile.
-VDR 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.
+If you want to use your DVD drive you will need to compile VDR with
-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
'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
diff --git a/Makefile b/Makefile
index 0d9459cf..89187174 100644
--- a/Makefile
+++ b/Makefile
@@ -4,14 +4,22 @@
# See the main source file 'vdr.c' for copyright information and
# 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
DVDDIR = ../DVD
AC3DIR = ./ac3dec
-INCLUDES = -I$(DVBDIR)/ost/include -I$(DVDDIR)/libdvdread
-LIBDIRS = -L$(DVDDIR)/libdvdread/dvdread/.libs
+INCLUDES = -I$(DVBDIR)/ost/include
+
+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\
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
FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
-DEFINES += -D_LARGEFILE64_SOURCE
-
ifndef REMOTE
REMOTE = KBD
endif
@@ -70,8 +76,8 @@ videodir.o : videodir.c tools.h videodir.h
# The main program:
-vdr: $(OBJS) $(AC3DIR)/libac3.a
- g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread $(LIBDIRS) -ldvdread $(AC3DIR)/libac3.a -o vdr
+vdr: $(OBJS) $(AC3LIB)
+ g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread $(LIBDIRS) $(DVDLIB) $(AC3LIB) -o vdr
# The font files:
@@ -89,7 +95,7 @@ genfontfile: genfontfile.o
# The ac3dec library:
-$(AC3DIR)/libac3.a:
+$(AC3LIB):
make -C $(AC3DIR) all
# Housekeeping:
diff --git a/dvbapi.c b/dvbapi.c
index bd622007..5406a189 100644
--- a/dvbapi.c
+++ b/dvbapi.c
@@ -5,8 +5,9 @@
* how to reach the author.
*
* 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
@@ -27,9 +28,11 @@ extern "C" {
#include <sys/time.h>
#include <unistd.h>
+#ifdef DVDSUPPORT
extern "C" {
#include "ac3dec/ac3.h"
}
+#endif //DVDSUPPORT
#include "config.h"
#include "recording.h"
@@ -1124,6 +1127,7 @@ bool cReplayBuffer::NextFile(uchar FileNumber, int FileOffset)
return replayFile >= 0;
}
+#ifdef DVDSUPPORT
// --- cDVDplayBuffer --------------------------------------------------------
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_INFO, "output thread ended (pid=%d)", getpid());
+ dsyslog(LOG_INFO, "input thread ended (pid=%d)", getpid());
}
#define NO_PICTURE 0
@@ -2004,6 +2008,7 @@ void cDVDplayBuffer::GetIndex(int &Current, int &Total, bool SnapToIFrame)
{
Current = Total = -1;
}
+#endif //DVDSUPPORT
// --- cTransferBuffer -------------------------------------------------------
@@ -3332,6 +3337,7 @@ bool cDvbApi::StartReplay(const char *FileName)
return false;
}
+#ifdef DVDSUPPORT
bool cDvbApi::StartDVDplay(cDVD *dvd, int TitleID)
{
if (Recording()) {
@@ -3359,6 +3365,7 @@ bool cDvbApi::StartDVDplay(cDVD *dvd, int TitleID)
}
return false;
}
+#endif //DVDSUPPORT
void cDvbApi::StopReplay(void)
{
diff --git a/dvbapi.h b/dvbapi.h
index 6e118e76..41193ae7 100644
--- a/dvbapi.h
+++ b/dvbapi.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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
@@ -28,7 +28,9 @@
#include <stdio.h>
#include "dvbosd.h"
+#ifdef DVDSUPPORT
#include "dvd.h"
+#endif //DVDSUPPORT
#include "eit.h"
#include "thread.h"
@@ -48,7 +50,9 @@ class cChannel;
class cRecordBuffer;
class cPlayBuffer;
class cReplayBuffer;
+#ifdef DVDSUPPORT
class cDVDplayBuffer;
+#endif //DVDSUPPORT
class cTransferBuffer;
class cCuttingBuffer;
@@ -64,7 +68,9 @@ public:
class cDvbApi {
friend class cRecordBuffer;
friend class cReplayBuffer;
+#ifdef DVDSUPPORT
friend class cDVDplayBuffer;
+#endif //DVDSUPPORT
friend class cTransferBuffer;
private:
int videoDev;
@@ -243,8 +249,10 @@ public:
// Starts replaying the given file.
// If there is already a replay session active, it will be stopped
// and the new file will be played back.
+#ifdef DVDSUPPORT
bool StartDVDplay(cDVD *dvd, int TitleID);//XXX dvd parameter necessary???
// Starts replaying the given TitleID on the DVD.
+#endif //DVDSUPPORT
void StopReplay(void);
// Stops the current replay session (if any).
void Pause(void);
diff --git a/dvd.c b/dvd.c
index 025361ab..841e998b 100644
--- a/dvd.c
+++ b/dvd.c
@@ -6,11 +6,13 @@
*
* 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
-//XXX //#define DEBUG_BUFFER 1
+#ifdef DVDSUPPORT
+
+//#define DVDSUPPORTDEBUG 1
+//#define DEBUG_BUFFER 1
#include <fcntl.h>
#include <linux/cdrom.h>
@@ -92,7 +94,7 @@ void cDVD::Open(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);
#endif
if (vts_file)
@@ -143,3 +145,4 @@ dvd_file_t *cDVD::openTitle(int Title, dvd_read_domain_t domain)
return title;
}
+#endif //DVDSUPPORT
diff --git a/dvd.h b/dvd.h
index ae9f3067..68fc1d38 100644
--- a/dvd.h
+++ b/dvd.h
@@ -6,12 +6,14 @@
*
* 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
#define __DVD_H
+#ifdef DVDSUPPORT
+
#include <dvdread/dvd_reader.h>
#include <dvdread/ifo_types.h>
#include <dvdread/ifo_read.h>
@@ -46,4 +48,6 @@ public:
static cDVD *getDVD(void);
};
+#endif //DVDSUPPORT
+
#endif //__DVD_H
diff --git a/menu.c b/menu.c
index f7714215..e25b2304 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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"
@@ -1590,6 +1590,7 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
return state;
}
+#ifdef DVDSUPPORT
// --- cMenuDVDItem ----------------------------------------------------------
class cMenuDVDItem : public cOsdItem {
@@ -1661,6 +1662,7 @@ eOSState cMenuDVD::ProcessKey(eKeys Key)
}
return state;
}
+#endif //DVDSUPPORT
// --- cMenuSetup ------------------------------------------------------------
@@ -1794,8 +1796,10 @@ cMenuMain::cMenuMain(bool Replaying)
Add(new cOsdItem(hk(tr("Channels")), osChannels));
Add(new cOsdItem(hk(tr("Timers")), osTimers));
Add(new cOsdItem(hk(tr("Recordings")), osRecordings));
+#ifdef DVDSUPPORT
if (cDVD::DriveExists())
Add(new cOsdItem(hk(tr("DVD")), osDVD));
+#endif //DVDSUPPORT
Add(new cOsdItem(hk(tr("Setup")), osSetup));
if (Commands.Count())
Add(new cOsdItem(hk(tr("Commands")), osCommands));
@@ -1810,7 +1814,13 @@ cMenuMain::cMenuMain(bool Replaying)
}
if (cVideoCutter::Active())
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();
lastActivity = time(NULL);
SetHasHotkeys();
@@ -1836,7 +1846,9 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
case osChannels: return AddSubMenu(new cMenuChannels);
case osTimers: return AddSubMenu(new cMenuTimers);
case osRecordings: return AddSubMenu(new cMenuRecordings);
+#ifdef DVDSUPPORT
case osDVD: return AddSubMenu(new cMenuDVD);
+#endif //DVDSUPPORT
case osSetup: return AddSubMenu(new cMenuSetup);
case osCommands: return AddSubMenu(new cMenuCommands);
case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
@@ -1865,6 +1877,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
}
}
break;
+#ifdef DVDSUPPORT
case kYellow: if (!HasSubMenu()) {
if (cDVD::DiscOk()) {
cDVD::Eject();
@@ -1872,6 +1885,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
}
}
break;
+#endif //DVDSUPPORT
case kBlue: if (!HasSubMenu())
state = osReplay;
break;
@@ -2231,8 +2245,10 @@ void cProgressBar::Mark(int x, bool Start, bool Current)
char *cReplayControl::fileName = NULL;
char *cReplayControl::title = NULL;
+#ifdef DVDSUPPORT
cDVD *cReplayControl::dvd = NULL;//XXX
int cReplayControl::titleid = 0;//XXX
+#endif //DVDSUPPORT
cReplayControl::cReplayControl(void)
{
@@ -2244,8 +2260,10 @@ cReplayControl::cReplayControl(void)
marks.Load(fileName);
dvbApi->StartReplay(fileName);
}
+#ifdef DVDSUPPORT
else if (dvd)
dvbApi->StartDVDplay(dvd, titleid);//XXX
+#endif //DVDSUPPORT
}
cReplayControl::~cReplayControl()
@@ -2262,12 +2280,14 @@ void cReplayControl::SetRecording(const char *FileName, const char *Title)
title = Title ? strdup(Title) : NULL;
}
+#ifdef DVDSUPPORT
void cReplayControl::SetDVD(cDVD *DVD, int Title)//XXX
{
SetRecording(NULL, NULL);
dvd = DVD;
titleid = Title;
}
+#endif //DVDSUPPORT
const char *cReplayControl::LastReplayed(void)
{
diff --git a/menu.h b/menu.h
index adbd41ae..c47e5cbd 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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
@@ -13,6 +13,9 @@
#define _GNU_SOURCE
#include "dvbapi.h"
+#ifdef DVDSUPPORT
+#include "dvd.h"
+#endif //DVDSUPPORT
#include "osd.h"
#include "recording.h"
@@ -41,6 +44,7 @@ public:
virtual eOSState ProcessKey(eKeys Key);
};
+#ifdef DVDSUPPORT
class cMenuDVD : public cOsdMenu {
private:
cDVD *dvd;//XXX member really necessary???
@@ -50,6 +54,7 @@ public:
cMenuDVD(void);
virtual eOSState ProcessKey(eKeys Key);
};
+#endif //DVDSUPPORT
class cMenuRecordings : public cOsdMenu {
private:
@@ -100,8 +105,10 @@ private:
void Show(int Seconds = 0);
void Hide(void);
static char *fileName;
+#ifdef DVDSUPPORT
static cDVD *dvd;//XXX member really necessary???
static int titleid;//XXX
+#endif //DVDSUPPORT
static char *title;
bool ShowProgress(bool Initial);
void MarkToggle(void);
@@ -115,7 +122,9 @@ public:
virtual eOSState ProcessKey(eKeys Key);
bool Visible(void) { return visible; }
static void SetRecording(const char *FileName, const char *Title);
+#ifdef DVDSUPPORT
static void SetDVD(cDVD *DVD, int Title);//XXX
+#endif //DVDSUPPORT
static const char *LastReplayed(void);
static void ClearLastReplayed(const char *FileName);
};
diff --git a/vdr.c b/vdr.c
index 787f9cf8..15a69de0 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* 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>
@@ -31,7 +31,9 @@
#include <unistd.h>
#include "config.h"
#include "dvbapi.h"
+#ifdef DVDSUPPORT
#include "dvd.h"
+#endif //DVDSUPPORT
#include "i18n.h"
#include "interface.h"
#include "menu.h"
@@ -134,7 +136,11 @@ int main(int argc, char *argv[])
"Report bugs to <vdr-bugs@cadsoft.de>\n",
DEFAULTSVDRPPORT,
VideoDirectory,
+#ifdef DVDSUPPORT
cDVD::DeviceName(),
+#else
+ "no DVD support",
+#endif //DVDSUPPORT
DEFAULTWATCHDOG
);
return 0;
@@ -162,11 +168,17 @@ int main(int argc, char *argv[])
while (optarg && *optarg && optarg[strlen(optarg) - 1] == '/')
optarg[strlen(optarg) - 1] = 0;
break;
- case 'V': cDVD::SetDeviceName(optarg);
+ case 'V':
+#ifdef DVDSUPPORT
+ cDVD::SetDeviceName(optarg);
if (!cDVD::DriveExists()) {
fprintf(stderr, "vdr: DVD drive not found: %s\n", optarg);
return 2;
}
+#else
+ fprintf(stderr, "vdr: DVD support has not been compiled in!");
+ return 2;
+#endif //DVDSUPPORT
break;
case 'w': if (isnumber(optarg)) {
int t = atoi(optarg);
@@ -334,10 +346,12 @@ int main(int argc, char *argv[])
DELETENULL(ReplayControl);
ReplayControl = new cReplayControl;
break;
+#ifdef DVDSUPPORT
case osDVD: DELETENULL(Menu);
DELETENULL(ReplayControl);
Menu = new cMenuDVD;
break;
+#endif //DVDSUPPORT
case osStopReplay:
DELETENULL(*Interact);
DELETENULL(ReplayControl);