summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY30
-rw-r--r--Makefile4
-rw-r--r--README10
-rw-r--r--TROUBLESHOOTING244
-rw-r--r--VDR.patch80
-rw-r--r--contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.README4
-rw-r--r--contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.gzbin0 -> 7896 bytes
-rw-r--r--siinfo.c11
-rw-r--r--ttxtsubs.c38
-rw-r--r--ttxtsubsdisplay.c2
-rw-r--r--ttxtsubsi18n.c1366
11 files changed, 1051 insertions, 738 deletions
diff --git a/HISTORY b/HISTORY
index bbf7513..381268c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,9 +1,35 @@
VDR Plugin 'ttxtsubs' Revision History
--------------------------------------
+2004-05-31: Version 0.0.5
+
+- Note:
+This version is intended for VDR 1.2.6. There is a patch for VDR 1.3.5
+included. It may or may not work with later VDR versions. Also see
+Rolf's patch in the contrib directory.
+
+This may be the last version for VDR 1.2.x, as I hope to start turning
+my attention to VDR 1.3.x now.
+
+- New features:
+ - Italian translation, thanks to Sean Carlos
+ - French translation, thanks to Stéphane Esté-Gracias
+ - German translation, thanks to Tobias Grimm
+ - Another ElchiAIO fix, thanks to Rolf Ahrenberg
+ - Added a "contrib" directory with a VDR 1.3.8 test patch from
+ Rolf Ahrenberg
+ - Added a TROUBLESHOOTING document because of reports from Germany
+ that ttxtsubs doesn't work there. It seems that most German channels
+ on the birds at 19.2E don't announce the subtitles in their Service
+ Information. Please see the document for further info.
+
+- Bugs fixed:
+ - Corrected (again!) national charset selection bit swapping, there
+ was a typo in the fix in 0.0.5pre1.
+
2004-03-02: Version 0.0.5pre2
-- New features
+- New features:
- Text colours can be set and row spacing can be adjusted.
(The usual semitransparent "background" colour appearently
doesn't work with the ElchiAIO patch, don't know why.)
@@ -32,7 +58,7 @@ VDR Plugin 'ttxtsubs' Revision History
- Remapping option for those French channels that incorrectly
sends teletext page numbers in decimal instead of hexadecimal.
Very moderate remapping done at the moment, I hope it is enough.
- - Subtitles are now recorded with their PTS (timestamps). Not that
+ - Subtitles are now recorded with their PTS (timestamps). Note that
the timestamps are completely wrong on some channels, this
may confuse uncareful subtitle extracting software.
- Included patch for VDR 1.3.5 - untested!
diff --git a/Makefile b/Makefile
index e3048f5..d901842 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile,v 1.21 2004/03/02 01:08:45 ragge Exp $
+# $Id: Makefile,v 1.22 2004/05/31 19:26:05 ragge Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -50,7 +50,7 @@ DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
OBJS = $(PLUGIN).o ttxtsubsdisplayer.o ttxtsubsdisplay.o teletext.o siinfo.o \
ttxtsubsfilter.o ttxtsubsrecorder.o ttxtsubsreceiver.o ttxtsubsi18n.o
-SOURCEFILES = *.c *.h [A-Z]???*
+SOURCEFILES = *.c *.h [A-Z]???* contrib
### Implicit rules:
diff --git a/README b/README
index 2479f06..948e692 100644
--- a/README
+++ b/README
@@ -72,14 +72,14 @@ other version of VDR, but don't count on it.
Steps:
As usual, unpack the plugin and make a link:
- cd ..../vdr-1.2.5/PLUGINS/src
- tar zxvf ..../vdr-ttxtsubs-0.0.4b.tgz
- ln -s ttxtsubs-0.0.4b ttxtsubs
+ cd ..../vdr-1.2.6/PLUGINS/src
+ tar zxvf ..../vdr-ttxtsubs-0.0.5.tgz
+ ln -s ttxtsubs-0.0.5 ttxtsubs
Go back to your VDR directory and install the patches and the new files:
cd ../../
- cp PLUGINS/src/ttxtsubs-0.0.4b/vdrttxtsubshooks.[ch] .
- patch -b < PLUGINS/src/ttxtsubs-0.0.4b/VDR.patch
+ cp PLUGINS/src/ttxtsubs-0.0.5/vdrttxtsubshooks.[ch] .
+ patch -b < PLUGINS/src/ttxtsubs-0.0.5/VDR.patch
Rebuild VDR:
make clean
diff --git a/TROUBLESHOOTING b/TROUBLESHOOTING
new file mode 100644
index 0000000..062becd
--- /dev/null
+++ b/TROUBLESHOOTING
@@ -0,0 +1,244 @@
+
+Ttxtsubs is made to be fully automatic with no other user settable
+settings than preferred subtitling language or languages and a few
+appearance options. This is how set top boxes work, and, in my
+opinion, how these things should work. Users should not have to know
+anything about PIDs, encodings or other strange information as in this
+case teletext page numbers.
+
+Sadly, some channels do not provide the information necessary for
+automatic subtitle decoders to do it's work, and some do but do it
+wrong. There has also been bugs in ttxtsubs that made it incorrectly
+parse the information it gets, I of course hope those are gone by now.
+
+If you think there are subtitles on a channel but ttxtsubs doesn't
+show them, you may want to read the text below.
+
+
+Troubleshooting ttxtsubs
+------------------------
+
+A good thing to check first is how another set top box behaves. If the
+other set top box automatically finds and displays teletext subtitles
+while ttxtsubs don't, there is probably a problem in ttxtsubs. If the
+channel in question is a French, please see the French channel problem
+section below.
+
+If neither the set top box nor ttxtsubs automatically finds the
+subtitles but you can get them by manually entering the teletext page
+number for them on your TV set or your DVB decoder, chances are that
+the subtitles aren't announced in the channel's "service information",
+at least not correctly. You can double check this using dvbsnoop, see
+below.
+
+
+To find the subtitles, a DVB receiver as ttxtsubs scans the channel's
+"Service Information". This meta data contains information about what
+PIDs to use for receiving the channel, such as what PID to use for
+video and what audio PID should be used for what language. VDR 1.3 and
+up uses the Service Information for automatic video and audio PID
+setup just as a typical set top box does.
+
+For teletext with or without subtitles, the Service Information
+contains information about what PID and what teletext page to use for
+what language and purpose. A typical set of information for a channel
+with Norwegian and Swedish teletext with subtitles could look like
+this:
+ PID Language Teletext Page Purpose
+ 4711 nor 200 Initial page for teletext browsing
+ 4711 nor 299 Subtitles
+ 4711 nor 298 Subtitles for hearing impaired
+ 4711 swe 300 Initial page for teletext browsing
+ 4711 swe 399 Subtitles
+ 4711 swe 398 Subtitles for hearing impaired
+In this case, a receiver set up for Norwegian subtitles for hearing
+impaired would use PID 4711 and teletext page 298 for subtitles. If
+the user pushes the button for interactive teletext information
+browsing, the set top box should start with presenting page 200 which
+is supposed to be an index page in Norwegian.
+Note that the PID may be different for each language and purpose. This
+is one reason why ttxtsubs has to find out the PID itself and doesn't
+care at all about how you set up the channel's TPid.
+
+
+To find out what ttxtsubs is doing, you must currently (0.0.5pre2)
+look at the stderr output in the shell where you run VDR. In a future
+version, it may instead show this in the VDR menus in a more user
+friendly manner. At the end of this text you can find some typical
+messages from ttxtsubs with explanations.
+
+
+You can use dvbsnoop, http://dvbsnoop.sourceforge.net, to check what
+the service information really says.
+First dump pid 0 to find the Program Map PID for your channel:
+ $ dvbsnoop -n 1 0
+and get for example:
+ Program_number: 5060 (0x13c4)
+ reserved: 7 (0x07)
+ Program_map_PID: 5060 (0x13c4)
+The entry you are looking for is the one with a Program_number the
+same as the Sid number in VDR.
+If you don't know the program number, you can dump pid 17 and
+look for the channel name you want and get the Service_id number:
+ $ dvbsnoop -n 1 17
+You may need to do this several times to find your channel (or use a
+number larger than 1 after -n).
+In this case the program map PID is the same as the Program Number.
+
+When you know the program map PID, dump it:
+ $ dvbsnoop -n 1 5060
+and look for
+ DVB-DescriptorTag: 86 (0x56) [= teletext_descriptor]
+Again, you may need to do this several times to find this information
+(or use a number larger than 1 after -n).
+On a well behaved channel with teletext subtitles you should see
+something like this:
+...
+ Elementary_PID: 1024 (0x0400)
+...
+ DVB-DescriptorTag: 86 (0x56) [= teletext_descriptor]
+ Descriptor_length: 30 (0x1e)
+ ISO639_language_code: swe
+ Teletext_type: 1 (0x01) [= initial teletext page]
+ Teletext_magazine_number: 1 (0x01)
+ Teletext_page_number: 0 (0x00)
+
+ ISO639_language_code: swe
+ Teletext_type: 2 (0x02) [= teletext subtitle page]
+ Teletext_magazine_number: 6 (0x06)
+ Teletext_page_number: 146 (0x92)
+
+ ISO639_language_code: swe
+ Teletext_type: 5 (0x05) [= teletext subtitle page for hearing impaired people]
+ Teletext_magazine_number: 7 (0x07)
+ Teletext_page_number: 146 (0x92)
+....
+This is the information that a DVB decoder uses to find the
+subtitles. If you find a DVB-DescriptorTag of 69 (0x45) =
+VBI_data_descriptor or 70 (0x46) = VBI_teletext_descriptor that you
+think could point out the subtitles, please contact the
+author. Ttxtsubs currently doesn't decode those as I have never seen
+them, but it is probably easy to implement. If there is no information
+for subtitles but there are subtitles in the teletext stream, please
+ask the TV company to fix it, see next section.
+
+
+If you want to watch a channel that has teletext subtitles but the
+subtitles aren't announced in the Service Information, contact the TV
+company and ask them to correct this. If you politely inform them
+about the problem, they may very well correct it. After all, it is in
+their interrest to have satisfied viewers. Don't take "you will have
+to enter the subtitles page number on your TV set" as an answer - this
+is just to sad an user experience and is not how it is supposed to
+work with DVB. Try to convince them that this is what you and the
+standard and the viewers want. Here is a template for such a letter:
+-----
+Sirs,
+
+Your TV channel [CHANNEL NAME] that can be found on DVB
+[Satellite/Cable network/Terrestrial network] [SATELLITE POS/NETWORK
+NAME] with video PID [NNN], audio PID [NNN] and teletext PID [NNN] has
+teletext subtitles on page[s] [NNN[, NNN...]]. Sadly, the DVB service
+information for your channel does not announce the subtitles, so my
+DVB receiver can not find them and display them.
+
+I hereby ask you to update your channel's service information to
+also announce the existence of the subtitles. Since your service
+information already announce the existence of the teletext PID, only a
+small addition is needed to also announce the teletext subtitle
+page[s].
+
+For further information about the service information descriptor that
+is needed, please see the standard document ETSI EN 300 468, paragraph
+6.2.40. You can download this document for free from www.etsi.org.
+
+By sending a teletext subtitles descriptor according to this
+specification, my and other decoders that are using it will be able to
+automatically pick them up and present the subtitles to the viewer.
+-----
+
+
+There is a known problem with some French channels. Because of some
+old specification interpretation mistake, some channels send the
+teletext page number in decimal coded as binary, and not as the
+standard says in hexadecimal. Since there are set top boxes sold that
+has the same bug so that they can work with there channels, they are
+reluctant to correct this. The service information for those channels
+typically say that the subtitles are on page 858 or 859 when they
+really are on page 888 or 889. To still be able to use those channels,
+you can in ttxtsubs turn on the "Workaround for some French chns"
+option which will remap numbers in the X5Y range into X8Y. Since this
+would also remap the page number for a channel that really is using
+for example page 859, this is an option that is off by default. If
+you see this problem, please contact the channel provider and make
+them understand that time will only make it harder to correct this
+mistake as more decoders with this bug will be out there and software
+updates for older set top boxes will be harder and harder to get.
+Some channels do what they can to gradually correct this by sending
+both a descriptor for French subtitles on page 859 (whish is
+interpreted as page 889 on the old non standard decoders), and as
+French for the Hearing Impaired on page 889 which is the setting that
+can be used on standard compliant decoders.
+(For the technically interrested: The hundreds figure is in teletext
+called "magazine" and is sent separately from the 8 bit "page
+number". Each magazine can actually have up to 256 pages and the page
+number is really in hex, but only the 100 pages which use only the
+figures 0-9 are normally seen by the user as only those numbers can be
+entered on the remote control keyboard. 59 hex is 89 decimal, and here
+is where something went wrong.)
+
+
+Note that some channels don't use teletext subtitles but instead use
+DVB subtitles, which is something different. DVB subtitles are sent as
+bitmaps, somewhat like DVD subtitles. You can find a plugin for DVB
+subtitles here: http://www.saunalahti.fi/~opvirtan/vdr/subtitles/
+
+
+Typical ttxtsubs messages and explanations
+------------------------------------------
+
+=====
+ttxtsubs: Found selected subtitles on PID 1024, page 792
+-----
+The subtitles for the language that you have selected is at teletext
+page 792 on teletext PID 1024.
+
+=====
+ttxtsubs: Found non HI subtitles on PID 976, page 199
+-----
+You have selected subtitles for the hearing impaired, but on this
+channel there are no such subtitles. Ttxtsubs uses the non hearing
+impaired subtitles for the selected language instead.
+
+=====
+ttxtsubs: Wanted subtitle language(s) not found on channel, available languages:
+ 889: fra (Subtitles)
+-----
+Subtitles for the language you have selected is not available on this
+channel, but there are other alternatives, in this case French.
+
+=====
+ttxtsubs: Wanted subtitle language(s) not found on channel, available languages:
+ 100: swe (Initial Page (The teletext start page, not a subtitles page!))
+-----
+This means that there is a start page for interactive teletext
+browsing announced, but no subtitles. There may still be subtitles in
+the teletext stream, but ttxtsubs won't find them since they are not
+announced correctly. If so, double check that this is the case and
+then contact the TV company, see above.
+
+=====
+ttxtsubs: No teletext subtitles on channel.
+-----
+No teletext stream at all was announced for this channel.
+
+=====
+ttxtsubs: Service Information read: timeout!
+-----
+No Service Information data could be found for 250 ms (a quarter of a
+second). This could be an indication of bad reception, but may also be
+because the cards tuner, a motorized antenna or a LNB hasn't yet
+settled for the new channel. Ttxtsubs will retry for up to 10
+seconds. Ttxtsubs will cache whatever it finally finds out about the
+channel, so you will only see this happening at the most once for each
+channel and vdr run.
diff --git a/VDR.patch b/VDR.patch
index dfe7a1e..7ef6fd9 100644
--- a/VDR.patch
+++ b/VDR.patch
@@ -1,7 +1,7 @@
-diff -upr ./DIST/vdr-1.2.1/Makefile ./Makefile
---- ./DIST/vdr-1.2.1/Makefile 2003-01-06 13:28:09.000000000 +0100
-+++ ./Makefile 2003-07-16 05:39:36.000000000 +0200
-@@ -36,7 +36,8 @@ OBJS = audio.o channels.o ci.o config.o
+diff -upr ./DIST/vdr-1.2.5/Makefile ./Makefile
+--- ./DIST/vdr-1.2.5/Makefile 2003-08-09 13:09:45.000000000 +0200
++++ ./Makefile 2003-09-26 01:49:20.000000000 +0200
+@@ -37,7 +37,8 @@ OBJS = audio.o channels.o ci.o config.o
dvbplayer.o dvbspu.o eit.o eitscan.o font.o i18n.o interface.o keys.o\
lirc.o menu.o menuitems.o osdbase.o osd.o player.o plugin.o rcu.o\
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sources.o\
@@ -11,9 +11,9 @@ diff -upr ./DIST/vdr-1.2.1/Makefile ./Makefile
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
-diff -upr ./DIST/vdr-1.2.1/dvbplayer.c ./dvbplayer.c
---- ./DIST/vdr-1.2.1/dvbplayer.c 2003-05-24 11:04:26.000000000 +0200
-+++ ./dvbplayer.c 2003-07-16 05:39:36.000000000 +0200
+diff -upr ./DIST/vdr-1.2.5/dvbplayer.c ./dvbplayer.c
+--- ./DIST/vdr-1.2.5/dvbplayer.c 2003-05-24 11:04:26.000000000 +0200
++++ ./dvbplayer.c 2003-09-26 01:49:20.000000000 +0200
@@ -14,6 +14,7 @@
#include "ringbuffer.h"
#include "thread.h"
@@ -88,31 +88,31 @@ diff -upr ./DIST/vdr-1.2.1/dvbplayer.c ./dvbplayer.c
if (p) {
int w = PlayVideo(p, pc);
if (w > 0) {
-diff -upr ./DIST/vdr-1.2.1/menu.c ./menu.c
---- ./DIST/vdr-1.2.1/menu.c 2003-06-07 14:31:57.000000000 +0200
-+++ ./menu.c 2003-07-16 05:39:36.000000000 +0200
-@@ -2969,8 +2969,18 @@ cRecordControl::cRecordControl(cDevice *
-
- cRecordingUserCommand::InvokeCommand(RUC_BEFORERECORDING, fileName);
- const cChannel *ch = timer->Channel();
+diff -upr ./DIST/vdr-1.2.5/menu.c ./menu.c
+--- ./DIST/vdr-1.2.5/menu.c 2003-09-14 12:49:28.000000000 +0200
++++ ./menu.c 2003-09-26 01:50:59.000000000 +0200
+@@ -3014,8 +3014,18 @@ cRecordControl::cRecordControl(cDevice *
+ isyslog("record %s", fileName);
+ if (MakeDirs(fileName, true)) {
+ const cChannel *ch = timer->Channel();
+#ifdef VDRTTXTSUBSHOOKS
-+ cTtxtSubsRecorderBase *subsRecorder = cVDRTtxtsubsHookListener::Hook()
-+ ->NewTtxtSubsRecorder(device, ch);
-+ recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2(), subsRecorder);
++ cTtxtSubsRecorderBase *subsRecorder = cVDRTtxtsubsHookListener::Hook()
++ ->NewTtxtSubsRecorder(device, ch);
++ recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2(), subsRecorder);
+#else
- recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
+ recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
+#endif
- if (device->AttachReceiver(recorder)) {
+ if (device->AttachReceiver(recorder)) {
+#ifdef VDRTTXTSUBSHOOKS
-+ if(subsRecorder)
-+ subsRecorder->DeviceAttach();
++ if(subsRecorder)
++ subsRecorder->DeviceAttach();
+#endif
- Recording.WriteSummary();
- cStatus::MsgRecording(device, Recording.Name());
- if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
-diff -upr ./DIST/vdr-1.2.1/menu.h ./menu.h
---- ./DIST/vdr-1.2.1/menu.h 2003-05-24 18:35:52.000000000 +0200
-+++ ./menu.h 2003-07-16 05:39:36.000000000 +0200
+ Recording.WriteSummary();
+ cStatus::MsgRecording(device, Recording.Name());
+ if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
+diff -upr ./DIST/vdr-1.2.5/menu.h ./menu.h
+--- ./DIST/vdr-1.2.5/menu.h 2003-08-03 11:37:18.000000000 +0200
++++ ./menu.h 2003-09-26 01:49:20.000000000 +0200
@@ -14,6 +14,7 @@
#include "device.h"
#include "osd.h"
@@ -121,9 +121,9 @@ diff -upr ./DIST/vdr-1.2.1/menu.h ./menu.h
#include "recorder.h"
#include "recording.h"
-diff -upr ./DIST/vdr-1.2.1/osd.c ./osd.c
---- ./DIST/vdr-1.2.1/osd.c 2003-06-04 18:13:00.000000000 +0200
-+++ ./osd.c 2003-07-16 05:43:06.000000000 +0200
+diff -upr ./DIST/vdr-1.2.5/osd.c ./osd.c
+--- ./DIST/vdr-1.2.5/osd.c 2003-06-04 18:13:00.000000000 +0200
++++ ./osd.c 2003-09-26 01:49:20.000000000 +0200
@@ -12,6 +12,7 @@
#include "device.h"
#include "i18n.h"
@@ -153,9 +153,9 @@ diff -upr ./DIST/vdr-1.2.1/osd.c ./osd.c
}
void cOsd::Clear(void)
-diff -upr ./DIST/vdr-1.2.1/recorder.c ./recorder.c
---- ./DIST/vdr-1.2.1/recorder.c 2003-05-16 15:33:04.000000000 +0200
-+++ ./recorder.c 2003-07-16 05:39:36.000000000 +0200
+diff -upr ./DIST/vdr-1.2.5/recorder.c ./recorder.c
+--- ./DIST/vdr-1.2.5/recorder.c 2003-08-02 15:01:19.000000000 +0200
++++ ./recorder.c 2003-09-26 01:52:35.000000000 +0200
@@ -10,6 +10,8 @@
#include <stdarg.h>
#include <stdio.h>
@@ -184,10 +184,10 @@ diff -upr ./DIST/vdr-1.2.1/recorder.c ./recorder.c
+#ifdef VDRTTXTSUBSHOOKS
+ ttxtSubsRecorder = tsr;
+#endif
- isyslog("record %s", FileName);
- // Create directories if necessary:
-@@ -61,6 +70,10 @@ cRecorder::cRecorder(const char *FileNam
+ // Make sure the disk is up and running:
+
+@@ -55,6 +64,10 @@ cRecorder::cRecorder(const char *FileNam
cRecorder::~cRecorder()
{
Detach();
@@ -198,7 +198,7 @@ diff -upr ./DIST/vdr-1.2.1/recorder.c ./recorder.c
delete index;
delete fileName;
delete remux;
-@@ -135,6 +148,19 @@ void cRecorder::Action(void)
+@@ -129,6 +142,19 @@ void cRecorder::Action(void)
break;
}
fileSize += Result;
@@ -218,9 +218,9 @@ diff -upr ./DIST/vdr-1.2.1/recorder.c ./recorder.c
}
else
break;
-diff -upr ./DIST/vdr-1.2.1/recorder.h ./recorder.h
---- ./DIST/vdr-1.2.1/recorder.h 2002-06-08 11:35:03.000000000 +0200
-+++ ./recorder.h 2003-07-16 05:39:36.000000000 +0200
+diff -upr ./DIST/vdr-1.2.5/recorder.h ./recorder.h
+--- ./DIST/vdr-1.2.5/recorder.h 2002-06-08 11:35:03.000000000 +0200
++++ ./recorder.h 2003-09-26 01:49:20.000000000 +0200
@@ -15,6 +15,7 @@
#include "remux.h"
#include "ringbuffer.h"
diff --git a/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.README b/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.README
new file mode 100644
index 0000000..334cdfc
--- /dev/null
+++ b/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.README
@@ -0,0 +1,4 @@
+
+2004-05-28
+A test patch from Rolf Ahrenberg to make ttxtsubs work with the new
+OSD mechanism in VDR 1.3.8.
diff --git a/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.gz b/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.gz
new file mode 100644
index 0000000..461363c
--- /dev/null
+++ b/contrib/vdr-1.3.8-ttxtsubs-0.0.5pre2-charset_fix-custom_color.diff.gz
Binary files differ
diff --git a/siinfo.c b/siinfo.c
index 717580c..ed5bcd5 100644
--- a/siinfo.c
+++ b/siinfo.c
@@ -332,6 +332,17 @@ static void addpageinfo(struct ttxtinfo *info, uint16_t pid, struct ttxt_descr *
pa->mag = descr->d[descr_index].type_mag & 0x7;
pa->page = descr->d[descr_index].page_no;
+#if 0
+ // Test - rewrite initial page 100 into subtitles page 150
+ if(pa->type == TTXT_INITIAL_PAGE &&
+ pa->mag = 0x1 &&
+ pa->page == 0x00) {
+ pa->type = TTXT_SUBTITLE_PAGE; // or TTXT_SUBTITLE_HEARING_IMPAIRED_PAGE ?
+ pa->mag = 0x1;
+ pa->page = 0x50;
+ }
+#endif
+
if(globals.frenchSpecial()) {
/* By some silly reason some French channels (Canal+ and CanalSatellite)
announce subtitles with the page number in decimal, for example
diff --git a/ttxtsubs.c b/ttxtsubs.c
index 8e9b0c7..7a332d1 100644
--- a/ttxtsubs.c
+++ b/ttxtsubs.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: ttxtsubs.c,v 1.23 2004/03/02 01:08:45 ragge Exp $
+ * $Id: ttxtsubs.c,v 1.26 2004/05/31 19:59:14 ragge Exp $
*/
#include <vdr/plugin.h>
@@ -12,6 +12,18 @@
#include <vdr/menuitems.h>
#include <vdr/config.h>
+#define TIMEMEASURE 0
+#if TIMEMEASURE
+#define TIMEVALSIMPL(tv, tv2) \
+ if(tv2.tv_usec < tv.tv_usec) { \
+ tv2.tv_usec += 1000000; \
+ tv2.tv_sec -= 1; \
+ }
+
+#include <sys/time.h>
+#include <time.h>
+#endif
+
#include "ttxtsubsglobals.h"
#include "ttxtsubsdisplayer.h"
#include "ttxtsubsrecorder.h"
@@ -20,7 +32,7 @@
#include "siinfo.h"
#include "ttxtsubs.h"
-static const char *VERSION = "0.0.5pre2";
+static const char *VERSION = "0.0.5";
static const char *DESCRIPTION = "Teletext subtitles";
cTtxtsubsConf globals;
@@ -309,6 +321,10 @@ bool cPluginTtxtsubs::SetupParse(const char *Name, const char *Value)
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
@@ -333,6 +349,13 @@ void cPluginTtxtsubs::ChannelSwitch(const cDevice *Device, int ChannelNumber)
} else
StopTtxt();
}
+#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",
+ tv2.tv_sec - tv.tv_sec, tv2.tv_usec - tv.tv_usec);
+#endif
}
void cPluginTtxtsubs::Replaying(const cControl *Control, const char *Name)
@@ -376,8 +399,9 @@ void cPluginTtxtsubs::StartTtxtLive(const cDevice *Device, int pid, int page)
if(!mDispl) {
cTtxtSubsLiveReceiver *r;
//dprint("teletext subtitles started on pid %d\n", pid);
- mDispl = r = new cTtxtSubsLiveReceiver(pid, page);
+ mDispl = r = new cTtxtSubsLiveReceiver(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"); //
ShowTtxt();
} else
@@ -404,7 +428,7 @@ void cPluginTtxtsubs::StopTtxt(void)
cTtxtSubsDisplayer *d = mDispl;
HideTtxt();
mDispl = NULL;
- delete d;
+ delete d; // takes 0.03-0.04 s
}
}
@@ -569,8 +593,12 @@ cMenuSetupTtxtsubs::cMenuSetupTtxtsubs(cPluginTtxtsubs *ttxtsubs, int doStore)
char str[100];
char *allowedc = "abcdefghijklmnopqrstuvwxyz";
- cOsdItem *item = new cOsdItem("----------------------------");
+ cOsdItem *item = new cOsdItem("--------------------------------------------------------");
+#if defined(ELCHIAIOVERSION)
+ item->SetColor(clrScrolLine);
+#else
item->SetColor(clrCyan);
+#endif
Add(item);
sprintf(str, "%s %d", tr("Language"), n + 1);
diff --git a/ttxtsubsdisplay.c b/ttxtsubsdisplay.c
index 5bc302b..32651a3 100644
--- a/ttxtsubsdisplay.c
+++ b/ttxtsubsdisplay.c
@@ -218,7 +218,7 @@ void cTtxtSubsDisplay::TtxtData(const uint8_t *Data)
page.flags |= inhibit_display;
// if(fi[7] & 0x02) // Magazine Serial
- page.national_charset = ((fi[7] & 0x80) >> 5) +
+ page.national_charset = ((fi[7] & 0x80) >> 7) +
((fi[7] & 0x20) >> 4) + ((fi[7] & 0x08) >> 1);
mPageState = collecting;
diff --git a/ttxtsubsi18n.c b/ttxtsubsi18n.c
index 6507a5b..1f7498c 100644
--- a/ttxtsubsi18n.c
+++ b/ttxtsubsi18n.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: ttxtsubsi18n.c,v 1.1 2004/03/02 01:08:45 ragge Exp $
+ * $Id: ttxtsubsi18n.c,v 1.6 2004/05/31 19:12:22 ragge Exp $
*/
#include "ttxtsubsi18n.h"
@@ -12,14 +12,14 @@
const tI18nPhrase Phrases[] =
{
{ "Teletext subtitles", // English
- "", // Deutsch
+ "Videotextuntertitel", // German - Tobias Grimm 2004-05-21
"", // Slovenian
- "", // Italian
+ "Sottotitoli televideo", // Italian - Sean Carlos 2004-03-07
"", // Dutch
"", // Portuguese
- "", // French
+ "Sous-titrage télétexte", // French - Stéphane Esté-Gracias 2004-03-02
"", // Norwegian
- "Tekstitys (Teksti-TV)", // Finnish
+ "Tekstitys (Teksti-TV)", // Finnish - Rolf Ahrenberg 2004-03-01
"", // Polish
"", // Spanish
"", // Greek
@@ -31,684 +31,684 @@ const tI18nPhrase Phrases[] =
"", // Russian
#endif
},
- { "Hide teletext subtitles",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Piilota tekstitys (Teksti-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
- "Göm textning (Text-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Display teletext subtitles",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Näytä tekstitys (Teksti-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
- "Visa textning (Text-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Position Teletext Subtitles for 4:3/Anamorph",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "4:3/Anamorfinen tekstitys (Teksti-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
- "Textning för 4:3/anamorf (Text-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Position Teletext Subtitles for Letterbox",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Letterbox tekstitys (Teksti-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
- "Textning för brevlådeformat (Text-TV)",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Display Subtitles",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Näytä tekstitykset",
- "", // TODO
- "", // TODO
- "", // TODO
- "Visa textning",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Record Subtitles",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Tallenna tekstitykset",
- "", // TODO
- "", // TODO
- "", // TODO
- "Spela in textning",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Main Menu Alternative",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Päävalikon toiminnot",
- "", // TODO
- "", // TODO
- "", // TODO
- "Huvudmenyalternativ",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Display on/off",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "aktivointi",
- "", // TODO
- "", // TODO
- "", // TODO
- "Visa textning på/av",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "4:3/Letterbox",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "kuvasuhde",
- "", // TODO
- "", // TODO
- "", // TODO
- "4:3/brevlådeformat",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Text Horizontal Position",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Vaakatasaus",
- "", // TODO
- "", // TODO
- "", // TODO
- "Horisontell position",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Left",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "vasen",
- "", // TODO
- "", // TODO
- "", // TODO
- "vänster",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Center",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "keskitä",
- "", // TODO
- "", // TODO
- "", // TODO
- "centrerad",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Right",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "oikea",
- "", // TODO
- "", // TODO
- "", // TODO
- "höger",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Text Vertical Position",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Pystytasaus",
- "", // TODO
- "", // TODO
- "", // TODO
- "Vertikal positon",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "4:3/Anamorph",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "4:3/anamorfinen",
- "", // TODO
- "", // TODO
- "", // TODO
- "4:3/anamorf",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Letterbox",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "letterbox",
- "", // TODO
- "", // TODO
- "", // TODO
- "brevlådeformat",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Text Vertical Adjust",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Pystytasauksen hienosäätö",
- "", // TODO
- "", // TODO
- "", // TODO
- "Vertikal justering",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Line Spacing Adjust",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Rivivälin hienosäätö",
- "", // TODO
- "", // TODO
- "", // TODO
- "Radavstånd",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Workaround for some French chns",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Ranskalainen silmänkääntötemppu",
- "", // TODO
- "", // TODO
- "", // TODO
- "Fix för vissa franska kanaler",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Language",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Tekstityskieli",
- "", // TODO
- "", // TODO
- "", // TODO
- "Språk",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Hearing Impaired",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "kuulorajoitteisille",
- "", // TODO
- "", // TODO
- "", // TODO
- "Nedsatt hörsel",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Text Color",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Kirjasimen väri",
- "", // TODO
- "", // TODO
- "", // TODO
- "Färg på text",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Background Color",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "Taustaväri",
- "", // TODO
- "", // TODO
- "", // TODO
- "Färg på bakgrund",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Black",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "musta",
- "", // TODO
- "", // TODO
- "", // TODO
- "svart",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "White",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "valkoinen",
- "", // TODO
- "", // TODO
- "", // TODO
- "vit",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Red",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "punainen",
- "", // TODO
- "", // TODO
- "", // TODO
- "röd",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Green",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "vihreä",
- "", // TODO
- "", // TODO
- "", // TODO
- "grön",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Yellow",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "keltainen",
- "", // TODO
- "", // TODO
- "", // TODO
- "gul",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Magenta",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "magenta",
- "", // TODO
- "", // TODO
- "", // TODO
- "magenta",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Blue",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "sininen",
- "", // TODO
- "", // TODO
- "", // TODO
- "blå",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Cyan",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "syaani",
- "", // TODO
- "", // TODO
- "", // TODO
- "cyan",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Grey",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "harmaa",
- "", // TODO
- "", // TODO
- "", // TODO
- "grå",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Transparent",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "läpinäkyvä",
- "", // TODO
- "", // TODO
- "", // TODO
- "transparent",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
-#endif
- },
- { "Background",
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "", // TODO
- "tausta",
- "", // TODO
- "", // TODO
- "", // TODO
- "bakgrund",
- "", // TODO
- "", // TODO
- "", // TODO
-#if VDRVERSNUM >= 10300
- "", // TODO
+ { "Hide teletext subtitles", // English
+ "Verstecke Videotextuntertitel", // German
+ "", // Slovenian
+ "Nascondi sottotitoli televideo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Masquer le sous-titrage", // French
+ "", // Norwegian
+ "Piilota tekstitys (Teksti-TV)", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Göm textning (Text-TV)", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Display teletext subtitles", // English
+ "Zeige Videotextuntertitel", // German
+ "", // Slovenian
+ "Visualizza sottotitoli televideo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Afficher le sous-titrage", // French
+ "", // Norwegian
+ "Näytä tekstitys (Teksti-TV)", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Visa textning (Text-TV)", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Position Teletext Subtitles for 4:3/Anamorph", // English
+ "Positioniere Videotext-Untertitel für 4:3/Anamorph", // German
+ "", // Slovenian
+ "Posizionare sottotitoli per 4:3/anamorfico", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Position du sous-titrage pour 4:3/Anamorph", // French
+ "", // Norwegian
+ "4:3/Anamorfinen tekstitys (Teksti-TV)", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Textning för 4:3/anamorf (Text-TV)", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Position Teletext Subtitles for Letterbox", // English
+ "Positioniere Videotext-Untertitel für Letterbox", // German
+ "", // Slovenian
+ "Posizionare sottotitoli per Letterbox", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Position du sous-titrage pour Letterbox", // French
+ "", // Norwegian
+ "Letterbox tekstitys (Teksti-TV)", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Textning för brevlådeformat (Text-TV)", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Display Subtitles", // English
+ "Zeige Untertitel", // German
+ "", // Slovenian
+ "Visualizza sottotitoli", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Afficher le sous-titrage", // French
+ "", // Norwegian
+ "Näytä tekstitykset", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Visa textning", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Record Subtitles", // English
+ "Nimm Untertitel auf", // German
+ "", // Slovenian
+ "Registra sottotitoli", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Enregistrer le sous-titrage", // French
+ "", // Norwegian
+ "Tallenna tekstitykset", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Spela in textning", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Main Menu Alternative", // English
+ "Hauptmenu Alternative", // German
+ "", // Slovenian
+ "Alternativa menù principale", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Choix du menu principal", // French
+ "", // Norwegian
+ "Päävalikon toiminnot", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Huvudmenyalternativ", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Display on/off", // English
+ "Anzeige ein/aus", // German
+ "", // Slovenian
+ "Visualizza sì/no", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Affichage", // French
+ "", // Norwegian
+ "aktivointi", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Visa textning på/av", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "4:3/Letterbox", // English
+ "4:3/Letterbox",
+ "", // Slovenian
+ "4:3/Letterbox", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "4:3/Letterbox", // French
+ "", // Norwegian
+ "kuvasuhde", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "4:3/brevlådeformat", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Text Horizontal Position", // English
+ "Horizontale Textposition", // German
+ "", // Slovenian
+ "Posizione testo orizzontale", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Position horizontale du texte", // French
+ "", // Norwegian
+ "Vaakatasaus", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Horisontell position", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Left", // English
+ "Links", // German
+ "", // Slovenian
+ "Sinistra", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Gauche", // French
+ "", // Norwegian
+ "vasen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "vänster", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Center", // English
+ "Mitte", // German
+ "", // Slovenian
+ "Centro", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Centre", // French
+ "", // Norwegian
+ "keskitä", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "centrerad", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Right", // English
+ "Rechts", // German
+ "", // Slovenian
+ "Destra", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Droite", // French
+ "", // Norwegian
+ "oikea", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "höger", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Text Vertical Position", // English
+ "Vertikale Textposition", // German
+ "", // Slovenian
+ "Posizione testo verticale", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Position verticale du texte", // French
+ "", // Norwegian
+ "Pystytasaus", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Vertikal positon", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "4:3/Anamorph", // English
+ "4:3/Anamorph", // German
+ "", // Slovenian
+ "4:3/anamorfico", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "4:3/Anamorph", // French
+ "", // Norwegian
+ "4:3/anamorfinen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "4:3/anamorf", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Letterbox", // English
+ "Letterbox", // German
+ "", // Slovenian
+ "Letterbox", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Letterbox", // French
+ "", // Norwegian
+ "letterbox", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "brevlådeformat", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Text Vertical Adjust", // English
+ "Text vertikal verschieben", // German
+ "", // Slovenian
+ "Correzione testo verticale", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Ajustement vertical du texte", // French
+ "", // Norwegian
+ "Pystytasauksen hienosäätö", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Vertikal justering", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Line Spacing Adjust", // English
+ "Zeilenabstand einstellen", // German
+ "", // Slovenian
+ "Correzione interlinea", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Espacement des lignes", // French
+ "", // Norwegian
+ "Rivivälin hienosäätö", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Radavstånd", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Workaround for some French chns", // English
+ "Workaround für französische Kanäle", // German
+ "", // Slovenian
+ "Correzione per canali francesi", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Contournement chaînes françaises", // French
+ "", // Norwegian
+ "Ranskalainen silmänkääntötemppu", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Fix för vissa franska kanaler", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Language", // English
+ "Sprache", // German
+ "", // Slovenian
+ "Lingua", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Langues", // French
+ "", // Norwegian
+ "Tekstityskieli", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Språk", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Hearing Impaired", // English
+ "Gehörlose", // German
+ "", // Slovenian
+ "Non udente", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Malentendant", // French
+ "", // Norwegian
+ "kuulorajoitteisille", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Nedsatt hörsel", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Text Color", // English
+ "Textfarbe", // German
+ "", // Slovenian
+ "Colore testo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Couleur du text", // French
+ "", // Norwegian
+ "Kirjasimen väri", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Färg på text", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Background Color", // English
+ "Hintergrundfarbe", // German
+ "", // Slovenian
+ "Colore sfondo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Couleur du fond", // French
+ "", // Norwegian
+ "Taustaväri", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "Färg på bakgrund", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Black", // English
+ "Schwarz", // German
+ "", // Slovenian
+ "Nero", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Noir", // French
+ "", // Norwegian
+ "musta", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "svart", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "White", // English
+ "Weiss", // German
+ "", // Slovenian
+ "Bianco", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Blanc", // French
+ "", // Norwegian
+ "valkoinen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "vit", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Red", // English
+ "Rot", // German
+ "", // Slovenian
+ "Rosso", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Rouge", // French
+ "", // Norwegian
+ "punainen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "röd", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Green", // English
+ "Grün", // German
+ "", // Slovenian
+ "Verde", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Vert", // French
+ "", // Norwegian
+ "vihreä", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "grön", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Yellow", // English
+ "Gelb", // German
+ "", // Slovenian
+ "Giallo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Jaune", // French
+ "", // Norwegian
+ "keltainen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "gul", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Magenta", // English
+ "Magenta", // German
+ "", // Slovenian
+ "Magenta", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Magenta", // French
+ "", // Norwegian
+ "magenta", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "magenta", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Blue", // English
+ "Blau", // German
+ "", // Slovenian
+ "Azzurro", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Bleu", // French
+ "", // Norwegian
+ "sininen", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "blå", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Cyan", // English
+ "Türkis", // German
+ "", // Slovenian
+ "Ciano", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Cyan", // French
+ "", // Norwegian
+ "syaani", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "cyan", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Grey", // English
+ "Grau", // German
+ "", // Slovenian
+ "Grigio", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Gris", // French
+ "", // Norwegian
+ "harmaa", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "grå", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Transparent", // English
+ "Transparent", // German
+ "", // Slovenian
+ "Trasparente", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Transparent", // French
+ "", // Norwegian
+ "läpinäkyvä", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "transparent", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
+#endif
+ },
+ { "Background", // English
+ "Hintergrund", // German
+ "", // Slovenian
+ "Sfondo", // Italian
+ "", // Dutch
+ "", // Portuguese
+ "Fond", // French
+ "", // Norwegian
+ "tausta", // Finnish
+ "", // Polish
+ "", // Spanish
+ "", // Greek
+ "bakgrund", // Swedish
+ "", // Romanian
+ "", // Hungarian
+ "", // Catalenian
+#if VDRVERSNUM >= 10300
+ "", // Russian
#endif
},
{ NULL }