Commit 293ed402 authored by Klaus Schmidinger's avatar Klaus Schmidinger

Version 1.3.47

- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Fixed a crash when setting the time transponder in the Setup menu, caused by the
  new 'noneString' in cMenuEditChanItem (reported by Thomas Günther).
- Added NULL checks to some strdup() calls in menuitems.c (suggested by Darren
  Salt).
- Removed the unnecessary 'value' member from cMenuEditItem.
- Fixed the initial setting of the time transponder setup parameter (reported
  by Thomas Günther).
- Fixed unnecessary Set() calls in cMenuEditIntItem::ProcessKey().
- Allowing a tolerance for symbol rate values that are off by one (thanks to
  Richard Lithvall).
- Added VBITeletextDescriptorTag, TeletextDescriptorTag, LocalTimeOffsetDescriptorTag
  and PremiereContentTransmissionDescriptor to 'libsi' (thanks to Marco Schlüßler).
- Using geteuid() to check whether VDR is running as user 'root' (suggested by
  Tobias Grimm).
- Added a missing "Key$" in skincurses.c (reported by Darren Salt).
- Reintroduced the log message "deleting plugin: ..." when shutting down VDR (upon
  request by Ville Skyttä, as in the initial patch from Christoph Haubrich).
- Fixed the vdr.1 man page (a single DVB card can record and do live tv).
- The preferred audio language is now automatically selected when starting replay.
- Updated the Danish OSD texts (thanks to Mogens Elneff).
- The new function cPlugin::Active() can be used by a plugin to indicate that it
  is still busy and the system should not shut down or restart (based on a patch
  from Sascha Volkenandt). See PLUGINS.html for details.
- Fixed setting the 'Delta' parameter when calling the shutdown script with
  no active timer (reported by Helge Lenz).
- In order to make sure that plugins are compiled with the same DVB driver header
  files as VDR itself, the definition of DVBDIR has been removed from the VDR
  Makefile. If you are using a driver version that has its header files at a location
  other than /usr/include/linux/dvb, you can define DVBDIR in the Make.config
  file (see also INSTALL). Note that if you already have a Make.config file of your
  own, you should add the lines

  ifdef DVBDIR
  INCLUDES += -I$(DVBDIR)/include
  endif

  to its end, as in the new Make.config.template.
  Any reference to DVBDIR should be removed from all plugins' Makefiles, like this:

  ------------------------------------------------------------
  --- PLUGINS/src/hello/Makefile  2005/11/11 13:20:14     1.10
  +++ PLUGINS/src/hello/Makefile  2006/04/15 11:58:46     1.11
  @@ -20,7 +20,6 @@

   ### The directory environment:

  -DVBDIR = ../../../../DVB
   VDRDIR = ../../..
   LIBDIR = ../../lib
   TMPDIR = /tmp
  @@ -40,7 +39,7 @@

   ### Includes and Defines (add further entries here):

  -INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
  +INCLUDES += -I$(VDRDIR)/include

   DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
  ------------------------------------------------------------

  Thanks to Marco Schlüßler for pointing out this problem.
- Implemented kNext and kPrev keys (based on a patch from Peter Juszack).
  See MANUAL for details.
- Implemented kChanPrev (from a patch from Darren Salt).
- The "Update channels" parameter in the "Setup/DVB" menu has been extended to
  allow updating only the PIDs (see MANUAL for details). When updating to this
  version of VDR, please verify that the setting is as you want it to be, because
  the values have been shifted.
- The new APIVERSION (see config.h) now allows existing compiled plugins to be
  used with newer versions of VDR, as long as there have been no changes to the
  VDR header files since the last APIVERSION. Existing plugins' Makefiles should
  have all references to VDRVERSION changed to APIVERSION, like this:

  ------------------------------------------------------------
  --- PLUGINS/src/hello/Makefile  2006/04/15 11:58:46     1.11
  +++ PLUGINS/src/hello/Makefile  2006/04/16 09:03:50     1.12
  @@ -28,9 +28,9 @@

   -include $(VDRDIR)/Make.config

  -### The version number of VDR (taken from VDR's "config.h"):
  +### The version number of VDR's plugin API (taken from VDR's "config.h"):

  -VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
  +APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)

   ### The name of the distribution archive:

  @@ -67,7 +67,7 @@

   libvdr-$(PLUGIN).so: $(OBJS)
          $(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
  -       @cp $@ $(LIBDIR)/$@.$(VDRVERSION)
  +       @cp $@ $(LIBDIR)/$@.$(APIVERSION)

   dist: clean
          @-rm -rf $(TMPDIR)/$(ARCHIVE)
  ------------------------------------------------------------
- If a timer is newly created from within the "Schedule" menu, and its event is
  already running or has its start time within the next two minutes, it now goes
  directly into the "Edit timer" menu in order to allow the user to make further
  changes to timer parameters before the actual recording starts (inspired by
  Christian Wieninger's "epgsearch" plugin).
- Added format check to syslog_with_tid().
- Updated the INSTALL file's section about non-VDR files in the video directory
  (since version 1.3.38 disk access is done in a separate thread, so the watchdog
  timer won't hit).
- Changed the behaviour of the "Use small font" setup option to *always* use the small
  font if set to '2' - even if it would have been a fixed font (suggested by Ronny
  Kornexl).
- No longer using characters 0x01 and 0x02 for mapping single quote and slash in
  recording names (thanks to Patrick Fischer for reporting that this was a problem
  with XML). The single quote is not mapped at all, and the slash is interchanged
  with the tilde. Existing recordings will be handled like before, so there is
  no need to actually rename them.
- The cRemote::CallPlugin() function now has a boolean return value that tells
  the caller whether initiating the plugin call was successful (suggested by
  Reinhard Nissl). If it returns false, another plugin call is currently pending
  and the caller should try again later. This also means that the SVDRP command
  PLUG can now return an error code is the call fails.
- The new function cPlugin::MainThreadHook() can be used by plugins to perform
  actions in the context of the main program thread. Use this function with great
  care and only of you absolutely have to! See also PLUGINS.html.
parent 396d0ad3
...@@ -1077,6 +1077,7 @@ Reinhard Nissl <rnissl@gmx.de> ...@@ -1077,6 +1077,7 @@ Reinhard Nissl <rnissl@gmx.de>
for speeding up cRemux::ScanVideoPacket() for speeding up cRemux::ScanVideoPacket()
for implementing cDevice::ForceTransferMode() for implementing cDevice::ForceTransferMode()
for changing the behaviour when hitting the end of a recording in fast forward mode for changing the behaviour when hitting the end of a recording in fast forward mode
for suggesting to give the cRemote::CallPlugin() function a boolean return value
Richard Robson <richard_robson@beeb.net> Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the for reporting freezing replay if a timer starts while in Transfer Mode from the
...@@ -1336,6 +1337,10 @@ Marco Schl ...@@ -1336,6 +1337,10 @@ Marco Schl
for improving OSD area handling in cDvbSpuDecoder for improving OSD area handling in cDvbSpuDecoder
for suggesting to log the description (if present) in case a thread is canceled for suggesting to log the description (if present) in case a thread is canceled
for fixing handling DPID when deciding whether to switch to 'Transfer Mode' for fixing handling DPID when deciding whether to switch to 'Transfer Mode'
for adding VBITeletextDescriptorTag, TeletextDescriptorTag, LocalTimeOffsetDescriptorTag
and PremiereContentTransmissionDescriptor to 'libsi'
for pointing out that plugins might be compiled with different DVB driver header
files than VDR itself
Jürgen Schmitz <j.schmitz@web.de> Jürgen Schmitz <j.schmitz@web.de>
for reporting a bug in displaying the current channel when switching via the SVDRP for reporting a bug in displaying the current channel when switching via the SVDRP
...@@ -1472,6 +1477,9 @@ Darren Salt <linux@youmustbejoking.demon.co.uk> ...@@ -1472,6 +1477,9 @@ Darren Salt <linux@youmustbejoking.demon.co.uk>
it won't follow symbolic links, and to canonicalize the file name it won't follow symbolic links, and to canonicalize the file name
for making all font and image data 'const' for making all font and image data 'const'
for fixing format string handling for fixing format string handling
for suggesting to add NULL checks to some strdup() calls in menuitems.c
for reporting a missing "Key$" in skincurses.c
for a patch that was used to implement kChanPrev
Sean Carlos <seanc@libero.it> Sean Carlos <seanc@libero.it>
for translating OSD texts to the Italian language for translating OSD texts to the Italian language
...@@ -1624,6 +1632,8 @@ Thomas G ...@@ -1624,6 +1632,8 @@ Thomas G
can use it can use it
for fixing converting arbitrarily formatted summary.vdr files for fixing converting arbitrarily formatted summary.vdr files
for making the 'new' indicator in the Recordings menu kept up-to-date for making the 'new' indicator in the Recordings menu kept up-to-date
for reporting a crash when setting the time transponder in the Setup menu
for reporting a bug in the initial setting of the time transponder setup parameter
David Woodhouse <dwmw2@infradead.org> David Woodhouse <dwmw2@infradead.org>
for his help in replacing the get/put_unaligned() macros from asm/unaligned.h with for his help in replacing the get/put_unaligned() macros from asm/unaligned.h with
...@@ -1676,6 +1686,8 @@ Patrick Fischer <patrick_fischer@gmx.de> ...@@ -1676,6 +1686,8 @@ Patrick Fischer <patrick_fischer@gmx.de>
for suggesting that the cTimer constructor should take an optional cChannel for suggesting that the cTimer constructor should take an optional cChannel
for suggesting that any cReceivers still attached to a cDevice when that device for suggesting that any cReceivers still attached to a cDevice when that device
switches to a different transponder shall be automatically detached switches to a different transponder shall be automatically detached
for reporting that characters 0x01 and 0x02 in recording names were a problem
with XML
Ralf Müller <ralf@bj-ig.de> Ralf Müller <ralf@bj-ig.de>
for a patch that was used to implement cUnbufferedFile for a patch that was used to implement cUnbufferedFile
...@@ -1713,6 +1725,8 @@ J ...@@ -1713,6 +1725,8 @@ J
Christian Wieninger <cwieninger@gmx.de> Christian Wieninger <cwieninger@gmx.de>
for suggesting to add cMenuEditStrItem::InEditMode() for suggesting to add cMenuEditStrItem::InEditMode()
for his idea of going directly into the "Edit timer" menu for a timer created
from the "Schedule" menu in case it starts withing the next two minutes
Thiemo Gehrke <tgehrke@reel-multimedia.com> Thiemo Gehrke <tgehrke@reel-multimedia.com>
for suggesting to add a setup option to turn off the automatic timeout of the for suggesting to add a setup option to turn off the automatic timeout of the
...@@ -1772,7 +1786,7 @@ Jaroslaw Swierczynski <swiergot@gmail.com> ...@@ -1772,7 +1786,7 @@ Jaroslaw Swierczynski <swiergot@gmail.com>
Alexander Hans <cleditor@arcor.de> Alexander Hans <cleditor@arcor.de>
for reporting a crash when pressing '0' in the "Schedule" menu on a channel that for reporting a crash when pressing '0' in the "Schedule" menu on a channel that
doesn't have any EPG data doesn't have any EPG data
for giving the DrawBitmap() function a new parameter 'Overlay' that allows a bitmap for giving the DrawBitmap() function a new parameter 'Overlay' that allows a bitmap
to be drawn with a transparent background to be drawn with a transparent background
...@@ -1785,6 +1799,8 @@ Suur Karu <suurkaru@fastmail.fm> ...@@ -1785,6 +1799,8 @@ Suur Karu <suurkaru@fastmail.fm>
Ronny Kornexl <ronny.kornexl@online.de> Ronny Kornexl <ronny.kornexl@online.de>
for reporting a problem with setting "No title" for broken event data for reporting a problem with setting "No title" for broken event data
for suggesting to make the "Use small font" setup option *always* use the small
font if set to '3' - even if it would have been a fixed font
Bárta Vladimír <vladimir.barta@k2atmitec.cz> Bárta Vladimír <vladimir.barta@k2atmitec.cz>
for translating OSD texts to the Czech language for translating OSD texts to the Czech language
...@@ -1815,3 +1831,19 @@ Marius Heidenstecker <marius@heidenstecker.de> ...@@ -1815,3 +1831,19 @@ Marius Heidenstecker <marius@heidenstecker.de>
Jurij Retzlaff <jurij@topofweb.de> Jurij Retzlaff <jurij@topofweb.de>
for fixing learning keys when VDR is already running for fixing learning keys when VDR is already running
Richard Lithvall <richard@lithvall.se>
for adding a tolerance for symbol rate values that are off by one
Tobias Grimm <listaccount@e-tobi.net>
for suggesting to use geteuid() to check whether VDR is running as user 'root'
Peter Dittmann <peter.dittmann@philips.com>
for a patch that was used as a base to implement cPlugin::Active()
Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
script with no active timer
Peter Juszack <vdr@unterbrecher.de>
for a patch that was used as a base to implement kNext and kPrev
...@@ -4499,3 +4499,123 @@ Video Disk Recorder Revision History ...@@ -4499,3 +4499,123 @@ Video Disk Recorder Revision History
--version option, to avoid error messages from plugins (reported by Udo Richter). --version option, to avoid error messages from plugins (reported by Udo Richter).
- Now checking whether there is any text before calling cStatus::MsgOsdTextItem() - Now checking whether there is any text before calling cStatus::MsgOsdTextItem()
(reported by Joachim Wilke). (reported by Joachim Wilke).
2006-04-17: Version 1.3.47
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Fixed a crash when setting the time transponder in the Setup menu, caused by the
new 'noneString' in cMenuEditChanItem (reported by Thomas Günther).
- Added NULL checks to some strdup() calls in menuitems.c (suggested by Darren
Salt).
- Removed the unnecessary 'value' member from cMenuEditItem.
- Fixed the initial setting of the time transponder setup parameter (reported
by Thomas Günther).
- Fixed unnecessary Set() calls in cMenuEditIntItem::ProcessKey().
- Allowing a tolerance for symbol rate values that are off by one (thanks to
Richard Lithvall).
- Added VBITeletextDescriptorTag, TeletextDescriptorTag, LocalTimeOffsetDescriptorTag
and PremiereContentTransmissionDescriptor to 'libsi' (thanks to Marco Schlüßler).
- Using geteuid() to check whether VDR is running as user 'root' (suggested by
Tobias Grimm).
- Added a missing "Key$" in skincurses.c (reported by Darren Salt).
- Reintroduced the log message "deleting plugin: ..." when shutting down VDR (upon
request by Ville Skyttä, as in the initial patch from Christoph Haubrich).
- Fixed the vdr.1 man page (a single DVB card can record and do live tv).
- The preferred audio language is now automatically selected when starting replay.
- Updated the Danish OSD texts (thanks to Mogens Elneff).
- The new function cPlugin::Active() can be used by a plugin to indicate that it
is still busy and the system should not shut down or restart (based on a patch
from Peter Dittmann). See PLUGINS.html for details.
- Fixed setting the 'Delta' parameter when calling the shutdown script with
no active timer (reported by Helge Lenz).
- In order to make sure that plugins are compiled with the same DVB driver header
files as VDR itself, the definition of DVBDIR has been removed from the VDR
Makefile. If you are using a driver version that has its header files at a location
other than /usr/include/linux/dvb, you can define DVBDIR in the Make.config
file (see also INSTALL). Any reference to DVBDIR should be removed from all
plugins' Makefiles, like this:
------------------------------------------------------------
--- PLUGINS/src/hello/Makefile 2005/11/11 13:20:14 1.10
+++ PLUGINS/src/hello/Makefile 2006/04/15 11:58:46 1.11
@@ -20,7 +20,6 @@
### The directory environment:
-DVBDIR = ../../../../DVB
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
@@ -40,7 +39,7 @@
### Includes and Defines (add further entries here):
-INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
+INCLUDES += -I$(VDRDIR)/include
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
------------------------------------------------------------
Thanks to Marco Schlüßler for pointing out this problem.
- Implemented kNext and kPrev keys (based on a patch from Peter Juszack).
See MANUAL for details.
- Implemented kChanPrev (from a patch from Darren Salt).
- The "Update channels" parameter in the "Setup/DVB" menu has been extended to
allow updating only the PIDs (see MANUAL for details). When updating to this
version of VDR, please verify that the setting is as you want it to be, because
the values have been shifted.
- The new APIVERSION (see config.h) now allows existing compiled plugins to be
used with newer versions of VDR, as long as there have been no changes to the
VDR header files since the last APIVERSION. Existing plugins' Makefiles should
have all references to VDRVERSION changed to APIVERSION, like this:
------------------------------------------------------------
--- PLUGINS/src/hello/Makefile 2006/04/15 11:58:46 1.11
+++ PLUGINS/src/hello/Makefile 2006/04/16 09:03:50 1.12
@@ -28,9 +28,9 @@
-include $(VDRDIR)/Make.config
-### The version number of VDR (taken from VDR's "config.h"):
+### The version number of VDR's plugin API (taken from VDR's "config.h"):
-VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
+APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
### The name of the distribution archive:
@@ -67,7 +67,7 @@
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
- @cp $@ $(LIBDIR)/$@.$(VDRVERSION)
+ @cp $@ $(LIBDIR)/$@.$(APIVERSION)
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
------------------------------------------------------------
- If a timer is newly created from within the "Schedule" menu, and its event is
already running or has its start time within the next two minutes, it now goes
directly into the "Edit timer" menu in order to allow the user to make further
changes to timer parameters before the actual recording starts (inspired by
Christian Wieninger's "epgsearch" plugin).
- Added format check to syslog_with_tid().
- Updated the INSTALL file's section about non-VDR files in the video directory
(since version 1.3.38 disk access is done in a separate thread, so the watchdog
timer won't hit).
- Changed the behaviour of the "Use small font" setup option to *always* use the small
font if set to '3' - even if it would have been a fixed font (suggested by Ronny
Kornexl).
- No longer using characters 0x01 and 0x02 for mapping single quote and slash in
recording names (thanks to Patrick Fischer for reporting that this was a problem
with XML). The single quote is not mapped at all, and the slash is interchanged
with the tilde. Existing recordings will be handled like before, so there is
no need to actually rename them.
- The cRemote::CallPlugin() function now has a boolean return value that tells
the caller whether initiating the plugin call was successful (suggested by
Reinhard Nissl). If it returns false, another plugin call is currently pending
and the caller should try again later. This also means that the SVDRP command
PLUG can now return an error code is the call fails.
- The new function cPlugin::MainThreadHook() can be used by plugins to perform
actions in the context of the main program thread. Use this function with great
care and only of you absolutely have to! See also PLUGINS.html.
...@@ -25,17 +25,12 @@ Compiling and running the program: ...@@ -25,17 +25,12 @@ Compiling and running the program:
VDR requires the Linux-DVB driver header files to compile. VDR requires the Linux-DVB driver header files to compile.
As of kernel 2.6 these are part of the official Linux kernel As of kernel 2.6 these are part of the official Linux kernel
distribution, and VDR's Makefile will automatically locate distribution, and so they should be automatically found in
them. If you are using kernel 2.4 or earlier, you should /usr/include/linux/dvb. If your DVB driver header files are
install the files from this package in a directory that is in a different location, you can rename the file Make.config.template
"parallel" to the DVB directory of the driver source (refer to to Make.config and adjust the definition of DVBDIR in that file.
http://linuxtv.org for more information about that driver).
For example, if the DVB driver was extracted into the directory Refer to http://linuxtv.org for more information about the Linux-DVB driver.
/home/kls/vdr/DVB, then this package should be extracted into
/home/kls/vdr/VDR.
If you have the DVB driver source in a different location
you can rename the file Make.config.template to Make.config and
adjust the definition of DVBDIR in that file.
VDR requires the Linux-DVB driver version dated 2003-08-23 or higher VDR requires the Linux-DVB driver version dated 2003-08-23 or higher
to work properly. to work properly.
...@@ -325,7 +320,7 @@ with the name of the basic directory when running 'vdr': ...@@ -325,7 +320,7 @@ with the name of the basic directory when running 'vdr':
vdr -v /video0 vdr -v /video0
Note that you should not copy any non-VDR files into the /videoX directories, Note that you should not copy any non-VDR files into the /videoX directories,
since this might cause the watchdog timer to expire when VDR cleans up those since this might cause a lot of unnecessary disk access when VDR cleans up those
directories and there is a large number of files and/or subdirectories in directories and there is a large number of files and/or subdirectories in
there. there.
......
...@@ -45,8 +45,12 @@ Version 1.3 ...@@ -45,8 +45,12 @@ Version 1.3
FastFwd fast forward FastFwd fast forward
FastRew fast rewind FastRew fast rewind
Next Next/previous channel group (in live tv mode)
Prev or next/previous editing mark (in replay mode)
Channel+ channel up Channel+ channel up
Channel- channel down Channel- channel down
PrevChannel previous channel
Power shutdown Power shutdown
...@@ -158,6 +162,10 @@ Version 1.3 ...@@ -158,6 +162,10 @@ Version 1.3
default margin values will be sufficient, so in case this recording is default margin values will be sufficient, so in case this recording is
really important you may want to add an extra margin ;-). VPS recordings really important you may want to add an extra margin ;-). VPS recordings
will use the exact Start (or VPS) and Stop times as given in the event. will use the exact Start (or VPS) and Stop times as given in the event.
If a timer is newly created from within the "Schedule" menu, and its event is
already running or has its start time within the next two minutes, it goes
directly into the "Edit timer" menu in order to allow the user to make further
changes to timer parameters before the actual recording starts.
The "Blue" button can be pressed to switch to the channel with the selected The "Blue" button can be pressed to switch to the channel with the selected
programme. programme.
...@@ -635,11 +643,11 @@ Version 1.3 ...@@ -635,11 +643,11 @@ Version 1.3
If turned off, Dolby Digital tracks also don't appear in the If turned off, Dolby Digital tracks also don't appear in the
"Audio" menu. "Audio" menu.
Update channels = 4 Controls the automatic channel update function. '0' means Update channels = 5 Controls the automatic channel update function. '0' means
no update, '1' will only update channel names, '2' will no update, '1' will only update channel names, '2' will
update channel names and PIDs, '3' will perform all only update PIDs, '3' will update channel names and PIDs,
updates and also add newly found channels, and '4' will '4' will perform all updates and also add newly found channels,
also add newly found transponders. and '5' will also add newly found transponders.
Audio languages = 0 Some tv stations broadcast various audio tracks in different Audio languages = 0 Some tv stations broadcast various audio tracks in different
languages. This option allows you to define which language(s) languages. This option allows you to define which language(s)
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,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: Make.config.template 1.7 2006/01/13 16:06:11 kls Exp $ # $Id: Make.config.template 1.8 2006/04/15 12:28:03 kls Exp $
### The C compiler and options: ### The C compiler and options:
...@@ -18,7 +18,7 @@ CXXFLAGS = -fPIC -g -O2 -Wall -Woverloaded-virtual ...@@ -18,7 +18,7 @@ CXXFLAGS = -fPIC -g -O2 -Wall -Woverloaded-virtual
### The directory environment: ### The directory environment:
#DVBDIR = ../DVB #DVBDIR = /usr/src/v4l-dvb/linux
MANDIR = /usr/local/man MANDIR = /usr/local/man
BINDIR = /usr/local/bin BINDIR = /usr/local/bin
...@@ -33,3 +33,9 @@ RCU_DEVICE = /dev/ttyS1 ...@@ -33,3 +33,9 @@ RCU_DEVICE = /dev/ttyS1
## Define if you want vdr to not run as root ## Define if you want vdr to not run as root
#VDR_USER = vdr #VDR_USER = vdr
### You don't need to touch the following:
ifdef DVBDIR
INCLUDES += -I$(DVBDIR)/include
endif
...@@ -4,7 +4,7 @@ ...@@ -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: Makefile 1.85 2006/02/05 13:37:11 kls Exp $ # $Id: Makefile 1.87 2006/04/16 09:00:30 kls Exp $
.DELETE_ON_ERROR: .DELETE_ON_ERROR:
...@@ -14,16 +14,6 @@ CFLAGS ?= -O2 ...@@ -14,16 +14,6 @@ CFLAGS ?= -O2
CXX ?= g++ CXX ?= g++
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
LINUX_VERSION := $(shell uname -r | cut -c-3)
LINUX := $(shell uname -r)
DVBDIR := /lib/modules/$(LINUX)/build
ifeq ($(LINUX_VERSION), 2.4)
DVBDIR = ../DVB
endif
ifeq ($(LINUX_VERSION), 2.2)
DVBDIR = ../DVB
endif
LSIDIR = ./libsi LSIDIR = ./libsi
MANDIR = /usr/local/man MANDIR = /usr/local/man
BINDIR = /usr/local/bin BINDIR = /usr/local/bin
...@@ -40,8 +30,6 @@ DOXYFILE = Doxyfile ...@@ -40,8 +30,6 @@ DOXYFILE = Doxyfile
-include Make.config -include Make.config
INCLUDES += -I$(DVBDIR)/include
SILIB = $(LSIDIR)/libsi.a SILIB = $(LSIDIR)/libsi.a
OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbosd.o\ OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbosd.o\
...@@ -91,9 +79,10 @@ DEFINES += -D_GNU_SOURCE ...@@ -91,9 +79,10 @@ DEFINES += -D_GNU_SOURCE
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\" DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\" DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
# The version number of VDR (taken from VDR's "config.h"): # The version numbers of VDR and the plugin API (taken from VDR's "config.h"):
VDRVERSION = $(shell grep 'define VDRVERSION ' config.h | awk '{ print $$3 }' | sed -e 's/"//g') VDRVERSION = $(shell grep 'define VDRVERSION ' config.h | awk '{ print $$3 }' | sed -e 's/"//g')
APIVERSION = $(shell grep 'define APIVERSION ' config.h | awk '{ print $$3 }' | sed -e 's/"//g')
ifdef VFAT ifdef VFAT
# for people who want their video directory on a VFAT partition # for people who want their video directory on a VFAT partition
...@@ -195,7 +184,7 @@ plugins: include-dir ...@@ -195,7 +184,7 @@ plugins: include-dir
clean-plugins: clean-plugins:
@for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do $(MAKE) -C "$(PLUGINDIR)/src/$$i" clean; done @for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do $(MAKE) -C "$(PLUGINDIR)/src/$$i" clean; done
@-rm -f $(PLUGINDIR)/lib/libvdr-*.so.$(VDRVERSION) @-rm -f $(PLUGINDIR)/lib/libvdr-*.so.$(APIVERSION)
# Install the files: # Install the files:
...@@ -227,7 +216,7 @@ install-doc: ...@@ -227,7 +216,7 @@ install-doc:
install-plugins: plugins install-plugins: plugins
@mkdir -p $(PLUGINLIBDIR) @mkdir -p $(PLUGINLIBDIR)
@cp $(PLUGINDIR)/lib/libvdr-*.so.$(VDRVERSION) $(PLUGINLIBDIR) @cp $(PLUGINDIR)/lib/libvdr-*.so.$(APIVERSION) $(PLUGINLIBDIR)
# Source documentation: # Source documentation:
......
...@@ -14,18 +14,18 @@ Copyright &copy; 2006 Klaus Schmidinger<br> ...@@ -14,18 +14,18 @@ Copyright &copy; 2006 Klaus Schmidinger<br>
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a> <a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
</center> </center>
<p> <p>
<!--X1.3.30--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%> <!--X1.3.31--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.3.30 are marked like this.
<!--X1.3.30--></td></tr></table>
<!--X1.3.31--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.3.31 are marked like this. Important modifications introduced in version 1.3.31 are marked like this.
<!--X1.3.31--></td></tr></table> <!--X1.3.31--></td></tr></table>
<!--X1.3.37--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%> <!--X1.3.37--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.3.37 are marked like this. Important modifications introduced in version 1.3.37 are marked like this.
<!--X1.3.37--></td></tr></table> <!--X1.3.37--></td></tr></table>
<!--X1.3.38--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%> <!--X1.3.38--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.3.38 are marked like this. Important modifications introduced in version 1.3.38 are marked like this.
<!--X1.3.38--></td></tr></table> <!--X1.3.38--></td></tr></table>
<!--X1.3.47--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.3.46 are marked like this.
<!--X1.3.47--></td></tr></table>
<p> <p>
VDR provides an easy to use plugin interface that allows additional functionality VDR provides an easy to use plugin interface that allows additional functionality
to be added to the program by implementing a dynamically loadable library file. to be added to the program by implementing a dynamically loadable library file.
...@@ -62,14 +62,16 @@ structures and allows it to hook itself into specific areas to perform special a ...@@ -62,14 +62,16 @@ structures and allows it to hook itself into specific areas to perform special a
<li><a href="#Main menu entry">Main menu entry</a> <li><a href="#Main menu entry">Main menu entry</a>
<li><a href="#User interaction">User interaction</a> <li><a href="#User interaction">User interaction</a>
<li><a href="#Housekeeping">Housekeeping</a> <li><a href="#Housekeeping">Housekeeping</a>
<!--X1.3.47--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<li><a href="#Main thread hook">Main thread hook</a>
<li><a href="#Activity">Activity</a>
<!--X1.3.47--></td></tr></table>
<li><a href="#Setup parameters">Setup parameters</a> <li><a href="#Setup parameters">Setup parameters</a>
<li><a href="#The Setup menu">The Setup menu</a> <li><a href="#The Setup menu">The Setup menu</a>
<li><a href="#Configuration files">Configuration files</a> <li><a href="#Configuration files">Configuration files</a>
<li><a href="#Internationalization">Internationalization</a> <li><a href="#Internationalization">Internationalization</a>
<!--X1.3.30--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<li><a href="#Custom services">Custom services</a> <li><a href="#Custom services">Custom services</a>
<!--X1.3.30--></td></tr></table> <!--X1.3.31--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<!--X1.3.31--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<li><a href="#SVDRP commands">SVDRP commands</a> <li><a href="#SVDRP commands">SVDRP commands</a>
<!--X1.3.31--></td></tr></table> <!--X1.3.31--></td></tr></table>
<li><a href="#Loading plugins into VDR">Loading plugins into VDR</a> <li><a href="#Loading plugins into VDR">Loading plugins into VDR</a>
...@@ -164,11 +166,20 @@ loadable library file for that plugin (we'll get to the details later). ...@@ -164,11 +166,20 @@ loadable library file for that plugin (we'll get to the details later).
The <tt>lib</tt> directory contains the dynamically loadable libraries of all The <tt>lib</tt> directory contains the dynamically loadable libraries of all
available plugins. Note that the names of these files are created by concatenating available plugins. Note that the names of these files are created by concatenating
<p> <p>
<!--X1.3.47--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<table border=2> <table border=2>
<tr><td align=center><b><tt>libvdr-</tt></b></td><td align=center><b><tt>hello</tt></b></td><td align=center><b><tt>.so.</tt></b></td><td align=center><b><tt>1.1.0</tt></b></td></tr> <tr><td align=center><b><tt>libvdr-</tt></b></td><td align=center><b><tt>hello</tt></b></td><td align=center><b><tt>.so.</tt></b></td><td align=center><b><tt>1.1.0</tt></b></td></tr>
<tr><td align=center><font size=-1>VDR plugin<br>library prefix</font></td><td align=center><font size=-1>name of<br>the plugin</font></td><td align=center><font size=-1>shared object<br>indicator</font></td><td align=center><font size=-1>VDR version number<br>this plugin was<br>compiled for</font></td></tr> <tr><td align=center><font size=-1>VDR plugin<br>library prefix</font></td><td align=center><font size=-1>name of<br>the plugin</font></td><td align=center><font size=-1>shared object<br>indicator</font></td><td align=center><font size=-1>API version number<br>this plugin was<br>compiled for</font></td></tr>
</table> </table>
<p> <p>
The <i>API version number</i> refers to the plugin API version number of the VDR
version this plugin was compiled with. Compiled plugins can run with newer versions
of VDR as long as their plugin API version number is still the same as that of
the current VDR version. That way minor fixes to VDR, that don't require changes
to the VDR header files, can be made without requiring all plugins to be
recompiled.
<!--X1.3.47--></td></tr></table>
<p>
The plugin library files can be stored in any directory. If the default organization The plugin library files can be stored in any directory. If the default organization
is not used, the path to the plugin directory has be be given to VDR through the is not used, the path to the plugin directory has be be given to VDR through the
<b><tt>-L</tt></b> option. <b><tt>-L</tt></b> option.
...@@ -609,6 +620,65 @@ interaction is possible. If a specific action takes longer than a few seconds, ...@@ -609,6 +620,65 @@ interaction is possible. If a specific action takes longer than a few seconds,
the plugin should launch a separate thread to do this. the plugin should launch a separate thread to do this.
</b> </b>
<!--X1.3.47--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<a name="Main thread hook"><hr><h2>Main thread hook</h2>
<center><i><b>Pushing in...</b></i></center><p>
Normally a plugin only reacts on user input if directly called through its
<a href="#Main menu entry">main menu entry</a>, or performs some background
activity in a separate thread. However, sometimes a plugin may need to do
something in the context of the main program thread, without being explicitly
called up by the user. In such a case it can implement the function
<p><table><tr><td bgcolor=#F0F0F0><pre>
virtual void MainThreadHook(void);
</pre></td></tr></table><p>
in which it can do this. This function is called for every plugin once during
every cycle of VDR's main program loop, which typically happens once every
second.
<b>Be very careful when using this function, and make sure you return from it
as soon as possible! If you spend too much time in this function, the user
interface performance will become sluggish!</b>
<a name="Activity"><hr><h2>Activity</h2>
<center><i><b>Now is not a good time!</b></i></center><p>
If a plugin is running a background task that should be finished before shutting
down the system, it can implement the function
<p><table><tr><td bgcolor=#F0F0F0><pre>
virtual cString Active(void);
</pre></td></tr></table><p>
which shall return an empty string if it is ok to shut down, and a proper message
if not:
<p><table><tr><td bgcolor=#F0F0F0><pre>
cString cDoSomethingPlugin::Active(void)
{
if (busy)
return tr("Doing something");
return NULL;
}
</pre></td></tr></table><p>
The message should be short and should indicate what is currently going on.
It will be presented to the user as a confirmation message, followed by a
hyphen and a "shut down anyway?" prompt, as in
<p>
<b>Doing something - shut down anyway?</b>
<p>
All plugins will be queried, and the first one that returns a non empty
string will cause the confirmation message to be shown. If the user confirms
the prompt by pressing the "Ok" button, the rest of the plugins will also
be queried, and further prompts may show up. If all prompts have been confirmed,
the shutdown will take place. As soon as one prompt is not confirmed, no
further plugins will be queried and no shutdown will be done.
<!--X1.3.47--></td></tr></table>
<a name="Setup parameters"><hr><h2>Setup parameters</h2> <a name="Setup parameters"><hr><h2>Setup parameters</h2>
<center><i><b>Remember me...</b></i></center><p> <center><i><b>Remember me...</b></i></center><p>
...@@ -864,7 +934,6 @@ Texts are first searched for in the <i>Phrases</i> registered for this plugin (i ...@@ -864,7 +934,6 @@ Texts are first searched for in the <i>Phrases</i> registered for this plugin (i
and then in the global VDR texts. So a plugin can make use of texts defined by the and then in the global VDR texts. So a plugin can make use of texts defined by the
core VDR code. core VDR code.
<!--X1.3.30--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<a name="Custom services"><hr><h2>Custom services</h2> <a name="Custom services"><hr><h2>Custom services</h2>
<center><i><b>What can I do for you?</b></i></center><p> <center><i><b>What can I do for you?</b></i></center><p>
...@@ -933,9 +1002,7 @@ To send a message to all plugins, a plugin can call the function ...@@ -933,9 +1002,7 @@ To send a message to all plugins, a plugin can call the function
<tt>cPluginManager::CallAllServices()</tt>. This function returns <tt>true</tt> if <tt>cPluginManager::CallAllServices()</tt>. This function returns <tt>true</tt> if
any plugin handled the request, or <tt>false</tt> if no plugin handled the request. any plugin handled the request, or <tt>false</tt> if no plugin handled the request.
<!--X1.3.30--></td></tr></table> <!--X1.3.31--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<!--X1.3.31--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<a name="SVDRP commands"><hr><h2>SVDRP commands</h2> <a name="SVDRP commands"><hr><h2>SVDRP commands</h2>
<center><i><b>Infinite Diversity in Infinite Combinations</b></i></center><p> <center><i><b>Infinite Diversity in Infinite Combinations</b></i></center><p>
...@@ -1262,7 +1329,7 @@ public: ...@@ -1262,7 +1329,7 @@ public:
cMyControl(void); cMyControl(void);
virtual ~cMyControl(); virtual ~cMyControl();
virtual void Hide(void); virtual void Hide(void);
<!--X1.3.38--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%> <!--X1.3.38--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
virtual cOsdObject *GetInfo(void); virtual cOsdObject *GetInfo(void);
<!--X1.3.38--></td></tr></table> <!--X1.3.38--></td></tr></table>
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
...@@ -1294,7 +1361,7 @@ A derived <tt>cControl</tt> <b>must</b> implement the <tt>Hide()</tt> function, ...@@ -1294,7 +1361,7 @@ A derived <tt>cControl</tt> <b>must</b> implement the <tt>Hide()</tt> function,
it has to hide itself from the OSD, in case it uses it. <tt>Hide()</tt> may be called at it has to hide itself from the OSD, in case it uses it. <tt>Hide()</tt> may be called at
any time, and it may be called even if the <tt>cControl</tt> is not visible at the moment. any time, and it may be called even if the <tt>cControl</tt> is not visible at the moment.
<p> <p>
<!--X1.3.38--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%> <!--X1.3.38--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
The <tt>GetInfo()</tt> function is called when the user presses the <tt>Info</tt> button, The <tt>GetInfo()</tt> function is called when the user presses the <tt>Info</tt> button,
and shall return a pointer to a <tt>cOsdObject</tt> that contains information and shall return a pointer to a <tt>cOsdObject</tt> that contains information
about the currently played programme. The caller takes ownership of the returned about the currently played programme. The caller takes ownership of the returned
...@@ -1522,7 +1589,7 @@ with the full required resolution. Only if this fails shall it use alternate ...@@ -1522,7 +1589,7 @@ with the full required resolution. Only if this fails shall it use alternate
areas. Drawing areas are always rectangular and may not overlap (but do not need areas. Drawing areas are always rectangular and may not overlap (but do not need
to be adjacent). to be adjacent).
<!--X1.3.37--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%> <!--X1.3.37--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<p> <p>
Directly accessing the OSD is only allowed from the foreground thread, which Directly accessing the OSD is only allowed from the foreground thread, which
restricts this to a <tt>cOsdObject</tt> returned from the plugin's <tt>MainMenuAction()</tt> restricts this to a <tt>cOsdObject</tt> returned from the plugin's <tt>MainMenuAction()</tt>
......
# #
# Makefile for a Video Disk Recorder plugin # Makefile for a Video Disk Recorder plugin
# #
# $Id: Makefile 1.10 2005/11/11 13:20:14 kls Exp $ # $Id: Makefile 1.12 2006/04/16 09:03:50 kls Exp $
# The official name of this plugin. # The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin. # This name will be used in the '-P...' option of VDR to load the plugin.
...@@ -20,7 +20,6 @@ CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual ...@@ -20,7 +20,6 @@ CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
### The directory environment: ### The directory environment:
DVBDIR = ../../../../DVB
VDRDIR = ../../.. VDRDIR = ../../..
LIBDIR = ../../lib LIBDIR = ../../lib
TMPDIR = /tmp TMPDIR = /tmp
...@@ -29,9 +28,9 @@ TMPDIR = /tmp ...@@ -29,9 +28,9 @@ TMPDIR = /tmp
-include $(VDRDIR)/Make.config -include $(VDRDIR)/Make.config
### The version number of VDR (taken from VDR's "config.h"): ### The version number of VDR's plugin API (taken from VDR's "config.h"):
VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g') APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
<