summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Grimm <tobias@e-tobi.loc>2008-12-13 11:04:46 +0100
committerTobias Grimm <tobias@e-tobi.loc>2008-12-13 11:04:46 +0100
commit87ba3eb8ae4a256b7cea63748cef013e3fa23193 (patch)
treebb42479f29b5ca69ee8a22832894b74bb8f87c03
parente2bcda13cdbcaa85f8b7462977b946b095c8b24a (diff)
downloadvdr-plugin-ttxtsubs-release/v0.0.5.tar.gz
vdr-plugin-ttxtsubs-release/v0.0.5.tar.bz2
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.
-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 }