summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Grimm <tobias@e-tobi.loc>2008-12-13 11:31:29 +0100
committerTobias Grimm <tobias@e-tobi.loc>2008-12-13 11:31:29 +0100
commitfa04d4b0ec432c4115eb52c3ec848e3e9f7b515e (patch)
tree9933d82c5ce7dfda4a9d61c432d5b1440e34f2f3
parent87ba3eb8ae4a256b7cea63748cef013e3fa23193 (diff)
downloadvdr-plugin-ttxtsubs-fa04d4b0ec432c4115eb52c3ec848e3e9f7b515e.tar.gz
vdr-plugin-ttxtsubs-fa04d4b0ec432c4115eb52c3ec848e3e9f7b515e.tar.bz2
Applied patch from Rolf Ahrenberg (vdr-ttxtsubs-0.0.5-raastinrauta-edition.diff.gz)
-rw-r--r--Checkpatch.sh28
-rw-r--r--HISTORY6
-rw-r--r--Makefile47
-rw-r--r--po/ca_ES.po242
-rw-r--r--po/de_DE.po240
-rw-r--r--po/es_ES.po240
-rw-r--r--po/fi_FI.po243
-rw-r--r--po/fr_FR.po243
-rw-r--r--po/it_IT.po242
-rw-r--r--po/ru_RU.po240
-rw-r--r--po/sv_SE.po241
-rw-r--r--siinfo.c180
-rw-r--r--siinfo.h6
-rw-r--r--teletext-chars.h29
-rw-r--r--teletext.c20
-rw-r--r--teletext.h34
-rw-r--r--ttxtsubs.c360
-rw-r--r--ttxtsubschannelsettings.c51
-rw-r--r--ttxtsubschannelsettings.h51
-rw-r--r--ttxtsubsdisplay.c194
-rw-r--r--ttxtsubsdisplay.h8
-rw-r--r--ttxtsubsdisplayer.c30
-rw-r--r--ttxtsubsdisplayer.h3
-rw-r--r--ttxtsubsfilter.c18
-rw-r--r--ttxtsubsglobals.h30
-rw-r--r--ttxtsubsi18n.c833
-rw-r--r--ttxtsubspagemenu.c62
-rw-r--r--ttxtsubspagemenu.h26
-rw-r--r--ttxtsubsreceiver.c19
-rw-r--r--ttxtsubsreceiver.h2
-rw-r--r--ttxtsubsrecorder.c18
31 files changed, 3455 insertions, 531 deletions
diff --git a/Checkpatch.sh b/Checkpatch.sh
index 5549988..e4b2321 100644
--- a/Checkpatch.sh
+++ b/Checkpatch.sh
@@ -23,18 +23,18 @@ if [ $? -ne 0 ]; then
exit 1;
fi
-grep OSD_HOOK_2 "$DIR/../../../osd.c" >> /dev/null;
-if [ $? -ne 0 ]; then
- echo
- echo
- echo "Error while building ttxtsubs plugin:"
- echo " You have an older version of the VDR patch installed!"
- echo " You need to upgrade it."
- echo " Please do:"
- echo " cd /path/to/vdr [ replace with your path ]"
- echo " patch -b < PLUGINS/src/ttxtsubs/VDR.upgrade-patch"
- echo " make"
- echo
- exit 1;
-fi
+#grep OSD_HOOK_2 "$DIR/../../../osd.c" >> /dev/null;
+#if [ $? -ne 0 ]; then
+# echo
+# echo
+# echo "Error while building ttxtsubs plugin:"
+# echo " You have an older version of the VDR patch installed!"
+# echo " You need to upgrade it."
+# echo " Please do:"
+# echo " cd /path/to/vdr [ replace with your path ]"
+# echo " patch -b < PLUGINS/src/ttxtsubs/VDR.upgrade-patch"
+# echo " make"
+# echo
+# exit 1;
+#fi
diff --git a/HISTORY b/HISTORY
index 381268c..18e4a6d 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,6 +1,12 @@
VDR Plugin 'ttxtsubs' Revision History
--------------------------------------
+2008-12-??: Version 0.0.6
+- Applied patch from Rolf Ahrenberg (vdr-ttxtsubs-0.0.5-raastinrauta-edition.diff.gz)
+ which introduces the following changes:
+ - Support for VDR >= 1.6.x
+ - TODO
+
2004-05-31: Version 0.0.5
- Note:
diff --git a/Makefile b/Makefile
index d901842..abedd8c 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ pri
### The C++ compiler and options:
CXX ?= g++
-CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual
+CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
### The directory environment:
@@ -31,7 +31,7 @@ TMPDIR = /tmp
### The version number of VDR (taken from VDR's "config.h"):
-VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
+APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
### The name of the distribution archive:
@@ -48,11 +48,14 @@ DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
OBJS = $(PLUGIN).o ttxtsubsdisplayer.o ttxtsubsdisplay.o teletext.o siinfo.o \
- ttxtsubsfilter.o ttxtsubsrecorder.o ttxtsubsreceiver.o ttxtsubsi18n.o
+ ttxtsubsfilter.o ttxtsubsrecorder.o ttxtsubsreceiver.o ttxtsubsi18n.o \
+ ttxtsubspagemenu.o ttxtsubschannelsettings.o
SOURCEFILES = *.c *.h [A-Z]???* contrib
### Implicit rules:
+.PHONY: all all-redirect
+all-redirect: all
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@@ -66,14 +69,39 @@ $(DEPFILE): Makefile
-include $(DEPFILE)
+### Internationalization (I18N):
+
+PODIR = po
+LOCALEDIR = $(VDRDIR)/locale
+I18Npo = $(wildcard $(PODIR)/*.po)
+I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
+I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file))))
+I18Npot = $(PODIR)/$(PLUGIN).pot
+
+%.mo: %.po
+ msgfmt -c -o $@ $<
+
+$(I18Npot): $(wildcard *.c)
+ xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='<author>' -o $@ $(wildcard *.c)
+
+$(I18Npo): $(I18Npot)
+ msgmerge -U --no-wrap -F --backup=none -q $@ $<
+
+i18n: $(I18Nmo)
+ @mkdir -p $(LOCALEDIR)
+ for i in $(I18Ndirs); do\
+ mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\
+ cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/vdr-$(PLUGIN).mo;\
+ done
+
### Targets:
-all: libvdr-$(PLUGIN).so
+all: libvdr-$(PLUGIN).so i18n
@sh ./Checkpatch.sh
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
- @cp $@ $(LIBDIR)/$@.$(VDRVERSION)
+ @cp $@ $(LIBDIR)/$@.$(APIVERSION)
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@@ -95,15 +123,8 @@ bup: clean
@echo done.
clean:
+ @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
-#ci: patch
ci:
ci -u $(SOURCEFILES)
-
-patch:
- co -l xVDR.patch.temp vdrttxtsubshooks.c vdrttxtsubshooks.h
- (cd ../../../; diff -upr ./DIST/* .) | grep -v "Only in ." > xVDR.patch.temp
- cp -p ../../../vdrttxtsubshooks.c .
- cp -p ../../../vdrttxtsubshooks.h .
- ci -u xVDR.patch.temp vdrttxtsubshooks.c vdrttxtsubshooks.h
diff --git a/po/ca_ES.po b/po/ca_ES.po
new file mode 100644
index 0000000..f5a787f
--- /dev/null
+++ b/po/ca_ES.po
@@ -0,0 +1,242 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Marc Rovira Vall <tm05462@salleURL.edu>, 2003
+# Ramon Roca <ramon.roca@xcombo.com>, 2003
+# Jordi Vilà <jvila@tinet.org>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Jordi Vilà <jvila@tinet.org>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Subtítols teletext"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Amaga subtítols teletext"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Visualitza subtítols teletext"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Posiciona subtítols teletext per a 4:3/anamòrfic"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Posiciona subtítols teletext per a Letterbox"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Selecció pàgina subtítols"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Visualitza si/no"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/Letterbox"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "Modalitat pàgina"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "Esquerra"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Centre"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "Dreta"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "Totes"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "Només DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "Només DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "Només DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "Negre"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "Blanc"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "Vermell"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "Verd"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "Groc"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "Magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "Blau"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "Cian"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "Personalitzat"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "Gris"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Visualitza subtítols"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Grava subtítols"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr "Retard en directe"
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr "Retard en reproducció"
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Alternativa del menú principal"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Posició horitzontal del text "
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Posición vertical del text"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/Anamòrfic"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Ajustament vertical del text"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Ajustament distancia entre línies"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Correcció per a canals francesos"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "Selecció font DVB"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Color del text"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Color de fons"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Color personalitzat"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Valor vermell"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Valor vert"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Valor blau"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Valor transparència"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Idioma"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "Discapacitats auditius"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Opcions pàgina subtítols"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "Automàtic"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "Manual"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "Desactivats"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Modalitat subtítols"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Pàgina manual subtítols"
diff --git a/po/de_DE.po b/po/de_DE.po
new file mode 100644
index 0000000..ebd8e57
--- /dev/null
+++ b/po/de_DE.po
@@ -0,0 +1,240 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Klaus Schmidinger <kls@cadsoft.de>, 2000
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Videotextuntertitel"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Verstecke Videotextuntertitel"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Zeige Videotextuntertitel"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Positioniere Videotext-Untertitel für 4:3/Anamorph"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Positioniere Videotext-Untertitel für Letterbox"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Seitenauswahl"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Anzeige ein/aus"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/Letterbox"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "Seitenmodus"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "Links"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Mitte"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "Rechts"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "Alle"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "Nur DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "Nur DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "Nur DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "Schwarz"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "Weiss"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "Rot"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "Grün"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "Gelb"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "Magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "Blau"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "Türkis"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "Grau"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Zeige Untertitel"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Nimm Untertitel auf"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr "Live Verzögerung"
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr "Wiedergabe Verzögerung"
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Hauptmenu Alternative"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Horizontale Textposition"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Vertikale Textposition"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/Anamorph"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Text vertikal verschieben"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Zeilenabstand einstellen"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Workaround für französische Kanäle"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "DVB Quelle Auswahl"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Textfarbe"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Hintergrundfarbe"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Benutzerdefinierte Farbe"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Roter Wert"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Grüner Wert"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Blauer Wert"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Transparenter Wert"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Sprache"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "Gehörlose"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Untertitelseiten Einstellung"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "Automatisch"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "Manuell"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Untertitelmodus"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Manuelle Untertitelseite"
diff --git a/po/es_ES.po b/po/es_ES.po
new file mode 100644
index 0000000..25b4d15
--- /dev/null
+++ b/po/es_ES.po
@@ -0,0 +1,240 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Ruben Nunez Francisco <ruben.nunez@tang-it.com>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Subtítulos teletexto"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Esconde subtítulos teletexto"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Visualiza subtítulos teletexto"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Posiciona subtítulos teletexto para 4:3/anamórfico"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Posicióna subtítulos teletexto para Letterbox"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Selección página subtítulos"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Visualiza sí/no"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/Letterbox"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "Modo página"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "Izquierda"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Centro"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "Derecha"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "Todas"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "Sólo DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "Sólo DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "Sólo DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "Negro"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "Blanco"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "Rojo"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "Verde"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "Amarillo"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "Magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "Azul"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "Cian"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "Personalizado"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "Transparente"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "Gris"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Visualiza subtítulos"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Graba subtítulos"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr "Retardo en directo"
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr "Retardo en reproducción"
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Alternativa del menú principal"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "´Posición horizontal del texto"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Posición vertical del texto"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/Anamórfico"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Ajuste vertical del texto"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Ajuste distancia entre líneas"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Corrección para canales franceses"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "Selección fuente DVB"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Color del texto"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Color de fondo"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Color personalizado"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Valor rojo"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Valor verde"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Valor azul"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Valor transparencia"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Idioma"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "No oyente"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Opciones página subtítulos"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "Automático"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "Manual"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "Desactivados"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Modo subtítulos"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Página manual subtítulos"
diff --git a/po/fi_FI.po b/po/fi_FI.po
new file mode 100644
index 0000000..97a3bcf
--- /dev/null
+++ b/po/fi_FI.po
@@ -0,0 +1,243 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Hannu Savolainen <hannu@opensound.com>, 2002
+# Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, 2002
+# Niko Tarnanen <niko.tarnanen@hut.fi>, 2003
+# Rolf Ahrenberg <rahrenbe@cc.hut.fi>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Tekstitys (Teksti-TV)"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Piilota tekstitys (Teksti-TV)"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Näytä tekstitys (Teksti-TV)"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "4:3/Anamorfinen tekstitys (Teksti-TV)"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Letterbox tekstitys (Teksti-TV)"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Tekstityssivun valinta"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "aktivointi"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "kuvasuhde"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "sivun valinta"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "vasen"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "keskitä"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "oikea"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "kaikki"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "vain DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "vain DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "vain DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "musta"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "valkoinen"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "punainen"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "vihreä"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "keltainen"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "sininen"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "syaani"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "muokattava"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "läpinäkyvä"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "harmaa"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Näytä tekstitykset"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Tallenna tekstitykset"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr "Viive Live-lähetyksessä"
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr "Viive toistossa"
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Päävalikon toiminnot"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Vaakatasaus"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Pystytasaus"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/anamorfinen"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Pystytasauksen hienosäätö"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Rivivälin hienosäätö"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Ranskalainen silmänkääntötemppu"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "Tekstityslähteen valinta"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr "Kirjasintyypin koko (px)"
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Kirjasimen väri"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Taustaväri"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Muokattava väri"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Punainen"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Vihreä"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Sininen"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Läpinäkyvyys"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Tekstityskieli"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "kuulorajoitteisille"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Tekstityssivun asetukset"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "automaattinen"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "manuaalinen"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "pois"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Tekstitystapa"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Asetettu tekstityssivu"
diff --git a/po/fr_FR.po b/po/fr_FR.po
new file mode 100644
index 0000000..c3870bd
--- /dev/null
+++ b/po/fr_FR.po
@@ -0,0 +1,243 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Jean-Claude Repetto <jc@repetto.org>, 2001
+# Olivier Jacques <jacquesolivier@hotmail.com>, 2003
+# Gregoire Favre <greg@magma.unil.ch>, 2003
+# Nicolas Huillard <nhuillard@e-dition.fr>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Sous-titrage télétexte"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Masquer le sous-titrage"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Afficher le sous-titrage"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Position du sous-titrage pour 4:3/Anamorph"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Position du sous-titrage pour Letterbox"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Page de sélection"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Affichage"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/Letterbox"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "Mode page"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "Gauche"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Centre"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "Droite"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "Tous"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "Seulement DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "Seulement DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "Seulement DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "Noir"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "Blanc"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "Rouge"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "Vert"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "Jaune"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "Magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "Bleu"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "Cyan"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "Gris"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Afficher le sous-titrage"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Enregistrer le sous-titrage"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr ""
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr ""
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Choix du menu principal"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Position horizontale du texte"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Position verticale du texte"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/Anamorph"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Ajustement vertical du texte"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Espacement des lignes"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Contournement chaînes françaises"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "Sélection Source DVB"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr "Taille Police (pixel)"
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Couleur du texte"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Couleur du fond"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Couleur personnalisée"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Valeur Rouge"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Valeur Vert"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Valeur Bleu"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Valeur de transparence"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Langues"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "Malentendant"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Conf. Page sous-titres TXT"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "Auto"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "Manuel"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Mode de sous-titres TXT"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Page des sous-titres"
diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100644
index 0000000..c982dc4
--- /dev/null
+++ b/po/it_IT.po
@@ -0,0 +1,242 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Alberto Carraro <bertocar@tin.it>, 2001
+# Antonio Ospite <ospite@studenti.unina.it>, 2003
+# Sean Carlos <seanc@libero.it>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Sean Carlos <seanc@libero.it>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Sottotitoli televideo"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Nascondi sottotitoli televideo"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Visualizza sottotitoli televideo"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Posizionare sottotitoli per 4:3/anamorfico"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Posizionare sottotitoli per Letterbox"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr "Selezione pagina"
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Visualizza sì/no"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/Letterbox"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr "Modo pagina"
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "Sinistra"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Centro"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "Destra"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr "Tutte"
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr "Solo DVB-S"
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr "Solo DVB-T"
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr "Solo DVB-C"
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "Nero"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "Bianco"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "Rosso"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "Verde"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "Giallo"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "Magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "Azzurro"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "Ciano"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "Personalizzato"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "Trasparente"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "Grigio"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Visualizza sottotitoli"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Registra sottotitoli"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr "Ritardo in diretta"
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr "Ritardo in riproduzione"
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Alternativa menù principale"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Posizione testo orizzontale"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Posizione testo verticale"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/anamorfico"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Correzione testo verticale"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Correzione interlinea"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Correzione per canali francesi"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr "Selezione sorgente DVB"
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Colore testo"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Colore sfondo"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "Colore personalizzato"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "Valore rosso"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "Valore verde"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "Valore azzurro"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "Valore trasparenza"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Lingua"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "Non udente"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr "Settaggi pagina sottotitoli"
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr "Automatico"
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr "Manuale"
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr "Disattivati"
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr "Modo sottotitoli"
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr "Pagina manuale sottotitoli"
diff --git a/po/ru_RU.po b/po/ru_RU.po
new file mode 100644
index 0000000..aadebe7
--- /dev/null
+++ b/po/ru_RU.po
@@ -0,0 +1,240 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Vyacheslav Dikonov <sdiconov@mail.ru>, 2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-5\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "ÂÕÛÕâÕÚáâ-áãÑâØâàë"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "ÁÚàëâì áãÑâØâàë"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "¿ÞÚÐ×ëÒÐâì áãÑâØâàë"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "ÁãÑâØâàë Ò ÚÐÔàÕ 4:3"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "ÁãÑâØâàë Ò ÚÐÔàÕ èØàÞÚÞíÚàÐÝÝÞÓÞ äØÛìÜÐ"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr ""
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "ÒÚÛîçØâì/ÒëÚÛîçØâì"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/èØàÞÚØÙ íÚàÐÝ"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr ""
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "áÛÕÒÐ"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "Ò æÕÝâàÕ"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "áßàÐÒÐ"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr ""
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr ""
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr ""
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr ""
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "çñàÝëÙ"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "ÑÕÛëÙ"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "ÚàÐáÝëÙ"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "×ÕÛñÝëÙ"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "ÖñÛâëÙ"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "ßãàßãàÝëÙ"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "áØÝØÙ"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "ÓÞÛãÑÞÙ"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr "ÝÐáâàÐØÒÐÕÜëÙ"
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "ßàÞ×àÐçÝëÙ"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "áÕàëÙ"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "¿ÞÚÐ×ëÒÐâì áãÑâØâàë"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "·ÐߨáëÒÐâì áãÑâØâàë"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr ""
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr ""
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "ºÞÜÐÝÔÐ Ò ÓÛÐÒÝÞÜ ÜÕÝî"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "ÀÐ×ÜÕéÕÝØÕ âÕÚáâÐ ßÞ ÓÞàØ×ÞÝâÐÛØ"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "ÀÐ×ÜÕéÕÝØÕ âÕÚáâÐ ßÞ ÒÕàâØÚÐÛØ"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "èØàÞÚØÙ íÚàÐÝ"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "²ÕàâØÚÐÛìÝëÙ áÔÒØÓ âÕÚáâÐ"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "ÀÐááâÞïÝØÕ ÜÕÖÔã áâàÞÚÐÜØ"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "ÁßÕæ. ÝÐáâàÞÙÚØ ÔÛï äàÐÝæ. ÚÐÝÐÛÞÒ"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr ""
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "ÆÒÕâ âÕÚáâÐ"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "ÆÒÕâ äÞÝÐ"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr "½ÐáâàÐØÒÐÕÜëÙ æÒÕâ"
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr "ÃàÞÒÕÝì ÚàÐáÝÞÓÞ"
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr "ÃàÞÒÕÝì ×ÕÛñÝÞÓÞ"
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr "ÃàÞÒÕÝì áØÝÕÓÞ"
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr "ÁâÕßÕÝì ßàÞ×àÐçÝÞáâØ"
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Ï×ëÚ"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "ÔÛï áÛÐÑÞáÛëèÐéØå"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr ""
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr ""
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr ""
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr ""
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr ""
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr ""
diff --git a/po/sv_SE.po b/po/sv_SE.po
new file mode 100644
index 0000000..602d791
--- /dev/null
+++ b/po/sv_SE.po
@@ -0,0 +1,241 @@
+# VDR plugin language source file.
+# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
+# This file is distributed under the same license as the VDR package.
+# Tomas Prybil <tomas@prybil.se>, 2002
+# Jan Ekholm <chakie@infa.abo.fi>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.5.7\n"
+"Report-Msgid-Bugs-To: <author>\n"
+"POT-Creation-Date: 2007-09-25 21:58+0300\n"
+"PO-Revision-Date: 2007-08-24 23:49+0300\n"
+"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ttxtsubs.c:51
+msgid "Teletext subtitles"
+msgstr "Textning (Text-TV)"
+
+#: ttxtsubs.c:302
+msgid "Hide teletext subtitles"
+msgstr "Göm textning (Text-TV)"
+
+#: ttxtsubs.c:304
+msgid "Display teletext subtitles"
+msgstr "Visa textning (Text-TV)"
+
+#: ttxtsubs.c:307
+msgid "Position Teletext Subtitles for 4:3/Anamorph"
+msgstr "Textning för 4:3/anamorf (Text-TV)"
+
+#: ttxtsubs.c:309
+msgid "Position Teletext Subtitles for Letterbox"
+msgstr "Textning för brevlådeformat (Text-TV)"
+
+#: ttxtsubs.c:311
+msgid "Page Selection"
+msgstr ""
+
+#: ttxtsubs.c:641
+msgid "Display on/off"
+msgstr "Visa textning på/av"
+
+#: ttxtsubs.c:642
+msgid "4:3/Letterbox"
+msgstr "4:3/brevlådeformat"
+
+#: ttxtsubs.c:643
+msgid "Page Mode"
+msgstr ""
+
+#: ttxtsubs.c:646
+msgid "Left"
+msgstr "vänster"
+
+#: ttxtsubs.c:647
+msgid "Center"
+msgstr "centrerad"
+
+#: ttxtsubs.c:648
+msgid "Right"
+msgstr "höger"
+
+#: ttxtsubs.c:651
+msgid "All"
+msgstr ""
+
+#: ttxtsubs.c:652
+msgid "Only DVB-S"
+msgstr ""
+
+#: ttxtsubs.c:653
+msgid "Only DVB-T"
+msgstr ""
+
+#: ttxtsubs.c:654
+msgid "Only DVB-C"
+msgstr ""
+
+#: ttxtsubs.c:657
+msgid "Black"
+msgstr "svart"
+
+#: ttxtsubs.c:658
+msgid "White"
+msgstr "vit"
+
+#: ttxtsubs.c:659
+msgid "Red"
+msgstr "röd"
+
+#: ttxtsubs.c:660
+msgid "Green"
+msgstr "grön"
+
+#: ttxtsubs.c:661
+msgid "Yellow"
+msgstr "gul"
+
+#: ttxtsubs.c:662
+msgid "Magenta"
+msgstr "magenta"
+
+#: ttxtsubs.c:663
+msgid "Blue"
+msgstr "blå"
+
+#: ttxtsubs.c:664
+msgid "Cyan"
+msgstr "cyan"
+
+#: ttxtsubs.c:665
+msgid "Custom"
+msgstr ""
+
+#: ttxtsubs.c:666
+msgid "Transparent"
+msgstr "transparent"
+
+#: ttxtsubs.c:667
+msgid "Grey"
+msgstr "grå"
+
+#: ttxtsubs.c:691 ttxtsubspagemenu.c:36
+msgid "Display Subtitles"
+msgstr "Visa textning"
+
+#: ttxtsubs.c:692
+msgid "Record Subtitles"
+msgstr "Spela in textning"
+
+#: ttxtsubs.c:693
+msgid "Live Delay"
+msgstr ""
+
+#: ttxtsubs.c:694
+msgid "Replay Delay"
+msgstr ""
+
+#: ttxtsubs.c:697
+msgid "Main Menu Alternative"
+msgstr "Huvudmenyalternativ"
+
+#: ttxtsubs.c:701
+msgid "Text Horizontal Position"
+msgstr "Horisontell position"
+
+#: ttxtsubs.c:703
+msgid "Text Vertical Position"
+msgstr "Vertikal positon"
+
+#: ttxtsubs.c:704
+msgid "4:3/Anamorph"
+msgstr "4:3/anamorf"
+
+#: ttxtsubs.c:704
+msgid "Letterbox"
+msgstr "brevlådeformat"
+
+#: ttxtsubs.c:705
+msgid "Text Vertical Adjust"
+msgstr "Vertikal justering"
+
+#: ttxtsubs.c:707
+msgid "Line Spacing Adjust"
+msgstr "Radavstånd"
+
+#: ttxtsubs.c:709
+msgid "Workaround for some French chns"
+msgstr "Fix för vissa franska kanaler"
+
+#: ttxtsubs.c:713
+msgid "DVB Source Selection"
+msgstr ""
+
+#: ttxtsubs.c:716
+msgid "Font Size (pixel)"
+msgstr ""
+
+#: ttxtsubs.c:720
+msgid "Text Color"
+msgstr "Färg på text"
+
+#: ttxtsubs.c:724
+msgid "Background Color"
+msgstr "Färg på bakgrund"
+
+#: ttxtsubs.c:736
+msgid "Custom Color"
+msgstr ""
+
+#: ttxtsubs.c:741
+msgid "Red Value"
+msgstr ""
+
+#: ttxtsubs.c:742
+msgid "Green Value"
+msgstr ""
+
+#: ttxtsubs.c:743
+msgid "Blue Value"
+msgstr ""
+
+#: ttxtsubs.c:744
+msgid "Transparency Value"
+msgstr ""
+
+#: ttxtsubs.c:754 ttxtsubs.c:762
+msgid "Language"
+msgstr "Språk"
+
+#: ttxtsubs.c:762
+msgid "Hearing Impaired"
+msgstr "Nedsatt hörsel"
+
+#: ttxtsubspagemenu.c:17
+msgid "Subtitle Page Settings"
+msgstr ""
+
+#: ttxtsubspagemenu.c:31
+msgid "Auto"
+msgstr ""
+
+#: ttxtsubspagemenu.c:32
+msgid "Manual"
+msgstr ""
+
+#: ttxtsubspagemenu.c:33
+msgid "Disabled"
+msgstr ""
+
+#: ttxtsubspagemenu.c:37
+msgid "Subtitle Mode"
+msgstr ""
+
+#: ttxtsubspagemenu.c:38
+msgid "Manual Subtitle Page"
+msgstr ""
diff --git a/siinfo.c b/siinfo.c
index ed5bcd5..287f8c7 100644
--- a/siinfo.c
+++ b/siinfo.c
@@ -18,11 +18,13 @@
#include <vdr/device.h>
#include <vdr/dvbdevice.h>
+#include <vdr/channels.h>
#include "linux/dvb/dmx.h"
#include "siinfo.h"
#include "ttxtsubsglobals.h"
+#include "ttxtsubschannelsettings.h"
#define DESCR_TELETEXT 0x56
#define DESCR_DVBSUBTITLES 0x59
@@ -32,57 +34,57 @@
// ETSI 300468 6.2.40
-struct ttxt_descr {
- uint8_t tag PACK;
- uint8_t length PACK;
- struct {
- uint8_t lang[3] PACK;
- uint8_t type_mag PACK; // 5 bits type, 3 bits mag
- uint8_t page_no PACK;
- } d[1] PACK;
+struct PACK ttxt_descr {
+ uint8_t tag;
+ uint8_t length;
+ struct PACK {
+ uint8_t lang[3];
+ uint8_t type_mag; // 5 bits type, 3 bits mag
+ uint8_t page_no;
+ } d[1];
};
-struct sect_header {
- uint8_t table_id PACK;
- uint16_t syntax_len PACK;
- uint16_t transport_stream_id PACK;
- uint8_t ver_cur PACK;
- uint8_t section_number PACK;
- uint8_t last_section_number PACK;
+struct PACK sect_header {
+ uint8_t table_id;
+ uint16_t syntax_len;
+ uint16_t transport_stream_id;
+ uint8_t ver_cur;
+ uint8_t section_number;
+ uint8_t last_section_number;
};
// H.222.0 2.4.4.3, Table 2-25
-struct PAT_sect {
- uint8_t table_id PACK;
- uint16_t syntax_len PACK;
- uint16_t transport_stream_id PACK;
- uint8_t vers_curr PACK;
- uint8_t sect_no PACK;
- uint8_t last_sect PACK;
- struct {
- uint16_t program_number PACK;
- uint16_t res_PMTPID PACK;
- } d[1] PACK;
+struct PACK PAT_sect {
+ uint8_t table_id;
+ uint16_t syntax_len;
+ uint16_t transport_stream_id;
+ uint8_t vers_curr;
+ uint8_t sect_no;
+ uint8_t last_sect;
+ struct PACK {
+ uint16_t program_number;
+ uint16_t res_PMTPID;
+ } d[1];
};
// H.222.0 2.4.4.8, Table 2-28
-struct PMT_stream {
- uint8_t stream_type PACK;
- uint16_t res_PID PACK;
- uint16_t res_ES_info_len PACK;
- uint8_t descrs[2] PACK;
+struct PACK PMT_stream {
+ uint8_t stream_type;
+ uint16_t res_PID;
+ uint16_t res_ES_info_len;
+ uint8_t descrs[2];
};
-struct PMT_sect {
- uint8_t table_id PACK;
- uint16_t syntax_len PACK;
- uint16_t program_number PACK;
- uint8_t vers_curr PACK;
- uint8_t sect_no PACK;
- uint8_t last_sect PACK;
- uint16_t res_pcr PACK;
- uint16_t res_program_info_length PACK;
- struct PMT_stream s PACK;
+struct PACK PMT_sect {
+ uint8_t table_id;
+ uint16_t syntax_len;
+ uint16_t program_number;
+ uint8_t vers_curr;
+ uint8_t sect_no;
+ uint8_t last_sect;
+ uint16_t res_pcr;
+ uint16_t res_program_info_length;
+ struct PMT_stream s;
};
@@ -135,7 +137,7 @@ read_timeout(int fd, void *buf, size_t count, int timeout_ms) {
if(ret < 0)
return errno;
if(ret == 0) { // timeout
- fprintf(stderr, "ttxtsubs: Service Information read: timeout!\n");
+ esyslog("ttxtsubs: Service Information read: timeout!");
return -1;
}
@@ -187,7 +189,7 @@ static int CollectSections(int card_no, int pid, int table_id, char **sects, int
struct sect_header *h;
int i;
- if((start_time + 5) < time(NULL)) {
+ if((start_time + 1) < time(NULL)) {
ret = -1;
done = 1;
break;
@@ -204,7 +206,7 @@ static int CollectSections(int card_no, int pid, int table_id, char **sects, int
h = (struct sect_header *) p;
if(n != ((ntohs(h->syntax_len) & 0xfff) + 3)) {
- fprintf(stderr, "bad section length: %x / %x!\n", n, ntohs(h->syntax_len) & 0xfff);
+ esyslog("ttxtsubs: bad section length: %x / %x!\n", n, ntohs(h->syntax_len) & 0xfff);
continue;
}
@@ -354,7 +356,7 @@ static void addpageinfo(struct ttxtinfo *info, uint16_t pid, struct ttxt_descr *
uint8_t mag = pa->mag;
if(mag == 0)
mag = 8;
- fprintf(stderr, "Warning: Remapped page number %01x%02x to %01x%02x!\n",
+ esyslog("ttxtsubs: Warning: Remapped page number %01x%02x to %01x%02x!\n",
mag, pa->page, mag, newpage);
pa->page = newpage;
}
@@ -462,16 +464,12 @@ static int FindTtxtInfoInPMT(int card_no, int pid, int vpid, struct ttxtinfo *in
}
-typedef std::map < int, struct ttxtinfo > cCache;
-
-static cCache gCache;
-
/*
* find the ttxt_info in the PMT via the PAT, try first with the SID
* and if that fails with the VPID
* return <> 0 on error;
*/
-int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct ttxtinfo *info)
+int GetTtxtInfo(int card_no, const cChannel *c, struct ttxtinfo *info)
{
int ret = -1;
char *patsects[256];
@@ -484,13 +482,51 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
memset((char *) info, 0, sizeof(*info));
- cCache::iterator iter;
- iter = gCache.find(channel);
- if(iter != gCache.end()) {
- DupTtxtInfo(&iter->second, info);
- ret = 0;
- return ret;
+#if 1
+ // <manual page selection patch>
+ cTtxtSubsChannelSetting *cs =
+ TtxtSubsChannelSettings.Get(c);
+
+ if (cs && cs->PageMode() == PAGE_MODE_MANUAL) {
+ struct ttxt_descr descr;
+
+ if (cs->PageNumber() > 0) {
+ int temp = cs->PageNumber();
+ if (temp>=800) temp-=800;
+ char langs[MAXLANGUAGES][2][4];
+ char hi[MAXLANGUAGES][2];
+ //put as the first language the first one configured,
+ //so that FindSubs will later accept it
+ memcpy(langs,globals.languages(),sizeof(langs));
+ memcpy(hi,globals.hearingImpaireds(),sizeof(hi));
+ for (i = 0; i < MAXLANGUAGES; i++) {
+ for (j = 0; j < 2 ; j++) {
+ if (!langs[i][j][0]) continue;
+
+ descr.d[0].lang[0] = langs[i][j][0];
+ descr.d[0].lang[1] = langs[i][j][1];
+ descr.d[0].lang[2] = langs[i][j][2];
+ if (hi[i][j])
+ descr.d[0].type_mag = (TTXT_SUBTITLE_HEARING_IMPAIRED_PAGE << 3) + (temp / 100);
+ else
+ descr.d[0].type_mag = (TTXT_SUBTITLE_PAGE << 3) + (temp / 100);
+
+ temp = temp % 100;
+ descr.d[0].page_no = ((temp / 10) << 4) + (temp % 10);
+
+ addpageinfo(info, c->Tpid(), &descr, 0);
+ return 0;
+ }
+ }
+ //no language configured
+ return -1;
+ }
}
+ if (cs && cs->PageMode() == PAGE_MODE_DISABLED) {
+ return -1;
+ }
+ // </manual page selection patch>
+#endif
for(retry = 0; retry <= 1 && !foundinfo; retry++) { // XXX retry two times due to flaky pat scanning with hw_sections=0
@@ -505,7 +541,7 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
if(ret)
goto bail;
- if(sid != 0) {
+ if(c->Sid() != 0) {
int found;
for(i = 0, found = 0; i < numsects && !found; i++) {
@@ -520,7 +556,7 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
if(pno == 0)
continue; // network pid
- if(pno == sid) {
+ if(pno == c->Sid()) {
pmt_pid = ntohs(s->d[j].res_PMTPID) & 0x1fff;
found = 1;
}
@@ -533,7 +569,7 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
ret = FindTtxtInfoInPMT(card_no, pmt_pid, 0, info, &foundinfo);
} else {
// SID not found, try searching VID in all SIDS
- if(vpid != 0) {
+ if(c->Vpid() != 0) {
int done;
for(i = 0, done = 0; i < numsects && !done; i++) {
int numdescrs;
@@ -550,7 +586,7 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
pmt_pid = ntohs(s->d[j].res_PMTPID) & 0x1fff;
// printf("GetTtxtInfo C pmt_pid: %d, vpid: %d\n", pmt_pid, vpid); // XXXX
- ret = FindTtxtInfoInPMT(card_no, pmt_pid, vpid, info, &foundinfo);
+ ret = FindTtxtInfoInPMT(card_no, pmt_pid, c->Vpid(), info, &foundinfo);
if(ret) {
done = 1;
}
@@ -563,12 +599,6 @@ int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct tt
FreeSects(patsects);
}
-
- if(foundinfo || (ret == 0 && retry == 2)) {
- struct ttxtinfo info2;
- DupTtxtInfo(info, &info2);
- gCache[channel] = info2;
- }
bail:
return ret;
@@ -602,7 +632,7 @@ void DupTtxtInfo(struct ttxtinfo *in, struct ttxtinfo *out)
}
-struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno)
+struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno, char *lang)
{
struct ttxtpidinfo *foundPI = NULL;
int foundChoise = 1000;
@@ -621,6 +651,7 @@ struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno)
foundChoise = ch;
*pid = info->p[i].pid;
*pageno = info->p[i].i[j].mag * 0x100 + info->p[i].i[j].page;
+ strncpy(lang, info->p[i].i[j].lang, 3);
foundPI = &(info->p[i]);
}
}
@@ -632,16 +663,16 @@ struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno)
}
if(info->pidcount == 0)
- fprintf(stderr, "ttxtsubs: No teletext subtitles on channel.\n");
+ isyslog("ttxtsubs: No teletext subtitles on channel.");
else {
- fprintf(stderr, "ttxtsubs: Wanted subtitle language(s) not found on channel, available languages:\n");
+ isyslog("ttxtsubs: Wanted subtitle language(s) not found on channel, available languages:");
for(int i = 0; i < info->pidcount; i++) {
for(int j = 0; j < info->p[i].pagecount; j++) {
int page = info->p[i].i[j].mag * 0x100 + info->p[i].i[j].page;
int type = info->p[i].i[j].type;
if(page < 0x100)
page += 0x800;
- fprintf(stderr, " %03x: %c%c%c %s\n", page, info->p[i].i[j].lang[0],
+ isyslog("ttxtsubs: %03x: %c%c%c %s", page, info->p[i].i[j].lang[0],
info->p[i].i[j].lang[1], info->p[i].i[j].lang[2],
type == TTXT_INITIAL_PAGE ? "(Initial Page (The teletext start page, not a subtitles page!))" :
type == TTXT_SUBTITLE_PAGE ? "(Subtitles)" :
@@ -658,13 +689,6 @@ struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno)
}
-void
-ClearSICache(void)
-{
- gCache.clear();
-}
-
-
#if 0
int XX_GetTtxtSubtitleInfo(uint16_t pid, int card_no, struct ttxtinfo *info)
{
@@ -683,7 +707,7 @@ int XX_GetTtxtSubtitleInfo(uint16_t pid, int card_no, struct ttxtinfo *info)
return len;
if(len != ((ntohs(p->syntax_len) & 0xfff) + 3)) {
- fprintf(stderr, "bad lengt: %x / %x!\n", len, ntohs(p->syntax_len));
+ dprint("bad length: %x / %x!\n", len, ntohs(p->syntax_len));
return -1;
}
diff --git a/siinfo.h b/siinfo.h
index a3422f6..2956a57 100644
--- a/siinfo.h
+++ b/siinfo.h
@@ -30,11 +30,9 @@ struct ttxtinfo {
* and if that fails with the VPID
* return <> 0 on error;
*/
-int GetTtxtInfo(int card_no, int channel, uint16_t sid, uint16_t vpid, struct ttxtinfo *info);
+int GetTtxtInfo(int card_no, const cChannel *c, struct ttxtinfo *info);
void FreeTtxtInfoData(struct ttxtinfo *info);
void DupTtxtInfo(struct ttxtinfo *in, struct ttxtinfo *out);
-struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno);
-
-void ClearSICache(void);
+struct ttxtpidinfo *FindSubs(struct ttxtinfo *info, int *pid, int *pageno, char *lang);
diff --git a/teletext-chars.h b/teletext-chars.h
index 995a43f..14b50de 100644
--- a/teletext-chars.h
+++ b/teletext-chars.h
@@ -64,6 +64,22 @@ uint8_t laG0_nat_opts[13][14] = {
{0, 'T', 'g', 'I', 'S', 'Ö', 'Ç', 'Ü', 'G', 'i', 's', 'ö', 'ç', 'ü'} // 12 - Turkish
};
+uint16_t laG0_nat_opts16[13][14] = {
+{0, '#', 'u', 'c', 't', 'z', 0xc3bd, 0xc3ad, 'r', 0xc3a9, 0xc3a1, 'e', 0xc3ba, 's' }, // 0 - Czech/Slovak
+{0, 0xc2a3, '$', '@', '-', 0xc2bd, '-', '|', '#', '-', 0xc2bc, '#', 0xc2be, 0xc3b7}, // 1 - English
+{0, '#', 0xc3b5, 'S', 0xc384, 0xc396, 'Z', 0xc39c, 0xc395, 's', 0xc3a4, 0xc3b6, 'z', 0xc3bc}, // 2 - Estonian
+{0, 0xc3a9, 0xc3af, 0xc3a0, 0xc3ab, 0xc3aa, 0xc3b9, 0xc3ae, '#', 0xc3a8, 0xc3a2, 0xc3b4, 0xc3bb, 0xc3a7}, // 3 - French
+{0, '#', '$', 0xc2a7, 0xc384, 0xc396, 0xc39c, '^', '_', 0xc2ba, 0xc3a4, 0xc3b6, 0xc3bc, 0xc39f}, // 4 - German
+{0, 0xc2a3, '$', 0xc3a9, 0xc2ba, 0xc3a7, '-', '|', '#', 0xc3b9, 0xc3a0, 0xc3b2, 0xc3a8, 0xc3ac}, // 5 - Italian
+{0, '#', '$', 'S', 'e', 'e', 'Z', 'c', 'u', 's', 'a', 'u', 'z', 'i' }, // 6 - Lettish/Lithuanian
+{0, '#', 'n', 'a', 'Z', 'S', 'L', 'c', 0xc3b3, 'e', 'z', 's', 'l', 'z' }, // 7 - Polish
+{0, 0xc3a7, '$', 'i', 0xc3a1, 0xc3a9, 0xc3ad, 0xc3b3, 0xc3ba, 0xc2bf, 0xc3bc, 0xc3b1, 0xc3a8, 0xc3a0}, // 8 - Portuguese/Spanish
+{0, '#', 0xc2a4, 'T', 0xc382, 'S', 'A', 0xc38e, 'i', 't', 0xc3a2, 's', 'a', 0xc3ae}, // 9 - Rumanian
+{0, '#', 0xc38b, 'C', 'C', 'Z', 'D', 'S', 0xc3ab, 'c', 'c', 'z', 'd', 's' }, // 10 - Serbian/Croation/Slovenian
+{0, '#', 0xc2a4, 0xc389, 0xc384, 0xc396, 0xc385, 0xc39c, '_', 0xc3a9, 0xc3a4, 0xc3b6, 0xc3a5, 0xc3bc}, // 11 - Swedish/Finnish/Hungarian
+{0, 'T', 'g', 'I', 'S', 0xc396, 0xc387, 0xc39c, 'G', 'i', 's', 0xc3b6, 0xc3a7, 0xc3bc} // 12 - Turkish
+};
+
/*
* Latin G2 Set
* ETSI EN 300 706 Table 37
@@ -72,9 +88,20 @@ uint8_t laG2_la1_table[] = {
'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
' ', '¡', '¢', '£', '$', '¥', '#', '§', '¤', '´', '"', '«', '-', '|', '-', '|',
-'°', '±', '²', '³', '×', 'µ', '¶', '·', '÷', '\'', '"', '»', '¼', '½', '¾', '¿',
+'°', '±', '²', '³', '×', 'µ', '¶', '·', '÷', '\'', '"', '»', '¼', '½', '¾', '¿',
' ', '`', '´', '^', '~', '-', '?', '·', '¨', '.', 'º', '¸', '_', '"', '?', '?',
'-', '¹', '®', '©', 'T', '?', 'C', 'p', '?', ' ', ' ', ' ', '?', '?', '?', '?',
'?', 'Æ', 'D', 'a', '?', '?', ' ', 'I', 'L', 'L', 'Ø', 'Ö', 'o', 'P', 'n', 'n',
'k', 'æ', 'd', 'd', 'h', 'i', 'i', 'l', 'l', 'ø', 'ö', 'ß', 'p', 't', 'n', '?'
};
+
+uint16_t laG2_la1_table16[] = {
+'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
+'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
+0xc2a0, 0xc2a1, 0xc2a2, 0xc2a3, '$', 0xc2a5, '#', 0xc2a7, 0xc2a4, 0xc2b4, '"', 0xc2ab, '-', '|', '-', '|',
+0xc2b0, 0xc2b1, 0xc2b2, 0xc2b3, 0xc397, 0xc2b5, 0xc2b6, 0xc2b7, 0xc3b7, '\'', '"', 0xc2bb, 0xc2bc, 0xc2bd, 0xc2be, 0xc2bf,
+' ', '`', 0xc2b4, '^', '~', '-', '?', 0xc2b7, 0xc2a8, '.', 0xc2ba, 0xc2b8, '_', '"', '?', '?',
+'-', 0xc2b9, 0xc2ae, 0xc2a9, 'T', '?', 'C', 'p', '?', ' ', ' ', ' ', '?', '?', '?', '?',
+'?', 0xc386, 'D', 'a', '?', '?', ' ', 'I', 'L', 'L', 0xc398, 0xc396, 'o', 'P', 'n', 'n',
+'k', 0xc3a6, 'd', 'd', 'h', 'i', 'i', 'l', 'l', 0xc3b8, 0xc3b6, 0xc39f, 'p', 't', 'n', '?'
+};
diff --git a/teletext.c b/teletext.c
index a99b7ec..e3e48f4 100644
--- a/teletext.c
+++ b/teletext.c
@@ -12,6 +12,7 @@
//#include <linux/dvb/dmx.h>
//#include <vdr/osd.h>
+#include <vdr/config.h>
#include "teletext.h"
#include "teletext-tables.h"
@@ -28,7 +29,7 @@ unsigned char unham(unsigned char a,unsigned char b)
c1=unhamtab[a];
c2=unhamtab[b];
// if ((c1|c2)&0x40)
-// fprintf(stderr,"bad ham!");
+// dprint("bad ham!");
return (c2<<4)|(0x0f&c1);
}
@@ -43,17 +44,17 @@ void ham8_4byte(uint8_t in, uint8_t *out)
if (1) { // XXX debug
int a;
if(unham(out[0], out[1]) != in) {
- fprintf(stderr, "ham8_4: 1 - result not correct %02x -> %02x %02x!\n", in, out[0], out[1]);
+ dprint("ham8_4: 1 - result not correct %02x -> %02x %02x!\n", in, out[0], out[1]);
}
a = unhamtab[out[0]];
a ^= 0x80;
if(a & 0xf0 || (a != (in & 0xF))) {
- fprintf(stderr, "ham8_4: 2 - result not correct %02x -> %02x %02x, %02x!\n", in, out[0], out[1], a);
+ dprint("ham8_4: 2 - result not correct %02x -> %02x %02x, %02x!\n", in, out[0], out[1], a);
}
a = unhamtab[out[1]];
a ^= 0x80;
if(a & 0xf0 || (a != (in >> 4))) {
- fprintf(stderr, "ham8_4: 3 - result not correct %02x -> %02x %02x, %02x!\n", in, out[0], out[1], a);
+ dprint("ham8_4: 3 - result not correct %02x -> %02x %02x, %02x!\n", in, out[0], out[1], a);
}
}
}
@@ -108,7 +109,7 @@ uint8_t ham8_4nibble(uint8_t in)
* Also strips parity
*/
-uint8_t ttxt_laG0_la1_char(int Gtriplet, int natopts, uint8_t inchar)
+uint16_t ttxt_laG0_la1_char(int Gtriplet, int natopts, uint8_t inchar)
{
int no = laG0_nat_opts_lookup[Gtriplet & 0xf][natopts & 0x7];
uint8_t c = inchar & 0x7f;
@@ -118,14 +119,21 @@ uint8_t ttxt_laG0_la1_char(int Gtriplet, int natopts, uint8_t inchar)
if(!laG0_nat_replace_map[c])
return c;
else
+#if defined(APIVERSNUM) && APIVERSNUM < 10503
return laG0_nat_opts[no][laG0_nat_replace_map[c]];
+#else
+ if (cCharSetConv::SystemCharacterTable())
+ return laG0_nat_opts[no][laG0_nat_replace_map[c]];
+ else
+ return laG0_nat_opts16[no][laG0_nat_replace_map[c]];
+#endif
}
/*
* Map Latin G2 teletext characters into a ISO-8859-1 approximation.
* Trying to use similar looking or similar meaning characters.
*/
-uint8_t ttxt_laG2_la1_char(uint8_t inchar)
+uint16_t ttxt_laG2_la1_char(uint8_t inchar)
{
return laG2_la1_table[inchar & 0x7f];
}
diff --git a/teletext.h b/teletext.h
index ad1c536..e058132 100644
--- a/teletext.h
+++ b/teletext.h
@@ -5,14 +5,14 @@
#define PACK __attribute__ ((__packed__))
-struct ttxt_pes_header {
+struct PACK ttxt_pes_header {
uint8_t start[3];
- uint8_t stream_id PACK;
- uint16_t len PACK;
+ uint8_t stream_id;
+ uint16_t len;
// private_stream_1 packets (and others)
- uint8_t flags[2] PACK;
- uint8_t header_len PACK;
+ uint8_t flags[2];
+ uint8_t header_len;
};
@@ -23,19 +23,19 @@ enum {
};
#define TTXT_LINE_NO(x) ((x).par_loff & 0x1f)
-struct ttxt_data_field {
- uint8_t data_unit_id PACK;
- uint8_t data_unit_length PACK;
- uint8_t par_loff PACK;
- uint8_t framing_code PACK;
- uint8_t mag_addr_ham[2] PACK;
- uint8_t data[40] PACK;
+struct PACK ttxt_data_field {
+ uint8_t data_unit_id;
+ uint8_t data_unit_length;
+ uint8_t par_loff;
+ uint8_t framing_code;
+ uint8_t mag_addr_ham[2];
+ uint8_t data[40];
};
-struct ttxt_pes_data_field {
- uint8_t data_identifier PACK;
- struct ttxt_data_field d[1] PACK;
+struct PACK ttxt_pes_data_field {
+ uint8_t data_identifier;
+ struct ttxt_data_field d[1];
};
@@ -80,13 +80,13 @@ int parity(uint8_t x);
* inchar - 7 bits = characted to remap
* Also strips parity
*/
-uint8_t ttxt_laG0_la1_char(int Gtriplet, int natopts, uint8_t inchar);
+uint16_t ttxt_laG0_la1_char(int Gtriplet, int natopts, uint8_t inchar);
/*
* Map Latin G2 teletext characters into a ISO-8859-1 approximation.
* Trying to use similar looking or similar meaning characters.
*/
-uint8_t ttxt_laG2_la1_char(uint8_t inchar);
+uint16_t ttxt_laG2_la1_char(uint8_t inchar);
diff --git a/ttxtsubs.c b/ttxtsubs.c
index 7a332d1..aafccfb 100644
--- a/ttxtsubs.c
+++ b/ttxtsubs.c
@@ -10,7 +10,9 @@
#include <vdr/status.h>
#include <vdr/vdrttxtsubshooks.h>
#include <vdr/menuitems.h>
+#include <vdr/thread.h>
#include <vdr/config.h>
+#include <semaphore.h>
#define TIMEMEASURE 0
#if TIMEMEASURE
@@ -31,39 +33,54 @@
#include "utils.h"
#include "siinfo.h"
#include "ttxtsubs.h"
+#include "ttxtsubspagemenu.h"
+#include "ttxtsubschannelsettings.h"
-static const char *VERSION = "0.0.5";
-static const char *DESCRIPTION = "Teletext subtitles";
+#if defined(APIVERSNUM) && APIVERSNUM < 10400
+#error "This version of ttxtsubs only works with vdr version >= 1.4.0!"
+#endif
+
+#ifndef trNOOP
+#define trNOOP(s) (s)
+#endif
+#ifndef trVDR
+#define trVDR(s) tr(s)
+#endif
+
+static const char *VERSION = "0.0.5-RRE";
+static const char *DESCRIPTION = trNOOP("Teletext subtitles");
cTtxtsubsConf globals;
+cTtxtSubsChannelSettings TtxtSubsChannelSettings;
// ISO 639-2 language codes in VDR order
// XXX should be replaced with something that allows for other languages and for real language names!
// <http://www.avio-systems.com/dtvcc/iso639-2.txt>
// <http://www.loc.gov/standards/iso639-2/englangn_ascii.html>
-char *gLanguages[][2] = {
- "","", //None
- "eng","", //English
- "deu","ger", //Deutsch
- "slv","", //Slovenian
- "ita","", //Italian
- "dut","nld", //Dutch
- "por","", //Portuguese
- "fre","fra", //French
- "nor","", //Norwegian
- "fin","suo", //Finnish
- "pol","", //Polish
- "spa","esl", //Spanish
- "gre","ell", //Greek
- "swe","sve", //Swedish
- "ron","rum", //Romanian
- "hun","", //Hungarian
- "cat","", //Catalanian
-#if VDRVERSNUM >= 10300
- "rus","", //Russian
-#endif
- // Not in translations!
- "dan","" //Danish
+const char *gLanguages[][2] = {
+ {"",""}, //None
+ {"eng",""}, //English
+ {"deu","ger"}, //Deutsch
+ {"slv",""}, //Slovenian
+ {"ita",""}, //Italian
+ {"dut","nld"}, //Dutch
+ {"por",""}, //Portuguese
+ {"fre","fra"}, //French
+ {"nor",""}, //Norwegian
+ {"fin","suo"}, //Finnish
+ {"pol",""}, //Polish
+ {"spa","esl"}, //Spanish
+ {"gre","ell"}, //Greek
+ {"swe","sve"}, //Swedish
+ {"ron","rum"}, //Romanian
+ {"hun",""}, //Hungarian
+ {"cat",""}, //Catalanian
+ {"rus",""}, //Russian
+ {"hrv","scr"}, //Croatian
+ {"est",""}, //Estonian
+ {"dan",""}, //Danish
+ {"cze","ces"}, //Czech
+ {"tur",""} //Turkish
};
const char *gLanguageNames[] = {
"-",
@@ -78,20 +95,21 @@ const char *gLanguageNames[] = {
"suomi", // this is not a typo - it's really lowercase!
"Polski",
"Español",
- "Ellinika",
+ "ÅëëçíéêÜ",
"Svenska",
"Romaneste",
"Magyar",
"Català",
-#if VDRVERSNUM >= 10300
"ÀãááÚØÙ",
-#endif
- // Not in translations!
- "Dansk"
+ "Hrvatski",
+ "Eesti",
+ "Dansk",
+ "Èesky",
+ "Türkçe"
};
int gNumLanguages = sizeof(gLanguages) / sizeof(gLanguages[0]);
-class cPluginTtxtsubs : public cPlugin, public cStatus, public cVDRTtxtsubsHookListener {
+class cPluginTtxtsubs : public cPlugin, public cStatus, public cVDRTtxtsubsHookListener, public cThread {
public:
cPluginTtxtsubs(void);
virtual ~cPluginTtxtsubs();
@@ -102,6 +120,7 @@ public:
virtual const char *CommandLineHelp(void);
virtual bool ProcessArgs(int argc, char *argv[]);
virtual bool Start(void);
+ virtual void Stop(void);
virtual void Housekeeping(void);
virtual const char *MainMenuEntry(void);
virtual cOsdObject *MainMenuAction(void);
@@ -111,11 +130,7 @@ public:
// -- cStatus
protected:
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber);
- virtual void Replaying(const cControl *Control, const char *Name);
- // The given player control has started replaying Name. Name is the name of the
- // recording, without any directory path. In case of a player that can't provide
- // a name, Name can be a string that identifies the player type (like, e.g., "DVD").
- // If Name is NULL, the replay has ended.
+ virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On);
// virtual void OsdClear(void) { ShowTtxt(); }
// virtual void OsdTitle(const char *Title) { HideTtxt(); }
// virtual void OsdStatusMessage(const char *Message) { HideTtxt(); }
@@ -131,9 +146,12 @@ public:
virtual void PlayerTeletextData(uint8_t *p, int length);
virtual cTtxtSubsRecorderBase *NewTtxtSubsRecorder(cDevice *dev, const cChannel *ch);
+ // -- cThread
+ void Action(void);
+
// -- internal
private:
- void StartTtxtLive(const cDevice *Device, int pid, int page);
+ void StartTtxtLive(const cDevice *Device, tChannelID chnid, int pid, int page);
void StartTtxtPlay(int page);
void StopTtxt(void);
void ShowTtxt(void);
@@ -149,6 +167,12 @@ private:
// ugly hack for now
int mPage;
+ // wait for channel switch
+ sem_t chswitchwait;
+ cMutex getchmutex;
+ int switchChannel;
+ int lastc;
+ const cDevice *switchDevice;
};
class cMenuSetupTtxtsubs : public cMenuSetupPage {
@@ -163,6 +187,10 @@ class cMenuSetupTtxtsubs : public cMenuSetupPage {
int mLangHI[MAXLANGUAGES];
int mSavedFrenchSpecial;
int mDoStore;
+ int mTransparency;
+ int mRed;
+ int mGreen;
+ int mBlue;
cTtxtsubsConf mConf;
};
@@ -178,6 +206,8 @@ cPluginTtxtsubs::cPluginTtxtsubs(void)
memset(mOldLanguage, 0, 4);
strncpy(globals.mLanguages[0][0], "unk", 4);
+ sem_init(&chswitchwait,0,0);
+ lastc=0;
}
cPluginTtxtsubs::~cPluginTtxtsubs()
@@ -201,8 +231,12 @@ bool cPluginTtxtsubs::Start(void)
{
// Start any background activities the plugin shall perform.
- RegisterI18n(Phrases);
+ cThread::Start();
+ TtxtSubsChannelSettings.Load(AddDirectory(ConfigDirectory("ttxtsubs"),"channelsettings.dat"));
+#if defined(APIVERSNUM) && APIVERSNUM < 10507
+ RegisterI18n(Phrases);
+#endif
if(!memcmp(globals.mLanguages[0][0], "unk", 3)) {
// no language found in setup
if(strlen(mOldLanguage)) {
@@ -225,6 +259,7 @@ bool cPluginTtxtsubs::Start(void)
globals.mHearingImpaireds[0][1] = mOldHearingImpaired;
} else {
// get lang from OSD lang
+#if defined(APIVERSNUM) && APIVERSNUM < 10507
int n = Setup.OSDLanguage + 1;
if(n > gNumLanguages) {
strncpy(globals.mLanguages[0][0], "eng", 4);
@@ -234,6 +269,10 @@ bool cPluginTtxtsubs::Start(void)
strncpy(globals.mLanguages[0][1], gLanguages[n][1], 4);
globals.mLanguages[0][1][3] = '\0';
}
+#else
+ strncpy(globals.mLanguages[0][0], Setup.OSDLanguage, 4);
+ globals.mLanguages[0][0][3] = '\0';
+#endif
}
}
@@ -244,6 +283,12 @@ bool cPluginTtxtsubs::Start(void)
return true;
}
+void cPluginTtxtsubs::Stop(void)
+{
+ cThread::Cancel();
+ StopTtxt();
+}
+
void cPluginTtxtsubs::Housekeeping(void)
{
// Perform any cleanup or other regular tasks.
@@ -253,7 +298,7 @@ const char *cPluginTtxtsubs::MainMenuEntry(void)
{
switch(globals.mMainMenuEntry) {
case 1:
- if(globals.mDoDisplay)
+ if(globals.mRealDoDisplay)
return tr("Hide teletext subtitles");
else
return tr("Display teletext subtitles");
@@ -263,7 +308,7 @@ const char *cPluginTtxtsubs::MainMenuEntry(void)
else
return tr("Position Teletext Subtitles for Letterbox");
case 3:
- return tr("Teletext Subtitles");
+ return tr("Page Selection");
default:
return NULL;
}
@@ -277,13 +322,13 @@ cOsdObject *cPluginTtxtsubs::MainMenuAction(void)
switch(globals.mMainMenuEntry) {
case 1:
- globals.mDoDisplay = globals.mDoDisplay ? 0 : 1;
+ globals.mRealDoDisplay = globals.mRealDoDisplay ? 0 : 1;
return NULL;
case 2:
globals.mBottomLB = globals.mBottomLB ? 0 : 1;
return NULL;
case 3:
- return new cMenuSetupTtxtsubs(this, 1);
+ return new cTtxtsubsPageMenu();
default:
return NULL;
}
@@ -298,16 +343,23 @@ cMenuSetupPage *cPluginTtxtsubs::SetupMenu(void)
bool cPluginTtxtsubs::SetupParse(const char *Name, const char *Value)
{
- if(!strcasecmp(Name, "Display")) globals.mDoDisplay = atoi(Value);
+ if(!strcasecmp(Name, "Display")) { globals.mDoDisplay = atoi(Value); globals.mRealDoDisplay=globals.mDoDisplay; }
else if(!strcasecmp(Name, "Record")) globals.mDoRecord = atoi(Value);
+ else if(!strcasecmp(Name, "LiveDelay")) globals.mLiveDelay = atoi(Value);
+ else if(!strcasecmp(Name, "ReplayDelay")) globals.mReplayDelay = atoi(Value);
else if(!strcasecmp(Name, "MainMenuEntry")) globals.mMainMenuEntry = atoi(Value);
else if(!strcasecmp(Name, "TextPos")) globals.mTextPos = atoi(Value);
else if(!strcasecmp(Name, "BottomLB")) globals.mBottomLB = atoi(Value);
else if(!strcasecmp(Name, "BottomAdj")) globals.mBottomAdj = atoi(Value);
else if(!strcasecmp(Name, "FrenchSpecial")) globals.mFrenchSpecial = atoi(Value);
else if(!strcasecmp(Name, "LineSpacing")) globals.mLineSpacing = atoi(Value);
+ else if(!strcasecmp(Name, "DvbSources")) globals.mDvbSources = atoi(Value);
+#if defined(APIVERSNUM) && APIVERSNUM >= 10503
+ else if(!strcasecmp(Name, "FontSize")) globals.mFontSize = atoi(Value);
+#endif
else if(!strcasecmp(Name, "FgColor")) globals.mFgColor = atoi(Value);
else if(!strcasecmp(Name, "BgColor")) globals.mBgColor = atoi(Value);
+ else if(!strcasecmp(Name, "CustomColor")) globals.mCustomColor = atoi(Value);
else if(!strcasecmp(Name, "Languages")) parseLanguages(Value);
else if(!strcasecmp(Name, "HearingImpaireds")) parseHIs(Value);
// Handle old settings
@@ -319,51 +371,113 @@ bool cPluginTtxtsubs::SetupParse(const char *Name, const char *Value)
return true;
}
+void cPluginTtxtsubs::Action(void)
+{
+ while(true) {
+ sem_wait(&chswitchwait);
+ int cn;
+ const cDevice *dev;
+ getchmutex.Lock();
+ cn=switchChannel;
+ dev=switchDevice;
+ getchmutex.Unlock();
+ if (cn!=lastc) {
+ StopTtxt();
+ lastc=0;
+ cChannel *c = Channels.GetByNumber(cn);
+ if(c) {
+ //int manual_page = TtxtSubsChannelSettings.Page(c->GetChannelID());
+ //if (manual_page>0) {
+ // printf("ttxtsubs: manual page %03x selected\n", manual_page);
+ // if (c->Tpid()) StartTtxtLive(dev, c->GetChannelID(), c->Tpid(), manual_page);
+ //} else if(manual_page==0) {
+ struct ttxtinfo info;
+ int pid, page;
+ char lang[4] = "";
+ bool geterror=true;
+ if((globals.dvbSources() == 0) || ((globals.dvbSources() == 1) && c->IsSat()) || ((globals.dvbSources() == 2) && c->IsTerr()) || ((globals.dvbSources() == 3) && c->IsCable()))
+ {
+ int tries=0; //sometimes it doesn't find subtitles even if they're there
+ //the problem is that while the dish is moving it's picking the signal
+ //from a different satellite, so what really should be done is to
+ //check if the dish is positioned
+ while(tries<=2) {
+ while(geterror=GetTtxtInfo(dev->ActualDevice()->CardIndex(), c, &info)) {
+ esyslog("ttxtsubs: Error: GetTtxtInfo failed!");
+ cCondWait::SleepMs(1000);
+ getchmutex.Lock();
+ bool changed=(cn!=switchChannel);
+ getchmutex.Unlock();
+ if (changed) {
+ esyslog("ttxtsubs: Channel changed while looking for teletext info");
+ break;
+ }
+ }
+ if (!geterror) {
+ if(FindSubs(&info, &pid, &page, lang)) {
+ //dprint("CHANNELSWITCH, pid: %d page: %x\n", pid, page);
+ mPage = page; // XXX remember this for playback (temporary hack)!
+ for(int i = 0; i < gNumLanguages; i++) {
+ if(!memcmp(lang, gLanguages[i][0], 3) ||
+ !memcmp(lang, gLanguages[i][1], 3)) {
+ globals.mI18nLanguage = i - 1;
+ }
+ }
+#if defined(APIVERSNUM) && APIVERSNUM < 10507
+ if(globals.mI18nLanguage < 0 || globals.mI18nLanguage >= I18nNumLanguages)
+#else
+ if(globals.mI18nLanguage < 0 || globals.mI18nLanguage >= I18nLanguages()->Size())
+#endif
+ globals.mI18nLanguage = 0; // default to iso8859-1 if no predefined charset
+ StartTtxtLive(dev, c->GetChannelID(), pid, page);
+ FreeTtxtInfoData(&info);
+ break;
+ } else { //!FindSubs
+ FreeTtxtInfoData(&info);
+ tries++;
+ }
+ } else break; //if(!geterror)..
+ } //while(tries<=2)
+ }
+ lastc=cn;
+ //}
+ }
+ }
+ }
+}
+
void cPluginTtxtsubs::ChannelSwitch(const cDevice *Device, int ChannelNumber)
{
#if TIMEMEASURE
struct timeval tv, tv2;
gettimeofday(&tv, NULL);
#endif
- dprint("cPluginTtxtsubs::ChannelSwitch(devicenr: %d, channelnr: %d) - mDispl: %x\n",
- Device->DeviceNumber(), ChannelNumber, mDispl); // XXX
+ //dprint("cPluginTtxtsubs::ChannelSwitch(devicenr: %d, channelnr: %d) - mDispl: %x\n", Device->DeviceNumber(), ChannelNumber, mDispl); // XXX
- if(Device->IsPrimaryDevice()) {
+ if(Device->IsPrimaryDevice() && !Device->Replaying()) {
if(ChannelNumber) {
- cChannel *c = Channels.GetByNumber(ChannelNumber);
- if(c) {
- struct ttxtinfo info;
- int pid, page;
-
- if(GetTtxtInfo(Device->ActualDevice()->CardIndex(), ChannelNumber, c->Sid(), c->Vpid(), &info)) {
- fprintf(stderr, "ttxtsubs: Error: GetTtxtInfo failed!\n");
- } else {
- if(FindSubs(&info, &pid, &page)) {
- //fprintf(stderr, "CHANNELSWITCH, pid: %d page: %x\n", pid, page);
- mPage = page; // XXX remember this for playback (temporary hack)!
- StartTtxtLive(Device, pid, page);
- }
- FreeTtxtInfoData(&info);
- }
- }
- } else
- StopTtxt();
+ getchmutex.Lock();
+ switchChannel=ChannelNumber;
+ switchDevice=Device;
+ getchmutex.Unlock();
+ sem_post(&chswitchwait);
+ }
}
#if TIMEMEASURE
gettimeofday(&tv2, NULL);
TIMEVALSIMPL(tv, tv2);
// tv2.tv_sec - tv.tv_sec + 1000000 * (tv2.tv_usec - tv.tv_usec);
- fprintf(stderr, "ttxtsubs: Channel switch time: %d.%06d s\n",
+ isyslog("ttxtsubs: Channel switch time: %d.%06d s",
tv2.tv_sec - tv.tv_sec, tv2.tv_usec - tv.tv_usec);
#endif
}
-void cPluginTtxtsubs::Replaying(const cControl *Control, const char *Name)
+void cPluginTtxtsubs::Replaying(const cControl *Control, const char *Name, const char *FileName, bool On)
{
- dprint("cPluginTtxtsubs::Replaying\n"); // XXX
-
+ //dprint("cPluginTtxtsubs::Replaying\n"); // XXX
StopTtxt();
- StartTtxtPlay(mPage);
+ if(On)
+ StartTtxtPlay(mPage);
// XXX this page number is just a fallback for old recordings which
// don't have a index page
}
@@ -373,7 +487,7 @@ void cPluginTtxtsubs::PlayerTeletextData(uint8_t *p, int length)
cTtxtSubsPlayer *r = dynamic_cast<cTtxtSubsPlayer *>(mDispl);
if(!r) {
- fprintf(stderr, "ttxtsubs: ERROR: not a cTtxtSubsPlayer!\n");
+ esyslog("ttxtsubs: ERROR: not a cTtxtSubsPlayer!");
return;
}
@@ -391,38 +505,38 @@ cTtxtSubsRecorderBase *cPluginTtxtsubs::NewTtxtSubsRecorder(cDevice *dev, const
// -- internal
-void cPluginTtxtsubs::StartTtxtLive(const cDevice *Device, int pid, int page)
+void cPluginTtxtsubs::StartTtxtLive(const cDevice *Device, tChannelID chnid, int pid, int page)
{
- dprint("cPluginTtxtsubs::StartTtxtLive(devicenr: %d, pid: %d, page: %03x)\n",
- Device->DeviceNumber(), pid, page); // XXX
+ //dprint("cPluginTtxtsubs::StartTtxtLive(devicenr: %d, pid: %d, page: %03x)\n",
+ // Device->DeviceNumber(), pid, page); // XXX
if(!mDispl) {
cTtxtSubsLiveReceiver *r;
//dprint("teletext subtitles started on pid %d\n", pid);
- mDispl = r = new cTtxtSubsLiveReceiver(pid, page); // takes 0.01-0.015 s
+ mDispl = r = new cTtxtSubsLiveReceiver(chnid, pid, page); // takes 0.01-0.015 s
if(!cDevice::PrimaryDevice()->ActualDevice()->AttachReceiver(r))
// takes 0.02-0.04 s on a full featured card
- fprintf(stderr, "ttxtsubs: Error: AttachReceiver failed!\n"); //
+ esyslog("ttxtsubs: Error: AttachReceiver failed!");
ShowTtxt();
} else
- fprintf(stderr, "ttxtsubs: Error: StartTtxtLive called when already started!\n");
+ esyslog("ttxtsubs: Error: StartTtxtLive called when already started!");
}
void cPluginTtxtsubs::StartTtxtPlay(int backup_page)
{
- dprint("cPluginTtxtsubs::StartTtxtPlay\n");
+ //dprint("cPluginTtxtsubs::StartTtxtPlay\n");
if(!mDispl) {
- dprint("ttxtsubs: teletext subtitles replayer started with initial page %03x\n", backup_page);
+ isyslog("ttxtsubs: teletext subtitles replayer started with initial page %03x", backup_page);
mDispl = new cTtxtSubsPlayer(backup_page);
ShowTtxt();
} else
- fprintf(stderr, "ttxtsubs: Error: StartTtxtPlay called when already started!\n");
+ esyslog("ttxtsubs: Error: StartTtxtPlay called when already started!");
}
void cPluginTtxtsubs::StopTtxt(void)
{
- dprint("cPluginTtxtsubs::StopTtxt\n");
+ //dprint("cPluginTtxtsubs::StopTtxt\n");
if(mDispl) {
cTtxtSubsDisplayer *d = mDispl;
@@ -434,7 +548,7 @@ void cPluginTtxtsubs::StopTtxt(void)
void cPluginTtxtsubs::ShowTtxt(void)
{
- if(globals.mDoDisplay)
+ if(globals.mRealDoDisplay)
if(mDispl)
mDispl->ShowDisplay();
}
@@ -504,12 +618,14 @@ cMenuSetupTtxtsubsLanguages::cMenuSetupTtxtsubsLanguages(cPluginTtxtsubs *ttxtsu
void cMenuSetupTtxtsubsLanguages::Store(void)
{
- fprintf(stderr, "cMenuSetupTtxtsubsLanguages::Store\n");
+ //dprint("cMenuSetupTtxtsubsLanguages::Store\n");
}
-const char * mainMenuAlts[4] = {NULL, NULL, NULL, NULL};
+const char * mainMenuAlts[5] = {NULL, NULL, NULL, NULL, NULL};
const char * textPosAlts[4];
+const char * dvbSources[5];
const char * textColors[12];
+const char * const colorValues[17] = {"#00", "#11", "#22", "#33", "#44", "#55", "#66", "#77", "#88", "#99", "#AA", "#BB", "#CC", "#DD", "#EE", "#FF", NULL};
cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
:
@@ -517,19 +633,27 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
mDoStore(doStore),
mConf(globals)
{
+ char *buf = NULL;
//static char *mainMenuAlts[] = {"off", "Display on/off", "4:3/Letterbox", "This menu"};
// can't get it to store changes in file
if(mainMenuAlts[0] == NULL) {
- mainMenuAlts[0] = tr("off");
+ mainMenuAlts[0] = trVDR("off");
mainMenuAlts[1] = tr("Display on/off");
mainMenuAlts[2] = tr("4:3/Letterbox");
- mainMenuAlts[3] = NULL;
+ mainMenuAlts[3] = tr("Page Mode");
+ mainMenuAlts[4] = NULL;
textPosAlts[0] = tr("Left");
textPosAlts[1] = tr("Center");
textPosAlts[2] = tr("Right");
textPosAlts[3] = NULL;
+ dvbSources[0] = tr("All");
+ dvbSources[1] = tr("Only DVB-S");
+ dvbSources[2] = tr("Only DVB-T");
+ dvbSources[3] = tr("Only DVB-C");
+ dvbSources[4] = NULL;
+
textColors[0] = tr("Black");
textColors[1] = tr("White");
textColors[2] = tr("Red");
@@ -538,14 +662,16 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
textColors[5] = tr("Magenta");
textColors[6] = tr("Blue");
textColors[7] = tr("Cyan");
- textColors[8] = tr("Grey");
+ textColors[8] = tr("Custom");
textColors[9] = tr("Transparent");
- textColors[10] = tr("Background");
+ textColors[10] = tr("Grey");
textColors[11] = NULL;
}
const int numTextPosAlts = sizeof(textPosAlts) / sizeof(textPosAlts[0]) - 1;
const int numMainMenuAlts = sizeof(mainMenuAlts) / sizeof(mainMenuAlts[0]) - 1;
+ const int numDvbSources = sizeof(dvbSources) / sizeof(dvbSources[0]) - 1;
const int numTextColors = sizeof(textColors) / sizeof(textColors[0]) - 1;
+ const int numColorValues = sizeof(colorValues) / sizeof(colorValues[0]) - 1;
mSavedFrenchSpecial = mConf.mFrenchSpecial;
@@ -562,8 +688,10 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
}
}
- Add(new cMenuEditBoolItem(tr("Display Subtitles"), &mConf.mDoDisplay, tr("no"), tr("yes")));
- Add(new cMenuEditBoolItem(tr("Record Subtitles"), &mConf.mDoRecord, tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("Display Subtitles"), &mConf.mDoDisplay));
+ Add(new cMenuEditBoolItem(tr("Record Subtitles"), &mConf.mDoRecord));
+ Add(new cMenuEditIntItem(tr("Live Delay"), &mConf.mLiveDelay, 0, 5000));
+ Add(new cMenuEditIntItem(tr("Replay Delay"), &mConf.mReplayDelay, 0, 5000));
if(mConf.mMainMenuEntry < 0 || mConf.mMainMenuEntry >= numMainMenuAlts)
mConf.mMainMenuEntry = 0; // menu item segfaults if out of range
Add(new cMenuEditStraItem(tr("Main Menu Alternative"), &mConf.mMainMenuEntry,
@@ -578,6 +706,15 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
&mConf.mBottomAdj, -100, 45));
Add(new cMenuEditIntItem( tr("Line Spacing Adjust"),
&mConf.mLineSpacing, -25, 25));
+ Add(new cMenuEditBoolItem(tr("Workaround for some French chns"),
+ &mConf.mFrenchSpecial));
+ if(mConf.mDvbSources < 0 || mConf.mDvbSources >= numDvbSources)
+ mConf.mDvbSources = 0; // menu item segfaults if out of range
+ Add(new cMenuEditStraItem(tr("DVB Source Selection"),
+ &mConf.mDvbSources, 4, dvbSources));
+#if defined(APIVERSNUM) && APIVERSNUM >= 10503
+ Add(new cMenuEditIntItem(tr("Font Size (pixel)"), &mConf.mFontSize, 10, MAXFONTSIZE));
+#endif
if(mConf.mFgColor < 0 || mConf.mFgColor >= numTextColors)
mConf.mFgColor = 1; // menu item segfaults if out of range
Add(new cMenuEditStraItem(tr("Text Color"), &mConf.mFgColor,
@@ -586,19 +723,32 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
mConf.mBgColor = 0; // menu item segfaults if out of range
Add(new cMenuEditStraItem(tr("Background Color"), &mConf.mBgColor,
numTextColors, textColors));
- Add(new cMenuEditBoolItem(tr("Workaround for some French chns"),
- &mConf.mFrenchSpecial, tr("no"), tr("yes")));
+
+ // the color code is borrowed from AIO patches
+ mBlue = (mConf.mCustomColor & 0x0000000F);
+ if (mBlue < 0 || mBlue >= numColorValues) mBlue = 0;
+ mGreen = (mConf.mCustomColor & 0x00000F00) >> 8;
+ if (mGreen < 0 || mGreen >= numColorValues) mGreen = 0;
+ mRed = (mConf.mCustomColor & 0x000F0000) >> 16;
+ if (mRed < 0 || mRed >= numColorValues) mRed = 0;
+ mTransparency = (mConf.mCustomColor & 0x0F000000) >> 24;
+ if (mTransparency < 0 || mTransparency >= numColorValues) mTransparency = 0;
+ asprintf(&buf, "%s: --------------------------------------------", tr("Custom Color"));
+ cOsdItem *item = new cOsdItem(buf);
+ item->SetSelectable(false);
+ free(buf);
+ Add(item);
+ Add(new cMenuEditStraItem(tr("Red Value"), &mRed, numColorValues, colorValues));
+ Add(new cMenuEditStraItem(tr("Green Value"), &mGreen, numColorValues, colorValues));
+ Add(new cMenuEditStraItem(tr("Blue Value"), &mBlue, numColorValues, colorValues));
+ Add(new cMenuEditStraItem(tr("Transparency Value"), &mTransparency, numColorValues, colorValues));
for(int n = 0; n < MAXLANGUAGES; n++) {
char str[100];
- char *allowedc = "abcdefghijklmnopqrstuvwxyz";
+ const char *allowedc = "abcdefghijklmnopqrstuvwxyz";
cOsdItem *item = new cOsdItem("--------------------------------------------------------");
-#if defined(ELCHIAIOVERSION)
- item->SetColor(clrScrolLine);
-#else
- item->SetColor(clrCyan);
-#endif
+ item->SetSelectable(false);
Add(item);
sprintf(str, "%s %d", tr("Language"), n + 1);
@@ -610,8 +760,7 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
}
sprintf(str, "%s %d %s", tr("Language"), n + 1, tr("Hearing Impaired"));
- Add(new cMenuEditBoolItem(str, &(mConf.mHearingImpaireds[n][0]),
- tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(str, &(mConf.mHearingImpaireds[n][0])));
}
#ifdef TEST
@@ -621,8 +770,6 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
cMenuSetupTtxtsubs::~cMenuSetupTtxtsubs(void)
{
- if(mSavedFrenchSpecial != mConf.mFrenchSpecial)
- ClearSICache();
if(mDoStore) {
Store();
@@ -645,14 +792,25 @@ void cMenuSetupTtxtsubs::Store(void)
SetupStore("Display", mConf.mDoDisplay);
SetupStore("Record", mConf.mDoRecord);
+ SetupStore("LiveDelay", mConf.mLiveDelay);
+ SetupStore("ReplayDelay", mConf.mReplayDelay);
SetupStore("TextPos", mConf.mTextPos);
SetupStore("BottomLB", mConf.mBottomLB);
SetupStore("BottomAdj", mConf.mBottomAdj);
SetupStore("FrenchSpecial", mConf.mFrenchSpecial);
SetupStore("MainMenuEntry", mConf.mMainMenuEntry);
SetupStore("LineSpacing", mConf.mLineSpacing);
+ SetupStore("DvbSources", mConf.mDvbSources);
+#if defined(APIVERSNUM) && APIVERSNUM >= 10503
+ SetupStore("FontSize", mConf.mFontSize);
+#endif
SetupStore("FgColor", mConf.mFgColor);
SetupStore("BgColor", mConf.mBgColor);
+ mConf.mCustomColor = (mBlue ) | (mBlue << 4) |
+ (mGreen << 8) | (mGreen << 12) |
+ (mRed << 16) | (mRed << 20) |
+ (mTransparency << 24) | (mTransparency << 28);
+ SetupStore("CustomColor", mConf.mCustomColor);
char lstr[MAXLANGUAGES*2*4 + 1];
char histr[MAXLANGUAGES*2 + 1];
diff --git a/ttxtsubschannelsettings.c b/ttxtsubschannelsettings.c
new file mode 100644
index 0000000..4d81928
--- /dev/null
+++ b/ttxtsubschannelsettings.c
@@ -0,0 +1,51 @@
+#include "ttxtsubschannelsettings.h"
+
+#include <vdr/channels.h>
+#include <vdr/plugin.h>
+#include <vdr/tools.h>
+
+cTtxtSubsChannelSetting::cTtxtSubsChannelSetting(const cChannel *Channel, int PageMode, int PageNumber)
+{
+ channelid=Channel->GetChannelID();
+ pagemode=PageMode;
+ pagenumber=PageNumber;
+}
+
+bool cTtxtSubsChannelSetting::Parse(const char *s)
+{
+ bool result=false;
+ char *buffer=NULL;
+ int PageMode;
+ int PageNumber;
+ if (3 == sscanf(s, "%a[^,],%d,%d\n", &buffer, &PageMode, &PageNumber)) {
+ tChannelID channelID=tChannelID::FromString(buffer);
+ if (channelID.Valid()) {
+ channelid=channelID;
+ pagemode=PageMode;
+ pagenumber=PageNumber;
+ result=true;
+ }
+ else { // parse old format
+ int sid;
+ if (1 == sscanf(buffer, "%d", &sid)) {
+ for (cChannel *ch = Channels.First(); ch; ch = Channels.Next(ch)) {
+ if (!ch->GroupSep() && ch->Sid() == sid) {
+ channelid=ch->GetChannelID();
+ pagemode=PageMode;
+ pagenumber=PageNumber;
+ result=true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ free(buffer);
+ return result;
+}
+
+bool cTtxtSubsChannelSetting::Save(FILE *f)
+{
+ return fprintf(f, "%s,%d,%d\n", *channelid.ToString(), pagemode, pagenumber) > 0;
+}
+
diff --git a/ttxtsubschannelsettings.h b/ttxtsubschannelsettings.h
new file mode 100644
index 0000000..5bdf64c
--- /dev/null
+++ b/ttxtsubschannelsettings.h
@@ -0,0 +1,51 @@
+#ifndef __TTXTSUBSCHANNELSETTINGS_H
+#define __TTXTSUBSCHANNELSETTINGS_H
+
+#include <vdr/tools.h>
+#include <vdr/channels.h>
+
+#define PAGE_MODE_AUTO 0
+#define PAGE_MODE_MANUAL 1
+#define PAGE_MODE_DISABLED 2
+
+class cTtxtSubsChannelSetting:public cListObject {
+private:
+ tChannelID channelid;
+ int pagemode;
+ int pagenumber;
+public:
+ cTtxtSubsChannelSetting(void) {}
+ cTtxtSubsChannelSetting(const cChannel* Channel, int PageMode, int PageNumber);
+ bool Parse(const char *s);
+ bool Save(FILE *f);
+ tChannelID ChannelID(void) const { return channelid; }
+ int PageMode(void) const { return pagemode; }
+ int PageNumber(void) const { return pagenumber; }
+ void Set(int PageMode, int PageNumber) { pagemode=PageMode; pagenumber=PageNumber; }
+ };
+
+class cTtxtSubsChannelSettings:public cConfig<cTtxtSubsChannelSetting> {
+public:
+ cTtxtSubsChannelSetting *Get(const cChannel *Channel) {
+ tChannelID ChannelID=Channel->GetChannelID();
+ for (cTtxtSubsChannelSetting *p=First(); p; p=Next(p)) {
+ if (p->ChannelID()==ChannelID) return p;
+ }
+ return NULL;
+ }
+ int Page(const cChannel *Channel) {
+ cTtxtSubsChannelSetting *cs=Get(Channel);
+ if (!cs) return(0);
+ if (cs->PageMode()==PAGE_MODE_DISABLED) return(-1);
+ int temp=cs->PageNumber();
+ int mag=temp/100;
+ temp=temp%100;
+ int page_no=(mag<<8)+((temp/10)<<4)+(temp%10);
+ if (page_no>=0x800) page_no-=0x800;
+ return(page_no);
+ }
+};
+
+extern cTtxtSubsChannelSettings TtxtSubsChannelSettings;
+
+#endif //__TTXTSUBSCHANNELSETTINGS_H
diff --git a/ttxtsubsdisplay.c b/ttxtsubsdisplay.c
index 32651a3..53c17b2 100644
--- a/ttxtsubsdisplay.c
+++ b/ttxtsubsdisplay.c
@@ -9,6 +9,8 @@
#include <vdr/osd.h>
#include <vdr/osdbase.h>
#include <vdr/thread.h>
+#include <vdr/font.h>
+#include <vdr/config.h>
#include "ttxtsubsglobals.h"
#include "ttxtsubsdisplay.h"
@@ -22,12 +24,6 @@ enum {
finished
};
-// extra colours
-enum eMyDvbColor {
- myClrGrey = 0xFF808080
-};
-
-
// --------------------
class cOSDSelfMemory {
@@ -76,13 +72,22 @@ cTtxtSubsDisplay::cTtxtSubsDisplay(void)
mPageState(invalid),
mMag(0),
mNo(0),
+#if defined(APIVERSNUM) && APIVERSNUM < 10509
mDoDisplay(0),
+#else
+ mDoDisplay(1),
+#endif
mOsd(NULL),
mOsdLock(),
mLastDataTime(NULL)
{
memset(&page.data, 0, sizeof(page.data));
mLastDataTime = (struct timeval *) calloc(1, sizeof(*mLastDataTime));
+#if defined(APIVERSNUM) && APIVERSNUM >= 10503
+ mOsdFont = cFont::CreateFont(Setup.FontOsd, globals.mFontSize);
+ if (!mOsdFont || !mOsdFont->Height())
+#endif
+ mOsdFont = cFont::GetFont(fontOsd);
}
@@ -90,7 +95,15 @@ cTtxtSubsDisplay::~cTtxtSubsDisplay(void)
{
if(mLastDataTime)
free(mLastDataTime);
- ClearOSD();
+ if(mOsd) {
+ cOsd* tmp = mOsd;
+ mOsd = NULL;
+ delete tmp;
+ }
+#if defined(APIVERSNUM) && APIVERSNUM >= 10503
+ if(mOsdFont && (mOsdFont != cFont::GetFont(fontOsd)))
+ delete mOsdFont;
+#endif
}
@@ -112,8 +125,8 @@ void cTtxtSubsDisplay::Hide(void)
//dprint("cTtxtSubsDisplay::Hide\n");
cMutexLock lock(&mOsdLock);
- ClearOSD();
mDoDisplay = 0;
+ ClearOSD();
}
@@ -138,7 +151,7 @@ void cTtxtSubsDisplay::Clear(void)
}
-void cTtxtSubsDisplay::TtxtData(const uint8_t *Data)
+void cTtxtSubsDisplay::TtxtData(const uint8_t *Data, uint64_t sched_time)
{
int mp;
int mag; // X in ETSI EN 300 706
@@ -221,6 +234,12 @@ void cTtxtSubsDisplay::TtxtData(const uint8_t *Data)
page.national_charset = ((fi[7] & 0x80) >> 7) +
((fi[7] & 0x20) >> 4) + ((fi[7] & 0x08) >> 1);
+ if(mPageState != collecting) {
+ int diff = sched_time - cTimeMs::Now();
+ //printf("Got sched_time %llx, diff %d\n", sched_time, diff);
+ if (diff > 10) cCondWait::SleepMs(diff);
+ }
+
mPageState = collecting;
gettimeofday(mLastDataTime, NULL);
@@ -279,7 +298,10 @@ ttxt2la1(uint8_t *p, char *buf, int natopts)
continue;
if(c >= 0x20) {
- buf[j++] = ttxt_laG0_la1_char(0, natopts, c);
+ uint16_t aux = ttxt_laG0_la1_char(0, natopts, c);
+ if (aux & 0xff00)
+ buf[j++] = (aux & 0xff00) >> 8;
+ buf[j++] = aux & 0x00ff;
}
}
@@ -341,7 +363,7 @@ enum {
TEXTX = 15
};
-static eDvbColor
+static tColor
getcolor(int color)
{
switch (color)
@@ -354,24 +376,30 @@ getcolor(int color)
case 5: return clrMagenta;
case 6: return clrBlue;
case 7: return clrCyan;
- case 8: return (eDvbColor) myClrGrey;
+ case 8: return globals.customColor();
case 9: return clrTransparent;
- default: return clrBackground;
+ default: return clrGray50;
}
- return clrBackground;
+ return clrGray50;
}
void cTtxtSubsDisplay::ShowOSD(void)
{
int i, y;
int rowcount = 0;
- char buf[TTXT_DISPLAYABLE_ROWS][41];
- int doneWidthWorkaround = 0;
+ char buf[TTXT_DISPLAYABLE_ROWS][82];
int bottom = globals.bottomAdj() + (globals.bottomLB() ? BOTLETTERBOX : BOTNORM);
+ tArea areas[MAXOSDAREAS];
+ int numAreas = 0;
cOSDSelfMemoryLock selfmem(&gSelfMem);
cMutexLock lock(&mOsdLock);
+ if(!globals.mRealDoDisplay) {
+ //dprint("NOT displaying subtitles because disabled!\n");
+ return;
+ }
+
if(!mDoDisplay) {
//dprint("NOT displaying subtitles because of other OSD activities!\n");
return;
@@ -382,76 +410,93 @@ void cTtxtSubsDisplay::ShowOSD(void)
return;
}
- if(mOsd != NULL)
- ClearOSD();
-
- //print_page(&page);
-
for(i = 1; i < 24; i++) {
if(page.data[i][0] != 0) // anything on this line?
if(ttxt2la1(page.data[i], buf[rowcount], page.national_charset))
rowcount++;
}
- mOsd = cOsd::OpenRaw(SCREENLEFT, SCREENTOP);
-
- if(mOsd == NULL) {
- //dprint("Error: cOsd::OpenRaw returned NULL!\n");
- return;
+ if(mOsd) {
+ cOsd* tmp = mOsd;
+ mOsd = NULL;
+ delete tmp;
}
- mOsd->SetFont(fontOsd);
-
- if(rowcount > MAXTTXTROWS)
- rowcount = MAXTTXTROWS;
-
-#if 0 // XXXX
- rowcount = 4;
- strcpy(buf[0], "1234567890123456789012345678901234567890");
- strcpy(buf[1], "1234567890123456789012345678901234567890");
- strcpy(buf[2], "1234567890123456789012345678901234567890");
- strcpy(buf[3], "1234567890123456789012345678901234567890");
+#if defined(APIVERSNUM) && APIVERSNUM < 10509
+ if (cOsd::IsOpen()) {
+ //dprint("NOT displaying subtitles because of other OSD activities!\n");
+ return;
+ }
+ else {
+ mOsd = cOsdProvider::NewOsd(SCREENLEFT, SCREENTOP);
+#else
+ mOsd = cOsdProvider::NewOsd(SCREENLEFT, SCREENTOP, 20); // level 20
+#endif
+ if(!mOsd) {
+ //dprint("Error: cOsdProvider::NewOsd() returned NULL!\n");
+ return;
+ }
+#if defined(APIVERSNUM) && APIVERSNUM < 10509
+ }
#endif
+#if defined(APIVERSNUM) && APIVERSNUM < 10503
+ cFont::SetCode(I18nCharSets()[globals.i18nLanguage()]);
+#endif
+ if(rowcount > MAXTTXTROWS)
+ rowcount = MAXTTXTROWS;
y = bottom - SCREENTOP - ROWH - ((ROWINCR + globals.lineSpacing()) * (rowcount-1));
for(i = 0; i < rowcount; i++) {
- tWindowHandle wind;
int w = 0;
int left = SIDEMARGIN;
-
- // XXX Width calculations doesn't work before we have created a window...
- if(!doneWidthWorkaround) {
- //wind = mOsd->Create(0, y, 4, ROWH, 2);
- //mOsd->Fill(0, y, 4, y + ROWH, clrWhite, wind);
- //mOsd->Fill(0, y, 4, y + ROWH, clrBackground, wind);
- wind = mOsd->Create(0, 575, 4, 1, 2, false);
- mOsd->Fill(0, 574, 4, 575, getcolor(globals.fgColor()), wind);
- mOsd->Fill(0, 574, 4, 575, clrTransparent, wind);
- doneWidthWorkaround = 1;
- }
-
- w = mOsd->Width(buf[i]) + 2 * TEXTX;
+ w = mOsdFont->Width(buf[i]) + 2 * TEXTX;
if(w % 4)
w += 4 - (w % 4);
-
switch(globals.textPos()) {
- case 1:
- left = (SCREENRIGHT - w) / 2;
- break;
- case 2:
- left = SCREENRIGHT - SIDEMARGIN - w;
- break;
- }
-
- wind = mOsd->Create(left, y, w, ROWH, 2, false);
- mOsd->Fill(left, y, left + w, y + ROWH, getcolor(globals.fgColor()), wind); // needed for dxr3s...
- mOsd->Fill(left, y, left + w, y + ROWH, getcolor(globals.bgColor()), wind);
- mOsd->Text(left + TEXTX, y + TEXTY, buf[i], getcolor(globals.fgColor()), getcolor(globals.bgColor()), wind);
-
+ case 1:
+ left = (SCREENRIGHT - w) / 2;
+ break;
+ case 2:
+ left = SCREENRIGHT - SIDEMARGIN - w;
+ break;
+ }
+ tArea area = {left, y, left+w-1, y+ROWH-1, 2};
+ areas[numAreas++] = area;
y += (ROWINCR + globals.lineSpacing());
}
-
- mOsd->Flush();
+ if (mOsd->CanHandleAreas(areas, numAreas) != oeOk) {
+#if defined(APIVERSNUM) && APIVERSNUM < 10503
+ cFont::SetCode(I18nCharSets()[Setup.OSDLanguage]);
+#endif
+ dprint("ttxtsubs: OSD Cannot handle areas (error code: %d) - try to enlarge the line spacing!\n", mOsd->CanHandleAreas(areas, numAreas));
+ }
+ else {
+ mOsd->SetAreas(areas, numAreas);
+ y = bottom - SCREENTOP - ROWH - ((ROWINCR + globals.lineSpacing()) * (rowcount-1));
+ for(i = 0; i < rowcount; i++) {
+ int w = 0;
+ int left = SIDEMARGIN;
+ w = mOsdFont->Width(buf[i]) + 2 * TEXTX;
+ if(w % 4)
+ w += 4 - (w % 4);
+ switch(globals.textPos()) {
+ case 1:
+ left = (SCREENRIGHT - w) / 2;
+ break;
+ case 2:
+ left = SCREENRIGHT - SIDEMARGIN - w;
+ break;
+ }
+ mOsd->DrawRectangle(left, y, left + w, y + ROWH, getcolor(globals.bgColor()));
+ mOsd->DrawText(left + TEXTX, y + TEXTY, buf[i], getcolor(globals.fgColor()), getcolor(globals.bgColor()), mOsdFont);
+ //dprint("%d/%d (%d,%d) (%d,%d): %s\n", i, rowcount-1, areas[i].x1, areas[i].y1, left + TEXTX, y + TEXTY, buf[i]);
+ y += (ROWINCR + globals.lineSpacing());
+ }
+#if defined(APIVERSNUM) && APIVERSNUM < 10503
+ cFont::SetCode(I18nCharSets()[Setup.OSDLanguage]);
+#endif
+ mOsd->Flush();
+ }
}
@@ -461,20 +506,9 @@ void cTtxtSubsDisplay::ClearOSD(void)
cOSDSelfMemoryLock selfmem(&gSelfMem);
cMutexLock lock(&mOsdLock);
- if(!mDoDisplay) {
- //dprint("NOT clearing subtitles because of other OSD activities!\n");
- return;
- }
-
if(mOsd) {
-
- //mOsd->Clear(ALL_WINDOWS);
-#if 0
- // not needed, windows are removed in mOsd destructor
- mOsd->Hide(ALL_WINDOWS);
- mOsd->Flush();
-#endif
- delete mOsd;
+ cOsd* tmp = mOsd;
mOsd = NULL;
+ delete tmp;
}
}
diff --git a/ttxtsubsdisplay.h b/ttxtsubsdisplay.h
index fa76860..e8fa814 100644
--- a/ttxtsubsdisplay.h
+++ b/ttxtsubsdisplay.h
@@ -4,7 +4,8 @@
struct ttxt_data_field;
struct timeval;
-class cOsdBase;
+class cOsd;
+class cFont;
#define MAXTTXTROWS 5
@@ -16,7 +17,7 @@ class cTtxtSubsDisplay {
void SetPage(int Pageno); // Pageno is 0x000 to 0x799
void Hide(void);
void Show(void);
- void TtxtData(const uint8_t *);
+ void TtxtData(const uint8_t *, uint64_t sched_time = 0);
protected:
void Clear(void);
@@ -29,7 +30,8 @@ class cTtxtSubsDisplay {
int mNo;
int mDoDisplay;
struct ttxt_page page;
- cOsdBase *mOsd;
+ cOsd *mOsd;
cMutex mOsdLock;
struct timeval *mLastDataTime;
+ const cFont *mOsdFont;
};
diff --git a/ttxtsubsdisplayer.c b/ttxtsubsdisplayer.c
index fe69aa7..3501df8 100644
--- a/ttxtsubsdisplayer.c
+++ b/ttxtsubsdisplayer.c
@@ -31,8 +31,9 @@ cTtxtSubsDisplayer::~cTtxtSubsDisplayer(void)
this->Cancel(5);
if(mDisp) {
- delete mDisp;
+ cTtxtSubsDisplay *tmp = mDisp;
mDisp = NULL;
+ delete tmp;
}
}
@@ -45,7 +46,9 @@ void cTtxtSubsDisplayer::Action(void)
f = mRingBuf.Get();
if(f) {
- mDisp->TtxtData(f->Data());
+ uint64_t sched_time;
+ memcpy(&sched_time, f->Data() + 46, sizeof(sched_time));
+ mDisp->TtxtData(f->Data(), sched_time);
mRingBuf.Drop(f);
} else {
// wait for more data
@@ -70,13 +73,22 @@ void cTtxtSubsDisplayer::HideDisplay(void)
// ----- class cTtxtSubsLiveReceiver -----
-cTtxtSubsLiveReceiver::cTtxtSubsLiveReceiver(int Pid, int textpage)
+cTtxtSubsLiveReceiver::cTtxtSubsLiveReceiver(tChannelID ChnId, int Pid, int textpage)
:
- cReceiver(0, -1, 1, Pid),
+#if defined(APIVERSNUM) && APIVERSNUM < 10500
+ cReceiver(0, -1, Pid),
+#else
+ cReceiver(ChnId, -1, Pid),
+#endif
cTtxtSubsDisplayer(textpage)
{
}
+cTtxtSubsLiveReceiver::~cTtxtSubsLiveReceiver(void)
+{
+ Detach();
+}
+
void cTtxtSubsLiveReceiver::Activate(bool On)
{
//dprint("cTtxtSubsLiveReceiver::Activate: On:%d\n", On);
@@ -100,7 +112,9 @@ void cTtxtSubsLiveReceiver::Receive(uchar *Data, int Length)
if(0xff == Data[4 + i*46]) // stuffing data
continue;
- cFrame *f = new cFrame(Data + 4 + i*46, 46);
+ uint64_t sched_time = cTimeMs::Now() + globals.liveDelay();
+ cFrame *f = new cFrame(Data + 4 + i*46, 46 + sizeof(sched_time));
+ memcpy(f->Data() + 46, &sched_time, sizeof(sched_time));
mRingBuf.Put(f);
mGetCond.Broadcast();
}
@@ -150,7 +164,9 @@ void cTtxtSubsPlayer::PES_data(uchar *p, int Length)
if(0xff == p[i*46]) // stuffing data
continue;
- cFrame *f = new cFrame(p + i*46, 46);
+ uint64_t sched_time=cTimeMs::Now() + globals.replayDelay();
+ cFrame *f = new cFrame(p + i*46, 46 + sizeof(sched_time));
+ memcpy(f->Data() + 46, &sched_time, sizeof(sched_time));
mRingBuf.Put(f);
mGetCond.Broadcast();
}
@@ -165,7 +181,7 @@ static void copy_inv_strip_par(uint8_t *dest, uint8_t *src, size_t len)
void cTtxtSubsPlayer::SearchLanguagePage(uint8_t *p, int len)
{
- char *infoline = "Subtitles Index Page";
+ const char *infoline = "Subtitles Index Page";
int foundlines = 0;
if(len < (3*46))
diff --git a/ttxtsubsdisplayer.h b/ttxtsubsdisplayer.h
index cd63595..d3e8d61 100644
--- a/ttxtsubsdisplayer.h
+++ b/ttxtsubsdisplayer.h
@@ -24,7 +24,8 @@ class cTtxtSubsDisplayer : public cThread {
class cTtxtSubsLiveReceiver : public cReceiver, public cTtxtSubsDisplayer {
public:
- cTtxtSubsLiveReceiver(int Pid, int textpage);
+ cTtxtSubsLiveReceiver(tChannelID ChnId, int Pid, int textpage);
+ ~cTtxtSubsLiveReceiver(void);
protected:
virtual void Activate(bool On);
diff --git a/ttxtsubsfilter.c b/ttxtsubsfilter.c
index ae13cc0..a113e89 100644
--- a/ttxtsubsfilter.c
+++ b/ttxtsubsfilter.c
@@ -34,12 +34,12 @@ void cTtxtSubsFilter::SetPages(size_t count, uint16_t *pages)
mCount = count;
- if(0) {
- fprintf(stderr, "SetPages: %d, ", count);
+#if 0
+ dprint("SetPages: %d, ", count);
for(size_t i = 0; i < count; i++)
- fprintf(stderr, "%03x ", pages[i]);
- fprintf(stderr, "\n");
- }
+ dprint("%03x ", pages[i]);
+ dprint("\n");
+#endif
}
// XXX IF MERGING PAGES FROM SEVERAL PIDS (which we currently don't)
@@ -61,14 +61,14 @@ int cTtxtSubsFilter::Filter(char *indata, char *outdata)
mag = mp & 0x7;
packet = (mp >> 3) & 0x1f;
- if (0) { // XXX
+#if 0 // XXX
uint8_t buf[2];
ham8_4byte(mp, buf);
- fprintf(stderr, "unham %02x %02x -> %02x, ham: %02x %02x\n",
+ dprint("unham %02x %02x -> %02x, ham: %02x %02x\n",
invtab[d->mag_addr_ham[0]], invtab[d->mag_addr_ham[1]],
mp,
buf[0], buf[1]);
- }
+#endif
// packet 0, change page no in this magazine
if(packet == 0) {
@@ -80,7 +80,7 @@ int cTtxtSubsFilter::Filter(char *indata, char *outdata)
mMagPage[mag] = newindex = Find(mCount, mPages, (mag << 8) | no);
if(newindex != -1) {
- //fprintf(stderr, "Filter: %x%02x (%d)\n", mag, no, newindex); // XXX
+ //dprint("Filter: %x%02x (%d)\n", mag, no, newindex); // XXX
MakeY0(outdata, indata, mPages[newindex]);
result = 1;
diff --git a/ttxtsubsglobals.h b/ttxtsubsglobals.h
index cee1bd7..0ad211e 100644
--- a/ttxtsubsglobals.h
+++ b/ttxtsubsglobals.h
@@ -1,17 +1,23 @@
class cPluginTtxtsubs;
class cMenuSetupTtxtsubs;
+class cTtxtsubsPageMenu;
+class cTtxtSubsChannelSettings;
+class cTtxtSubsDisplay;
#define MAXLANGUAGES 5
class cTtxtsubsConf {
friend class cPluginTtxtsubs;
friend class cMenuSetupTtxtsubs;
+ friend class cTtxtsubsPageMenu;
+ friend class cTtxtSubsDisplay;
public:
cTtxtsubsConf(void)
{
mDoDisplay = 1;
+ mRealDoDisplay =1;
mDoRecord = 1;
mMainMenuEntry = 0;
mTextPos = 0;
@@ -19,14 +25,20 @@ class cTtxtsubsConf {
mBottomAdj = 0;
mFrenchSpecial = 0;
mLineSpacing = 0;
+ mDvbSources = 0;
+ mFontSize = 20;
mFgColor = 1;
- mBgColor = 10;
+ mBgColor = 8;
+ mCustomColor = 0xBB333333;
memset(mLanguages, 0, sizeof(mLanguages));
memset(mHearingImpaireds, 0, sizeof(mHearingImpaireds));
+ mI18nLanguage = 0;
+ mLiveDelay = 0;
+ mReplayDelay = 0;
}
public:
- int doDisplay(void) {return mDoDisplay;}
+ int doDisplay(void) {return mRealDoDisplay;}
int doRecord(void) {return mDoRecord;}
int mainMenuEntry(void) {return mMainMenuEntry;}
int textPos(void) {return mTextPos;}
@@ -34,15 +46,22 @@ class cTtxtsubsConf {
int bottomAdj(void) {return mBottomAdj;}
int frenchSpecial(void) {return mFrenchSpecial;}
int lineSpacing(void) {return mLineSpacing;}
+ int dvbSources(void) {return mDvbSources;}
+ int fontSize(void) {return mFontSize;}
int fgColor(void) {return mFgColor;}
int bgColor(void) {return mBgColor;}
+ int customColor(void) {return mCustomColor;}
char (*languages(void))[MAXLANGUAGES][2][4] {return &mLanguages;}
int (*hearingImpaireds(void))[MAXLANGUAGES][2] {return &mHearingImpaireds;}
int langChoise(const char *lang, const int HI);
+ int i18nLanguage(void) {return mI18nLanguage;}
+ int liveDelay(void) {return mLiveDelay;}
+ int replayDelay(void) {return mReplayDelay;}
protected:
int mDoDisplay;
+ int mRealDoDisplay;
int mDoRecord;
int mMainMenuEntry;
int mTextPos;
@@ -50,10 +69,17 @@ class cTtxtsubsConf {
int mBottomAdj;
int mFrenchSpecial;
int mLineSpacing;
+ int mDvbSources;
+ int mFontSize;
int mFgColor;
int mBgColor;
+ int mCustomColor;
char mLanguages[MAXLANGUAGES][2][4];
int mHearingImpaireds[MAXLANGUAGES][2];
+ int mI18nLanguage;
+ int mLiveDelay;
+ int mReplayDelay;
};
extern cTtxtsubsConf globals;
+
diff --git a/ttxtsubsi18n.c b/ttxtsubsi18n.c
index 1f7498c..c672567 100644
--- a/ttxtsubsi18n.c
+++ b/ttxtsubsi18n.c
@@ -9,8 +9,7 @@
#include "ttxtsubsi18n.h"
#include <stdio.h>
-const tI18nPhrase Phrases[] =
-{
+const tI18nPhrase Phrases[] = {
{ "Teletext subtitles", // English
"Videotextuntertitel", // German - Tobias Grimm 2004-05-21
"", // Slovenian
@@ -21,15 +20,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Tekstitys (Teksti-TV)", // Finnish - Rolf Ahrenberg 2004-03-01
"", // Polish
- "", // Spanish
+ "Subtítulos teletexto", // Spanish
"", // Greek
"Textning (Text-TV)", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalanian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Subtítols teletext", // Catalanian
+ "ÂÕÛÕâÕÚáâ-áãÑâØâàë", // Russian - Vyacheslav Dikonov 2004-xx-xx
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Hide teletext subtitles", // English
"Verstecke Videotextuntertitel", // German
@@ -41,15 +41,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Piilota tekstitys (Teksti-TV)", // Finnish
"", // Polish
- "", // Spanish
+ "Esconde subtítulos teletexto", // Spanish
"", // Greek
"Göm textning (Text-TV)", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Amaga subtítols teletext", // Catalenian
+ "ÁÚàëâì áãÑâØâàë", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Display teletext subtitles", // English
"Zeige Videotextuntertitel", // German
@@ -61,15 +62,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Näytä tekstitys (Teksti-TV)", // Finnish
"", // Polish
- "", // Spanish
+ "Visualiza subtítulos teletexto", // Spanish
"", // Greek
"Visa textning (Text-TV)", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Visualitza subtítols teletext", // Catalenian
+ "¿ÞÚÐ×ëÒÐâì áãÑâØâàë", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Position Teletext Subtitles for 4:3/Anamorph", // English
"Positioniere Videotext-Untertitel für 4:3/Anamorph", // German
@@ -81,15 +83,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"4:3/Anamorfinen tekstitys (Teksti-TV)", // Finnish
"", // Polish
- "", // Spanish
+ "Posiciona subtítulos teletexto para 4:3/anamórfico", // Spanish
"", // Greek
"Textning för 4:3/anamorf (Text-TV)", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Posiciona subtítols teletext per a 4:3/anamòrfic", // Catalenian
+ "ÁãÑâØâàë Ò ÚÐÔàÕ 4:3", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Position Teletext Subtitles for Letterbox", // English
"Positioniere Videotext-Untertitel für Letterbox", // German
@@ -101,15 +104,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Letterbox tekstitys (Teksti-TV)", // Finnish
"", // Polish
- "", // Spanish
+ "Posicióna subtítulos teletexto para Letterbox", // Spanish
"", // Greek
"Textning för brevlådeformat (Text-TV)", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Posiciona subtítols teletext per a Letterbox", // Catalenian
+ "ÁãÑâØâàë Ò ÚÐÔàÕ èØàÞÚÞíÚàÐÝÝÞÓÞ äØÛìÜÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Display Subtitles", // English
"Zeige Untertitel", // German
@@ -121,15 +125,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Näytä tekstitykset", // Finnish
"", // Polish
- "", // Spanish
+ "Visualiza subtítulos", // Spanish
"", // Greek
"Visa textning", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Visualitza subtítols", // Catalenian
+ "¿ÞÚÐ×ëÒÐâì áãÑâØâàë", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Record Subtitles", // English
"Nimm Untertitel auf", // German
@@ -141,15 +146,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Tallenna tekstitykset", // Finnish
"", // Polish
- "", // Spanish
+ "Graba subtítulos", // Spanish
"", // Greek
"Spela in textning", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Grava subtítols", // Catalenian
+ "·ÐߨáëÒÐâì áãÑâØâàë", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Main Menu Alternative", // English
"Hauptmenu Alternative", // German
@@ -161,15 +167,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Päävalikon toiminnot", // Finnish
"", // Polish
- "", // Spanish
+ "Alternativa del menú principal", // Spanish
"", // Greek
"Huvudmenyalternativ", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Alternativa del menú principal", // Catalenian
+ "ºÞÜÐÝÔÐ Ò ÓÛÐÒÝÞÜ ÜÕÝî", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Display on/off", // English
"Anzeige ein/aus", // German
@@ -181,15 +188,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"aktivointi", // Finnish
"", // Polish
- "", // Spanish
+ "Visualiza sí/no", // Spanish
"", // Greek
"Visa textning på/av", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Visualitza si/no", // Catalenian
+ "ÒÚÛîçØâì/ÒëÚÛîçØâì", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "4:3/Letterbox", // English
"4:3/Letterbox",
@@ -201,15 +209,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"kuvasuhde", // Finnish
"", // Polish
- "", // Spanish
+ "4:3/Letterbox", // Spanish
"", // Greek
"4:3/brevlådeformat", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "4:3/Letterbox", // Catalenian
+ "4:3/èØàÞÚØÙ íÚàÐÝ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Text Horizontal Position", // English
"Horizontale Textposition", // German
@@ -221,15 +230,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Vaakatasaus", // Finnish
"", // Polish
- "", // Spanish
+ "´Posición horizontal del texto", // Spanish
"", // Greek
"Horisontell position", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Posició horitzontal del text ", // Catalenian
+ "ÀÐ×ÜÕéÕÝØÕ âÕÚáâÐ ßÞ ÓÞàØ×ÞÝâÐÛØ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Left", // English
"Links", // German
@@ -241,15 +251,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"vasen", // Finnish
"", // Polish
- "", // Spanish
+ "Izquierda", // Spanish
"", // Greek
"vänster", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Esquerra", // Catalenian
+ "áÛÕÒÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Center", // English
"Mitte", // German
@@ -261,15 +272,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"keskitä", // Finnish
"", // Polish
- "", // Spanish
+ "Centro", // Spanish
"", // Greek
"centrerad", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Centre", // Catalenian
+ "Ò æÕÝâàÕ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Right", // English
"Rechts", // German
@@ -281,15 +293,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"oikea", // Finnish
"", // Polish
- "", // Spanish
+ "Derecha", // Spanish
"", // Greek
"höger", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Dreta", // Catalenian
+ "áßàÐÒÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Text Vertical Position", // English
"Vertikale Textposition", // German
@@ -301,15 +314,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Pystytasaus", // Finnish
"", // Polish
- "", // Spanish
+ "Posición vertical del texto", // Spanish
"", // Greek
"Vertikal positon", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Posición vertical del text", // Catalenian
+ "ÀÐ×ÜÕéÕÝØÕ âÕÚáâÐ ßÞ ÒÕàâØÚÐÛØ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "4:3/Anamorph", // English
"4:3/Anamorph", // German
@@ -321,15 +335,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"4:3/anamorfinen", // Finnish
"", // Polish
- "", // Spanish
+ "4:3/Anamórfico", // Spanish
"", // Greek
"4:3/anamorf", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "4:3/Anamòrfic", // Catalenian
+ "4:3", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Letterbox", // English
"Letterbox", // German
@@ -341,15 +356,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"letterbox", // Finnish
"", // Polish
- "", // Spanish
+ "Letterbox", // Spanish
"", // Greek
"brevlådeformat", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Letterbox", // Catalenian
+ "èØàÞÚØÙ íÚàÐÝ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Text Vertical Adjust", // English
"Text vertikal verschieben", // German
@@ -361,15 +377,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Pystytasauksen hienosäätö", // Finnish
"", // Polish
- "", // Spanish
+ "Ajuste vertical del texto", // Spanish
"", // Greek
"Vertikal justering", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Ajustament vertical del text", // Catalenian
+ "²ÕàâØÚÐÛìÝëÙ áÔÒØÓ âÕÚáâÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Line Spacing Adjust", // English
"Zeilenabstand einstellen", // German
@@ -381,15 +398,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Rivivälin hienosäätö", // Finnish
"", // Polish
- "", // Spanish
+ "Ajuste distancia entre líneas", // Spanish
"", // Greek
"Radavstånd", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Ajustament distancia entre línies", // Catalenian
+ "ÀÐááâÞïÝØÕ ÜÕÖÔã áâàÞÚÐÜØ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Workaround for some French chns", // English
"Workaround für französische Kanäle", // German
@@ -401,15 +419,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Ranskalainen silmänkääntötemppu", // Finnish
"", // Polish
- "", // Spanish
+ "Corrección para canales franceses", // Spanish
"", // Greek
"Fix för vissa franska kanaler", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Correcció per a canals francesos", // Catalenian
+ "ÁßÕæ. ÝÐáâàÞÙÚØ ÔÛï äàÐÝæ. ÚÐÝÐÛÞÒ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Language", // English
"Sprache", // German
@@ -421,15 +440,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Tekstityskieli", // Finnish
"", // Polish
- "", // Spanish
+ "Idioma", // Spanish
"", // Greek
"Språk", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Idioma", // Catalenian
+ "Ï×ëÚ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Hearing Impaired", // English
"Gehörlose", // German
@@ -441,15 +461,37 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"kuulorajoitteisille", // Finnish
"", // Polish
- "", // Spanish
+ "No oyente", // Spanish
"", // Greek
"Nedsatt hörsel", // Swedish
"", // Romanian
"", // Hungarian
+ "Discapacitats auditius", // Catalenian
+ "ÔÛï áÛÐÑÞáÛëèÐéØå", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Font Size (pixel)", // English
+ "", // German
+ "", // Slovenian
+ "", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Taille Police (pixel)", // French
+ "", // Norwegian
+ "Kirjasintyypin koko (px)", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
"", // Catalenian
-#if VDRVERSNUM >= 10300
"", // Russian
-#endif
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Text Color", // English
"Textfarbe", // German
@@ -461,15 +503,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Kirjasimen väri", // Finnish
"", // Polish
- "", // Spanish
+ "Color del texto", // Spanish
"", // Greek
"Färg på text", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Color del text", // Catalenian
+ "ÆÒÕâ âÕÚáâÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Background Color", // English
"Hintergrundfarbe", // German
@@ -481,15 +524,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"Taustaväri", // Finnish
"", // Polish
- "", // Spanish
+ "Color de fondo", // Spanish
"", // Greek
"Färg på bakgrund", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Color de fons", // Catalenian
+ "ÆÒÕâ äÞÝÐ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Black", // English
"Schwarz", // German
@@ -501,15 +545,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"musta", // Finnish
"", // Polish
- "", // Spanish
+ "Negro", // Spanish
"", // Greek
"svart", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Negre", // Catalenian
+ "çñàÝëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "White", // English
"Weiss", // German
@@ -521,15 +566,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"valkoinen", // Finnish
"", // Polish
- "", // Spanish
+ "Blanco", // Spanish
"", // Greek
"vit", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Blanc", // Catalenian
+ "ÑÕÛëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Red", // English
"Rot", // German
@@ -541,15 +587,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"punainen", // Finnish
"", // Polish
- "", // Spanish
+ "Rojo", // Spanish
"", // Greek
"röd", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Vermell", // Catalenian
+ "ÚàÐáÝëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Green", // English
"Grün", // German
@@ -561,15 +608,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"vihreä", // Finnish
"", // Polish
- "", // Spanish
+ "Verde", // Spanish
"", // Greek
"grön", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Verd", // Catalenian
+ "×ÕÛñÝëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Yellow", // English
"Gelb", // German
@@ -581,15 +629,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"keltainen", // Finnish
"", // Polish
- "", // Spanish
+ "Amarillo", // Spanish
"", // Greek
"gul", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Groc", // Catalenian
+ "ÖñÛâëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Magenta", // English
"Magenta", // German
@@ -601,15 +650,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"magenta", // Finnish
"", // Polish
- "", // Spanish
+ "Magenta", // Spanish
"", // Greek
"magenta", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Magenta", // Catalenian
+ "ßãàßãàÝëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Blue", // English
"Blau", // German
@@ -621,15 +671,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"sininen", // Finnish
"", // Polish
- "", // Spanish
+ "Azul", // Spanish
"", // Greek
"blå", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Blau", // Catalenian
+ "áØÝØÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Cyan", // English
"Türkis", // German
@@ -641,15 +692,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"syaani", // Finnish
"", // Polish
- "", // Spanish
+ "Cian", // Spanish
"", // Greek
"cyan", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Cian", // Catalenian
+ "ÓÞÛãÑÞÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Grey", // English
"Grau", // German
@@ -661,15 +713,16 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"harmaa", // Finnish
"", // Polish
- "", // Spanish
+ "Gris", // Spanish
"", // Greek
"grå", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
- "", // Russian
-#endif
+ "Gris", // Catalenian
+ "áÕàëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ "Transparent", // English
"Transparent", // German
@@ -681,35 +734,457 @@ const tI18nPhrase Phrases[] =
"", // Norwegian
"läpinäkyvä", // Finnish
"", // Polish
- "", // Spanish
+ "Transparente", // Spanish
"", // Greek
"transparent", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
+ "Transparent", // Catalenian
+ "ßàÞ×àÐçÝëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Custom Color", // English
+ "Benutzerdefinierte Farbe", // German
+ "", // Slovenian
+ "Colore personalizzato", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Couleur personnalisée", // French
+ "", // Norwegian
+ "Muokattava väri", // Finnish
+ "", // Polish
+ "Color personalizado", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Color personalitzat", // Catalenian
+ "½ÐáâàÐØÒÐÕÜëÙ æÒÕâ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Custom", // English
+ "Benutzerdefiniert", // German
+ "", // Slovenian
+ "Personalizzato", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Personnalisé", // French
+ "", // Norwegian
+ "muokattava", // Finnish
+ "", // Polish
+ "Personalizado", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Personalitzat", // Catalenian
+ "ÝÐáâàÐØÒÐÕÜëÙ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Red Value", // English
+ "Roter Wert", // German
+ "", // Slovenian
+ "Valore rosso", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Valeur Rouge", // French
+ "", // Norwegian
+ "Punainen", // Finnish
+ "", // Polish
+ "Valor rojo", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Valor vermell", // Catalenian
+ "ÃàÞÒÕÝì ÚàÐáÝÞÓÞ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Green Value", // English
+ "Grüner Wert", // German
+ "", // Slovenian
+ "Valore verde", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Valeur Vert", // French
+ "", // Norwegian
+ "Vihreä", // Finnish
+ "", // Polish
+ "Valor verde", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Valor vert", // Catalenian
+ "ÃàÞÒÕÝì ×ÕÛñÝÞÓÞ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Blue Value", // English
+ "Blauer Wert", // German
+ "", // Slovenian
+ "Valore azzurro", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Valeur Bleu", // French
+ "", // Norwegian
+ "Sininen", // Finnish
+ "", // Polish
+ "Valor azul", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Valor blau", // Catalenian
+ "ÃàÞÒÕÝì áØÝÕÓÞ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Transparency Value", // English
+ "Transparenter Wert", // German
+ "", // Slovenian
+ "Valore trasparenza", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Valeur de transparence", // French
+ "", // Norwegian
+ "Läpinäkyvyys", // Finnish
+ "", // Polish
+ "Valor transparencia", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Valor transparència", // Catalenian
+ "ÁâÕßÕÝì ßàÞ×àÐçÝÞáâØ", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "DVB Source Selection", // English
+ "DVB Quelle Auswahl", // German
+ "", // Slovenian
+ "Selezione sorgente DVB", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Sélection Source DVB", // French
+ "", // Norwegian
+ "Tekstityslähteen valinta", // Finnish
+ "", // Polish
+ "Selección fuente DVB", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Selecció font DVB", // Catalenian
"", // Russian
-#endif
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
- { "Background", // English
- "Hintergrund", // German
+ { "All", // English
+ "Alle", // German
"", // Slovenian
- "Sfondo", // Italian
+ "Tutte", // Italian
"", // Dutch
"", // Portuguese
- "Fond", // French
+ "Tous", // French
"", // Norwegian
- "tausta", // Finnish
+ "kaikki", // Finnish
"", // Polish
- "", // Spanish
+ "Todas", // Spanish
"", // Greek
- "bakgrund", // Swedish
+ "", // Swedish
"", // Romanian
"", // Hungarian
- "", // Catalenian
-#if VDRVERSNUM >= 10300
+ "Totes", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Only DVB-S", // English
+ "Nur DVB-S", // German
+ "", // Slovenian
+ "Solo DVB-S", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Seulement DVB-S", // French
+ "", // Norwegian
+ "vain DVB-S", // Finnish
+ "", // Polish
+ "Sólo DVB-S", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Només DVB-S", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Only DVB-T", // English
+ "Nur DVB-T", // German
+ "", // Slovenian
+ "Solo DVB-T", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Seulement DVB-T", // French
+ "", // Norwegian
+ "vain DVB-T", // Finnish
+ "", // Polish
+ "Sólo DVB-T", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Només DVB-T", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Only DVB-C", // English
+ "Nur DVB-C", // German
+ "", // Slovenian
+ "Solo DVB-C", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Seulement DVB-C", // French
+ "", // Norwegian
+ "vain DVB-C", // Finnish
+ "", // Polish
+ "Sólo DVB-C", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Només DVB-C", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Page Mode", // English
+ "Seitenmodus", // German
+ "", // Slovenian
+ "Modo pagina", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Mode page", // French
+ "", // Norwegian
+ "sivun valinta", // Finnish
+ "", // Polish
+ "Modo página", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Modalitat pàgina", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Page Selection", // English
+ "Seitenauswahl", // German
+ "", // Slovenian
+ "Selezione pagina", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Page de sélection", // French
+ "", // Norwegian
+ "Tekstityssivun valinta", // Finnish
+ "", // Polish
+ "Selección página subtítulos", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Selecció pàgina subtítols", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Subtitle Mode", // English
+ "Untertitelmodus", // German
+ "", // Slovenian
+ "Modo sottotitoli", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Mode de sous-titres TXT", // French
+ "", // Norwegian
+ "Tekstitystapa", // Finnish
+ "", // Polish
+ "Modo subtítulos", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Modalitat subtítols", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Manual Subtitle Page", // English
+ "Manuelle Untertitelseite", // German
+ "", // Slovenian
+ "Pagina manuale sottotitoli", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Page des sous-titres", // French
+ "", // Norwegian
+ "Asetettu tekstityssivu", // Finnish
+ "", // Polish
+ "Página manual subtítulos", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Pàgina manual subtítols", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Subtitle Page Settings", // English
+ "Untertitelseiten Einstellung", // German
+ "", // Slovenian
+ "Settaggi pagina sottotitoli", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Conf. Page sous-titres TXT", // French
+ "", // Norwegian
+ "Tekstityssivun asetukset", // Finnish
+ "", // Polish
+ "Opciones página subtítulos", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Opcions pàgina subtítols", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Auto", // English
+ "Automatisch", // German
+ "", // Slovenian
+ "Automatico", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Auto", // French
+ "", // Norwegian
+ "automaattinen", // Finnish
+ "", // Polish
+ "Automático", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Automàtic", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Manual", // English
+ "Manuell", // German
+ "", // Slovenian
+ "Manuale", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Manuel", // French
+ "", // Norwegian
+ "manuaalinen", // Finnish
+ "", // Polish
+ "Manual", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Manual", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Disabled", // English
+ "Deaktiviert", // German
+ "", // Slovenian
+ "Disattivati", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Désactivé", // French
+ "", // Norwegian
+ "pois", // Finnish
+ "", // Polish
+ "Desactivados", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Desactivats", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Live Delay", // English
+ "Live Verzögerung", // German
+ "", // Slovenian
+ "Ritardo in diretta", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "", // French
+ "", // Norwegian
+ "Viive Live-lähetyksessä", // Finnish
+ "", // Polish
+ "Retardo en directo", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Retard en directe", // Catalenian
+ "", // Russian
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
+ },
+ { "Replay Delay", // English
+ "Wiedergabe Verzögerung", // German
+ "", // Slovenian
+ "Ritardo in riproduzione", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "", // French
+ "", // Norwegian
+ "Viive toistossa", // Finnish
+ "", // Polish
+ "Retardo en reproducción", // Spanish
+ "", // Greek
+ "", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "Retard en reproducció", // Catalenian
"", // Russian
-#endif
+ "", // Croatian
+ "", // Eesti
+ "", // Dansk
},
{ NULL }
};
diff --git a/ttxtsubspagemenu.c b/ttxtsubspagemenu.c
new file mode 100644
index 0000000..88a85a9
--- /dev/null
+++ b/ttxtsubspagemenu.c
@@ -0,0 +1,62 @@
+#include "ttxtsubschannelsettings.h"
+
+#include <vdr/menuitems.h>
+#include <vdr/device.h>
+
+#include "ttxtsubspagemenu.h"
+#include "ttxtsubsi18n.h"
+#include "ttxtsubsglobals.h"
+
+const char * MODE_CHOICES[4] = {NULL, NULL, NULL, NULL};
+
+cTtxtsubsPageMenu::~cTtxtsubsPageMenu()
+{
+}
+
+cTtxtsubsPageMenu::cTtxtsubsPageMenu()
+ :cOsdMenu(tr("Subtitle Page Settings"), 30)
+{
+ cDevice *device = cDevice::ActualDevice();
+ channel = Channels.GetByNumber(device->CurrentChannel());
+ setting = TtxtSubsChannelSettings.Get(channel);
+ if (setting) {
+ origPageMode = mPageMode = setting->PageMode();
+ origPageNumber = mPageNumber = setting->PageNumber();
+ } else {
+ origPageMode = mPageMode = 0;
+ origPageNumber = mPageNumber = 0;
+ }
+ DoDisplay=globals.mRealDoDisplay;
+
+ MODE_CHOICES[0] = tr("Auto");
+ MODE_CHOICES[1] = tr("Manual");
+ MODE_CHOICES[2] = tr("Disabled");
+ MODE_CHOICES[3] = NULL;
+
+ Add(new cMenuEditBoolItem(tr("Display Subtitles"), &DoDisplay));
+ Add(new cMenuEditStraItem(tr("Subtitle Mode"), &mPageMode, 3, MODE_CHOICES ));
+ Add(new cMenuEditIntItem(tr("Manual Subtitle Page"), &mPageNumber, 100, 899));
+
+ Display();
+};
+
+eOSState cTtxtsubsPageMenu::ProcessKey(eKeys Key)
+{
+ eOSState state = cOsdMenu::ProcessKey(Key);
+
+ if (state == osUnknown)
+ {
+ if (Key == kOk)
+ {
+ if(origPageMode!=mPageMode || origPageNumber!=mPageNumber) {
+ if (setting) setting->Set(mPageMode, mPageNumber);
+ else TtxtSubsChannelSettings.Add(new cTtxtSubsChannelSetting(channel, mPageMode, mPageNumber));
+ TtxtSubsChannelSettings.Save();
+ }
+ globals.mRealDoDisplay=DoDisplay;
+ state = osEnd;
+ }
+ }
+
+ return state;
+}
diff --git a/ttxtsubspagemenu.h b/ttxtsubspagemenu.h
new file mode 100644
index 0000000..e71dced
--- /dev/null
+++ b/ttxtsubspagemenu.h
@@ -0,0 +1,26 @@
+#ifndef ___TTXTSUBSPAGEMENU_H
+#define ___TTXTSUBSPAGEMENU_H
+
+#include <vdr/config.h>
+#include <vdr/osd.h>
+#include <vdr/channels.h>
+#include "ttxtsubs.h"
+#include "ttxtsubschannelsettings.h"
+
+class cTtxtsubsPageMenu : public cOsdMenu
+{
+ private:
+ cChannel *channel;
+ cTtxtSubsChannelSetting *setting;
+ int mPageNumber;
+ int mPageMode;
+ int origPageNumber;
+ int origPageMode;
+ int DoDisplay;
+ public:
+ cTtxtsubsPageMenu();
+ virtual ~cTtxtsubsPageMenu();
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+#endif //___TTXTSUBSPAGEMENU_H
diff --git a/ttxtsubsreceiver.c b/ttxtsubsreceiver.c
index b254c88..04eb582 100644
--- a/ttxtsubsreceiver.c
+++ b/ttxtsubsreceiver.c
@@ -17,9 +17,13 @@ struct ringBufItem {
// ----- cTtxtSubsReceiver -----
-cTtxtSubsReceiver::cTtxtSubsReceiver(int Ca, struct ttxtpidinfo *PI)
+cTtxtSubsReceiver::cTtxtSubsReceiver(tChannelID ChnId, int Ca, struct ttxtpidinfo *PI)
:
- cReceiver(Ca, -1, 1, PI->pid),
+#if defined(APIVERSNUM) && APIVERSNUM < 10500
+ cReceiver(Ca, -1, PI->pid),
+#else
+ cReceiver(ChnId, -1, PI->pid),
+#endif
mGetMutex(),
mGetCond(),
mRingBuf(sizeof(ringBufItem) * 500, true),
@@ -73,6 +77,7 @@ cTtxtSubsReceiver::~cTtxtSubsReceiver()
{
// get any waiting threads going
mGetCond.Broadcast();
+ Detach();
}
@@ -90,7 +95,7 @@ uint8_t *cTtxtSubsReceiver::Get(uint8_t *buf, encodedPTS *pts)
memcpy(buf, i->data, 46);
mRingBuf.Drop(f);
- // fprintf(stderr, "cTtxtSubsReceiver::Get: returned data!\n");
+ // dprint("cTtxtSubsReceiver::Get: returned data!\n");
return buf;
} else {
return NULL;
@@ -163,7 +168,7 @@ void cTtxtSubsReceiver::Receive(uchar *Data, int Length)
continue;
if(mFilter.Filter((char *) Data + 4 + i*46, (char *) it.data)) {
- // fprintf(stderr, "Forward Packet:\n");
+ // dprint("Forward Packet:\n");
// print_line((char *) Data + 4 + i*46);
// print_line(buf);
@@ -199,10 +204,10 @@ static void copy_inv_par(uint8_t *dest, uint8_t *src, int count)
void cTtxtSubsReceiver::AddIndexInfo(char *lang, int type, uint16_t page)
{
- //fprintf(stderr, "AddIndexInfo: %c%c%c/%d/%03x\n", lang[0], lang[1], lang[2], type, page); // XXX
+ //dprint("AddIndexInfo: %c%c%c/%d/%03x\n", lang[0], lang[1], lang[2], type, page); // XXX
if(mIndexPageLines == MAXINDEXPAGELINES) {
- fprintf(stderr, "cTtxtSubsReceiver::AddIndexInfo: Index page full!\n");
+ esyslog("ttxtsubs: cTtxtSubsReceiver::AddIndexInfo: Index page full!");
return;
}
@@ -234,7 +239,7 @@ void cTtxtSubsReceiver::AddIndexInfo(char *lang, int type, uint16_t page)
init_line(mIndexPage[mIndexPageLines], mIndexPageLines, mIndexPageNo >> 8);
d = (struct ttxt_data_field *) mIndexPage[mIndexPageLines];
- char *header = "Subtitles Index Page";
+ const char *header = "Subtitles Index Page";
txtlen = strlen(header);
copy_inv_par(d->data, (uint8_t *) header, txtlen);
for(int i = txtlen; i < 40; i++)
diff --git a/ttxtsubsreceiver.h b/ttxtsubsreceiver.h
index 3e11695..82cc70e 100644
--- a/ttxtsubsreceiver.h
+++ b/ttxtsubsreceiver.h
@@ -9,7 +9,7 @@ struct encodedPTS {
class cTtxtSubsReceiver : public cReceiver
{
public:
- cTtxtSubsReceiver(int Ca, struct ttxtpidinfo *PI);
+ cTtxtSubsReceiver(tChannelID ChnId, int Ca, struct ttxtpidinfo *PI);
virtual ~cTtxtSubsReceiver();
// returns pointer buf if there is new data
diff --git a/ttxtsubsrecorder.c b/ttxtsubsrecorder.c
index e31ec67..41ddb1a 100644
--- a/ttxtsubsrecorder.c
+++ b/ttxtsubsrecorder.c
@@ -31,22 +31,23 @@ cTtxtSubsRecorder::cTtxtSubsRecorder(cDevice *dev, const cChannel *ch)
mTtxtinfo = (struct ttxtinfo *) malloc(sizeof(*mTtxtinfo));
struct ttxtpidinfo *pi = NULL;
int pid, page;
+ char lang[4] = "";
- if(GetTtxtInfo(dev->CardIndex(), ch->Number(), ch->Sid(), ch->Vpid(), mTtxtinfo)) {
- fprintf(stderr, "cTtxtSubsRecorder::cTtxtSubsRecorder: GetTtxtSubtitleInfo error!\n");
+ if(GetTtxtInfo(dev->CardIndex(), ch, mTtxtinfo)) {
+ esyslog("ttxtsubs: cTtxtSubsRecorder::cTtxtSubsRecorder: GetTtxtSubtitleInfo error!");
} else {
- pi = FindSubs(mTtxtinfo, &pid, &page);
+ pi = FindSubs(mTtxtinfo, &pid, &page, lang);
if(!pi && mTtxtinfo->pidcount > 0) {
pi = &(mTtxtinfo->p[0]);
- fprintf(stderr, "Selected language not found, just recording first teletext pid found.\n");
+ isyslog("ttxtsubs: Selected language not found, just recording first teletext pid found.");
}
if(pi) {
- mReceiver = new cTtxtSubsReceiver(ch->Ca(), pi);
+ mReceiver = new cTtxtSubsReceiver(ch->GetChannelID(), ch->Ca(), pi);
mPacketBuffer = (uint8_t *) malloc(MAXPACKETSIZE);
} else {
- fprintf(stderr, "No teletext pid found, not recording any (obviously).\n");
+ isyslog("ttxtsubs: No teletext pid found, not recording any (obviously).");
}
}
}
@@ -54,8 +55,9 @@ cTtxtSubsRecorder::cTtxtSubsRecorder(cDevice *dev, const cChannel *ch)
cTtxtSubsRecorder::~cTtxtSubsRecorder(void)
{
if(mReceiver) {
- delete mReceiver;
+ cTtxtSubsReceiver *tmp = mReceiver;
mReceiver = NULL;
+ delete tmp;
}
if(mTtxtinfo) {
@@ -160,7 +162,7 @@ uint8_t *cTtxtSubsRecorder::GetPacket(uint8_t **outbuf, size_t *lenp)
#if 0
if(*outbuf) { // XXX
- fprintf(stderr, "cTtxtSubsRecorder::GetPacket: len: %d\n", len);
+ dprint("cTtxtSubsRecorder::GetPacket: len: %d\n", len);
for(size_t i = 46; i < len; i +=46) {
struct ttxt_data_field *d = (struct ttxt_data_field *) b + i;
if(d->data_unit_id != 0xff)