1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-20 08:27:15 +00:00

- Update multimedia/vdr to 1.7.22 .

- Add startup script that the rc.d script invokes to wait for
  /dev/dvb nodes to appear, can be disabled by setting vdr_waitdvb="NO"
  in rc.conf(5).  (This turned out to be necessary in some situations
  because devd starts webcamd only later in the boot process.)
- One more fix for changing OSD language when using UTF-8.
- Update multimedia/vdr-plugin-femon to 1.7.11 .
- Update multimedia/vdr-plugin-ttxtsubs to 0.2.4 .
- Bump PORTREVISION for all other plugins.
- Update www/vdradmin-am to 3.6.9 .
This commit is contained in:
Juergen Lock 2012-01-21 17:32:54 +00:00
parent 922347982c
commit 556296fe66
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=289562
66 changed files with 440 additions and 869 deletions

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-control
PORTVERSION= 0.0.2a45
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://ricomp.de/vdr/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION:S/a45/a/}${DISTVERSIONSUFFIX}

View File

@ -1 +1 @@
lib/vdr/libvdr-control.so.1.7.19
lib/vdr/libvdr-control.so.1.7.22

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-eepg
PORTVERSION= 0.0.6p2011071921
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= multimedia
MASTER_SITES= LOCAL/nox/
DISTNAME= ${PORTNAME}-${PORTVERSION:C/p.*/pre/}-0-g${GITHASH}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-eepg.so.1.7.19
lib/vdr/libvdr-eepg.so.1.7.22
@exec /usr/bin/install -o %%VDR_USER%% -g %%VDR_GROUP%% -d %D/etc/vdr/plugins/eepg
etc/vdr/plugins/eepg/eepg.equiv.IT
@unexec if cmp -s %D/etc/vdr/plugins/eepg/eepg.equiv.sample %D/etc/vdr/plugins/eepg/eepg.equiv; then rm -f %D/etc/vdr/plugins/eepg/eepg.equiv; fi

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-epgsearch
PORTVERSION= 0.9.25b20s20110221
PORTREVISION= 5
PORTREVISION= 6
CATEGORIES= multimedia
MASTER_SITES= http://winni.vdr-developer.org/epgsearch/downloads/beta/:beta \
LOCAL/nox/:snapshot

View File

@ -1,7 +1,7 @@
lib/vdr/libvdr-epgsearch.so.1.7.19
lib/vdr/libvdr-epgsearchonly.so.1.7.19
lib/vdr/libvdr-conflictcheckonly.so.1.7.19
lib/vdr/libvdr-quickepgsearch.so.1.7.19
lib/vdr/libvdr-epgsearch.so.1.7.22
lib/vdr/libvdr-epgsearchonly.so.1.7.22
lib/vdr/libvdr-conflictcheckonly.so.1.7.22
lib/vdr/libvdr-quickepgsearch.so.1.7.22
%%NLS%%share/locale/ca_ES/LC_MESSAGES/vdr-epgsearch.mo
%%NLS%%share/locale/cs_CZ/LC_MESSAGES/vdr-epgsearch.mo
%%NLS%%share/locale/da_DK/LC_MESSAGES/vdr-epgsearch.mo

View File

@ -6,8 +6,7 @@
#
PORTNAME= vdr-plugin-femon
PORTVERSION= 1.7.10
PORTREVISION= 1
PORTVERSION= 1.7.11
CATEGORIES= multimedia
MASTER_SITES= http://www.saunalahti.fi/~rahrenbe/vdr/femon/files/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,2 +1,2 @@
SHA256 (vdr/vdr-femon-1.7.10.tgz) = bca0eb719c04ba2d6fac0925f11fed372d420c6492b1b82ad0ba27b4b847d558
SIZE (vdr/vdr-femon-1.7.10.tgz) = 74051
SHA256 (vdr/vdr-femon-1.7.11.tgz) = 7ec2802a81d37f5914f2b964769c459b7cbcd2c42cd4151a854707fc999b6a96
SIZE (vdr/vdr-femon-1.7.11.tgz) = 75044

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-femon.so.1.7.19
lib/vdr/libvdr-femon.so.1.7.22
%%NLS%%share/locale/de_DE/LC_MESSAGES/vdr-femon.mo
%%NLS%%share/locale/es_ES/LC_MESSAGES/vdr-femon.mo
%%NLS%%share/locale/et_EE/LC_MESSAGES/vdr-femon.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-infosatepg
PORTVERSION= 0.0.11
PORTREVISION= 10
PORTREVISION= 11
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/342/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-infosatepg.so.1.7.19
lib/vdr/libvdr-infosatepg.so.1.7.22
@exec /usr/bin/install -o %%VDR_USER%% -g %%VDR_GROUP%% -d /var/cache/vdr/infosatepg
%%NLS%%share/locale/de_DE/LC_MESSAGES/vdr-infosatepg.mo
%%NLS%%share/locale/it_IT/LC_MESSAGES/vdr-infosatepg.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-iptv
PORTVERSION= 0.4.2
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://www.saunalahti.fi/~rahrenbe/vdr/iptv/files/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-iptv.so.1.7.19
lib/vdr/libvdr-iptv.so.1.7.22
@unexec if cmp -s %D/etc/vdr/plugins/iptv/image.sh.sample %D/etc/vdr/plugins/iptv/image.sh; then rm -f %D/etc/vdr/plugins/iptv/image.sh; fi
etc/vdr/plugins/iptv/image.sh.sample
@exec if [ ! -f %D/etc/vdr/plugins/iptv/image.sh ] ; then cp -p %D/%F %B/image.sh; fi

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-markad
PORTVERSION= 0.1.2
PORTREVISION= 7
PORTREVISION= 8
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/578/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,5 +1,5 @@
bin/markad
lib/vdr/libvdr-markad.so.1.7.19
lib/vdr/libvdr-markad.so.1.7.22
%%NLS%%share/locale/de_DE/LC_MESSAGES/vdr-markad.mo
%%NLS%%share/locale/es_ES/LC_MESSAGES/vdr-markad.mo
%%NLS%%share/locale/fi_FI/LC_MESSAGES/vdr-markad.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-osdpip
PORTVERSION= 0.1.0
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/267/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-osdpip.so.1.7.19
lib/vdr/libvdr-osdpip.so.1.7.22
%%NLS%%share/locale/ca_ES/LC_MESSAGES/vdr-osdpip.mo
%%NLS%%share/locale/cs_CZ/LC_MESSAGES/vdr-osdpip.mo
%%NLS%%share/locale/da_DK/LC_MESSAGES/vdr-osdpip.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-osdteletext
PORTVERSION= 0.9.0
PORTREVISION= 8
PORTREVISION= 9
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/416/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-osdteletext.so.1.7.19
lib/vdr/libvdr-osdteletext.so.1.7.22
@exec /usr/bin/install -o %%VDR_USER%% -g %%VDR_GROUP%% -d /var/cache/vdr/vtx
%%NLS%%share/locale/ca_ES/LC_MESSAGES/vdr-osdteletext.mo
%%NLS%%share/locale/de_DE/LC_MESSAGES/vdr-osdteletext.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-reelchannelscan
PORTVERSION= 0.6.1b1.7.15
PORTREVISION= 6
PORTREVISION= 7
CATEGORIES= multimedia
MASTER_SITES= LOCAL/nox \
http://ppa.launchpad.net/yavdr/stable-vdr/ubuntu/pool/main/v/vdr-plugin-reelchannelscan/

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-reelchannelscan.so.1.7.19
lib/vdr/libvdr-reelchannelscan.so.1.7.22
etc/vdr/plugins/transponders/S0.8W.tpl
etc/vdr/plugins/transponders/S10.0E.tpl
etc/vdr/plugins/transponders/S100.5E.tpl

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-remote
PORTVERSION= 0.4.0
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://www.escape-edv.de/endriss/vdr/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1 +1 @@
lib/vdr/libvdr-remote.so.1.7.19
lib/vdr/libvdr-remote.so.1.7.22

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-skinenigmang
PORTVERSION= 0.1.1
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://andreas.vdr-developer.org/enigmang/download/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-skinenigmang.so.1.7.19
lib/vdr/libvdr-skinenigmang.so.1.7.22
etc/vdr/plugins/skinenigmang/HISTORY
etc/vdr/plugins/skinenigmang/README
etc/vdr/plugins/skinenigmang/flags/deu.xpm

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-sleeptimer
PORTVERSION= 0.8.2
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/652/
EXTRACT_SUFX= .tgz

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-sleeptimer.so.1.7.19
lib/vdr/libvdr-sleeptimer.so.1.7.22
%%NLS%%share/locale/ca_ES/LC_MESSAGES/vdr-sleeptimer.mo
%%NLS%%share/locale/cs_CZ/LC_MESSAGES/vdr-sleeptimer.mo
%%NLS%%share/locale/da_DK/LC_MESSAGES/vdr-sleeptimer.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-softdevice
PORTVERSION= 0.5.0p20100414
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= LOCAL
MASTER_SITE_SUBDIR= nox/

View File

@ -1,7 +1,7 @@
bin/ShmClient
lib/vdr/libvdr-softdevice.so.1.7.19
lib/vdr/libsoftdevice-xv.so.1.7.19
lib/vdr/libsoftdevice-shm.so.1.7.19
lib/vdr/libvdr-softdevice.so.1.7.22
lib/vdr/libsoftdevice-xv.so.1.7.22
lib/vdr/libsoftdevice-shm.so.1.7.22
%%NLS%%share/locale/ca_ES/LC_MESSAGES/vdr-softdevice.mo
%%NLS%%share/locale/cs_CZ/LC_MESSAGES/vdr-softdevice.mo
%%NLS%%share/locale/da_DK/LC_MESSAGES/vdr-softdevice.mo

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-streamdev
PORTVERSION= 0.5.1
PORTREVISION= 5
PORTREVISION= 6
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/497/:release \
LOCAL:snapshot

View File

@ -1,5 +1,5 @@
lib/vdr/libvdr-streamdev-client.so.1.7.19
lib/vdr/libvdr-streamdev-server.so.1.7.19
lib/vdr/libvdr-streamdev-client.so.1.7.22
lib/vdr/libvdr-streamdev-server.so.1.7.22
@unexec if cmp -s %D/etc/vdr/plugins/streamdev-server/externremux.sh.sample %D/etc/vdr/plugins/streamdev-server/externremux.sh; then rm -f %D/etc/vdr/plugins/streamdev-server/externremux.sh; fi
etc/vdr/plugins/streamdev-server/externremux.sh.sample
@exec if [ ! -f %D/etc/vdr/plugins/streamdev-server/externremux.sh ] ; then cp -p %D/%F %B/externremux.sh; fi

View File

@ -6,10 +6,9 @@
#
PORTNAME= vdr-plugin-ttxtsubs
PORTVERSION= 0.2.2
PORTREVISION= 2
PORTVERSION= 0.2.4
CATEGORIES= multimedia
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/309/
MASTER_SITES= http://projects.vdr-developer.org/attachments/download/725/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}
MAINTAINER= nox@FreeBSD.org
@ -17,7 +16,7 @@ COMMENT= Video Disk Recorder - teletext subtitle plugin
PATCH_STRIP= -p1
HAVE_CONFIGURE= yes
PORTDOCS= COPYING README
PORTDOCS= COPYING README HISTORY
MAKE_JOBS_SAFE= yes
WRKSRC= ${WRKDIR}/${PLUGIN}-${DISTVERSION}

View File

@ -1,2 +1,2 @@
SHA256 (vdr/vdr-ttxtsubs-0.2.2.tar.gz) = 2e685d177bf547385de62fa043272976566dd46e7504de4a5352bb36949ec724
SIZE (vdr/vdr-ttxtsubs-0.2.2.tar.gz) = 60833
SHA256 (vdr/vdr-ttxtsubs-0.2.4.tar.gz) = 6d038f9f48ca6bb844934e15ab47d0aca8cbf650d24c5b31930802d0ac57f4ef
SIZE (vdr/vdr-ttxtsubs-0.2.4.tar.gz) = 60378

View File

@ -3,16 +3,16 @@
@@ -101,7 +101,11 @@ all: libvdr-$(PLUGIN).so i18n
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
+ifdef FREEBSD
+ @cp -f $@ $(LIBDIR)/$@.$(APIVERSION)
+else
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
+endif
dist: clean
dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@@ -114,3 +118,6 @@ dist: clean
@@ -114,3 +118,6 @@ dist: $(I18Npo) clean
clean:
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~

View File

@ -1,21 +0,0 @@
--- a/ttxtsubs.c
+++ b/ttxtsubs.c
@@ -119,6 +119,7 @@ class cPluginTtxtsubs : public cPlugin,
public:
cPluginTtxtsubs(void);
virtual ~cPluginTtxtsubs();
+ void Reload(void) { StopTtxt(); StartTtxtPlay(0x000); }
// -- cPlugin
virtual const char *Version(void) { return VERSION; }
@@ -566,7 +567,9 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(c
cMenuSetupTtxtsubs::~cMenuSetupTtxtsubs(void)
{
-
+ if(mTtxtsubs) {
+ mTtxtsubs->Reload();
+ }
if(mDoStore) {
Store();
// Setup.Save(); // Can't get it to write to conf file, menu item disabled.

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-ttxtsubs.so.1.7.19
lib/vdr/libvdr-ttxtsubs.so.1.7.22
%%NLS%%share/locale/fr_FR/LC_MESSAGES/vdr-ttxtsubs.mo
%%NLS%%share/locale/ru_RU/LC_MESSAGES/vdr-ttxtsubs.mo
%%NLS%%share/locale/uk_UA/LC_MESSAGES/vdr-ttxtsubs.mo

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-upnp.so.1.7.19
lib/vdr/libvdr-upnp.so.1.7.22
etc/vdr/plugins/upnp/http/icons/upnpIconLrg.jpeg
etc/vdr/plugins/upnp/http/icons/upnpIconLrg.png
etc/vdr/plugins/upnp/http/icons/upnpIconSm.jpeg

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-vnsiserver
PORTVERSION= 0.0.2s20100808.0952
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= multimedia
MASTER_SITES= http://ppa.launchpad.net/yavdr/testing-vdr/ubuntu/pool/main/v/vdr-plugin-vnsiserver/ \
LOCAL/nox/

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-vnsiserver.so.1.7.19
lib/vdr/libvdr-vnsiserver.so.1.7.22
@unexec if cmp -s %D/etc/vdr/plugins/vnsiserver/allowed_hosts.conf.sample %D/etc/vdr/plugins/vnsiserver/allowed_hosts.conf; then rm -f %D/etc/vdr/plugins/vnsiserver/allowed_hosts.conf; fi
etc/vdr/plugins/vnsiserver/allowed_hosts.conf.sample
@exec if [ ! -f %D/etc/vdr/plugins/vnsiserver/allowed_hosts.conf ] ; then cp -p %D/%F %B/allowed_hosts.conf; fi

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-wirbelscan
PORTVERSION= 0.0.7
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= multimedia
MASTER_SITES= http://wirbel.htpc-forum.de/wirbelscan/
DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-wirbelscan.so.1.7.19
lib/vdr/libvdr-wirbelscan.so.1.7.22
%%NLS%%share/locale/fr_FR/LC_MESSAGES/vdr-wirbelscan.mo
%%NLS%%share/locale/sl_SI/LC_MESSAGES/vdr-wirbelscan.mo
%%NLS%%share/locale/ru_RU/LC_MESSAGES/vdr-wirbelscan.mo

View File

@ -7,6 +7,7 @@
PORTNAME= vdr-plugin-xineliboutput
PORTVERSION= 1.0.90s20111129.1002
PORTREVISION= 1
CATEGORIES= multimedia
MASTER_SITES= SF:release \
LOCAL:snapshot

View File

@ -4,7 +4,7 @@ lib/xine/plugins/1.29/xineplug_inp_xvdr.so
lib/xine/plugins/1.29/post/xineplug_post_autocrop.so
lib/xine/plugins/1.29/post/xineplug_post_swscale.so
lib/xine/plugins/1.29/post/xineplug_post_audiochannel.so
lib/vdr/libvdr-xineliboutput.so.1.7.19
lib/vdr/libvdr-xineliboutput.so.1.7.22
lib/vdr/libxineliboutput-sxfe.so.1.0.90-cvs
@unexec if cmp -s %D/etc/vdr/plugins/xineliboutput/allowed_hosts.conf.sample %D/etc/vdr/plugins/xineliboutput/allowed_hosts.conf; then rm -f %D/etc/vdr/plugins/xineliboutput/allowed_hosts.conf; fi
etc/vdr/plugins/xineliboutput/allowed_hosts.conf.sample

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-xvdr
PORTVERSION= 0.9.5
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= multimedia
MASTER_SITES= LOCAL/nox/
DISTNAME= pipelka-${PORTNAME}-xvdr-${PORTVERSION}-0-g${GITHASH}

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-xvdr.so.1.7.19
lib/vdr/libvdr-xvdr.so.1.7.22
@unexec if cmp -s %D/etc/vdr/plugins/xvdr/allowed_hosts.conf.sample %D/etc/vdr/plugins/xvdr/allowed_hosts.conf; then rm -f %D/etc/vdr/plugins/xvdr/allowed_hosts.conf; fi
etc/vdr/plugins/xvdr/allowed_hosts.conf.sample
@exec if [ ! -f %D/etc/vdr/plugins/xvdr/allowed_hosts.conf ] ; then cp -p %D/%F %B/allowed_hosts.conf; fi

View File

@ -6,8 +6,7 @@
#
PORTNAME= vdr-plugins
PORTVERSION= 1.7.19
PORTREVISION= 3
PORTVERSION= 1.7.22
CATEGORIES= multimedia
MASTER_SITES= # none
DISTFILES= # none

View File

@ -6,8 +6,7 @@
#
PORTNAME= vdr
PORTVERSION= 1.7.19
PORTREVISION= 3
PORTVERSION= 1.7.22
CATEGORIES= multimedia
MASTER_SITES= ftp://ftp.tvdr.de/vdr/Developer/
@ -27,7 +26,7 @@ USE_BZIP2= yes
USE_GMAKE= yes
USE_GNOME+= pkgconfig
USE_GETTEXT= yes
PORTDOCS= COPYING INSTALL MANUAL README
PORTDOCS= COPYING INSTALL MANUAL README HISTORY
MAKE_JOBS_SAFE= yes
MAN1= vdr.1
MAN5= vdr.5
@ -45,6 +44,7 @@ ALL_TARGET= all plugins
VIDEODIR= /video
SUB_LIST+= VIDEODIR=${VIDEODIR}
SUB_FILES+= vdr-waitdvb
USE_RC_SUBR= vdr
VDR_USER= vdr
VDR_GROUP= vdr
@ -74,24 +74,21 @@ ALL_TARGET= vdr plugins
.endif
post-patch:
# avoid a bug found post-release by reverting parts of the 1.7.19 update
# thread:
# http://thread.gmane.org/gmane.linux.vdr/44724/focus=44729
@${PATCH} -d ${WRKSRC} --quiet -p1 -R <${FILESDIR}/vdr-1.7.18-1.7.19-tspacketbug.diff
# clang doesn't know -MG:
@${REINPLACE_CMD} '/^MAKEDEP.*-MM/s/-MG[[:space:]]*$$/# -MG/' \
${WRKSRC}/Makefile ${WRKSRC}/libsi/Makefile \
${WRKSRC}/PLUGINS/src/*/Makefile
.if defined(WITH_TTXPATCH)
@${PATCH} -d ${WRKSRC} --quiet -p1 <${FILESDIR}/vdr-1.7.15-ttxtsubs.patch-1
@${PATCH} -d ${WRKSRC} --quiet -p1 <${FILESDIR}/vdr-1.7.15-ttxtsubs.patch-2
@${PATCH} -d ${WRKSRC} --quiet -p1 <${FILESDIR}/vdr-1.7.19-ttxtsubs.patch-3
@${PATCH} -d ${WRKSRC} --quiet -p1 <${FILESDIR}/vdr-1.7.21-ttxtsubs.patch-1
@${PATCH} -d ${WRKSRC} --quiet -p1 <${FILESDIR}/vdr-1.7.21-ttxtsubs.patch-2
.endif
@${SED} 's|^\(VIDEODIR[[:space:]]*\)[?]*\(=[[:space:]]*\).*|\1\2${VIDEODIR}|' \
${WRKSRC}/Make.config.template >${WRKSRC}/Make.config
@${REINPLACE_CMD} -e 's|%%CONFDIR%%|${CONFDIR}|' ${WRKSRC}/vdr.1
# We don't support this yet:
@${RM} -r ${WRKSRC}/PLUGINS/src/dvbhddevice
# upstream bug:
@${CP} ${WRKSRC}/svdrpsend.pl ${WRKSRC}/svdrpsend
post-install:
.if !defined(WITHOUT_NLS)
@ -109,6 +106,7 @@ post-install:
${INSTALL_DATA} -o ${VDR_USER} -g ${VDR_GROUP} ${WRKSRC}/$$i ${CONFDIR}/$$i; \
fi; \
done
${INSTALL_SCRIPT} ${WRKDIR}/vdr-waitdvb ${PREFIX}/bin
.if !defined(NOPORTDOCS)
${MKDIR} ${DOCSDIR}
(cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR})

View File

@ -1,2 +1,2 @@
SHA256 (vdr/vdr-1.7.19.tar.bz2) = 25481ac1fdc01fbed4e8bde6436346bb919c966aff4da0d67b5cc13318e6039e
SIZE (vdr/vdr-1.7.19.tar.bz2) = 717625
SHA256 (vdr/vdr-1.7.22.tar.bz2) = 73c36058400bc86b8b5aaaf5de0989551e4e6fc052157bebd180bfac4af7f628
SIZE (vdr/vdr-1.7.22.tar.bz2) = 757800

View File

@ -1,10 +0,0 @@
--- PLUGINS/src/dvbsddevice/dvbsddevice.c.orig
+++ PLUGINS/src/dvbsddevice/dvbsddevice.c
@@ -6,6 +6,7 @@
* $Id: dvbsddevice.c 1.3 2010/01/30 10:05:42 kls Exp $
*/
+#include <stdint.h>
#include <vdr/plugin.h>
#include "dvbsdffdevice.h"

View File

@ -1,11 +0,0 @@
--- diseqc.c.orig
+++ diseqc.c
@@ -108,7 +108,7 @@ const char *cDiseqc::Codes(const char *s
errno = 0;
int n = strtol(t, &p, 16);
if (!errno && p != t && 0 <= n && n <= 255) {
- if (parsing) {
+ if (!parsing) {
codes[NumCodes++] = uchar(n);
numCodes = NumCodes;
}

View File

@ -1,33 +0,0 @@
--- config.c.orig
+++ config.c
@@ -399,7 +399,7 @@ cSetup::cSetup(void)
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
CurrentDolby = 0;
- // InitialChannel is initialized by constructor
+ InitialChannel = "";
InitialVolume = -1;
ChannelsWrap = 0;
EmergencyExit = 1;
--- vdr.c.orig
+++ vdr.c
@@ -735,12 +723,14 @@ int main(int argc, char *argv[])
if (!cDevice::WaitForAllDevicesReady(DEVICEREADYTIMEOUT))
dsyslog("not all devices ready after %d seconds", DEVICEREADYTIMEOUT);
- if (isnumber(Setup.InitialChannel)) { // for compatibility with old setup.conf files
- if (cChannel *Channel = Channels.GetByNumber(atoi(Setup.InitialChannel)))
- Setup.InitialChannel = Channel->GetChannelID().ToString();
+ if (*Setup.InitialChannel) {
+ if (isnumber(Setup.InitialChannel)) { // for compatibility with old setup.conf files
+ if (cChannel *Channel = Channels.GetByNumber(atoi(Setup.InitialChannel)))
+ Setup.InitialChannel = Channel->GetChannelID().ToString();
+ }
+ if (cChannel *Channel = Channels.GetByChannelID(tChannelID::FromString(Setup.InitialChannel)))
+ Setup.CurrentChannel = Channel->Number();
}
- if (cChannel *Channel = Channels.GetByChannelID(tChannelID::FromString(Setup.InitialChannel)))
- Setup.CurrentChannel = Channel->Number();
if (Setup.InitialVolume >= 0)
Setup.CurrentVolume = Setup.InitialVolume;
Channels.SwitchTo(Setup.CurrentChannel);

View File

@ -1,14 +1,7 @@
Index: Make.config.template
===================================================================
RCS file: /progs/network/ccvs/vdr/Make.config.template,v
retrieving revision 1.1.1.3
retrieving revision 1.5
diff -u -r1.1.1.3 -r1.5
--- Make.config.template 2010/03/01 09:42:48 1.1.1.3
+++ Make.config.template 2010/03/01 09:58:06 1.5
@@ -8,6 +8,11 @@
#
# $Id: Make.config.template 2.2 2010/02/06 14:50:03 kls Exp $
# $Id: Make.config.template 2.4 2011/12/04 14:41:00 kls Exp $
+OSTYPE ?= $(shell uname -s)
+ifeq ($(OSTYPE),FreeBSD)
@ -18,7 +11,7 @@ diff -u -r1.1.1.3 -r1.5
### The C compiler and options:
CC = gcc
@@ -23,20 +28,35 @@
@@ -23,20 +28,34 @@ endif
### The directory environment:
@ -42,15 +35,14 @@ diff -u -r1.1.1.3 -r1.5
+CONFDIR = $(PREFIX)/etc/vdr
+PLUGINLIBDIR= $(PREFIX)/lib/vdr
+else
+#DVBDIR = /usr/src/v4l-dvb/linux
+LOCDIR = ./locale
CONFDIR = $(VIDEODIR)
+PLUGINLIBDIR= $(PLUGINDIR)/lib
CONFDIR = $(VIDEODIR)
+endif
### The remote control:
LIRC_DEVICE = /dev/lircd
LIRC_DEVICE = /var/run/lirc/lircd
+ifdef FREEBSD
+RCU_DEVICE = /dev/cuau0
+else
@ -59,15 +51,14 @@ diff -u -r1.1.1.3 -r1.5
## Define if you want vdr to not run as root
#VDR_USER = vdr
@@ -45,4 +65,8 @@
@@ -46,3 +65,7 @@ RCU_DEVICE = /dev/ttyS1
ifdef DVBDIR
INCLUDES += -I$(DVBDIR)/include
+endif
endif
+
+ifdef FREEBSD
+INCLUDES += -I/usr/local/include
endif
+endif
Index: Makefile
@@ -8,6 +8,11 @@
@ -93,7 +84,7 @@ Index: Makefile
INCLUDES ?= $(shell pkg-config --cflags freetype2 fontconfig)
PLUGINDIR= ./PLUGINS
@@ -130,7 +139,11 @@ i18n: $(I18Nmsgs)
@@ -151,7 +160,11 @@ i18n: $(I18Nmsgs)
install-i18n:
@mkdir -p $(DESTDIR)$(LOCDIR)
@ -105,19 +96,19 @@ Index: Makefile
# The 'include' directory (for plugins):
@@ -169,7 +182,11 @@ install: install-bin install-conf instal
@@ -190,7 +203,11 @@ install: install-bin install-conf instal
install-bin: vdr
@mkdir -p $(DESTDIR)$(BINDIR)
+ifdef FREEBSD
+ @cp -f vdr svdrpsend.pl $(DESTDIR)$(BINDIR)
+ @cp -f vdr svdrpsend $(DESTDIR)$(BINDIR)
+else
@cp --remove-destination vdr svdrpsend.pl $(DESTDIR)$(BINDIR)
@cp --remove-destination vdr svdrpsend $(DESTDIR)$(BINDIR)
+endif
# Configuration files:
@@ -192,13 +209,18 @@ install-doc:
@@ -213,13 +230,18 @@ install-doc:
install-plugins: plugins
@mkdir -p $(DESTDIR)$(PLUGINLIBDIR)
@ -134,17 +125,10 @@ Index: Makefile
@cp -pLR include/vdr include/libsi $(DESTDIR)$(INCDIR)
+ @cp Make.config Make.global $(DESTDIR)$(INCDIR)/vdr
# Source documentation:
# pkg-config file:
Index: channels.c
===================================================================
RCS file: /progs/network/ccvs/vdr/channels.c,v
retrieving revision 1.1.1.5
retrieving revision 1.6
diff -u -r1.1.1.5 -r1.6
--- channels.c 2010/06/07 09:07:28 1.1.1.5
+++ channels.c 2010/06/07 09:12:57 1.6
@@ -29,7 +29,12 @@
@@ -29,7 +29,12 @@ tChannelID tChannelID::FromString(const
int tid;
int sid;
int rid = 0;
@ -157,9 +141,9 @@ diff -u -r1.1.1.5 -r1.6
if (fields == 4 || fields == 5) {
int source = cSource::FromString(sourcebuf);
free(sourcebuf);
@@ -543,7 +548,17 @@
char *vpidbuf = NULL;
@@ -554,7 +559,18 @@ bool cChannel::Parse(const char *s)
char *apidbuf = NULL;
char *tpidbuf = NULL;
char *caidbuf = NULL;
+#ifdef __FreeBSD__
+ namebuf = MALLOC(char, 256);
@ -167,10 +151,11 @@ diff -u -r1.1.1.5 -r1.6
+ parambuf = MALLOC(char, 256);
+ vpidbuf = MALLOC(char, 256);
+ apidbuf = MALLOC(char, 256);
+ tpidbuf = MALLOC(char, 256);
+ caidbuf = MALLOC(char, 256);
+ int fields = sscanf(s, "%255[^:]:%d :%255[^:]:%9[^:] :%d :%255[^:]:%255[^:]:%d :%255[^:]:%d :%d :%d :%d ", namebuf, &frequency, parambuf, sourcebuf, &srate, vpidbuf, apidbuf, &tpid, caidbuf, &sid, &nid, &tid, &rid);
+ int fields = sscanf(s, "%255[^:]:%d :%255[^:]:%255[^:] :%d :%255[^:]:%255[^:]:%255[^:]:%255[^:]:%d :%d :%d :%d ", namebuf, &frequency, parambuf, sourcebuf, &srate, vpidbuf, apidbuf, tpidbuf, caidbuf, &sid, &nid, &tid, &rid);
+#else
int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid);
int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%a[^:]:%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpidbuf, &caidbuf, &sid, &nid, &tid, &rid);
+#endif
if (fields >= 9) {
if (fields == 9) {
@ -214,21 +199,14 @@ diff -u -r1.1.1.4 -r1.4
#include "i18n.h"
#include "interface.h"
Index: diseqc.c
===================================================================
RCS file: /progs/network/ccvs/vdr/diseqc.c,v
retrieving revision 1.1.1.3
retrieving revision 1.4
diff -u -r1.1.1.3 -r1.4
--- diseqc.c 2010/03/01 09:42:49 1.1.1.3
+++ diseqc.c 2010/03/01 09:58:06 1.4
@@ -50,7 +50,14 @@
}
@@ -114,7 +114,14 @@ bool cDiseqc::Parse(const char *s)
return true;
}
bool result = false;
char *sourcebuf = NULL;
+#ifdef __FreeBSD__
+ sourcebuf = MALLOC(char, 10);
+ if (commands == NULL)
+ commands = MALLOC(char, 256);
+ commands = MALLOC(char, 256);
+ int fields = sscanf(s, "%9[^ ] %d %c %d %255[^\n]", sourcebuf, &slof, &polarization, &lof, commands);
+#else
int fields = sscanf(s, "%a[^ ] %d %c %d %a[^\n]", &sourcebuf, &slof, &polarization, &lof, &commands);
@ -940,7 +918,7 @@ Index: vdr.c
static void SignalHandler(int signum)
{
@@ -388,14 +397,18 @@ int main(int argc, char *argv[])
@@ -400,14 +409,18 @@ int main(int argc, char *argv[])
if (VdrUser && geteuid() == 0) {
StartedAsRoot = true;
if (strcmp(VdrUser, "root")) {
@ -959,7 +937,7 @@ Index: vdr.c
}
}
@@ -539,6 +552,24 @@ int main(int argc, char *argv[])
@@ -556,6 +569,25 @@ int main(int argc, char *argv[])
CodeSet++; // skip the dot
}
}
@ -976,7 +954,8 @@ Index: vdr.c
+ const char *Lang = login_getcapstr(Lc, "lang", NULL, NULL);
+ if (Lang && setlocale(LC_CTYPE, Lang)) {
+ CodeSet = nl_langinfo(CODESET);
+ }
+ setenv("LANG", Lang, 1);
+ }
+ login_close(Lc);
+ }
+ }

View File

@ -6,9 +6,9 @@ Index: Makefile
- $(MAKE) -C $(LSIDIR) all
+ $(MAKE) -C $(LSIDIR) all CC=${CC} CXX=${CXX}
# Internationalization (I18N):
# pkg-config file:
@@ -167,7 +167,7 @@ plugins: include-dir
@@ -186,7 +186,7 @@ plugins: include-dir
noapiv="$$noapiv $$i";\
continue;\
fi;\
@ -17,16 +17,16 @@ Index: Makefile
done;\
if [ -n "$$noapiv" ] ; then echo; echo "*** plugins without APIVERSION:$$noapiv"; echo; fi;\
if [ -n "$$failed" ] ; then echo; echo "*** failed plugins:$$failed"; echo; exit 1; fi
@@ -176,7 +176,7 @@ clean-plugins:
@@ -197,7 +197,7 @@ clean-plugins:
# Install the files:
-install: install-bin install-conf install-doc install-plugins install-i18n install-includes
+install: install-bin install-doc install-plugins install-includes
-install: install-bin install-conf install-doc install-plugins install-i18n install-includes install-pc
+install: install-bin install-conf install-doc install-plugins install-includes install-pc
# VDR binary:
@@ -191,7 +191,6 @@ endif
@@ -212,7 +212,6 @@ endif
# Configuration files:
install-conf:
@ -34,7 +34,7 @@ Index: Makefile
@if [ ! -d $(DESTDIR)$(CONFDIR) ]; then\
mkdir -p $(DESTDIR)$(CONFDIR);\
cp *.conf $(DESTDIR)$(CONFDIR);\
@@ -207,7 +206,7 @@ install-doc:
@@ -228,7 +227,7 @@ install-doc:
# Plugins:

View File

@ -0,0 +1,10 @@
--- config.c.orig
+++ config.c
@@ -72,7 +72,6 @@ cSatCableNumbers::cSatCableNumbers(int S
{
size = Size;
array = MALLOC(int, size);
- memset(array, size * sizeof(int), 0);
FromString(s);
}

View File

@ -1,179 +0,0 @@
--- a/channels.c
+++ b/channels.c
@@ -383,6 +383,26 @@ void cChannel::SetSubtitlingDescriptors(
}
}
+void cChannel::SetTeletextSubtitlePages(tTeletextSubtitlePage pages[], int numberOfPages)
+{
+ int mod = CHANNELMOD_NONE;
+ if (totalTtxtSubtitlePages != (fixedTtxtSubtitlePages + numberOfPages))
+ mod |= CHANNELMOD_PIDS;
+ totalTtxtSubtitlePages = fixedTtxtSubtitlePages;
+ for (int i = 0; (i < numberOfPages) && (totalTtxtSubtitlePages < MAXTXTPAGES); i++) {
+ if (teletextSubtitlePages[totalTtxtSubtitlePages].ttxtMagazine != pages[i].ttxtMagazine ||
+ teletextSubtitlePages[totalTtxtSubtitlePages].ttxtPage != pages[i].ttxtPage ||
+ teletextSubtitlePages[totalTtxtSubtitlePages].ttxtType != pages[i].ttxtType ||
+ strcmp(teletextSubtitlePages[totalTtxtSubtitlePages].ttxtLanguage, pages[i].ttxtLanguage)) {
+ mod |= CHANNELMOD_PIDS;
+ teletextSubtitlePages[totalTtxtSubtitlePages] = pages[i];
+ }
+ totalTtxtSubtitlePages++;
+ }
+ modification |= mod;
+ Channels.SetModified();
+}
+
void cChannel::SetCaIds(const int *CaIds)
{
if (caids[0] && caids[0] <= CA_USER_MAX)
@@ -511,11 +531,24 @@ cString cChannel::ToText(const cChannel
q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs, Channel->dtypes);
}
*q = 0;
+ const int TBufferSize = 5 + 1 + (MAXTXTPAGES * (3 + 1 + MAXLANGCODE1 + 1)) + 10; // '12345;150=deu,151=fin,...', +10: paranoia
+ char tpidbuf[TBufferSize];
+ q = tpidbuf;
+ q += snprintf(q, sizeof(tpidbuf), "%d", Channel->tpid);
+ if (Channel->fixedTtxtSubtitlePages > 0) {
+ q += snprintf(q, sizeof(tpidbuf) - (q - tpidbuf), ";");
+ for (int i = 0; i < Channel->fixedTtxtSubtitlePages; ++i) {
+ tTeletextSubtitlePage page = Channel->teletextSubtitlePages[i];
+ q += snprintf(q, sizeof(tpidbuf) - (q - tpidbuf),
+ i + 1 < Channel->fixedTtxtSubtitlePages ? "%d=%s," : "%d=%s",
+ page.PageNumber(), page.ttxtLanguage);
+ }
+ }
char caidbuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia
q = caidbuf;
q += IntArrayToString(q, Channel->caids, 16);
*q = 0;
- buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->parameters, *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
+ buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%s:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->parameters, *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, tpidbuf, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
}
return buffer;
}
@@ -549,6 +582,7 @@ bool cChannel::Parse(const char *s)
char *parambuf = NULL;
char *vpidbuf = NULL;
char *apidbuf = NULL;
+ char *tpidbuf = NULL;
char *caidbuf = NULL;
#ifdef __FreeBSD__
namebuf = MALLOC(char, 256);
@@ -556,10 +590,11 @@ bool cChannel::Parse(const char *s)
parambuf = MALLOC(char, 256);
vpidbuf = MALLOC(char, 256);
apidbuf = MALLOC(char, 256);
+ tpidbuf = MALLOC(char, 256);
caidbuf = MALLOC(char, 256);
- int fields = sscanf(s, "%255[^:]:%d :%255[^:]:%9[^:] :%d :%255[^:]:%255[^:]:%d :%255[^:]:%d :%d :%d :%d ", namebuf, &frequency, parambuf, sourcebuf, &srate, vpidbuf, apidbuf, &tpid, caidbuf, &sid, &nid, &tid, &rid);
+ int fields = sscanf(s, "%255[^:]:%d :%255[^:]:%9[^:] :%d :%255[^:]:%255[^:]:%255[^:]:%255[^:]:%d :%d :%d :%d ", namebuf, &frequency, parambuf, sourcebuf, &srate, vpidbuf, apidbuf, tpidbuf, caidbuf, &sid, &nid, &tid, &rid);
#else
- int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid);
+ int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%a[^:]:%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpidbuf, &caidbuf, &sid, &nid, &tid, &rid);
#endif
if (fields >= 9) {
if (fields == 9) {
@@ -659,7 +694,37 @@ bool cChannel::Parse(const char *s)
dpids[NumDpids] = 0;
dtypes[NumDpids] = 0;
}
-
+ if (tpidbuf) {
+ char *p;
+ fixedTtxtSubtitlePages = 0;
+ // 2001;150=deu,151=fin
+ if ((p = strchr(tpidbuf, ';')) != NULL) {
+ char *q, *strtok_next;
+ *p++ = 0;
+ while ((q = strtok_r(p, ",", &strtok_next)) != NULL) {
+ if (fixedTtxtSubtitlePages < MAXTXTPAGES) {
+ int page;
+ char *l = strchr(q, '=');
+ if (l)
+ *l++ = 0;
+ if (sscanf(q, "%d", &page) == 1) {
+ teletextSubtitlePages[fixedTtxtSubtitlePages] = tTeletextSubtitlePage(page);
+ if (l)
+ strn0cpy(teletextSubtitlePages[fixedTtxtSubtitlePages].ttxtLanguage, l, MAXLANGCODE1);
+ fixedTtxtSubtitlePages++;
+ }
+ else
+ esyslog("ERROR: invalid Teletext page!"); // no need to set ok to 'false'
+ }
+ else
+ esyslog("ERROR: too many Teletext pages!"); // no need to set ok to 'false'
+ p = NULL;
+ }
+ totalTtxtSubtitlePages = fixedTtxtSubtitlePages;
+ }
+ if (sscanf(tpidbuf, "%d", &tpid) != 1)
+ return false;
+ }
if (caidbuf) {
char *p = caidbuf;
char *q;
@@ -696,6 +761,7 @@ bool cChannel::Parse(const char *s)
free(sourcebuf);
free(vpidbuf);
free(apidbuf);
+ free(tpidbuf);
free(caidbuf);
free(namebuf);
if (!GetChannelID().Valid()) {
--- a/pat.c
+++ b/pat.c
@@ -17,6 +17,7 @@
#include "libsi/section.h"
#include "libsi/descriptor.h"
#include "thread.h"
+#include "vdrttxtsubshooks.h"
#define PMT_SCAN_TIMEOUT 10 // seconds
@@ -347,6 +348,8 @@ void cPatFilter::Process(u_short Pid, u_
char DLangs[MAXDPIDS][MAXLANGCODE2] = { "" };
char SLangs[MAXSPIDS][MAXLANGCODE2] = { "" };
int Tpid = 0;
+ tTeletextSubtitlePage TeletextSubtitlePages[MAXTXTPAGES];
+ int NumTPages = 0;
int NumApids = 0;
int NumDpids = 0;
int NumSpids = 0;
@@ -438,8 +441,21 @@ void cPatFilter::Process(u_short Pid, u_
NumSpids++;
}
break;
- case SI::TeletextDescriptorTag:
+ case SI::TeletextDescriptorTag: {
Tpid = esPid;
+ SI::TeletextDescriptor *sd = (SI::TeletextDescriptor *)d;
+ SI::TeletextDescriptor::Teletext ttxt;
+ for (SI::Loop::Iterator it; sd->teletextLoop.getNext(ttxt, it); ) {
+ bool isSubtitlePage = (ttxt.getTeletextType() == 0x02) || (ttxt.getTeletextType() == 0x05);
+ if ((NumTPages < MAXTXTPAGES) && ttxt.languageCode[0] && isSubtitlePage) {
+ strn0cpy(TeletextSubtitlePages[NumTPages].ttxtLanguage, I18nNormalizeLanguageCode(ttxt.languageCode), MAXLANGCODE1);
+ TeletextSubtitlePages[NumTPages].ttxtPage = ttxt.getTeletextPageNumber();
+ TeletextSubtitlePages[NumTPages].ttxtMagazine = ttxt.getTeletextMagazineNumber();
+ TeletextSubtitlePages[NumTPages].ttxtType = ttxt.getTeletextType();
+ NumTPages++;
+ }
+ }
+ }
break;
case SI::ISO639LanguageDescriptorTag: {
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
@@ -541,6 +557,12 @@ void cPatFilter::Process(u_short Pid, u_
}
if (Setup.UpdateChannels >= 2) {
Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
+ if (NumTPages < MAXTXTPAGES) {
+ int manualPageNumber = cVDRTtxtsubsHookListener::Hook()->ManualPageNumber(Channel);
+ if (manualPageNumber)
+ TeletextSubtitlePages[NumTPages++] = tTeletextSubtitlePage(manualPageNumber);
+ }
+ Channel->SetTeletextSubtitlePages(TeletextSubtitlePages, NumTPages);
if (!cSource::IsType(Channel->Source(), 'I'))
Channel->SetCaIds(CaDescriptors->CaIds());
Channel->SetSubtitlingDescriptors(SubtitlingTypes, CompositionPageIds, AncillaryPageIds);

View File

@ -1,356 +0,0 @@
diff -ruN vdr-1.7.18/recorder.c vdr-1.7.19/recorder.c
--- vdr-1.7.18/recorder.c 2010-12-27 12:35:46.000000000 +0100
+++ vdr-1.7.19/recorder.c 2011-06-12 16:16:45.000000000 +0200
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recorder.c 2.9 2010/12/27 11:35:46 kls Exp $
+ * $Id: recorder.c 2.11 2011/06/12 14:16:45 kls Exp $
*/
#include "recorder.h"
@@ -31,7 +31,7 @@
SpinUpDisk(FileName);
- ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
+ ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, TS_SIZE, true, "Recorder");
ringBuffer->SetTimeouts(0, 100);
int Pid = Channel->Vpid();
@@ -119,6 +119,8 @@
time_t t = time(NULL);
bool InfoWritten = false;
bool FirstIframeSeen = false;
+ int FileNumber = 0;
+ off_t FrameOffset = -1;
while (Running()) {
int r;
uchar *b = ringBuffer->Get(r);
@@ -131,7 +133,7 @@
if (!InfoWritten) {
cRecordingInfo RecordingInfo(recordingName);
if (RecordingInfo.Read()) {
- if (frameDetector->FramesPerSecond() > 0 && !DoubleEqual(RecordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) {
+ if (frameDetector->FramesPerSecond() > 0 && DoubleEqual(RecordingInfo.FramesPerSecond(), DEFAULTFRAMESPERSECOND) && !DoubleEqual(RecordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) {
RecordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond());
RecordingInfo.Write();
Recordings.UpdateByName(recordingName);
@@ -139,12 +141,16 @@
}
InfoWritten = true;
}
+ if (frameDetector->NewPayload()) {
+ FileNumber = fileName->Number();
+ FrameOffset = fileSize;
+ }
if (FirstIframeSeen || frameDetector->IndependentFrame()) {
FirstIframeSeen = true; // start recording with the first I-frame
if (!NextFile())
break;
if (index && frameDetector->NewFrame())
- index->Write(frameDetector->IndependentFrame(), fileName->Number(), fileSize);
+ index->Write(frameDetector->IndependentFrame(), FileNumber, FrameOffset);
if (frameDetector->IndependentFrame()) {
recordFile->Write(patPmtGenerator.GetPat(), TS_SIZE);
fileSize += TS_SIZE;
diff -ruN vdr-1.7.18/recording.c vdr-1.7.19/recording.c
--- vdr-1.7.18/recording.c 2011-04-17 15:53:11.000000000 +0200
+++ vdr-1.7.19/recording.c 2011-06-12 15:04:28.000000000 +0200
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 2.30 2011/04/17 13:53:11 kls Exp $
+ * $Id: recording.c 2.31 2011/06/12 13:04:28 kls Exp $
*/
#include "recording.h"
@@ -1403,11 +1403,12 @@
bool Rewind = false;
cFileName FileName(recordingName, false);
cUnbufferedFile *ReplayFile = FileName.Open();
- cRingBufferLinear Buffer(IFG_BUFFER_SIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE);
+ cRingBufferLinear Buffer(IFG_BUFFER_SIZE, TS_SIZE);
cPatPmtParser PatPmtParser;
cFrameDetector FrameDetector;
cIndexFile IndexFile(recordingName, true);
int BufferChunks = KILOBYTE(1); // no need to read a lot at the beginning when parsing PAT/PMT
+ int FileNumber = 0;
off_t FileSize = 0;
off_t FrameOffset = -1;
Skins.QueueMessage(mtInfo, tr("Regenerating index file"));
@@ -1424,12 +1425,18 @@
if (Data) {
if (FrameDetector.Synced()) {
// Step 3 - generate the index:
- if (TsPid(Data) == PATPID)
+ if (FrameOffset < 0 && TsPid(Data) == PATPID) {
+ FileNumber = FileName.Number();
FrameOffset = FileSize; // the PAT/PMT is at the beginning of an I-frame
+ }
int Processed = FrameDetector.Analyze(Data, Length);
if (Processed > 0) {
+ if (FrameDetector.NewPayload() && FrameOffset < 0) {
+ FileNumber = FileName.Number();
+ FrameOffset = FileSize;
+ }
if (FrameDetector.NewFrame()) {
- IndexFile.Write(FrameDetector.IndependentFrame(), FileName.Number(), FrameOffset >= 0 ? FrameOffset : FileSize);
+ IndexFile.Write(FrameDetector.IndependentFrame(), FileNumber, FrameOffset);
FrameOffset = -1;
}
FileSize += Processed;
diff -ruN vdr-1.7.18/remux.c vdr-1.7.19/remux.c
--- vdr-1.7.18/remux.c 2011-03-20 11:21:14.000000000 +0100
+++ vdr-1.7.19/remux.c 2011-06-12 16:24:09.000000000 +0200
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.c 2.53 2011/03/20 10:21:14 kls Exp $
+ * $Id: remux.c 2.57 2011/06/12 14:24:09 kls Exp $
*/
#include "remux.h"
@@ -12,6 +12,7 @@
#include "libsi/si.h"
#include "libsi/section.h"
#include "libsi/descriptor.h"
+#include "recording.h"
#include "shutdown.h"
#include "tools.h"
@@ -781,7 +782,8 @@
{
SetPid(Pid, Type);
synced = false;
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
+ frameTypeOffset = -1;
numPtsValues = 0;
numFrames = 0;
numIFrames = 0;
@@ -808,7 +810,8 @@
void cFrameDetector::Reset(void)
{
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
+ frameTypeOffset = -1;
payloadUnitOfFrame = 0;
scanning = false;
scanner = EMPTY_SCANNER;
@@ -816,9 +819,8 @@
int cFrameDetector::Analyze(const uchar *Data, int Length)
{
- int SeenPayloadStart = false;
int Processed = 0;
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
while (Length >= TS_SIZE) {
if (Data[0] != TS_SYNC_BYTE) {
int Skipped = 1;
@@ -831,16 +833,13 @@
int Pid = TsPid(Data);
if (Pid == pid) {
if (TsPayloadStart(Data)) {
- SeenPayloadStart = true;
if (synced && Processed)
- return Processed;
- if (Length < MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE)
- return Processed; // need more data, in case the frame type is not stored in the first TS packet
+ return Processed; // flush everything before this new payload
if (framesPerSecond <= 0.0) {
// frame rate unknown, so collect a sequence of PTS values:
if (numPtsValues < MaxPtsValues && numIFrames < 2) { // collect a sequence containing at least two I-frames
const uchar *Pes = Data + TsPayloadOffset(Data);
- if (PesHasPts(Pes)) {
+ if (numIFrames && PesHasPts(Pes)) {
ptsValues[numPtsValues] = PesGetPts(Pes);
// check for rollover:
if (numPtsValues && ptsValues[numPtsValues - 1] > 0xF0000000 && ptsValues[numPtsValues] < 0x10000000) {
@@ -885,8 +884,8 @@
else
framesPerSecond = 60.0 / 1.001;
else {
- framesPerSecond = 25.0;
- dsyslog("unknown frame delta (%d), assuming 25 fps", Delta);
+ framesPerSecond = DEFAULTFRAMESPERSECOND;
+ dsyslog("unknown frame delta (%d), assuming %5.2f fps", Delta, DEFAULTFRAMESPERSECOND);
}
}
else // audio
@@ -900,6 +899,10 @@
if (scanning) {
int PayloadOffset = TsPayloadOffset(Data);
if (TsPayloadStart(Data)) {
+ if (synced && Processed)
+ return Processed; // flush everything before this new payload
+ newPayload = true;
+ scanner = EMPTY_SCANNER;
PayloadOffset += PesPayloadOffset(Data + PayloadOffset);
if (!framesPerPayloadUnit)
framesPerPayloadUnit = framesInPayloadUnit;
@@ -907,17 +910,30 @@
dbgframes("/");
}
for (int i = PayloadOffset; scanning && i < TS_SIZE; i++) {
- scanner <<= 8;
- scanner |= Data[i];
+ if (frameTypeOffset < 0) {
+ scanner <<= 8;
+ scanner |= Data[i];
+ }
+ else
+ frameTypeOffset += PayloadOffset;
switch (type) {
case 0x01: // MPEG 1 video
case 0x02: // MPEG 2 video
if (scanner == 0x00000100) { // Picture Start Code
+ if (frameTypeOffset < 0) {
+ frameTypeOffset = i + 2;
+ if (frameTypeOffset >= TS_SIZE) { // the byte to check is in the next TS packet
+ frameTypeOffset -= TS_SIZE;
+ if (!synced)
+ dbgframes("%d>", frameTypeOffset);
+ break;
+ }
+ }
scanner = EMPTY_SCANNER;
- if (synced && !SeenPayloadStart && Processed)
- return Processed; // flush everything before this new frame
newFrame = true;
- independentFrame = ((Data[i + 2] >> 3) & 0x07) == 1; // I-Frame
+ uchar FrameType = (Data[frameTypeOffset] >> 3) & 0x07;
+ frameTypeOffset = -1;
+ independentFrame = FrameType == 1; // I-Frame
if (synced) {
if (framesPerPayloadUnit <= 1)
scanning = false;
@@ -928,7 +944,7 @@
numIFrames++;
if (numIFrames == 1)
numFrames++;
- dbgframes("%d ", (Data[i + 2] >> 3) & 0x07);
+ dbgframes("%u ", FrameType);
}
if (synced)
return Processed + TS_SIZE; // flag this new frame
@@ -936,11 +952,20 @@
break;
case 0x1B: // MPEG 4 video
if (scanner == 0x00000109) { // Access Unit Delimiter
+ if (frameTypeOffset < 0) {
+ frameTypeOffset = i + 1;
+ if (frameTypeOffset >= TS_SIZE) { // the byte to check is in the next TS packet
+ frameTypeOffset -= TS_SIZE;
+ if (!synced)
+ dbgframes("%d>", frameTypeOffset);
+ break;
+ }
+ }
scanner = EMPTY_SCANNER;
- if (synced && !SeenPayloadStart && Processed)
- return Processed; // flush everything before this new frame
newFrame = true;
- independentFrame = Data[i + 1] == 0x10;
+ uchar FrameType = Data[frameTypeOffset];
+ frameTypeOffset = -1;
+ independentFrame = FrameType == 0x10;
if (synced) {
if (framesPerPayloadUnit < 0) {
payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;
@@ -958,7 +983,7 @@
numIFrames++;
if (numIFrames == 1)
numFrames++;
- dbgframes("%02X ", Data[i + 1]);
+ dbgframes("%02X ", FrameType);
}
if (synced)
return Processed + TS_SIZE; // flag this new frame
diff -ruN vdr-1.7.18/remux.h vdr-1.7.19/remux.h
--- vdr-1.7.18/remux.h 2011-03-19 17:52:46.000000000 +0100
+++ vdr-1.7.19/remux.h 2011-06-12 14:49:17.000000000 +0200
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.h 2.28 2011/03/19 16:52:46 kls Exp $
+ * $Id: remux.h 2.30 2011/06/12 12:49:17 kls Exp $
*/
#ifndef __REMUX_H
@@ -84,15 +84,18 @@
inline int TsPayloadOffset(const uchar *p)
{
- int o = (p[3] & TS_ADAPT_FIELD_EXISTS) ? p[4] + 5 : 4;
+ int o = TsHasAdaptationField(p) ? p[4] + 5 : 4;
return o <= TS_SIZE ? o : TS_SIZE;
}
inline int TsGetPayload(const uchar **p)
{
- int o = TsPayloadOffset(*p);
- *p += o;
- return TS_SIZE - o;
+ if (TsHasPayload(*p)) {
+ int o = TsPayloadOffset(*p);
+ *p += o;
+ return TS_SIZE - o;
+ }
+ return 0;
}
inline int TsContinuityCounter(const uchar *p)
@@ -294,7 +297,7 @@
~cTsToPes();
void PutTs(const uchar *Data, int Length);
///< Puts the payload data of the single TS packet at Data into the converter.
- ///< Length is always 188.
+ ///< Length is always TS_SIZE.
///< If the given TS packet starts a new PES payload packet, the converter
///< will be automatically reset. Any packets before the first one that starts
///< a new PES payload packet will be ignored.
@@ -333,16 +336,16 @@
// Frame detector:
-#define MIN_TS_PACKETS_FOR_FRAME_DETECTOR 2
-
class cFrameDetector {
private:
enum { MaxPtsValues = 150 };
int pid;
int type;
bool synced;
+ bool newPayload;
bool newFrame;
bool independentFrame;
+ int frameTypeOffset;
uint32_t ptsValues[MaxPtsValues]; // 32 bit is enough - we only need the delta
int numPtsValues;
int numFrames;
@@ -368,12 +371,17 @@
///< the frame detector for actual work.
int Analyze(const uchar *Data, int Length);
///< Analyzes the TS packets pointed to by Data. Length is the number of
- ///< bytes Data points to, and must be a multiple of 188.
+ ///< bytes Data points to, and must be a multiple of TS_SIZE.
///< Returns the number of bytes that have been analyzed.
///< If the return value is 0, the data was not sufficient for analyzing and
///< Analyze() needs to be called again with more actual data.
bool Synced(void) { return synced; }
///< Returns true if the frame detector has synced on the data stream.
+ bool NewPayload(void) { return newPayload; }
+ ///< Returns true if the data given to the last call to Analyze() started a
+ ///< new payload. The caller should remember the current file offset in
+ ///< order to be able to generate an index entry later, when NewFrame()
+ ///< returns true.
bool NewFrame(void) { return newFrame; }
///< Returns true if the data given to the last call to Analyze() started a
///< new frame.

View File

@ -1,21 +0,0 @@
--- a/ci.c
+++ b/ci.c
@@ -1917,6 +1917,8 @@ void cCamSlot::AddChannel(const cChannel
AddPid(Channel->Sid(), *Dpid, STREAM_TYPE_PRIVATE);
for (const int *Spid = Channel->Spids(); *Spid; Spid++)
AddPid(Channel->Sid(), *Spid, STREAM_TYPE_PRIVATE);
+ if (Channel->Tpid() && Setup.SupportTeletext)
+ AddPid(Channel->Sid(), Channel->Tpid(), STREAM_TYPE_PRIVATE);
}
}
@@ -1940,6 +1942,9 @@ bool cCamSlot::CanDecrypt(const cChannel
CaPmt.AddPid(*Dpid, STREAM_TYPE_PRIVATE);
for (const int *Spid = Channel->Spids(); *Spid; Spid++)
CaPmt.AddPid(*Spid, STREAM_TYPE_PRIVATE);
+ if (Channel->Tpid() && Setup.SupportTeletext) {
+ CaPmt.AddPid(Channel->Tpid(), STREAM_TYPE_PRIVATE);
+ }
cas->SendPMT(&CaPmt);
cTimeMs Timeout(QUERY_REPLY_TIMEOUT);
do {

View File

@ -1,5 +1,5 @@
diff --git a/MANUAL b/MANUAL
index 7fae53b..6b0ae57 100644
index 54e166e..57b687f 100644
--- a/MANUAL
+++ b/MANUAL
@@ -730,6 +730,9 @@ Version 1.6
@ -13,10 +13,10 @@ index 7fae53b..6b0ae57 100644
SLOF = 11700 The switching frequency (in MHz) between low and
diff --git a/Makefile b/Makefile
index d788484..f854b2e 100644
index 18d7eb9..3da4382 100644
--- a/Makefile
+++ b/Makefile
@@ -44,6 +44,8 @@ OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o d
@@ -45,6 +45,8 @@ OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o d
skinclassic.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
timers.o tools.o transfer.o vdr.o videodir.o
@ -25,14 +25,97 @@ index d788484..f854b2e 100644
ifndef NO_KBD
DEFINES += -DREMOTE_KBD
endif
diff --git a/channels.c b/channels.c
index b9204f2..44d4be2 100644
--- a/channels.c
+++ b/channels.c
@@ -378,6 +378,26 @@ void cChannel::SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *Compos
}
}
+void cChannel::SetTeletextSubtitlePages(tTeletextSubtitlePage pages[], int numberOfPages)
+{
+ int mod = CHANNELMOD_NONE;
+ if (totalTtxtSubtitlePages != (fixedTtxtSubtitlePages + numberOfPages))
+ mod |= CHANNELMOD_PIDS;
+ totalTtxtSubtitlePages = fixedTtxtSubtitlePages;
+ for (int i = 0; (i < numberOfPages) && (totalTtxtSubtitlePages < MAXTXTPAGES); i++) {
+ if (teletextSubtitlePages[totalTtxtSubtitlePages].ttxtMagazine != pages[i].ttxtMagazine ||
+ teletextSubtitlePages[totalTtxtSubtitlePages].ttxtPage != pages[i].ttxtPage ||
+ teletextSubtitlePages[totalTtxtSubtitlePages].ttxtType != pages[i].ttxtType ||
+ strcmp(teletextSubtitlePages[totalTtxtSubtitlePages].ttxtLanguage, pages[i].ttxtLanguage)) {
+ mod |= CHANNELMOD_PIDS;
+ teletextSubtitlePages[totalTtxtSubtitlePages] = pages[i];
+ }
+ totalTtxtSubtitlePages++;
+ }
+ modification |= mod;
+ Channels.SetModified();
+}
+
void cChannel::SetCaIds(const int *CaIds)
{
if (caids[0] && caids[0] <= CA_USER_MAX)
@@ -506,10 +526,17 @@ cString cChannel::ToText(const cChannel *Channel)
q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs, Channel->dtypes);
}
*q = 0;
- const int TBufferSize = MAXSPIDS * (5 + 1 + MAXLANGCODE2) + 10; // 5 digits plus delimiting ',' or ';' plus optional '=cod+cod', +10: paranoia and tpid
+ const int TBufferSize = (MAXTXTPAGES * MAXSPIDS) * (5 + 1 + MAXLANGCODE2) + 10; // 5 digits plus delimiting ',' or ';' plus optional '=cod+cod', +10: paranoia and tpid
char tpidbuf[TBufferSize];
q = tpidbuf;
q += snprintf(q, sizeof(tpidbuf), "%d", Channel->tpid);
+ if (Channel->fixedTtxtSubtitlePages > 0) {
+ *q++ = '+';
+ for (int i = 0; i < Channel->fixedTtxtSubtitlePages; ++i) {
+ tTeletextSubtitlePage page = Channel->teletextSubtitlePages[i];
+ q += snprintf(q, sizeof(tpidbuf) - (q - tpidbuf), "%d=%s", page.PageNumber(), page.ttxtLanguage);
+ }
+ }
if (Channel->spids[0]) {
*q++ = ';';
q += IntArrayToString(q, Channel->spids, 10, Channel->slangs);
@@ -678,6 +705,32 @@ bool cChannel::Parse(const char *s)
}
spids[NumSpids] = 0;
}
+ fixedTtxtSubtitlePages = 0;
+ if ((p = strchr(tpidbuf, '+')) != NULL) {
+ *p++ = 0;
+ char *q;
+ char *strtok_next;
+ while ((q = strtok_r(p, ",", &strtok_next)) != NULL) {
+ if (fixedTtxtSubtitlePages < MAXTXTPAGES) {
+ int page;
+ char *l = strchr(q, '=');
+ if (l)
+ *l++ = 0;
+ if (sscanf(q, "%d", &page) == 1) {
+ teletextSubtitlePages[fixedTtxtSubtitlePages] = tTeletextSubtitlePage(page);
+ if (l)
+ strn0cpy(teletextSubtitlePages[fixedTtxtSubtitlePages].ttxtLanguage, l, MAXLANGCODE2);
+ fixedTtxtSubtitlePages++;
+ }
+ else
+ esyslog("ERROR: invalid Teletext page!"); // no need to set ok to 'false'
+ }
+ else
+ esyslog("ERROR: too many Teletext pages!"); // no need to set ok to 'false'
+ p = NULL;
+ }
+ totalTtxtSubtitlePages = fixedTtxtSubtitlePages;
+ }
if (sscanf(tpidbuf, "%d", &tpid) != 1)
return false;
if (caidbuf) {
diff --git a/channels.h b/channels.h
index b867297..63c8b9c 100644
index 51f9830..6e7367f 100644
--- a/channels.h
+++ b/channels.h
@@ -35,6 +35,7 @@
#define MAXDPIDS 16 // dolby (AC3 + DTS)
#define MAXSPIDS 32 // subtitles
#define MAXCAIDS 8 // conditional access
#define MAXCAIDS 12 // conditional access
+#define MAXTXTPAGES 8 // teletext pages
#define MAXLANGCODE1 4 // a 3 letter language code, zero terminated
@ -81,8 +164,31 @@ index b867297..63c8b9c 100644
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
void SetLinkChannels(cLinkChannels *LinkChannels);
diff --git a/ci.c b/ci.c
index 59d62ef..b024f67 100644
--- a/ci.c
+++ b/ci.c
@@ -1913,6 +1913,8 @@ void cCamSlot::AddChannel(const cChannel *Channel)
AddPid(Channel->Sid(), *Dpid, STREAM_TYPE_PRIVATE);
for (const int *Spid = Channel->Spids(); *Spid; Spid++)
AddPid(Channel->Sid(), *Spid, STREAM_TYPE_PRIVATE);
+ if (Channel->Tpid() && Setup.SupportTeletext)
+ AddPid(Channel->Sid(), Channel->Tpid(), STREAM_TYPE_PRIVATE);
}
}
@@ -1936,6 +1938,9 @@ bool cCamSlot::CanDecrypt(const cChannel *Channel)
CaPmt.AddPid(*Dpid, STREAM_TYPE_PRIVATE);
for (const int *Spid = Channel->Spids(); *Spid; Spid++)
CaPmt.AddPid(*Spid, STREAM_TYPE_PRIVATE);
+ if (Channel->Tpid() && Setup.SupportTeletext) {
+ CaPmt.AddPid(Channel->Tpid(), STREAM_TYPE_PRIVATE);
+ }
cas->SendPMT(&CaPmt);
cTimeMs Timeout(QUERY_REPLY_TIMEOUT);
do {
diff --git a/config.c b/config.c
index 73b11b1..f2eebe6 100644
index 73bb00d..982bd78 100644
--- a/config.c
+++ b/config.c
@@ -333,6 +333,7 @@ cSetup::cSetup(void)
@ -93,7 +199,7 @@ index 73b11b1..f2eebe6 100644
SubtitleLanguages[0] = -1;
SubtitleOffset = 0;
SubtitleFgTransparency = 0;
@@ -524,6 +525,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
@@ -525,6 +526,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "MarginStop")) MarginStop = atoi(Value);
else if (!strcasecmp(Name, "AudioLanguages")) return ParseLanguages(Value, AudioLanguages);
else if (!strcasecmp(Name, "DisplaySubtitles")) DisplaySubtitles = atoi(Value);
@ -101,7 +207,7 @@ index 73b11b1..f2eebe6 100644
else if (!strcasecmp(Name, "SubtitleLanguages")) return ParseLanguages(Value, SubtitleLanguages);
else if (!strcasecmp(Name, "SubtitleOffset")) SubtitleOffset = atoi(Value);
else if (!strcasecmp(Name, "SubtitleFgTransparency")) SubtitleFgTransparency = atoi(Value);
@@ -620,6 +622,7 @@ bool cSetup::Save(void)
@@ -621,6 +623,7 @@ bool cSetup::Save(void)
Store("MarginStop", MarginStop);
StoreLanguages("AudioLanguages", AudioLanguages);
Store("DisplaySubtitles", DisplaySubtitles);
@ -110,7 +216,7 @@ index 73b11b1..f2eebe6 100644
Store("SubtitleOffset", SubtitleOffset);
Store("SubtitleFgTransparency", SubtitleFgTransparency);
diff --git a/config.h b/config.h
index 7041eb7..289d4b6 100644
index c51e3df..e46b4bd 100644
--- a/config.h
+++ b/config.h
@@ -235,6 +235,7 @@ public:
@ -122,7 +228,7 @@ index 7041eb7..289d4b6 100644
int SubtitleOffset;
int SubtitleFgTransparency, SubtitleBgTransparency;
diff --git a/device.c b/device.c
index 681049b..4dbd920 100644
index ba098d8..84bdd30 100644
--- a/device.c
+++ b/device.c
@@ -18,6 +18,7 @@
@ -133,7 +239,7 @@ index 681049b..4dbd920 100644
// --- cLiveSubtitle ---------------------------------------------------------
@@ -1223,6 +1224,13 @@ int cDevice::PlayPesPacket(const uchar *Data, int Length, bool VideoOnly)
@@ -1250,6 +1251,13 @@ int cDevice::PlayPesPacket(const uchar *Data, int Length, bool VideoOnly)
}
break;
case 0xBD: { // private stream 1
@ -147,7 +253,7 @@ index 681049b..4dbd920 100644
int PayloadOffset = Data[8] + 9;
// Compatibility mode for old subtitles plugin:
@@ -1382,6 +1390,7 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
@@ -1409,6 +1417,7 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
tsToPesVideo.Reset();
tsToPesAudio.Reset();
tsToPesSubtitle.Reset();
@ -155,7 +261,7 @@ index 681049b..4dbd920 100644
}
else if (Length < TS_SIZE) {
esyslog("ERROR: skipped %d bytes of TS fragment", Length);
@@ -1427,6 +1436,17 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
@@ -1454,6 +1463,17 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
if (!VideoOnly || HasIBPTrickSpeed())
PlayTsSubtitle(Data, TS_SIZE);
}
@ -174,10 +280,10 @@ index 681049b..4dbd920 100644
}
else if (Pid == patPmtParser.Ppid()) {
diff --git a/device.h b/device.h
index cb3bc2c..f531e70 100644
index fd587a8..078f080 100644
--- a/device.h
+++ b/device.h
@@ -522,6 +522,7 @@ private:
@@ -538,6 +538,7 @@ private:
cTsToPes tsToPesVideo;
cTsToPes tsToPesAudio;
cTsToPes tsToPesSubtitle;
@ -186,10 +292,10 @@ index cb3bc2c..f531e70 100644
protected:
const cPatPmtParser *PatPmtParser(void) const { return &patPmtParser; }
diff --git a/menu.c b/menu.c
index 19cfabb..d2deeb3 100644
index ef2bb46..3548ccd 100644
--- a/menu.c
+++ b/menu.c
@@ -2790,6 +2790,7 @@ void cMenuSetupDVB::Setup(void)
@@ -2798,6 +2798,7 @@ void cMenuSetupDVB::Setup(void)
Add(new cMenuEditIntItem( tr("Setup.DVB$Subtitle foreground transparency"), &data.SubtitleFgTransparency, 0, 9));
Add(new cMenuEditIntItem( tr("Setup.DVB$Subtitle background transparency"), &data.SubtitleBgTransparency, 0, 10));
}
@ -198,10 +304,10 @@ index 19cfabb..d2deeb3 100644
SetCurrent(Get(current));
Display();
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 247113b..aba1ae3 100644
index b104fea..1c09d79 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -943,6 +943,9 @@ msgstr "Transpar
@@ -950,6 +950,9 @@ msgstr "Transpar
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparència fons subtítols"
@ -212,10 +318,10 @@ index 247113b..aba1ae3 100644
msgstr "Configuració de l'LNB"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index f6313ba..aec6f4e 100644
index bcafac7..370609f 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -942,6 +942,9 @@ msgstr "Průhlednost písma titulků"
@@ -949,6 +949,9 @@ msgstr "Průhlednost písma titulků"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Průhlednost pozadí titulků"
@ -226,10 +332,10 @@ index f6313ba..aec6f4e 100644
msgstr "LNB"
diff --git a/po/da_DK.po b/po/da_DK.po
index 40cdebd..192173d 100644
index 81b11eb..5daca8d 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -940,6 +940,9 @@ msgstr "Undertekst forgrundsgennemsigtighed"
@@ -947,6 +947,9 @@ msgstr "Undertekst forgrundsgennemsigtighed"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Undertekst baggrundsgennemsigtighed"
@ -240,10 +346,10 @@ index 40cdebd..192173d 100644
msgstr "LNB"
diff --git a/po/de_DE.po b/po/de_DE.po
index 4d4f3df..a3227a0 100644
index 6d5b822..0a00a5a 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -940,6 +940,9 @@ msgstr "Untertitel-Transparenz Vordergrund"
@@ -947,6 +947,9 @@ msgstr "Untertitel-Transparenz Vordergrund"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Untertitel-Transparenz Hintergrund"
@ -254,10 +360,10 @@ index 4d4f3df..a3227a0 100644
msgstr "LNB"
diff --git a/po/el_GR.po b/po/el_GR.po
index 5414ebc..913f39e 100644
index 9756ea7..5d4d6ea 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -940,6 +940,9 @@ msgstr ""
@@ -947,6 +947,9 @@ msgstr ""
msgid "Setup.DVB$Subtitle background transparency"
msgstr ""
@ -268,10 +374,10 @@ index 5414ebc..913f39e 100644
msgstr "LNB"
diff --git a/po/es_ES.po b/po/es_ES.po
index 217f775..78a9491 100644
index 193e75e..1f36b60 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -941,6 +941,9 @@ msgstr "Transparencia primer plano subt
@@ -948,6 +948,9 @@ msgstr "Transparencia primer plano subt
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparencia fondo subtítulos"
@ -282,10 +388,10 @@ index 217f775..78a9491 100644
msgstr "LNB"
diff --git a/po/et_EE.po b/po/et_EE.po
index 5010dc4..af2e2d3 100644
index 49794dd..83ff319 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -940,6 +940,9 @@ msgstr "Subtiitri l
@@ -947,6 +947,9 @@ msgstr "Subtiitri l
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Subtiitri tausta läbipaistvus"
@ -296,10 +402,10 @@ index 5010dc4..af2e2d3 100644
msgstr "LNB"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index cd57e7c..e6a22bf 100644
index b093e88..4abf6a8 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -943,6 +943,9 @@ msgstr "Tekstityksen läpinäkyvyys"
@@ -950,6 +950,9 @@ msgstr "Tekstityksen läpinäkyvyys"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Tekstityksen taustan läpinäkyvyys"
@ -310,10 +416,10 @@ index cd57e7c..e6a22bf 100644
msgstr "LNB"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 0d4cb7c..770038e 100644
index b5c5120..86a961a 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -946,6 +946,9 @@ msgstr "Transparence de l'avant-plan"
@@ -953,6 +953,9 @@ msgstr "Transparence de l'avant-plan"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparence du fond"
@ -324,10 +430,10 @@ index 0d4cb7c..770038e 100644
msgstr "LNB"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 96ee695..51f596c 100644
index ed519a2..43f2ea5 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -942,6 +942,9 @@ msgstr "Transparentnost titla"
@@ -949,6 +949,9 @@ msgstr "Transparentnost titla"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparentnost pozadine titla"
@ -338,10 +444,10 @@ index 96ee695..51f596c 100644
msgstr "LNB"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index a17b209..2f70812 100644
index 17b905f..06f4505 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -943,6 +943,9 @@ msgstr "Felirat transzparenci
@@ -950,6 +950,9 @@ msgstr "Felirat transzparenci
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Felirat hátterének transzparenciája"
@ -352,10 +458,10 @@ index a17b209..2f70812 100644
msgstr "LNB"
diff --git a/po/it_IT.po b/po/it_IT.po
index 89d4237..5a055b2 100644
index 501300e..e0227d3 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -947,6 +947,9 @@ msgstr "Trasparenza sottotitoli"
@@ -954,6 +954,9 @@ msgstr "Trasparenza sottotitoli"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Trasparenza sfondo sottotitoli"
@ -366,10 +472,10 @@ index 89d4237..5a055b2 100644
msgstr "LNB"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 02465e6..8b5d996 100644
index 6cb1faa..4efc707 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -940,6 +940,9 @@ msgstr "Subtitrų priekinio vaizdo permatomumas"
@@ -947,6 +947,9 @@ msgstr "Subtitrų fonto permatomumas"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Subtitrų fono permatomumas"
@ -380,10 +486,10 @@ index 02465e6..8b5d996 100644
msgstr "Konverteris (LNB)"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index f570337..73a02b3 100644
index ae2b85e..34a71e9 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -944,6 +944,9 @@ msgstr "Transparantie voorgrond ondertiteling"
@@ -951,6 +951,9 @@ msgstr "Transparantie voorgrond ondertiteling"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparantie achtergrond ondertiteling"
@ -394,10 +500,10 @@ index f570337..73a02b3 100644
msgstr "LNB"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 2f40cfe..0934c9a 100644
index 8ec8dfb..9c129ee 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -941,6 +941,9 @@ msgstr ""
@@ -948,6 +948,9 @@ msgstr ""
msgid "Setup.DVB$Subtitle background transparency"
msgstr ""
@ -408,10 +514,10 @@ index 2f40cfe..0934c9a 100644
msgstr "LNB"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 9620e1b..39057fd 100644
index a5c1b47..9645eca 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -941,6 +941,9 @@ msgstr "Prze
@@ -948,6 +948,9 @@ msgstr "Prze
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Prze¼rocze podtytu³ów: T³o"
@ -422,12 +528,12 @@ index 9620e1b..39057fd 100644
msgstr "LNB"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 0510d9d..3bea1f1 100644
index c443312..3c108ea 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -940,6 +940,9 @@ msgstr "Transpar
@@ -948,6 +948,9 @@ msgstr "Transpar
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparência de background das legendas"
msgstr "Transparência de fundo das legendas"
+msgid "Setup.DVB$Enable teletext support"
+msgstr ""
@ -436,10 +542,10 @@ index 0510d9d..3bea1f1 100644
msgstr "LNB"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index e0a2119..1d4a412 100644
index f8c5a1e..35ec9ec 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -943,6 +943,9 @@ msgstr "Transparen
@@ -950,6 +950,9 @@ msgstr "Transparen
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparenþa fundalului subtitrãrii"
@ -450,10 +556,10 @@ index e0a2119..1d4a412 100644
msgstr "LNB"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 889b98b..89029e1 100644
index e683b8b..b90e565 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -941,6 +941,9 @@ msgstr "
@@ -948,6 +948,9 @@ msgstr "
msgid "Setup.DVB$Subtitle background transparency"
msgstr "¿àÞ×àÐçÝÞáâì äÞÝÐ áãÑâØâàÞÒ"
@ -464,10 +570,10 @@ index 889b98b..89029e1 100644
msgstr "ºÞÝÒÕàâÕà"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 129fad3..eff0bd1 100644
index 46edef5..aabb641 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -941,6 +941,9 @@ msgstr "Prieh
@@ -947,6 +947,9 @@ msgstr "Prieh
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Priehµadnos» pozadia titulkov"
@ -478,10 +584,10 @@ index 129fad3..eff0bd1 100644
msgstr "LNB"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 9f1e806..7f2bdd7 100644
index 89c6923..8ef4387 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -941,6 +941,9 @@ msgstr "Transparentnost podnapisov"
@@ -948,6 +948,9 @@ msgstr "Transparentnost podnapisov"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparentnost ozadja podnapisov"
@ -492,10 +598,10 @@ index 9f1e806..7f2bdd7 100644
msgstr "LNB"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index e9d39dd..9c366d2 100644
index 150f95e..020c64d 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -943,6 +943,9 @@ msgstr "Transparent f
@@ -950,6 +950,9 @@ msgstr "Transparent f
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Transparent bakgrund textremsa"
@ -506,10 +612,10 @@ index e9d39dd..9c366d2 100644
msgstr "LNB"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 9acd1c1..50a6295 100644
index 194943b..338c649 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -940,6 +940,9 @@ msgstr "Altyaz
@@ -947,6 +947,9 @@ msgstr "Altyaz
msgid "Setup.DVB$Subtitle background transparency"
msgstr "Altyazý arka þeffaflýk"
@ -520,10 +626,10 @@ index 9acd1c1..50a6295 100644
msgstr "LNB"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index b62fca7..25e7095 100644
index 433ec70..c0a7947 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -940,6 +940,9 @@ msgstr "ПрозорÑÑ<E28093>ÑÑŒ переднього плану Ñ<>убÑиÑÑ€Ñв"
@@ -947,6 +947,9 @@ msgstr "ПрозорÑÑ<E28093>ÑÑŒ переднього плану Ñ<>убÑиÑÑ€Ñв"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "ПрозорÑÑ<E28093>ÑÑŒ заднього плану Ñ<>убÑиÑÑ€Ñв"
@ -534,10 +640,10 @@ index b62fca7..25e7095 100644
msgstr "Конвертер"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index bffa301..141c362 100644
index c28fe88..8a594e3 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -943,6 +943,9 @@ msgstr "字幕å‰<C3A5>景é€<C3A9>明度"
@@ -950,6 +950,9 @@ msgstr "字幕å‰<C3A5>景é€<C3A9>明度"
msgid "Setup.DVB$Subtitle background transparency"
msgstr "字幕背景é€<C3A9>明度"
@ -548,10 +654,10 @@ index bffa301..141c362 100644
msgstr "切æ<E280A1>¢å™¨è®¾ç½®"
diff --git a/receiver.c b/receiver.c
index 58dda78..ed28f1b 100644
index 6a9ba04..a5c8967 100644
--- a/receiver.c
+++ b/receiver.c
@@ -82,7 +82,8 @@ bool cReceiver::SetPids(const cChannel *Channel)
@@ -81,7 +81,8 @@ bool cReceiver::SetPids(const cChannel *Channel)
(Channel->Ppid() == Channel->Vpid() || AddPid(Channel->Ppid())) &&
AddPids(Channel->Apids()) &&
AddPids(Channel->Dpids()) &&
@ -562,10 +668,10 @@ index 58dda78..ed28f1b 100644
return true;
}
diff --git a/remux.c b/remux.c
index 5206544..eea5c07 100644
index 78ab294..4f9950f 100644
--- a/remux.c
+++ b/remux.c
@@ -215,6 +215,29 @@ int cPatPmtGenerator::MakeSubtitlingDescriptor(uchar *Target, const char *Langua
@@ -219,6 +219,29 @@ int cPatPmtGenerator::MakeSubtitlingDescriptor(uchar *Target, const char *Langua
return i;
}
@ -595,7 +701,7 @@ index 5206544..eea5c07 100644
int cPatPmtGenerator::MakeLanguageDescriptor(uchar *Target, const char *Language)
{
int i = 0;
@@ -302,6 +325,7 @@ void cPatPmtGenerator::GeneratePmt(const cChannel *Channel)
@@ -306,6 +329,7 @@ void cPatPmtGenerator::GeneratePmt(const cChannel *Channel)
if (Channel) {
int Vpid = Channel->Vpid();
int Ppid = Channel->Ppid();
@ -603,7 +709,7 @@ index 5206544..eea5c07 100644
uchar *p = buf;
int i = 0;
p[i++] = 0x02; // table id
@@ -334,6 +358,10 @@ void cPatPmtGenerator::GeneratePmt(const cChannel *Channel)
@@ -338,6 +362,10 @@ void cPatPmtGenerator::GeneratePmt(const cChannel *Channel)
i += MakeStream(buf + i, 0x06, Channel->Spid(n));
i += MakeSubtitlingDescriptor(buf + i, Channel->Slang(n), Channel->SubtitlingType(n), Channel->CompositionPageId(n), Channel->AncillaryPageId(n));
}
@ -614,7 +720,7 @@ index 5206544..eea5c07 100644
int sl = i - SectionLength - 2 + 4; // -2 = SectionLength storage, +4 = length of CRC
buf[SectionLength] |= (sl >> 8) & 0x0F;
@@ -407,6 +435,7 @@ void cPatPmtParser::Reset(void)
@@ -411,6 +439,7 @@ void cPatPmtParser::Reset(void)
pmtPid = -1;
vpid = vtype = 0;
ppid = 0;
@ -622,7 +728,7 @@ index 5206544..eea5c07 100644
}
void cPatPmtParser::ParsePat(const uchar *Data, int Length)
@@ -492,11 +521,13 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
@@ -496,11 +525,13 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
int NumSpids = 0;
vpid = vtype = 0;
ppid = 0;
@ -636,7 +742,7 @@ index 5206544..eea5c07 100644
SI::PMT::Stream stream;
for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
dbgpatpmt(" stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());
@@ -595,6 +626,28 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
@@ -599,6 +630,28 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
spids[NumSpids]= 0;
}
break;
@ -666,10 +772,10 @@ index 5206544..eea5c07 100644
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
dbgpatpmt(" '%s'", ld->languageCode);
diff --git a/remux.h b/remux.h
index 7b62187..6f816dc 100644
index b882279..4af51e5 100644
--- a/remux.h
+++ b/remux.h
@@ -171,6 +171,7 @@ protected:
@@ -174,6 +174,7 @@ protected:
int MakeStream(uchar *Target, uchar Type, int Pid);
int MakeAC3Descriptor(uchar *Target, uchar Type);
int MakeSubtitlingDescriptor(uchar *Target, const char *Language, uchar SubtitlingType, uint16_t CompositionPageId, uint16_t AncillaryPageId);
@ -677,7 +783,7 @@ index 7b62187..6f816dc 100644
int MakeLanguageDescriptor(uchar *Target, const char *Language);
int MakeCRC(uchar *Target, const uchar *Data, int Length);
void GeneratePmtPid(const cChannel *Channel);
@@ -216,6 +217,7 @@ private:
@@ -219,6 +220,7 @@ private:
int vpid;
int ppid;
int vtype;
@ -685,7 +791,7 @@ index 7b62187..6f816dc 100644
int apids[MAXAPIDS + 1]; // list is zero-terminated
int atypes[MAXAPIDS + 1]; // list is zero-terminated
char alangs[MAXAPIDS][MAXLANGCODE2];
@@ -228,6 +230,8 @@ private:
@@ -231,6 +233,8 @@ private:
uint16_t compositionPageIds[MAXSPIDS];
uint16_t ancillaryPageIds[MAXSPIDS];
bool updatePrimaryDevice;
@ -694,7 +800,7 @@ index 7b62187..6f816dc 100644
protected:
int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; }
public:
@@ -260,6 +264,9 @@ public:
@@ -263,6 +267,9 @@ public:
int Vtype(void) const { return vtype; }
///< Returns the video stream type as defined by the current PMT, or 0 if no video
///< stream type has been detected, yet.
@ -704,7 +810,7 @@ index 7b62187..6f816dc 100644
const int *Apids(void) const { return apids; }
const int *Dpids(void) const { return dpids; }
const int *Spids(void) const { return spids; }
@@ -274,6 +281,8 @@ public:
@@ -277,6 +284,8 @@ public:
uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
@ -714,19 +820,18 @@ index 7b62187..6f816dc 100644
// TS to PES converter:
diff --git a/vdr.5 b/vdr.5
index 68711b5..9b8ed05 100644
index c46a2bf..96e142a 100644
--- a/vdr.5
+++ b/vdr.5
@@ -214,6 +214,13 @@ if there is an audio type.
.TP
.B TPID
The teletext PID.
@@ -225,6 +225,12 @@ by an '=' sign, as in
.B ...:201;2001=deu,2002=eng:...
+Manual teletext subtitling pages can be defined separated by a '+' sign.
+The pages (separated by commas) can contain language codes, delimited by a '='
+sign, as in
+
+Fixed teletext subtitling pages can be defined separated by a semicolon.
+The pages (separated by commas) can contain ISO 639 language codes, delimited
+by a '=' sign, as in
+
+.B ...:2001;150=deu,151=fin:...
+.B ...:201+150=deu,151=fin;2001,2002:...
+
.TP
.B Conditional access

View File

@ -0,0 +1,56 @@
diff --git a/pat.c b/pat.c
index b7493ec..9262491 100644
--- a/pat.c
+++ b/pat.c
@@ -17,6 +17,7 @@
#include "libsi/section.h"
#include "libsi/descriptor.h"
#include "thread.h"
+#include "vdrttxtsubshooks.h"
#define PMT_SCAN_TIMEOUT 10 // seconds
@@ -347,6 +348,8 @@ void cPatFilter::Process(u_short Pid, u_
char DLangs[MAXDPIDS][MAXLANGCODE2] = { "" };
char SLangs[MAXSPIDS][MAXLANGCODE2] = { "" };
int Tpid = 0;
+ tTeletextSubtitlePage TeletextSubtitlePages[MAXTXTPAGES];
+ int NumTPages = 0;
int NumApids = 0;
int NumDpids = 0;
int NumSpids = 0;
@@ -438,8 +441,21 @@ void cPatFilter::Process(u_short Pid, u_
NumSpids++;
}
break;
- case SI::TeletextDescriptorTag:
+ case SI::TeletextDescriptorTag: {
Tpid = esPid;
+ SI::TeletextDescriptor *sd = (SI::TeletextDescriptor *)d;
+ SI::TeletextDescriptor::Teletext ttxt;
+ for (SI::Loop::Iterator it; sd->teletextLoop.getNext(ttxt, it); ) {
+ bool isSubtitlePage = (ttxt.getTeletextType() == 0x02) || (ttxt.getTeletextType() == 0x05);
+ if ((NumTPages < MAXTXTPAGES) && ttxt.languageCode[0] && isSubtitlePage) {
+ strn0cpy(TeletextSubtitlePages[NumTPages].ttxtLanguage, I18nNormalizeLanguageCode(ttxt.languageCode), MAXLANGCODE1);
+ TeletextSubtitlePages[NumTPages].ttxtPage = ttxt.getTeletextPageNumber();
+ TeletextSubtitlePages[NumTPages].ttxtMagazine = ttxt.getTeletextMagazineNumber();
+ TeletextSubtitlePages[NumTPages].ttxtType = ttxt.getTeletextType();
+ NumTPages++;
+ }
+ }
+ }
break;
case SI::ISO639LanguageDescriptorTag: {
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
@@ -541,6 +557,11 @@ void cPatFilter::Process(u_short Pid, u_
}
if (Setup.UpdateChannels >= 2) {
Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
+ if (NumTPages < MAXTXTPAGES) {
+ int manualPageNumber = cVDRTtxtsubsHookListener::Hook()->ManualPageNumber(Channel);
+ if (manualPageNumber)
+ TeletextSubtitlePages[NumTPages++] = tTeletextSubtitlePage(manualPageNumber);
+ }
if (!cSource::IsType(Channel->Source(), 'I'))
Channel->SetCaIds(CaDescriptors->CaIds());
Channel->SetSubtitlingDescriptors(SubtitlingTypes, CompositionPageIds, AncillaryPageIds);

View File

@ -0,0 +1,40 @@
#!/bin/sh
#
# $FreeBSD: /tmp/pcvs/ports/multimedia/vdr/files/vdr-waitdvb.in,v 1.1 2012-01-21 17:32:50 nox Exp $
#
command="%%PREFIX%%/bin/vdr"
echo -n "vdr: waiting for dvb nodes: "
i=0
while true
do
ndvb=$(ls /dev/dvb/adapter*/frontend* 2>/dev/null|wc -l|tr -d ' ')
if [ $ndvb -gt 0 ]; then
break
fi
if [ $i -ge 60 ]; then
break
fi
i=$((i + 1))
sleep 1
echo -n "."
done
i=0
while true
do
sleep 2
nndvb=$(ls /dev/dvb/adapter*/frontend* 2>/dev/null|wc -l|tr -d ' ')
echo -n " $nndvb"
if [ $nndvb -eq $ndvb ]; then
break
fi
if [ $i -ge 30 ]; then
break
fi
i=$((i + 1))
done
echo .
exec "$command" "$@"

View File

@ -24,11 +24,23 @@
name=vdr
rcvar=vdr_enable
command="%%PREFIX%%/bin/vdr"
command_args="-d"
load_rc_config ${name}
: ${vdr_enable="NO"}
: ${vdr_chdir="%%VIDEODIR%%"}
: ${vdr_waitdvb="YES"}
command="%%PREFIX%%/bin/vdr"
procname="$command"
command_args="-d"
start_precmd="${name}_prestart"
vdr_prestart()
{
if checkyesno "${name}_waitdvb"; then
command="/usr/sbin/daemon"
rc_flags="-f %%PREFIX%%/bin/vdr-waitdvb $rc_flags"
fi
}
run_rc_command "$1"

View File

@ -1,14 +1,16 @@
bin/svdrpsend.pl
bin/svdrpsend
bin/vdr
lib/vdr/libvdr-dvbsddevice.so.1.7.19
lib/vdr/libvdr-svcsvr.so.1.7.19
lib/vdr/libvdr-svccli.so.1.7.19
lib/vdr/libvdr-status.so.1.7.19
lib/vdr/libvdr-skincurses.so.1.7.19
lib/vdr/libvdr-pictures.so.1.7.19
lib/vdr/libvdr-osddemo.so.1.7.19
lib/vdr/libvdr-hello.so.1.7.19
lib/vdr/libvdr-svdrpdemo.so.1.7.19
bin/vdr-waitdvb
lib/vdr/libvdr-dvbsddevice.so.1.7.22
lib/vdr/libvdr-svcsvr.so.1.7.22
lib/vdr/libvdr-svccli.so.1.7.22
lib/vdr/libvdr-status.so.1.7.22
lib/vdr/libvdr-skincurses.so.1.7.22
lib/vdr/libvdr-pictures.so.1.7.22
lib/vdr/libvdr-osddemo.so.1.7.22
lib/vdr/libvdr-hello.so.1.7.22
lib/vdr/libvdr-svdrpdemo.so.1.7.22
libdata/pkgconfig/vdr.pc
%%NLS%%share/locale/ar/LC_MESSAGES/vdr.mo
%%NLS%%share/locale/es_ES/LC_MESSAGES/vdr.mo
%%NLS%%share/locale/es_ES/LC_MESSAGES/vdr-hello.mo
@ -149,6 +151,9 @@ etc/vdr/diseqc.conf.sample
@unexec if cmp -s %D/etc/vdr/keymacros.conf.sample %D/etc/vdr/keymacros.conf; then rm -f %D/etc/vdr/keymacros.conf; fi
etc/vdr/keymacros.conf.sample
@exec if [ ! -f %D/etc/vdr/keymacros.conf ] ; then cp -p %D/%F %B/keymacros.conf; fi
@unexec if cmp -s %D/etc/vdr/scr.conf.sample %D/etc/vdr/scr.conf; then rm -f %D/etc/vdr/scr.conf; fi
etc/vdr/scr.conf.sample
@exec if [ ! -f %D/etc/vdr/scr.conf ] ; then cp -p %D/%F %B/scr.conf; fi
@unexec if cmp -s %D/etc/vdr/sources.conf.sample %D/etc/vdr/sources.conf; then rm -f %D/etc/vdr/sources.conf; fi
etc/vdr/sources.conf.sample
@exec if [ ! -f %D/etc/vdr/sources.conf ] ; then cp -p %D/%F %B/sources.conf; fi

View File

@ -7,7 +7,7 @@
PORTNAME= vdr-plugin-live
PORTVERSION= 0.2.0s20110303
PORTREVISION= 5
PORTREVISION= 6
CATEGORIES= www multimedia
MASTER_SITES= http://live.vdr-developer.org/downloads/:release \
LOCAL/nox/:snapshot

View File

@ -1,4 +1,4 @@
lib/vdr/libvdr-live.so.1.7.19
lib/vdr/libvdr-live.so.1.7.22
etc/vdr/plugins/live/css/DatePicker.css
etc/vdr/plugins/live/css/siteprefs.css
etc/vdr/plugins/live/img/active.png

View File

@ -6,8 +6,7 @@
#
PORTNAME= vdradmin-am
PORTVERSION= 3.6.8
PORTREVISION= 1
PORTVERSION= 3.6.9
CATEGORIES= www
MASTER_SITES= http://andreas.vdr-developer.org/vdradmin-am/download/

View File

@ -1,2 +1,2 @@
SHA256 (vdr/vdradmin-am-3.6.8.tar.bz2) = 71f365019741c3e7192f3342d30e550e0f52c77fa687691b0c239ce5859b3aaf
SIZE (vdr/vdradmin-am-3.6.8.tar.bz2) = 556528
SHA256 (vdr/vdradmin-am-3.6.9.tar.bz2) = 5f0421ca0ea2b4c7669d5332d43b04af8b0c40d2964dd152a265c18f4d7f2715
SIZE (vdr/vdradmin-am-3.6.9.tar.bz2) = 562006