mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.7.11
- Fixed resetting the file size when regenerating the index file. - The new function cDevice::PatPmtParser() can be used in derived devices to access the PAT/PMT of the currently replayed material. - Updated the Italian OSD texts (thanks to Diego Pierotto). - The PCR pid in generated PMTs is now set to 0x1FFF ("no PCR pid") in cPatPmtGenerator::GeneratePmt(), because VDR doesn't record the PCR pid. - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - The 'sky' plugin is no longer part of the VDR source. - Improved SPU handling on devices with limited OSD capabilities (thanks to Matthieu Castet). - Several code modifications to avoid compiler warnings (thanks to Winfried Köhler). - Added stream type 11172 AUDIO to cPatPmtParser::ParsePmt() (thanks to Johann Friedrichs). - Removed debug output of '-' from cTransfer::Receive(). - Added defines for large files to the 'newplugin' script (reported by Udo Richter). - Removed the workaround for short channel names of "Kabel Deutschland", because apparently they now have their data according to the DVB standard (thanks to Johann Friedrichs). - Some fixes to dvbspu.[hc] (thanks to Johann Friedrichs). - Fixed a busy loop when moving editing marks (thanks to Johann Friedrichs). - Updated sources.conf (thanks to Derek Kelly). - Modified cCharSetConv so that it can be used to convert from "whatever VDR uses" to a given code (thanks to Joachim Wilke). - Channel names containing commas are now handled correctly in channels.conf. If a channel's short name contains a comma, it is replaced with a '.'. - cDevice now logs the device number when a new device is created. - Fixed handling STREAMTYPE_11172_AUDIO in cPatPmtParser::ParsePmt(). - cParsePatPmt now has functions to retrieve the audio, dolby and subtitle pids. - cPatFilter::Process() now only stores CA descriptors for video and audio pids (thanks to Francesco Saverio Schiavarelli for reporting a problem with channels that have some encrypted components that VDR doesn't use). - cDevice::AddPid() now stores the stream type of the given pid (thanks to Andreas Regel). - Added cFont::FontName() and cFont::Size() (thanks to Andreas Regel). - cPatPmtParser now also stores the audio stream types. - The support for full featured DVB cards of the TT/FuSi design has been moved into the new plugin 'dvbsddevice'. On systems that use such a card as their primary device, this plugin now needs to be loaded when running VDR in order to view live or recorded video. If the plugin is not loaded, the card will be treated like a budget DVB card, and there will be no OSD or viewing capability. - Fixed handling the "CA PMT" generation (revised a change not mentioned in version 1.7.9's changes, which caused a malfunction with Conax and Viaccess CAMs). - Fixed stopping subtitle display when switching the primary device (thanks to Anssi Hannula). IMPORTANT NOTE TO PLUGIN AUTHORS: a plugin that implements a derived cDevice class that can replay video must now call the MakePrimaryDevice() function of its base class. - Fixed compiler warnings "format not a string literal and no format arguments" in some syslog calls (thanks to Rolf Ahrenberg). - The new command line options --edit and --genindex can be used to edit a recording or generate its index without actually starting the entire VDR (based on a patch from Helmut Auer). - Improved the description of the transponder parameters in vdr.5 (thanks to Winfried Köhler). - Avoiding setting the video stream type to 2 if the vpid is 0 (problem reported by Arthur Konovalov). - Implemented handling the "Content Descriptor" (based on a patch from Rolf Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the textual representation of the content descriptors as "genre". The epg.data file stores the genre using the tag character 'G'. - Implemented handling the "Parental Rating Descriptor" (based on a patch from Rolf Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the parental rating (if given) in their event displays. The epg.data file stores the parental rating using the tag character 'R'. IMPORTANT NOTE: if VDR doesn't display a parental rating, this does not necessarily mean that the given programme is suitable for all audiences! - Rearranged cEvent members to minimize memory waste. - After a CLRE command, no further EPG processing is now done for 10 seconds, so that data sent with subsequent PUTE commands doesn't interfere with data from the broadcasters (suggested by Helmut Auer). - Added support for DVB cards with multiple fontends. Note that this only works for DVB cards where each frontend can be used independently of all the others on the same adapter. - Fixed plugin arguments corruption with glibc 2.11 on x86_64 (thanks to Anssi Hannula).
This commit is contained in:
parent
ea01358b3b
commit
939081e274
31
CONTRIBUTORS
31
CONTRIBUTORS
@ -600,6 +600,9 @@ Helmut Auer <vdr@helmutauer.de>
|
|||||||
for suggesting to improve logging system time changes to avoid problems on slow
|
for suggesting to improve logging system time changes to avoid problems on slow
|
||||||
systems under heavy load
|
systems under heavy load
|
||||||
for making the SVDRP command PUTE support reading the EPG data from a given file
|
for making the SVDRP command PUTE support reading the EPG data from a given file
|
||||||
|
for a patch that was used to implement the command line options --edit and
|
||||||
|
--genindex
|
||||||
|
for suggesting to disable EPG processing for a while after a CLRE command
|
||||||
|
|
||||||
Jeremy Hall <jhall@UU.NET>
|
Jeremy Hall <jhall@UU.NET>
|
||||||
for fixing an incomplete initialization of the filter parameters in eit.c
|
for fixing an incomplete initialization of the filter parameters in eit.c
|
||||||
@ -1083,6 +1086,10 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
|
|||||||
contain UTF-8 characters
|
contain UTF-8 characters
|
||||||
for fixing wrong bracketing in cChannel::SubtitlingType() etc.
|
for fixing wrong bracketing in cChannel::SubtitlingType() etc.
|
||||||
for fixing handling DVB subtitles for PES recordings
|
for fixing handling DVB subtitles for PES recordings
|
||||||
|
for fixing compiler warnings "format not a string literal and no format arguments"
|
||||||
|
in some syslog calls
|
||||||
|
for a patch that was used to implement handling the "component descriptor" ("genre")
|
||||||
|
for a patch that was used to implement handling the "parental rating descriptor"
|
||||||
|
|
||||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||||
@ -1361,6 +1368,8 @@ Andreas Regel <andreas.regel@gmx.de>
|
|||||||
for fixing handling numeric keys in the channel display after switching channel
|
for fixing handling numeric keys in the channel display after switching channel
|
||||||
groups
|
groups
|
||||||
for adding some missing 'const' statements to cBitmap
|
for adding some missing 'const' statements to cBitmap
|
||||||
|
for making cDevice::AddPid() store the stream type of the given pid
|
||||||
|
for adding cFont::FontName() and cFont::Size()
|
||||||
|
|
||||||
Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de>
|
Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de>
|
||||||
for fixing the validity check for channel IDs, because some providers use TIDs
|
for fixing the validity check for channel IDs, because some providers use TIDs
|
||||||
@ -1570,12 +1579,13 @@ Dick Streefland <Dick.Streefland@xs4all.nl>
|
|||||||
Kimmo Tykkala <tykkala@iki.fi>
|
Kimmo Tykkala <tykkala@iki.fi>
|
||||||
for pointing out a problem in showing the replay mode if the OSD is currently in use
|
for pointing out a problem in showing the replay mode if the OSD is currently in use
|
||||||
|
|
||||||
Arthur Konovalov <kasjas@hot.ee>
|
Arthur Konovalov <artlov@gmail.com>
|
||||||
for translating OSD texts to the Estonian language
|
for translating OSD texts to the Estonian language
|
||||||
for fixing a missing ',' in the Greek OSD texts
|
for fixing a missing ',' in the Greek OSD texts
|
||||||
for fixing a missing ',' in the Swedish OSD texts
|
for fixing a missing ',' in the Swedish OSD texts
|
||||||
for reporting problems with CAMs when checking the CAM status too frequently
|
for reporting problems with CAMs when checking the CAM status too frequently
|
||||||
for reporting references to old *.vdr file names in MANUAL
|
for reporting references to old *.vdr file names in MANUAL
|
||||||
|
for reporting that the video stream type was set to 2 even if the vpid was 0
|
||||||
|
|
||||||
Milos Kapoun <m.kapoun@cra.cz>
|
Milos Kapoun <m.kapoun@cra.cz>
|
||||||
for suggesting to skip code table info in SI data
|
for suggesting to skip code table info in SI data
|
||||||
@ -1651,6 +1661,7 @@ Udo Richter <udo_richter@gmx.de>
|
|||||||
for reporting wrong variable types in cIndexFile
|
for reporting wrong variable types in cIndexFile
|
||||||
for reporting a problem with cDevice::PlayTsVideo() and cDevice::PlayTsAudio() in
|
for reporting a problem with cDevice::PlayTsVideo() and cDevice::PlayTsAudio() in
|
||||||
case only part of the buffer has been accepted by the device
|
case only part of the buffer has been accepted by the device
|
||||||
|
for reporting missing defines for large files in the 'newplugin' script
|
||||||
|
|
||||||
Sven Kreiensen <svenk@kammer.uni-hannover.de>
|
Sven Kreiensen <svenk@kammer.uni-hannover.de>
|
||||||
for his help in keeping 'channels.conf.terr' up to date
|
for his help in keeping 'channels.conf.terr' up to date
|
||||||
@ -1687,6 +1698,8 @@ Joachim Wilke <vdr@joachim-wilke.de>
|
|||||||
for reporting a problem with cStatus::MsgOsdTextItem() being called without a text
|
for reporting a problem with cStatus::MsgOsdTextItem() being called without a text
|
||||||
for reporting a missing install-i18n in the install target in the Makefile
|
for reporting a missing install-i18n in the install target in the Makefile
|
||||||
for adding a missing 'const' to cRecording::FramesPerSecond()
|
for adding a missing 'const' to cRecording::FramesPerSecond()
|
||||||
|
for modifying cCharSetConv so that it can be used to convert from "whatever VDR uses"
|
||||||
|
to a given code
|
||||||
|
|
||||||
Sascha Klek <sklek@gmx.de>
|
Sascha Klek <sklek@gmx.de>
|
||||||
for reporting a problem with the '0' key in the "Day" item of the "Timers" menu
|
for reporting a problem with the '0' key in the "Day" item of the "Timers" menu
|
||||||
@ -2250,6 +2263,8 @@ Anssi Hannula <anssi.hannula@gmail.com>
|
|||||||
for suggesting to change the default for LOCDIR in Makefile and Make.config.template
|
for suggesting to change the default for LOCDIR in Makefile and Make.config.template
|
||||||
to "./locale", so that internationalization works by default when running VDR
|
to "./locale", so that internationalization works by default when running VDR
|
||||||
from within its source directory
|
from within its source directory
|
||||||
|
for fixing stopping subtitle display when switching the primary device
|
||||||
|
for fixing plugin arguments corruption with glibc 2.11 on x86_64
|
||||||
|
|
||||||
Antti Hartikainen <ami+vdr@ah.fi>
|
Antti Hartikainen <ami+vdr@ah.fi>
|
||||||
for updating 'S13E' in 'sources.conf'
|
for updating 'S13E' in 'sources.conf'
|
||||||
@ -2459,6 +2474,8 @@ Michael Nork <mnork0@gmx.net>
|
|||||||
|
|
||||||
Winfried Köhler <w_koehl@gmx.de>
|
Winfried Köhler <w_koehl@gmx.de>
|
||||||
for fixing wrong value for TableIdBAT in libsi/si.h
|
for fixing wrong value for TableIdBAT in libsi/si.h
|
||||||
|
for making several code modifications to avoid compiler warnings
|
||||||
|
for improving the description of the transponder parameters in vdr.5
|
||||||
|
|
||||||
Igor M. Liplianin <liplianin@tut.by>
|
Igor M. Liplianin <liplianin@tut.by>
|
||||||
for a patch that was used to convert VDR to the S2API driver API
|
for a patch that was used to convert VDR to the S2API driver API
|
||||||
@ -2473,6 +2490,10 @@ Johann Friedrichs <johann.friedrichs@web.de>
|
|||||||
for fixing incrementing the continuity counter in cPatPmtGenerator::GetPmt()
|
for fixing incrementing the continuity counter in cPatPmtGenerator::GetPmt()
|
||||||
for pointing out that "DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
for pointing out that "DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
||||||
-D_LARGEFILE64_SOURCE" should be added to Make.config.
|
-D_LARGEFILE64_SOURCE" should be added to Make.config.
|
||||||
|
for adding stream type 11172 AUDIO to cPatPmtParser::ParsePmt()
|
||||||
|
for removing the workaround for short channel names of "Kabel Deutschland"
|
||||||
|
for some fixes to dvbspu.[hc]
|
||||||
|
for fixing a busy loop when moving editing marks
|
||||||
|
|
||||||
Timo Helkio <timolavi@mbnet.fi>
|
Timo Helkio <timolavi@mbnet.fi>
|
||||||
for reporting a hangup when replaying a TS recording with subtitles activated
|
for reporting a hangup when replaying a TS recording with subtitles activated
|
||||||
@ -2481,6 +2502,7 @@ Derek Kelly (user.vdr@gmail.com)
|
|||||||
for fixing handling the 'new' indicator in the recordings menu for TS recordings
|
for fixing handling the 'new' indicator in the recordings menu for TS recordings
|
||||||
for reporting a problem with HD NTSC broadcasts that split frames over several payload
|
for reporting a problem with HD NTSC broadcasts that split frames over several payload
|
||||||
units
|
units
|
||||||
|
for updating sources.conf
|
||||||
|
|
||||||
Marcel Unbehaun <frostworks@gmx.de>
|
Marcel Unbehaun <frostworks@gmx.de>
|
||||||
for adding cRecordingInfo::GetEvent()
|
for adding cRecordingInfo::GetEvent()
|
||||||
@ -2514,3 +2536,10 @@ Milan Hrala <hrala.milan@gmail.com>
|
|||||||
|
|
||||||
Andreas Schaefers <andreas_schaefers@gmx.de>
|
Andreas Schaefers <andreas_schaefers@gmx.de>
|
||||||
for adding the audio id to the call of PlayAudio() in cDevice::PlayTsAudio()
|
for adding the audio id to the call of PlayAudio() in cDevice::PlayTsAudio()
|
||||||
|
|
||||||
|
Matthieu Castet <castet.matthieu@free.fr>
|
||||||
|
for improving SPU handling on devices with limited OSD capabilities
|
||||||
|
|
||||||
|
Francesco Saverio Schiavarelli <fschiava@libero.it>
|
||||||
|
for reporting a problem with channels that have some encrypted components that
|
||||||
|
VDR doesn't use
|
||||||
|
79
HISTORY
79
HISTORY
@ -6196,3 +6196,82 @@ Video Disk Recorder Revision History
|
|||||||
cause nothing but trouble. Besides, the core VDR doesn't use this, anyway.
|
cause nothing but trouble. Besides, the core VDR doesn't use this, anyway.
|
||||||
- Fixed the default value for "Pause key handling" in the MANUAL (reported by
|
- Fixed the default value for "Pause key handling" in the MANUAL (reported by
|
||||||
Diego Pierotto).
|
Diego Pierotto).
|
||||||
|
|
||||||
|
2010-01-06: Version 1.7.11
|
||||||
|
|
||||||
|
- Fixed resetting the file size when regenerating the index file.
|
||||||
|
- The new function cDevice::PatPmtParser() can be used in derived devices to access
|
||||||
|
the PAT/PMT of the currently replayed material.
|
||||||
|
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
||||||
|
- The PCR pid in generated PMTs is now set to 0x1FFF ("no PCR pid") in
|
||||||
|
cPatPmtGenerator::GeneratePmt(), because VDR doesn't record the PCR pid.
|
||||||
|
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
||||||
|
- The 'sky' plugin is no longer part of the VDR source.
|
||||||
|
- Improved SPU handling on devices with limited OSD capabilities (thanks to
|
||||||
|
Matthieu Castet).
|
||||||
|
- Several code modifications to avoid compiler warnings (thanks to Winfried Köhler).
|
||||||
|
- Added stream type 11172 AUDIO to cPatPmtParser::ParsePmt() (thanks to Johann
|
||||||
|
Friedrichs).
|
||||||
|
- Removed debug output of '-' from cTransfer::Receive().
|
||||||
|
- Added defines for large files to the 'newplugin' script (reported by Udo Richter).
|
||||||
|
- Removed the workaround for short channel names of "Kabel Deutschland", because
|
||||||
|
apparently they now have their data according to the DVB standard (thanks to
|
||||||
|
Johann Friedrichs).
|
||||||
|
- Some fixes to dvbspu.[hc] (thanks to Johann Friedrichs).
|
||||||
|
- Fixed a busy loop when moving editing marks (thanks to Johann Friedrichs).
|
||||||
|
- Updated sources.conf (thanks to Derek Kelly).
|
||||||
|
- Modified cCharSetConv so that it can be used to convert from "whatever VDR uses"
|
||||||
|
to a given code (thanks to Joachim Wilke).
|
||||||
|
- Channel names containing commas are now handled correctly in channels.conf.
|
||||||
|
If a channel's short name contains a comma, it is replaced with a '.'.
|
||||||
|
- cDevice now logs the device number when a new device is created.
|
||||||
|
- Fixed handling STREAMTYPE_11172_AUDIO in cPatPmtParser::ParsePmt().
|
||||||
|
- cParsePatPmt now has functions to retrieve the audio, dolby and subtitle pids.
|
||||||
|
- cPatFilter::Process() now only stores CA descriptors for video and audio pids
|
||||||
|
(thanks to Francesco Saverio Schiavarelli for reporting a problem with channels
|
||||||
|
that have some encrypted components that VDR doesn't use).
|
||||||
|
- cDevice::AddPid() now stores the stream type of the given pid (thanks to Andreas
|
||||||
|
Regel).
|
||||||
|
- Added cFont::FontName() and cFont::Size() (thanks to Andreas Regel).
|
||||||
|
- cPatPmtParser now also stores the audio stream types.
|
||||||
|
- The support for full featured DVB cards of the TT/FuSi design has been moved
|
||||||
|
into the new plugin 'dvbsddevice'. On systems that use such a card as their
|
||||||
|
primary device, this plugin now needs to be loaded when running VDR in order
|
||||||
|
to view live or recorded video. If the plugin is not loaded, the card will
|
||||||
|
be treated like a budget DVB card, and there will be no OSD or viewing
|
||||||
|
capability.
|
||||||
|
- Fixed handling the "CA PMT" generation (revised a change not mentioned in version
|
||||||
|
1.7.9's changes, which caused a malfunction with Conax and Viaccess CAMs).
|
||||||
|
- Fixed stopping subtitle display when switching the primary device (thanks to
|
||||||
|
Anssi Hannula).
|
||||||
|
IMPORTANT NOTE TO PLUGIN AUTHORS: a plugin that implements a derived cDevice
|
||||||
|
class that can replay video must now call the MakePrimaryDevice() function of
|
||||||
|
its base class.
|
||||||
|
- Fixed compiler warnings "format not a string literal and no format arguments"
|
||||||
|
in some syslog calls (thanks to Rolf Ahrenberg).
|
||||||
|
- The new command line options --edit and --genindex can be used to edit a
|
||||||
|
recording or generate its index without actually starting the entire VDR
|
||||||
|
(based on a patch from Helmut Auer).
|
||||||
|
- Improved the description of the transponder parameters in vdr.5 (thanks to
|
||||||
|
Winfried Köhler).
|
||||||
|
- Avoiding setting the video stream type to 2 if the vpid is 0 (problem reported
|
||||||
|
by Arthur Konovalov).
|
||||||
|
- Implemented handling the "Content Descriptor" (based on a patch from Rolf
|
||||||
|
Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the textual
|
||||||
|
representation of the content descriptors as "genre". The epg.data file stores
|
||||||
|
the genre using the tag character 'G'.
|
||||||
|
- Implemented handling the "Parental Rating Descriptor" (based on a patch from Rolf
|
||||||
|
Ahrenberg). The 'classic', 'sttng' and 'curses' skins display the parental
|
||||||
|
rating (if given) in their event displays. The epg.data file stores
|
||||||
|
the parental rating using the tag character 'R'.
|
||||||
|
IMPORTANT NOTE: if VDR doesn't display a parental rating, this does not
|
||||||
|
necessarily mean that the given programme is suitable for all audiences!
|
||||||
|
- Rearranged cEvent members to minimize memory waste.
|
||||||
|
- After a CLRE command, no further EPG processing is now done for 10 seconds,
|
||||||
|
so that data sent with subsequent PUTE commands doesn't interfere with data
|
||||||
|
from the broadcasters (suggested by Helmut Auer).
|
||||||
|
- Added support for DVB cards with multiple fontends. Note that this only
|
||||||
|
works for DVB cards where each frontend can be used independently of all
|
||||||
|
the others on the same adapter.
|
||||||
|
- Fixed plugin arguments corruption with glibc 2.11 on x86_64 (thanks to
|
||||||
|
Anssi Hannula).
|
||||||
|
4
Makefile
4
Makefile
@ -4,7 +4,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Makefile 2.4 2009/10/18 13:59:25 kls Exp $
|
# $Id: Makefile 2.5 2009/12/29 11:20:50 kls Exp $
|
||||||
|
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ DOXYFILE = Doxyfile
|
|||||||
|
|
||||||
SILIB = $(LSIDIR)/libsi.a
|
SILIB = $(LSIDIR)/libsi.a
|
||||||
|
|
||||||
OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbosd.o\
|
OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o\
|
||||||
dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
|
dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
|
||||||
lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
|
lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
|
||||||
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
|
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
|
||||||
|
12
PLUGINS/src/dvbsddevice/HISTORY
Normal file
12
PLUGINS/src/dvbsddevice/HISTORY
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
VDR Plugin 'dvbsddevice' Revision History
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
2009-12-28: Version 0.0.1
|
||||||
|
|
||||||
|
- Initial revision.
|
||||||
|
|
||||||
|
2010-01-04: Version 0.0.2
|
||||||
|
|
||||||
|
- Calling the MakePrimaryDevice() function of the base class to allow
|
||||||
|
the cDevice to stop displaying subtitles.
|
||||||
|
- Added support for DVB cards with multiple fontends.
|
@ -1,13 +1,15 @@
|
|||||||
#
|
#
|
||||||
# Makefile for a Video Disk Recorder plugin
|
# Makefile for a Video Disk Recorder plugin
|
||||||
#
|
#
|
||||||
# $Id: Makefile 2.0 2008/01/13 13:00:16 kls Exp $
|
# $Id: Makefile 1.1 2009/12/29 11:53:18 kls Exp $
|
||||||
|
|
||||||
# The official name of this plugin.
|
# The official name of this plugin.
|
||||||
# This name will be used in the '-P...' option of VDR to load the plugin.
|
# This name will be used in the '-P...' option of VDR to load the plugin.
|
||||||
# By default the main source file also carries this name.
|
# By default the main source file also carries this name.
|
||||||
|
# IMPORTANT: the presence of this macro is important for the Make.config
|
||||||
|
# file. So it must be defined, even if it is not used here!
|
||||||
#
|
#
|
||||||
PLUGIN = sky
|
PLUGIN = dvbsddevice
|
||||||
|
|
||||||
### The version number of this plugin (taken from the main source file):
|
### The version number of this plugin (taken from the main source file):
|
||||||
|
|
||||||
@ -43,28 +45,55 @@ INCLUDES += -I$(VDRDIR)/include
|
|||||||
|
|
||||||
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
|
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
|
||||||
|
|
||||||
|
DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
|
||||||
|
|
||||||
### The object files (add further files here):
|
### The object files (add further files here):
|
||||||
|
|
||||||
OBJS = $(PLUGIN).o
|
OBJS = $(PLUGIN).o dvbsdffdevice.o dvbsdffosd.o
|
||||||
|
|
||||||
### The main target:
|
### The main target:
|
||||||
|
|
||||||
all: libvdr-$(PLUGIN).so
|
all: libvdr-$(PLUGIN).so i18n
|
||||||
|
|
||||||
### Implicit rules:
|
### Implicit rules:
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
|
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
|
||||||
|
|
||||||
# Dependencies:
|
### Dependencies:
|
||||||
|
|
||||||
MAKEDEP = g++ -MM -MG
|
MAKEDEP = $(CXX) -MM -MG
|
||||||
DEPFILE = .dependencies
|
DEPFILE = .dependencies
|
||||||
$(DEPFILE): Makefile
|
$(DEPFILE): Makefile
|
||||||
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
|
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
|
||||||
|
|
||||||
-include $(DEPFILE)
|
-include $(DEPFILE)
|
||||||
|
|
||||||
|
### Internationalization (I18N):
|
||||||
|
|
||||||
|
PODIR = po
|
||||||
|
LOCALEDIR = $(VDRDIR)/locale
|
||||||
|
I18Npo = $(wildcard $(PODIR)/*.po)
|
||||||
|
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
|
||||||
|
I18Npot = $(PODIR)/$(PLUGIN).pot
|
||||||
|
|
||||||
|
%.mo: %.po
|
||||||
|
msgfmt -c -o $@ $<
|
||||||
|
|
||||||
|
$(I18Npot): $(wildcard *.c)
|
||||||
|
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<see README>' -o $@ $^
|
||||||
|
|
||||||
|
%.po: $(I18Npot)
|
||||||
|
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
|
||||||
|
@touch $@
|
||||||
|
|
||||||
|
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
|
.PHONY: i18n
|
||||||
|
i18n: $(I18Nmsgs) $(I18Npot)
|
||||||
|
|
||||||
### Targets:
|
### Targets:
|
||||||
|
|
||||||
libvdr-$(PLUGIN).so: $(OBJS)
|
libvdr-$(PLUGIN).so: $(OBJS)
|
||||||
@ -80,4 +109,4 @@ dist: clean
|
|||||||
@echo Distribution package created as $(PACKAGE).tgz
|
@echo Distribution package created as $(PACKAGE).tgz
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
|
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot
|
20
PLUGINS/src/dvbsddevice/README
Normal file
20
PLUGINS/src/dvbsddevice/README
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
This is a "plugin" for the Video Disk Recorder (VDR).
|
||||||
|
|
||||||
|
Written by: Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>
|
||||||
|
|
||||||
|
Project's homepage: http://www.tvdr.de
|
||||||
|
|
||||||
|
Latest version available at: ftp://ftp.tvdr.de/vdr
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
See the file COPYING for more information.
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
The 'dvbsddevice' plugin implements the output device for the
|
||||||
|
"Full Featured" DVB cards based on the TechnoTrend/Fujitsu-Siemens
|
||||||
|
design. This code was originally part of the core VDR source, and
|
||||||
|
was moved into this plugin in VDR version 1.7.11.
|
35
PLUGINS/src/dvbsddevice/dvbsddevice.c
Normal file
35
PLUGINS/src/dvbsddevice/dvbsddevice.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* dvbsddevice.c: A plugin for the Video Disk Recorder
|
||||||
|
*
|
||||||
|
* See the README file for copyright information and how to reach the author.
|
||||||
|
*
|
||||||
|
* $Id: dvbsddevice.c 1.2 2010/01/01 15:01:01 kls Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <vdr/plugin.h>
|
||||||
|
#include "dvbsdffdevice.h"
|
||||||
|
|
||||||
|
static const char *VERSION = "0.0.2";
|
||||||
|
static const char *DESCRIPTION = "SD Full Featured DVB device";
|
||||||
|
|
||||||
|
class cPluginDvbsddevice : public cPlugin {
|
||||||
|
private:
|
||||||
|
cDvbSdFfDeviceProbe *probe;
|
||||||
|
public:
|
||||||
|
cPluginDvbsddevice(void);
|
||||||
|
virtual ~cPluginDvbsddevice();
|
||||||
|
virtual const char *Version(void) { return VERSION; }
|
||||||
|
virtual const char *Description(void) { return DESCRIPTION; }
|
||||||
|
};
|
||||||
|
|
||||||
|
cPluginDvbsddevice::cPluginDvbsddevice(void)
|
||||||
|
{
|
||||||
|
probe = new cDvbSdFfDeviceProbe;
|
||||||
|
}
|
||||||
|
|
||||||
|
cPluginDvbsddevice::~cPluginDvbsddevice()
|
||||||
|
{
|
||||||
|
delete probe;
|
||||||
|
}
|
||||||
|
|
||||||
|
VDRPLUGINCREATOR(cPluginDvbsddevice); // Don't touch this!
|
799
PLUGINS/src/dvbsddevice/dvbsdffdevice.c
Normal file
799
PLUGINS/src/dvbsddevice/dvbsdffdevice.c
Normal file
@ -0,0 +1,799 @@
|
|||||||
|
/*
|
||||||
|
* dvbsdffdevice.h: The DVB SD Full Featured device interface
|
||||||
|
*
|
||||||
|
* See the README file for copyright information and how to reach the author.
|
||||||
|
*
|
||||||
|
* $Id: dvbsdffdevice.c 2.25 2010/01/04 12:56:56 kls Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dvbsdffdevice.h"
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <linux/videodev2.h>
|
||||||
|
#include <linux/dvb/audio.h>
|
||||||
|
#include <linux/dvb/dmx.h>
|
||||||
|
#include <linux/dvb/video.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include "dvbsdffosd.h"
|
||||||
|
#include "vdr/eitscan.h"
|
||||||
|
#include "vdr/transfer.h"
|
||||||
|
|
||||||
|
// --- cDvbSdFfDevice --------------------------------------------------------
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::devVideoOffset = -1;
|
||||||
|
|
||||||
|
cDvbSdFfDevice::cDvbSdFfDevice(int Adapter, int Frontend)
|
||||||
|
:cDvbDevice(Adapter, Frontend)
|
||||||
|
{
|
||||||
|
spuDecoder = NULL;
|
||||||
|
digitalAudio = false;
|
||||||
|
playMode = pmNone;
|
||||||
|
|
||||||
|
// Devices that are only present on cards with decoders:
|
||||||
|
|
||||||
|
fd_osd = DvbOpen(DEV_DVB_OSD, adapter, frontend, O_RDWR);
|
||||||
|
fd_video = DvbOpen(DEV_DVB_VIDEO, adapter, frontend, O_RDWR | O_NONBLOCK);
|
||||||
|
fd_audio = DvbOpen(DEV_DVB_AUDIO, adapter, frontend, O_RDWR | O_NONBLOCK);
|
||||||
|
fd_stc = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR);
|
||||||
|
|
||||||
|
// The offset of the /dev/video devices:
|
||||||
|
|
||||||
|
if (devVideoOffset < 0) { // the first one checks this
|
||||||
|
FILE *f = NULL;
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
for (int ofs = 0; ofs < 100; ofs++) {
|
||||||
|
snprintf(buffer, sizeof(buffer), "/proc/video/dev/video%d", ofs);
|
||||||
|
if ((f = fopen(buffer, "r")) != NULL) {
|
||||||
|
if (fgets(buffer, sizeof(buffer), f)) {
|
||||||
|
if (strstr(buffer, "DVB Board")) { // found the _first_ DVB card
|
||||||
|
devVideoOffset = ofs;
|
||||||
|
dsyslog("video device offset is %d", devVideoOffset);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (devVideoOffset < 0)
|
||||||
|
devVideoOffset = 0;
|
||||||
|
if (f)
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
devVideoIndex = devVideoOffset >= 0 ? devVideoOffset++ : -1;
|
||||||
|
|
||||||
|
// Video format:
|
||||||
|
|
||||||
|
SetVideoFormat(Setup.VideoFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDvbSdFfDevice::~cDvbSdFfDevice()
|
||||||
|
{
|
||||||
|
delete spuDecoder;
|
||||||
|
// We're not explicitly closing any device files here, since this sometimes
|
||||||
|
// caused segfaults. Besides, the program is about to terminate anyway...
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::MakePrimaryDevice(bool On)
|
||||||
|
{
|
||||||
|
if (On)
|
||||||
|
new cDvbOsdProvider(fd_osd);
|
||||||
|
cDvbDevice::MakePrimaryDevice(On);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::HasDecoder(void) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
cSpuDecoder *cDvbSdFfDevice::GetSpuDecoder(void)
|
||||||
|
{
|
||||||
|
if (!spuDecoder && IsPrimaryDevice())
|
||||||
|
spuDecoder = new cDvbSpuDecoder();
|
||||||
|
return spuDecoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
uchar *cDvbSdFfDevice::GrabImage(int &Size, bool Jpeg, int Quality, int SizeX, int SizeY)
|
||||||
|
{
|
||||||
|
if (devVideoIndex < 0)
|
||||||
|
return NULL;
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
snprintf(buffer, sizeof(buffer), "%s%d", DEV_VIDEO, devVideoIndex);
|
||||||
|
int videoDev = open(buffer, O_RDWR);
|
||||||
|
if (videoDev >= 0) {
|
||||||
|
uchar *result = NULL;
|
||||||
|
// set up the size and RGB
|
||||||
|
v4l2_format fmt;
|
||||||
|
memset(&fmt, 0, sizeof(fmt));
|
||||||
|
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
fmt.fmt.pix.width = SizeX;
|
||||||
|
fmt.fmt.pix.height = SizeY;
|
||||||
|
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_BGR24;
|
||||||
|
fmt.fmt.pix.field = V4L2_FIELD_ANY;
|
||||||
|
if (ioctl(videoDev, VIDIOC_S_FMT, &fmt) == 0) {
|
||||||
|
v4l2_requestbuffers reqBuf;
|
||||||
|
memset(&reqBuf, 0, sizeof(reqBuf));
|
||||||
|
reqBuf.count = 2;
|
||||||
|
reqBuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
reqBuf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
if (ioctl(videoDev, VIDIOC_REQBUFS, &reqBuf) >= 0) {
|
||||||
|
v4l2_buffer mbuf;
|
||||||
|
memset(&mbuf, 0, sizeof(mbuf));
|
||||||
|
mbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
mbuf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
if (ioctl(videoDev, VIDIOC_QUERYBUF, &mbuf) == 0) {
|
||||||
|
int msize = mbuf.length;
|
||||||
|
unsigned char *mem = (unsigned char *)mmap(0, msize, PROT_READ | PROT_WRITE, MAP_SHARED, videoDev, 0);
|
||||||
|
if (mem && mem != (unsigned char *)-1) {
|
||||||
|
v4l2_buffer buf;
|
||||||
|
memset(&buf, 0, sizeof(buf));
|
||||||
|
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
buf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
buf.index = 0;
|
||||||
|
if (ioctl(videoDev, VIDIOC_QBUF, &buf) == 0) {
|
||||||
|
v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
if (ioctl (videoDev, VIDIOC_STREAMON, &type) == 0) {
|
||||||
|
memset(&buf, 0, sizeof(buf));
|
||||||
|
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
|
buf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
buf.index = 0;
|
||||||
|
if (ioctl(videoDev, VIDIOC_DQBUF, &buf) == 0) {
|
||||||
|
if (ioctl(videoDev, VIDIOC_STREAMOFF, &type) == 0) {
|
||||||
|
// make RGB out of BGR:
|
||||||
|
int memsize = fmt.fmt.pix.width * fmt.fmt.pix.height;
|
||||||
|
unsigned char *mem1 = mem;
|
||||||
|
for (int i = 0; i < memsize; i++) {
|
||||||
|
unsigned char tmp = mem1[2];
|
||||||
|
mem1[2] = mem1[0];
|
||||||
|
mem1[0] = tmp;
|
||||||
|
mem1 += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Quality < 0)
|
||||||
|
Quality = 100;
|
||||||
|
|
||||||
|
dsyslog("grabbing to %s %d %d %d", Jpeg ? "JPEG" : "PNM", Quality, fmt.fmt.pix.width, fmt.fmt.pix.height);
|
||||||
|
if (Jpeg) {
|
||||||
|
// convert to JPEG:
|
||||||
|
result = RgbToJpeg(mem, fmt.fmt.pix.width, fmt.fmt.pix.height, Size, Quality);
|
||||||
|
if (!result)
|
||||||
|
esyslog("ERROR: failed to convert image to JPEG");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// convert to PNM:
|
||||||
|
char buf[32];
|
||||||
|
snprintf(buf, sizeof(buf), "P6\n%d\n%d\n255\n", fmt.fmt.pix.width, fmt.fmt.pix.height);
|
||||||
|
int l = strlen(buf);
|
||||||
|
int bytes = memsize * 3;
|
||||||
|
Size = l + bytes;
|
||||||
|
result = MALLOC(uchar, Size);
|
||||||
|
if (result) {
|
||||||
|
memcpy(result, buf, l);
|
||||||
|
memcpy(result + l, mem, bytes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: failed to convert image to PNM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_STREAMOFF failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_DQBUF failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_STREAMON failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_QBUF failed");
|
||||||
|
munmap(mem, msize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: failed to memmap video device");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_QUERYBUF failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_REQBUFS failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: video device VIDIOC_S_FMT failed");
|
||||||
|
close(videoDev);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LOG_ERROR_STR(buffer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
|
||||||
|
{
|
||||||
|
cDevice::SetVideoDisplayFormat(VideoDisplayFormat);
|
||||||
|
if (Setup.VideoFormat) {
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_LETTER_BOX));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (VideoDisplayFormat) {
|
||||||
|
case vdfPanAndScan:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_PAN_SCAN));
|
||||||
|
break;
|
||||||
|
case vdfLetterBox:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_LETTER_BOX));
|
||||||
|
break;
|
||||||
|
case vdfCenterCutOut:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_CENTER_CUT_OUT));
|
||||||
|
break;
|
||||||
|
default: esyslog("ERROR: unknown video display format %d", VideoDisplayFormat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetVideoFormat(bool VideoFormat16_9)
|
||||||
|
{
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_FORMAT, VideoFormat16_9 ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3));
|
||||||
|
SetVideoDisplayFormat(eVideoDisplayFormat(Setup.VideoDisplayFormat));
|
||||||
|
}
|
||||||
|
|
||||||
|
eVideoSystem cDvbSdFfDevice::GetVideoSystem(void)
|
||||||
|
{
|
||||||
|
eVideoSystem VideoSystem = vsPAL;
|
||||||
|
if (fd_video >= 0) {
|
||||||
|
video_size_t vs;
|
||||||
|
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
|
||||||
|
if (vs.h == 480 || vs.h == 240)
|
||||||
|
VideoSystem = vsNTSC;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LOG_ERROR;
|
||||||
|
}
|
||||||
|
return VideoSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
|
||||||
|
{
|
||||||
|
if (fd_video >= 0) {
|
||||||
|
video_size_t vs;
|
||||||
|
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
|
||||||
|
Width = vs.w;
|
||||||
|
Height = vs.h;
|
||||||
|
switch (vs.aspect_ratio) {
|
||||||
|
default:
|
||||||
|
case VIDEO_FORMAT_4_3: VideoAspect = 4.0 / 3.0; break;
|
||||||
|
case VIDEO_FORMAT_16_9: VideoAspect = 16.0 / 9.0; break;
|
||||||
|
case VIDEO_FORMAT_221_1: VideoAspect = 2.21; break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LOG_ERROR;
|
||||||
|
}
|
||||||
|
cDevice::GetVideoSize(Width, Height, VideoAspect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
|
||||||
|
{
|
||||||
|
if (fd_video >= 0) {
|
||||||
|
video_size_t vs;
|
||||||
|
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
|
||||||
|
Width = 720;
|
||||||
|
if (vs.h != 480 && vs.h != 240)
|
||||||
|
Height = 576; // PAL
|
||||||
|
else
|
||||||
|
Height = 480; // NTSC
|
||||||
|
switch (Setup.VideoFormat ? vs.aspect_ratio : VIDEO_FORMAT_4_3) {
|
||||||
|
default:
|
||||||
|
case VIDEO_FORMAT_4_3: PixelAspect = 4.0 / 3.0; break;
|
||||||
|
case VIDEO_FORMAT_221_1: // FF DVB cards only distinguish between 4:3 and 16:9
|
||||||
|
case VIDEO_FORMAT_16_9: PixelAspect = 16.0 / 9.0; break;
|
||||||
|
}
|
||||||
|
PixelAspect /= double(Width) / Height;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LOG_ERROR;
|
||||||
|
}
|
||||||
|
cDevice::GetOsdSize(Width, Height, PixelAspect);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::SetAudioBypass(bool On)
|
||||||
|
{
|
||||||
|
if (setTransferModeForDolbyDigital != 1)
|
||||||
|
return false;
|
||||||
|
return ioctl(fd_audio, AUDIO_SET_BYPASS_MODE, On) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ptAudio ptVideo ptPcr ptTeletext ptDolby ptOther
|
||||||
|
static dmx_pes_type_t PesTypes[] = { DMX_PES_AUDIO, DMX_PES_VIDEO, DMX_PES_PCR, DMX_PES_TELETEXT, DMX_PES_OTHER, DMX_PES_OTHER };
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::SetPid(cPidHandle *Handle, int Type, bool On)
|
||||||
|
{
|
||||||
|
if (Handle->pid) {
|
||||||
|
dmx_pes_filter_params pesFilterParams;
|
||||||
|
memset(&pesFilterParams, 0, sizeof(pesFilterParams));
|
||||||
|
if (On) {
|
||||||
|
if (Handle->handle < 0) {
|
||||||
|
Handle->handle = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR | O_NONBLOCK, true);
|
||||||
|
if (Handle->handle < 0) {
|
||||||
|
LOG_ERROR;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pesFilterParams.pid = Handle->pid;
|
||||||
|
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||||
|
pesFilterParams.output = (Type <= ptTeletext && Handle->used <= 1) ? DMX_OUT_DECODER : DMX_OUT_TS_TAP;
|
||||||
|
pesFilterParams.pes_type= PesTypes[Type < ptOther ? Type : ptOther];
|
||||||
|
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||||
|
if (ioctl(Handle->handle, DMX_SET_PES_FILTER, &pesFilterParams) < 0) {
|
||||||
|
LOG_ERROR;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!Handle->used) {
|
||||||
|
CHECK(ioctl(Handle->handle, DMX_STOP));
|
||||||
|
if (Type <= ptTeletext) {
|
||||||
|
pesFilterParams.pid = 0x1FFF;
|
||||||
|
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||||
|
pesFilterParams.output = DMX_OUT_DECODER;
|
||||||
|
pesFilterParams.pes_type= PesTypes[Type];
|
||||||
|
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||||
|
CHECK(ioctl(Handle->handle, DMX_SET_PES_FILTER, &pesFilterParams));
|
||||||
|
if (PesTypes[Type] == DMX_PES_VIDEO) // let's only do this once
|
||||||
|
SetPlayMode(pmNone); // necessary to switch a PID from DMX_PES_VIDEO/AUDIO to DMX_PES_OTHER
|
||||||
|
}
|
||||||
|
close(Handle->handle);
|
||||||
|
Handle->handle = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::TurnOffLiveMode(bool LiveView)
|
||||||
|
{
|
||||||
|
if (LiveView) {
|
||||||
|
// Avoid noise while switching:
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Turn off live PIDs:
|
||||||
|
|
||||||
|
DetachAll(pidHandles[ptAudio].pid);
|
||||||
|
DetachAll(pidHandles[ptVideo].pid);
|
||||||
|
DetachAll(pidHandles[ptPcr].pid);
|
||||||
|
DetachAll(pidHandles[ptTeletext].pid);
|
||||||
|
DelPid(pidHandles[ptAudio].pid);
|
||||||
|
DelPid(pidHandles[ptVideo].pid);
|
||||||
|
DelPid(pidHandles[ptPcr].pid, ptPcr);
|
||||||
|
DelPid(pidHandles[ptTeletext].pid);
|
||||||
|
DelPid(pidHandles[ptDolby].pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
|
||||||
|
{
|
||||||
|
int apid = Channel->Apid(0);
|
||||||
|
int vpid = Channel->Vpid();
|
||||||
|
int dpid = Channel->Dpid(0);
|
||||||
|
|
||||||
|
bool DoTune = !IsTunedToTransponder(Channel);
|
||||||
|
|
||||||
|
bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid;
|
||||||
|
bool pidHandlesAudio = pidHandles[ptAudio].pid == apid;
|
||||||
|
|
||||||
|
bool TurnOffLivePIDs = DoTune
|
||||||
|
|| !IsPrimaryDevice()
|
||||||
|
|| LiveView // for a new live view the old PIDs need to be turned off
|
||||||
|
|| pidHandlesVideo // for recording the PIDs must be shifted from DMX_PES_AUDIO/VIDEO to DMX_PES_OTHER
|
||||||
|
;
|
||||||
|
|
||||||
|
bool StartTransferMode = IsPrimaryDevice() && !DoTune
|
||||||
|
&& (LiveView && HasPid(vpid ? vpid : apid) && (!pidHandlesVideo || (!pidHandlesAudio && (dpid ? pidHandles[ptAudio].pid != dpid : true)))// the PID is already set as DMX_PES_OTHER
|
||||||
|
|| !LiveView && (pidHandlesVideo || pidHandlesAudio) // a recording is going to shift the PIDs from DMX_PES_AUDIO/VIDEO to DMX_PES_OTHER
|
||||||
|
);
|
||||||
|
if (CamSlot() && !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), CamSlot()->SlotNumber()))
|
||||||
|
StartTransferMode |= LiveView && IsPrimaryDevice() && Channel->Ca() >= CA_ENCRYPTED_MIN;
|
||||||
|
|
||||||
|
bool TurnOnLivePIDs = !StartTransferMode && LiveView;
|
||||||
|
|
||||||
|
// Turn off live PIDs if necessary:
|
||||||
|
|
||||||
|
if (TurnOffLivePIDs)
|
||||||
|
TurnOffLiveMode(LiveView);
|
||||||
|
|
||||||
|
// Set the tuner:
|
||||||
|
|
||||||
|
if (!cDvbDevice::SetChannelDevice(Channel, LiveView))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// If this channel switch was requested by the EITScanner we don't wait for
|
||||||
|
// a lock and don't set any live PIDs (the EITScanner will wait for the lock
|
||||||
|
// by itself before setting any filters):
|
||||||
|
|
||||||
|
if (EITScanner.UsesDevice(this)) //XXX
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// PID settings:
|
||||||
|
|
||||||
|
if (TurnOnLivePIDs) {
|
||||||
|
SetAudioBypass(false);
|
||||||
|
if (!(AddPid(Channel->Ppid(), ptPcr) && AddPid(vpid, ptVideo) && AddPid(apid, ptAudio))) {
|
||||||
|
esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (IsPrimaryDevice())
|
||||||
|
AddPid(Channel->Tpid(), ptTeletext);
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schlüßler <marco@lordzodiac.de> this works
|
||||||
|
// to avoid missing audio after replaying a DVD; with 'false' there is an audio disturbance when switching
|
||||||
|
// between two channels on the same transponder on DVB-S
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
|
||||||
|
}
|
||||||
|
else if (StartTransferMode)
|
||||||
|
cControl::Launch(new cTransferControl(this, Channel->GetChannelID(), vpid, Channel->Apids(), Channel->Dpids(), Channel->Spids()));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::GetAudioChannelDevice(void)
|
||||||
|
{
|
||||||
|
audio_status_t as;
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_GET_STATUS, &as));
|
||||||
|
return as.channel_select;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetAudioChannelDevice(int AudioChannel)
|
||||||
|
{
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CHANNEL_SELECT, AudioChannel));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetVolumeDevice(int Volume)
|
||||||
|
{
|
||||||
|
if (digitalAudio)
|
||||||
|
Volume = 0;
|
||||||
|
audio_mixer_t am;
|
||||||
|
// conversion for linear volume response:
|
||||||
|
am.volume_left = am.volume_right = 2 * Volume - Volume * Volume / 255;
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_MIXER, &am));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetDigitalAudioDevice(bool On)
|
||||||
|
{
|
||||||
|
if (digitalAudio != On) {
|
||||||
|
if (digitalAudio)
|
||||||
|
cCondWait::SleepMs(1000); // Wait until any leftover digital data has been flushed
|
||||||
|
digitalAudio = On;
|
||||||
|
SetVolumeDevice(On || IsMute() ? 0 : CurrentVolume());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::SetAudioTrackDevice(eTrackType Type)
|
||||||
|
{
|
||||||
|
const tTrackId *TrackId = GetTrack(Type);
|
||||||
|
if (TrackId && TrackId->id) {
|
||||||
|
SetAudioBypass(false);
|
||||||
|
if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) {
|
||||||
|
if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) {
|
||||||
|
DetachAll(pidHandles[ptAudio].pid);
|
||||||
|
if (CamSlot())
|
||||||
|
CamSlot()->SetPid(pidHandles[ptAudio].pid, false);
|
||||||
|
pidHandles[ptAudio].pid = TrackId->id;
|
||||||
|
SetPid(&pidHandles[ptAudio], ptAudio, true);
|
||||||
|
if (CamSlot()) {
|
||||||
|
CamSlot()->SetPid(pidHandles[ptAudio].pid, true);
|
||||||
|
CamSlot()->StartDecrypting();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IS_DOLBY_TRACK(Type)) {
|
||||||
|
if (setTransferModeForDolbyDigital == 0)
|
||||||
|
return;
|
||||||
|
// Currently this works only in Transfer Mode
|
||||||
|
ForceTransferMode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::CanReplay(void) const
|
||||||
|
{
|
||||||
|
return cDevice::CanReplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::SetPlayMode(ePlayMode PlayMode)
|
||||||
|
{
|
||||||
|
if (PlayMode != pmExtern_THIS_SHOULD_BE_AVOIDED && fd_video < 0 && fd_audio < 0) {
|
||||||
|
// reopen the devices
|
||||||
|
fd_video = DvbOpen(DEV_DVB_VIDEO, adapter, frontend, O_RDWR | O_NONBLOCK);
|
||||||
|
fd_audio = DvbOpen(DEV_DVB_AUDIO, adapter, frontend, O_RDWR | O_NONBLOCK);
|
||||||
|
SetVideoFormat(Setup.VideoFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (PlayMode) {
|
||||||
|
case pmNone:
|
||||||
|
// special handling to return from PCM replay:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_PLAY));
|
||||||
|
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_STOP, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_DEMUX));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, false));
|
||||||
|
break;
|
||||||
|
case pmAudioVideo:
|
||||||
|
case pmAudioOnlyBlack:
|
||||||
|
if (playMode == pmNone)
|
||||||
|
TurnOffLiveMode(true);
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_MEMORY));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, PlayMode == pmAudioVideo));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_PLAY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_PLAY));
|
||||||
|
break;
|
||||||
|
case pmAudioOnly:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_MEMORY));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_PLAY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, false));
|
||||||
|
break;
|
||||||
|
case pmVideoOnly:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_STOP, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_DEMUX));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_PLAY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_PLAY));
|
||||||
|
break;
|
||||||
|
case pmExtern_THIS_SHOULD_BE_AVOIDED:
|
||||||
|
close(fd_video);
|
||||||
|
close(fd_audio);
|
||||||
|
fd_video = fd_audio = -1;
|
||||||
|
break;
|
||||||
|
default: esyslog("ERROR: unknown playmode %d", PlayMode);
|
||||||
|
}
|
||||||
|
playMode = PlayMode;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t cDvbSdFfDevice::GetSTC(void)
|
||||||
|
{
|
||||||
|
if (fd_stc >= 0) {
|
||||||
|
struct dmx_stc stc;
|
||||||
|
stc.num = 0;
|
||||||
|
if (ioctl(fd_stc, DMX_GET_STC, &stc) == -1) {
|
||||||
|
esyslog("ERROR: stc %d: %m", CardIndex() + 1);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return stc.stc / stc.base;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::TrickSpeed(int Speed)
|
||||||
|
{
|
||||||
|
if (fd_video >= 0)
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SLOWMOTION, Speed));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::Clear(void)
|
||||||
|
{
|
||||||
|
if (fd_video >= 0)
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
|
||||||
|
if (fd_audio >= 0)
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
|
||||||
|
cDevice::Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::Play(void)
|
||||||
|
{
|
||||||
|
if (playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) {
|
||||||
|
if (fd_audio >= 0)
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CONTINUE));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (fd_audio >= 0) {
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_CONTINUE));
|
||||||
|
}
|
||||||
|
if (fd_video >= 0)
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_CONTINUE));
|
||||||
|
}
|
||||||
|
cDevice::Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::Freeze(void)
|
||||||
|
{
|
||||||
|
if (playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) {
|
||||||
|
if (fd_audio >= 0)
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_PAUSE));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (fd_audio >= 0) {
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_PAUSE));
|
||||||
|
}
|
||||||
|
if (fd_video >= 0)
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_FREEZE));
|
||||||
|
}
|
||||||
|
cDevice::Freeze();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::Mute(void)
|
||||||
|
{
|
||||||
|
if (fd_audio >= 0) {
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
|
||||||
|
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
|
||||||
|
}
|
||||||
|
cDevice::Mute();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDvbSdFfDevice::StillPicture(const uchar *Data, int Length)
|
||||||
|
{
|
||||||
|
if (!Data || Length < TS_SIZE)
|
||||||
|
return;
|
||||||
|
if (Data[0] == 0x47) {
|
||||||
|
// TS data
|
||||||
|
cDevice::StillPicture(Data, Length);
|
||||||
|
}
|
||||||
|
else if (Data[0] == 0x00 && Data[1] == 0x00 && Data[2] == 0x01 && (Data[3] & 0xF0) == 0xE0) {
|
||||||
|
// PES data
|
||||||
|
char *buf = MALLOC(char, Length);
|
||||||
|
if (!buf)
|
||||||
|
return;
|
||||||
|
int i = 0;
|
||||||
|
int blen = 0;
|
||||||
|
while (i < Length - 6) {
|
||||||
|
if (Data[i] == 0x00 && Data[i + 1] == 0x00 && Data[i + 2] == 0x01) {
|
||||||
|
int len = Data[i + 4] * 256 + Data[i + 5];
|
||||||
|
if ((Data[i + 3] & 0xF0) == 0xE0) { // video packet
|
||||||
|
// skip PES header
|
||||||
|
int offs = i + 6;
|
||||||
|
// skip header extension
|
||||||
|
if ((Data[i + 6] & 0xC0) == 0x80) {
|
||||||
|
// MPEG-2 PES header
|
||||||
|
if (Data[i + 8] >= Length)
|
||||||
|
break;
|
||||||
|
offs += 3;
|
||||||
|
offs += Data[i + 8];
|
||||||
|
len -= 3;
|
||||||
|
len -= Data[i + 8];
|
||||||
|
if (len < 0 || offs + len > Length)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// MPEG-1 PES header
|
||||||
|
while (offs < Length && len > 0 && Data[offs] == 0xFF) {
|
||||||
|
offs++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
if (offs <= Length - 2 && len >= 2 && (Data[offs] & 0xC0) == 0x40) {
|
||||||
|
offs += 2;
|
||||||
|
len -= 2;
|
||||||
|
}
|
||||||
|
if (offs <= Length - 5 && len >= 5 && (Data[offs] & 0xF0) == 0x20) {
|
||||||
|
offs += 5;
|
||||||
|
len -= 5;
|
||||||
|
}
|
||||||
|
else if (offs <= Length - 10 && len >= 10 && (Data[offs] & 0xF0) == 0x30) {
|
||||||
|
offs += 10;
|
||||||
|
len -= 10;
|
||||||
|
}
|
||||||
|
else if (offs < Length && len > 0) {
|
||||||
|
offs++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (blen + len > Length) // invalid PES length field
|
||||||
|
break;
|
||||||
|
memcpy(&buf[blen], &Data[offs], len);
|
||||||
|
i = offs + len;
|
||||||
|
blen += len;
|
||||||
|
}
|
||||||
|
else if (Data[i + 3] >= 0xBD && Data[i + 3] <= 0xDF) // other PES packets
|
||||||
|
i += len + 6;
|
||||||
|
else
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
video_still_picture sp = { buf, blen };
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_STILLPICTURE, &sp));
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// non-PES data
|
||||||
|
video_still_picture sp = { (char *)Data, Length };
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_STILLPICTURE, &sp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::Poll(cPoller &Poller, int TimeoutMs)
|
||||||
|
{
|
||||||
|
Poller.Add((playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) ? fd_audio : fd_video, true);
|
||||||
|
return Poller.Poll(TimeoutMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDvbSdFfDevice::Flush(int TimeoutMs)
|
||||||
|
{
|
||||||
|
//TODO actually this function should wait until all buffered data has been processed by the card, but how?
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::PlayVideo(const uchar *Data, int Length)
|
||||||
|
{
|
||||||
|
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::PlayAudio(const uchar *Data, int Length, uchar Id)
|
||||||
|
{
|
||||||
|
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::PlayTsVideo(const uchar *Data, int Length)
|
||||||
|
{
|
||||||
|
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSdFfDevice::PlayTsAudio(const uchar *Data, int Length)
|
||||||
|
{
|
||||||
|
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cDvbSdFfDeviceProbe ---------------------------------------------------
|
||||||
|
|
||||||
|
bool cDvbSdFfDeviceProbe::Probe(int Adapter, int Frontend)
|
||||||
|
{
|
||||||
|
static uint32_t SubsystemIds[] = {
|
||||||
|
0x110A0000, // Fujitsu Siemens DVB-C
|
||||||
|
0x13C20000, // Technotrend/Hauppauge WinTV DVB-S rev1.X or Fujitsu Siemens DVB-C
|
||||||
|
0x13C20001, // Technotrend/Hauppauge WinTV DVB-T rev1.X
|
||||||
|
0x13C20002, // Technotrend/Hauppauge WinTV DVB-C rev2.X
|
||||||
|
0x13C20003, // Technotrend/Hauppauge WinTV Nexus-S rev2.X
|
||||||
|
0x13C20004, // Galaxis DVB-S rev1.3
|
||||||
|
0x13C20006, // Fujitsu Siemens DVB-S rev1.6
|
||||||
|
0x13C20008, // Technotrend/Hauppauge DVB-T
|
||||||
|
0x13C2000A, // Technotrend/Hauppauge WinTV Nexus-CA rev1.X
|
||||||
|
0x13C2000E, // Technotrend/Hauppauge WinTV Nexus-S rev2.3
|
||||||
|
0x13C21002, // Technotrend/Hauppauge WinTV DVB-S rev1.3 SE
|
||||||
|
0x00000000
|
||||||
|
};
|
||||||
|
cString FileName;
|
||||||
|
cReadLine ReadLine;
|
||||||
|
FILE *f = NULL;
|
||||||
|
uint32_t SubsystemId = 0;
|
||||||
|
FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend);
|
||||||
|
if ((f = fopen(FileName, "r")) != NULL) {
|
||||||
|
if (char *s = ReadLine.Read(f))
|
||||||
|
SubsystemId = strtoul(s, NULL, 0) << 16;
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend);
|
||||||
|
if ((f = fopen(FileName, "r")) != NULL) {
|
||||||
|
if (char *s = ReadLine.Read(f))
|
||||||
|
SubsystemId |= strtoul(s, NULL, 0);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
for (uint32_t *sid = SubsystemIds; *sid; sid++) {
|
||||||
|
if (*sid == SubsystemId) {
|
||||||
|
dsyslog("creating cDvbSdFfDevice");
|
||||||
|
new cDvbSdFfDevice(Adapter, Frontend);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
107
PLUGINS/src/dvbsddevice/dvbsdffdevice.h
Normal file
107
PLUGINS/src/dvbsddevice/dvbsdffdevice.h
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* dvbsdffdevice.h: The DVB SD Full Featured device interface
|
||||||
|
*
|
||||||
|
* See the README file for copyright information and how to reach the author.
|
||||||
|
*
|
||||||
|
* $Id: dvbsdffdevice.h 2.11 2010/01/04 11:01:14 kls Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DVBSDFFDEVICE_H
|
||||||
|
#define __DVBSDFFDEVICE_H
|
||||||
|
|
||||||
|
#include "vdr/dvbdevice.h"
|
||||||
|
#include "vdr/dvbspu.h"
|
||||||
|
|
||||||
|
/// The cDvbSdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
|
||||||
|
|
||||||
|
class cDvbSdFfDevice : public cDvbDevice {
|
||||||
|
private:
|
||||||
|
int fd_osd, fd_audio, fd_video, fd_stc;
|
||||||
|
protected:
|
||||||
|
virtual void MakePrimaryDevice(bool On);
|
||||||
|
public:
|
||||||
|
cDvbSdFfDevice(int Adapter, int Frontend);
|
||||||
|
virtual ~cDvbSdFfDevice();
|
||||||
|
virtual bool HasDecoder(void) const;
|
||||||
|
|
||||||
|
// SPU facilities
|
||||||
|
|
||||||
|
private:
|
||||||
|
cDvbSpuDecoder *spuDecoder;
|
||||||
|
public:
|
||||||
|
virtual cSpuDecoder *GetSpuDecoder(void);
|
||||||
|
|
||||||
|
// Channel facilities
|
||||||
|
|
||||||
|
private:
|
||||||
|
void TurnOffLiveMode(bool LiveView);
|
||||||
|
protected:
|
||||||
|
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
|
||||||
|
|
||||||
|
// PID handle facilities
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool SetAudioBypass(bool On);
|
||||||
|
protected:
|
||||||
|
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
|
||||||
|
|
||||||
|
// Image Grab facilities
|
||||||
|
|
||||||
|
private:
|
||||||
|
static int devVideoOffset;
|
||||||
|
int devVideoIndex;
|
||||||
|
public:
|
||||||
|
virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
|
||||||
|
|
||||||
|
// Video format facilities
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
|
||||||
|
virtual void SetVideoFormat(bool VideoFormat16_9);
|
||||||
|
virtual eVideoSystem GetVideoSystem(void);
|
||||||
|
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
|
||||||
|
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
|
||||||
|
|
||||||
|
// Track facilities
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void SetAudioTrackDevice(eTrackType Type);
|
||||||
|
|
||||||
|
// Audio facilities
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool digitalAudio;
|
||||||
|
protected:
|
||||||
|
virtual int GetAudioChannelDevice(void);
|
||||||
|
virtual void SetAudioChannelDevice(int AudioChannel);
|
||||||
|
virtual void SetVolumeDevice(int Volume);
|
||||||
|
virtual void SetDigitalAudioDevice(bool On);
|
||||||
|
|
||||||
|
// Player facilities
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ePlayMode playMode;
|
||||||
|
virtual bool CanReplay(void) const;
|
||||||
|
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||||
|
virtual int PlayVideo(const uchar *Data, int Length);
|
||||||
|
virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
|
||||||
|
virtual int PlayTsVideo(const uchar *Data, int Length);
|
||||||
|
virtual int PlayTsAudio(const uchar *Data, int Length);
|
||||||
|
public:
|
||||||
|
virtual int64_t GetSTC(void);
|
||||||
|
virtual void TrickSpeed(int Speed);
|
||||||
|
virtual void Clear(void);
|
||||||
|
virtual void Play(void);
|
||||||
|
virtual void Freeze(void);
|
||||||
|
virtual void Mute(void);
|
||||||
|
virtual void StillPicture(const uchar *Data, int Length);
|
||||||
|
virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
|
||||||
|
virtual bool Flush(int TimeoutMs = 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cDvbSdFfDeviceProbe : public cDvbDeviceProbe {
|
||||||
|
public:
|
||||||
|
virtual bool Probe(int Adapter, int Frontend);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //__DVBSDFFDEVICE_H
|
@ -1,26 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
* dvbosd.c: Implementation of the DVB On Screen Display
|
* dvbsdffosd.c: Implementation of the DVB SD Full Featured On Screen Display
|
||||||
*
|
*
|
||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the README file for copyright information and how to reach the author.
|
||||||
* how to reach the author.
|
|
||||||
*
|
*
|
||||||
* $Id: dvbosd.c 2.0 2007/09/16 08:55:54 kls Exp $
|
* $Id: dvbsdffosd.c 2.1 2009/12/29 11:52:48 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbosd.h"
|
#include "dvbsdffosd.h"
|
||||||
#include <linux/dvb/osd.h>
|
#include <linux/dvb/osd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/unistd.h>
|
#include <sys/unistd.h>
|
||||||
#include "dvbdevice.h"
|
#include "vdr/tools.h"
|
||||||
#include "tools.h"
|
|
||||||
|
|
||||||
// --- cDvbOsd ---------------------------------------------------------------
|
// --- cDvbSdFfOsd -----------------------------------------------------------
|
||||||
|
|
||||||
#define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
|
#define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
|
||||||
#define MAXOSDMEMORY 92000 // number of bytes available to the OSD (for unmodified DVB cards)
|
#define MAXOSDMEMORY 92000 // number of bytes available to the OSD (for unmodified DVB cards)
|
||||||
|
|
||||||
class cDvbOsd : public cOsd {
|
class cDvbSdFfOsd : public cOsd {
|
||||||
private:
|
private:
|
||||||
int osdDev;
|
int osdDev;
|
||||||
int osdMem;
|
int osdMem;
|
||||||
@ -29,14 +27,14 @@ private:
|
|||||||
protected:
|
protected:
|
||||||
virtual void SetActive(bool On);
|
virtual void SetActive(bool On);
|
||||||
public:
|
public:
|
||||||
cDvbOsd(int Left, int Top, int OsdDev, uint Level);
|
cDvbSdFfOsd(int Left, int Top, int OsdDev, uint Level);
|
||||||
virtual ~cDvbOsd();
|
virtual ~cDvbSdFfOsd();
|
||||||
virtual eOsdError CanHandleAreas(const tArea *Areas, int NumAreas);
|
virtual eOsdError CanHandleAreas(const tArea *Areas, int NumAreas);
|
||||||
virtual eOsdError SetAreas(const tArea *Areas, int NumAreas);
|
virtual eOsdError SetAreas(const tArea *Areas, int NumAreas);
|
||||||
virtual void Flush(void);
|
virtual void Flush(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev, uint Level)
|
cDvbSdFfOsd::cDvbSdFfOsd(int Left, int Top, int OsdDev, uint Level)
|
||||||
:cOsd(Left, Top, Level)
|
:cOsd(Left, Top, Level)
|
||||||
{
|
{
|
||||||
osdDev = OsdDev;
|
osdDev = OsdDev;
|
||||||
@ -55,12 +53,12 @@ cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev, uint Level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cDvbOsd::~cDvbOsd()
|
cDvbSdFfOsd::~cDvbSdFfOsd()
|
||||||
{
|
{
|
||||||
SetActive(false);
|
SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cDvbOsd::SetActive(bool On)
|
void cDvbSdFfOsd::SetActive(bool On)
|
||||||
{
|
{
|
||||||
if (On != Active()) {
|
if (On != Active()) {
|
||||||
cOsd::SetActive(On);
|
cOsd::SetActive(On);
|
||||||
@ -85,7 +83,7 @@ void cDvbOsd::SetActive(bool On)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eOsdError cDvbOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
|
eOsdError cDvbSdFfOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
|
||||||
{
|
{
|
||||||
eOsdError Result = cOsd::CanHandleAreas(Areas, NumAreas);
|
eOsdError Result = cOsd::CanHandleAreas(Areas, NumAreas);
|
||||||
if (Result == oeOk) {
|
if (Result == oeOk) {
|
||||||
@ -107,7 +105,7 @@ eOsdError cDvbOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
eOsdError cDvbOsd::SetAreas(const tArea *Areas, int NumAreas)
|
eOsdError cDvbSdFfOsd::SetAreas(const tArea *Areas, int NumAreas)
|
||||||
{
|
{
|
||||||
if (shown) {
|
if (shown) {
|
||||||
cBitmap *Bitmap;
|
cBitmap *Bitmap;
|
||||||
@ -120,7 +118,7 @@ eOsdError cDvbOsd::SetAreas(const tArea *Areas, int NumAreas)
|
|||||||
return cOsd::SetAreas(Areas, NumAreas);
|
return cOsd::SetAreas(Areas, NumAreas);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cDvbOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data)
|
void cDvbSdFfOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data)
|
||||||
{
|
{
|
||||||
if (osdDev >= 0) {
|
if (osdDev >= 0) {
|
||||||
osd_cmd_t dc;
|
osd_cmd_t dc;
|
||||||
@ -135,7 +133,7 @@ void cDvbOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cDvbOsd::Flush(void)
|
void cDvbSdFfOsd::Flush(void)
|
||||||
{
|
{
|
||||||
if (!Active())
|
if (!Active())
|
||||||
return;
|
return;
|
||||||
@ -211,5 +209,5 @@ cDvbOsdProvider::cDvbOsdProvider(int OsdDev)
|
|||||||
|
|
||||||
cOsd *cDvbOsdProvider::CreateOsd(int Left, int Top, uint Level)
|
cOsd *cDvbOsdProvider::CreateOsd(int Left, int Top, uint Level)
|
||||||
{
|
{
|
||||||
return new cDvbOsd(Left, Top, osdDev, Level);
|
return new cDvbSdFfOsd(Left, Top, osdDev, Level);
|
||||||
}
|
}
|
22
PLUGINS/src/dvbsddevice/dvbsdffosd.h
Normal file
22
PLUGINS/src/dvbsddevice/dvbsdffosd.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* dvbsdffosd.h: Implementation of the DVB SD Full Featured On Screen Display
|
||||||
|
*
|
||||||
|
* See the README file for copyright information and how to reach the author.
|
||||||
|
*
|
||||||
|
* $Id: dvbsdffosd.h 2.1 2009/12/29 11:52:05 kls Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DVBSDFFODF_H
|
||||||
|
#define __DVBSDFFODF_H
|
||||||
|
|
||||||
|
#include "vdr/osd.h"
|
||||||
|
|
||||||
|
class cDvbOsdProvider : public cOsdProvider {
|
||||||
|
private:
|
||||||
|
int osdDev;
|
||||||
|
public:
|
||||||
|
cDvbOsdProvider(int OsdDev);
|
||||||
|
virtual cOsd *CreateOsd(int Left, int Top, uint Level);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //__DVBSDFFODF_H
|
@ -63,6 +63,10 @@ VDR Plugin 'hello' Revision History
|
|||||||
|
|
||||||
- Updated the Croatian language texts (thanks to Adrian Caval).
|
- Updated the Croatian language texts (thanks to Adrian Caval).
|
||||||
|
|
||||||
2008-009-06 Version 0.2.3
|
2008-09-06: Version 0.2.3
|
||||||
|
|
||||||
- Updated the Turkish language texts (thanks to Oktay Yolgeçen).
|
- Updated the Turkish language texts (thanks to Oktay Yolgeçen).
|
||||||
|
|
||||||
|
2009-12-06: Version 0.2.4
|
||||||
|
|
||||||
|
- Several code modifications to avoid compiler warnings (thanks to Winfried Köhler).
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: hello.c 2.1 2008/09/06 15:07:12 kls Exp $
|
* $Id: hello.c 2.2 2009/12/06 12:30:15 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
#include <vdr/interface.h>
|
#include <vdr/interface.h>
|
||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
|
|
||||||
static const char *VERSION = "0.2.3";
|
static const char *VERSION = "0.2.4";
|
||||||
static const char *DESCRIPTION = trNOOP("A friendly greeting");
|
static const char *DESCRIPTION = trNOOP("A friendly greeting");
|
||||||
static const char *MAINMENUENTRY = trNOOP("Hello");
|
static const char *MAINMENUENTRY = trNOOP("Hello");
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ bool cPluginHello::ProcessArgs(int argc, char *argv[])
|
|||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{ "aaa", required_argument, NULL, 'a' },
|
{ "aaa", required_argument, NULL, 'a' },
|
||||||
{ "bbb", no_argument, NULL, 'b' },
|
{ "bbb", no_argument, NULL, 'b' },
|
||||||
{ NULL }
|
{ NULL, no_argument, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
|
@ -33,3 +33,7 @@ VDR Plugin 'pictures' Revision History
|
|||||||
2008-03-14: Version 0.0.7
|
2008-03-14: Version 0.0.7
|
||||||
|
|
||||||
- Added Russian translations (thanks to Alexander Gross).
|
- Added Russian translations (thanks to Alexander Gross).
|
||||||
|
|
||||||
|
2009-12-06: Version 0.0.8
|
||||||
|
|
||||||
|
- Several code modifications to avoid compiler warnings (thanks to Winfried Köhler).
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: pictures.c 2.0 2008/03/14 12:57:19 kls Exp $
|
* $Id: pictures.c 2.1 2009/12/06 12:30:21 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
|
||||||
static const char *VERSION = "0.0.7";
|
static const char *VERSION = "0.0.8";
|
||||||
static const char *DESCRIPTION = trNOOP("A simple picture viewer");
|
static const char *DESCRIPTION = trNOOP("A simple picture viewer");
|
||||||
static const char *MAINMENUENTRY = trNOOP("Pictures");
|
static const char *MAINMENUENTRY = trNOOP("Pictures");
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ bool cPluginPictures::ProcessArgs(int argc, char *argv[])
|
|||||||
// Implement command line argument processing here if applicable.
|
// Implement command line argument processing here if applicable.
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{ "dir", required_argument, NULL, 'd' },
|
{ "dir", required_argument, NULL, 'd' },
|
||||||
{ NULL }
|
{ NULL, no_argument, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
|
@ -79,3 +79,8 @@ VDR Plugin 'skincurses' Revision History
|
|||||||
2008-03-14: Version 0.1.7
|
2008-03-14: Version 0.1.7
|
||||||
|
|
||||||
- Added Russian translations (thanks to Alexander Gross).
|
- Added Russian translations (thanks to Alexander Gross).
|
||||||
|
|
||||||
|
2010-01-03: Version 0.1.8
|
||||||
|
|
||||||
|
- Displaying "genre" in event descriptions.
|
||||||
|
- Displaying "parental rating" in event descriptions.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skincurses.c 2.0 2008/03/14 12:57:14 kls Exp $
|
* $Id: skincurses.c 2.3 2010/01/03 14:59:16 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
#include <vdr/skins.h>
|
#include <vdr/skins.h>
|
||||||
|
|
||||||
static const char *VERSION = "0.1.7";
|
static const char *VERSION = "0.1.8";
|
||||||
static const char *DESCRIPTION = trNOOP("A text only skin");
|
static const char *DESCRIPTION = trNOOP("A text only skin");
|
||||||
static const char *MAINMENUENTRY = NULL;
|
static const char *MAINMENUENTRY = NULL;
|
||||||
|
|
||||||
@ -402,6 +402,10 @@ void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
osd->DrawText(ScOsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
osd->DrawText(ScOsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
||||||
}
|
}
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Event->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Event->GetParentalRatingString());
|
||||||
|
osd->DrawText(ScOsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
||||||
|
}
|
||||||
y += 1;
|
y += 1;
|
||||||
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Event->Title(), &Font, clrCyan, clrBackground);
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Event->Title(), &Font, clrCyan, clrBackground);
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
@ -409,6 +413,13 @@ void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Event->ShortText(), &Font, clrYellow, clrBackground);
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Event->ShortText(), &Font, clrYellow, clrBackground);
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Event->Contents(i); i++) {
|
||||||
|
const char *s = Event->ContentToString(Event->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, s, &Font, clrYellow, clrBackground);
|
||||||
|
y += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
y += 1;
|
y += 1;
|
||||||
if (!isempty(Event->Description())) {
|
if (!isempty(Event->Description())) {
|
||||||
textScroller.Set(osd, 0, y, ScOsdWidth - 2, ScOsdHeight - y - 2, Event->Description(), &Font, clrCyan, clrBackground);
|
textScroller.Set(osd, 0, y, ScOsdWidth - 2, ScOsdHeight - y - 2, Event->Description(), &Font, clrCyan, clrBackground);
|
||||||
@ -427,6 +438,10 @@ void cSkinCursesDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
||||||
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, t, &Font, clrYellow, clrBackground);
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, t, &Font, clrYellow, clrBackground);
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Info->GetEvent()->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString());
|
||||||
|
osd->DrawText(ScOsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
||||||
|
}
|
||||||
y += 1;
|
y += 1;
|
||||||
const char *Title = Info->Title();
|
const char *Title = Info->Title();
|
||||||
if (isempty(Title))
|
if (isempty(Title))
|
||||||
@ -437,6 +452,13 @@ void cSkinCursesDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Info->ShortText(), &Font, clrYellow, clrBackground);
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, Info->ShortText(), &Font, clrYellow, clrBackground);
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Info->GetEvent()->Contents(i); i++) {
|
||||||
|
const char *s = Info->GetEvent()->ContentToString(Info->GetEvent()->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, s, &Font, clrYellow, clrBackground);
|
||||||
|
y += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
y += 1;
|
y += 1;
|
||||||
if (!isempty(Info->Description())) {
|
if (!isempty(Info->Description())) {
|
||||||
textScroller.Set(osd, 0, y, ScOsdWidth - 2, ScOsdHeight - y - 2, Info->Description(), &Font, clrCyan, clrBackground);
|
textScroller.Set(osd, 0, y, ScOsdWidth - 2, ScOsdHeight - y - 2, Info->Description(), &Font, clrCyan, clrBackground);
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
VDR Plugin 'sky' Revision History
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
2002-12-01: Version 0.0.1
|
|
||||||
|
|
||||||
- Initial revision.
|
|
||||||
|
|
||||||
2002-12-13: Version 0.1.0
|
|
||||||
|
|
||||||
- Changed setting of CXX and CXXFLAGS variables in Makefile.
|
|
||||||
|
|
||||||
2003-05-09: Version 0.1.1
|
|
||||||
|
|
||||||
- Changed Start() to Initialize().
|
|
||||||
|
|
||||||
2004-01-04: Version 0.2.0
|
|
||||||
|
|
||||||
- Implemented automatic PID switching and channel detection
|
|
||||||
|
|
||||||
2004-02-15: Version 0.3.0
|
|
||||||
|
|
||||||
- Now using the actual channel IDs a derived from the data stream.
|
|
||||||
- Switched EPG data retrieval to http://www.bleb.org.
|
|
||||||
- Added automatic DST detection to getskyepg.pl.
|
|
||||||
- Fixed handling receivers, so that a recording on the same channel
|
|
||||||
won't interrupt an ongoing Transfer mode.
|
|
||||||
|
|
||||||
2004-10-16: Version 0.3.1
|
|
||||||
|
|
||||||
- Improved buffer handling.
|
|
||||||
|
|
||||||
2004-12-12: Version 0.3.2
|
|
||||||
|
|
||||||
- Changed Apid access in cChannel.
|
|
||||||
|
|
||||||
2004-12-19: Version 0.3.3
|
|
||||||
|
|
||||||
- Made several functions threadsafe.
|
|
||||||
- Removed delay_ms(), using cCondWait::SleepMs() instead.
|
|
||||||
|
|
||||||
2005-09-17: Version 0.3.4
|
|
||||||
|
|
||||||
- Added a missing include statement.
|
|
||||||
|
|
||||||
2006-03-26: Version 0.3.5
|
|
||||||
|
|
||||||
- Fixed format string handling.
|
|
||||||
|
|
||||||
2006-12-02: Version 0.3.5 (version number not increased)
|
|
||||||
|
|
||||||
- Made the getskyepg.pl script send a user agent message to
|
|
||||||
the server, according to the rules at http://bleb.org/tv/data/listings.
|
|
||||||
If your version of 'wget' doesn't support the -U option to set the user agent,
|
|
||||||
use the new option -U of getskyepg.pl to have the information added to the URL
|
|
||||||
as a query string.
|
|
||||||
- The getskyepg.pl script now replaces "&" with "&".
|
|
||||||
|
|
||||||
2007-08-15: Version 0.3.6
|
|
||||||
|
|
||||||
- Moved the "all" target in the Makefile before the "Implicit rules",
|
|
||||||
so that a plain "make" will compile everything.
|
|
||||||
|
|
||||||
2008-03-22: Version 0.3.7
|
|
||||||
|
|
||||||
- Removed the full path from the 'logger' call in the getskyepg.pl script (this
|
|
||||||
program is apparently "on the move" through the file system...).
|
|
||||||
|
|
||||||
2008-09-07: Version 0.3.8
|
|
||||||
|
|
||||||
- Fixed renamed constants (thanks to Udo Richter).
|
|
@ -1,49 +0,0 @@
|
|||||||
This is a "plugin" for the Video Disk Recorder (VDR).
|
|
||||||
|
|
||||||
Written by: Klaus Schmidinger <kls@tvdr.de>
|
|
||||||
|
|
||||||
Project's homepage: http://www.tvdr.de
|
|
||||||
|
|
||||||
Latest version available at: http://www.tvdr.de
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
See the file COPYING for more information.
|
|
||||||
|
|
||||||
Description:
|
|
||||||
|
|
||||||
The 'sky' plugin implements a new device for VDR, which is based on the
|
|
||||||
MPEG2 encoder card described at linuxtv.org/mpeg2/kfir.xml. It
|
|
||||||
allows you to connect the analog a/v output of your Sky Digibox to VDR,
|
|
||||||
so that you can enjoy the full recording flexibility of VDR with your
|
|
||||||
Sky subscription. Note that this is NOT something that does anything
|
|
||||||
illegal, like decrypting the Sky programme without a subscription. You
|
|
||||||
will need a Sky Digibox and a valid subscription in order to use this
|
|
||||||
plugin.
|
|
||||||
|
|
||||||
The 'kfir' module must be loaded with the option 'streamtype=4' to make it
|
|
||||||
produce a Transport Stream.
|
|
||||||
|
|
||||||
The Digibox is remotely controlled through VDR via LIRC (see lirc.org).
|
|
||||||
The file lircd.conf.sky contains the remote control codes necessary to
|
|
||||||
control the Digibox.
|
|
||||||
|
|
||||||
In order to access the Sky channels VDR needs to know the channel number
|
|
||||||
under which each channel is stored in the Sky Digibox. These numbers are
|
|
||||||
stored in the file 'channels.conf.sky', together with the channel IDs as
|
|
||||||
derived from the actual channel data and the names under which the EPG
|
|
||||||
data for each channel can be found (see below). Copy this file to your
|
|
||||||
plugins config directory, in a subdirectory named 'sky', as in
|
|
||||||
|
|
||||||
/video/plugins/sky/channels.conf.sky
|
|
||||||
|
|
||||||
The Sky EPG is available on the Internet at http://www.bleb.org.
|
|
||||||
The Perl script getskyepg.pl extracts the EPG data from these pages
|
|
||||||
and sends it to VDR via an SVDRP connection. The channel names as
|
|
||||||
used on the bleb.org pages are defined in the channels.conf.sky file.
|
|
||||||
You can keep your EPG data up-to-date by entering a call to getskyepg.pl
|
|
||||||
into your /etc/crontab. Call 'getskyepg.pl -h' for a list of options.
|
|
||||||
The getskyepg.pl script requires the programs /usr/bin/wget and /usr/bin/logger
|
|
||||||
to be installed on your system.
|
|
@ -1,34 +0,0 @@
|
|||||||
# Sky channel definitions
|
|
||||||
#
|
|
||||||
# Syntax:
|
|
||||||
#
|
|
||||||
# ChannelID:ChannelNumber:EPGname
|
|
||||||
#
|
|
||||||
# where
|
|
||||||
#
|
|
||||||
# ChannelID is the channel ID as derived from the actual channel
|
|
||||||
# data as broadcast in the data stream (see man vdr(5)).
|
|
||||||
#
|
|
||||||
# ChannelNumber is the number of this channel as you have to
|
|
||||||
# enter it on the DigiBox remote control.
|
|
||||||
#
|
|
||||||
# EPGname is the name of the page at www.bleb.org that has EPG
|
|
||||||
# data for this channel (without the '.xml'). If no such
|
|
||||||
# page exists, 'x' is entered.
|
|
||||||
#
|
|
||||||
S28.2E-2-2027-4705:106:sky_one
|
|
||||||
S28.2E-2-2027-5104:107:sky_two
|
|
||||||
S28.2E-2-2044-10070:118:itv2
|
|
||||||
S28.2E-2-2023-4905:130:scifi
|
|
||||||
S28.2E-2-2025-5904:127:paramount
|
|
||||||
S28.2E-2-2009-6201:551:discovery
|
|
||||||
S28.2E-2-2030-4809:310:sky_cinema
|
|
||||||
S28.2E-2-2007-4303:301:sky_movies1
|
|
||||||
S28.2E-2-2007-4302:302:sky_movies2
|
|
||||||
S28.2E-2-2007-4403:303:sky_movies3
|
|
||||||
S28.2E-2-2011-4402:304:sky_movies4
|
|
||||||
S28.2E-2-2011-4503:305:sky_movies5
|
|
||||||
S28.2E-2-2011-4502:306:sky_movies6
|
|
||||||
S28.2E-2-2030-4603:307:sky_movies7
|
|
||||||
S28.2E-2-2007-5502:308:sky_movies8
|
|
||||||
S28.2E-2-2030-4602:309:sky_movies9
|
|
@ -1,260 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# getskyepg.pl: Get EPG data for Sky channels from the Internet
|
|
||||||
#
|
|
||||||
# Connects to a running VDR instance via SVDRP, gets the channel data
|
|
||||||
# for the Sky channels and connects to Internet web pages to extract the
|
|
||||||
# EPG data for these channels. The result is sent to VDR via SVDRP.
|
|
||||||
#
|
|
||||||
# See the README file for copyright information and how to reach the author.
|
|
||||||
#
|
|
||||||
# $Id: getskyepg.pl 2.1 2009/10/18 14:05:47 kls Exp $
|
|
||||||
|
|
||||||
use Getopt::Std;
|
|
||||||
use Time::Local;
|
|
||||||
|
|
||||||
$Usage = qq{
|
|
||||||
Usage: $0 [options]
|
|
||||||
|
|
||||||
Options: -c filename channel config file name (default: channels.conf.sky)
|
|
||||||
-d hostname destination hostname (default: localhost)
|
|
||||||
-p port SVDRP port number (default: 2001)
|
|
||||||
-S source channel source (default: S28.2E)
|
|
||||||
-D days days to get EPG for (1..7, default: 2)
|
|
||||||
-U use this if your version of 'wget' doesn't support -U
|
|
||||||
};
|
|
||||||
|
|
||||||
die $Usage if (!getopts("c:d:D:hp:S:U") || $opt_h);
|
|
||||||
|
|
||||||
$Conf = $opt_c || "channels.conf.sky";
|
|
||||||
$Dest = $opt_d || "localhost";
|
|
||||||
$Port = $opt_p || 2001;
|
|
||||||
$Source = $opt_S || "S28.2E";
|
|
||||||
$Days = $opt_D || 2;
|
|
||||||
$User = $opt_U;
|
|
||||||
|
|
||||||
# See "Rules for using this data" on http://bleb.org/tv/data/listings.
|
|
||||||
# In case you modify this script in a way that changes its behavior
|
|
||||||
# towards the www.bleb.org website, please replace 'vdr-bugs@tvdr.de'
|
|
||||||
# with your own email address! That way Andrew Flegg <andrew@bleb.org>,
|
|
||||||
# who runs that web site, can contact you in case of problems.
|
|
||||||
$IDENT = "VDR::getskyepg.pl, http://www.tvdr.de - vdr-bugs\@tvdr.de";
|
|
||||||
$GAP = 2;
|
|
||||||
|
|
||||||
$SkyWebPage = "www.bleb.org/tv/data/listings";
|
|
||||||
$WGET = "/usr/bin/wget -q -O-";
|
|
||||||
$WGET .= " -U '$IDENT'" unless $User;
|
|
||||||
$LOGGER = "logger -t SKYEPG";
|
|
||||||
|
|
||||||
$DST = -3600; # Daylight Saving Time offset
|
|
||||||
$SecsInDay = 86400;
|
|
||||||
|
|
||||||
@Channels = ();
|
|
||||||
|
|
||||||
$idxSource = 0;
|
|
||||||
$idxNumber = 1;
|
|
||||||
$idxName = 2;
|
|
||||||
|
|
||||||
Error("days out of range: $Days") unless (1 <= $Days && $Days <= 7);
|
|
||||||
|
|
||||||
sub Log
|
|
||||||
{
|
|
||||||
system("$LOGGER '@_'");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Error
|
|
||||||
{
|
|
||||||
Log(@_);
|
|
||||||
die "$0: @_\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetChannels
|
|
||||||
{
|
|
||||||
open(CHANNELS, $Conf) || Error("$Conf: $!");
|
|
||||||
while (<CHANNELS>) {
|
|
||||||
chomp;
|
|
||||||
next if (/^#/);
|
|
||||||
my @a = split(":");
|
|
||||||
push(@Channels, [@a]) unless ($a[$idxName] eq "x");
|
|
||||||
}
|
|
||||||
close(CHANNELS);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetChannels();
|
|
||||||
|
|
||||||
sub GetPage
|
|
||||||
{
|
|
||||||
my $channel = shift;
|
|
||||||
my $day = shift;
|
|
||||||
$day--;
|
|
||||||
my $url = "http://$SkyWebPage/$day/$channel.xml";
|
|
||||||
$url .= "?$IDENT" if $User;
|
|
||||||
Log("reading $url");
|
|
||||||
my @page = split("\n", `$WGET '$url'`);
|
|
||||||
Log("received " . ($#page + 1) . " lines");
|
|
||||||
return @page;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub ReplaceTags
|
|
||||||
{
|
|
||||||
my $s = shift;
|
|
||||||
$s =~ s/&/&/g;
|
|
||||||
return $s;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub StripWhitespace
|
|
||||||
{
|
|
||||||
my $s = shift;
|
|
||||||
$s =~ s/\s*(.*)\s*/$1/;
|
|
||||||
$s =~ s/\s+/ /g;
|
|
||||||
return $s;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Extract
|
|
||||||
{
|
|
||||||
my $s = shift;
|
|
||||||
my $t = shift;
|
|
||||||
$s =~ /<$t>([^<]*)<\/$t>/;
|
|
||||||
return ReplaceTags(StripWhitespace($1));
|
|
||||||
}
|
|
||||||
|
|
||||||
# In order to get the duration we need to buffer the last event:
|
|
||||||
$Id = "";
|
|
||||||
$Time = 0;
|
|
||||||
$Title = "";
|
|
||||||
$Subtitle = "";
|
|
||||||
$Desc = "";
|
|
||||||
|
|
||||||
sub GetEpgData
|
|
||||||
{
|
|
||||||
my ($channel, $channelID) = @_;
|
|
||||||
my $numEvents = 0;
|
|
||||||
SVDRPsend("C $channelID");
|
|
||||||
$Time = 0;
|
|
||||||
for $day (1 .. $Days) {
|
|
||||||
my $dt = 0;
|
|
||||||
my @page = GetPage($channel, $day);
|
|
||||||
my $data = "";
|
|
||||||
for $line (@page) {
|
|
||||||
chomp($line);
|
|
||||||
if ($line =~ /<programme>/) {
|
|
||||||
$data = "";
|
|
||||||
}
|
|
||||||
elsif ($line =~ /<\/programme>/) {
|
|
||||||
my $title = Extract($data, "title");
|
|
||||||
my $subtitle = Extract($data, "subtitle");
|
|
||||||
my $desc = Extract($data, "desc");
|
|
||||||
my $start = Extract($data, "start");
|
|
||||||
# 'end' is useless, because it is sometimes missing :-(
|
|
||||||
# my $end = Extract($data, "end");
|
|
||||||
if (!$subtitle) {
|
|
||||||
# They sometimes write all info into the description, as in
|
|
||||||
# Episode: some description.
|
|
||||||
# Why don't they just fill in the data correctly?
|
|
||||||
my ($s, $d) = ($desc =~ /([^:]*)[:](.*)/);
|
|
||||||
if ($s && $d) {
|
|
||||||
$subtitle = $s;
|
|
||||||
$desc = $d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# 'start' and 'end' as time of day isn't of much use here, since
|
|
||||||
# the page for one day contains data that actually belongs to the
|
|
||||||
# next day (after midnight). Oh well, lets reconstruct the missing
|
|
||||||
# information:
|
|
||||||
$start = "0" . $start if (length($start) < 4);
|
|
||||||
my ($h, $m) = ($start =~ /(..)(..)/);
|
|
||||||
$dt = $SecsInDay if ($h > 12);
|
|
||||||
# convert to time_t:
|
|
||||||
my @gmt = gmtime;
|
|
||||||
$gmt[0] = 0; # seconds
|
|
||||||
$gmt[1] = $m; # minutes
|
|
||||||
$gmt[2] = $h; # hours
|
|
||||||
$time = timegm(@gmt) + ($day - 1) * $SecsInDay + ($h < 12 ? $dt : 0);
|
|
||||||
# compensate for DST:
|
|
||||||
$time += $DST if (localtime($time))[8];
|
|
||||||
# create EPG data:
|
|
||||||
if ($Time) {
|
|
||||||
$duration = $time - $Time;
|
|
||||||
SVDRPsend("E $Id $Time $duration");
|
|
||||||
SVDRPsend("T $Title");
|
|
||||||
SVDRPsend("S $Subtitle");
|
|
||||||
SVDRPsend("D $Desc");
|
|
||||||
SVDRPsend("e");
|
|
||||||
$numEvents++;
|
|
||||||
}
|
|
||||||
# buffer the last event:
|
|
||||||
$Id = $time / 60 % 0xFFFF; # this gives us unique ids for every minute of over 6 weeks
|
|
||||||
$Time = $time;
|
|
||||||
$Title = $title;
|
|
||||||
$Subtitle = $subtitle;
|
|
||||||
$Desc = $desc;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$data .= $line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sleep($GAP);
|
|
||||||
}
|
|
||||||
SVDRPsend("c");
|
|
||||||
Log("generated $numEvents EPG events");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub ProcessEpg
|
|
||||||
{
|
|
||||||
for (@Channels) {
|
|
||||||
my $channel = @$_[$idxName];
|
|
||||||
my $channelID = @$_[$idxSource];
|
|
||||||
Log("processing channel $channel - $channelID");
|
|
||||||
SVDRPsend("PUTE");
|
|
||||||
SVDRPreceive(354);
|
|
||||||
GetEpgData($channel, $channelID);
|
|
||||||
SVDRPsend(".");
|
|
||||||
SVDRPreceive(250);
|
|
||||||
}
|
|
||||||
Log("done");
|
|
||||||
}
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# TODO: make this a Perl module??? What about Error()???
|
|
||||||
|
|
||||||
use Socket;
|
|
||||||
|
|
||||||
$Timeout = 300; # max. seconds to wait for response
|
|
||||||
|
|
||||||
$SIG{ALRM} = sub { Error("timeout"); };
|
|
||||||
alarm($Timeout);
|
|
||||||
|
|
||||||
$iaddr = inet_aton($Dest) || Error("no host: $Dest");
|
|
||||||
$paddr = sockaddr_in($Port, $iaddr);
|
|
||||||
|
|
||||||
$proto = getprotobyname('tcp');
|
|
||||||
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || Error("socket: $!");
|
|
||||||
connect(SOCK, $paddr) || Error("connect: $!");
|
|
||||||
select(SOCK); $| = 1;
|
|
||||||
SVDRPreceive(220);
|
|
||||||
ProcessEpg();
|
|
||||||
SVDRPsend("QUIT");
|
|
||||||
|
|
||||||
sub SVDRPsend
|
|
||||||
{
|
|
||||||
my $s = shift;
|
|
||||||
print SOCK "$s\r\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub SVDRPreceive
|
|
||||||
{
|
|
||||||
my $expect = shift | 0;
|
|
||||||
my @a = ();
|
|
||||||
while (<SOCK>) {
|
|
||||||
s/\s*$//; # 'chomp' wouldn't work with "\r\n"
|
|
||||||
push(@a, $_);
|
|
||||||
if (substr($_, 3, 1) ne "-") {
|
|
||||||
my $code = substr($_, 0, 3);
|
|
||||||
Error("expected SVDRP code $expect, but received $code") if ($code != $expect);
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return @a;
|
|
||||||
}
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
@ -1,299 +0,0 @@
|
|||||||
# Copyright (C) 1999 Christoph Bartelmus
|
|
||||||
#
|
|
||||||
# You may only use this file if you make it available to others,
|
|
||||||
# i.e. if you send it to <lirc@bartelmus.de>
|
|
||||||
#
|
|
||||||
# this config file was automatically generated
|
|
||||||
# using lirc-0.6.4-CVS(serial) on Mon Jul 9 08:14:04 2001
|
|
||||||
#
|
|
||||||
# contributed by Steve Davies <steve@daviesfam.org>
|
|
||||||
#
|
|
||||||
# brand: sky
|
|
||||||
# model no. of remote control:
|
|
||||||
# supported devices: 34000 20
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
begin remote
|
|
||||||
|
|
||||||
name SKY
|
|
||||||
flags CONST_LENGTH|RAW_CODES
|
|
||||||
eps 30
|
|
||||||
aeps 100
|
|
||||||
ptrail 0
|
|
||||||
repeat 0 0
|
|
||||||
gap 149692
|
|
||||||
frequency 36000
|
|
||||||
duty_cycle 50
|
|
||||||
|
|
||||||
begin raw_codes
|
|
||||||
|
|
||||||
name 0
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444
|
|
||||||
|
|
||||||
name 1
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
888
|
|
||||||
|
|
||||||
name 2
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 888 888
|
|
||||||
444
|
|
||||||
|
|
||||||
name 3
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 888 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name 4
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 888 888 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name 5
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 888 888 888
|
|
||||||
|
|
||||||
name 6
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 888 444 444 888
|
|
||||||
444
|
|
||||||
|
|
||||||
name 7
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 888 444 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name 8
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 888 888 444 444 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name 9
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 888 888 444 444 888
|
|
||||||
|
|
||||||
name RED
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 444 444 888 888 444 444 888 888
|
|
||||||
|
|
||||||
name GREEN
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 444 444 888 888 444 444 444 444 888 444
|
|
||||||
|
|
||||||
name YELLOW
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 444 444 888 888 444 444 444 444 444 444
|
|
||||||
|
|
||||||
name BLUE
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 444 444 444 444 888 444 444 444 444 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name TEXT
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 888 444 444 444 444 444 444 888 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name BACKUP
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 888 888 444 444 444 444 444 444 444 444 888 444 444
|
|
||||||
|
|
||||||
name HELP
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 888 888 444 444 444 444 444 444 444 444 444 444 888
|
|
||||||
|
|
||||||
name CURSOR-LEFT
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 888 888 444 444 888 888 888 444
|
|
||||||
|
|
||||||
name CURSOR-DOWN
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 888 888 444 444 888 444 444 888
|
|
||||||
|
|
||||||
name CURSOR-RIGHT
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 888 888 444 444 888 888 444 444
|
|
||||||
|
|
||||||
name CURSOR-UP
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 888 888 444 444 888 444 444 444 444 444
|
|
||||||
|
|
||||||
name SELECT
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 888 888 888 444 444 444 444 888 444 444 444
|
|
||||||
|
|
||||||
name CHANNEL-DOWN
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 888 888 444 444 444 444 444 444 888
|
|
||||||
|
|
||||||
name CHANNEL-UP
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 888 888 444 444 444 444 444 444 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name I
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 888 444 444 888 444 444 888 888 888 444 444
|
|
||||||
|
|
||||||
name ONOFF
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 888 444 444 888 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name SKY
|
|
||||||
2664 888 444 444 444 444 444 888 444 888 888 444 444 444 444 444
|
|
||||||
444 444 444 444 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444 444 888 888 444 444 444 444 444 444 444 444 444 444 444 444
|
|
||||||
444
|
|
||||||
|
|
||||||
name TV
|
|
||||||
2830 724 583 333 553 339
|
|
||||||
548 791 543 795 977 357
|
|
||||||
527 364 524 367 524 368
|
|
||||||
522 369 521 370 520 371
|
|
||||||
519 372 519 372 519 372
|
|
||||||
518 372 518 374 963 818
|
|
||||||
516 376 510 381 509 382
|
|
||||||
954 828 508 407 481
|
|
||||||
|
|
||||||
name SKY
|
|
||||||
2829 726 580 336 551 340
|
|
||||||
547 791 540 798 977 366
|
|
||||||
519 364 523 367 521 370
|
|
||||||
521 370 520 371 520 371
|
|
||||||
520 371 519 372 518 373
|
|
||||||
517 374 517 374 957 825
|
|
||||||
512 379 512 380 513 377
|
|
||||||
511 381 506 410 477 413
|
|
||||||
483
|
|
||||||
|
|
||||||
name MUTE
|
|
||||||
2567 429 751 447 743 456
|
|
||||||
1335 464 734 466 1325 496
|
|
||||||
697 504 693 506 1284 513
|
|
||||||
681 518 681 517 679 520
|
|
||||||
678 26288 2533 462 734 489
|
|
||||||
705 470 1323 501 695 503
|
|
||||||
1287 511 683 516 683 518
|
|
||||||
1277 522 676 521 678 521
|
|
||||||
675 523 675 26286 2533 465
|
|
||||||
731 491 702 499 1293 504
|
|
||||||
692 507 1280 518 683 516
|
|
||||||
679 524 1272 522 675 529
|
|
||||||
670 523 682 517 675 26286
|
|
||||||
2532 465 729 493 702 473
|
|
||||||
1318 506 688 509 1282 517
|
|
||||||
680 519 677 524 1274 523
|
|
||||||
676
|
|
||||||
|
|
||||||
name VOLUME-UP
|
|
||||||
2568 430 766 433 1342 456
|
|
||||||
734 489 708 466 1326 497
|
|
||||||
699 505 686 508 1286 512
|
|
||||||
688 510 683 516 682 516
|
|
||||||
681 26284 2540 481 711 488
|
|
||||||
1301 498 703 495 695 504
|
|
||||||
1284 516 682 516 684 515
|
|
||||||
1276 522 675 523 675 524
|
|
||||||
674 524 675 26286 2532 490
|
|
||||||
709 489 1300 500 689 509
|
|
||||||
695 517 1270 516 683 520
|
|
||||||
675 519 1274 529 668 525
|
|
||||||
675 524 673 526 672 26288
|
|
||||||
2532 466 731 491 1300 499
|
|
||||||
695 503 692 509 1277 520
|
|
||||||
681 518 679 519 1278 520
|
|
||||||
675
|
|
||||||
|
|
||||||
name VOLUME-DOWN
|
|
||||||
2562 434 1348 451 1332 465
|
|
||||||
733 489 704 496 1296 504
|
|
||||||
690 507 694 511 1281 511
|
|
||||||
683 523 677 515 679 520
|
|
||||||
680 25687 2533 464 1330 491
|
|
||||||
1295 505 693 506 689 510
|
|
||||||
1293 505 684 516 678 520
|
|
||||||
1276 523 677 520 675 524
|
|
||||||
673 526 674 25686 2531 467
|
|
||||||
1324 498 1292 506 691 509
|
|
||||||
683 515 1280 518 678 521
|
|
||||||
675 523 1273 525 674 527
|
|
||||||
672 525 673 527 671 25685
|
|
||||||
2531 467 1320 501 1288 511
|
|
||||||
687 511 688 512 1282 516
|
|
||||||
678 521 675 524 1273
|
|
||||||
|
|
||||||
name TVGUIDE
|
|
||||||
2834 720 586 330 554 338
|
|
||||||
548 794 539 796 975 360
|
|
||||||
528 363 521 371 519 371
|
|
||||||
520 371 519 375 514 374
|
|
||||||
517 374 516 375 513 379
|
|
||||||
511 380 510 381 949 387
|
|
||||||
500 836 505 387 945 391
|
|
||||||
493 868 469 422 468
|
|
||||||
|
|
||||||
name BOXOFFICE
|
|
||||||
2833 745 564 329 555 338
|
|
||||||
548 790 545 793 982 352
|
|
||||||
529 362 526 365 522 370
|
|
||||||
519 371 519 372 519 372
|
|
||||||
518 373 517 374 513 378
|
|
||||||
515 376 507 384 506 385
|
|
||||||
945 390 496 396 498 392
|
|
||||||
496 419 468 847 936
|
|
||||||
|
|
||||||
name SERVICES
|
|
||||||
2829 725 585 330 555 338
|
|
||||||
548 798 537 794 979 356
|
|
||||||
528 368 522 363 523 369
|
|
||||||
521 370 521 370 520 370
|
|
||||||
520 371 520 371 520 371
|
|
||||||
519 372 519 372 518 373
|
|
||||||
964 371 517 375 513 377
|
|
||||||
511 404 489 402 485 828
|
|
||||||
514
|
|
||||||
|
|
||||||
name INTERACTIVE
|
|
||||||
2829 726 591 324 553 340
|
|
||||||
550 788 542 796 981 354
|
|
||||||
532 359 522 369 522 369
|
|
||||||
520 372 518 373 518 373
|
|
||||||
516 375 515 375 513 379
|
|
||||||
515 375 510 381 948 389
|
|
||||||
498 392 504 412 470 867
|
|
||||||
916 866 913
|
|
||||||
|
|
||||||
end raw_codes
|
|
||||||
|
|
||||||
end remote
|
|
@ -1,303 +0,0 @@
|
|||||||
/*
|
|
||||||
* sky.c: A plugin for the Video Disk Recorder
|
|
||||||
*
|
|
||||||
* See the README file for copyright information and how to reach the author.
|
|
||||||
*
|
|
||||||
* $Id: sky.c 2.1 2008/09/07 11:54:07 kls Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <vdr/device.h>
|
|
||||||
#include <vdr/plugin.h>
|
|
||||||
#include <vdr/sources.h>
|
|
||||||
|
|
||||||
static const char *VERSION = "0.3.8";
|
|
||||||
static const char *DESCRIPTION = "Sky Digibox interface";
|
|
||||||
|
|
||||||
// --- cDigiboxDevice --------------------------------------------------------
|
|
||||||
|
|
||||||
#define DUMMYAPID 80
|
|
||||||
#define DUMMYVPID 160
|
|
||||||
|
|
||||||
class cSkyChannel : public cListObject {
|
|
||||||
public:
|
|
||||||
tChannelID channelID;
|
|
||||||
int digiboxChannelNumber;
|
|
||||||
bool Parse(const char *s);
|
|
||||||
};
|
|
||||||
|
|
||||||
bool cSkyChannel::Parse(const char *s)
|
|
||||||
{
|
|
||||||
char *id = NULL;
|
|
||||||
if (2 == sscanf(s, "%a[^:]:%d", &id, &digiboxChannelNumber))
|
|
||||||
channelID = tChannelID::FromString(id);
|
|
||||||
free(id);
|
|
||||||
return digiboxChannelNumber && channelID.Valid();
|
|
||||||
}
|
|
||||||
|
|
||||||
class cSkyChannels : public cConfig<cSkyChannel> {
|
|
||||||
public:
|
|
||||||
cSkyChannel *GetSkyChannel(const cChannel *Channel);
|
|
||||||
};
|
|
||||||
|
|
||||||
cSkyChannel *cSkyChannels::GetSkyChannel(const cChannel *Channel)
|
|
||||||
{
|
|
||||||
tChannelID ChannelID = Channel->GetChannelID();
|
|
||||||
for (cSkyChannel *sc = First(); sc; sc = Next(sc)) {
|
|
||||||
if (ChannelID == sc->channelID)
|
|
||||||
return sc;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cSkyChannels SkyChannels;
|
|
||||||
|
|
||||||
class cDigiboxDevice : public cDevice {
|
|
||||||
private:
|
|
||||||
int source;
|
|
||||||
int digiboxChannelNumber;
|
|
||||||
int fd_dvr;
|
|
||||||
int apid, vpid;
|
|
||||||
cTSBuffer *tsBuffer;
|
|
||||||
int fd_lirc;
|
|
||||||
void LircSend(const char *s);
|
|
||||||
void LircSend(int n);
|
|
||||||
protected:
|
|
||||||
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
|
|
||||||
virtual bool OpenDvr(void);
|
|
||||||
virtual void CloseDvr(void);
|
|
||||||
virtual bool GetTSPacket(uchar *&Data);
|
|
||||||
public:
|
|
||||||
cDigiboxDevice(void);
|
|
||||||
virtual ~cDigiboxDevice();
|
|
||||||
virtual bool ProvidesSource(int Source) const;
|
|
||||||
virtual bool ProvidesTransponder(const cChannel *Channel) const;
|
|
||||||
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsSetChannel = NULL) const;
|
|
||||||
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
|
|
||||||
};
|
|
||||||
|
|
||||||
cDigiboxDevice::cDigiboxDevice(void)
|
|
||||||
{
|
|
||||||
source = cSource::FromString("S28.2E");//XXX parameter???
|
|
||||||
digiboxChannelNumber = 0;
|
|
||||||
fd_dvr = -1;
|
|
||||||
apid = vpid = 0;
|
|
||||||
struct sockaddr_un addr;
|
|
||||||
addr.sun_family = AF_UNIX;
|
|
||||||
strn0cpy(addr.sun_path, "/dev/lircd", sizeof(addr.sun_path));//XXX parameter???
|
|
||||||
fd_lirc = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
||||||
if (fd_lirc >= 0) {
|
|
||||||
if (connect(fd_lirc, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
||||||
LOG_ERROR;
|
|
||||||
close(fd_lirc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
LOG_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
cDigiboxDevice::~cDigiboxDevice()
|
|
||||||
{
|
|
||||||
if (fd_lirc >= 0)
|
|
||||||
close(fd_lirc);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cDigiboxDevice::LircSend(const char *s)
|
|
||||||
{
|
|
||||||
char buf[100];
|
|
||||||
snprintf(buf, sizeof(buf), "SEND_ONCE SKY %s\n", s);
|
|
||||||
dsyslog(buf);//XXX
|
|
||||||
if (write(fd_lirc, buf, strlen(buf)) < 0)
|
|
||||||
LOG_ERROR;//XXX _STR
|
|
||||||
cCondWait::SleepMs(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cDigiboxDevice::LircSend(int n)
|
|
||||||
{
|
|
||||||
char buf[10];
|
|
||||||
snprintf(buf, sizeof(buf), "%d", n);
|
|
||||||
char *p = buf;
|
|
||||||
while (*p) {
|
|
||||||
char q[10];
|
|
||||||
sprintf(q, "%c", *p);
|
|
||||||
LircSend(q);
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::SetPid(cPidHandle *Handle, int Type, bool On)
|
|
||||||
{
|
|
||||||
//dsyslog("SetPid %d %d", Handle->pid, On);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::OpenDvr(void)
|
|
||||||
{
|
|
||||||
CloseDvr();
|
|
||||||
fd_dvr = open("/dev/video2", O_RDONLY | O_NONBLOCK);//XXX parameter???
|
|
||||||
if (fd_dvr >= 0)
|
|
||||||
tsBuffer = new cTSBuffer(fd_dvr, MEGABYTE(2), CardIndex() + 1);
|
|
||||||
return fd_dvr >= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cDigiboxDevice::CloseDvr(void)
|
|
||||||
{
|
|
||||||
if (fd_dvr >= 0) {
|
|
||||||
close(fd_dvr);
|
|
||||||
fd_dvr = -1;
|
|
||||||
delete tsBuffer;
|
|
||||||
tsBuffer = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::GetTSPacket(uchar *&Data)
|
|
||||||
{
|
|
||||||
if (tsBuffer) {
|
|
||||||
Data = tsBuffer->Get();
|
|
||||||
if (Data) {
|
|
||||||
// insert the actual PIDs:
|
|
||||||
int Pid = (((uint16_t)Data[1] & TS_PID_MASK_HI) << 8) | Data[2];
|
|
||||||
if (Pid == DUMMYAPID)
|
|
||||||
Pid = apid;
|
|
||||||
else if (Pid == DUMMYVPID)
|
|
||||||
Pid = vpid;
|
|
||||||
Data[1] = ((Pid >> 8) & 0xFF) | (Data[1] & ~TS_PID_MASK_HI);
|
|
||||||
Data[2] = Pid & 0xFF;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::ProvidesSource(int Source) const
|
|
||||||
{
|
|
||||||
return source == Source;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::ProvidesTransponder(const cChannel *Channel) const
|
|
||||||
{
|
|
||||||
return false; // can't provide any actual transponder
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
bool hasPriority = Priority < 0 || Priority > this->Priority();
|
|
||||||
bool needsDetachReceivers = true;
|
|
||||||
|
|
||||||
cSkyChannel *SkyChannel = SkyChannels.GetSkyChannel(Channel);
|
|
||||||
if (SkyChannel) {
|
|
||||||
if (Receiving(true)) {
|
|
||||||
if (digiboxChannelNumber == SkyChannel->digiboxChannelNumber) {
|
|
||||||
needsDetachReceivers = false;
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
result = hasPriority;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
result = hasPriority;
|
|
||||||
}
|
|
||||||
if (NeedsDetachReceivers)
|
|
||||||
*NeedsDetachReceivers = needsDetachReceivers;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cDigiboxDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
|
|
||||||
{
|
|
||||||
if (fd_lirc >= 0 && !Receiving(true)) { // if we are receiving the channel is already set!
|
|
||||||
cSkyChannel *SkyChannel = SkyChannels.GetSkyChannel(Channel);
|
|
||||||
if (SkyChannel) {
|
|
||||||
digiboxChannelNumber = SkyChannel->digiboxChannelNumber;
|
|
||||||
apid = Channel->Apid(0);
|
|
||||||
vpid = Channel->Vpid();
|
|
||||||
//XXX only when recording??? -> faster channel switching!
|
|
||||||
LircSend("SKY"); // makes sure the Digibox is "on"
|
|
||||||
//XXX lircprint(fd_lirc, "BACKUP");
|
|
||||||
//XXX lircprint(fd_lirc, "BACKUP");
|
|
||||||
//XXX lircprint(fd_lirc, "BACKUP");
|
|
||||||
LircSend(digiboxChannelNumber);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cPluginSky ------------------------------------------------------------
|
|
||||||
|
|
||||||
class cPluginSky : public cPlugin {
|
|
||||||
private:
|
|
||||||
// Add any member variables or functions you may need here.
|
|
||||||
public:
|
|
||||||
cPluginSky(void);
|
|
||||||
virtual ~cPluginSky();
|
|
||||||
virtual const char *Version(void) { return VERSION; }
|
|
||||||
virtual const char *Description(void) { return DESCRIPTION; }
|
|
||||||
virtual const char *CommandLineHelp(void);
|
|
||||||
virtual bool ProcessArgs(int argc, char *argv[]);
|
|
||||||
virtual bool Initialize(void);
|
|
||||||
virtual void Housekeeping(void);
|
|
||||||
virtual cMenuSetupPage *SetupMenu(void);
|
|
||||||
virtual bool SetupParse(const char *Name, const char *Value);
|
|
||||||
};
|
|
||||||
|
|
||||||
cPluginSky::cPluginSky(void)
|
|
||||||
{
|
|
||||||
// Initialize any member variables here.
|
|
||||||
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
|
|
||||||
// VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
|
|
||||||
}
|
|
||||||
|
|
||||||
cPluginSky::~cPluginSky()
|
|
||||||
{
|
|
||||||
// Clean up after yourself!
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *cPluginSky::CommandLineHelp(void)
|
|
||||||
{
|
|
||||||
// Return a string that describes all known command line options.
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cPluginSky::ProcessArgs(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// Implement command line argument processing here if applicable.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cPluginSky::Initialize(void)
|
|
||||||
{
|
|
||||||
// Initialize any background activities the plugin shall perform.
|
|
||||||
const char *ConfigDir = ConfigDirectory(Name());
|
|
||||||
if (ConfigDir) {
|
|
||||||
if (SkyChannels.Load(AddDirectory(ConfigDir, "channels.conf.sky"), true)) {
|
|
||||||
new cDigiboxDevice;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
esyslog("ERROR: can't get config directory");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cPluginSky::Housekeeping(void)
|
|
||||||
{
|
|
||||||
// Perform any cleanup or other regular tasks.
|
|
||||||
}
|
|
||||||
|
|
||||||
cMenuSetupPage *cPluginSky::SetupMenu(void)
|
|
||||||
{
|
|
||||||
// Return a setup menu in case the plugin supports one.
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cPluginSky::SetupParse(const char *Name, const char *Value)
|
|
||||||
{
|
|
||||||
// Parse your own setup parameters and store their values.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
VDRPLUGINCREATOR(cPluginSky); // Don't touch this!
|
|
31
channels.c
31
channels.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.c 2.8 2009/08/30 11:25:50 kls Exp $
|
* $Id: channels.c 2.12 2010/01/02 17:38:40 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
@ -24,14 +24,14 @@ const tChannelParameterMap InversionValues[] = {
|
|||||||
{ 0, INVERSION_OFF, trNOOP("off") },
|
{ 0, INVERSION_OFF, trNOOP("off") },
|
||||||
{ 1, INVERSION_ON, trNOOP("on") },
|
{ 1, INVERSION_ON, trNOOP("on") },
|
||||||
{ 999, INVERSION_AUTO, trNOOP("auto") },
|
{ 999, INVERSION_AUTO, trNOOP("auto") },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap BandwidthValues[] = {
|
const tChannelParameterMap BandwidthValues[] = {
|
||||||
{ 6, 6000000, "6 MHz" },
|
{ 6, 6000000, "6 MHz" },
|
||||||
{ 7, 7000000, "7 MHz" },
|
{ 7, 7000000, "7 MHz" },
|
||||||
{ 8, 8000000, "8 MHz" },
|
{ 8, 8000000, "8 MHz" },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap CoderateValues[] = {
|
const tChannelParameterMap CoderateValues[] = {
|
||||||
@ -47,7 +47,7 @@ const tChannelParameterMap CoderateValues[] = {
|
|||||||
{ 89, FEC_8_9, "8/9" },
|
{ 89, FEC_8_9, "8/9" },
|
||||||
{ 910, FEC_9_10, "9/10" },
|
{ 910, FEC_9_10, "9/10" },
|
||||||
{ 999, FEC_AUTO, trNOOP("auto") },
|
{ 999, FEC_AUTO, trNOOP("auto") },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap ModulationValues[] = {
|
const tChannelParameterMap ModulationValues[] = {
|
||||||
@ -62,20 +62,20 @@ const tChannelParameterMap ModulationValues[] = {
|
|||||||
{ 10, VSB_8, "VSB8" },
|
{ 10, VSB_8, "VSB8" },
|
||||||
{ 11, VSB_16, "VSB16" },
|
{ 11, VSB_16, "VSB16" },
|
||||||
{ 998, QAM_AUTO, "QAMAUTO" },
|
{ 998, QAM_AUTO, "QAMAUTO" },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap SystemValues[] = {
|
const tChannelParameterMap SystemValues[] = {
|
||||||
{ 0, SYS_DVBS, "DVB-S" },
|
{ 0, SYS_DVBS, "DVB-S" },
|
||||||
{ 1, SYS_DVBS2, "DVB-S2" },
|
{ 1, SYS_DVBS2, "DVB-S2" },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap TransmissionValues[] = {
|
const tChannelParameterMap TransmissionValues[] = {
|
||||||
{ 2, TRANSMISSION_MODE_2K, "2K" },
|
{ 2, TRANSMISSION_MODE_2K, "2K" },
|
||||||
{ 8, TRANSMISSION_MODE_8K, "8K" },
|
{ 8, TRANSMISSION_MODE_8K, "8K" },
|
||||||
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
|
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap GuardValues[] = {
|
const tChannelParameterMap GuardValues[] = {
|
||||||
@ -84,7 +84,7 @@ const tChannelParameterMap GuardValues[] = {
|
|||||||
{ 16, GUARD_INTERVAL_1_16, "1/16" },
|
{ 16, GUARD_INTERVAL_1_16, "1/16" },
|
||||||
{ 32, GUARD_INTERVAL_1_32, "1/32" },
|
{ 32, GUARD_INTERVAL_1_32, "1/32" },
|
||||||
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
|
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap HierarchyValues[] = {
|
const tChannelParameterMap HierarchyValues[] = {
|
||||||
@ -93,7 +93,7 @@ const tChannelParameterMap HierarchyValues[] = {
|
|||||||
{ 2, HIERARCHY_2, "2" },
|
{ 2, HIERARCHY_2, "2" },
|
||||||
{ 4, HIERARCHY_4, "4" },
|
{ 4, HIERARCHY_4, "4" },
|
||||||
{ 999, HIERARCHY_AUTO, trNOOP("auto") },
|
{ 999, HIERARCHY_AUTO, trNOOP("auto") },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
const tChannelParameterMap RollOffValues[] = {
|
const tChannelParameterMap RollOffValues[] = {
|
||||||
@ -101,7 +101,7 @@ const tChannelParameterMap RollOffValues[] = {
|
|||||||
{ 20, ROLLOFF_20, "0.20" },
|
{ 20, ROLLOFF_20, "0.20" },
|
||||||
{ 25, ROLLOFF_25, "0.25" },
|
{ 25, ROLLOFF_25, "0.25" },
|
||||||
{ 35, ROLLOFF_35, "0.35" },
|
{ 35, ROLLOFF_35, "0.35" },
|
||||||
{ -1 }
|
{ -1, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
int UserIndex(int Value, const tChannelParameterMap *Map)
|
int UserIndex(int Value, const tChannelParameterMap *Map)
|
||||||
@ -259,6 +259,7 @@ int cChannel::Transponder(int Frequency, char Polarization)
|
|||||||
case 'v': Frequency += 200000; break;
|
case 'v': Frequency += 200000; break;
|
||||||
case 'l': Frequency += 300000; break;
|
case 'l': Frequency += 300000; break;
|
||||||
case 'r': Frequency += 400000; break;
|
case 'r': Frequency += 400000; break;
|
||||||
|
default: esyslog("ERROR: invalid value for Polarization '%c'", Polarization);
|
||||||
}
|
}
|
||||||
return Frequency;
|
return Frequency;
|
||||||
}
|
}
|
||||||
@ -625,7 +626,7 @@ void cChannel::SetLinkChannels(cLinkChannels *LinkChannels)
|
|||||||
else
|
else
|
||||||
q += sprintf(q, " none");
|
q += sprintf(q, " none");
|
||||||
if (Number())
|
if (Number())
|
||||||
dsyslog(buffer);
|
dsyslog("%s", buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cChannel::SetRefChannel(cChannel *RefChannel)
|
void cChannel::SetRefChannel(cChannel *RefChannel)
|
||||||
@ -726,6 +727,8 @@ cString cChannel::ToText(const cChannel *Channel)
|
|||||||
q += sprintf(q, "%s", Channel->name);
|
q += sprintf(q, "%s", Channel->name);
|
||||||
if (!isempty(Channel->shortName))
|
if (!isempty(Channel->shortName))
|
||||||
q += sprintf(q, ",%s", Channel->shortName);
|
q += sprintf(q, ",%s", Channel->shortName);
|
||||||
|
else if (strchr(Channel->name, ','))
|
||||||
|
q += sprintf(q, ",");
|
||||||
if (!isempty(Channel->provider))
|
if (!isempty(Channel->provider))
|
||||||
q += sprintf(q, ";%s", Channel->provider);
|
q += sprintf(q, ";%s", Channel->provider);
|
||||||
*q = 0;
|
*q = 0;
|
||||||
@ -806,7 +809,7 @@ bool cChannel::Parse(const char *s)
|
|||||||
tpid = 0;
|
tpid = 0;
|
||||||
}
|
}
|
||||||
vpid = ppid = 0;
|
vpid = ppid = 0;
|
||||||
vtype = 2; // default is MPEG-2
|
vtype = 0;
|
||||||
apids[0] = 0;
|
apids[0] = 0;
|
||||||
dpids[0] = 0;
|
dpids[0] = 0;
|
||||||
ok = false;
|
ok = false;
|
||||||
@ -828,6 +831,8 @@ bool cChannel::Parse(const char *s)
|
|||||||
return false;
|
return false;
|
||||||
if (!ppid)
|
if (!ppid)
|
||||||
ppid = vpid;
|
ppid = vpid;
|
||||||
|
if (vpid && !vtype)
|
||||||
|
vtype = 2; // default is MPEG-2
|
||||||
|
|
||||||
char *dpidbuf = strchr(apidbuf, ';');
|
char *dpidbuf = strchr(apidbuf, ';');
|
||||||
if (dpidbuf)
|
if (dpidbuf)
|
||||||
@ -900,7 +905,7 @@ bool cChannel::Parse(const char *s)
|
|||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
provider = strcpyrealloc(provider, p);
|
provider = strcpyrealloc(provider, p);
|
||||||
}
|
}
|
||||||
p = strchr(namebuf, ',');
|
p = strrchr(namebuf, ','); // long name might contain a ',', so search for the rightmost one
|
||||||
if (p) {
|
if (p) {
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
shortName = strcpyrealloc(shortName, p);
|
shortName = strcpyrealloc(shortName, p);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.h 2.6 2009/08/30 11:05:54 kls Exp $
|
* $Id: channels.h 2.7 2009/12/06 12:57:45 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CHANNELS_H
|
#ifndef __CHANNELS_H
|
||||||
@ -188,9 +188,9 @@ public:
|
|||||||
const char *Alang(int i) const { return (0 <= i && i < MAXAPIDS) ? alangs[i] : ""; }
|
const char *Alang(int i) const { return (0 <= i && i < MAXAPIDS) ? alangs[i] : ""; }
|
||||||
const char *Dlang(int i) const { return (0 <= i && i < MAXDPIDS) ? dlangs[i] : ""; }
|
const char *Dlang(int i) const { return (0 <= i && i < MAXDPIDS) ? dlangs[i] : ""; }
|
||||||
const char *Slang(int i) const { return (0 <= i && i < MAXSPIDS) ? slangs[i] : ""; }
|
const char *Slang(int i) const { return (0 <= i && i < MAXSPIDS) ? slangs[i] : ""; }
|
||||||
uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : 0; }
|
uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
|
||||||
uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : 0; }
|
uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
|
||||||
uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : 0; }
|
uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
|
||||||
int Tpid(void) const { return tpid; }
|
int Tpid(void) const { return tpid; }
|
||||||
const int *Caids(void) const { return caids; }
|
const int *Caids(void) const { return caids; }
|
||||||
int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
|
int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
|
||||||
|
28
ci.c
28
ci.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: ci.c 2.3 2009/08/16 13:21:07 kls Exp $
|
* $Id: ci.c 2.6 2010/01/02 10:39:50 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ci.h"
|
#include "ci.h"
|
||||||
@ -610,9 +610,7 @@ cCiCaPmt::cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber
|
|||||||
capmt[length++] = 0x01; // version_number, current_next_indicator - apparently vn doesn't matter, but cni must be 1
|
capmt[length++] = 0x01; // version_number, current_next_indicator - apparently vn doesn't matter, but cni must be 1
|
||||||
esInfoLengthPos = length;
|
esInfoLengthPos = length;
|
||||||
capmt[length++] = 0x00; // program_info_length H (at program level)
|
capmt[length++] = 0x00; // program_info_length H (at program level)
|
||||||
capmt[length++] = 0x01; // program_info_length L
|
capmt[length++] = 0x00; // program_info_length L
|
||||||
capmt[length++] = cmdId;
|
|
||||||
if (caDescriptorsLength > 0)
|
|
||||||
AddCaDescriptors(caDescriptorsLength, caDescriptors);
|
AddCaDescriptors(caDescriptorsLength, caDescriptors);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,9 +630,7 @@ void cCiCaPmt::AddPid(int Pid, uint8_t StreamType)
|
|||||||
capmt[length++] = Pid & 0xFF;
|
capmt[length++] = Pid & 0xFF;
|
||||||
esInfoLengthPos = length;
|
esInfoLengthPos = length;
|
||||||
capmt[length++] = 0x00; // ES_info_length H (at ES level)
|
capmt[length++] = 0x00; // ES_info_length H (at ES level)
|
||||||
capmt[length++] = 0x01; // ES_info_length L
|
capmt[length++] = 0x00; // ES_info_length L
|
||||||
capmt[length++] = cmdId;
|
|
||||||
if (caDescriptorsLength > 0)
|
|
||||||
AddCaDescriptors(caDescriptorsLength, caDescriptors);
|
AddCaDescriptors(caDescriptorsLength, caDescriptors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -642,13 +638,16 @@ void cCiCaPmt::AddPid(int Pid, uint8_t StreamType)
|
|||||||
void cCiCaPmt::AddCaDescriptors(int Length, const uint8_t *Data)
|
void cCiCaPmt::AddCaDescriptors(int Length, const uint8_t *Data)
|
||||||
{
|
{
|
||||||
if (esInfoLengthPos) {
|
if (esInfoLengthPos) {
|
||||||
if (length + Length <= int(sizeof(capmt))) {
|
if (length + Length < int(sizeof(capmt))) {
|
||||||
|
if (Length || cmdId == CPCI_QUERY) {
|
||||||
|
capmt[length++] = cmdId;
|
||||||
memcpy(capmt + length, Data, Length);
|
memcpy(capmt + length, Data, Length);
|
||||||
length += Length;
|
length += Length;
|
||||||
int l = length - esInfoLengthPos - 2;
|
int l = length - esInfoLengthPos - 2;
|
||||||
capmt[esInfoLengthPos] = (l >> 8) & 0xFF;
|
capmt[esInfoLengthPos] = (l >> 8) & 0xFF;
|
||||||
capmt[esInfoLengthPos + 1] = l & 0xFF;
|
capmt[esInfoLengthPos + 1] = l & 0xFF;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
esyslog("ERROR: buffer overflow in CA descriptor");
|
esyslog("ERROR: buffer overflow in CA descriptor");
|
||||||
esInfoLengthPos = 0;
|
esInfoLengthPos = 0;
|
||||||
@ -1424,6 +1423,15 @@ bool cCiTransportConnection::Process(cTPDU *TPDU)
|
|||||||
SendTPDU(T_DTC_REPLY);
|
SendTPDU(T_DTC_REPLY);
|
||||||
state = stIDLE;
|
state = stIDLE;
|
||||||
return true;
|
return true;
|
||||||
|
case T_RCV:
|
||||||
|
case T_CREATE_TC:
|
||||||
|
case T_CTC_REPLY:
|
||||||
|
case T_DTC_REPLY:
|
||||||
|
case T_NEW_TC:
|
||||||
|
case T_TC_ERROR:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
esyslog("ERROR: unknown TPDU tag: 0x%02X (%s)", TPDU->Tag(), __FUNCTION__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (timer.TimedOut())
|
else if (timer.TimedOut())
|
||||||
@ -1443,6 +1451,8 @@ bool cCiTransportConnection::Process(cTPDU *TPDU)
|
|||||||
state = stIDLE;
|
state = stIDLE;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
default:
|
||||||
|
esyslog("ERROR: unknown state: %d (%s)", state, __FUNCTION__);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1668,6 +1678,8 @@ void cCamSlot::Process(cTPDU *TPDU)
|
|||||||
NewConnection();
|
NewConnection();
|
||||||
resendPmt = caProgramList.Count() > 0;
|
resendPmt = caProgramList.Count() > 0;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
esyslog("ERROR: unknown module status %d (%s)", ms, __FUNCTION__);
|
||||||
}
|
}
|
||||||
lastModuleStatus = ms;
|
lastModuleStatus = ms;
|
||||||
}
|
}
|
||||||
|
4
config.c
4
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 2.5 2009/06/13 10:25:05 kls Exp $
|
* $Id: config.c 2.6 2009/12/05 15:30:30 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -76,7 +76,7 @@ const char *cCommand::Execute(const char *Parameters)
|
|||||||
while ((c = fgetc(p)) != EOF) {
|
while ((c = fgetc(p)) != EOF) {
|
||||||
if (l % 20 == 0)
|
if (l % 20 == 0)
|
||||||
result = (char *)realloc(result, l + 21);
|
result = (char *)realloc(result, l + 21);
|
||||||
result[l++] = c;
|
result[l++] = char(c);
|
||||||
}
|
}
|
||||||
if (result)
|
if (result)
|
||||||
result[l] = 0;
|
result[l] = 0;
|
||||||
|
10
config.h
10
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 2.15 2009/08/29 12:47:03 kls Exp $
|
* $Id: config.h 2.16 2009/11/22 19:55:04 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -22,13 +22,13 @@
|
|||||||
|
|
||||||
// VDR's own version number:
|
// VDR's own version number:
|
||||||
|
|
||||||
#define VDRVERSION "1.7.10"
|
#define VDRVERSION "1.7.11"
|
||||||
#define VDRVERSNUM 10710 // Version * 10000 + Major * 100 + Minor
|
#define VDRVERSNUM 10711 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// The plugin API's version number:
|
// The plugin API's version number:
|
||||||
|
|
||||||
#define APIVERSION "1.7.10"
|
#define APIVERSION "1.7.11"
|
||||||
#define APIVERSNUM 10710 // Version * 10000 + Major * 100 + Minor
|
#define APIVERSNUM 10711 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||||
// may be smaller than VDRVERSION in case there have been no changes to
|
// may be smaller than VDRVERSION in case there have been no changes to
|
||||||
|
30
cutter.c
30
cutter.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: cutter.c 2.3 2009/04/19 10:56:33 kls Exp $
|
* $Id: cutter.c 2.4 2010/01/02 13:08:08 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cutter.h"
|
#include "cutter.h"
|
||||||
@ -274,3 +274,31 @@ bool cCutter::Ended(void)
|
|||||||
ended = false;
|
ended = false;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CUTTINGCHECKINTERVAL 500 // ms between checks for the active cutting process
|
||||||
|
|
||||||
|
bool CutRecording(const char *FileName)
|
||||||
|
{
|
||||||
|
if (DirectoryOk(FileName)) {
|
||||||
|
cRecording Recording(FileName);
|
||||||
|
if (Recording.Name()) {
|
||||||
|
cMarks Marks;
|
||||||
|
if (Marks.Load(FileName, Recording.FramesPerSecond(), Recording.IsPesRecording()) && Marks.Count()) {
|
||||||
|
if (cCutter::Start(FileName)) {
|
||||||
|
while (cCutter::Active())
|
||||||
|
cCondWait::SleepMs(CUTTINGCHECKINTERVAL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "can't start editing process\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' has no editing marks\n", FileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' is not a recording\n", FileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' is not a directory\n", FileName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
4
cutter.h
4
cutter.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: cutter.h 2.0 2002/06/22 10:03:15 kls Exp $
|
* $Id: cutter.h 2.1 2010/01/02 12:09:54 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CUTTER_H
|
#ifndef __CUTTER_H
|
||||||
@ -26,4 +26,6 @@ public:
|
|||||||
static bool Ended(void);
|
static bool Ended(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool CutRecording(const char *FileName);
|
||||||
|
|
||||||
#endif //__CUTTER_H
|
#endif //__CUTTER_H
|
||||||
|
14
device.c
14
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 2.26 2009/11/22 13:19:03 kls Exp $
|
* $Id: device.c 2.31 2010/01/01 15:40:35 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -64,6 +64,7 @@ cDevice::cDevice(void)
|
|||||||
:patPmtParser(true)
|
:patPmtParser(true)
|
||||||
{
|
{
|
||||||
cardIndex = nextCardIndex++;
|
cardIndex = nextCardIndex++;
|
||||||
|
dsyslog("new device number %d", CardIndex() + 1);
|
||||||
|
|
||||||
SetDescription("receiver on device %d", CardIndex() + 1);
|
SetDescription("receiver on device %d", CardIndex() + 1);
|
||||||
|
|
||||||
@ -153,6 +154,10 @@ int cDevice::DeviceNumber(void) const
|
|||||||
|
|
||||||
void cDevice::MakePrimaryDevice(bool On)
|
void cDevice::MakePrimaryDevice(bool On)
|
||||||
{
|
{
|
||||||
|
if (!On) {
|
||||||
|
DELETENULL(liveSubtitle);
|
||||||
|
DELETENULL(dvbSubtitleConverter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDevice::SetPrimaryDevice(int n)
|
bool cDevice::SetPrimaryDevice(int n)
|
||||||
@ -371,6 +376,7 @@ void cDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
|
|||||||
case vdfCenterCutOut:
|
case vdfCenterCutOut:
|
||||||
spuDecoder->setScaleMode(cSpuDecoder::eSpuNormal);
|
spuDecoder->setScaleMode(cSpuDecoder::eSpuNormal);
|
||||||
break;
|
break;
|
||||||
|
default: esyslog("ERROR: invalid value for VideoDisplayFormat '%d'", VideoDisplayFormat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -399,7 +405,7 @@ void cDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
|
|||||||
PixelAspect = 1.0;
|
PixelAspect = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define PRINTPIDS(s) { char b[500]; char *q = b; q += sprintf(q, "%d %s ", CardIndex(), s); for (int i = 0; i < MAXPIDHANDLES; i++) q += sprintf(q, " %s%4d %d", i == ptOther ? "* " : "", pidHandles[i].pid, pidHandles[i].used); dsyslog(b); }
|
//#define PRINTPIDS(s) { char b[500]; char *q = b; q += sprintf(q, "%d %s ", CardIndex(), s); for (int i = 0; i < MAXPIDHANDLES; i++) q += sprintf(q, " %s%4d %d", i == ptOther ? "* " : "", pidHandles[i].pid, pidHandles[i].used); dsyslog("%s", b); }
|
||||||
#define PRINTPIDS(s)
|
#define PRINTPIDS(s)
|
||||||
|
|
||||||
bool cDevice::HasPid(int Pid) const
|
bool cDevice::HasPid(int Pid) const
|
||||||
@ -411,7 +417,7 @@ bool cDevice::HasPid(int Pid) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDevice::AddPid(int Pid, ePidType PidType)
|
bool cDevice::AddPid(int Pid, ePidType PidType, int StreamType)
|
||||||
{
|
{
|
||||||
if (Pid || PidType == ptPcr) {
|
if (Pid || PidType == ptPcr) {
|
||||||
int n = -1;
|
int n = -1;
|
||||||
@ -458,6 +464,7 @@ bool cDevice::AddPid(int Pid, ePidType PidType)
|
|||||||
}
|
}
|
||||||
if (n >= 0) {
|
if (n >= 0) {
|
||||||
pidHandles[n].pid = Pid;
|
pidHandles[n].pid = Pid;
|
||||||
|
pidHandles[n].streamType = StreamType;
|
||||||
pidHandles[n].used = 1;
|
pidHandles[n].used = 1;
|
||||||
PRINTPIDS("C");
|
PRINTPIDS("C");
|
||||||
if (!SetPid(&pidHandles[n], n, true)) {
|
if (!SetPid(&pidHandles[n], n, true)) {
|
||||||
@ -611,6 +618,7 @@ bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
|
|||||||
case scrNoTransfer: Skins.Message(mtError, tr("Can't start Transfer Mode!"));
|
case scrNoTransfer: Skins.Message(mtError, tr("Can't start Transfer Mode!"));
|
||||||
return false;
|
return false;
|
||||||
case scrFailed: break; // loop will retry
|
case scrFailed: break; // loop will retry
|
||||||
|
default: esyslog("ERROR: invalid return value from SetChannel");
|
||||||
}
|
}
|
||||||
esyslog("retrying");
|
esyslog("retrying");
|
||||||
}
|
}
|
||||||
|
12
device.h
12
device.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.h 2.16 2009/11/22 13:21:00 kls Exp $
|
* $Id: device.h 2.19 2010/01/01 15:04:27 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DEVICE_H
|
#ifndef __DEVICE_H
|
||||||
@ -176,6 +176,8 @@ protected:
|
|||||||
///< anything the device needs to set up when it becomes the primary
|
///< anything the device needs to set up when it becomes the primary
|
||||||
///< device (On = true) or to shut down when it no longer is the primary
|
///< device (On = true) or to shut down when it no longer is the primary
|
||||||
///< device (On = false), it should do so in this function.
|
///< device (On = false), it should do so in this function.
|
||||||
|
///< A derived class must call the MakePrimaryDevice() function of its
|
||||||
|
///< base class.
|
||||||
public:
|
public:
|
||||||
bool IsPrimaryDevice(void) const { return this == primaryDevice; }
|
bool IsPrimaryDevice(void) const { return this == primaryDevice; }
|
||||||
int CardIndex(void) const { return cardIndex; }
|
int CardIndex(void) const { return cardIndex; }
|
||||||
@ -277,14 +279,15 @@ protected:
|
|||||||
class cPidHandle {
|
class cPidHandle {
|
||||||
public:
|
public:
|
||||||
int pid;
|
int pid;
|
||||||
|
int streamType;
|
||||||
int handle;
|
int handle;
|
||||||
int used;
|
int used;
|
||||||
cPidHandle(void) { pid = used = 0; handle = -1; }
|
cPidHandle(void) { pid = streamType = used = 0; handle = -1; }
|
||||||
};
|
};
|
||||||
cPidHandle pidHandles[MAXPIDHANDLES];
|
cPidHandle pidHandles[MAXPIDHANDLES];
|
||||||
bool HasPid(int Pid) const;
|
bool HasPid(int Pid) const;
|
||||||
///< Returns true if this device is currently receiving the given PID.
|
///< Returns true if this device is currently receiving the given PID.
|
||||||
bool AddPid(int Pid, ePidType PidType = ptOther);
|
bool AddPid(int Pid, ePidType PidType = ptOther, int StreamType = 0);
|
||||||
///< Adds a PID to the set of PIDs this device shall receive.
|
///< Adds a PID to the set of PIDs this device shall receive.
|
||||||
void DelPid(int Pid, ePidType PidType = ptOther);
|
void DelPid(int Pid, ePidType PidType = ptOther);
|
||||||
///< Deletes a PID from the set of PIDs this device shall receive.
|
///< Deletes a PID from the set of PIDs this device shall receive.
|
||||||
@ -498,6 +501,9 @@ private:
|
|||||||
cTsToPes tsToPesSubtitle;
|
cTsToPes tsToPesSubtitle;
|
||||||
bool isPlayingVideo;
|
bool isPlayingVideo;
|
||||||
protected:
|
protected:
|
||||||
|
const cPatPmtParser *PatPmtParser(void) const { return &patPmtParser; }
|
||||||
|
///< Returns a pointer to the patPmtParser, so that a derived device
|
||||||
|
///< can use the stream information from it.
|
||||||
virtual bool CanReplay(void) const;
|
virtual bool CanReplay(void) const;
|
||||||
///< Returns true if this device can currently start a replay session.
|
///< Returns true if this device can currently start a replay session.
|
||||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||||
|
6
diseqc.c
6
diseqc.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: diseqc.c 2.0 2008/02/10 14:09:27 kls Exp $
|
* $Id: diseqc.c 2.1 2009/12/05 15:57:02 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "diseqc.h"
|
#include "diseqc.h"
|
||||||
@ -36,7 +36,7 @@ bool cDiseqc::Parse(const char *s)
|
|||||||
if (4 <= fields && fields <= 5) {
|
if (4 <= fields && fields <= 5) {
|
||||||
source = cSource::FromString(sourcebuf);
|
source = cSource::FromString(sourcebuf);
|
||||||
if (Sources.Get(source)) {
|
if (Sources.Get(source)) {
|
||||||
polarization = toupper(polarization);
|
polarization = char(toupper(polarization));
|
||||||
if (polarization == 'V' || polarization == 'H' || polarization == 'L' || polarization == 'R') {
|
if (polarization == 'V' || polarization == 'H' || polarization == 'L' || polarization == 'R') {
|
||||||
parsing = true;
|
parsing = true;
|
||||||
char *CurrentAction = NULL;
|
char *CurrentAction = NULL;
|
||||||
@ -81,7 +81,7 @@ char *cDiseqc::Codes(char *s)
|
|||||||
errno = 0;
|
errno = 0;
|
||||||
int n = strtol(t, &p, 16);
|
int n = strtol(t, &p, 16);
|
||||||
if (!errno && p != t && 0 <= n && n <= 255) {
|
if (!errno && p != t && 0 <= n && n <= 255) {
|
||||||
codes[numCodes++] = n;
|
codes[numCodes++] = uchar(n);
|
||||||
t = skipspace(p);
|
t = skipspace(p);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
891
dvbdevice.c
891
dvbdevice.c
File diff suppressed because it is too large
Load Diff
112
dvbdevice.h
112
dvbdevice.h
@ -1,10 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* dvbdevice.h: The DVB device interface
|
* dvbdevice.h: The DVB device tuner interface
|
||||||
*
|
*
|
||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.h 2.9 2009/10/25 13:58:20 kls Exp $
|
* $Id: dvbdevice.h 2.11 2010/01/04 14:07:12 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBDEVICE_H
|
#ifndef __DVBDEVICE_H
|
||||||
@ -14,7 +14,6 @@
|
|||||||
#include <linux/dvb/frontend.h>
|
#include <linux/dvb/frontend.h>
|
||||||
#include <linux/dvb/version.h>
|
#include <linux/dvb/version.h>
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "dvbspu.h"
|
|
||||||
|
|
||||||
#if DVB_API_VERSION < 5
|
#if DVB_API_VERSION < 5
|
||||||
#error VDR requires Linux DVB driver API version 5.0 or higher!
|
#error VDR requires Linux DVB driver API version 5.0 or higher!
|
||||||
@ -22,49 +21,55 @@
|
|||||||
|
|
||||||
#define MAXDVBDEVICES 8
|
#define MAXDVBDEVICES 8
|
||||||
|
|
||||||
|
#define DEV_VIDEO "/dev/video"
|
||||||
|
#define DEV_DVB_ADAPTER "/dev/dvb/adapter"
|
||||||
|
#define DEV_DVB_OSD "osd"
|
||||||
|
#define DEV_DVB_FRONTEND "frontend"
|
||||||
|
#define DEV_DVB_DVR "dvr"
|
||||||
|
#define DEV_DVB_DEMUX "demux"
|
||||||
|
#define DEV_DVB_VIDEO "video"
|
||||||
|
#define DEV_DVB_AUDIO "audio"
|
||||||
|
#define DEV_DVB_CA "ca"
|
||||||
|
|
||||||
class cDvbTuner;
|
class cDvbTuner;
|
||||||
|
|
||||||
/// The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API.
|
/// The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API.
|
||||||
|
|
||||||
class cDvbDevice : public cDevice {
|
class cDvbDevice : public cDevice {
|
||||||
|
protected:
|
||||||
|
static cString DvbName(const char *Name, int Adapter, int Frontend);
|
||||||
|
static int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
|
||||||
private:
|
private:
|
||||||
static bool Probe(const char *FileName);
|
static bool Exists(int Adapter, int Frontend);
|
||||||
|
///< Checks whether the given adapter/frontend exists.
|
||||||
|
static bool Probe(int Adapter, int Frontend);
|
||||||
///< Probes for existing DVB devices.
|
///< Probes for existing DVB devices.
|
||||||
public:
|
public:
|
||||||
static bool Initialize(void);
|
static bool Initialize(void);
|
||||||
///< Initializes the DVB devices.
|
///< Initializes the DVB devices.
|
||||||
///< Must be called before accessing any DVB functions.
|
///< Must be called before accessing any DVB functions.
|
||||||
///< \return True if any devices are available.
|
///< \return True if any devices are available.
|
||||||
|
protected:
|
||||||
|
int adapter, frontend;
|
||||||
private:
|
private:
|
||||||
dvb_frontend_info frontendInfo;
|
dvb_frontend_info frontendInfo;
|
||||||
int numProvidedSystems;
|
int numProvidedSystems;
|
||||||
fe_delivery_system frontendType;
|
fe_delivery_system frontendType;
|
||||||
int fd_osd, fd_audio, fd_video, fd_dvr, fd_stc, fd_ca;
|
int fd_dvr, fd_ca;
|
||||||
protected:
|
|
||||||
virtual void MakePrimaryDevice(bool On);
|
|
||||||
public:
|
public:
|
||||||
cDvbDevice(int n);
|
cDvbDevice(int Adapter, int Frontend);
|
||||||
virtual ~cDvbDevice();
|
virtual ~cDvbDevice();
|
||||||
virtual bool Ready(void);
|
virtual bool Ready(void);
|
||||||
virtual bool HasDecoder(void) const;
|
|
||||||
|
|
||||||
// Common Interface facilities:
|
// Common Interface facilities:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cCiAdapter *ciAdapter;
|
cCiAdapter *ciAdapter;
|
||||||
|
|
||||||
// SPU facilities
|
|
||||||
|
|
||||||
private:
|
|
||||||
cDvbSpuDecoder *spuDecoder;
|
|
||||||
public:
|
|
||||||
virtual cSpuDecoder *GetSpuDecoder(void);
|
|
||||||
|
|
||||||
// Channel facilities
|
// Channel facilities
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cDvbTuner *dvbTuner;
|
cDvbTuner *dvbTuner;
|
||||||
void TurnOffLiveMode(bool LiveView);
|
|
||||||
public:
|
public:
|
||||||
virtual bool ProvidesSource(int Source) const;
|
virtual bool ProvidesSource(int Source) const;
|
||||||
virtual bool ProvidesTransponder(const cChannel *Channel) const;
|
virtual bool ProvidesTransponder(const cChannel *Channel) const;
|
||||||
@ -78,8 +83,6 @@ public:
|
|||||||
|
|
||||||
// PID handle facilities
|
// PID handle facilities
|
||||||
|
|
||||||
private:
|
|
||||||
bool SetAudioBypass(bool On);
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
|
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
|
||||||
|
|
||||||
@ -94,67 +97,18 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual bool HasCi(void);
|
virtual bool HasCi(void);
|
||||||
|
|
||||||
// Image Grab facilities
|
|
||||||
|
|
||||||
private:
|
|
||||||
static int devVideoOffset;
|
|
||||||
int devVideoIndex;
|
|
||||||
public:
|
|
||||||
virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
|
|
||||||
|
|
||||||
// Video format facilities
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
|
|
||||||
virtual void SetVideoFormat(bool VideoFormat16_9);
|
|
||||||
virtual eVideoSystem GetVideoSystem(void);
|
|
||||||
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
|
|
||||||
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
|
|
||||||
|
|
||||||
// Track facilities
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void SetAudioTrackDevice(eTrackType Type);
|
|
||||||
|
|
||||||
// Audio facilities
|
// Audio facilities
|
||||||
|
|
||||||
private:
|
|
||||||
bool digitalAudio;
|
|
||||||
static int setTransferModeForDolbyDigital;
|
|
||||||
protected:
|
protected:
|
||||||
virtual int GetAudioChannelDevice(void);
|
static int setTransferModeForDolbyDigital;
|
||||||
virtual void SetAudioChannelDevice(int AudioChannel);
|
|
||||||
virtual void SetVolumeDevice(int Volume);
|
|
||||||
virtual void SetDigitalAudioDevice(bool On);
|
|
||||||
public:
|
public:
|
||||||
static void SetTransferModeForDolbyDigital(int Mode);
|
static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibilty
|
||||||
///< Controls how the DVB device handles Transfer Mode when replaying
|
///< Controls how the DVB device handles Transfer Mode when replaying
|
||||||
///< Dolby Digital audio.
|
///< Dolby Digital audio.
|
||||||
///< 0 = don't set "audio bypass" in driver/firmware, don't force Transfer Mode
|
///< 0 = don't set "audio bypass" in driver/firmware, don't force Transfer Mode
|
||||||
///< 1 = set "audio bypass" in driver/firmware, force Transfer Mode (default)
|
///< 1 = set "audio bypass" in driver/firmware, force Transfer Mode (default)
|
||||||
///< 2 = don't set "audio bypass" in driver/firmware, force Transfer Mode
|
///< 2 = don't set "audio bypass" in driver/firmware, force Transfer Mode
|
||||||
|
|
||||||
// Player facilities
|
|
||||||
|
|
||||||
protected:
|
|
||||||
ePlayMode playMode;
|
|
||||||
virtual bool CanReplay(void) const;
|
|
||||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
|
||||||
virtual int PlayVideo(const uchar *Data, int Length);
|
|
||||||
virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
|
|
||||||
virtual int PlayTsVideo(const uchar *Data, int Length);
|
|
||||||
virtual int PlayTsAudio(const uchar *Data, int Length);
|
|
||||||
public:
|
|
||||||
virtual int64_t GetSTC(void);
|
|
||||||
virtual void TrickSpeed(int Speed);
|
|
||||||
virtual void Clear(void);
|
|
||||||
virtual void Play(void);
|
|
||||||
virtual void Freeze(void);
|
|
||||||
virtual void Mute(void);
|
|
||||||
virtual void StillPicture(const uchar *Data, int Length);
|
|
||||||
virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
|
|
||||||
virtual bool Flush(int TimeoutMs = 0);
|
|
||||||
|
|
||||||
// Receiver facilities
|
// Receiver facilities
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -165,4 +119,22 @@ protected:
|
|||||||
virtual bool GetTSPacket(uchar *&Data);
|
virtual bool GetTSPacket(uchar *&Data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// A plugin that implements a DVB device derived from cDvbDevice needs to create
|
||||||
|
// a cDvbDeviceProbe derived object on the heap in order to have its Probe()
|
||||||
|
// function called, where it can actually create the appropriate device.
|
||||||
|
// The cDvbDeviceProbe object must be created in the plugin's constructor,
|
||||||
|
// and deleted in its destructor.
|
||||||
|
|
||||||
|
class cDvbDeviceProbe : public cListObject {
|
||||||
|
public:
|
||||||
|
cDvbDeviceProbe(void);
|
||||||
|
virtual ~cDvbDeviceProbe();
|
||||||
|
virtual bool Probe(int Adapter, int Frontend) = 0;
|
||||||
|
///< Probes for a DVB device at the given Adapter and creates the appropriate
|
||||||
|
///< object derived from cDvbDevice if applicable.
|
||||||
|
///< Returns true if a device has been created.
|
||||||
|
};
|
||||||
|
|
||||||
|
extern cList<cDvbDeviceProbe> DvbDeviceProbes;
|
||||||
|
|
||||||
#endif //__DVBDEVICE_H
|
#endif //__DVBDEVICE_H
|
||||||
|
23
dvbosd.h
23
dvbosd.h
@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* dvbosd.h: Implementation of the DVB On Screen Display
|
|
||||||
*
|
|
||||||
* See the main source file 'vdr.c' for copyright information and
|
|
||||||
* how to reach the author.
|
|
||||||
*
|
|
||||||
* $Id: dvbosd.h 2.0 2007/08/25 13:49:34 kls Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __DVBOSD_H
|
|
||||||
#define __DVBOSD_H
|
|
||||||
|
|
||||||
#include "osd.h"
|
|
||||||
|
|
||||||
class cDvbOsdProvider : public cOsdProvider {
|
|
||||||
private:
|
|
||||||
int osdDev;
|
|
||||||
public:
|
|
||||||
cDvbOsdProvider(int OsdDev);
|
|
||||||
virtual cOsd *CreateOsd(int Left, int Top, uint Level);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //__DVBOSD_H
|
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbplayer.c 2.17 2009/05/31 14:12:42 kls Exp $
|
* $Id: dvbplayer.c 2.19 2009/12/13 13:49:56 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbplayer.h"
|
#include "dvbplayer.h"
|
||||||
@ -404,6 +404,8 @@ void cDvbPlayer::Action(void)
|
|||||||
cPoller Poller;
|
cPoller Poller;
|
||||||
DevicePoll(Poller, 10);
|
DevicePoll(Poller, 10);
|
||||||
Sleep = false;
|
Sleep = false;
|
||||||
|
if (playMode == pmStill || playMode==pmPause)
|
||||||
|
cCondWait::SleepMs(3);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
LOCK_THREAD;
|
LOCK_THREAD;
|
||||||
@ -666,6 +668,7 @@ void cDvbPlayer::Forward(void)
|
|||||||
trickSpeed = NORMAL_SPEED;
|
trickSpeed = NORMAL_SPEED;
|
||||||
TrickSpeed(Setup.MultiSpeedMode ? -1 : -MAX_SPEEDS);
|
TrickSpeed(Setup.MultiSpeedMode ? -1 : -MAX_SPEEDS);
|
||||||
break;
|
break;
|
||||||
|
default: esyslog("ERROR: unknown playMode %d (%s)", playMode, __FUNCTION__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -717,6 +720,7 @@ void cDvbPlayer::Backward(void)
|
|||||||
TrickSpeed(Setup.MultiSpeedMode ? -1 : -MAX_SPEEDS);
|
TrickSpeed(Setup.MultiSpeedMode ? -1 : -MAX_SPEEDS);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: esyslog("ERROR: unknown playMode %d (%s)", playMode, __FUNCTION__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
120
dvbspu.c
120
dvbspu.c
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* parts of this file are derived from the OMS program.
|
* parts of this file are derived from the OMS program.
|
||||||
*
|
*
|
||||||
* $Id: dvbspu.c 2.2 2009/11/22 14:17:59 kls Exp $
|
* $Id: dvbspu.c 2.7 2009/12/26 15:51:15 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbspu.h"
|
#include "dvbspu.h"
|
||||||
@ -16,7 +16,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "device.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cDvbSpubitmap:
|
* cDvbSpubitmap:
|
||||||
@ -340,6 +339,35 @@ sDvbSpuRect cDvbSpuDecoder::CalcAreaSize(sDvbSpuRect fgsize, cBitmap *fgbmp, sDv
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cDvbSpuBitmap::getMinBpp(const aDvbSpuPalDescr paldescr)
|
||||||
|
{
|
||||||
|
int col = 1;
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
if (paldescr[i].trans != 0) {
|
||||||
|
col++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return col > 2 ? 4 : 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cDvbSpuDecoder::CalcAreaBpp(cBitmap *fgbmp, cBitmap *bgbmp)
|
||||||
|
{
|
||||||
|
int fgbpp = 0;
|
||||||
|
int bgbpp = 0;
|
||||||
|
int ret;
|
||||||
|
if (fgbmp) {
|
||||||
|
fgbpp = spubmp->getMinBpp(hlpDescr);
|
||||||
|
}
|
||||||
|
if (bgbmp) {
|
||||||
|
bgbpp = spubmp->getMinBpp(palDescr);
|
||||||
|
}
|
||||||
|
ret = fgbpp + bgbpp;
|
||||||
|
if (ret > 2)
|
||||||
|
ret = 4;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void cDvbSpuDecoder::Draw(void)
|
void cDvbSpuDecoder::Draw(void)
|
||||||
{
|
{
|
||||||
cMutexLock MutexLock(&mutex);
|
cMutexLock MutexLock(&mutex);
|
||||||
@ -347,43 +375,92 @@ void cDvbSpuDecoder::Draw(void)
|
|||||||
Hide();
|
Hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
sDvbSpuRect bgsize;
|
||||||
cBitmap *fg = NULL;
|
cBitmap *fg = NULL;
|
||||||
cBitmap *bg = NULL;
|
cBitmap *bg = NULL;
|
||||||
sDvbSpuRect bgsize;
|
|
||||||
sDvbSpuRect hlsize;
|
|
||||||
|
|
||||||
hlsize.x1 = hlpsize.x1;
|
|
||||||
hlsize.y1 = hlpsize.y1;
|
|
||||||
hlsize.x2 = hlpsize.x2;
|
|
||||||
hlsize.y2 = hlpsize.y2;
|
|
||||||
|
|
||||||
if (highlight)
|
if (highlight)
|
||||||
fg = spubmp->getBitmap(hlpDescr, palette, hlsize);
|
fg = spubmp->getBitmap(hlpDescr, palette, hlpsize);
|
||||||
|
|
||||||
if (spubmp->getMinSize(palDescr, bgsize))
|
if (spubmp->getMinSize(palDescr, bgsize))
|
||||||
bg = spubmp->getBitmap(palDescr, palette, bgsize);
|
bg = spubmp->getBitmap(palDescr, palette, bgsize);
|
||||||
|
|
||||||
sDvbSpuRect areaSize = CalcAreaSize(hlsize, fg, bgsize, bg);
|
if (!fg || !bg || !osd)
|
||||||
|
|
||||||
if (!fg || !bg || !osd) {
|
|
||||||
Hide();
|
Hide();
|
||||||
}
|
|
||||||
|
|
||||||
if (bg || fg) {
|
|
||||||
if (osd == NULL) {
|
if (osd == NULL) {
|
||||||
|
restricted_osd = false;
|
||||||
osd = cOsdProvider::NewOsd(0, 0);
|
osd = cOsdProvider::NewOsd(0, 0);
|
||||||
if ((areaSize.width() & 3) != 0)
|
|
||||||
areaSize.x2 += 4 - (areaSize.width() & 3);
|
tArea Area = { size.x1, size.y1, size.x2, size.y2, 4};
|
||||||
tArea Area = { areaSize.x1, areaSize.y1, areaSize.x2, areaSize.y2, (fg && bg) ? 4 : 2 };
|
if (osd->CanHandleAreas(&Area, 1) != oeOk)
|
||||||
if (osd->SetAreas(&Area, 1) != oeOk)
|
restricted_osd = true;
|
||||||
|
else
|
||||||
|
osd->SetAreas(&Area, 1);
|
||||||
|
}
|
||||||
|
if (restricted_osd) {
|
||||||
|
sDvbSpuRect hlsize;
|
||||||
|
bool setarea = false;
|
||||||
|
/* reduce fg area (only valid if there is no bg below) */
|
||||||
|
if (fg) {
|
||||||
|
spubmp->getMinSize(hlpDescr,hlsize);
|
||||||
|
/* clip to the highligh area */
|
||||||
|
setMax(hlsize.x1, hlpsize.x1);
|
||||||
|
setMax(hlsize.y1, hlpsize.y1);
|
||||||
|
setMin(hlsize.x2, hlpsize.x2);
|
||||||
|
setMin(hlsize.y2, hlpsize.y2);
|
||||||
|
if (hlsize.x1 > hlsize.x2 || hlsize.y1 > hlsize.y2) {
|
||||||
|
hlsize.x1 = hlsize.x2 = hlsize.y1 = hlsize.y2 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sDvbSpuRect areaSize = CalcAreaSize((fg && bg) ? hlpsize : hlsize, fg, bgsize, bg);
|
||||||
|
|
||||||
|
#define DIV(a, b) (a/b)?:1
|
||||||
|
for (int d = 1; !setarea && d <= 2; d++) {
|
||||||
|
|
||||||
|
/* first try old behaviour */
|
||||||
|
tArea Area = { areaSize.x1, areaSize.y1, areaSize.x2, areaSize.y2, DIV(CalcAreaBpp(fg, bg), d) };
|
||||||
|
|
||||||
|
if ((Area.Width() & 7) != 0)
|
||||||
|
Area.x2 += 8 - (Area.Width() & 7);
|
||||||
|
|
||||||
|
if (osd->CanHandleAreas(&Area, 1) == oeOk &&
|
||||||
|
osd->SetAreas(&Area, 1) == oeOk)
|
||||||
|
setarea = true;
|
||||||
|
|
||||||
|
/* second try to split area if there is both area */
|
||||||
|
if (!setarea && fg && bg) {
|
||||||
|
tArea Area_Both [2] = {
|
||||||
|
{bgsize.x1, bgsize.y1, bgsize.x2, bgsize.y2, DIV(CalcAreaBpp(0, bg), d)},
|
||||||
|
{hlpsize.x1, hlpsize.y1, hlpsize.x2, hlpsize.y2, DIV(CalcAreaBpp(fg, 0), d)}
|
||||||
|
};
|
||||||
|
if (!Area_Both[0].Intersects(Area_Both[1])) {
|
||||||
|
/* there is no intersection. We can reduce hl */
|
||||||
|
Area_Both[1].x1 = hlsize.x1;
|
||||||
|
Area_Both[1].y1 = hlsize.y1;
|
||||||
|
Area_Both[1].x2 = hlsize.x2;
|
||||||
|
Area_Both[1].y2 = hlsize.y2;
|
||||||
|
|
||||||
|
if ((Area_Both[0].Width() & 7) != 0)
|
||||||
|
Area_Both[0].x2 += 8 - (Area_Both[0].Width() & 7);
|
||||||
|
if ((Area_Both[1].Width() & 7) != 0)
|
||||||
|
Area_Both[1].x2 += 8 - (Area_Both[1].Width() & 7);
|
||||||
|
if (osd->CanHandleAreas(Area_Both, 2) == oeOk &&
|
||||||
|
osd->SetAreas(Area_Both, 2) == oeOk)
|
||||||
|
setarea = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!setarea)
|
||||||
dsyslog("dvbspu: AreaSize (%d, %d) (%d, %d) Bpp %d", areaSize.x1, areaSize.y1, areaSize.x2, areaSize.y2, (fg && bg) ? 4 : 2 );
|
dsyslog("dvbspu: AreaSize (%d, %d) (%d, %d) Bpp %d", areaSize.x1, areaSize.y1, areaSize.x2, areaSize.y2, (fg && bg) ? 4 : 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* we could draw use DrawPixel on osd */
|
||||||
|
if (bg || fg) {
|
||||||
if (bg)
|
if (bg)
|
||||||
osd->DrawBitmap(bgsize.x1, bgsize.y1, *bg);
|
osd->DrawBitmap(bgsize.x1, bgsize.y1, *bg);
|
||||||
if (fg)
|
if (fg)
|
||||||
osd->DrawBitmap(hlsize.x1, hlsize.y1, *fg);
|
osd->DrawBitmap(hlpsize.x1, hlpsize.y1, *fg);
|
||||||
delete fg;
|
delete fg;
|
||||||
delete bg;
|
delete bg;
|
||||||
|
|
||||||
@ -514,6 +591,7 @@ int cDvbSpuDecoder::setTime(uint32_t pts)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fodd != 0 && feven != 0) {
|
if (fodd != 0 && feven != 0) {
|
||||||
|
Hide();
|
||||||
delete spubmp;
|
delete spubmp;
|
||||||
spubmp = new cDvbSpuBitmap(size, spu + fodd, spu + feven,
|
spubmp = new cDvbSpuBitmap(size, spu + fodd, spu + feven,
|
||||||
spu + feven, spu + cmdOffs());
|
spu + feven, spu + cmdOffs());
|
||||||
|
8
dvbspu.h
8
dvbspu.h
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* parts of this file are derived from the OMS program.
|
* parts of this file are derived from the OMS program.
|
||||||
*
|
*
|
||||||
* $Id: dvbspu.h 2.1 2009/05/09 16:26:45 kls Exp $
|
* $Id: dvbspu.h 2.4 2009/12/13 12:07:00 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBSPU_H
|
#ifndef __DVBSPU_H
|
||||||
@ -80,6 +80,7 @@ class cDvbSpuBitmap {
|
|||||||
|
|
||||||
bool getMinSize(const aDvbSpuPalDescr paldescr,
|
bool getMinSize(const aDvbSpuPalDescr paldescr,
|
||||||
sDvbSpuRect & size) const;
|
sDvbSpuRect & size) const;
|
||||||
|
int getMinBpp(const aDvbSpuPalDescr paldescr);
|
||||||
cBitmap *getBitmap(const aDvbSpuPalDescr paldescr,
|
cBitmap *getBitmap(const aDvbSpuPalDescr paldescr,
|
||||||
const cDvbSpuPalette & pal,
|
const cDvbSpuPalette & pal,
|
||||||
sDvbSpuRect & size) const;
|
sDvbSpuRect & size) const;
|
||||||
@ -97,6 +98,7 @@ class cDvbSpuDecoder:public cSpuDecoder {
|
|||||||
uint32_t spupts;
|
uint32_t spupts;
|
||||||
bool clean;
|
bool clean;
|
||||||
bool ready;
|
bool ready;
|
||||||
|
bool restricted_osd;
|
||||||
|
|
||||||
enum spFlag { spNONE, spHIDE, spSHOW, spMENU };
|
enum spFlag { spNONE, spHIDE, spSHOW, spMENU };
|
||||||
spFlag state;
|
spFlag state;
|
||||||
@ -129,6 +131,7 @@ class cDvbSpuDecoder:public cSpuDecoder {
|
|||||||
};
|
};
|
||||||
|
|
||||||
sDvbSpuRect CalcAreaSize(sDvbSpuRect fgsize, cBitmap *fgbmp, sDvbSpuRect bgsize, cBitmap *bgbmp);
|
sDvbSpuRect CalcAreaSize(sDvbSpuRect fgsize, cBitmap *fgbmp, sDvbSpuRect bgsize, cBitmap *bgbmp);
|
||||||
|
int CalcAreaBpp(cBitmap *fgbmp, cBitmap *bgbmp);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cDvbSpuDecoder();
|
cDvbSpuDecoder();
|
||||||
@ -194,8 +197,7 @@ inline uint32_t cDvbSpuPalette::yuv2rgb(uint32_t yuv_color)
|
|||||||
|
|
||||||
inline uint32_t cDvbSpuPalette::getColor(uint8_t idx, uint8_t trans) const
|
inline uint32_t cDvbSpuPalette::getColor(uint8_t idx, uint8_t trans) const
|
||||||
{
|
{
|
||||||
uint8_t t = trans == 0x0f ? 0xff : trans << 4;
|
return palette[idx] | ((trans == 0x0f) ? 0xff000000 : (trans << 28));
|
||||||
return palette[idx] | (t << 24);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __DVBSPU_H
|
#endif // __DVBSPU_H
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Original author: Marco Schlüßler <marco@lordzodiac.de>
|
* Original author: Marco Schlüßler <marco@lordzodiac.de>
|
||||||
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
|
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
|
||||||
*
|
*
|
||||||
* $Id: dvbsubtitle.c 2.2 2009/11/22 12:28:53 kls Exp $
|
* $Id: dvbsubtitle.c 2.3 2009/12/05 16:11:54 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbsubtitle.h"
|
#include "dvbsubtitle.h"
|
||||||
@ -160,21 +160,22 @@ void cSubtitleObject::DecodeSubBlock(const uchar *Data, int Length, bool Even)
|
|||||||
;
|
;
|
||||||
break;
|
break;
|
||||||
case 0x20: //TODO
|
case 0x20: //TODO
|
||||||
dbgobjects("sub block 2 to 4 map");
|
dbgobjects("sub block 2 to 4 map\n");
|
||||||
index += 4;
|
index += 4;
|
||||||
break;
|
break;
|
||||||
case 0x21: //TODO
|
case 0x21: //TODO
|
||||||
dbgobjects("sub block 2 to 8 map");
|
dbgobjects("sub block 2 to 8 map\n");
|
||||||
index += 4;
|
index += 4;
|
||||||
break;
|
break;
|
||||||
case 0x22: //TODO
|
case 0x22: //TODO
|
||||||
dbgobjects("sub block 4 to 8 map");
|
dbgobjects("sub block 4 to 8 map\n");
|
||||||
index += 16;
|
index += 16;
|
||||||
break;
|
break;
|
||||||
case 0xF0:
|
case 0xF0:
|
||||||
x = 0;
|
x = 0;
|
||||||
y += 2;
|
y += 2;
|
||||||
break;
|
break;
|
||||||
|
default: dbgobjects("unknown sub block %s %d\n", __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -233,7 +234,7 @@ bool cSubtitleObject::Decode2BppCodeString(const uchar *Data, int &Index, int &x
|
|||||||
rl = 1; //color 0
|
rl = 1; //color 0
|
||||||
else {
|
else {
|
||||||
code = Get2Bits(Data, Index);
|
code = Get2Bits(Data, Index);
|
||||||
switch (code & 0x3) { //switch_3
|
switch (code & 3) { //switch_3
|
||||||
case 0:
|
case 0:
|
||||||
return false;
|
return false;
|
||||||
case 1:
|
case 1:
|
||||||
@ -247,6 +248,7 @@ bool cSubtitleObject::Decode2BppCodeString(const uchar *Data, int &Index, int &x
|
|||||||
rl = (Get2Bits(Data, Index) << 6) + (Get2Bits(Data, Index) << 4) + (Get2Bits(Data, Index) << 2) + Get2Bits(Data, Index) + 29;
|
rl = (Get2Bits(Data, Index) << 6) + (Get2Bits(Data, Index) << 4) + (Get2Bits(Data, Index) << 2) + Get2Bits(Data, Index) + 29;
|
||||||
color = Get2Bits(Data, Index);
|
color = Get2Bits(Data, Index);
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -283,6 +285,7 @@ bool cSubtitleObject::Decode4BppCodeString(const uchar *Data, int &Index, int &x
|
|||||||
rl = (Get4Bits(Data, Index) << 4) + Get4Bits(Data, Index) + 25;
|
rl = (Get4Bits(Data, Index) << 4) + Get4Bits(Data, Index) + 25;
|
||||||
color = Get4Bits(Data, Index);
|
color = Get4Bits(Data, Index);
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -516,6 +519,7 @@ void cDvbSubtitlePage::SetState(int State)
|
|||||||
break;
|
break;
|
||||||
case 3: // reserved
|
case 3: // reserved
|
||||||
break;
|
break;
|
||||||
|
default: dbgpages("unknown page state (%s %d)\n", __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -900,6 +904,7 @@ int cDvbSubtitleConverter::ExtractSegment(const uchar *Data, int Length, int64_t
|
|||||||
case 2: region->FillRegion((Data[6 + 9] & 0x0C) >> 2); break;
|
case 2: region->FillRegion((Data[6 + 9] & 0x0C) >> 2); break;
|
||||||
case 4: region->FillRegion((Data[6 + 9] & 0xF0) >> 4); break;
|
case 4: region->FillRegion((Data[6 + 9] & 0xF0) >> 4); break;
|
||||||
case 8: region->FillRegion(Data[6 + 8]); break;
|
case 8: region->FillRegion(Data[6 + 8]); break;
|
||||||
|
default: dbgregions("unknown bpp %d (%s %d)\n", region->Bpp(), __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 6 + 10; i < segmentLength; i += 6) {
|
for (int i = 6 + 10; i < segmentLength; i += 6) {
|
||||||
|
51
eit.c
51
eit.c
@ -8,7 +8,7 @@
|
|||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
||||||
*
|
*
|
||||||
* $Id: eit.c 2.6 2009/06/21 13:46:20 kls Exp $
|
* $Id: eit.c 2.10 2010/01/03 15:35:21 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
@ -153,9 +153,40 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SI::ContentDescriptorTag:
|
case SI::ContentDescriptorTag: {
|
||||||
|
SI::ContentDescriptor *cd = (SI::ContentDescriptor *)d;
|
||||||
|
SI::ContentDescriptor::Nibble Nibble;
|
||||||
|
int NumContents = 0;
|
||||||
|
uchar Contents[MAXEVCONTENTS] = { 0 };
|
||||||
|
for (SI::Loop::Iterator it3; cd->nibbleLoop.getNext(Nibble, it3); ) {
|
||||||
|
if (NumContents < MAXEVCONTENTS) {
|
||||||
|
Contents[NumContents] = ((Nibble.getContentNibbleLevel1() & 0xF) << 4) | (Nibble.getContentNibbleLevel2() & 0xF);
|
||||||
|
NumContents++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pEvent->SetContents(Contents);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SI::ParentalRatingDescriptorTag:
|
case SI::ParentalRatingDescriptorTag: {
|
||||||
|
int LanguagePreferenceRating = -1;
|
||||||
|
SI::ParentalRatingDescriptor *prd = (SI::ParentalRatingDescriptor *)d;
|
||||||
|
SI::ParentalRatingDescriptor::Rating Rating;
|
||||||
|
for (SI::Loop::Iterator it3; prd->ratingLoop.getNext(Rating, it3); ) {
|
||||||
|
if (I18nIsPreferredLanguage(Setup.EPGLanguages, Rating.languageCode, LanguagePreferenceRating)) {
|
||||||
|
int ParentalRating = (Rating.getRating() & 0xFF);
|
||||||
|
switch (ParentalRating) {
|
||||||
|
// values defined by the DVB standard (minimum age = rating + 3 years):
|
||||||
|
case 0x01 ... 0x0F: ParentalRating += 3; break;
|
||||||
|
// values defined by broadcaster CSAT (now why didn't they just use 0x07, 0x09 and 0x0D?):
|
||||||
|
case 0x11: ParentalRating = 10; break;
|
||||||
|
case 0x12: ParentalRating = 12; break;
|
||||||
|
case 0x13: ParentalRating = 16; break;
|
||||||
|
default: ParentalRating = 0;
|
||||||
|
}
|
||||||
|
pEvent->SetParentalRating(ParentalRating);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SI::PDCDescriptorTag: {
|
case SI::PDCDescriptorTag: {
|
||||||
SI::PDCDescriptor *pd = (SI::PDCDescriptor *)d;
|
SI::PDCDescriptor *pd = (SI::PDCDescriptor *)d;
|
||||||
@ -320,6 +351,8 @@ cTDT::cTDT(const u_char *Data)
|
|||||||
|
|
||||||
// --- cEitFilter ------------------------------------------------------------
|
// --- cEitFilter ------------------------------------------------------------
|
||||||
|
|
||||||
|
time_t cEitFilter::disableUntil = 0;
|
||||||
|
|
||||||
cEitFilter::cEitFilter(void)
|
cEitFilter::cEitFilter(void)
|
||||||
{
|
{
|
||||||
Set(0x12, 0x40, 0xC0); // event info now&next actual/other TS (0x4E/0x4F), future actual/other TS (0x5X/0x6X)
|
Set(0x12, 0x40, 0xC0); // event info now&next actual/other TS (0x4E/0x4F), future actual/other TS (0x5X/0x6X)
|
||||||
@ -327,8 +360,19 @@ cEitFilter::cEitFilter(void)
|
|||||||
Set(0x14, 0x70); // TDT
|
Set(0x14, 0x70); // TDT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cEitFilter::SetDisableUntil(time_t Time)
|
||||||
|
{
|
||||||
|
disableUntil = Time;
|
||||||
|
}
|
||||||
|
|
||||||
void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
|
void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
|
||||||
{
|
{
|
||||||
|
if (disableUntil) {
|
||||||
|
if (time(NULL) > disableUntil)
|
||||||
|
disableUntil = 0;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (Pid) {
|
switch (Pid) {
|
||||||
case 0x12: {
|
case 0x12: {
|
||||||
if (Tid >= 0x4E && Tid <= 0x6F) {
|
if (Tid >= 0x4E && Tid <= 0x6F) {
|
||||||
@ -354,5 +398,6 @@ void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
cTDT TDT(Data);
|
cTDT TDT(Data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
5
eit.h
5
eit.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: eit.h 2.0 2003/12/21 14:51:50 kls Exp $
|
* $Id: eit.h 2.1 2010/01/03 15:28:34 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __EIT_H
|
#ifndef __EIT_H
|
||||||
@ -13,10 +13,13 @@
|
|||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
|
|
||||||
class cEitFilter : public cFilter {
|
class cEitFilter : public cFilter {
|
||||||
|
private:
|
||||||
|
static time_t disableUntil;
|
||||||
protected:
|
protected:
|
||||||
virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
|
virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
|
||||||
public:
|
public:
|
||||||
cEitFilter(void);
|
cEitFilter(void);
|
||||||
|
static void SetDisableUntil(time_t Time);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__EIT_H
|
#endif //__EIT_H
|
||||||
|
193
epg.c
193
epg.c
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.c 2.1 2008/05/01 14:53:55 kls Exp $
|
* $Id: epg.c 2.4 2010/01/03 14:10:20 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "epg.h"
|
#include "epg.h"
|
||||||
@ -112,6 +112,8 @@ cEvent::cEvent(tEventID EventID)
|
|||||||
shortText = NULL;
|
shortText = NULL;
|
||||||
description = NULL;
|
description = NULL;
|
||||||
components = NULL;
|
components = NULL;
|
||||||
|
memset(contents, 0, sizeof(contents));
|
||||||
|
parentalRating = 0;
|
||||||
startTime = 0;
|
startTime = 0;
|
||||||
duration = 0;
|
duration = 0;
|
||||||
vps = 0;
|
vps = 0;
|
||||||
@ -186,6 +188,17 @@ void cEvent::SetComponents(cComponents *Components)
|
|||||||
components = Components;
|
components = Components;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cEvent::SetContents(uchar *Contents)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < MAXEVCONTENTS; i++)
|
||||||
|
contents[i] = Contents[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
void cEvent::SetParentalRating(int ParentalRating)
|
||||||
|
{
|
||||||
|
parentalRating = ParentalRating;
|
||||||
|
}
|
||||||
|
|
||||||
void cEvent::SetStartTime(time_t StartTime)
|
void cEvent::SetStartTime(time_t StartTime)
|
||||||
{
|
{
|
||||||
if (startTime != StartTime) {
|
if (startTime != StartTime) {
|
||||||
@ -234,6 +247,155 @@ bool cEvent::IsRunning(bool OrAboutToStart) const
|
|||||||
return runningStatus >= (OrAboutToStart ? SI::RunningStatusStartsInAFewSeconds : SI::RunningStatusPausing);
|
return runningStatus >= (OrAboutToStart ? SI::RunningStatusStartsInAFewSeconds : SI::RunningStatusPausing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *cEvent::ContentToString(uchar Content)
|
||||||
|
{
|
||||||
|
switch (Content & 0xF0) {
|
||||||
|
case EVCONTENTMASK_MOVIEDRAMA:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Movie/Drama");
|
||||||
|
case 0x01: return tr("Content$Detective/Thriller");
|
||||||
|
case 0x02: return tr("Content$Adventure/Western/War");
|
||||||
|
case 0x03: return tr("Content$Science Fiction/Fantasy/Horror");
|
||||||
|
case 0x04: return tr("Content$Comedy");
|
||||||
|
case 0x05: return tr("Content$Soap/Melodrama/Folkloric");
|
||||||
|
case 0x06: return tr("Content$Romance");
|
||||||
|
case 0x07: return tr("Content$Serious/Classical/Religious/Historical Movie/Drama");
|
||||||
|
case 0x08: return tr("Content$Adult Movie/Drama");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_NEWSCURRENTAFFAIRS:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$News/Current Affairs");
|
||||||
|
case 0x01: return tr("Content$News/Weather Report");
|
||||||
|
case 0x02: return tr("Content$News Magazine");
|
||||||
|
case 0x03: return tr("Content$Documentary");
|
||||||
|
case 0x04: return tr("Content$Discussion/Inverview/Debate");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_SHOW:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Show/Game Show");
|
||||||
|
case 0x01: return tr("Content$Game Show/Quiz/Contest");
|
||||||
|
case 0x02: return tr("Content$Variety Show");
|
||||||
|
case 0x03: return tr("Content$Talk Show");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_SPORTS:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Sports");
|
||||||
|
case 0x01: return tr("Content$Special Event");
|
||||||
|
case 0x02: return tr("Content$Sport Magazine");
|
||||||
|
case 0x03: return tr("Content$Football/Soccer");
|
||||||
|
case 0x04: return tr("Content$Tennis/Squash");
|
||||||
|
case 0x05: return tr("Content$Team Sports");
|
||||||
|
case 0x06: return tr("Content$Athletics");
|
||||||
|
case 0x07: return tr("Content$Motor Sport");
|
||||||
|
case 0x08: return tr("Content$Water Sport");
|
||||||
|
case 0x09: return tr("Content$Winter Sports");
|
||||||
|
case 0x0A: return tr("Content$Equestrian");
|
||||||
|
case 0x0B: return tr("Content$Martial Sports");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_CHILDRENYOUTH:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Children's/Youth Programme");
|
||||||
|
case 0x01: return tr("Content$Pre-school Children's Programme");
|
||||||
|
case 0x02: return tr("Content$Entertainment Programme for 6 to 14");
|
||||||
|
case 0x03: return tr("Content$Entertainment Programme for 10 to 16");
|
||||||
|
case 0x04: return tr("Content$Informational/Educational/School Programme");
|
||||||
|
case 0x05: return tr("Content$Cartoons/Puppets");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_MUSICBALLETDANCE:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Music/Ballet/Dance");
|
||||||
|
case 0x01: return tr("Content$Rock/Pop");
|
||||||
|
case 0x02: return tr("Content$Serious/Classical Music");
|
||||||
|
case 0x03: return tr("Content$Folk/Tradional Music");
|
||||||
|
case 0x04: return tr("Content$Jazz");
|
||||||
|
case 0x05: return tr("Content$Musical/Opera");
|
||||||
|
case 0x06: return tr("Content$Ballet");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_ARTSCULTURE:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Arts/Culture");
|
||||||
|
case 0x01: return tr("Content$Performing Arts");
|
||||||
|
case 0x02: return tr("Content$Fine Arts");
|
||||||
|
case 0x03: return tr("Content$Religion");
|
||||||
|
case 0x04: return tr("Content$Popular Culture/Traditional Arts");
|
||||||
|
case 0x05: return tr("Content$Literature");
|
||||||
|
case 0x06: return tr("Content$Film/Cinema");
|
||||||
|
case 0x07: return tr("Content$Experimental Film/Video");
|
||||||
|
case 0x08: return tr("Content$Broadcasting/Press");
|
||||||
|
case 0x09: return tr("Content$New Media");
|
||||||
|
case 0x0A: return tr("Content$Arts/Culture Magazine");
|
||||||
|
case 0x0B: return tr("Content$Fashion");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_SOCIALPOLITICALECONOMICS:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Social/Political/Economics");
|
||||||
|
case 0x01: return tr("Content$Magazine/Report/Documentary");
|
||||||
|
case 0x02: return tr("Content$Economics/Social Advisory");
|
||||||
|
case 0x03: return tr("Content$Remarkable People");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_EDUCATIONALSCIENCE:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Education/Science/Factual");
|
||||||
|
case 0x01: return tr("Content$Nature/Animals/Environment");
|
||||||
|
case 0x02: return tr("Content$Technology/Natural Sciences");
|
||||||
|
case 0x03: return tr("Content$Medicine/Physiology/Psychology");
|
||||||
|
case 0x04: return tr("Content$Foreign Countries/Expeditions");
|
||||||
|
case 0x05: return tr("Content$Social/Spiritual Sciences");
|
||||||
|
case 0x06: return tr("Content$Further Education");
|
||||||
|
case 0x07: return tr("Content$Languages");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_LEISUREHOBBIES:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
default:
|
||||||
|
case 0x00: return tr("Content$Leisure/Hobbies");
|
||||||
|
case 0x01: return tr("Content$Tourism/Travel");
|
||||||
|
case 0x02: return tr("Content$Handicraft");
|
||||||
|
case 0x03: return tr("Content$Motoring");
|
||||||
|
case 0x04: return tr("Content$Fitness & Health");
|
||||||
|
case 0x05: return tr("Content$Cooking");
|
||||||
|
case 0x06: return tr("Content$Advertisement/Shopping");
|
||||||
|
case 0x07: return tr("Content$Gardening");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVCONTENTMASK_SPECIAL:
|
||||||
|
switch (Content & 0x0F) {
|
||||||
|
case 0x00: return tr("Content$Original Language");
|
||||||
|
case 0x01: return tr("Content$Black & White");
|
||||||
|
case 0x02: return tr("Content$Unpublished");
|
||||||
|
case 0x03: return tr("Content$Live Broadcast");
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
cString cEvent::GetParentalRatingString(void) const
|
||||||
|
{
|
||||||
|
if (parentalRating)
|
||||||
|
return cString::sprintf(tr("ParentalRating$from %d"), parentalRating);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
cString cEvent::GetDateString(void) const
|
cString cEvent::GetDateString(void) const
|
||||||
{
|
{
|
||||||
return DateString(startTime);
|
return DateString(startTime);
|
||||||
@ -270,6 +432,14 @@ void cEvent::Dump(FILE *f, const char *Prefix, bool InfoOnly) const
|
|||||||
fprintf(f, "%sD %s\n", Prefix, description);
|
fprintf(f, "%sD %s\n", Prefix, description);
|
||||||
strreplace(description, '|', '\n');
|
strreplace(description, '|', '\n');
|
||||||
}
|
}
|
||||||
|
if (contents[0]) {
|
||||||
|
fprintf(f, "%sG", Prefix);
|
||||||
|
for (int i = 0; Contents(i); i++)
|
||||||
|
fprintf(f, " %02X", Contents(i));
|
||||||
|
fprintf(f, "\n");
|
||||||
|
}
|
||||||
|
if (parentalRating)
|
||||||
|
fprintf(f, "%sR %d\n", Prefix, parentalRating);
|
||||||
if (components) {
|
if (components) {
|
||||||
for (int i = 0; i < components->NumComponents(); i++) {
|
for (int i = 0; i < components->NumComponents(); i++) {
|
||||||
tComponent *p = components->Component(i);
|
tComponent *p = components->Component(i);
|
||||||
@ -296,6 +466,22 @@ bool cEvent::Parse(char *s)
|
|||||||
case 'D': strreplace(t, '|', '\n');
|
case 'D': strreplace(t, '|', '\n');
|
||||||
SetDescription(t);
|
SetDescription(t);
|
||||||
break;
|
break;
|
||||||
|
case 'G': {
|
||||||
|
memset(contents, 0, sizeof(contents));
|
||||||
|
for (int i = 0; i < MAXEVCONTENTS; i++) {
|
||||||
|
char *tail = NULL;
|
||||||
|
int c = strtol(t, &tail, 16);
|
||||||
|
if (0x00 < c && c <= 0xFF) {
|
||||||
|
contents[i] = c;
|
||||||
|
t = tail;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'R': SetParentalRating(atoi(t));
|
||||||
|
break;
|
||||||
case 'X': if (!components)
|
case 'X': if (!components)
|
||||||
components = new cComponents;
|
components = new cComponents;
|
||||||
components->SetComponent(components->NumComponents(), t);
|
components->SetComponent(components->NumComponents(), t);
|
||||||
@ -603,6 +789,7 @@ void cEvent::FixEpgBugs(void)
|
|||||||
case 0x0F: p->description = strdup("HD 16:9"); break;
|
case 0x0F: p->description = strdup("HD 16:9"); break;
|
||||||
case 0x0C:
|
case 0x0C:
|
||||||
case 0x10: p->description = strdup("HD >16:9"); break;
|
case 0x10: p->description = strdup("HD >16:9"); break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
EpgBugFixStat(9, ChannelID());
|
EpgBugFixStat(9, ChannelID());
|
||||||
}
|
}
|
||||||
@ -621,12 +808,13 @@ void cEvent::FixEpgBugs(void)
|
|||||||
if (!p->description) {
|
if (!p->description) {
|
||||||
switch (p->type) {
|
switch (p->type) {
|
||||||
case 0x05: p->description = strdup("Dolby Digital"); break;
|
case 0x05: p->description = strdup("Dolby Digital"); break;
|
||||||
// all others will just display the language
|
default: ; // all others will just display the language
|
||||||
}
|
}
|
||||||
EpgBugFixStat(11, ChannelID());
|
EpgBugFixStat(11, ChannelID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -863,6 +1051,7 @@ void cSchedule::Dump(FILE *f, const char *Prefix, eDumpMode DumpMode, time_t AtT
|
|||||||
p->Dump(f, Prefix);
|
p->Dump(f, Prefix);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: esyslog("ERROR: unknown DumpMode %d (%s %d)", DumpMode, __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
fprintf(f, "%sc\n", Prefix);
|
fprintf(f, "%sc\n", Prefix);
|
||||||
}
|
}
|
||||||
|
27
epg.h
27
epg.h
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.h 2.0 2006/10/07 13:47:19 kls Exp $
|
* $Id: epg.h 2.3 2010/01/03 14:39:14 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __EPG_H
|
#ifndef __EPG_H
|
||||||
@ -19,6 +19,20 @@
|
|||||||
|
|
||||||
#define MAXEPGBUGFIXLEVEL 3
|
#define MAXEPGBUGFIXLEVEL 3
|
||||||
|
|
||||||
|
#define MAXEVCONTENTS 4
|
||||||
|
#define EVCONTENTMASK_MOVIEDRAMA 0x10
|
||||||
|
#define EVCONTENTMASK_NEWSCURRENTAFFAIRS 0x20
|
||||||
|
#define EVCONTENTMASK_SHOW 0x30
|
||||||
|
#define EVCONTENTMASK_SPORTS 0x40
|
||||||
|
#define EVCONTENTMASK_CHILDRENYOUTH 0x50
|
||||||
|
#define EVCONTENTMASK_MUSICBALLETDANCE 0x60
|
||||||
|
#define EVCONTENTMASK_ARTSCULTURE 0x70
|
||||||
|
#define EVCONTENTMASK_SOCIALPOLITICALECONOMICS 0x80
|
||||||
|
#define EVCONTENTMASK_EDUCATIONALSCIENCE 0x90
|
||||||
|
#define EVCONTENTMASK_LEISUREHOBBIES 0xA0
|
||||||
|
#define EVCONTENTMASK_SPECIAL 0xB0
|
||||||
|
#define EVCONTENTMASK_USERDEFINED 0xF0
|
||||||
|
|
||||||
enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime };
|
enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime };
|
||||||
|
|
||||||
struct tComponent {
|
struct tComponent {
|
||||||
@ -53,15 +67,18 @@ typedef u_int32_t tEventID;
|
|||||||
class cEvent : public cListObject {
|
class cEvent : public cListObject {
|
||||||
friend class cSchedule;
|
friend class cSchedule;
|
||||||
private:
|
private:
|
||||||
|
// The sequence of these parameters is optimized for minimal memory waste!
|
||||||
cSchedule *schedule; // The Schedule this event belongs to
|
cSchedule *schedule; // The Schedule this event belongs to
|
||||||
tEventID eventID; // Event ID of this event
|
tEventID eventID; // Event ID of this event
|
||||||
uchar tableID; // Table ID this event came from
|
uchar tableID; // Table ID this event came from
|
||||||
uchar version; // Version number of section this event came from
|
uchar version; // Version number of section this event came from
|
||||||
int runningStatus; // 0=undefined, 1=not running, 2=starts in a few seconds, 3=pausing, 4=running
|
uchar runningStatus; // 0=undefined, 1=not running, 2=starts in a few seconds, 3=pausing, 4=running
|
||||||
|
uchar parentalRating; // Parental rating of this event
|
||||||
char *title; // Title of this event
|
char *title; // Title of this event
|
||||||
char *shortText; // Short description of this event (typically the episode name in case of a series)
|
char *shortText; // Short description of this event (typically the episode name in case of a series)
|
||||||
char *description; // Description of this event
|
char *description; // Description of this event
|
||||||
cComponents *components; // The stream components of this event
|
cComponents *components; // The stream components of this event
|
||||||
|
uchar contents[MAXEVCONTENTS]; // Contents of this event
|
||||||
time_t startTime; // Start time of this event
|
time_t startTime; // Start time of this event
|
||||||
int duration; // Duration of this event in seconds
|
int duration; // Duration of this event in seconds
|
||||||
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
|
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
|
||||||
@ -80,6 +97,8 @@ public:
|
|||||||
const char *ShortText(void) const { return shortText; }
|
const char *ShortText(void) const { return shortText; }
|
||||||
const char *Description(void) const { return description; }
|
const char *Description(void) const { return description; }
|
||||||
const cComponents *Components(void) const { return components; }
|
const cComponents *Components(void) const { return components; }
|
||||||
|
uchar Contents(int i = 0) const { return (0 <= i && i < MAXEVCONTENTS) ? contents[i] : 0; }
|
||||||
|
int ParentalRating(void) const { return parentalRating; }
|
||||||
time_t StartTime(void) const { return startTime; }
|
time_t StartTime(void) const { return startTime; }
|
||||||
time_t EndTime(void) const { return startTime + duration; }
|
time_t EndTime(void) const { return startTime + duration; }
|
||||||
int Duration(void) const { return duration; }
|
int Duration(void) const { return duration; }
|
||||||
@ -88,6 +107,8 @@ public:
|
|||||||
bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; }
|
bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; }
|
||||||
bool HasTimer(void) const;
|
bool HasTimer(void) const;
|
||||||
bool IsRunning(bool OrAboutToStart = false) const;
|
bool IsRunning(bool OrAboutToStart = false) const;
|
||||||
|
static const char *ContentToString(uchar Content);
|
||||||
|
cString GetParentalRatingString(void) const;
|
||||||
cString GetDateString(void) const;
|
cString GetDateString(void) const;
|
||||||
cString GetTimeString(void) const;
|
cString GetTimeString(void) const;
|
||||||
cString GetEndTimeString(void) const;
|
cString GetEndTimeString(void) const;
|
||||||
@ -100,6 +121,8 @@ public:
|
|||||||
void SetShortText(const char *ShortText);
|
void SetShortText(const char *ShortText);
|
||||||
void SetDescription(const char *Description);
|
void SetDescription(const char *Description);
|
||||||
void SetComponents(cComponents *Components); // Will take ownership of Components!
|
void SetComponents(cComponents *Components); // Will take ownership of Components!
|
||||||
|
void SetContents(uchar *Contents);
|
||||||
|
void SetParentalRating(int ParentalRating);
|
||||||
void SetStartTime(time_t StartTime);
|
void SetStartTime(time_t StartTime);
|
||||||
void SetDuration(int Duration);
|
void SetDuration(int Duration);
|
||||||
void SetVps(time_t Vps);
|
void SetVps(time_t Vps);
|
||||||
|
9
font.c
9
font.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: font.c 2.2 2009/05/03 11:15:39 kls Exp $
|
* $Id: font.c 2.4 2009/12/31 14:49:59 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
@ -93,6 +93,8 @@ void cGlyph::SetKerningCache(uint PrevSym, int Kerning)
|
|||||||
|
|
||||||
class cFreetypeFont : public cFont {
|
class cFreetypeFont : public cFont {
|
||||||
private:
|
private:
|
||||||
|
cString fontName;
|
||||||
|
int size;
|
||||||
int height;
|
int height;
|
||||||
int bottom;
|
int bottom;
|
||||||
FT_Library library; ///< Handle to library
|
FT_Library library; ///< Handle to library
|
||||||
@ -105,6 +107,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
cFreetypeFont(const char *Name, int CharHeight, int CharWidth = 0);
|
cFreetypeFont(const char *Name, int CharHeight, int CharWidth = 0);
|
||||||
virtual ~cFreetypeFont();
|
virtual ~cFreetypeFont();
|
||||||
|
virtual const char *FontName(void) const { return fontName; }
|
||||||
|
virtual int Size(void) const { return size; }
|
||||||
virtual int Width(uint c) const;
|
virtual int Width(uint c) const;
|
||||||
virtual int Width(const char *s) const;
|
virtual int Width(const char *s) const;
|
||||||
virtual int Height(void) const { return height; }
|
virtual int Height(void) const { return height; }
|
||||||
@ -113,6 +117,8 @@ public:
|
|||||||
|
|
||||||
cFreetypeFont::cFreetypeFont(const char *Name, int CharHeight, int CharWidth)
|
cFreetypeFont::cFreetypeFont(const char *Name, int CharHeight, int CharWidth)
|
||||||
{
|
{
|
||||||
|
fontName = Name;
|
||||||
|
size = CharHeight;
|
||||||
height = 0;
|
height = 0;
|
||||||
bottom = 0;
|
bottom = 0;
|
||||||
int error = FT_Init_FreeType(&library);
|
int error = FT_Init_FreeType(&library);
|
||||||
@ -346,6 +352,7 @@ const cFont *cFont::GetFont(eDvbFont Font)
|
|||||||
case fontOsd: SetFont(Font, Setup.FontOsd, Setup.FontOsdSize); break;
|
case fontOsd: SetFont(Font, Setup.FontOsd, Setup.FontOsdSize); break;
|
||||||
case fontSml: SetFont(Font, Setup.FontSml, Setup.FontSmlSize); break;
|
case fontSml: SetFont(Font, Setup.FontSml, Setup.FontSmlSize); break;
|
||||||
case fontFix: SetFont(Font, Setup.FontFix, Setup.FontFixSize); break;
|
case fontFix: SetFont(Font, Setup.FontFix, Setup.FontFixSize); break;
|
||||||
|
default: esyslog("ERROR: unknown Font %d (%s %d)", Font, __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fonts[Font];
|
return fonts[Font];
|
||||||
|
7
font.h
7
font.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: font.h 2.2 2009/05/23 10:10:40 kls Exp $
|
* $Id: font.h 2.3 2009/12/31 14:48:25 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __FONT_H
|
#ifndef __FONT_H
|
||||||
@ -38,6 +38,11 @@ private:
|
|||||||
static cFont *fonts[];
|
static cFont *fonts[];
|
||||||
public:
|
public:
|
||||||
virtual ~cFont() {}
|
virtual ~cFont() {}
|
||||||
|
virtual const char *FontName(void) const { return ""; }
|
||||||
|
///< Returns the font name.
|
||||||
|
virtual int Size(void) const { return Height(); }
|
||||||
|
///< Returns the original size as requested when the font was created.
|
||||||
|
///< This may be different than the actual height.
|
||||||
virtual int Width(uint c) const = 0;
|
virtual int Width(uint c) const = 0;
|
||||||
///< Returns the width of the given character in pixel.
|
///< Returns the width of the given character in pixel.
|
||||||
virtual int Width(const char *s) const = 0;
|
virtual int Width(const char *s) const = 0;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: si.c 2.0 2008/03/05 17:00:55 kls Exp $
|
* $Id: si.c 2.1 2009/12/05 16:20:12 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -720,6 +720,7 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ; // unknown domain, nothing to do
|
||||||
}
|
}
|
||||||
d->setData(da);
|
d->setData(da);
|
||||||
return d;
|
return d;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: si.h 2.1 2008/09/06 12:44:06 kls Exp $
|
* $Id: si.h 2.2 2009/12/06 11:37:35 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -411,6 +411,8 @@ public:
|
|||||||
return data.FourBytes(index);
|
return data.FourBytes(index);
|
||||||
case 8:
|
case 8:
|
||||||
return (SixtyFourBit(data.FourBytes(index)) << 32) | data.FourBytes(index+4);
|
return (SixtyFourBit(data.FourBytes(index)) << 32) | data.FourBytes(index+4);
|
||||||
|
default:
|
||||||
|
return 0; // just to avoid a compiler warning
|
||||||
}
|
}
|
||||||
return 0; // just to avoid a compiler warning
|
return 0; // just to avoid a compiler warning
|
||||||
}
|
}
|
||||||
|
13
menu.c
13
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 2.9 2009/06/21 09:56:06 kls Exp $
|
* $Id: menu.c 2.10 2009/12/06 11:29:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -1373,6 +1373,7 @@ eOSState cMenuSchedule::Number(void)
|
|||||||
case cMenuScheduleItem::ssmThisThis: PrepareScheduleThisThis(Event, Channel); break;
|
case cMenuScheduleItem::ssmThisThis: PrepareScheduleThisThis(Event, Channel); break;
|
||||||
case cMenuScheduleItem::ssmThisAll: PrepareScheduleThisAll(Event, Channel); break;
|
case cMenuScheduleItem::ssmThisAll: PrepareScheduleThisAll(Event, Channel); break;
|
||||||
case cMenuScheduleItem::ssmAllAll: PrepareScheduleAllAll(Event, Channel); break;
|
case cMenuScheduleItem::ssmAllAll: PrepareScheduleAllAll(Event, Channel); break;
|
||||||
|
default: esyslog("ERROR: unknown SortMode %d (%s %d)", cMenuScheduleItem::SortMode(), __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
CurrentItem = (cMenuScheduleItem *)Get(Current());
|
CurrentItem = (cMenuScheduleItem *)Get(Current());
|
||||||
Sort();
|
Sort();
|
||||||
@ -1897,6 +1898,7 @@ void cMenuRecordings::SetHelpKeys(void)
|
|||||||
case 1: SetHelp(tr("Button$Open")); break;
|
case 1: SetHelp(tr("Button$Open")); break;
|
||||||
case 2:
|
case 2:
|
||||||
case 3: SetHelp(RecordingCommands.Count() ? tr("Commands") : tr("Button$Play"), tr("Button$Rewind"), tr("Button$Delete"), NewHelpKeys == 3 ? tr("Button$Info") : NULL);
|
case 3: SetHelp(RecordingCommands.Count() ? tr("Commands") : tr("Button$Play"), tr("Button$Rewind"), tr("Button$Delete"), NewHelpKeys == 3 ? tr("Button$Info") : NULL);
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
helpKeys = NewHelpKeys;
|
helpKeys = NewHelpKeys;
|
||||||
}
|
}
|
||||||
@ -2242,18 +2244,18 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
Utf8Strn0Cpy(data.OSDTheme, themes.Name(themeIndex), sizeof(data.OSDTheme));
|
Utf8Strn0Cpy(data.OSDTheme, themes.Name(themeIndex), sizeof(data.OSDTheme));
|
||||||
ModifiedAppearance |= themeIndex != originalThemeIndex;
|
ModifiedAppearance |= themeIndex != originalThemeIndex;
|
||||||
}
|
}
|
||||||
if (data.OSDLeftP != Setup.OSDLeftP || data.OSDTopP != Setup.OSDTopP || data.OSDWidthP != Setup.OSDWidthP || data.OSDHeightP != Setup.OSDHeightP)
|
if (!(DoubleEqual(data.OSDLeftP, Setup.OSDLeftP) && DoubleEqual(data.OSDTopP, Setup.OSDTopP) && DoubleEqual(data.OSDWidthP, Setup.OSDWidthP) && DoubleEqual(data.OSDHeightP, Setup.OSDHeightP)))
|
||||||
ModifiedAppearance = true;
|
ModifiedAppearance = true;
|
||||||
if (data.UseSmallFont != Setup.UseSmallFont || data.AntiAlias != Setup.AntiAlias)
|
if (data.UseSmallFont != Setup.UseSmallFont || data.AntiAlias != Setup.AntiAlias)
|
||||||
ModifiedAppearance = true;
|
ModifiedAppearance = true;
|
||||||
Utf8Strn0Cpy(data.FontOsd, fontOsdNames[fontOsdIndex], sizeof(data.FontOsd));
|
Utf8Strn0Cpy(data.FontOsd, fontOsdNames[fontOsdIndex], sizeof(data.FontOsd));
|
||||||
Utf8Strn0Cpy(data.FontSml, fontSmlNames[fontSmlIndex], sizeof(data.FontSml));
|
Utf8Strn0Cpy(data.FontSml, fontSmlNames[fontSmlIndex], sizeof(data.FontSml));
|
||||||
Utf8Strn0Cpy(data.FontFix, fontFixNames[fontFixIndex], sizeof(data.FontFix));
|
Utf8Strn0Cpy(data.FontFix, fontFixNames[fontFixIndex], sizeof(data.FontFix));
|
||||||
if (strcmp(data.FontOsd, Setup.FontOsd) || data.FontOsdSizeP != Setup.FontOsdSizeP)
|
if (strcmp(data.FontOsd, Setup.FontOsd) || !DoubleEqual(data.FontOsdSizeP, Setup.FontOsdSizeP))
|
||||||
ModifiedAppearance = true;
|
ModifiedAppearance = true;
|
||||||
if (strcmp(data.FontSml, Setup.FontSml) || data.FontSmlSizeP != Setup.FontSmlSizeP)
|
if (strcmp(data.FontSml, Setup.FontSml) || !DoubleEqual(data.FontSmlSizeP, Setup.FontSmlSizeP))
|
||||||
ModifiedAppearance = true;
|
ModifiedAppearance = true;
|
||||||
if (strcmp(data.FontFix, Setup.FontFix) || data.FontFixSizeP != Setup.FontFixSizeP)
|
if (strcmp(data.FontFix, Setup.FontFix) || !DoubleEqual(data.FontFixSizeP, Setup.FontFixSizeP))
|
||||||
ModifiedAppearance = true;
|
ModifiedAppearance = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3152,6 +3154,7 @@ static void SetTrackDescriptions(int LiveChannel)
|
|||||||
break;
|
break;
|
||||||
case 4: cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, indexDolby++, 0, LiveChannel ? NULL : p->language, p->description);
|
case 4: cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, indexDolby++, 0, LiveChannel ? NULL : p->language, p->description);
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menuitems.c 2.4 2009/05/03 13:37:55 kls Exp $
|
* $Id: menuitems.c 2.5 2009/12/06 11:31:20 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menuitems.h"
|
#include "menuitems.h"
|
||||||
@ -257,7 +257,7 @@ eOSState cMenuEditPrcItem::ProcessKey(eKeys Key)
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
newValue /= factor;
|
newValue /= factor;
|
||||||
if (newValue != *value && (!fresh || min <= newValue) && newValue <= max) {
|
if (!DoubleEqual(newValue, *value) && (!fresh || min <= newValue) && newValue <= max) {
|
||||||
*value = newValue;
|
*value = newValue;
|
||||||
Set();
|
Set();
|
||||||
}
|
}
|
||||||
@ -666,6 +666,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
|
|||||||
return ProcessKey(kYellow);
|
return ProcessKey(kYellow);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -675,6 +676,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
|
|||||||
case kfEnd: pos = lengthUtf8 - 1; break;
|
case kfEnd: pos = lengthUtf8 - 1; break;
|
||||||
case kfIns: return ProcessKey(kGreen);
|
case kfIns: return ProcessKey(kGreen);
|
||||||
case kfDel: return ProcessKey(kYellow);
|
case kfDel: return ProcessKey(kYellow);
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -975,6 +977,7 @@ eOSState cMenuEditTimeItem::ProcessKey(eKeys Key)
|
|||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
else if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: newplugin 2.0 2008/01/13 13:00:23 kls Exp $
|
# $Id: newplugin 2.1 2009/12/06 15:31:58 kls Exp $
|
||||||
|
|
||||||
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
|
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
|
||||||
|
|
||||||
@ -104,6 +104,8 @@ INCLUDES += -I\$(VDRDIR)/include
|
|||||||
|
|
||||||
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"\$(PLUGIN)"'
|
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"\$(PLUGIN)"'
|
||||||
|
|
||||||
|
DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
|
||||||
|
|
||||||
### The object files (add further files here):
|
### The object files (add further files here):
|
||||||
|
|
||||||
OBJS = \$(PLUGIN).o
|
OBJS = \$(PLUGIN).o
|
||||||
|
3
nit.c
3
nit.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: nit.c 2.3 2008/12/20 10:57:50 kls Exp $
|
* $Id: nit.c 2.4 2009/12/06 11:36:16 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "nit.h"
|
#include "nit.h"
|
||||||
@ -110,6 +110,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
case 1: f = BCD2INT(f) / 100; break;
|
case 1: f = BCD2INT(f) / 100; break;
|
||||||
case 2: f = BCD2INT(f) / 10; break;
|
case 2: f = BCD2INT(f) / 10; break;
|
||||||
case 3: f = f * 10; break;
|
case 3: f = f * 10; break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
Frequencies[n++] = f;
|
Frequencies[n++] = f;
|
||||||
}
|
}
|
||||||
|
8
osd.c
8
osd.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.c 2.5 2009/05/09 10:42:35 kls Exp $
|
* $Id: osd.c 2.6 2009/12/06 11:33:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
@ -101,6 +101,7 @@ void cPalette::Take(const cPalette &Palette, tIndexes *Indexes, tColor ColorFg,
|
|||||||
switch (i) {
|
switch (i) {
|
||||||
case 0: Color = ColorBg; break;
|
case 0: Color = ColorBg; break;
|
||||||
case 1: Color = ColorFg; break;
|
case 1: Color = ColorFg; break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int n = Index(Color);
|
int n = Index(Color);
|
||||||
@ -532,6 +533,7 @@ void cBitmap::DrawEllipse(int x1, int y1, int x2, int y2, tColor Color, int Quad
|
|||||||
case 6: cy = y2; rx /= 2; break;
|
case 6: cy = y2; rx /= 2; break;
|
||||||
case 7: cx = x2; ry /= 2; break;
|
case 7: cx = x2; ry /= 2; break;
|
||||||
case 8: cy = y1; rx /= 2; break;
|
case 8: cy = y1; rx /= 2; break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
int TwoASquare = 2 * rx * rx;
|
int TwoASquare = 2 * rx * rx;
|
||||||
int TwoBSquare = 2 * ry * ry;
|
int TwoBSquare = 2 * ry * ry;
|
||||||
@ -557,6 +559,7 @@ void cBitmap::DrawEllipse(int x1, int y1, int x2, int y2, tColor Color, int Quad
|
|||||||
case -2: DrawRectangle(x1, cy - y, cx - x, cy - y, Color); break;
|
case -2: DrawRectangle(x1, cy - y, cx - x, cy - y, Color); break;
|
||||||
case -3: DrawRectangle(x1, cy + y, cx - x, cy + y, Color); break;
|
case -3: DrawRectangle(x1, cy + y, cx - x, cy + y, Color); break;
|
||||||
case -4: DrawRectangle(cx + x, cy + y, x2, cy + y, Color); break;
|
case -4: DrawRectangle(cx + x, cy + y, x2, cy + y, Color); break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
y++;
|
y++;
|
||||||
StoppingY += TwoASquare;
|
StoppingY += TwoASquare;
|
||||||
@ -591,6 +594,7 @@ void cBitmap::DrawEllipse(int x1, int y1, int x2, int y2, tColor Color, int Quad
|
|||||||
case -2: DrawRectangle(x1, cy - y, cx - x, cy - y, Color); break;
|
case -2: DrawRectangle(x1, cy - y, cx - x, cy - y, Color); break;
|
||||||
case -3: DrawRectangle(x1, cy + y, cx - x, cy + y, Color); break;
|
case -3: DrawRectangle(x1, cy + y, cx - x, cy + y, Color); break;
|
||||||
case -4: DrawRectangle(cx + x, cy + y, x2, cy + y, Color); break;
|
case -4: DrawRectangle(cx + x, cy + y, x2, cy + y, Color); break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
x++;
|
x++;
|
||||||
StoppingX += TwoBSquare;
|
StoppingX += TwoBSquare;
|
||||||
@ -921,7 +925,7 @@ void cOsdProvider::UpdateOsdSize(bool Force)
|
|||||||
int Height;
|
int Height;
|
||||||
double Aspect;
|
double Aspect;
|
||||||
cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
|
cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
|
||||||
if (Width != oldWidth || Height != oldHeight || Aspect != oldAspect || Force) {
|
if (Width != oldWidth || Height != oldHeight || !DoubleEqual(Aspect, oldAspect) || Force) {
|
||||||
Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
|
Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
|
||||||
Setup.OSDTop = int(round(Height * Setup.OSDTopP));
|
Setup.OSDTop = int(round(Height * Setup.OSDTopP));
|
||||||
Setup.OSDWidth = int(round(Width * Setup.OSDWidthP)) & ~0x07; // OSD width must be a multiple of 8
|
Setup.OSDWidth = int(round(Width * Setup.OSDWidthP)) & ~0x07; // OSD width must be a multiple of 8
|
||||||
|
12
pat.c
12
pat.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: pat.c 2.4 2009/08/16 15:01:03 kls Exp $
|
* $Id: pat.c 2.7 2010/01/01 15:40:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pat.h"
|
#include "pat.h"
|
||||||
@ -144,7 +144,7 @@ void cCaDescriptors::AddCaDescriptor(SI::CaDescriptor *d, int EsPid)
|
|||||||
q += sprintf(q, "CAM: %04X %5d %5d %04X %04X -", source, transponder, serviceId, d->getCaType(), EsPid);
|
q += sprintf(q, "CAM: %04X %5d %5d %04X %04X -", source, transponder, serviceId, d->getCaType(), EsPid);
|
||||||
for (int i = 0; i < nca->Length(); i++)
|
for (int i = 0; i < nca->Length(); i++)
|
||||||
q += sprintf(q, " %02X", nca->Data()[i]);
|
q += sprintf(q, " %02X", nca->Data()[i]);
|
||||||
dsyslog(buffer);
|
dsyslog("%s", buffer);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -345,6 +345,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
int NumDpids = 0;
|
int NumDpids = 0;
|
||||||
int NumSpids = 0;
|
int NumSpids = 0;
|
||||||
for (SI::Loop::Iterator it; pmt.streamLoop.getNext(stream, it); ) {
|
for (SI::Loop::Iterator it; pmt.streamLoop.getNext(stream, it); ) {
|
||||||
|
bool ProcessCaDescriptors = false;
|
||||||
int esPid = stream.getPid();
|
int esPid = stream.getPid();
|
||||||
switch (stream.getStreamType()) {
|
switch (stream.getStreamType()) {
|
||||||
case 1: // STREAMTYPE_11172_VIDEO
|
case 1: // STREAMTYPE_11172_VIDEO
|
||||||
@ -353,6 +354,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
Vpid = esPid;
|
Vpid = esPid;
|
||||||
Ppid = pmt.getPCRPid();
|
Ppid = pmt.getPCRPid();
|
||||||
Vtype = stream.getStreamType();
|
Vtype = stream.getStreamType();
|
||||||
|
ProcessCaDescriptors = true;
|
||||||
break;
|
break;
|
||||||
case 3: // STREAMTYPE_11172_AUDIO
|
case 3: // STREAMTYPE_11172_AUDIO
|
||||||
case 4: // STREAMTYPE_13818_AUDIO
|
case 4: // STREAMTYPE_13818_AUDIO
|
||||||
@ -385,6 +387,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
}
|
}
|
||||||
NumApids++;
|
NumApids++;
|
||||||
}
|
}
|
||||||
|
ProcessCaDescriptors = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5: // STREAMTYPE_13818_PRIVATE
|
case 5: // STREAMTYPE_13818_PRIVATE
|
||||||
@ -398,6 +401,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
switch (d->getDescriptorTag()) {
|
switch (d->getDescriptorTag()) {
|
||||||
case SI::AC3DescriptorTag:
|
case SI::AC3DescriptorTag:
|
||||||
dpid = esPid;
|
dpid = esPid;
|
||||||
|
ProcessCaDescriptors = true;
|
||||||
break;
|
break;
|
||||||
case SI::SubtitlingDescriptorTag:
|
case SI::SubtitlingDescriptorTag:
|
||||||
if (NumSpids < MAXSPIDS) {
|
if (NumSpids < MAXSPIDS) {
|
||||||
@ -443,13 +447,15 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
//default: printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number());//XXX
|
default: ;//printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number());
|
||||||
}
|
}
|
||||||
|
if (ProcessCaDescriptors) {
|
||||||
for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
|
for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
|
||||||
CaDescriptors->AddCaDescriptor(d, esPid);
|
CaDescriptors->AddCaDescriptor(d, esPid);
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (Setup.UpdateChannels >= 2) {
|
if (Setup.UpdateChannels >= 2) {
|
||||||
Channel->SetPids(Vpid, Ppid, Vtype, Apids, ALangs, Dpids, DLangs, Spids, SLangs, Tpid);
|
Channel->SetPids(Vpid, Ppid, Vtype, Apids, ALangs, Dpids, DLangs, Spids, SLangs, Tpid);
|
||||||
Channel->SetCaIds(CaDescriptors->CaIds());
|
Channel->SetCaIds(CaDescriptors->CaIds());
|
||||||
|
10
plugin.c
10
plugin.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: plugin.c 2.1 2009/04/05 10:16:48 kls Exp $
|
* $Id: plugin.c 2.2 2010/01/06 11:36:46 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
@ -172,15 +172,15 @@ cDll::~cDll()
|
|||||||
static char *SkipQuote(char *s)
|
static char *SkipQuote(char *s)
|
||||||
{
|
{
|
||||||
char c = *s;
|
char c = *s;
|
||||||
strcpy(s, s + 1);
|
memmove(s, s + 1, strlen(s));
|
||||||
while (*s && *s != c) {
|
while (*s && *s != c) {
|
||||||
if (*s == '\\')
|
if (*s == '\\')
|
||||||
strcpy(s, s + 1);
|
memmove(s, s + 1, strlen(s));
|
||||||
if (*s)
|
if (*s)
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
if (*s) {
|
if (*s) {
|
||||||
strcpy(s, s + 1);
|
memmove(s, s + 1, strlen(s));
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
esyslog("ERROR: missing closing %c", c);
|
esyslog("ERROR: missing closing %c", c);
|
||||||
@ -215,7 +215,7 @@ bool cDll::Load(bool Log)
|
|||||||
if (!q)
|
if (!q)
|
||||||
q = p;
|
q = p;
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case '\\': strcpy(p, p + 1);
|
case '\\': memmove(p, p + 1, strlen(p));
|
||||||
if (*p)
|
if (*p)
|
||||||
p++;
|
p++;
|
||||||
else {
|
else {
|
||||||
|
243
po/ca_ES.po
243
po/ca_ES.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Catalanian\n"
|
"Language-Team: Catalanian\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "No puc iniciar el mode de transfer
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Iniciant exploració EPG"
|
msgstr "Iniciant exploració EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Sense títol"
|
msgstr "Sense títol"
|
||||||
|
|
||||||
|
243
po/cs_CZ.po
243
po/cs_CZ.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 15:00+0200\n"
|
"PO-Revision-Date: 2008-02-28 15:00+0200\n"
|
||||||
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
|
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
|
||||||
"Language-Team: Czech\n"
|
"Language-Team: Czech\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "Nelze za
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Zaèíná prohledávání EPG"
|
msgstr "Zaèíná prohledávání EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Bez názvu"
|
msgstr "Bez názvu"
|
||||||
|
|
||||||
|
243
po/da_DK.po
243
po/da_DK.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
||||||
"Language-Team: Danish\n"
|
"Language-Team: Danish\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Kan ikke starte Transfer Mode!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Starter EPG skanning"
|
msgstr "Starter EPG skanning"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Ingen titel"
|
msgstr "Ingen titel"
|
||||||
|
|
||||||
|
243
po/de_DE.po
243
po/de_DE.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-11-25 15:19+0200\n"
|
"PO-Revision-Date: 2007-11-25 15:19+0200\n"
|
||||||
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Transfer-Mode kann nicht gestartet werden!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Aktualisiere EPG-Daten"
|
msgstr "Aktualisiere EPG-Daten"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr "Film/Drama"
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr "Detektiv/Thriller"
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr "Abenteuer/Western/Krieg"
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr "Science-Fiction/Fantasy/Horror"
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr "Komödie"
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr "Seife/Melodram/Folklore"
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr "Romanze"
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr "Ernst/Klassik/Religion/Historischer Film/Drama"
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr "Erwachsenen-Film/Drama"
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr "Aktuelle Angelegenheiten"
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr "Wetterbericht"
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr "Nachrichtenmagazin"
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr "Diskussion/Interview/Debatte"
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr "Show/Spielshow"
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr "Spielshow/Quiz/Wettbewerb"
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr "Variete-Show"
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr "Talkshow"
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr "Sport"
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr "Besonderes Ereignis"
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr "Sportmagazin"
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr "Football/Fußball"
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr "Tennis/Squash"
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr "Mannschaftssport"
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr "Athletik"
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr "Motorsport"
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr "Wassersport"
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr "Wintersport"
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr "Reitsport"
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr "Kampfsport"
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr "Kinder/Jugendprogramm"
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr "Programm für Vorschulkinder"
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr "Unterhaltungsprogramm für 6 bis 14"
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr "Unterhaltungsprogramm für 10 bis 16"
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr "Informations/Lehr/Schul-Programm"
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr "Zeichentrick/Puppen"
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr "Musik/Ballett/Tanz"
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr "Rock/Pop"
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr "Ernste/Klassische Musik"
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr "Volks/Traditionelle Musik"
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr "Jazz"
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr "Musical/Oper"
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr "Ballett"
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr "Kunst/Kultur"
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr "Darstellende Künste"
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr "Bildende Künste"
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr "Religion"
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr "Pop-Kultur/Traditionelle Künste"
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr "Literatur"
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr "Film/Kino"
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr "Experimentalfilm/Video"
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr "Rundfunk/Presse"
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr "Neue Medien"
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr "Kunst/Kulturmagazin"
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr "Mode"
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr "Gesellschaft/Politik/Wirtschaft"
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr "Magazin/Bericht/Dokumentation"
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr "Wirtschafts/Gesellschaftsberatung"
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr "Bemerkenswerte Leute"
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr "Ausbildung/Wissenschaft/Sachlich"
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr "Natur/Tiere/Umwelt"
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr "Technik/Naturwissenschaften"
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr "Medizin/Physiologie/Psychologie"
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr "Ausland/Expeditionen"
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr "Sozial/Geisteswissenschaften"
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr "Weiterbildung"
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr "Sprachen"
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr "Freizeit/Hobbies"
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr "Tourismus/Reisen"
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr "Handwerk"
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr "Autofahren"
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr "Fitness & Gesundheit"
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr "Kochen"
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr "Werbung/Einkaufen"
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr "Gartenbau"
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr "Originalsprache"
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr "Schwarz-weiß"
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr "Unveröffentlicht"
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr "Live-Sendung"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr "ab %d"
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Kein Titel"
|
msgstr "Kein Titel"
|
||||||
|
|
||||||
|
243
po/el_GR.po
243
po/el_GR.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
||||||
"Language-Team: Greek\n"
|
"Language-Team: Greek\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Áñ÷Þ óÜñùóç EPG"
|
msgstr "Áñ÷Þ óÜñùóç EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "×ùñßò Ôßôëï"
|
msgstr "×ùñßò Ôßôëï"
|
||||||
|
|
||||||
|
243
po/es_ES.po
243
po/es_ES.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Iniciando la exploración de EPG"
|
msgstr "Iniciando la exploración de EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Sin título"
|
msgstr "Sin título"
|
||||||
|
|
||||||
|
343
po/et_EE.po
343
po/et_EE.po
@ -1,15 +1,15 @@
|
|||||||
# VDR language source file.
|
# VDR language source file.
|
||||||
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
|
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
|
||||||
# This file is distributed under the same license as the VDR package.
|
# This file is distributed under the same license as the VDR package.
|
||||||
# Arthur Konovalov <kasjas@hot.ee>, 2004, 2005, 2006, 2007
|
# Arthur Konovalov <artlov@gmail.com>, 2004-2009
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
|
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
|
||||||
"Language-Team: Estonian\n"
|
"Language-Team: Estonian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=ISO-8859-13\n"
|
"Content-Type: text/plain; charset=ISO-8859-13\n"
|
||||||
@ -19,7 +19,7 @@ msgid "off"
|
|||||||
msgstr "väljas"
|
msgstr "väljas"
|
||||||
|
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr ""
|
msgstr "sees"
|
||||||
|
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "automaatne"
|
msgstr "automaatne"
|
||||||
@ -34,11 +34,252 @@ msgid "Channel not available!"
|
|||||||
msgstr "Kanal ei ole kättesaadav!"
|
msgstr "Kanal ei ole kättesaadav!"
|
||||||
|
|
||||||
msgid "Can't start Transfer Mode!"
|
msgid "Can't start Transfer Mode!"
|
||||||
msgstr "Siirdemooduse start ebaõnnestus!"
|
msgstr "Siirdemooduse start nurjus!"
|
||||||
|
|
||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "EPG skaneerimine käivitatud"
|
msgstr "EPG skaneerimine käivitatud"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Pealkiri puudub"
|
msgstr "Pealkiri puudub"
|
||||||
|
|
||||||
@ -286,7 +527,7 @@ msgid "Polarization"
|
|||||||
msgstr "Polarisatsioon"
|
msgstr "Polarisatsioon"
|
||||||
|
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr ""
|
msgstr "Süsteem"
|
||||||
|
|
||||||
msgid "Srate"
|
msgid "Srate"
|
||||||
msgstr "Srate"
|
msgstr "Srate"
|
||||||
@ -316,7 +557,7 @@ msgid "Hierarchy"
|
|||||||
msgstr "Hierarhia"
|
msgstr "Hierarhia"
|
||||||
|
|
||||||
msgid "Rolloff"
|
msgid "Rolloff"
|
||||||
msgstr ""
|
msgstr "Rolloff"
|
||||||
|
|
||||||
msgid "Channel settings are not unique!"
|
msgid "Channel settings are not unique!"
|
||||||
msgstr "Kanaliseaded ei ole unikaalsed!"
|
msgstr "Kanaliseaded ei ole unikaalsed!"
|
||||||
@ -325,16 +566,16 @@ msgid "Channels"
|
|||||||
msgstr "Kanalid"
|
msgstr "Kanalid"
|
||||||
|
|
||||||
msgid "Button$Edit"
|
msgid "Button$Edit"
|
||||||
msgstr "Muuda"
|
msgstr "Muutmine"
|
||||||
|
|
||||||
msgid "Button$New"
|
msgid "Button$New"
|
||||||
msgstr "Uus"
|
msgstr "Uus"
|
||||||
|
|
||||||
msgid "Button$Delete"
|
msgid "Button$Delete"
|
||||||
msgstr "Kustuta"
|
msgstr "Kustutada"
|
||||||
|
|
||||||
msgid "Button$Mark"
|
msgid "Button$Mark"
|
||||||
msgstr "Siirda"
|
msgstr "Märkimine"
|
||||||
|
|
||||||
msgid "Channel is being used by a timer!"
|
msgid "Channel is being used by a timer!"
|
||||||
msgstr "Kanal on taimeri kasutuses!"
|
msgstr "Kanal on taimeri kasutuses!"
|
||||||
@ -343,7 +584,7 @@ msgid "Delete channel?"
|
|||||||
msgstr "Kustutada kanal?"
|
msgstr "Kustutada kanal?"
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Taimeri muutmine"
|
msgstr "Taimeri redigeerimine"
|
||||||
|
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktiivne"
|
msgstr "Aktiivne"
|
||||||
@ -397,10 +638,10 @@ msgid "Button$Timer"
|
|||||||
msgstr "Taimer"
|
msgstr "Taimer"
|
||||||
|
|
||||||
msgid "Button$Record"
|
msgid "Button$Record"
|
||||||
msgstr "Salvesta"
|
msgstr "Salvestada"
|
||||||
|
|
||||||
msgid "Button$Switch"
|
msgid "Button$Switch"
|
||||||
msgstr "Vali"
|
msgstr "Valida"
|
||||||
|
|
||||||
msgid "What's on now?"
|
msgid "What's on now?"
|
||||||
msgstr "Hetkel eetris"
|
msgstr "Hetkel eetris"
|
||||||
@ -436,7 +677,7 @@ msgstr "K
|
|||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please enter %d digits!"
|
msgid "Please enter %d digits!"
|
||||||
msgstr "Palun sisesta %d numbrit!"
|
msgstr "Palun sisestada %d numbrit!"
|
||||||
|
|
||||||
msgid "CAM not responding!"
|
msgid "CAM not responding!"
|
||||||
msgstr "CAM ei vasta"
|
msgstr "CAM ei vasta"
|
||||||
@ -454,19 +695,19 @@ msgid "Recordings"
|
|||||||
msgstr "Salvestused"
|
msgstr "Salvestused"
|
||||||
|
|
||||||
msgid "Button$Open"
|
msgid "Button$Open"
|
||||||
msgstr "Ava"
|
msgstr "Avada"
|
||||||
|
|
||||||
msgid "Commands"
|
msgid "Commands"
|
||||||
msgstr "Käsud"
|
msgstr "Käsud"
|
||||||
|
|
||||||
msgid "Error while accessing recording!"
|
msgid "Error while accessing recording!"
|
||||||
msgstr "Salvestuse taasesitus ebaõnnestus!"
|
msgstr "Salvestuse taasesitus nurjus!"
|
||||||
|
|
||||||
msgid "Delete recording?"
|
msgid "Delete recording?"
|
||||||
msgstr "Kustutada salvestus?"
|
msgstr "Kustutada salvestus?"
|
||||||
|
|
||||||
msgid "Error while deleting recording!"
|
msgid "Error while deleting recording!"
|
||||||
msgstr "Salvestuse kustutamine ebaõnnestus!"
|
msgstr "Salvestuse kustutamine nurjus!"
|
||||||
|
|
||||||
msgid "Recording commands"
|
msgid "Recording commands"
|
||||||
msgstr "Salvestuse käsud"
|
msgstr "Salvestuse käsud"
|
||||||
@ -505,10 +746,10 @@ msgid "Setup.OSD$Height (%)"
|
|||||||
msgstr "Kõrgus (%)"
|
msgstr "Kõrgus (%)"
|
||||||
|
|
||||||
msgid "Setup.OSD$Message time (s)"
|
msgid "Setup.OSD$Message time (s)"
|
||||||
msgstr "Teate esitusaeg (s)"
|
msgstr "Teate kuvamisaeg (s)"
|
||||||
|
|
||||||
msgid "Setup.OSD$Use small font"
|
msgid "Setup.OSD$Use small font"
|
||||||
msgstr "Väikese fondi kasutamine"
|
msgstr "Väikese fondi kasutus"
|
||||||
|
|
||||||
msgid "Setup.OSD$Anti-alias"
|
msgid "Setup.OSD$Anti-alias"
|
||||||
msgstr "Fondi silumine"
|
msgstr "Fondi silumine"
|
||||||
@ -541,7 +782,7 @@ msgid "top"
|
|||||||
msgstr "üleval"
|
msgstr "üleval"
|
||||||
|
|
||||||
msgid "Setup.OSD$Channel info time (s)"
|
msgid "Setup.OSD$Channel info time (s)"
|
||||||
msgstr "Kanaliinfo esitusaeg (s)"
|
msgstr "Kanaliinfo kuvamisaeg (s)"
|
||||||
|
|
||||||
msgid "Setup.OSD$Info on channel switch"
|
msgid "Setup.OSD$Info on channel switch"
|
||||||
msgstr "Kanaliinfo kuvamine"
|
msgstr "Kanaliinfo kuvamine"
|
||||||
@ -565,7 +806,7 @@ msgid "EPG"
|
|||||||
msgstr "EPG"
|
msgstr "EPG"
|
||||||
|
|
||||||
msgid "Button$Scan"
|
msgid "Button$Scan"
|
||||||
msgstr "Uuenda"
|
msgstr "Uuendada"
|
||||||
|
|
||||||
msgid "Setup.EPG$EPG scan timeout (h)"
|
msgid "Setup.EPG$EPG scan timeout (h)"
|
||||||
msgstr "EPG skaneerimise viide (h)"
|
msgstr "EPG skaneerimise viide (h)"
|
||||||
@ -609,13 +850,13 @@ msgid "PIDs only"
|
|||||||
msgstr "PID-id"
|
msgstr "PID-id"
|
||||||
|
|
||||||
msgid "names and PIDs"
|
msgid "names and PIDs"
|
||||||
msgstr "nimed ja PID-id"
|
msgstr "nimed,PID-id"
|
||||||
|
|
||||||
msgid "add new channels"
|
msgid "add new channels"
|
||||||
msgstr "kanalite lisamine"
|
msgstr "uued kanalid"
|
||||||
|
|
||||||
msgid "add new transponders"
|
msgid "add new transponders"
|
||||||
msgstr "transponderite lisamine"
|
msgstr "uued transponderid"
|
||||||
|
|
||||||
msgid "DVB"
|
msgid "DVB"
|
||||||
msgstr "DVB"
|
msgstr "DVB"
|
||||||
@ -690,7 +931,7 @@ msgid "Button$Menu"
|
|||||||
msgstr "Menüü"
|
msgstr "Menüü"
|
||||||
|
|
||||||
msgid "Button$Reset"
|
msgid "Button$Reset"
|
||||||
msgstr "Nullimine"
|
msgstr "Reset"
|
||||||
|
|
||||||
msgid "Opening CAM menu..."
|
msgid "Opening CAM menu..."
|
||||||
msgstr "CAM-menüü avamine..."
|
msgstr "CAM-menüü avamine..."
|
||||||
@ -702,16 +943,16 @@ msgid "CAM is in use - really reset?"
|
|||||||
msgstr "CAM on kasutuses - taaskäivitada?"
|
msgstr "CAM on kasutuses - taaskäivitada?"
|
||||||
|
|
||||||
msgid "Can't reset CAM!"
|
msgid "Can't reset CAM!"
|
||||||
msgstr "CAM mooduli taaskäivitus ebaõnnestus!"
|
msgstr "CAM mooduli taaskäivitus nurjus!"
|
||||||
|
|
||||||
msgid "do not pause live video"
|
msgid "do not pause live video"
|
||||||
msgstr ""
|
msgstr "mitte peatada"
|
||||||
|
|
||||||
msgid "confirm pause live video"
|
msgid "confirm pause live video"
|
||||||
msgstr ""
|
msgstr "peatam. kinnitus"
|
||||||
|
|
||||||
msgid "pause live video"
|
msgid "pause live video"
|
||||||
msgstr ""
|
msgstr "peatada"
|
||||||
|
|
||||||
msgid "Recording"
|
msgid "Recording"
|
||||||
msgstr "Salvestamine"
|
msgstr "Salvestamine"
|
||||||
@ -732,7 +973,7 @@ msgid "Setup.Recording$Default lifetime (d)"
|
|||||||
msgstr "Salvestuse eluiga (päevi)"
|
msgstr "Salvestuse eluiga (päevi)"
|
||||||
|
|
||||||
msgid "Setup.Recording$Pause key handling"
|
msgid "Setup.Recording$Pause key handling"
|
||||||
msgstr ""
|
msgstr "Pausi klahvi käsitsemine"
|
||||||
|
|
||||||
msgid "Setup.Recording$Pause priority"
|
msgid "Setup.Recording$Pause priority"
|
||||||
msgstr "Pausi prioriteet"
|
msgstr "Pausi prioriteet"
|
||||||
@ -741,7 +982,7 @@ msgid "Setup.Recording$Pause lifetime (d)"
|
|||||||
msgstr "Pausi eluiga (päevi)"
|
msgstr "Pausi eluiga (päevi)"
|
||||||
|
|
||||||
msgid "Setup.Recording$Use episode name"
|
msgid "Setup.Recording$Use episode name"
|
||||||
msgstr "Episoodi nime kasutamine"
|
msgstr "Episoodinime kasutamine"
|
||||||
|
|
||||||
msgid "Setup.Recording$Use VPS"
|
msgid "Setup.Recording$Use VPS"
|
||||||
msgstr "VPS-i kasutamine"
|
msgstr "VPS-i kasutamine"
|
||||||
@ -750,19 +991,19 @@ msgid "Setup.Recording$VPS margin (s)"
|
|||||||
msgstr "VPS-i algusvaru (s)"
|
msgstr "VPS-i algusvaru (s)"
|
||||||
|
|
||||||
msgid "Setup.Recording$Mark instant recording"
|
msgid "Setup.Recording$Mark instant recording"
|
||||||
msgstr "Otsesalvestuse märgistamine"
|
msgstr "Kiirsalvestuse märgistamine"
|
||||||
|
|
||||||
msgid "Setup.Recording$Name instant recording"
|
msgid "Setup.Recording$Name instant recording"
|
||||||
msgstr "Otsesalvestuse nimi"
|
msgstr "Kiirsalvestuse nimi"
|
||||||
|
|
||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Otsesalvestuse kestus (min)"
|
msgstr "Kiirsalvestuse kestus (min)"
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maksimaalne failisuurus (MB)"
|
msgstr "Maks. failisuurus (MB)"
|
||||||
|
|
||||||
msgid "Setup.Recording$Split edited files"
|
msgid "Setup.Recording$Split edited files"
|
||||||
msgstr "Failide tükeldamine"
|
msgstr "Failide jupitamine"
|
||||||
|
|
||||||
msgid "Replay"
|
msgid "Replay"
|
||||||
msgstr "Taasesitus"
|
msgstr "Taasesitus"
|
||||||
@ -780,7 +1021,7 @@ msgid "Miscellaneous"
|
|||||||
msgstr "Muud sätted"
|
msgstr "Muud sätted"
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Min. event timeout (min)"
|
msgid "Setup.Miscellaneous$Min. event timeout (min)"
|
||||||
msgstr "Min. sündmuse kestus (min)"
|
msgstr "Min. saate taimaut (min)"
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
|
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
|
||||||
msgstr "Min. kasutaja tegevusetus (min)"
|
msgstr "Min. kasutaja tegevusetus (min)"
|
||||||
@ -798,7 +1039,7 @@ msgid "Setup.Miscellaneous$Initial channel"
|
|||||||
msgstr "Kanal käivitamisel"
|
msgstr "Kanal käivitamisel"
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$as before"
|
msgid "Setup.Miscellaneous$as before"
|
||||||
msgstr "nagu enne"
|
msgstr "endine"
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Helitugevus käivitamisel"
|
msgstr "Helitugevus käivitamisel"
|
||||||
@ -845,7 +1086,7 @@ msgid "Button$Stop"
|
|||||||
msgstr "Stopp"
|
msgstr "Stopp"
|
||||||
|
|
||||||
msgid "Button$Resume"
|
msgid "Button$Resume"
|
||||||
msgstr "Jätka"
|
msgstr "Jätkata"
|
||||||
|
|
||||||
#. TRANSLATORS: note the leading blank!
|
#. TRANSLATORS: note the leading blank!
|
||||||
msgid " Cancel editing"
|
msgid " Cancel editing"
|
||||||
@ -855,7 +1096,7 @@ msgid "Stop recording?"
|
|||||||
msgstr "Lõpetada salvestamine?"
|
msgstr "Lõpetada salvestamine?"
|
||||||
|
|
||||||
msgid "Cancel editing?"
|
msgid "Cancel editing?"
|
||||||
msgstr "Tühistada muudatus?"
|
msgstr "Tühistada redigeermine?"
|
||||||
|
|
||||||
msgid "No audio available!"
|
msgid "No audio available!"
|
||||||
msgstr "Audio kättesaamatu!"
|
msgstr "Audio kättesaamatu!"
|
||||||
@ -876,7 +1117,7 @@ msgid "No free DVB device to record!"
|
|||||||
msgstr "Puudub vaba DVB seade salvestamiseks!"
|
msgstr "Puudub vaba DVB seade salvestamiseks!"
|
||||||
|
|
||||||
msgid "Pausing live video..."
|
msgid "Pausing live video..."
|
||||||
msgstr "Saate edastamise peatamine..."
|
msgstr "Otseülekande peatamine..."
|
||||||
|
|
||||||
#. TRANSLATORS: note the trailing blank!
|
#. TRANSLATORS: note the trailing blank!
|
||||||
msgid "Jump: "
|
msgid "Jump: "
|
||||||
@ -886,10 +1127,10 @@ msgid "No editing marks defined!"
|
|||||||
msgstr "Redigeerimise markerid puuduvad!"
|
msgstr "Redigeerimise markerid puuduvad!"
|
||||||
|
|
||||||
msgid "Can't start editing process!"
|
msgid "Can't start editing process!"
|
||||||
msgstr "Redigeerimise start ebaõnnestus!"
|
msgstr "Redigeerimise start nurjus!"
|
||||||
|
|
||||||
msgid "Editing process started"
|
msgid "Editing process started"
|
||||||
msgstr "Redigeerimine algas"
|
msgstr "Redigeerimine käivitatud"
|
||||||
|
|
||||||
msgid "Editing process already active!"
|
msgid "Editing process already active!"
|
||||||
msgstr "Redigeerimine juba aktiivne!"
|
msgstr "Redigeerimine juba aktiivne!"
|
||||||
@ -925,13 +1166,13 @@ msgid "Low disk space!"
|
|||||||
msgstr "Kõvaketas täis!"
|
msgstr "Kõvaketas täis!"
|
||||||
|
|
||||||
msgid "Regenerating index file"
|
msgid "Regenerating index file"
|
||||||
msgstr ""
|
msgstr "Indeksfaili regenereerimine"
|
||||||
|
|
||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr "Indeksfaili regenereerimine lõpetatud"
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Väljalülitamine ebaõnnestus - '-s' parameeter puudub!"
|
msgstr "Väljalülitamine nurjus - '-s' parameeter puudub!"
|
||||||
|
|
||||||
msgid "Editing - shut down anyway?"
|
msgid "Editing - shut down anyway?"
|
||||||
msgstr "Redigeerimine aktiive - lülitada välja?"
|
msgstr "Redigeerimine aktiive - lülitada välja?"
|
||||||
@ -964,10 +1205,10 @@ msgid "Volume "
|
|||||||
msgstr "Helitugevus "
|
msgstr "Helitugevus "
|
||||||
|
|
||||||
msgid "Classic VDR"
|
msgid "Classic VDR"
|
||||||
msgstr "Klassikaline VDR"
|
msgstr "Classic VDR"
|
||||||
|
|
||||||
msgid "ST:TNG Panels"
|
msgid "ST:TNG Panels"
|
||||||
msgstr "ST:TNG konsool"
|
msgstr "ST:TNG Panels"
|
||||||
|
|
||||||
#. TRANSLATORS: the first character of each weekday, beginning with monday
|
#. TRANSLATORS: the first character of each weekday, beginning with monday
|
||||||
msgid "MTWTFSS"
|
msgid "MTWTFSS"
|
||||||
@ -1002,10 +1243,10 @@ msgid "Upcoming recording!"
|
|||||||
msgstr "Salvestamine tulekul!"
|
msgstr "Salvestamine tulekul!"
|
||||||
|
|
||||||
msgid "Pause live video?"
|
msgid "Pause live video?"
|
||||||
msgstr ""
|
msgstr "Peatada otseülekanne?"
|
||||||
|
|
||||||
msgid "Recording started"
|
msgid "Recording started"
|
||||||
msgstr "Salvestamine algas"
|
msgstr "Salvestamine käivitatud"
|
||||||
|
|
||||||
msgid "VDR will shut down later - press Power to force"
|
msgid "VDR will shut down later - press Power to force"
|
||||||
msgstr "VDR lülitub välja hiljem - vajuta Power kiirendamiseks"
|
msgstr "VDR lülitub välja hiljem - vajuta Power kiirendamiseks"
|
||||||
@ -1017,7 +1258,7 @@ msgid "Switching primary DVB..."
|
|||||||
msgstr "Esmase DVB seadme ümberlülitus..."
|
msgstr "Esmase DVB seadme ümberlülitus..."
|
||||||
|
|
||||||
msgid "Editing process failed!"
|
msgid "Editing process failed!"
|
||||||
msgstr "Redigeerimine ebaõnnestus"
|
msgstr "Redigeerimine nurjus"
|
||||||
|
|
||||||
msgid "Editing process finished"
|
msgid "Editing process finished"
|
||||||
msgstr "Redigeerimine lõpetatud"
|
msgstr "Redigeerimine lõpetatud"
|
||||||
|
243
po/fi_FI.po
243
po/fi_FI.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
||||||
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
||||||
"Language-Team: Finnish\n"
|
"Language-Team: Finnish\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "Siirtotilan aloitus ep
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Ohjelmaoppaan päivitys aloitettu"
|
msgstr "Ohjelmaoppaan päivitys aloitettu"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr "Elokuva/draama"
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr "Etsivä/trilleri"
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr "Seikkailu/western/sota"
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr "Scifi/fantasia/kauhu"
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr "Komedia"
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr "Saippua/melodraama/kansanperinne"
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr "Romanssi"
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr "Vakava/klassinen/uskonnollinen/historiallinen elokuva/draama"
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr "Aikuiselokuva/draama"
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr "Uutiset/ajankohtaisohjelma"
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr "Uutiset/säätiedot"
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr "Uutismakasiini"
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr "Dokumentti"
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr "Keskustelu/haastattelu/väittely"
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr "Show/visailu"
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr "Visailu/kilpailu"
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr "Varietee"
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr "Keskusteluohjelma"
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr "Urheilua"
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr "Erikoistapahtuma"
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr "Urheilumakasiini"
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr "Jalkapallo"
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr "Tennis/Squash"
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr "Joukkueurheilua"
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr "Yleisurheilua"
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr "Moottoriurheilua"
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr "Vesiurheilua"
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr "Talviurheilua"
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr "Ratsastusta"
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr "Kamppailu-urheilua"
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr "Lasten ja nuorten ohjelma"
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr "Alle kouluikäisten ohjelma"
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr "Viihdeohjelma 6-14 vuotiaille"
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr "Viihdeohjelma 10-16 vuotiaille"
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr "Opetus/kouluohjelma"
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr "Piirretty/nukke-esitys"
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr "Musiikki/baletti/tanssi"
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr "Rock/pop"
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr "Vakava/klassinen musiikki"
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr "Folk/kansanmusiikki"
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr "Jazz"
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr "Musikaali/ooppera"
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr "Baletti"
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr "Taide/kulttuuri"
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr "Performanssitaide"
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr "Kuvataide"
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr "Uskonto"
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr "Populaarikulttuuri/perinnetaiteet"
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr "Kirjallisuus"
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr "Elokuvataide"
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr "Kokeellinen elokuva/video"
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr "Televisio/radio/lehdistö"
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr "Uusmedia"
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr "Taide/kulttuurimakasiini"
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr "Muoti"
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr "Yhteiskunta/politiikka/talous"
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr "Makasiini/reportaasi/dokumentti"
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr "Talous/yhteiskunnallinen neuvonta"
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr "Merkittävät henkilöt"
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr "Koulutus/tiede"
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr "Luonto/eläimet/ympäristö"
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr "Teknologia/luonnontiede"
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr "Lääketiede/fysiologia/psykologia"
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr "Vieraat maat/tutkimusretket"
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr "Yhteiskunta/hengelliset tieteet"
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr "Jatkokoulutus"
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr "Kielet"
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr "Vapaa-aika ja harrastukset"
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr "Turismi/matkustaminen"
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr "Käsityöt"
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr "Autoilu"
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr "Kuntoilu & terveys"
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr "Ruuanlaitto"
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr "Mainostaminen/ostaminen"
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr "Puutarhanhoito"
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr "Alkuperäiskieli"
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr "Mustavalkoinen"
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr "Julkaisematon"
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr "Suoralähetys"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Ei esitystä"
|
msgstr "Ei esitystä"
|
||||||
|
|
||||||
|
243
po/fr_FR.po
243
po/fr_FR.po
@ -13,7 +13,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
|
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
|
||||||
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
||||||
"Language-Team: French\n"
|
"Language-Team: French\n"
|
||||||
@ -45,6 +45,247 @@ msgstr "Impossible d'utiliser le mode transfert !"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Mise à jour du guide des programmes"
|
msgstr "Mise à jour du guide des programmes"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Sans titre"
|
msgstr "Sans titre"
|
||||||
|
|
||||||
|
243
po/hr_HR.po
243
po/hr_HR.po
@ -9,7 +9,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
|
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
|
||||||
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
||||||
"Language-Team: Croatian\n"
|
"Language-Team: Croatian\n"
|
||||||
@ -41,6 +41,247 @@ msgstr "Nemogu
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Poèinjem EPG pretragu"
|
msgstr "Poèinjem EPG pretragu"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Bez naziva"
|
msgstr "Bez naziva"
|
||||||
|
|
||||||
|
243
po/hu_HU.po
243
po/hu_HU.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
|
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
|
||||||
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
||||||
"Language-Team: Hungarian\n"
|
"Language-Team: Hungarian\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "Transfer-Mode nem ind
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "EPG adatok aktualizálása"
|
msgstr "EPG adatok aktualizálása"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "név nélkül"
|
msgstr "név nélkül"
|
||||||
|
|
||||||
|
249
po/it_IT.po
249
po/it_IT.po
@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2009-08-29 11:16+0100\n"
|
"PO-Revision-Date: 2009-11-28 22:50+0100\n"
|
||||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||||
"Language-Team: Italian\n"
|
"Language-Team: Italian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -46,6 +46,247 @@ msgstr "Impossibile avviare mod. trasferimento!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Inizio scansione EPG"
|
msgstr "Inizio scansione EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Senza titolo"
|
msgstr "Senza titolo"
|
||||||
|
|
||||||
@ -932,10 +1173,10 @@ msgid "Low disk space!"
|
|||||||
msgstr "Poco spazio su disco!"
|
msgstr "Poco spazio su disco!"
|
||||||
|
|
||||||
msgid "Regenerating index file"
|
msgid "Regenerating index file"
|
||||||
msgstr ""
|
msgstr "Rigenerazione file indice"
|
||||||
|
|
||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr "Rigenerazione file indice completata"
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Impossibile spegnere - parametro '-s' non assegnato!"
|
msgstr "Impossibile spegnere - parametro '-s' non assegnato!"
|
||||||
|
243
po/lt_LT.po
243
po/lt_LT.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.9\n"
|
"Project-Id-Version: VDR 1.7.9\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2009-10-17 14:19+0200\n"
|
"PO-Revision-Date: 2009-10-17 14:19+0200\n"
|
||||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||||
"Language-Team: Lithuanian\n"
|
"Language-Team: Lithuanian\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Negali pradėti perdavimo"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Pradedamas EPG skanavimas"
|
msgstr "Pradedamas EPG skanavimas"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Be pavadinimo"
|
msgstr "Be pavadinimo"
|
||||||
|
|
||||||
|
243
po/nl_NL.po
243
po/nl_NL.po
@ -11,7 +11,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
|
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
|
||||||
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
@ -43,6 +43,247 @@ msgstr "Kan Transfer-Mode niet starten"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Bezig met starten EPG scan"
|
msgstr "Bezig met starten EPG scan"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Geen titel"
|
msgstr "Geen titel"
|
||||||
|
|
||||||
|
243
po/nn_NO.po
243
po/nn_NO.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
||||||
"Language-Team: Norwegian\n"
|
"Language-Team: Norwegian\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "Kan ikke starte transfer modus!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
243
po/pl_PL.po
243
po/pl_PL.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
|
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
|
||||||
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
||||||
"Language-Team: Polish\n"
|
"Language-Team: Polish\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "Nie mo
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Rozpoczynam skanowanie EPG"
|
msgstr "Rozpoczynam skanowanie EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Bez tytu³u"
|
msgstr "Bez tytu³u"
|
||||||
|
|
||||||
|
243
po/pt_PT.po
243
po/pt_PT.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
|
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
|
||||||
"Last-Translator: anonymous\n"
|
"Last-Translator: anonymous\n"
|
||||||
"Language-Team: Portuguese\n"
|
"Language-Team: Portuguese\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Imposs
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Iniciar a procura de EPG"
|
msgstr "Iniciar a procura de EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Sem título"
|
msgstr "Sem título"
|
||||||
|
|
||||||
|
243
po/ro_RO.po
243
po/ro_RO.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
|
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
|
||||||
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
||||||
"Language-Team: Romanian\n"
|
"Language-Team: Romanian\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "Nu pot porni modul de transfer!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Pornesc achiziþia EPG"
|
msgstr "Pornesc achiziþia EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Fãrã titlu"
|
msgstr "Fãrã titlu"
|
||||||
|
|
||||||
|
243
po/ru_RU.po
243
po/ru_RU.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
|
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
|
||||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "½ÐçØÝÐî EPG-áÚÐÝØàÞÒÐÝØÕ"
|
msgstr "½ÐçØÝÐî EPG-áÚÐÝØàÞÒÐÝØÕ"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "±Õ× ÝÐ×ÒÐÝØï"
|
msgstr "±Õ× ÝÐ×ÒÐÝØï"
|
||||||
|
|
||||||
|
243
po/sk_SK.po
243
po/sk_SK.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2009-09-30 12:50+0100\n"
|
"PO-Revision-Date: 2009-09-30 12:50+0100\n"
|
||||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||||
"Language-Team: Slovak\n"
|
"Language-Team: Slovak\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "Nem
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Zaèína prehµadáva» EPG"
|
msgstr "Zaèína prehµadáva» EPG"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Bez názvu"
|
msgstr "Bez názvu"
|
||||||
|
|
||||||
|
243
po/sl_SI.po
243
po/sl_SI.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
|
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
|
||||||
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
||||||
"Language-Team: Slovenian\n"
|
"Language-Team: Slovenian\n"
|
||||||
@ -40,6 +40,247 @@ msgstr "Ne morem za
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Prièenjam EPG-scan"
|
msgstr "Prièenjam EPG-scan"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Brez naziva"
|
msgstr "Brez naziva"
|
||||||
|
|
||||||
|
243
po/sv_SE.po
243
po/sv_SE.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
|
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
|
||||||
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
||||||
"Language-Team: Swedish\n"
|
"Language-Team: Swedish\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "Kan inte starta Transfer Mode!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Påbörjar EPG skanning"
|
msgstr "Påbörjar EPG skanning"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "ingen titel"
|
msgstr "ingen titel"
|
||||||
|
|
||||||
|
243
po/tr_TR.po
243
po/tr_TR.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
|
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
|
||||||
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
||||||
"Language-Team: Turkish\n"
|
"Language-Team: Turkish\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Transfer modu ba
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "EPG tarama baþlýyor"
|
msgstr "EPG tarama baþlýyor"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Ýsim yok"
|
msgstr "Ýsim yok"
|
||||||
|
|
||||||
|
243
po/uk_UA.po
243
po/uk_UA.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.7\n"
|
"Project-Id-Version: VDR 1.7.7\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2009-05-31 13:17+0200\n"
|
"PO-Revision-Date: 2009-05-31 13:17+0200\n"
|
||||||
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
||||||
"Language-Team: Ukrainian\n"
|
"Language-Team: Ukrainian\n"
|
||||||
@ -39,6 +39,247 @@ msgstr "Неможливо включити режим пропуску!"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "Починаю EPG-сканування"
|
msgstr "Починаю EPG-сканування"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Без назви"
|
msgstr "Без назви"
|
||||||
|
|
||||||
|
243
po/zh_CN.po
243
po/zh_CN.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2009-11-22 12:28+0100\n"
|
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
||||||
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
|
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
|
||||||
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
||||||
"Language-Team: Chinese\n"
|
"Language-Team: Chinese\n"
|
||||||
@ -42,6 +42,247 @@ msgstr "不能启动传送模式"
|
|||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "开始节目单扫描"
|
msgstr "开始节目单扫描"
|
||||||
|
|
||||||
|
msgid "Content$Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Detective/Thriller"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adventure/Western/War"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Comedy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Romance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Adult Movie/Drama"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Current Affairs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News/Weather Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$News Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Show/Game Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Variety Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Talk Show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Special Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Sport Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Football/Soccer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tennis/Squash"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Team Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Athletics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motor Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Water Sport"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Winter Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Equestrian"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Martial Sports"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Children's/Youth Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Pre-school Children's Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cartoons/Puppets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Music/Ballet/Dance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Rock/Pop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Serious/Classical Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Folk/Tradional Music"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Jazz"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Musical/Opera"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Ballet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Performing Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fine Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Religion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Literature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Film/Cinema"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Experimental Film/Video"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Broadcasting/Press"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$New Media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Arts/Culture Magazine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fashion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Political/Economics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Economics/Social Advisory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Remarkable People"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Education/Science/Factual"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Nature/Animals/Environment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Technology/Natural Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Further Education"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Languages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Leisure/Hobbies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Tourism/Travel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Handicraft"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Motoring"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Fitness & Health"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Cooking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Advertisement/Shopping"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Gardening"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Original Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Black & White"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Unpublished"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Content$Live Broadcast"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "ParentalRating$from %d"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "没有标题"
|
msgstr "没有标题"
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: receiver.c 2.0 2007/08/12 11:52:59 kls Exp $
|
* $Id: receiver.c 2.1 2010/01/01 15:38:48 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "receiver.h"
|
#include "receiver.h"
|
||||||
@ -40,7 +40,7 @@ cReceiver::~cReceiver()
|
|||||||
{
|
{
|
||||||
if (device) {
|
if (device) {
|
||||||
const char *msg = "ERROR: cReceiver has not been detached yet! This is a design fault and VDR will segfault now!";
|
const char *msg = "ERROR: cReceiver has not been detached yet! This is a design fault and VDR will segfault now!";
|
||||||
esyslog(msg);
|
esyslog("%s", msg);
|
||||||
fprintf(stderr, "%s\n", msg);
|
fprintf(stderr, "%s\n", msg);
|
||||||
*(char *)0 = 0; // cause a segfault
|
*(char *)0 = 0; // cause a segfault
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recorder.c 2.6 2009/11/21 15:58:12 kls Exp $
|
* $Id: recorder.c 2.7 2009/12/06 11:34:41 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recorder.h"
|
#include "recorder.h"
|
||||||
@ -128,7 +128,7 @@ void cRecorder::Action(void)
|
|||||||
if (frameDetector->Synced()) {
|
if (frameDetector->Synced()) {
|
||||||
if (!InfoWritten) {
|
if (!InfoWritten) {
|
||||||
if (recordingInfo.Read()) {
|
if (recordingInfo.Read()) {
|
||||||
if (frameDetector->FramesPerSecond() > 0 && recordingInfo.FramesPerSecond() != frameDetector->FramesPerSecond()) {
|
if (frameDetector->FramesPerSecond() > 0 && !DoubleEqual(recordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) {
|
||||||
recordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond());
|
recordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond());
|
||||||
recordingInfo.Write();
|
recordingInfo.Write();
|
||||||
}
|
}
|
||||||
|
66
recording.c
66
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 2.18 2009/11/22 11:20:53 kls Exp $
|
* $Id: recording.c 2.21 2010/01/02 13:46:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -260,6 +260,7 @@ int cResumeFile::Read(void)
|
|||||||
switch (*s) {
|
switch (*s) {
|
||||||
case 'I': resume = atoi(t);
|
case 'I': resume = atoi(t);
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
@ -443,8 +444,8 @@ bool cRecordingInfo::Read(FILE *f)
|
|||||||
ownEvent->SetEventID(EventID);
|
ownEvent->SetEventID(EventID);
|
||||||
ownEvent->SetStartTime(StartTime);
|
ownEvent->SetStartTime(StartTime);
|
||||||
ownEvent->SetDuration(Duration);
|
ownEvent->SetDuration(Duration);
|
||||||
ownEvent->SetTableID(TableID);
|
ownEvent->SetTableID(uchar(TableID));
|
||||||
ownEvent->SetVersion(Version);
|
ownEvent->SetVersion(uchar(Version));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -570,7 +571,7 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
if (strlen(p) > 2 && isxdigit(*(p + 1)) && isxdigit(*(p + 2))) {
|
if (strlen(p) > 2 && isxdigit(*(p + 1)) && isxdigit(*(p + 2))) {
|
||||||
char buf[3];
|
char buf[3];
|
||||||
sprintf(buf, "%c%c", *(p + 1), *(p + 2));
|
sprintf(buf, "%c%c", *(p + 1), *(p + 2));
|
||||||
unsigned char c = strtol(buf, NULL, 16);
|
uchar c = uchar(strtol(buf, NULL, 16));
|
||||||
if (c) {
|
if (c) {
|
||||||
*p = c;
|
*p = c;
|
||||||
memmove(p + 1, p + 3, strlen(p) - 2);
|
memmove(p + 1, p + 3, strlen(p) - 2);
|
||||||
@ -582,6 +583,7 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
case '\x01': *p = '\''; break;
|
case '\x01': *p = '\''; break;
|
||||||
case '\x02': *p = '/'; break;
|
case '\x02': *p = '/'; break;
|
||||||
case '\x03': *p = ':'; break;
|
case '\x03': *p = ':'; break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -672,7 +674,9 @@ cRecording::cRecording(const char *FileName)
|
|||||||
deleted = 0;
|
deleted = 0;
|
||||||
titleBuffer = NULL;
|
titleBuffer = NULL;
|
||||||
sortBuffer = NULL;
|
sortBuffer = NULL;
|
||||||
fileName = strdup(FileName);
|
FileName = fileName = strdup(FileName);
|
||||||
|
if (*(fileName + strlen(fileName) - 1) == '/')
|
||||||
|
*(fileName + strlen(fileName) - 1) = 0;
|
||||||
FileName += strlen(VideoDirectory) + 1;
|
FileName += strlen(VideoDirectory) + 1;
|
||||||
const char *p = strrchr(FileName, '/');
|
const char *p = strrchr(FileName, '/');
|
||||||
|
|
||||||
@ -1412,8 +1416,11 @@ void cIndexFileGenerator::Action(void)
|
|||||||
// Read data:
|
// Read data:
|
||||||
else if (ReplayFile) {
|
else if (ReplayFile) {
|
||||||
int Result = Buffer.Read(ReplayFile, BufferChunks);
|
int Result = Buffer.Read(ReplayFile, BufferChunks);
|
||||||
if (Result == 0) // EOF
|
if (Result == 0) { // EOF
|
||||||
ReplayFile = FileName.NextFile();
|
ReplayFile = FileName.NextFile();
|
||||||
|
FileSize = 0;
|
||||||
|
FrameOffset = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Recording has been processed:
|
// Recording has been processed:
|
||||||
else {
|
else {
|
||||||
@ -1498,19 +1505,19 @@ cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording)
|
|||||||
if (access(fileName, R_OK) == 0) {
|
if (access(fileName, R_OK) == 0) {
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
if (stat(fileName, &buf) == 0) {
|
if (stat(fileName, &buf) == 0) {
|
||||||
delta = buf.st_size % sizeof(tIndexTs);
|
delta = int(buf.st_size % sizeof(tIndexTs));
|
||||||
if (delta) {
|
if (delta) {
|
||||||
delta = sizeof(tIndexTs) - delta;
|
delta = sizeof(tIndexTs) - delta;
|
||||||
esyslog("ERROR: invalid file size (%lld) in '%s'", buf.st_size, fileName);
|
esyslog("ERROR: invalid file size (%lld) in '%s'", buf.st_size, fileName);
|
||||||
}
|
}
|
||||||
last = (buf.st_size + delta) / sizeof(tIndexTs) - 1;
|
last = int((buf.st_size + delta) / sizeof(tIndexTs) - 1);
|
||||||
if (!Record && last >= 0) {
|
if (!Record && last >= 0) {
|
||||||
size = last + 1;
|
size = last + 1;
|
||||||
index = MALLOC(tIndexTs, size);
|
index = MALLOC(tIndexTs, size);
|
||||||
if (index) {
|
if (index) {
|
||||||
f = open(fileName, O_RDONLY);
|
f = open(fileName, O_RDONLY);
|
||||||
if (f >= 0) {
|
if (f >= 0) {
|
||||||
if ((int)safe_read(f, index, buf.st_size) != buf.st_size) {
|
if (safe_read(f, index, size_t(buf.st_size)) != buf.st_size) {
|
||||||
esyslog("ERROR: can't read from file '%s'", fileName);
|
esyslog("ERROR: can't read from file '%s'", fileName);
|
||||||
free(index);
|
free(index);
|
||||||
index = NULL;
|
index = NULL;
|
||||||
@ -1576,8 +1583,8 @@ void cIndexFile::ConvertToPes(tIndexTs *IndexTs, int Count)
|
|||||||
tIndexPes IndexPes;
|
tIndexPes IndexPes;
|
||||||
while (Count-- > 0) {
|
while (Count-- > 0) {
|
||||||
IndexPes.offset = uint32_t(IndexTs->offset);
|
IndexPes.offset = uint32_t(IndexTs->offset);
|
||||||
IndexPes.type = IndexTs->independent ? 1 : 2; // I_FRAME : "not I_FRAME" (exact frame type doesn't matter)
|
IndexPes.type = uchar(IndexTs->independent ? 1 : 2); // I_FRAME : "not I_FRAME" (exact frame type doesn't matter)
|
||||||
IndexPes.number = IndexTs->number;
|
IndexPes.number = uchar(IndexTs->number);
|
||||||
IndexPes.reserved = 0;
|
IndexPes.reserved = 0;
|
||||||
memcpy(IndexTs, &IndexPes, sizeof(*IndexTs));
|
memcpy(IndexTs, &IndexPes, sizeof(*IndexTs));
|
||||||
IndexTs++;
|
IndexTs++;
|
||||||
@ -1598,7 +1605,7 @@ bool cIndexFile::CatchUp(int Index)
|
|||||||
f = -1;
|
f = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
int newLast = buf.st_size / sizeof(tIndexTs) - 1;
|
int newLast = int(buf.st_size / sizeof(tIndexTs) - 1);
|
||||||
if (newLast > last) {
|
if (newLast > last) {
|
||||||
if (size <= newLast) {
|
if (size <= newLast) {
|
||||||
size *= 2;
|
size *= 2;
|
||||||
@ -1668,7 +1675,7 @@ bool cIndexFile::Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *I
|
|||||||
uint16_t fn = index[Index + 1].number;
|
uint16_t fn = index[Index + 1].number;
|
||||||
off_t fo = index[Index + 1].offset;
|
off_t fo = index[Index + 1].offset;
|
||||||
if (fn == *FileNumber)
|
if (fn == *FileNumber)
|
||||||
*Length = fo - *FileOffset;
|
*Length = int(fo - *FileOffset);
|
||||||
else
|
else
|
||||||
*Length = -1; // this means "everything up to EOF" (the buffer's Read function will act accordingly)
|
*Length = -1; // this means "everything up to EOF" (the buffer's Read function will act accordingly)
|
||||||
}
|
}
|
||||||
@ -1699,7 +1706,7 @@ int cIndexFile::GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber, off
|
|||||||
uint16_t fn = index[Index + 1].number;
|
uint16_t fn = index[Index + 1].number;
|
||||||
off_t fo = index[Index + 1].offset;
|
off_t fo = index[Index + 1].offset;
|
||||||
if (fn == *FileNumber)
|
if (fn == *FileNumber)
|
||||||
*Length = fo - *FileOffset;
|
*Length = int(fo - *FileOffset);
|
||||||
else {
|
else {
|
||||||
esyslog("ERROR: 'I' frame at end of file #%d", *FileNumber);
|
esyslog("ERROR: 'I' frame at end of file #%d", *FileNumber);
|
||||||
*Length = -1;
|
*Length = -1;
|
||||||
@ -1746,6 +1753,33 @@ void cIndexFile::Delete(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GenerateIndex(const char *FileName)
|
||||||
|
{
|
||||||
|
if (DirectoryOk(FileName)) {
|
||||||
|
cRecording Recording(FileName);
|
||||||
|
if (Recording.Name()) {
|
||||||
|
if (!Recording.IsPesRecording()) {
|
||||||
|
cString IndexFileName = AddDirectory(FileName, INDEXFILESUFFIX);
|
||||||
|
unlink(IndexFileName);
|
||||||
|
cIndexFileGenerator *IndexFileGenerator = new cIndexFileGenerator(FileName);
|
||||||
|
while (IndexFileGenerator->Active())
|
||||||
|
cCondWait::SleepMs(INDEXFILECHECKINTERVAL);
|
||||||
|
if (access(IndexFileName, R_OK) == 0)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
fprintf(stderr, "cannot create '%s'\n", *IndexFileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' is not a TS recording\n", FileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' is not a recording\n", FileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "'%s' is not a directory\n", FileName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cFileName -------------------------------------------------------------
|
// --- cFileName -------------------------------------------------------------
|
||||||
|
|
||||||
#define MAXFILESPERRECORDINGPES 255
|
#define MAXFILESPERRECORDINGPES 255
|
||||||
@ -1868,11 +1902,11 @@ cUnbufferedFile *cFileName::SetOffset(int Number, off_t Offset)
|
|||||||
Close();
|
Close();
|
||||||
int MaxFilesPerRecording = isPesRecording ? MAXFILESPERRECORDINGPES : MAXFILESPERRECORDINGTS;
|
int MaxFilesPerRecording = isPesRecording ? MAXFILESPERRECORDINGPES : MAXFILESPERRECORDINGTS;
|
||||||
if (0 < Number && Number <= MaxFilesPerRecording) {
|
if (0 < Number && Number <= MaxFilesPerRecording) {
|
||||||
fileNumber = Number;
|
fileNumber = uint16_t(Number);
|
||||||
sprintf(pFileNumber, isPesRecording ? RECORDFILESUFFIXPES : RECORDFILESUFFIXTS, fileNumber);
|
sprintf(pFileNumber, isPesRecording ? RECORDFILESUFFIXPES : RECORDFILESUFFIXTS, fileNumber);
|
||||||
if (record) {
|
if (record) {
|
||||||
if (access(fileName, F_OK) == 0) {
|
if (access(fileName, F_OK) == 0) {
|
||||||
// files exists, check if it has non-zero size
|
// file exists, check if it has non-zero size
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
if (stat(fileName, &buf) == 0) {
|
if (stat(fileName, &buf) == 0) {
|
||||||
if (buf.st_size != 0)
|
if (buf.st_size != 0)
|
||||||
|
10
recording.h
10
recording.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.h 2.10 2009/11/21 16:12:55 kls Exp $
|
* $Id: recording.h 2.12 2010/01/02 12:10:07 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECORDING_H
|
#ifndef __RECORDING_H
|
||||||
@ -253,7 +253,7 @@ public:
|
|||||||
class cFileName {
|
class cFileName {
|
||||||
private:
|
private:
|
||||||
cUnbufferedFile *file;
|
cUnbufferedFile *file;
|
||||||
int fileNumber;
|
uint16_t fileNumber;
|
||||||
char *fileName, *pFileNumber;
|
char *fileName, *pFileNumber;
|
||||||
bool record;
|
bool record;
|
||||||
bool blocking;
|
bool blocking;
|
||||||
@ -262,11 +262,11 @@ public:
|
|||||||
cFileName(const char *FileName, bool Record, bool Blocking = false, bool IsPesRecording = false);
|
cFileName(const char *FileName, bool Record, bool Blocking = false, bool IsPesRecording = false);
|
||||||
~cFileName();
|
~cFileName();
|
||||||
const char *Name(void) { return fileName; }
|
const char *Name(void) { return fileName; }
|
||||||
int Number(void) { return fileNumber; }
|
uint16_t Number(void) { return fileNumber; }
|
||||||
bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion);
|
bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion);
|
||||||
cUnbufferedFile *Open(void);
|
cUnbufferedFile *Open(void);
|
||||||
void Close(void);
|
void Close(void);
|
||||||
cUnbufferedFile *SetOffset(int Number, off_t Offset = 0);
|
cUnbufferedFile *SetOffset(int Number, off_t Offset = 0); // yes, Number is int for easier internal calculating
|
||||||
cUnbufferedFile *NextFile(void);
|
cUnbufferedFile *NextFile(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -285,4 +285,6 @@ char *ExchangeChars(char *s, bool ToFileSystem);
|
|||||||
// be modified and may be reallocated if more space is needed. The return
|
// be modified and may be reallocated if more space is needed. The return
|
||||||
// value points to the resulting string, which may be different from s.
|
// value points to the resulting string, which may be different from s.
|
||||||
|
|
||||||
|
bool GenerateIndex(const char *FileName);
|
||||||
|
|
||||||
#endif //__RECORDING_H
|
#endif //__RECORDING_H
|
||||||
|
8
remote.c
8
remote.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remote.c 2.0 2008/02/23 14:14:46 kls Exp $
|
* $Id: remote.c 2.1 2009/12/06 12:08:03 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
@ -287,7 +287,9 @@ int cKbdRemote::MapCodeToFunc(uint64_t Code)
|
|||||||
if (p->code == Code)
|
if (p->code == Code)
|
||||||
return p->func;
|
return p->func;
|
||||||
}
|
}
|
||||||
return (Code <= 0xFF) ? Code : kfNone;
|
if (Code <= 0xFF)
|
||||||
|
return Code;
|
||||||
|
return kfNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cKbdRemote::ReadKey(void)
|
int cKbdRemote::ReadKey(void)
|
||||||
@ -337,9 +339,11 @@ uint64_t cKbdRemote::ReadKeySequence(void)
|
|||||||
k |= key1 & 0xFF;
|
k |= key1 & 0xFF;
|
||||||
} while (key1 != 0x7E);
|
} while (key1 != 0x7E);
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
40
remux.c
40
remux.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remux.c 2.29 2009/11/22 11:23:27 kls Exp $
|
* $Id: remux.c 2.37 2009/12/29 15:56:33 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "remux.h"
|
#include "remux.h"
|
||||||
@ -295,7 +295,7 @@ void cPatPmtGenerator::GeneratePmt(cChannel *Channel)
|
|||||||
numPmtPackets = 0;
|
numPmtPackets = 0;
|
||||||
if (Channel) {
|
if (Channel) {
|
||||||
int Vpid = Channel->Vpid();
|
int Vpid = Channel->Vpid();
|
||||||
int Ppid = Channel->Ppid();
|
int Ppid = 0x1FFF; // no PCR pid
|
||||||
uchar *p = buf;
|
uchar *p = buf;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
p[i++] = 0x02; // table id
|
p[i++] = 0x02; // table id
|
||||||
@ -486,6 +486,11 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
int NumDpids = 0;
|
int NumDpids = 0;
|
||||||
int NumSpids = 0;
|
int NumSpids = 0;
|
||||||
vpid = vtype = 0;
|
vpid = vtype = 0;
|
||||||
|
apids[0] = 0;
|
||||||
|
dpids[0] = 0;
|
||||||
|
spids[0] = 0;
|
||||||
|
atypes[0] = 0;
|
||||||
|
dtypes[0] = 0;
|
||||||
SI::PMT::Stream stream;
|
SI::PMT::Stream stream;
|
||||||
for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
|
for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
|
||||||
dbgpatpmt(" stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());
|
dbgpatpmt(" stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());
|
||||||
@ -496,17 +501,20 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
vpid = stream.getPid();
|
vpid = stream.getPid();
|
||||||
vtype = stream.getStreamType();
|
vtype = stream.getStreamType();
|
||||||
break;
|
break;
|
||||||
|
case 0x03: // STREAMTYPE_11172_AUDIO
|
||||||
case 0x04: // STREAMTYPE_13818_AUDIO
|
case 0x04: // STREAMTYPE_13818_AUDIO
|
||||||
{
|
{
|
||||||
if (NumApids < MAXAPIDS) {
|
if (NumApids < MAXAPIDS) {
|
||||||
char ALangs[MAXLANGCODE2] = "";
|
apids[NumApids] = stream.getPid();
|
||||||
|
atypes[NumApids] = stream.getStreamType();
|
||||||
|
*alangs[NumApids] = 0;
|
||||||
SI::Descriptor *d;
|
SI::Descriptor *d;
|
||||||
for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
|
for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
|
||||||
switch (d->getDescriptorTag()) {
|
switch (d->getDescriptorTag()) {
|
||||||
case SI::ISO639LanguageDescriptorTag: {
|
case SI::ISO639LanguageDescriptorTag: {
|
||||||
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
|
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
|
||||||
SI::ISO639LanguageDescriptor::Language l;
|
SI::ISO639LanguageDescriptor::Language l;
|
||||||
char *s = ALangs;
|
char *s = alangs[NumApids];
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (SI::Loop::Iterator it; ld->languageLoop.getNext(l, it); ) {
|
for (SI::Loop::Iterator it; ld->languageLoop.getNext(l, it); ) {
|
||||||
if (*ld->languageCode != '-') { // some use "---" to indicate "none"
|
if (*ld->languageCode != '-') { // some use "---" to indicate "none"
|
||||||
@ -526,8 +534,9 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
if (updatePrimaryDevice)
|
if (updatePrimaryDevice)
|
||||||
cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs);
|
cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, apids[NumApids], alangs[NumApids]);
|
||||||
NumApids++;
|
NumApids++;
|
||||||
|
apids[NumApids]= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -545,14 +554,21 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
case SI::SubtitlingDescriptorTag:
|
case SI::SubtitlingDescriptorTag:
|
||||||
dbgpatpmt(" subtitling");
|
dbgpatpmt(" subtitling");
|
||||||
if (NumSpids < MAXSPIDS) {
|
if (NumSpids < MAXSPIDS) {
|
||||||
|
spids[NumSpids] = stream.getPid();
|
||||||
|
*slangs[NumSpids] = 0;
|
||||||
|
subtitlingTypes[NumSpids] = 0;
|
||||||
|
compositionPageIds[NumSpids] = 0;
|
||||||
|
ancillaryPageIds[NumSpids] = 0;
|
||||||
SI::SubtitlingDescriptor *sd = (SI::SubtitlingDescriptor *)d;
|
SI::SubtitlingDescriptor *sd = (SI::SubtitlingDescriptor *)d;
|
||||||
SI::SubtitlingDescriptor::Subtitling sub;
|
SI::SubtitlingDescriptor::Subtitling sub;
|
||||||
char SLangs[MAXLANGCODE2] = "";
|
char *s = slangs[NumSpids];
|
||||||
char *s = SLangs;
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (SI::Loop::Iterator it; sd->subtitlingLoop.getNext(sub, it); ) {
|
for (SI::Loop::Iterator it; sd->subtitlingLoop.getNext(sub, it); ) {
|
||||||
if (sub.languageCode[0]) {
|
if (sub.languageCode[0]) {
|
||||||
dbgpatpmt(" '%s'", sub.languageCode);
|
dbgpatpmt(" '%s'", sub.languageCode);
|
||||||
|
subtitlingTypes[NumSpids] = sub.getSubtitlingType();
|
||||||
|
compositionPageIds[NumSpids] = sub.getCompositionPageId();
|
||||||
|
ancillaryPageIds[NumSpids] = sub.getAncillaryPageId();
|
||||||
if (n > 0)
|
if (n > 0)
|
||||||
*s++ = '+';
|
*s++ = '+';
|
||||||
strn0cpy(s, I18nNormalizeLanguageCode(sub.languageCode), MAXLANGCODE1);
|
strn0cpy(s, I18nNormalizeLanguageCode(sub.languageCode), MAXLANGCODE1);
|
||||||
@ -562,8 +578,9 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (updatePrimaryDevice)
|
if (updatePrimaryDevice)
|
||||||
cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs);
|
cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, spids[NumSpids], slangs[NumSpids]);
|
||||||
NumSpids++;
|
NumSpids++;
|
||||||
|
spids[NumSpids]= 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SI::ISO639LanguageDescriptorTag: {
|
case SI::ISO639LanguageDescriptorTag: {
|
||||||
@ -578,13 +595,18 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
}
|
}
|
||||||
if (dpid) {
|
if (dpid) {
|
||||||
if (NumDpids < MAXDPIDS) {
|
if (NumDpids < MAXDPIDS) {
|
||||||
|
dpids[NumDpids] = dpid;
|
||||||
|
dtypes[NumDpids] = stream.getStreamType();
|
||||||
|
strn0cpy(dlangs[NumDpids], lang, sizeof(dlangs[NumDpids]));
|
||||||
if (updatePrimaryDevice)
|
if (updatePrimaryDevice)
|
||||||
cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
|
cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
|
||||||
NumDpids++;
|
NumDpids++;
|
||||||
|
dpids[NumDpids]= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
dbgpatpmt("\n");
|
dbgpatpmt("\n");
|
||||||
if (updatePrimaryDevice) {
|
if (updatePrimaryDevice) {
|
||||||
@ -599,7 +621,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
pmtSize = 0;
|
pmtSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cPatPmtParser::GetVersions(int &PatVersion, int &PmtVersion)
|
bool cPatPmtParser::GetVersions(int &PatVersion, int &PmtVersion) const
|
||||||
{
|
{
|
||||||
PatVersion = patVersion;
|
PatVersion = patVersion;
|
||||||
PmtVersion = pmtVersion;
|
PmtVersion = pmtVersion;
|
||||||
|
35
remux.h
35
remux.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remux.h 2.20 2009/11/21 15:55:34 kls Exp $
|
* $Id: remux.h 2.23 2009/12/29 15:53:54 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __REMUX_H
|
#ifndef __REMUX_H
|
||||||
@ -214,6 +214,17 @@ private:
|
|||||||
int pmtPid;
|
int pmtPid;
|
||||||
int vpid;
|
int vpid;
|
||||||
int vtype;
|
int vtype;
|
||||||
|
int apids[MAXAPIDS + 1]; // list is zero-terminated
|
||||||
|
int atypes[MAXAPIDS + 1]; // list is zero-terminated
|
||||||
|
char alangs[MAXAPIDS][MAXLANGCODE2];
|
||||||
|
int dpids[MAXDPIDS + 1]; // list is zero-terminated
|
||||||
|
int dtypes[MAXDPIDS + 1]; // list is zero-terminated
|
||||||
|
char dlangs[MAXDPIDS][MAXLANGCODE2];
|
||||||
|
int spids[MAXSPIDS + 1]; // list is zero-terminated
|
||||||
|
char slangs[MAXSPIDS][MAXLANGCODE2];
|
||||||
|
uchar subtitlingTypes[MAXSPIDS];
|
||||||
|
uint16_t compositionPageIds[MAXSPIDS];
|
||||||
|
uint16_t ancillaryPageIds[MAXSPIDS];
|
||||||
bool updatePrimaryDevice;
|
bool updatePrimaryDevice;
|
||||||
protected:
|
protected:
|
||||||
int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; }
|
int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; }
|
||||||
@ -232,18 +243,32 @@ public:
|
|||||||
///< are delivered to the parser through several subsequent calls to
|
///< are delivered to the parser through several subsequent calls to
|
||||||
///< ParsePmt(). The whole PMT data will be processed once the last packet
|
///< ParsePmt(). The whole PMT data will be processed once the last packet
|
||||||
///< has been received.
|
///< has been received.
|
||||||
bool GetVersions(int &PatVersion, int &PmtVersion);
|
bool GetVersions(int &PatVersion, int &PmtVersion) const;
|
||||||
///< Returns true if a valid PAT/PMT has been parsed and stores
|
///< Returns true if a valid PAT/PMT has been parsed and stores
|
||||||
///< the current version numbers in the given variables.
|
///< the current version numbers in the given variables.
|
||||||
int PmtPid(void) { return pmtPid; }
|
int PmtPid(void) const { return pmtPid; }
|
||||||
///< Returns the PMT pid as defined by the current PAT.
|
///< Returns the PMT pid as defined by the current PAT.
|
||||||
///< If no PAT has been received yet, -1 will be returned.
|
///< If no PAT has been received yet, -1 will be returned.
|
||||||
int Vpid(void) { return vpid; }
|
int Vpid(void) const { return vpid; }
|
||||||
///< Returns the video pid as defined by the current PMT, or 0 if no video
|
///< Returns the video pid as defined by the current PMT, or 0 if no video
|
||||||
///< pid has been detected, yet.
|
///< pid has been detected, yet.
|
||||||
int Vtype(void) { return vtype; }
|
int Vtype(void) const { return vtype; }
|
||||||
///< Returns the video stream type as defined by the current PMT, or 0 if no video
|
///< Returns the video stream type as defined by the current PMT, or 0 if no video
|
||||||
///< stream type has been detected, yet.
|
///< stream type has been detected, yet.
|
||||||
|
const int *Apids(void) const { return apids; }
|
||||||
|
const int *Dpids(void) const { return dpids; }
|
||||||
|
const int *Spids(void) const { return spids; }
|
||||||
|
int Apid(int i) const { return (0 <= i && i < MAXAPIDS) ? apids[i] : 0; }
|
||||||
|
int Dpid(int i) const { return (0 <= i && i < MAXDPIDS) ? dpids[i] : 0; }
|
||||||
|
int Spid(int i) const { return (0 <= i && i < MAXSPIDS) ? spids[i] : 0; }
|
||||||
|
int Atype(int i) const { return (0 <= i && i < MAXAPIDS) ? atypes[i] : 0; }
|
||||||
|
int Dtype(int i) const { return (0 <= i && i < MAXDPIDS) ? dtypes[i] : 0; }
|
||||||
|
const char *Alang(int i) const { return (0 <= i && i < MAXAPIDS) ? alangs[i] : ""; }
|
||||||
|
const char *Dlang(int i) const { return (0 <= i && i < MAXDPIDS) ? dlangs[i] : ""; }
|
||||||
|
const char *Slang(int i) const { return (0 <= i && i < MAXSPIDS) ? slangs[i] : ""; }
|
||||||
|
uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
|
||||||
|
uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
|
||||||
|
uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
|
||||||
};
|
};
|
||||||
|
|
||||||
// TS to PES converter:
|
// TS to PES converter:
|
||||||
|
13
sdt.c
13
sdt.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: sdt.c 2.1 2008/04/12 13:33:55 kls Exp $
|
* $Id: sdt.c 2.4 2009/12/23 16:02:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sdt.h"
|
#include "sdt.h"
|
||||||
@ -65,16 +65,18 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
char *ps = compactspace(ShortNameBuf);
|
char *ps = compactspace(ShortNameBuf);
|
||||||
if (!*ps && cSource::IsCable(Source())) {
|
if (!*ps && cSource::IsCable(Source())) {
|
||||||
// Some cable providers don't mark short channel names according to the
|
// Some cable providers don't mark short channel names according to the
|
||||||
// standard, but rather go their own way and use "name>short name" or
|
// standard, but rather go their own way and use "name>short name":
|
||||||
// "name, short name":
|
|
||||||
char *p = strchr(pn, '>'); // fix for UPC Wien
|
char *p = strchr(pn, '>'); // fix for UPC Wien
|
||||||
if (!p)
|
|
||||||
p = strchr(pn, ','); // fix for "Kabel Deutschland"
|
|
||||||
if (p && p > pn) {
|
if (p && p > pn) {
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
strcpy(ShortNameBuf, skipspace(p));
|
strcpy(ShortNameBuf, skipspace(p));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Avoid ',' in short name (would cause trouble in channels.conf):
|
||||||
|
for (char *p = ShortNameBuf; *p; p++) {
|
||||||
|
if (*p == ',')
|
||||||
|
*p = '.';
|
||||||
|
}
|
||||||
sd->providerName.getText(ProviderNameBuf, sizeof(ProviderNameBuf));
|
sd->providerName.getText(ProviderNameBuf, sizeof(ProviderNameBuf));
|
||||||
char *pp = compactspace(ProviderNameBuf);
|
char *pp = compactspace(ProviderNameBuf);
|
||||||
if (channel) {
|
if (channel) {
|
||||||
@ -92,6 +94,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
patFilter->Trigger();
|
patFilter->Trigger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skinclassic.c 2.0 2008/02/23 10:31:58 kls Exp $
|
* $Id: skinclassic.c 2.3 2010/01/03 14:55:10 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "skinclassic.h"
|
#include "skinclassic.h"
|
||||||
@ -345,6 +345,12 @@ void cSkinClassicDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
osd->DrawText(x3 - w, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), font, w);
|
osd->DrawText(x3 - w, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), font, w);
|
||||||
}
|
}
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Event->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Event->GetParentalRatingString());
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
int w = font->Width(buffer);
|
||||||
|
osd->DrawText(x3 - w, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), font, w);
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
ts.Set(osd, x1, y, x2 - x1, y3 - y, Event->Title(), font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground));
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, Event->Title(), font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
@ -353,6 +359,14 @@ void cSkinClassicDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
ts.Set(osd, x1, y, x2 - x1, y3 - y, Event->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, Event->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Event->Contents(i); i++) {
|
||||||
|
const char *s = Event->ContentToString(Event->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, s, font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
|
y += ts.Height();
|
||||||
|
}
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
if (!isempty(Event->Description())) {
|
if (!isempty(Event->Description())) {
|
||||||
textScroller.Set(osd, x1, y, x2 - x1, y3 - y, Event->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground));
|
textScroller.Set(osd, x1, y, x2 - x1, y3 - y, Event->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground));
|
||||||
@ -372,6 +386,12 @@ void cSkinClassicDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
||||||
ts.Set(osd, x1, y, x2 - x1, y3 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground));
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Info->GetEvent()->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString());
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
int w = font->Width(buffer);
|
||||||
|
osd->DrawText(x3 - w, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), font, w);
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
const char *Title = Info->Title();
|
const char *Title = Info->Title();
|
||||||
if (isempty(Title))
|
if (isempty(Title))
|
||||||
@ -383,6 +403,14 @@ void cSkinClassicDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
ts.Set(osd, x1, y, x2 - x1, y3 - y, Info->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, Info->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Info->GetEvent()->Contents(i); i++) {
|
||||||
|
const char *s = Info->GetEvent()->ContentToString(Info->GetEvent()->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
ts.Set(osd, x1, y, x2 - x1, y3 - y, s, font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
|
y += ts.Height();
|
||||||
|
}
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
if (!isempty(Info->Description())) {
|
if (!isempty(Info->Description())) {
|
||||||
textScroller.Set(osd, x1, y, x2 - x1, y3 - y, Info->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground));
|
textScroller.Set(osd, x1, y, x2 - x1, y3 - y, Info->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground));
|
||||||
|
37
skinsttng.c
37
skinsttng.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skinsttng.c 2.0 2008/02/23 10:23:44 kls Exp $
|
* $Id: skinsttng.c 2.4 2010/01/03 14:51:35 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Star Trek: The Next Generation® is a registered trademark of Paramount Pictures
|
// Star Trek: The Next Generation® is a registered trademark of Paramount Pictures
|
||||||
@ -593,6 +593,15 @@ void cSkinSTTNGDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
osd->DrawEllipse (x6, y, x7 - 1, yb - 1, frameColor, 5);
|
osd->DrawEllipse (x6, y, x7 - 1, yb - 1, frameColor, 5);
|
||||||
}
|
}
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Event->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Event->GetParentalRatingString());
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
int w = font->Width(buffer);
|
||||||
|
osd->DrawText(x4 - w, y, buffer, Theme.Color(clrMenuEventVps), frameColor, font, w);
|
||||||
|
int yb = y + font->Height();
|
||||||
|
osd->DrawRectangle(x5, y, x6 - 1, yb - 1, frameColor);
|
||||||
|
osd->DrawEllipse (x6, y, x7 - 1, yb - 1, frameColor, 5);
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->Title(), font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground));
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->Title(), font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
@ -601,6 +610,14 @@ void cSkinSTTNGDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Event->Contents(i); i++) {
|
||||||
|
const char *s = Event->ContentToString(Event->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, s, font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
|
y += ts.Height();
|
||||||
|
}
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
if (!isempty(Event->Description())) {
|
if (!isempty(Event->Description())) {
|
||||||
int yt = y;
|
int yt = y;
|
||||||
@ -627,6 +644,15 @@ void cSkinSTTNGDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
|
||||||
ts.Set(osd, xl, y, x4 - xl, y4 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground));
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
|
if (Info->GetEvent()->ParentalRating()) {
|
||||||
|
cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString());
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
int w = font->Width(buffer);
|
||||||
|
osd->DrawText(x4 - w, y, buffer, Theme.Color(clrMenuEventVps), frameColor, font, w);
|
||||||
|
int yb = y + font->Height();
|
||||||
|
osd->DrawRectangle(x5, y, x6 - 1, yb - 1, frameColor);
|
||||||
|
osd->DrawEllipse (x6, y, x7 - 1, yb - 1, frameColor, 5);
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
const char *Title = Info->Title();
|
const char *Title = Info->Title();
|
||||||
if (isempty(Title))
|
if (isempty(Title))
|
||||||
@ -638,6 +664,14 @@ void cSkinSTTNGDisplayMenu::SetRecording(const cRecording *Recording)
|
|||||||
ts.Set(osd, xl, y, x4 - xl, y4 - y, Info->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, Info->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
}
|
}
|
||||||
|
for (int i = 0; Info->GetEvent()->Contents(i); i++) {
|
||||||
|
const char *s = Info->GetEvent()->ContentToString(Info->GetEvent()->Contents(i));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
const cFont *font = cFont::GetFont(fontSml);
|
||||||
|
ts.Set(osd, xl, y, x4 - xl, y4 - y, s, font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground));
|
||||||
|
y += ts.Height();
|
||||||
|
}
|
||||||
|
}
|
||||||
y += font->Height();
|
y += font->Height();
|
||||||
if (!isempty(Info->Description())) {
|
if (!isempty(Info->Description())) {
|
||||||
int yt = y;
|
int yt = y;
|
||||||
@ -1068,6 +1102,7 @@ void cSkinSTTNGDisplayTracks::SetAudioChannel(int AudioChannel)
|
|||||||
case 0: bm = &bmAudioStereo; break;
|
case 0: bm = &bmAudioStereo; break;
|
||||||
case 1: bm = &bmAudioLeft; break;
|
case 1: bm = &bmAudioLeft; break;
|
||||||
case 2: bm = &bmAudioRight; break;
|
case 2: bm = &bmAudioRight; break;
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
if (bm)
|
if (bm)
|
||||||
osd->DrawBitmap(x3 + 5, y6 + (y7 - y6 - bm->Height()) / 2, *bm, Theme.Color(clrChannelSymbolOn), frameColor);
|
osd->DrawBitmap(x3 + 5, y6 + (y7 - y6 - bm->Height()) / 2, *bm, Theme.Color(clrChannelSymbolOn), frameColor);
|
||||||
|
@ -174,12 +174,13 @@ S110W DirecTV 5 & Echostar 8/10
|
|||||||
S111.1W Anik F2
|
S111.1W Anik F2
|
||||||
S113W SatMex 6
|
S113W SatMex 6
|
||||||
S116.8W SatMex 5
|
S116.8W SatMex 5
|
||||||
S119W Anik F3 & Echostar 7 & DirecTV 7S
|
S118.8W Anik F3
|
||||||
|
S119W Echostar 7 & DirecTV 7S
|
||||||
S121W Echostar 9 & Galaxy 23
|
S121W Echostar 9 & Galaxy 23
|
||||||
S123W Galaxy 18
|
S123W Galaxy 18
|
||||||
S125W Galaxy 14
|
S125W Galaxy 14
|
||||||
S127W Galaxy 13/Horizons 1
|
S127W Galaxy 13/Horizons 1
|
||||||
S129W Echostar 5 & Galaxy 27
|
S129W Ciel 2 & Galaxy 27
|
||||||
S131W AMC 11
|
S131W AMC 11
|
||||||
S133W Galaxy15
|
S133W Galaxy15
|
||||||
S135W AMC 10
|
S135W AMC 10
|
||||||
|
11
svdrp.c
11
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 2.6 2009/10/18 14:08:58 kls Exp $
|
* $Id: svdrp.c 2.7 2010/01/03 15:41:26 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -179,6 +179,8 @@ bool cPUTEhandler::Process(const char *s)
|
|||||||
// --- cSVDRP ----------------------------------------------------------------
|
// --- cSVDRP ----------------------------------------------------------------
|
||||||
|
|
||||||
#define MAXHELPTOPIC 10
|
#define MAXHELPTOPIC 10
|
||||||
|
#define EITDISABLETIME 10 // seconds until EIT processing is enabled again after a CLRE command
|
||||||
|
// adjust the help for CLRE accordingly if changing this!
|
||||||
|
|
||||||
const char *HelpPages[] = {
|
const char *HelpPages[] = {
|
||||||
"CHAN [ + | - | <number> | <name> | <id> ]\n"
|
"CHAN [ + | - | <number> | <name> | <id> ]\n"
|
||||||
@ -187,7 +189,10 @@ const char *HelpPages[] = {
|
|||||||
" it returns the current channel number and name.",
|
" it returns the current channel number and name.",
|
||||||
"CLRE [ <number> | <name> | <id> ]\n"
|
"CLRE [ <number> | <name> | <id> ]\n"
|
||||||
" Clear the EPG list of the given channel number, name or id.\n"
|
" Clear the EPG list of the given channel number, name or id.\n"
|
||||||
" Without option it clears the entire EPG list.",
|
" Without option it clears the entire EPG list.\n"
|
||||||
|
" After a CLRE command, no further EPG processing is done for 10\n"
|
||||||
|
" seconds, so that data sent with subsequent PUTE commands doesn't\n"
|
||||||
|
" interfere with data from the broadcasters.",
|
||||||
"DELC <number>\n"
|
"DELC <number>\n"
|
||||||
" Delete channel.",
|
" Delete channel.",
|
||||||
"DELR <number>\n"
|
"DELR <number>\n"
|
||||||
@ -574,6 +579,7 @@ void cSVDRP::CmdCLRE(const char *Option)
|
|||||||
}
|
}
|
||||||
if (Schedule) {
|
if (Schedule) {
|
||||||
Schedule->Cleanup(INT_MAX);
|
Schedule->Cleanup(INT_MAX);
|
||||||
|
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
|
||||||
Reply(250, "EPG data of channel \"%s\" cleared", Option);
|
Reply(250, "EPG data of channel \"%s\" cleared", Option);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -589,6 +595,7 @@ void cSVDRP::CmdCLRE(const char *Option)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cSchedules::ClearAll();
|
cSchedules::ClearAll();
|
||||||
|
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
|
||||||
Reply(250, "EPG data cleared");
|
Reply(250, "EPG data cleared");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
tools.c
9
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.c 2.4 2009/11/06 15:21:17 kls Exp $
|
* $Id: tools.c 2.6 2009/12/23 15:12:15 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
@ -633,6 +633,7 @@ uint Utf8CharGet(const char *s, int Length)
|
|||||||
case 2: return ((*s & 0x1F) << 6) | (*(s + 1) & 0x3F);
|
case 2: return ((*s & 0x1F) << 6) | (*(s + 1) & 0x3F);
|
||||||
case 3: return ((*s & 0x0F) << 12) | ((*(s + 1) & 0x3F) << 6) | (*(s + 2) & 0x3F);
|
case 3: return ((*s & 0x0F) << 12) | ((*(s + 1) & 0x3F) << 6) | (*(s + 2) & 0x3F);
|
||||||
case 4: return ((*s & 0x07) << 18) | ((*(s + 1) & 0x3F) << 12) | ((*(s + 2) & 0x3F) << 6) | (*(s + 3) & 0x3F);
|
case 4: return ((*s & 0x07) << 18) | ((*(s + 1) & 0x3F) << 12) | ((*(s + 2) & 0x3F) << 6) | (*(s + 3) & 0x3F);
|
||||||
|
default: ;
|
||||||
}
|
}
|
||||||
return *s;
|
return *s;
|
||||||
}
|
}
|
||||||
@ -768,10 +769,10 @@ char *cCharSetConv::systemCharacterTable = NULL;
|
|||||||
cCharSetConv::cCharSetConv(const char *FromCode, const char *ToCode)
|
cCharSetConv::cCharSetConv(const char *FromCode, const char *ToCode)
|
||||||
{
|
{
|
||||||
if (!FromCode)
|
if (!FromCode)
|
||||||
FromCode = systemCharacterTable;
|
FromCode = systemCharacterTable ? systemCharacterTable : "UTF-8";
|
||||||
if (!ToCode)
|
if (!ToCode)
|
||||||
ToCode = "UTF-8";
|
ToCode = "UTF-8";
|
||||||
cd = (FromCode && ToCode) ? iconv_open(ToCode, FromCode) : (iconv_t)-1;
|
cd = iconv_open(ToCode, FromCode);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
length = 0;
|
length = 0;
|
||||||
}
|
}
|
||||||
@ -942,8 +943,8 @@ cString WeekDayNameFull(int WeekDay)
|
|||||||
case 4: return tr("Friday");
|
case 4: return tr("Friday");
|
||||||
case 5: return tr("Saturday");
|
case 5: return tr("Saturday");
|
||||||
case 6: return tr("Sunday");
|
case 6: return tr("Sunday");
|
||||||
|
default: return "???";
|
||||||
}
|
}
|
||||||
return "???";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cString WeekDayNameFull(time_t t)
|
cString WeekDayNameFull(time_t t)
|
||||||
|
17
tools.h
17
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.h 2.2 2009/04/14 20:41:39 kls Exp $
|
* $Id: tools.h 2.4 2009/12/23 15:14:39 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TOOLS_H
|
#ifndef __TOOLS_H
|
||||||
@ -13,7 +13,9 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <float.h>
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
|
#include <math.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -60,7 +62,7 @@ void syslog_with_tid(int priority, const char *format, ...) __attribute__ ((form
|
|||||||
int BCD2INT(int x);
|
int BCD2INT(int x);
|
||||||
|
|
||||||
// Unfortunately there are no platform independent macros for unaligned
|
// Unfortunately there are no platform independent macros for unaligned
|
||||||
// access. so we do it this way:
|
// access, so we do it this way:
|
||||||
|
|
||||||
template<class T> inline T get_unaligned(T *p)
|
template<class T> inline T get_unaligned(T *p)
|
||||||
{
|
{
|
||||||
@ -74,6 +76,14 @@ template<class T> inline void put_unaligned(unsigned int v, T* p)
|
|||||||
((s *)p)->v = v;
|
((s *)p)->v = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Comparing doubles for equality is unsafe, but unfortunately we can't
|
||||||
|
// overwrite operator==(double, double), so this will have to do:
|
||||||
|
|
||||||
|
inline bool DoubleEqual(double a, double b)
|
||||||
|
{
|
||||||
|
return fabs(a - b) <= DBL_EPSILON;
|
||||||
|
}
|
||||||
|
|
||||||
// When handling strings that might contain UTF-8 characters, it may be necessary
|
// When handling strings that might contain UTF-8 characters, it may be necessary
|
||||||
// to process a "symbol" that consists of several actual character bytes. The
|
// to process a "symbol" that consists of several actual character bytes. The
|
||||||
// following functions allow transparently accessing a "char *" string without
|
// following functions allow transparently accessing a "char *" string without
|
||||||
@ -132,7 +142,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
cCharSetConv(const char *FromCode = NULL, const char *ToCode = NULL);
|
cCharSetConv(const char *FromCode = NULL, const char *ToCode = NULL);
|
||||||
///< Sets up a character set converter to convert from FromCode to ToCode.
|
///< Sets up a character set converter to convert from FromCode to ToCode.
|
||||||
///< If FromCode is NULL, the previously set systemCharacterTable is used.
|
///< If FromCode is NULL, the previously set systemCharacterTable is used
|
||||||
|
///< (or "UTF-8" if no systemCharacterTable has been set).
|
||||||
///< If ToCode is NULL, "UTF-8" is used.
|
///< If ToCode is NULL, "UTF-8" is used.
|
||||||
~cCharSetConv();
|
~cCharSetConv();
|
||||||
const char *Convert(const char *From, char *To = NULL, size_t ToLength = 0);
|
const char *Convert(const char *From, char *To = NULL, size_t ToLength = 0);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: transfer.c 2.3 2009/01/23 15:34:26 kls Exp $
|
* $Id: transfer.c 2.4 2009/12/06 14:22:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "transfer.h"
|
#include "transfer.h"
|
||||||
@ -45,7 +45,6 @@ void cTransfer::Receive(uchar *Data, int Length)
|
|||||||
for (int i = 0; i < 100; i++) {
|
for (int i = 0; i < 100; i++) {
|
||||||
if (PlayTs(Data, Length) > 0)
|
if (PlayTs(Data, Length) > 0)
|
||||||
return;
|
return;
|
||||||
fprintf(stderr, "-");//XXX just for testing - remove when stable
|
|
||||||
cCondWait::SleepMs(10);
|
cCondWait::SleepMs(10);
|
||||||
}
|
}
|
||||||
esyslog("ERROR: TS packet not accepted in Transfer Mode");
|
esyslog("ERROR: TS packet not accepted in Transfer Mode");
|
||||||
|
18
vdr.1
18
vdr.1
@ -8,7 +8,7 @@
|
|||||||
.\" License as specified in the file COPYING that comes with the
|
.\" License as specified in the file COPYING that comes with the
|
||||||
.\" vdr distribution.
|
.\" vdr distribution.
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: vdr.1 2.3 2009/10/18 14:09:03 kls Exp $
|
.\" $Id: vdr.1 2.4 2010/01/02 12:08:40 kls Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH vdr 1 "10 Feb 2008" "1.6" "Video Disk Recorder"
|
.TH vdr 1 "10 Feb 2008" "1.6" "Video Disk Recorder"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@ -54,6 +54,11 @@ Run in daemon mode (implies \-\-no\-kbd).
|
|||||||
Use only the given DVB device (\fInum\fR = 0, 1, 2...).
|
Use only the given DVB device (\fInum\fR = 0, 1, 2...).
|
||||||
There may be several \fB\-D\fR options (by default all DVB devices will be used).
|
There may be several \fB\-D\fR options (by default all DVB devices will be used).
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-\-edit= rec
|
||||||
|
Edit the given recording.
|
||||||
|
\fIrec\fR must be the full path name of an existing recording.
|
||||||
|
The program will return immediately after editing the recording.
|
||||||
|
.TP
|
||||||
.BI \-E\ file ,\ \-\-epgfile= file
|
.BI \-E\ file ,\ \-\-epgfile= file
|
||||||
Write the EPG data into the given \fIfile\fR
|
Write the EPG data into the given \fIfile\fR
|
||||||
(default is \fI/video/epg.data\fR).
|
(default is \fI/video/epg.data\fR).
|
||||||
@ -61,6 +66,17 @@ Use \fB\-E\-\fR to disable this.
|
|||||||
If \fIfile\fR is a directory, the file \fIepg.data\fR
|
If \fIfile\fR is a directory, the file \fIepg.data\fR
|
||||||
will be created in that directory.
|
will be created in that directory.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-\-genindex= rec
|
||||||
|
Generate the index file for the given recording.
|
||||||
|
\fIrec\fR must be the full path name of an existing recording.
|
||||||
|
The recording must be in TS format.
|
||||||
|
If the recording already has an index file, it will be deleted
|
||||||
|
before creating the new one.
|
||||||
|
The program will return immediately after generating the index.
|
||||||
|
Note that using this option while another instance of VDR is
|
||||||
|
currently replaying the given recording, or if the recording
|
||||||
|
has not been finished yet, may lead to unexpected results.
|
||||||
|
.TP
|
||||||
.BI \-g,\ \-\-grab= dir
|
.BI \-g,\ \-\-grab= dir
|
||||||
Write images from the SVDRP command GRAB into the
|
Write images from the SVDRP command GRAB into the
|
||||||
given directory \fIdir\fR. \fIdir\fR must be the full path name of an
|
given directory \fIdir\fR. \fIdir\fR must be the full path name of an
|
||||||
|
65
vdr.5
65
vdr.5
@ -8,7 +8,7 @@
|
|||||||
.\" License as specified in the file COPYING that comes with the
|
.\" License as specified in the file COPYING that comes with the
|
||||||
.\" vdr distribution.
|
.\" vdr distribution.
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: vdr.5 2.7 2009/10/18 14:09:07 kls Exp $
|
.\" $Id: vdr.5 2.11 2010/01/03 13:37:07 kls Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
|
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@ -45,7 +45,7 @@ Such a delimiter will not appear in the Channels menu.
|
|||||||
A \fBchannel definition\fR is a line with channel data, where the fields
|
A \fBchannel definition\fR is a line with channel data, where the fields
|
||||||
are separated by ':' characters. Example:
|
are separated by ':' characters. Example:
|
||||||
|
|
||||||
\fBRTL Television,RTL:12188:h:S19.2E:27500:163:104:105:0:12003:1:1089:0\fR
|
\fBRTL Television,RTL;RTL World:12187:hC34M2O0S0:S19.2E:27500:163=2:104=deu;106=deu:105:0:12003:1:1089:0\fR
|
||||||
|
|
||||||
The line number of a channel definition (not counting group separators,
|
The line number of a channel definition (not counting group separators,
|
||||||
and based on a possible previous '@...' parameter)
|
and based on a possible previous '@...' parameter)
|
||||||
@ -65,6 +65,10 @@ as in
|
|||||||
|
|
||||||
\fBRTL Television,RTL:...\fR
|
\fBRTL Television,RTL:...\fR
|
||||||
|
|
||||||
|
If the short name itself would contain a comma, it is replaced with a '.'.
|
||||||
|
Note that some long channel names may contain a comma, so the delimiting comma
|
||||||
|
is always the rightmost one.
|
||||||
|
|
||||||
If present, the name of the service provider or "bouquet" is appended
|
If present, the name of the service provider or "bouquet" is appended
|
||||||
to the channel name, separated by a semicolon, as in
|
to the channel name, separated by a semicolon, as in
|
||||||
|
|
||||||
@ -99,6 +103,47 @@ l l.
|
|||||||
\fBY\fR@hierarchY (0, 1, 2, 4)
|
\fBY\fR@hierarchY (0, 1, 2, 4)
|
||||||
.TE
|
.TE
|
||||||
|
|
||||||
|
\fBBandwidth:\fR The bandwidth of the channel in MHz (DVB-T only).
|
||||||
|
|
||||||
|
\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T).
|
||||||
|
For DVB-S/DVB-S2 this parameter specifies the inner FEC scheme.
|
||||||
|
12 = 1/2, 23 = 2/3, 34 = 3/4, ...
|
||||||
|
|
||||||
|
\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T only).
|
||||||
|
If no hierarchy is used, set to 0.
|
||||||
|
|
||||||
|
\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32.
|
||||||
|
|
||||||
|
\fBInversion:\fR Specifes whether the DVB frontend needs spectral inversion (DVB-T and DVB-C only). This is frontend specific, if in doubt, omit.
|
||||||
|
|
||||||
|
\fBModulation:\fR Specifies the modulation/constellation of the channel as follows:
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T)
|
||||||
|
\fB5\fR@8PSK (DVB-S2)
|
||||||
|
\fB6\fR@16APSK (DVB-S2)
|
||||||
|
\fB10\fR@VSB8 (ATSC aerial)
|
||||||
|
\fB11\fR@VSB16 (ATSC aerial)
|
||||||
|
\fB16\fR@QAM16 (DVB-T)
|
||||||
|
\fB64\fR@QAM64 (DVB-C, DVB-T)
|
||||||
|
\fB128\fR@QAM128 (DVB-C)
|
||||||
|
\fB256\fR@QAM256 (DVB-C)
|
||||||
|
.TE
|
||||||
|
|
||||||
|
\fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20),
|
||||||
|
35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35
|
||||||
|
|
||||||
|
\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 8 = 8k, 2 = 2k. If in doubt, try 8k.
|
||||||
|
|
||||||
|
\fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority.
|
||||||
|
If in doubt, try 0 (off). (DVB-T only).
|
||||||
|
|
||||||
|
\fBDelivery System:\fR The satellite delivery system (0 = DVB-S, 1 = DVB-S2).
|
||||||
|
|
||||||
|
\fBPolarization:\fR Satellite antenna polarization.
|
||||||
|
h = horizontal, v = vertical, r = circular right, l = circular left.
|
||||||
|
|
||||||
The polarization parameters have no integer numbers following them. This is for
|
The polarization parameters have no integer numbers following them. This is for
|
||||||
compatibility with files from older versions and also to keep the DVB-S entries
|
compatibility with files from older versions and also to keep the DVB-S entries
|
||||||
as simple as possible.
|
as simple as possible.
|
||||||
@ -107,8 +152,17 @@ The special value \fB999\fR is used for "automatic", which means the driver
|
|||||||
will automatically determine the proper value (if possible).
|
will automatically determine the proper value (if possible).
|
||||||
|
|
||||||
An example of a parameter field for a DVB-T channel might look like this:
|
An example of a parameter field for a DVB-T channel might look like this:
|
||||||
|
\fBB8C23D12G8M16T8Y0\fR
|
||||||
|
|
||||||
|
An example of a parameter field for a DVB-C channel might look like this:
|
||||||
|
\fBC0M64\fR
|
||||||
|
|
||||||
|
An example of a parameter field for a DVB-S channel might look like this:
|
||||||
|
\fBhC56M2O35S0\fR
|
||||||
|
|
||||||
|
An example of a parameter field for a DVB-S2 channel might look like this:
|
||||||
|
\fBhC910M2O35S1\fR
|
||||||
|
|
||||||
\fBB8C23D12M64T2G32Y0\fR
|
|
||||||
.TP
|
.TP
|
||||||
.B Source
|
.B Source
|
||||||
The signal source of this channel, as defined in the file \fIsources.conf\fR.
|
The signal source of this channel, as defined in the file \fIsources.conf\fR.
|
||||||
@ -641,6 +695,8 @@ l l.
|
|||||||
\fBT\fR@<title>
|
\fBT\fR@<title>
|
||||||
\fBS\fR@<short text>
|
\fBS\fR@<short text>
|
||||||
\fBD\fR@<description>
|
\fBD\fR@<description>
|
||||||
|
\fBG\fR@<genre> <genre>...
|
||||||
|
\fBR\fR@<parental rating>
|
||||||
\fBX\fR@<stream> <type> <language> <descr>
|
\fBX\fR@<stream> <type> <language> <descr>
|
||||||
\fBV\fR@<vps time>
|
\fBV\fR@<vps time>
|
||||||
\fBe\fR@
|
\fBe\fR@
|
||||||
@ -653,6 +709,7 @@ of one or more \fBC\fR...\fBc\fR (Channel) entries. Inside these any number of
|
|||||||
\fBE\fR...\fBe\fR (Event) entries are allowed.
|
\fBE\fR...\fBe\fR (Event) entries are allowed.
|
||||||
All other tags are optional (although every event
|
All other tags are optional (although every event
|
||||||
should at least have a \fBT\fR entry).
|
should at least have a \fBT\fR entry).
|
||||||
|
|
||||||
There may be several \fBX\fR tags, depending on the number of tracks (video, audio etc.)
|
There may be several \fBX\fR tags, depending on the number of tracks (video, audio etc.)
|
||||||
the event provides.
|
the event provides.
|
||||||
|
|
||||||
@ -669,6 +726,8 @@ l l.
|
|||||||
<title> @is the title of the event
|
<title> @is the title of the event
|
||||||
<short text> @is the short text of the event (typically the name of the episode etc.)
|
<short text> @is the short text of the event (typically the name of the episode etc.)
|
||||||
<description> @is the description of the event (any '|' characters will be interpreted as newlines)
|
<description> @is the description of the event (any '|' characters will be interpreted as newlines)
|
||||||
|
<genre> @is a two digit hex code, as defined in ETSI EN 300 468, table 28 (up to 4 genre codes are supported)
|
||||||
|
<parental rating>@is the minimum age of the intended audience
|
||||||
<stream> @is the stream content (1 = video, 2 = audio, 3 = subtitles, 4 = AC3)
|
<stream> @is the stream content (1 = video, 2 = audio, 3 = subtitles, 4 = AC3)
|
||||||
<type> @is the stream type according to ETSI EN 300 468
|
<type> @is the stream type according to ETSI EN 300 468
|
||||||
<language> @is the three letter language code (optionally two codes, separated by '+')
|
<language> @is the three letter language code (optionally two codes, separated by '+')
|
||||||
|
14
vdr.c
14
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.tvdr.de
|
* The project's page is at http://www.tvdr.de
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 2.12 2009/10/25 14:45:47 kls Exp $
|
* $Id: vdr.c 2.14 2010/01/02 11:52:40 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -220,7 +220,9 @@ int main(int argc, char *argv[])
|
|||||||
{ "config", required_argument, NULL, 'c' },
|
{ "config", required_argument, NULL, 'c' },
|
||||||
{ "daemon", no_argument, NULL, 'd' },
|
{ "daemon", no_argument, NULL, 'd' },
|
||||||
{ "device", required_argument, NULL, 'D' },
|
{ "device", required_argument, NULL, 'D' },
|
||||||
|
{ "edit", required_argument, NULL, 'e' | 0x100 },
|
||||||
{ "epgfile", required_argument, NULL, 'E' },
|
{ "epgfile", required_argument, NULL, 'E' },
|
||||||
|
{ "genindex", required_argument, NULL, 'g' | 0x100 },
|
||||||
{ "grab", required_argument, NULL, 'g' },
|
{ "grab", required_argument, NULL, 'g' },
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
{ "instance", required_argument, NULL, 'i' },
|
{ "instance", required_argument, NULL, 'i' },
|
||||||
@ -242,11 +244,11 @@ int main(int argc, char *argv[])
|
|||||||
{ "vfat", no_argument, NULL, 'v' | 0x100 },
|
{ "vfat", no_argument, NULL, 'v' | 0x100 },
|
||||||
{ "video", required_argument, NULL, 'v' },
|
{ "video", required_argument, NULL, 'v' },
|
||||||
{ "watchdog", required_argument, NULL, 'w' },
|
{ "watchdog", required_argument, NULL, 'w' },
|
||||||
{ NULL }
|
{ NULL, no_argument, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
while ((c = getopt_long(argc, argv, "a:c:dD:E:g:hi:l:L:mp:P:r:s:t:u:v:Vw:", long_options, NULL)) != -1) {
|
while ((c = getopt_long(argc, argv, "a:c:dD:e:E:g:hi:l:L:mp:P:r:s:t:u:v:Vw:", long_options, NULL)) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'a': AudioCommand = optarg;
|
case 'a': AudioCommand = optarg;
|
||||||
break;
|
break;
|
||||||
@ -263,8 +265,12 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stderr, "vdr: invalid DVB device number: %s\n", optarg);
|
fprintf(stderr, "vdr: invalid DVB device number: %s\n", optarg);
|
||||||
return 2;
|
return 2;
|
||||||
break;
|
break;
|
||||||
|
case 'e' | 0x100:
|
||||||
|
return CutRecording(optarg) ? 0 : 2;
|
||||||
case 'E': EpgDataFileName = (*optarg != '-' ? optarg : NULL);
|
case 'E': EpgDataFileName = (*optarg != '-' ? optarg : NULL);
|
||||||
break;
|
break;
|
||||||
|
case 'g' | 0x100:
|
||||||
|
return GenerateIndex(optarg) ? 0 : 2;
|
||||||
case 'g': cSVDRP::SetGrabImageDir(*optarg != '-' ? optarg : NULL);
|
case 'g': cSVDRP::SetGrabImageDir(*optarg != '-' ? optarg : NULL);
|
||||||
break;
|
break;
|
||||||
case 'h': DisplayHelp = true;
|
case 'h': DisplayHelp = true;
|
||||||
@ -406,11 +412,13 @@ int main(int argc, char *argv[])
|
|||||||
" -D NUM, --device=NUM use only the given DVB device (NUM = 0, 1, 2...)\n"
|
" -D NUM, --device=NUM use only the given DVB device (NUM = 0, 1, 2...)\n"
|
||||||
" there may be several -D options (default: all DVB\n"
|
" there may be several -D options (default: all DVB\n"
|
||||||
" devices will be used)\n"
|
" devices will be used)\n"
|
||||||
|
" --edit=REC cut recording REC and exit\n"
|
||||||
" -E FILE, --epgfile=FILE write the EPG data into the given FILE (default is\n"
|
" -E FILE, --epgfile=FILE write the EPG data into the given FILE (default is\n"
|
||||||
" '%s' in the video directory)\n"
|
" '%s' in the video directory)\n"
|
||||||
" '-E-' disables this\n"
|
" '-E-' disables this\n"
|
||||||
" if FILE is a directory, the default EPG file will be\n"
|
" if FILE is a directory, the default EPG file will be\n"
|
||||||
" created in that directory\n"
|
" created in that directory\n"
|
||||||
|
" --genindex=REC generate index for recording REC and exit\n"
|
||||||
" -g DIR, --grab=DIR write images from the SVDRP command GRAB into the\n"
|
" -g DIR, --grab=DIR write images from the SVDRP command GRAB into the\n"
|
||||||
" given DIR; DIR must be the full path name of an\n"
|
" given DIR; DIR must be the full path name of an\n"
|
||||||
" existing directory, without any \"..\", double '/'\n"
|
" existing directory, without any \"..\", double '/'\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user