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 + * based on dvdplayer-0.5 by Matjaz Thaler * - * $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 #include +#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 #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 * - * $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 #include @@ -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 * - * $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 #include #include @@ -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 @@ -31,7 +31,9 @@ #include #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 \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);