diff options
author | Juergen Lock <nox@FreeBSD.org> | 2012-01-21 17:32:54 +0000 |
---|---|---|
committer | Juergen Lock <nox@FreeBSD.org> | 2012-01-21 17:32:54 +0000 |
commit | 556296fe6692c3141d20c3bf87b479397ff4f4b0 (patch) | |
tree | e754a0fa37fd22a3f6416696389380a63c4e0565 /multimedia/vdr | |
parent | 922347982c08123e9995cc740c3e42da50ba5e15 (diff) | |
download | ports-556296fe6692c3141d20c3bf87b479397ff4f4b0.tar.gz ports-556296fe6692c3141d20c3bf87b479397ff4f4b0.zip |
Notes
Diffstat (limited to 'multimedia/vdr')
-rw-r--r-- | multimedia/vdr/Makefile | 18 | ||||
-rw-r--r-- | multimedia/vdr/distinfo | 4 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-PLUGINS-src-dvbsddevice-dvbsddevice.c | 10 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-diseqc.c | 11 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-initialchannel | 33 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-vdr-1.7.22_FreeBSD (renamed from multimedia/vdr/files/patch-vdr-1.7.18_FreeBSD) | 75 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-z-Makefile | 14 | ||||
-rw-r--r-- | multimedia/vdr/files/patch-z-config.c | 10 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-2 | 179 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-1.7.18-1.7.19-tspacketbug.diff | 356 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-1.7.19-ttxtsubs.patch-3 | 21 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-1 (renamed from multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-1) | 291 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-2 | 56 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr-waitdvb.in | 40 | ||||
-rw-r--r-- | multimedia/vdr/files/vdr.in | 18 | ||||
-rw-r--r-- | multimedia/vdr/pkg-plist | 25 |
16 files changed, 378 insertions, 783 deletions
diff --git a/multimedia/vdr/Makefile b/multimedia/vdr/Makefile index 997e06ebb2f7..9777b80dbcdc 100644 --- a/multimedia/vdr/Makefile +++ b/multimedia/vdr/Makefile @@ -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}) diff --git a/multimedia/vdr/distinfo b/multimedia/vdr/distinfo index 0033b061d918..da4eaa4d8932 100644 --- a/multimedia/vdr/distinfo +++ b/multimedia/vdr/distinfo @@ -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 diff --git a/multimedia/vdr/files/patch-PLUGINS-src-dvbsddevice-dvbsddevice.c b/multimedia/vdr/files/patch-PLUGINS-src-dvbsddevice-dvbsddevice.c deleted file mode 100644 index ec9c2dddaf1a..000000000000 --- a/multimedia/vdr/files/patch-PLUGINS-src-dvbsddevice-dvbsddevice.c +++ /dev/null @@ -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" - diff --git a/multimedia/vdr/files/patch-diseqc.c b/multimedia/vdr/files/patch-diseqc.c deleted file mode 100644 index c4811781d87d..000000000000 --- a/multimedia/vdr/files/patch-diseqc.c +++ /dev/null @@ -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; - } diff --git a/multimedia/vdr/files/patch-initialchannel b/multimedia/vdr/files/patch-initialchannel deleted file mode 100644 index cb658665a03d..000000000000 --- a/multimedia/vdr/files/patch-initialchannel +++ /dev/null @@ -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); diff --git a/multimedia/vdr/files/patch-vdr-1.7.18_FreeBSD b/multimedia/vdr/files/patch-vdr-1.7.22_FreeBSD index 642b49b4179b..c65207d1bc63 100644 --- a/multimedia/vdr/files/patch-vdr-1.7.18_FreeBSD +++ b/multimedia/vdr/files/patch-vdr-1.7.22_FreeBSD @@ -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, ¶mbuf, &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, ¶mbuf, &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); + } + } diff --git a/multimedia/vdr/files/patch-z-Makefile b/multimedia/vdr/files/patch-z-Makefile index 1208079418d9..2a066f5f6a87 100644 --- a/multimedia/vdr/files/patch-z-Makefile +++ b/multimedia/vdr/files/patch-z-Makefile @@ -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: diff --git a/multimedia/vdr/files/patch-z-config.c b/multimedia/vdr/files/patch-z-config.c new file mode 100644 index 000000000000..6ffc4a252f6e --- /dev/null +++ b/multimedia/vdr/files/patch-z-config.c @@ -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); + } + diff --git a/multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-2 b/multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-2 deleted file mode 100644 index da202831c3f3..000000000000 --- a/multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-2 +++ /dev/null @@ -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, ¶mbuf, &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, ¶mbuf, &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); diff --git a/multimedia/vdr/files/vdr-1.7.18-1.7.19-tspacketbug.diff b/multimedia/vdr/files/vdr-1.7.18-1.7.19-tspacketbug.diff deleted file mode 100644 index a58f4d879995..000000000000 --- a/multimedia/vdr/files/vdr-1.7.18-1.7.19-tspacketbug.diff +++ /dev/null @@ -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. diff --git a/multimedia/vdr/files/vdr-1.7.19-ttxtsubs.patch-3 b/multimedia/vdr/files/vdr-1.7.19-ttxtsubs.patch-3 deleted file mode 100644 index 4f5f1bb830df..000000000000 --- a/multimedia/vdr/files/vdr-1.7.19-ttxtsubs.patch-3 +++ /dev/null @@ -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 { diff --git a/multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-1 b/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-1 index 45e8def1bd8e..d31f4234cfb9 100644 --- a/multimedia/vdr/files/vdr-1.7.15-ttxtsubs.patch-1 +++ b/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-1 @@ -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 "Transparncia fons subttols" @@ -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 subttulos" @@ -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 lbipaistvus" @@ -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 htternek transzparencija" @@ -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 "Przerocze podtytuw: To" @@ -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 "Transparncia de background das legendas" + msgstr "Transparncia 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 "Transparena fundalului subtitrrii" @@ -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 "Priehadnos 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 effaflk" @@ -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 "Прозорість переднього плану субтитрів" +@@ -947,6 +947,9 @@ msgstr "Прозорість переднього плану субтитрів" msgid "Setup.DVB$Subtitle background transparency" msgstr "Прозорість заднього плану субтитрів" @@ -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 "字幕前景透明度" +@@ -950,6 +950,9 @@ msgstr "字幕前景透明度" msgid "Setup.DVB$Subtitle background transparency" msgstr "字幕背景透明度" @@ -548,10 +654,10 @@ index bffa301..141c362 100644 msgstr "切换器设置" 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. -+ -+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 +@@ -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 + -+.B ...:2001;150=deu,151=fin:... ++.B ...:201+150=deu,151=fin;2001,2002:... + .TP .B Conditional access diff --git a/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-2 b/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-2 new file mode 100644 index 000000000000..1cbd92de8535 --- /dev/null +++ b/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-2 @@ -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); diff --git a/multimedia/vdr/files/vdr-waitdvb.in b/multimedia/vdr/files/vdr-waitdvb.in new file mode 100644 index 000000000000..da715bc52a4e --- /dev/null +++ b/multimedia/vdr/files/vdr-waitdvb.in @@ -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" "$@" diff --git a/multimedia/vdr/files/vdr.in b/multimedia/vdr/files/vdr.in index cf963cba649f..e2badf74435a 100644 --- a/multimedia/vdr/files/vdr.in +++ b/multimedia/vdr/files/vdr.in @@ -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" diff --git a/multimedia/vdr/pkg-plist b/multimedia/vdr/pkg-plist index 18f386f0000e..e1f34b025177 100644 --- a/multimedia/vdr/pkg-plist +++ b/multimedia/vdr/pkg-plist @@ -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 |