Version 1.7.8

- The name of the function cDevice::GetVideoSize() wasn't very well chosen
  for its purpose of defining the optimum size of the OSD for the current
  output device. Therefore a new function named cDevice::GetOsdSize() has
  been introduced (suggested by Rolf Ahrenberg). Plugin authors should
  implement this function in classes derived from cDevice, if they are able
  to replay video. cDevice::GetVideoSize() still exists and should return the
  actual size of the video material that is currently replayed. Note that
  because of the many possible aspect ratios for video material, the type
  of the Aspect parameter of GetVideoSize() has been changed to 'double',
  and the Aspect parameter in both functions is named differently, because
  it returns different values (suggested by Reinhard Nissl).
  Thanks to Oliver Endriss for his input on calculating the Aspect factor in
  GetOsdSize().
- Fixed the way the OSD size is determined on full featured DVB cards (thanks
  to Oliver Endriss).
- Increased MAXOSDHEIGHT to 1200 (suggested by Nicolas Huillard).
- Removed limitation to PAL resolution from SPU handling.
- Checking fd_video in cDvbDevice::GetVideoSize() to avoid error messages on
  systems with no real primary replay device (reported by Martin Neuditschko).
- Added a note to cTsToPes::GetPes() about having to call it repeatedly, once
  it has returned a non-NULL value.
- Added MPEG 1 handling to remux.c (thanks to Ales Jurik).
- Fixed use of time_t in cEIT::cEIT() (thanks to Tobias Bratfisch).
- Added missing update of lastOsdSizeUpdate.
- EIT events are now only processed if a plausible system time is available, to
  avoid wrong handling of PDC descriptors (thanks to Tobias Bratfisch).
- Removed unused 'synced' member from cTsToPes (reported by Christoph Haubrich).
- Added a note to cTsToPes about all TS packets having to belong to the same PID,
  and that for video data GetPes() may only be called if the next TS packet that
  will be given to PutTs() has the "payload start" flag set (suggested by Christoph
  Haubrich).
- Added a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
  (thanks to Rolf Ahrenberg).
- The new setup option "Recording/Pause key handling" can be used to define
  what happens if the Pause key on the remote control is pressed during
  live tv (thanks to Timo Eskola).
- Added a note about cFont::GetFont() not being thread-safe.
- Fixed generating PAT/PMT version numbers in case the PIDs change during
  recording (reported by Reinhard Nissl).
- Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
- Fixed a memory leak when reaching the end of a recording during replay (reported
  by Reinhard Nissl).
- Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl).
- Added a workaround for the broken linux-dvb driver header files (based on a patch
  from Tobias Grimm).
- Fixed handling the length of DiSEqC command sequences (reported by Reinhard Nissl).
- Fixed cOsdMenu::Display() in case the menu size has changed (thanks to
  Reinhard Nissl).
- Added some missing 'const' keywords to avoid compilation errors with gcc 4.4
  (thanks to Ville Skyttä and Ludwig Nussel).
- Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by
  Ludwig Nussel).
- Fixed calculating menu colum widths in case the font has a size other than the
  default size (reported by Reinhard Nissl).
- Added a plausibility check for the OSD percentage parameters
  to avoid problems in case the values are stored in the setup.conf
  file in a  wrong way.
- Fixed variable types in cIndexFile (reported by Udo Richter).
This commit is contained in:
Klaus Schmidinger 2009-06-14 13:49:00 +02:00
parent 991eda0067
commit ab6f2ccf42
52 changed files with 1148 additions and 523 deletions

View File

@ -672,6 +672,8 @@ Oliver Endriss <o.endriss@gmx.de>
VPID is 0 VPID is 0
for reporting chirping sound disturbences at editing points in TS recordings for reporting chirping sound disturbences at editing points in TS recordings
for reporting broken index generation in TS recordings after a buffer overflow for reporting broken index generation in TS recordings after a buffer overflow
for fixing the way the OSD size is determined on full featured DVB cards
for his input on calculating the Aspect factor in GetOsdSize()
Reinhard Walter Buchner <rw.buchner@freenet.de> Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf' for adding some satellites to 'sources.conf'
@ -918,6 +920,8 @@ Ludwig Nussel <ludwig.nussel@web.de>
for a hint on using _nl_msg_cat_cntr for a hint on using _nl_msg_cat_cntr
for adding some missing 'const' keywords for adding some missing 'const' keywords
for pointing out that "%016llX" should be used instead of "%016LX" for pointing out that "%016llX" should be used instead of "%016LX"
for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4
for reporting that cSVDRP::CmdGRAB() writes into const data
Thomas Koch <tom@harhar.net> Thomas Koch <tom@harhar.net>
for his support in keeping the Premiere World channels up to date in 'channels.conf' for his support in keeping the Premiere World channels up to date in 'channels.conf'
@ -1073,6 +1077,8 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for replacing the Finnish language code "smi" with "suo" for replacing the Finnish language code "smi" with "suo"
for adding cap_sys_nice to the capabilities that are not dropped for adding cap_sys_nice to the capabilities that are not dropped
for adding cThread::SetIOPriority() and using it in cRemoveDeletedRecordingsThread for adding cThread::SetIOPriority() and using it in cRemoveDeletedRecordingsThread
for suggesting to introduce cDevice::GetOsdSize()
for adding a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
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
@ -1212,6 +1218,17 @@ Reinhard Nissl <rnissl@gmx.de>
for making sure vdr-xine no longer needs cDvbPlayer::Action() to call DeviceFlush() for making sure vdr-xine no longer needs cDvbPlayer::Action() to call DeviceFlush()
for fixing the 'VideoOnly' condition in the PlayPes() and PlayTs() calls in for fixing the 'VideoOnly' condition in the PlayPes() and PlayTs() calls in
cDvbPlayer::Action() cDvbPlayer::Action()
for reporting a problem in case the PIDs change during recording
for reporting a memory leak when reaching the end of a recording during replay
for reporting a call to close(-1) in cUnbufferedFile::Close()
for reporting a possible problem in handling the length of DiSEqC command sequences
for fixing cOsdMenu::Display() in case the menu size has changed
for suggesting to change the type of the Aspect parameter of GetVideoSize()
to 'double'
for suggesting to use different names for the Aspect parameter in GetVideoSize()
and GetOsdSize()
for reporting a problem with calculating menu colum widths in case the font has a
size other than the default size
Richard Robson <richard_robson@beeb.net> Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the for reporting freezing replay if a timer starts while in Transfer Mode from the
@ -1623,6 +1640,7 @@ Udo Richter <udo_richter@gmx.de>
for reporting a problem with handling the maximum video file size for reporting a problem with handling the maximum video file size
for suggesting to add a note to the INSTALL file about using subdirectories to for suggesting to add a note to the INSTALL file about using subdirectories to
split a large disk into separate areas for VDR's video data and other stuff split a large disk into separate areas for VDR's video data and other stuff
for reporting wrong variable types in cIndexFile
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
@ -1814,6 +1832,7 @@ Ville Skytt
menu menu
for adding missing #include <limits.h> to epg.c and menuitems.h for adding missing #include <limits.h> to epg.c and menuitems.h
for fixing various spelling errors and improving PLUGINS.html for fixing various spelling errors and improving PLUGINS.html
for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4
Steffen Beyer <cpunk@reactor.de> Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next for fixing setting the colored button help after deleting a recording in case the next
@ -1953,6 +1972,7 @@ Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Nicolas Huillard <nhuillard@e-dition.fr> Nicolas Huillard <nhuillard@e-dition.fr>
for translating OSD texts to the French language for translating OSD texts to the French language
for suggesting to increase MAXOSDHEIGHT to 1200
Patrick Fischer <patrick_fischer@gmx.de> Patrick Fischer <patrick_fischer@gmx.de>
for reporting an error in the cFilter example in PLUGINS.html for reporting an error in the cFilter example in PLUGINS.html
@ -2126,6 +2146,9 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
check to it check to it
for changing cBitmap::DrawText() to always draw the background unless ColorBg for changing cBitmap::DrawText() to always draw the background unless ColorBg
is clrTransparent is clrTransparent
for reporting unused 'synced' member in cTsToPes
for suggesting to add a note to cTsToPes about all TS packets having to belong to
the same PID
Pekka Mauno <pekka.mauno@iki.fi> Pekka Mauno <pekka.mauno@iki.fi>
for fixing cSchedule::GetFollowingEvent() in case there is currently no present for fixing cSchedule::GetFollowingEvent() in case there is currently no present
@ -2164,6 +2187,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net>
for fixing a signed character used as index in cBase64Encoder::NextLine() for fixing a signed character used as index in cBase64Encoder::NextLine()
for fixing formatting the name section in the VDR man pages for fixing formatting the name section in the VDR man pages
for reporting unneeded include files <linux/dvb/dmx.h> und <time.h> in remux.h for reporting unneeded include files <linux/dvb/dmx.h> und <time.h> in remux.h
for a patch that added a workaround for the broken linux-dvb driver header files
Helge Lenz <h.lenz@gmx.de> Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown for reporting a bug in setting the 'Delta' parameter when calling the shutdown
@ -2310,6 +2334,8 @@ Tobias Bratfisch <tobias@reel-multimedia.com>
for optimizing cNitFilter::Process() for optimizing cNitFilter::Process()
for reducing the number of time(NULL) calls in vdr.c's main loop to a single call for reducing the number of time(NULL) calls in vdr.c's main loop to a single call
for improving efficiency of cEIT::cEIT() for improving efficiency of cEIT::cEIT()
for fixing the use of time_t in cEIT::cEIT()
for making EIT events be processed only if a plausible system time is available
Bruno Roussel <bruno.roussel@free.fr> Bruno Roussel <bruno.roussel@free.fr>
for translating OSD texts to the French language for translating OSD texts to the French language
@ -2331,6 +2357,7 @@ Diego Pierotto <vdr-italian@tiscali.it>
Timo Eskola <timo@tolleri.net> Timo Eskola <timo@tolleri.net>
for implementing sending all frames to devices that can handle them in fast forward for implementing sending all frames to devices that can handle them in fast forward
trick speeds trick speeds
for implementing the setup option "Recording/Pause key handling"
Elias Luttinen <el@iki.fi> Elias Luttinen <el@iki.fi>
for improving the description of where logging goes in the INSTALL file for improving the description of where logging goes in the INSTALL file
@ -2394,6 +2421,7 @@ Sundararaj Reel <sundararaj.reel@googlemail.com>
Ales Jurik <ajurik@quick.cz> Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default for reporting broken SI data on Czech/Slovak channels after changing the default
character set to ISO-8859-9 character set to ISO-8859-9
for adding MPEG 1 handling to remux.c
Magnus Andersson <svankan@bahnhof.se> Magnus Andersson <svankan@bahnhof.se>
for translating OSD texts to the Swedish language for translating OSD texts to the Swedish language
@ -2446,3 +2474,7 @@ Marcel Unbehaun <frostworks@gmx.de>
Günter Niedermeier <linuxtv@ncs-online.de> Günter Niedermeier <linuxtv@ncs-online.de>
for reporting a problem with file I/O overhead during recording in TS format for reporting a problem with file I/O overhead during recording in TS format
Martin Neuditschko <yosuke.tomoe@gmx.net>
for reporting a problem with error messages from cDvbDevice::GetVideoSize()
on systems with no real primary replay device

61
HISTORY
View File

@ -6074,3 +6074,64 @@ Video Disk Recorder Revision History
(provided the output device implements the GetVideoSize() function). (provided the output device implements the GetVideoSize() function).
- cFrameDetector::Analyze() now syncs on the TS packet sync bytes (thanks to - cFrameDetector::Analyze() now syncs on the TS packet sync bytes (thanks to
Oliver Endriss for reporting broken index generation after a buffer overflow). Oliver Endriss for reporting broken index generation after a buffer overflow).
2009-06-13: Version 1.7.8
- The name of the function cDevice::GetVideoSize() wasn't very well chosen
for its purpose of defining the optimum size of the OSD for the current
output device. Therefore a new function named cDevice::GetOsdSize() has
been introduced (suggested by Rolf Ahrenberg). Plugin authors should
implement this function in classes derived from cDevice, if they are able
to replay video. cDevice::GetVideoSize() still exists and should return the
actual size of the video material that is currently replayed. Note that
because of the many possible aspect ratios for video material, the type
of the Aspect parameter of GetVideoSize() has been changed to 'double',
and the Aspect parameter in both functions is named differently, because
it returns different values (suggested by Reinhard Nissl).
Thanks to Oliver Endriss for his input on calculating the Aspect factor in
GetOsdSize().
- Fixed the way the OSD size is determined on full featured DVB cards (thanks
to Oliver Endriss).
- Increased MAXOSDHEIGHT to 1200 (suggested by Nicolas Huillard).
- Removed limitation to PAL resolution from SPU handling.
- Checking fd_video in cDvbDevice::GetVideoSize() to avoid error messages on
systems with no real primary replay device (reported by Martin Neuditschko).
- Added a note to cTsToPes::GetPes() about having to call it repeatedly, once
it has returned a non-NULL value.
- Added MPEG 1 handling to remux.c (thanks to Ales Jurik).
- Fixed use of time_t in cEIT::cEIT() (thanks to Tobias Bratfisch).
- Added missing update of lastOsdSizeUpdate.
- EIT events are now only processed if a plausible system time is available, to
avoid wrong handling of PDC descriptors (thanks to Tobias Bratfisch).
- Removed unused 'synced' member from cTsToPes (reported by Christoph Haubrich).
- Added a note to cTsToPes about all TS packets having to belong to the same PID,
and that for video data GetPes() may only be called if the next TS packet that
will be given to PutTs() has the "payload start" flag set (suggested by Christoph
Haubrich).
- Added a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
(thanks to Rolf Ahrenberg).
- The new setup option "Recording/Pause key handling" can be used to define
what happens if the Pause key on the remote control is pressed during
live tv (thanks to Timo Eskola).
- Added a note about cFont::GetFont() not being thread-safe.
- Fixed generating PAT/PMT version numbers in case the PIDs change during
recording (reported by Reinhard Nissl).
- Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
- Fixed a memory leak when reaching the end of a recording during replay (reported
by Reinhard Nissl).
- Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl).
- Added a workaround for the broken linux-dvb driver header files (based on a patch
from Tobias Grimm).
- Fixed handling the length of DiSEqC command sequences (reported by Reinhard Nissl).
- Fixed cOsdMenu::Display() in case the menu size has changed (thanks to
Reinhard Nissl).
- Added some missing 'const' keywords to avoid compilation errors with gcc 4.4
(thanks to Ville Skyttä and Ludwig Nussel).
- Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by
Ludwig Nussel).
- Fixed calculating menu colum widths in case the font has a size other than the
default size (reported by Reinhard Nissl).
- Added a plausibility check for the OSD percentage parameters
to avoid problems in case the values are stored in the setup.conf
file in a wrong way.
- Fixed variable types in cIndexFile (reported by Udo Richter).

7
MANUAL
View File

@ -748,6 +748,13 @@ Version 1.6
Pause priority = 10 The Priority and Lifetime values used when pausing live Pause priority = 10 The Priority and Lifetime values used when pausing live
Pause lifetime = 1 video. Pause lifetime = 1 video.
Pause key handling = 3 Defines what happens if the Pause key on the remote control
is pressed during live tv.
0 = do not pause live video
1 = confirm pause live video
2 = pause live video
The default is 2.
Use episode name = yes Repeating timers use the EPG's 'Episode name' information Use episode name = yes Repeating timers use the EPG's 'Episode name' information
to create recording file names in a hierarchical structure to create recording file names in a hierarchical structure
(for instance to gather all episodes of a series in a (for instance to gather all episodes of a series in a

View File

@ -1944,10 +1944,10 @@ In order to be able to determine the proper size of the OSD, the device
should implement the function should implement the function
<p><table><tr><td class="code"><pre> <p><table><tr><td class="code"><pre>
virtual void GetVideoSize(int &amp;Width, int &amp;Height, eVideoAspect &amp;Aspect); virtual void GetOsdSize(int &amp;Width, int &amp;Height, double &amp;Aspect);
</pre></td></tr></table><p> </pre></td></tr></table><p>
By default, an OSD size of 480x324 with an aspect ratio of 4:3 is assumed. By default, an OSD size of 720x480 with an aspect ratio of 1.0 is assumed.
</div modified> </div modified>
<p> <p>

View File

@ -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.2 2009/05/03 13:58:08 kls Exp $ * $Id: config.c 2.5 2009/06/13 10:25:05 kls Exp $
*/ */
#include "config.h" #include "config.h"
@ -20,6 +20,8 @@
// format characters in order to allow any number of blanks after a numeric // format characters in order to allow any number of blanks after a numeric
// value! // value!
#define ChkDoublePlausibility(Variable, Default) { if (Variable < 0.00001) Variable = Default; }
// --- cCommand -------------------------------------------------------------- // --- cCommand --------------------------------------------------------------
char *cCommand::result = NULL; char *cCommand::result = NULL;
@ -250,6 +252,7 @@ cSetup::cSetup(void)
PrimaryLimit = 0; PrimaryLimit = 0;
DefaultPriority = 50; DefaultPriority = 50;
DefaultLifetime = 99; DefaultLifetime = 99;
PauseKeyHandling = 2;
PausePriority = 10; PausePriority = 10;
PauseLifetime = 1; PauseLifetime = 1;
UseSubtitle = 1; UseSubtitle = 1;
@ -270,6 +273,7 @@ cSetup::cSetup(void)
OSDTop = 45; OSDTop = 45;
OSDWidth = 624; OSDWidth = 624;
OSDHeight = 486; OSDHeight = 486;
OSDAspect = 1.0;
OSDMessageTime = 1; OSDMessageTime = 1;
UseSmallFont = 1; UseSmallFont = 1;
AntiAlias = 1; AntiAlias = 1;
@ -435,6 +439,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "PrimaryLimit")) PrimaryLimit = atoi(Value); else if (!strcasecmp(Name, "PrimaryLimit")) PrimaryLimit = atoi(Value);
else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value); else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value);
else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value); else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value);
else if (!strcasecmp(Name, "PauseKeyHandling")) PauseKeyHandling = atoi(Value);
else if (!strcasecmp(Name, "PausePriority")) PausePriority = atoi(Value); else if (!strcasecmp(Name, "PausePriority")) PausePriority = atoi(Value);
else if (!strcasecmp(Name, "PauseLifetime")) PauseLifetime = atoi(Value); else if (!strcasecmp(Name, "PauseLifetime")) PauseLifetime = atoi(Value);
else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value); else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value);
@ -449,21 +454,22 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value); else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atof(Value); else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atof(Value);
else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atof(Value); else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atof(Value);
else if (!strcasecmp(Name, "OSDWidthP")) OSDWidthP = atof(Value); else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atof(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
else if (!strcasecmp(Name, "OSDHeightP")) OSDHeightP = atof(Value); else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atof(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value); else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value);
else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value); else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value);
else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8 else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value); else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value);
else if (!strcasecmp(Name, "OSDAspect")) OSDAspect = atof(Value);
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value); else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value); else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value); else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME); else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME); else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME); else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
else if (!strcasecmp(Name, "FontOsdSizeP")) FontOsdSizeP = atof(Value); else if (!strcasecmp(Name, "FontOsdSizeP")) { FontOsdSizeP = atof(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
else if (!strcasecmp(Name, "FontSmlSizeP")) FontSmlSizeP = atof(Value); else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atof(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
else if (!strcasecmp(Name, "FontFixSizeP")) FontFixSizeP = atof(Value); else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atof(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value); else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value); else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value); else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
@ -525,6 +531,7 @@ bool cSetup::Save(void)
Store("PrimaryLimit", PrimaryLimit); Store("PrimaryLimit", PrimaryLimit);
Store("DefaultPriority", DefaultPriority); Store("DefaultPriority", DefaultPriority);
Store("DefaultLifetime", DefaultLifetime); Store("DefaultLifetime", DefaultLifetime);
Store("PauseKeyHandling", PauseKeyHandling);
Store("PausePriority", PausePriority); Store("PausePriority", PausePriority);
Store("PauseLifetime", PauseLifetime); Store("PauseLifetime", PauseLifetime);
Store("UseSubtitle", UseSubtitle); Store("UseSubtitle", UseSubtitle);
@ -545,6 +552,7 @@ bool cSetup::Save(void)
Store("OSDTop", OSDTop); Store("OSDTop", OSDTop);
Store("OSDWidth", OSDWidth); Store("OSDWidth", OSDWidth);
Store("OSDHeight", OSDHeight); Store("OSDHeight", OSDHeight);
Store("OSDAspect", OSDAspect);
Store("OSDMessageTime", OSDMessageTime); Store("OSDMessageTime", OSDMessageTime);
Store("UseSmallFont", UseSmallFont); Store("UseSmallFont", UseSmallFont);
Store("AntiAlias", AntiAlias); Store("AntiAlias", AntiAlias);

View File

@ -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.9 2009/05/03 13:15:35 kls Exp $ * $Id: config.h 2.13 2009/05/21 11:11:32 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.7" #define VDRVERSION "1.7.8"
#define VDRVERSNUM 10707 // Version * 10000 + Major * 100 + Minor #define VDRVERSNUM 10708 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number: // The plugin API's version number:
#define APIVERSION "1.7.7" #define APIVERSION "1.7.8"
#define APIVERSNUM 10707 // Version * 10000 + Major * 100 + Minor #define APIVERSNUM 10708 // 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
@ -42,7 +42,7 @@
#define MINOSDWIDTH 480 #define MINOSDWIDTH 480
#define MAXOSDWIDTH 1920 #define MAXOSDWIDTH 1920
#define MINOSDHEIGHT 324 #define MINOSDHEIGHT 324
#define MAXOSDHEIGHT 1080 #define MAXOSDHEIGHT 1200
#define MaxFileName 256 #define MaxFileName 256
#define MaxSkinName 16 #define MaxSkinName 16
@ -234,6 +234,7 @@ public:
int PrimaryLimit; int PrimaryLimit;
int DefaultPriority, DefaultLifetime; int DefaultPriority, DefaultLifetime;
int PausePriority, PauseLifetime; int PausePriority, PauseLifetime;
int PauseKeyHandling;
int UseSubtitle; int UseSubtitle;
int UseVps; int UseVps;
int VpsMargin; int VpsMargin;
@ -246,6 +247,7 @@ public:
int ChannelInfoTime; int ChannelInfoTime;
double OSDLeftP, OSDTopP, OSDWidthP, OSDHeightP; double OSDLeftP, OSDTopP, OSDWidthP, OSDHeightP;
int OSDLeft, OSDTop, OSDWidth, OSDHeight; int OSDLeft, OSDTop, OSDWidth, OSDHeight;
double OSDAspect;
int OSDMessageTime; int OSDMessageTime;
int UseSmallFont; int UseSmallFont;
int AntiAlias; int AntiAlias;

View File

@ -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.17 2009/05/02 12:17:39 kls Exp $ * $Id: device.c 2.23 2009/06/06 13:25:58 kls Exp $
*/ */
#include "device.h" #include "device.h"
@ -19,11 +19,6 @@
#include "status.h" #include "status.h"
#include "transfer.h" #include "transfer.h"
const char *VideoAspectString[] = { "4:3",
"16:9",
"2.21:9"
};
// --- cLiveSubtitle --------------------------------------------------------- // --- cLiveSubtitle ---------------------------------------------------------
class cLiveSubtitle : public cReceiver { class cLiveSubtitle : public cReceiver {
@ -66,6 +61,7 @@ cDevice *cDevice::primaryDevice = NULL;
cDevice *cDevice::avoidDevice = NULL; cDevice *cDevice::avoidDevice = NULL;
cDevice::cDevice(void) cDevice::cDevice(void)
:patPmtParser(true)
{ {
cardIndex = nextCardIndex++; cardIndex = nextCardIndex++;
@ -389,11 +385,18 @@ eVideoSystem cDevice::GetVideoSystem(void)
return vsPAL; return vsPAL;
} }
void cDevice::GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect) void cDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
{ {
Width = MINOSDWIDTH; Width = 0;
Height = MINOSDHEIGHT; Height = 0;
Aspect = va4_3; VideoAspect = 1.0;
}
void cDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
{
Width = 720;
Height = 480;
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(b); }

View File

@ -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.10 2009/05/02 12:16:20 kls Exp $ * $Id: device.h 2.15 2009/06/06 11:15:49 kls Exp $
*/ */
#ifndef __DEVICE_H #ifndef __DEVICE_H
@ -56,13 +56,6 @@ enum eVideoSystem { vsPAL,
vsNTSC vsNTSC
}; };
enum eVideoAspect { va4_3,
va16_9,
va221_9
};
extern const char *VideoAspectString[];
enum eVideoDisplayFormat { vdfPanAndScan, enum eVideoDisplayFormat { vdfPanAndScan,
vdfLetterBox, vdfLetterBox,
vdfCenterCutOut vdfCenterCutOut
@ -384,9 +377,25 @@ public:
virtual eVideoSystem GetVideoSystem(void); virtual eVideoSystem GetVideoSystem(void);
///< Returns the video system of the currently displayed material ///< Returns the video system of the currently displayed material
///< (default is PAL). ///< (default is PAL).
virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect); virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
///< Returns the With, Height and Aspect ratio of the currently ///< Returns the With, Height and VideoAspect ratio of the currently
///< displayed material. ///< displayed video material. The data returned by this function is
///< only used for informational purposes (if any). Width and
///< Height are given in pixel (e.g. 720x576) and VideoAspect is
///< e.g. 1.33333 for a 4:3 broadcast, or 1.77778 for 16:9.
///< The default implementation returns 0 for Width and Height
///< and 1.0 for VideoAspect.
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
///< Returns the With, Height and PixelAspect ratio the OSD should use
///< to best fit the resolution of the output device. If PixelAspect
///< is not 1.0, the OSD may take this as a hint to scale its
///< graphics in a way that, e.g., a circle will actually
///< show up as a circle on the screen, and not as an ellipse.
///< Values greater than 1.0 mean to stretch the graphics in the
///< vertical direction (or shrink it in the horizontal direction,
///< depending on which dimension shall be fixed). Values less than
///< 1.0 work the other way round. Note that the OSD is not guaranteed
///< to actually use this hint.
// Track facilities // Track facilities

View File

@ -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: dvbdevice.c 2.15 2009/05/03 13:49:41 kls Exp $ * $Id: dvbdevice.c 2.21 2009/06/06 11:17:20 kls Exp $
*/ */
#include "dvbdevice.h" #include "dvbdevice.h"
@ -232,8 +232,8 @@ bool cDvbTuner::SetFrontend(void)
uchar *codes = diseqc->Codes(n); uchar *codes = diseqc->Codes(n);
if (codes) { if (codes) {
struct dvb_diseqc_master_cmd cmd; struct dvb_diseqc_master_cmd cmd;
memcpy(cmd.msg, codes, min(n, int(sizeof(cmd.msg)))); cmd.msg_len = min(n, int(sizeof(cmd.msg)));
cmd.msg_len = n; memcpy(cmd.msg, codes, cmd.msg_len);
CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd)); CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd));
} }
} }
@ -736,6 +736,7 @@ void cDvbDevice::SetVideoFormat(bool VideoFormat16_9)
eVideoSystem cDvbDevice::GetVideoSystem(void) eVideoSystem cDvbDevice::GetVideoSystem(void)
{ {
eVideoSystem VideoSystem = vsPAL; eVideoSystem VideoSystem = vsPAL;
if (fd_video >= 0) {
video_size_t vs; video_size_t vs;
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) { if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
if (vs.h == 480 || vs.h == 240) if (vs.h == 480 || vs.h == 240)
@ -743,24 +744,54 @@ eVideoSystem cDvbDevice::GetVideoSystem(void)
} }
else else
LOG_ERROR; LOG_ERROR;
}
return VideoSystem; return VideoSystem;
} }
void cDvbDevice::GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect) void cDvbDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
{ {
if (fd_video >= 0) {
video_size_t vs; video_size_t vs;
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) { if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
Width = vs.w; Width = vs.w;
if (Width < 720) // FIXME: some channels result in a With of, e.g. 544, but the final video *is* 720 wide
Width = 720;
Height = vs.h; Height = vs.h;
Aspect = eVideoAspect(vs.aspect_ratio); switch (vs.aspect_ratio) {
if (Width >= MINOSDWIDTH && Width <= MAXOSDWIDTH && Height >= MINOSDHEIGHT && Height <= MAXOSDHEIGHT) 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; return;
} }
else else
LOG_ERROR; LOG_ERROR;
cDevice::GetVideoSize(Width, Height, Aspect); }
cDevice::GetVideoSize(Width, Height, VideoAspect);
}
void cDvbDevice::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 cDvbDevice::SetAudioBypass(bool On) bool cDvbDevice::SetAudioBypass(bool On)

View File

@ -4,12 +4,13 @@
* 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.4 2009/05/02 10:44:40 kls Exp $ * $Id: dvbdevice.h 2.8 2009/06/06 11:16:47 kls Exp $
*/ */
#ifndef __DVBDEVICE_H #ifndef __DVBDEVICE_H
#define __DVBDEVICE_H #define __DVBDEVICE_H
#include <sys/mman.h> // FIXME: workaround for broken linux-dvb header files
#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"
@ -107,7 +108,8 @@ public:
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat); virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
virtual void SetVideoFormat(bool VideoFormat16_9); virtual void SetVideoFormat(bool VideoFormat16_9);
virtual eVideoSystem GetVideoSystem(void); virtual eVideoSystem GetVideoSystem(void);
virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect); virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
// Track facilities // Track facilities

View File

@ -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.15 2009/04/19 15:19:10 kls Exp $ * $Id: dvbplayer.c 2.17 2009/05/31 14:12:42 kls Exp $
*/ */
#include "dvbplayer.h" #include "dvbplayer.h"
@ -89,7 +89,6 @@ private:
uchar *buffer; uchar *buffer;
int wanted; int wanted;
int length; int length;
bool hasData;
cCondWait newSet; cCondWait newSet;
cCondVar newDataCond; cCondVar newDataCond;
cMutex newDataMutex; cMutex newDataMutex;
@ -99,7 +98,8 @@ public:
cNonBlockingFileReader(void); cNonBlockingFileReader(void);
~cNonBlockingFileReader(); ~cNonBlockingFileReader();
void Clear(void); void Clear(void);
int Read(cUnbufferedFile *File, uchar *Buffer, int Length); void Request(cUnbufferedFile *File, int Length);
int Result(uchar **Buffer);
bool Reading(void) { return buffer; } bool Reading(void) { return buffer; }
bool WaitForDataMs(int msToWait); bool WaitForDataMs(int msToWait);
}; };
@ -110,7 +110,6 @@ cNonBlockingFileReader::cNonBlockingFileReader(void)
f = NULL; f = NULL;
buffer = NULL; buffer = NULL;
wanted = length = 0; wanted = length = 0;
hasData = false;
Start(); Start();
} }
@ -128,29 +127,27 @@ void cNonBlockingFileReader::Clear(void)
free(buffer); free(buffer);
buffer = NULL; buffer = NULL;
wanted = length = 0; wanted = length = 0;
hasData = false; Unlock();
}
void cNonBlockingFileReader::Request(cUnbufferedFile *File, int Length)
{
Lock();
Clear();
wanted = Length;
buffer = MALLOC(uchar, wanted);
f = File;
Unlock(); Unlock();
newSet.Signal(); newSet.Signal();
} }
int cNonBlockingFileReader::Read(cUnbufferedFile *File, uchar *Buffer, int Length) int cNonBlockingFileReader::Result(uchar **Buffer)
{ {
if (hasData && buffer) { LOCK_THREAD;
if (buffer != Buffer) { if (buffer && length == wanted) {
esyslog("ERROR: cNonBlockingFileReader::Read() called with different buffer!"); *Buffer = buffer;
errno = EINVAL;
return -1;
}
buffer = NULL; buffer = NULL;
return length; return wanted;
}
if (!buffer) {
f = File;
buffer = Buffer;
wanted = Length;
length = 0;
hasData = false;
newSet.Signal();
} }
errno = EAGAIN; errno = EAGAIN;
return -1; return -1;
@ -160,20 +157,23 @@ void cNonBlockingFileReader::Action(void)
{ {
while (Running()) { while (Running()) {
Lock(); Lock();
if (!hasData && f && buffer) { if (f && buffer && length < wanted) {
int r = f->Read(buffer + length, wanted - length); int r = f->Read(buffer + length, wanted - length);
if (r >= 0) { if (r > 0)
length += r; length += r;
if (!r || length == wanted) { // r == 0 means EOF else if (r == 0) { // r == 0 means EOF
cMutexLock NewDataLock(&newDataMutex); if (length > 0)
hasData = true; wanted = length; // already read something, so return the rest
newDataCond.Broadcast(); else
length = wanted = 0; // report EOF
} }
} else if (FATALERRNO) {
else if (r < 0 && FATALERRNO) {
LOG_ERROR; LOG_ERROR;
length = r; // this will forward the error status to the caller length = wanted = r; // this will forward the error status to the caller
hasData = true; }
if (length == wanted) {
cMutexLock NewDataLock(&newDataMutex);
newDataCond.Broadcast();
} }
} }
Unlock(); Unlock();
@ -184,7 +184,7 @@ void cNonBlockingFileReader::Action(void)
bool cNonBlockingFileReader::WaitForDataMs(int msToWait) bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
{ {
cMutexLock NewDataLock(&newDataMutex); cMutexLock NewDataLock(&newDataMutex);
if (hasData) if (buffer && length == wanted)
return true; return true;
return newDataCond.TimedWait(newDataMutex, msToWait); return newDataCond.TimedWait(newDataMutex, msToWait);
} }
@ -381,7 +381,6 @@ void cDvbPlayer::Activate(bool On)
void cDvbPlayer::Action(void) void cDvbPlayer::Action(void)
{ {
uchar *b = NULL;
uchar *p = NULL; uchar *p = NULL;
int pc = 0; int pc = 0;
@ -461,10 +460,12 @@ void cDvbPlayer::Action(void)
esyslog("ERROR: frame larger than buffer (%d > %d)", Length, MAXFRAMESIZE); esyslog("ERROR: frame larger than buffer (%d > %d)", Length, MAXFRAMESIZE);
Length = MAXFRAMESIZE; Length = MAXFRAMESIZE;
} }
b = MALLOC(uchar, Length); if (!eof)
nonBlockingFileReader->Request(replayFile, Length);
} }
if (!eof) { if (!eof) {
int r = nonBlockingFileReader->Read(replayFile, b, Length); uchar *b = NULL;
int r = nonBlockingFileReader->Result(&b);
if (r > 0) { if (r > 0) {
WaitingForData = false; WaitingForData = false;
uint32_t Pts = 0; uint32_t Pts = 0;
@ -473,18 +474,19 @@ void cDvbPlayer::Action(void)
LastReadIFrame = readIndex; LastReadIFrame = readIndex;
} }
readFrame = new cFrame(b, -r, ftUnknown, readIndex, Pts); // hands over b to the ringBuffer readFrame = new cFrame(b, -r, ftUnknown, readIndex, Pts); // hands over b to the ringBuffer
b = NULL;
} }
else if (r == 0)
eof = true;
else if (r < 0 && errno == EAGAIN) else if (r < 0 && errno == EAGAIN)
WaitingForData = true; WaitingForData = true;
else {
if (r == 0)
eof = true;
else if (r < 0 && FATALERRNO) { else if (r < 0 && FATALERRNO) {
LOG_ERROR; LOG_ERROR;
break; break;
} }
} }
} }
}
// Store the frame in the buffer: // Store the frame in the buffer:

View File

@ -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.0 2007/02/03 10:13:18 kls Exp $ * $Id: dvbspu.c 2.1 2009/05/09 16:25:59 kls Exp $
*/ */
#include "dvbspu.h" #include "dvbspu.h"
@ -55,18 +55,16 @@ void cDvbSpuPalette::setPalette(const uint32_t * pal)
#define setMin(a, b) if (a > b) a = b #define setMin(a, b) if (a > b) a = b
#define setMax(a, b) if (a < b) a = b #define setMax(a, b) if (a < b) a = b
#define spuXres 720
#define spuYres 576
#define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; } #define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; }
cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size, cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
uint8_t * fodd, uint8_t * eodd, uint8_t * fodd, uint8_t * eodd,
uint8_t * feven, uint8_t * eeven) uint8_t * feven, uint8_t * eeven)
{ {
if (size.x1 < 0 || size.y1 < 0 || size.x2 >= spuXres size.x1 = max(size.x1, 0);
|| size.y2 >= spuYres) size.y1 = max(size.y1, 0);
throw; size.x2 = min(size.x2, Setup.OSDWidth);
size.y2 = min(size.y2, Setup.OSDHeight);
bmpsize = size; bmpsize = size;
revRect(minsize[0], size); revRect(minsize[0], size);
@ -74,10 +72,11 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
revRect(minsize[2], size); revRect(minsize[2], size);
revRect(minsize[3], size); revRect(minsize[3], size);
if (!(bmp = new uint8_t[spuXres * spuYres * sizeof(uint8_t)])) int MemSize = bmpsize.width() * bmpsize.height() * sizeof(uint8_t);
throw; bmp = new uint8_t[MemSize];
memset(bmp, 0, spuXres * spuYres * sizeof(uint8_t)); if (bmp)
memset(bmp, 0, MemSize);
putFieldData(0, fodd, eodd); putFieldData(0, fodd, eodd);
putFieldData(1, feven, eeven); putFieldData(1, feven, eeven);
} }
@ -94,10 +93,10 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
int h = size.height(); int h = size.height();
int w = size.width(); int w = size.width();
if (size.y1 + h >= spuYres) if (size.y1 + h >= bmpsize.height())
h = spuYres - size.y1 - 1; h = bmpsize.height() - size.y1 - 1;
if (size.x1 + w >= spuXres) if (size.x1 + w >= bmpsize.width())
w = spuXres - size.x1 - 1; w = bmpsize.width() - size.x1 - 1;
if (w & 0x03) if (w & 0x03)
w += 4 - (w & 0x03); w += 4 - (w & 0x03);
@ -114,7 +113,7 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
// set the content // set the content
for (int yp = 0; yp < h; yp++) { for (int yp = 0; yp < h; yp++) {
for (int xp = 0; xp < w; xp++) { for (int xp = 0; xp < w; xp++) {
uint8_t idx = bmp[(size.y1 + yp) * spuXres + size.x1 + xp]; uint8_t idx = bmp[(size.y1 + yp) * bmpsize.width() + size.x1 + xp];
ret->SetIndex(xp, yp, idx); ret->SetIndex(xp, yp, idx);
} }
} }
@ -150,7 +149,7 @@ bool cDvbSpuBitmap::getMinSize(const aDvbSpuPalDescr paldescr,
void cDvbSpuBitmap::putPixel(int xp, int yp, int len, uint8_t colorid) void cDvbSpuBitmap::putPixel(int xp, int yp, int len, uint8_t colorid)
{ {
memset(bmp + spuXres * yp + xp, colorid, len); memset(bmp + bmpsize.width() * yp + xp, colorid, len);
setMin(minsize[colorid].x1, xp); setMin(minsize[colorid].x1, xp);
setMin(minsize[colorid].y1, yp); setMin(minsize[colorid].y1, yp);
setMax(minsize[colorid].x2, xp + len - 1); setMax(minsize[colorid].x2, xp + len - 1);

View File

@ -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.0 2006/04/17 12:47:29 kls Exp $ * $Id: dvbspu.h 2.1 2009/05/09 16:26:45 kls Exp $
*/ */
#ifndef __DVBSPU_H #ifndef __DVBSPU_H
@ -32,10 +32,10 @@ typedef struct sDvbSpuRect {
int x1, y1; int x1, y1;
int x2, y2; int x2, y2;
int width() { int width() const {
return x2 - x1 + 1; return x2 - x1 + 1;
}; };
int height() { int height() const {
return y2 - y1 + 1; return y2 - y1 + 1;
}; };
@ -63,8 +63,6 @@ class cDvbSpuPalette {
// --- cDvbSpuBitmap---------------------------------------------------------- // --- cDvbSpuBitmap----------------------------------------------------------
class cDvbSpuBitmap { class cDvbSpuBitmap {
public:
private: private:
sDvbSpuRect bmpsize; sDvbSpuRect bmpsize;
sDvbSpuRect minsize[4]; sDvbSpuRect minsize[4];

9
eit.c
View File

@ -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.3 2009/04/11 10:03:24 kls Exp $ * $Id: eit.c 2.5 2009/05/15 12:34:43 kls Exp $
*/ */
#include "eit.h" #include "eit.h"
@ -17,6 +17,8 @@
#include "libsi/section.h" #include "libsi/section.h"
#include "libsi/descriptor.h" #include "libsi/descriptor.h"
#define VALID_TIME (31536000 * 2) // two years
// --- cEIT ------------------------------------------------------------------ // --- cEIT ------------------------------------------------------------------
class cEIT : public SI::EIT { class cEIT : public SI::EIT {
@ -46,10 +48,13 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
struct tm tm_r; struct tm tm_r;
struct tm t = *localtime_r(&Now, &tm_r); // this initializes the time zone in 't' struct tm t = *localtime_r(&Now, &tm_r); // this initializes the time zone in 't'
if (Now < VALID_TIME)
return; // we need the current time for handling PDC descriptors
SI::EIT::Event SiEitEvent; SI::EIT::Event SiEitEvent;
for (SI::Loop::Iterator it; eventLoop.getNext(SiEitEvent, it); ) { for (SI::Loop::Iterator it; eventLoop.getNext(SiEitEvent, it); ) {
bool ExternalData = false; bool ExternalData = false;
int StartTime = SiEitEvent.getStartTime(); time_t StartTime = SiEitEvent.getStartTime();
int Duration = SiEitEvent.getDuration(); int Duration = SiEitEvent.getDuration();
// Drop bogus events - but keep NVOD reference events, where all bits of the start time field are set to 1, resulting in a negative number. // Drop bogus events - but keep NVOD reference events, where all bits of the start time field are set to 1, resulting in a negative number.
if (StartTime == 0 || StartTime > 0 && Duration == 0) if (StartTime == 0 || StartTime > 0 && Duration == 0)

10
font.h
View File

@ -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.1 2009/05/03 11:00:19 kls Exp $ * $Id: font.h 2.2 2009/05/23 10:10:40 kls Exp $
*/ */
#ifndef __FONT_H #ifndef __FONT_H
@ -55,9 +55,11 @@ public:
static const cFont *GetFont(eDvbFont Font); static const cFont *GetFont(eDvbFont Font);
///< Gets the given Font, which was previously set by a call to SetFont(). ///< Gets the given Font, which was previously set by a call to SetFont().
///< If no SetFont() call has been made, the font as defined in the setup is returned. ///< If no SetFont() call has been made, the font as defined in the setup is returned.
///< The caller must not use the returned font outside the scope in which ///< GetFont() is not thread-safe, and shall only be called from the main
///< it was retrieved by the call to GetFont(), because a call to SetFont() ///< thread! A font returned by GetFont() must only be used locally inside the
///< may delete an existing font. ///< function it was retrieved from, and no long term pointer to it shall be kept,
///< because the cFont object may become invalid at any time after the
///< function that called GetFont() has returned.
static cFont *CreateFont(const char *Name, int CharHeight, int CharWidth = 0); static cFont *CreateFont(const char *Name, int CharHeight, int CharWidth = 0);
///< Creates a new font object with the given Name and makes its characters ///< Creates a new font object with the given Name and makes its characters
///< CharHeight pixels high. If CharWidth is given, it overwrites the font's ///< CharHeight pixels high. If CharWidth is given, it overwrites the font's

8
menu.c
View File

@ -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.7 2009/05/03 13:30:13 kls Exp $ * $Id: menu.c 2.8 2009/05/21 11:10:38 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -2672,18 +2672,24 @@ eOSState cMenuSetupCAM::ProcessKey(eKeys Key)
// --- cMenuSetupRecord ------------------------------------------------------ // --- cMenuSetupRecord ------------------------------------------------------
class cMenuSetupRecord : public cMenuSetupBase { class cMenuSetupRecord : public cMenuSetupBase {
private:
const char *pauseKeyHandlingTexts[3];
public: public:
cMenuSetupRecord(void); cMenuSetupRecord(void);
}; };
cMenuSetupRecord::cMenuSetupRecord(void) cMenuSetupRecord::cMenuSetupRecord(void)
{ {
pauseKeyHandlingTexts[0] = tr("do not pause live video");
pauseKeyHandlingTexts[1] = tr("confirm pause live video");
pauseKeyHandlingTexts[2] = tr("pause live video");
SetSection(tr("Recording")); SetSection(tr("Recording"));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"), &data.MarginStart)); Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"), &data.MarginStart));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"), &data.MarginStop)); Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"), &data.MarginStop));
Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"), &data.PrimaryLimit, 0, MAXPRIORITY)); Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"), &data.PrimaryLimit, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default priority"), &data.DefaultPriority, 0, MAXPRIORITY)); Add(new cMenuEditIntItem( tr("Setup.Recording$Default priority"), &data.DefaultPriority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default lifetime (d)"), &data.DefaultLifetime, 0, MAXLIFETIME)); Add(new cMenuEditIntItem( tr("Setup.Recording$Default lifetime (d)"), &data.DefaultLifetime, 0, MAXLIFETIME));
Add(new cMenuEditStraItem(tr("Setup.Recording$Pause key handling"), &data.PauseKeyHandling, 3, pauseKeyHandlingTexts));
Add(new cMenuEditIntItem( tr("Setup.Recording$Pause priority"), &data.PausePriority, 0, MAXPRIORITY)); Add(new cMenuEditIntItem( tr("Setup.Recording$Pause priority"), &data.PausePriority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Pause lifetime (d)"), &data.PauseLifetime, 0, MAXLIFETIME)); Add(new cMenuEditIntItem( tr("Setup.Recording$Pause lifetime (d)"), &data.PauseLifetime, 0, MAXLIFETIME));
Add(new cMenuEditBoolItem(tr("Setup.Recording$Use episode name"), &data.UseSubtitle)); Add(new cMenuEditBoolItem(tr("Setup.Recording$Use episode name"), &data.UseSubtitle));

11
osd.c
View File

@ -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.3 2009/05/03 13:52:47 kls Exp $ * $Id: osd.c 2.5 2009/05/09 10:42:35 kls Exp $
*/ */
#include "osd.h" #include "osd.h"
@ -883,7 +883,7 @@ void cOsd::Flush(void)
cOsdProvider *cOsdProvider::osdProvider = NULL; cOsdProvider *cOsdProvider::osdProvider = NULL;
int cOsdProvider::oldWidth = 0; int cOsdProvider::oldWidth = 0;
int cOsdProvider::oldHeight = 0; int cOsdProvider::oldHeight = 0;
int cOsdProvider::oldAspect = va4_3; double cOsdProvider::oldAspect = 1.0;
cOsdProvider::cOsdProvider(void) cOsdProvider::cOsdProvider(void)
{ {
@ -919,13 +919,14 @@ void cOsdProvider::UpdateOsdSize(bool Force)
{ {
int Width; int Width;
int Height; int Height;
eVideoAspect Aspect; double Aspect;
cDevice::PrimaryDevice()->GetVideoSize(Width, Height, Aspect); cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
if (Width != oldWidth || Height != oldHeight || Aspect != oldAspect || Force) { if (Width != oldWidth || Height != oldHeight || 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
Setup.OSDHeight = int(round(Height * Setup.OSDHeightP)); Setup.OSDHeight = int(round(Height * Setup.OSDHeightP));
Setup.OSDAspect = Aspect;
Setup.FontOsdSize = int(round(Height * Setup.FontOsdSizeP)); Setup.FontOsdSize = int(round(Height * Setup.FontOsdSizeP));
Setup.FontFixSize = int(round(Height * Setup.FontFixSizeP)); Setup.FontFixSize = int(round(Height * Setup.FontFixSizeP));
Setup.FontSmlSize = int(round(Height * Setup.FontSmlSizeP)); Setup.FontSmlSize = int(round(Height * Setup.FontSmlSizeP));
@ -935,7 +936,7 @@ void cOsdProvider::UpdateOsdSize(bool Force)
oldWidth = Width; oldWidth = Width;
oldHeight = Height; oldHeight = Height;
oldAspect = Aspect; oldAspect = Aspect;
dsyslog("OSD size changed to %dx%d @ %s", Width, Height, VideoAspectString[Aspect]); dsyslog("OSD size changed to %dx%d @ %g", Width, Height, Aspect);
} }
} }

4
osd.h
View File

@ -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.h 2.3 2009/05/03 13:52:10 kls Exp $ * $Id: osd.h 2.4 2009/05/08 13:41:03 kls Exp $
*/ */
#ifndef __OSD_H #ifndef __OSD_H
@ -408,7 +408,7 @@ private:
static cOsdProvider *osdProvider; static cOsdProvider *osdProvider;
static int oldWidth; static int oldWidth;
static int oldHeight; static int oldHeight;
static int oldAspect; static double oldAspect;
protected: protected:
virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0; virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0;
///< Returns a pointer to a newly created cOsd object, which will be located ///< Returns a pointer to a newly created cOsd object, which will be located

View File

@ -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: osdbase.c 2.0 2008/02/17 11:33:04 kls Exp $ * $Id: osdbase.c 2.1 2009/06/01 11:54:50 kls Exp $
*/ */
#include "osdbase.h" #include "osdbase.h"
@ -217,6 +217,7 @@ void cOsdMenu::Display(void)
} }
if (current < 0) if (current < 0)
current = 0; // just for safety - there HAS to be a current item! current = 0; // just for safety - there HAS to be a current item!
first = min(first, max(0, count - displayMenuItems)); // in case the menu size has changed
if (current - first >= displayMenuItems || current < first) { if (current - first >= displayMenuItems || current < first) {
first = current - displayMenuItems / 2; first = current - displayMenuItems / 2;
if (first + displayMenuItems > count) if (first + displayMenuItems > count)

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -707,6 +707,15 @@ msgstr "CAM en
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "No puc reiniciar la CAM!" msgstr "No puc reiniciar la CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Opcions de Gravació" msgstr "Opcions de Gravació"
@ -725,6 +734,9 @@ msgstr "Prioritat per defecte"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Durada predefinida" msgstr "Durada predefinida"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioritat de la pausa" msgstr "Prioritat de la pausa"
@ -986,6 +998,9 @@ msgstr "Diumenge"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Gravació a punt d'iniciar!" msgstr "Gravació a punt d'iniciar!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Gravació començada" msgstr "Gravació començada"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr "CAM se pou
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "CAM modul nelze restartovat!" msgstr "CAM modul nelze restartovat!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Nahrávání" msgstr "Nahrávání"
@ -723,6 +732,9 @@ msgstr "V
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Výchozí ¾ivotnost" msgstr "Výchozí ¾ivotnost"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Priorita pøeru¹ení" msgstr "Priorita pøeru¹ení"
@ -984,6 +996,9 @@ msgstr "Ned
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Brzo zaène nahrávání!" msgstr "Brzo zaène nahrávání!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Zaèalo nahrávání" msgstr "Zaèalo nahrávání"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -704,6 +704,15 @@ msgstr "CAM er i brug - virkelig nulstille?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Kan ikke nulstille CAM!" msgstr "Kan ikke nulstille CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Optagelse" msgstr "Optagelse"
@ -722,6 +731,9 @@ msgstr "Standard prioritet"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Standard levetid (d)" msgstr "Standard levetid (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Pause prioritet" msgstr "Pause prioritet"
@ -983,6 +995,9 @@ msgstr "S
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Optagelse starter snart!" msgstr "Optagelse starter snart!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Optagelse startet" msgstr "Optagelse startet"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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@cadsoft.de>\n" "Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: German\n" "Language-Team: German\n"
@ -704,6 +704,15 @@ msgstr "CAM wird benutzt - wirklich zur
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Zurücksetzen des CAM fehlgeschlagen!" msgstr "Zurücksetzen des CAM fehlgeschlagen!"
msgid "do not pause live video"
msgstr "Live-Signal nicht anhalten"
msgid "confirm pause live video"
msgstr "Anhalten des Live-Signals bestätigen"
msgid "pause live video"
msgstr "Live-Signal anhalten"
msgid "Recording" msgid "Recording"
msgstr "Aufnahme" msgstr "Aufnahme"
@ -722,6 +731,9 @@ msgstr "Default-Priorit
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Default-Lebensdauer (d)" msgstr "Default-Lebensdauer (d)"
msgid "Setup.Recording$Pause key handling"
msgstr "Funktion der Pause-Taste"
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Pause-Priorität" msgstr "Pause-Priorität"
@ -983,6 +995,9 @@ msgstr "Sonntag"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Aufnahme beginnt in Kürze!" msgstr "Aufnahme beginnt in Kürze!"
msgid "Pause live video?"
msgstr "Live-Signal anhalten?"
msgid "Recording started" msgid "Recording started"
msgstr "Aufzeichnung gestartet" msgstr "Aufzeichnung gestartet"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -704,6 +704,15 @@ msgstr ""
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Áäýíáôç ç åðáíáöïñÜ óôü CAM" msgstr "Áäýíáôç ç åðáíáöïñÜ óôü CAM"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "ÅããñáöÞ" msgstr "ÅããñáöÞ"
@ -722,6 +731,9 @@ msgstr "
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)" msgstr "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Ðñïôåñáéüôçôá äéáëåßììáôïò" msgstr "Ðñïôåñáéüôçôá äéáëåßììáôïò"
@ -983,6 +995,9 @@ msgstr "
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "" msgstr ""
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "" msgstr ""

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr "CAM en uso -
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "¡No se puede reiniciar CAM!" msgstr "¡No se puede reiniciar CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Opciones de grabación" msgstr "Opciones de grabación"
@ -723,6 +732,9 @@ msgstr "Prioridad por defecto"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Duración por defecto (días)" msgstr "Duración por defecto (días)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioridad en modo pausa" msgstr "Prioridad en modo pausa"
@ -984,6 +996,9 @@ msgstr "Domingo"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "¡Grabación a punto de empezar!" msgstr "¡Grabación a punto de empezar!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Iniciando grabación" msgstr "Iniciando grabación"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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 <kasjas@hot.ee>\n"
"Language-Team: Estonian\n" "Language-Team: Estonian\n"
@ -704,6 +704,15 @@ msgstr "CAM on kasutuses - taask
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "CAM mooduli taaskäivitus ebaõnnestus!" msgstr "CAM mooduli taaskäivitus ebaõnnestus!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Salvestamine" msgstr "Salvestamine"
@ -722,6 +731,9 @@ msgstr "Vaikimisi prioriteet"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Salvestuse eluiga (päevi)" msgstr "Salvestuse eluiga (päevi)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Pausi prioriteet" msgstr "Pausi prioriteet"
@ -983,6 +995,9 @@ msgstr "P
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Salvestamine tulekul!" msgstr "Salvestamine tulekul!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Salvestamine algas" msgstr "Salvestamine algas"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -707,6 +707,15 @@ msgstr "CA-moduuli k
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "CA-moduulin nollaus epäonnistui!" msgstr "CA-moduulin nollaus epäonnistui!"
msgid "do not pause live video"
msgstr "älä pysäytä lähetystä"
msgid "confirm pause live video"
msgstr "varmista lähetyksen pysäyttäminen"
msgid "pause live video"
msgstr "pysäytä lähetys"
msgid "Recording" msgid "Recording"
msgstr "Tallennus" msgstr "Tallennus"
@ -725,6 +734,9 @@ msgstr "Tallenteen oletusprioriteetti"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Tallenteen oletuselinikä (d)" msgstr "Tallenteen oletuselinikä (d)"
msgid "Setup.Recording$Pause key handling"
msgstr "Taukonäppäimen toiminta"
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Taukotallenteen prioriteetti" msgstr "Taukotallenteen prioriteetti"
@ -986,6 +998,9 @@ msgstr "Sunnuntai"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Tallennus on alkamassa!" msgstr "Tallennus on alkamassa!"
msgid "Pause live video?"
msgstr "Pysäytetäänkö lähetys?"
msgid "Recording started" msgid "Recording started"
msgstr "Tallennus aloitettu" msgstr "Tallennus aloitettu"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -710,6 +710,15 @@ msgstr "CAM en cours d'utilisation - Remettre
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Impossible de réinitialiser le CAM !" msgstr "Impossible de réinitialiser le CAM !"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Enregistrement" msgstr "Enregistrement"
@ -728,6 +737,9 @@ msgstr "Priorit
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Durée de vie par défaut (j)" msgstr "Durée de vie par défaut (j)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Priorité des pauses" msgstr "Priorité des pauses"
@ -989,6 +1001,9 @@ msgstr "Dimanche"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "L'enregistrement va commencer !" msgstr "L'enregistrement va commencer !"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "L'enregistrement a commencé" msgstr "L'enregistrement a commencé"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -706,6 +706,15 @@ msgstr "CAM se koristi - ponovno pokrenuti unato
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Ponovno pokretanje CAM-a neuspje¹no!" msgstr "Ponovno pokretanje CAM-a neuspje¹no!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Snimanje" msgstr "Snimanje"
@ -724,6 +733,9 @@ msgstr "Zadani prioritet"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Zadano trajanje (d)" msgstr "Zadano trajanje (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioritet pauze" msgstr "Prioritet pauze"
@ -985,6 +997,9 @@ msgstr "Nedjelja"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Obnovljena snimka!" msgstr "Obnovljena snimka!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Snimanje zapoèelo" msgstr "Snimanje zapoèelo"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -707,6 +707,15 @@ msgstr "CAM haszn
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "A CAM újraindítás nem sikerült" msgstr "A CAM újraindítás nem sikerült"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Felvétel" msgstr "Felvétel"
@ -725,6 +734,9 @@ msgstr "Alap
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Alapértelmezett élettartam" msgstr "Alapértelmezett élettartam"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Szünet prioritás" msgstr "Szünet prioritás"
@ -986,6 +998,9 @@ msgstr "Vas
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Felvétel rögtön kezdõdik!" msgstr "Felvétel rögtön kezdõdik!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "A felvétel elindítva" msgstr "A felvétel elindítva"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2009-02-08 18:58+0100\n" "PO-Revision-Date: 2009-02-08 18:58+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"
@ -711,6 +711,15 @@ msgstr "La CAM è in uso - vuoi reimpostarla?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Impossibile reimpostare il modulo CAM!" msgstr "Impossibile reimpostare il modulo CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Registrazione" msgstr "Registrazione"
@ -729,6 +738,9 @@ msgstr "Priorità predefinita"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Scadenza predefinita (gg)" msgstr "Scadenza predefinita (gg)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Priorità di pausa" msgstr "Priorità di pausa"
@ -990,6 +1002,9 @@ msgstr "Domenica"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Registrazione imminente!" msgstr "Registrazione imminente!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Registrazione avviata" msgstr "Registrazione avviata"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -708,6 +708,15 @@ msgstr "CAM wordt gebruikt - werkelijk herstarten?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Kan CAM niet herstarten!" msgstr "Kan CAM niet herstarten!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Opname" msgstr "Opname"
@ -726,6 +735,9 @@ msgstr "Standaard prioriteit"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Standaard levensduur (d)" msgstr "Standaard levensduur (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Pauze prioriteit" msgstr "Pauze prioriteit"
@ -987,6 +999,9 @@ msgstr "Zondag"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Opname start binnenkort!" msgstr "Opname start binnenkort!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Opname is gestart!" msgstr "Opname is gestart!"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr ""
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "" msgstr ""
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Opptak" msgstr "Opptak"
@ -723,6 +732,9 @@ msgstr "Normal prioritet (Timer)"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Normal levetid timer (d)" msgstr "Normal levetid timer (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "" msgstr ""
@ -984,6 +996,9 @@ msgstr "S
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "" msgstr ""
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "" msgstr ""

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr "CAM jest w u
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Nie mo¿na zresetowaæ CAM!" msgstr "Nie mo¿na zresetowaæ CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Nagranie" msgstr "Nagranie"
@ -723,6 +732,9 @@ msgstr "Domy
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Domy¶lny czas ¿ycia (d)" msgstr "Domy¶lny czas ¿ycia (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Priorytet pauzy" msgstr "Priorytet pauzy"
@ -984,6 +996,9 @@ msgstr "Niedziela"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Wkrótce nagranie!" msgstr "Wkrótce nagranie!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Rozpoczêto nagrywanie" msgstr "Rozpoczêto nagrywanie"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -704,6 +704,15 @@ msgstr "CAM em uso - quer mesmo reiniciar?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Não é possível reiniciar a CAM" msgstr "Não é possível reiniciar a CAM"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Opções de gravação" msgstr "Opções de gravação"
@ -722,6 +731,9 @@ msgstr "Prioridade por defeito"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Validade por defeito (d)" msgstr "Validade por defeito (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioridade da pausa" msgstr "Prioridade da pausa"
@ -983,6 +995,9 @@ msgstr "Domingo"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Gravação agendada!" msgstr "Gravação agendada!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Gravação iniciada" msgstr "Gravação iniciada"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -707,6 +707,15 @@ msgstr "CAM-ul este in folosin
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Nu pot reseta CAM" msgstr "Nu pot reseta CAM"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Înregistrare" msgstr "Înregistrare"
@ -725,6 +734,9 @@ msgstr "Prioritate implicit
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Timp de pãstrare predefinit (zile)" msgstr "Timp de pãstrare predefinit (zile)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioritate pauzã" msgstr "Prioritate pauzã"
@ -986,6 +998,9 @@ msgstr "Duminic
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Urmeazã o înregistrare!" msgstr "Urmeazã o înregistrare!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "A început înregistrarea" msgstr "A început înregistrarea"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr "CAM
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "¾èØÑÚÐ ßÕàÕ×ÐßãáÚÐ CAM-ÜÞÔãÛï!" msgstr "¾èØÑÚÐ ßÕàÕ×ÐßãáÚÐ CAM-ÜÞÔãÛï!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "·Ðߨáì" msgstr "·Ðߨáì"
@ -723,6 +732,9 @@ msgstr "
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "ÁàÞÚ åàÐÝÕÝØï ×ÐßØáØ ßÞ ãÜÞÛçÐÝØî (Ô)" msgstr "ÁàÞÚ åàÐÝÕÝØï ×ÐßØáØ ßÞ ãÜÞÛçÐÝØî (Ô)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "¿àØÞàØâÕâ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ" msgstr "¿àØÞàØâÕâ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ"
@ -984,6 +996,9 @@ msgstr "
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "·Ðߨáì áÚÞàÞ ÝÐçÝÕâáï" msgstr "·Ðߨáì áÚÞàÞ ÝÐçÝÕâáï"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "·Ðߨáì ÝÐçÐâÐ" msgstr "·Ðߨáì ÝÐçÐâÐ"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -705,6 +705,15 @@ msgstr "CAM je v uporabi - zares resetiraj?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Ne morem resetirati CAM-a!" msgstr "Ne morem resetirati CAM-a!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Snemanje" msgstr "Snemanje"
@ -723,6 +732,9 @@ msgstr "Privzeta prioriteta"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Privzeti ¾ivljenski èas (d)" msgstr "Privzeti ¾ivljenski èas (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioriteta pavze" msgstr "Prioriteta pavze"
@ -984,6 +996,9 @@ msgstr "Nedelja"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Sledi snemanje!" msgstr "Sledi snemanje!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Snemanje se je prièelo" msgstr "Snemanje se je prièelo"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -707,6 +707,15 @@ msgstr "CAM upptagen, vill du verkligen starta om?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "Kan inte återställa CAM!" msgstr "Kan inte återställa CAM!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Inspelning" msgstr "Inspelning"
@ -725,6 +734,9 @@ msgstr "Normal prioritet"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Normal livstid (dagar)" msgstr "Normal livstid (dagar)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Prioritet för direktinspelning" msgstr "Prioritet för direktinspelning"
@ -986,6 +998,9 @@ msgstr "S
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "strax inspelning..." msgstr "strax inspelning..."
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Inspelningen har startat" msgstr "Inspelningen har startat"

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\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"
@ -704,6 +704,15 @@ msgstr "CAM kullan
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "CAM sýfýrlanamadý!" msgstr "CAM sýfýrlanamadý!"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "Kayýt" msgstr "Kayýt"
@ -722,6 +731,9 @@ msgstr "Ola
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "Olaðan çekim ömrü (gün)" msgstr "Olaðan çekim ömrü (gün)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "Duraklama prioritesi" msgstr "Duraklama prioritesi"
@ -983,6 +995,9 @@ msgstr "Pazar"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "Çekim yakýnda baþlýyor!" msgstr "Çekim yakýnda baþlýyor!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "Kayýt baþlandý" msgstr "Kayýt baþlandý"

File diff suppressed because it is too large Load Diff

View File

@ -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@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2008-12-14 16:10+0100\n" "POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-21 08:44+0800\n" "PO-Revision-Date: 2008-03-21 08:44+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"
@ -707,6 +707,15 @@ msgstr "CAM正在使用-是否重启?"
msgid "Can't reset CAM!" msgid "Can't reset CAM!"
msgstr "不能重启CAM" msgstr "不能重启CAM"
msgid "do not pause live video"
msgstr ""
msgid "confirm pause live video"
msgstr ""
msgid "pause live video"
msgstr ""
msgid "Recording" msgid "Recording"
msgstr "记录中" msgstr "记录中"
@ -725,6 +734,9 @@ msgstr "默认优先"
msgid "Setup.Recording$Default lifetime (d)" msgid "Setup.Recording$Default lifetime (d)"
msgstr "默认终身 (d)" msgstr "默认终身 (d)"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgid "Setup.Recording$Pause priority" msgid "Setup.Recording$Pause priority"
msgstr "暂停优先" msgstr "暂停优先"
@ -986,6 +998,9 @@ msgstr "星期天"
msgid "Upcoming recording!" msgid "Upcoming recording!"
msgstr "即将的记录!" msgstr "即将的记录!"
msgid "Pause live video?"
msgstr ""
msgid "Recording started" msgid "Recording started"
msgstr "记录开始!" msgstr "记录开始!"

View File

@ -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.3 2009/03/20 15:49:02 kls Exp $ * $Id: recorder.c 2.4 2009/05/23 12:18:25 kls Exp $
*/ */
#include "recorder.h" #include "recorder.h"
@ -44,12 +44,14 @@ cRecorder::cRecorder(const char *FileName, tChannelID ChannelID, int Priority, i
Type = 0x06; Type = 0x06;
} }
frameDetector = new cFrameDetector(Pid, Type); frameDetector = new cFrameDetector(Pid, Type);
patPmtGenerator.SetChannel(Channel);
fileName = NULL;
index = NULL; index = NULL;
fileSize = 0; fileSize = 0;
lastDiskSpaceCheck = time(NULL); lastDiskSpaceCheck = time(NULL);
fileName = new cFileName(FileName, true); fileName = new cFileName(FileName, true);
int PatVersion, PmtVersion;
if (fileName->GetLastPatPmtVersions(PatVersion, PmtVersion))
patPmtGenerator.SetVersions(PatVersion + 1, PmtVersion + 1);
patPmtGenerator.SetChannel(Channel);
recordFile = fileName->Open(); recordFile = fileName->Open();
if (!recordFile) if (!recordFile)
return; return;

View File

@ -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.12 2009/04/13 13:50:39 kls Exp $ * $Id: recording.c 2.16 2009/06/13 13:34:08 kls Exp $
*/ */
#include "recording.h" #include "recording.h"
@ -20,6 +20,7 @@
#include "channels.h" #include "channels.h"
#include "i18n.h" #include "i18n.h"
#include "interface.h" #include "interface.h"
#include "remux.h"
#include "skins.h" #include "skins.h"
#include "tools.h" #include "tools.h"
#include "videodir.h" #include "videodir.h"
@ -622,8 +623,8 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH); Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
Subtitle = SubtitleBuffer; Subtitle = SubtitleBuffer;
} }
char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE); const char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE);
char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE); const char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
if (macroTITLE || macroEPISODE) { if (macroTITLE || macroEPISODE) {
name = strdup(Timer->File()); name = strdup(Timer->File());
name = strreplace(name, TIMERMACRO_TITLE, Title); name = strreplace(name, TIMERMACRO_TITLE, Title);
@ -672,7 +673,7 @@ cRecording::cRecording(const char *FileName)
sortBuffer = NULL; sortBuffer = NULL;
fileName = strdup(FileName); fileName = strdup(FileName);
FileName += strlen(VideoDirectory) + 1; FileName += strlen(VideoDirectory) + 1;
char *p = strrchr(FileName, '/'); const char *p = strrchr(FileName, '/');
name = NULL; name = NULL;
info = new cRecordingInfo; info = new cRecordingInfo;
@ -1528,8 +1529,8 @@ bool cIndexFile::Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *I
if (Independent) if (Independent)
*Independent = index[Index].independent; *Independent = index[Index].independent;
if (Length) { if (Length) {
int fn = index[Index + 1].number; uint16_t fn = index[Index + 1].number;
int fo = index[Index + 1].offset; off_t fo = index[Index + 1].offset;
if (fn == *FileNumber) if (fn == *FileNumber)
*Length = fo - *FileOffset; *Length = fo - *FileOffset;
else else
@ -1559,8 +1560,8 @@ int cIndexFile::GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber, off
*FileOffset = index[Index].offset; *FileOffset = index[Index].offset;
if (Length) { if (Length) {
// all recordings end with a non-independent frame, so the following should be safe: // all recordings end with a non-independent frame, so the following should be safe:
int fn = index[Index + 1].number; uint16_t fn = index[Index + 1].number;
int fo = index[Index + 1].offset; off_t fo = index[Index + 1].offset;
if (fn == *FileNumber) if (fn == *FileNumber)
*Length = fo - *FileOffset; *Length = fo - *FileOffset;
else { else {
@ -1629,6 +1630,57 @@ cFileName::~cFileName()
free(fileName); free(fileName);
} }
bool cFileName::GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
{
if (fileName && !isPesRecording) {
// Find the last recording file:
int Number = 1;
for (; Number <= MAXFILESPERRECORDINGTS + 1; Number++) { // +1 to correctly set Number in case there actually are that many files
sprintf(pFileNumber, RECORDFILESUFFIXTS, Number);
if (access(fileName, F_OK) != 0) { // file doesn't exist
Number--;
break;
}
}
for (; Number > 0; Number--) {
// Search for a PAT packet from the end of the file:
cPatPmtParser PatPmtParser;
sprintf(pFileNumber, RECORDFILESUFFIXTS, Number);
int fd = open(fileName, O_RDONLY | O_LARGEFILE, DEFFILEMODE);
if (fd >= 0) {
off_t pos = lseek(fd, -TS_SIZE, SEEK_END);
while (pos >= 0) {
// Read and parse the PAT/PMT:
uchar buf[TS_SIZE];
while (read(fd, buf, sizeof(buf)) == sizeof(buf)) {
if (buf[0] == TS_SYNC_BYTE) {
int Pid = TsPid(buf);
if (Pid == 0)
PatPmtParser.ParsePat(buf, sizeof(buf));
else if (Pid == PatPmtParser.PmtPid()) {
PatPmtParser.ParsePmt(buf, sizeof(buf));
if (PatPmtParser.GetVersions(PatVersion, PmtVersion)) {
close(fd);
return true;
}
}
else
break; // PAT/PMT is always in one sequence
}
else
return false;
}
pos = lseek(fd, pos - TS_SIZE, SEEK_SET);
}
close(fd);
}
else
break;
}
}
return false;
}
cUnbufferedFile *cFileName::Open(void) cUnbufferedFile *cFileName::Open(void)
{ {
if (!file) { if (!file) {

View File

@ -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.7 2009/04/19 09:00:45 kls Exp $ * $Id: recording.h 2.8 2009/05/23 12:14:42 kls Exp $
*/ */
#ifndef __RECORDING_H #ifndef __RECORDING_H
@ -260,6 +260,7 @@ public:
~cFileName(); ~cFileName();
const char *Name(void) { return fileName; } const char *Name(void) { return fileName; }
int Number(void) { return fileNumber; } int Number(void) { return fileNumber; }
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);

29
remux.c
View File

@ -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.20 2009/05/03 14:43:25 kls Exp $ * $Id: remux.c 2.24 2009/06/06 13:24:57 kls Exp $
*/ */
#include "remux.h" #include "remux.h"
@ -357,6 +357,12 @@ void cPatPmtGenerator::GeneratePmt(cChannel *Channel)
} }
} }
void cPatPmtGenerator::SetVersions(int PatVersion, int PmtVersion)
{
patVersion = PatVersion & 0x1F;
pmtVersion = PmtVersion & 0x1F;
}
void cPatPmtGenerator::SetChannel(cChannel *Channel) void cPatPmtGenerator::SetChannel(cChannel *Channel)
{ {
if (Channel) { if (Channel) {
@ -383,8 +389,9 @@ uchar *cPatPmtGenerator::GetPmt(int &Index)
// --- cPatPmtParser --------------------------------------------------------- // --- cPatPmtParser ---------------------------------------------------------
cPatPmtParser::cPatPmtParser(void) cPatPmtParser::cPatPmtParser(bool UpdatePrimaryDevice)
{ {
updatePrimaryDevice = UpdatePrimaryDevice;
Reset(); Reset();
} }
@ -472,6 +479,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
dbgpatpmt(" pcr = %d\n", Pmt.getPCRPid()); dbgpatpmt(" pcr = %d\n", Pmt.getPCRPid());
if (pmtVersion == Pmt.getVersionNumber()) if (pmtVersion == Pmt.getVersionNumber())
return; return;
if (updatePrimaryDevice)
cDevice::PrimaryDevice()->ClrAvailableTracks(false, true); cDevice::PrimaryDevice()->ClrAvailableTracks(false, true);
int NumApids = 0; int NumApids = 0;
int NumDpids = 0; int NumDpids = 0;
@ -481,6 +489,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
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());
switch (stream.getStreamType()) { switch (stream.getStreamType()) {
case 0x01: // STREAMTYPE_11172_VIDEO
case 0x02: // STREAMTYPE_13818_VIDEO case 0x02: // STREAMTYPE_13818_VIDEO
case 0x1B: // MPEG4 case 0x1B: // MPEG4
vpid = stream.getPid(); vpid = stream.getPid();
@ -515,6 +524,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
} }
delete d; delete d;
} }
if (updatePrimaryDevice)
cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs); cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs);
NumApids++; NumApids++;
} }
@ -550,6 +560,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
break; break;
} }
} }
if (updatePrimaryDevice)
cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs); cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs);
NumSpids++; NumSpids++;
} }
@ -566,6 +577,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
} }
if (dpid) { if (dpid) {
if (NumDpids < MAXDPIDS) { if (NumDpids < MAXDPIDS) {
if (updatePrimaryDevice)
cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang); cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
NumDpids++; NumDpids++;
} }
@ -574,9 +586,11 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
break; break;
} }
dbgpatpmt("\n"); dbgpatpmt("\n");
if (updatePrimaryDevice) {
cDevice::PrimaryDevice()->EnsureAudioTrack(true); cDevice::PrimaryDevice()->EnsureAudioTrack(true);
cDevice::PrimaryDevice()->EnsureSubtitleTrack(); cDevice::PrimaryDevice()->EnsureSubtitleTrack();
} }
}
pmtVersion = Pmt.getVersionNumber(); pmtVersion = Pmt.getVersionNumber();
} }
else else
@ -584,13 +598,19 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
pmtSize = 0; pmtSize = 0;
} }
bool cPatPmtParser::GetVersions(int &PatVersion, int &PmtVersion)
{
PatVersion = patVersion;
PmtVersion = pmtVersion;
return patVersion >= 0 && pmtVersion >= 0;
}
// --- cTsToPes -------------------------------------------------------------- // --- cTsToPes --------------------------------------------------------------
cTsToPes::cTsToPes(void) cTsToPes::cTsToPes(void)
{ {
data = NULL; data = NULL;
size = length = offset = 0; size = length = offset = 0;
synced = false;
} }
cTsToPes::~cTsToPes() cTsToPes::~cTsToPes()
@ -702,7 +722,7 @@ cFrameDetector::cFrameDetector(int Pid, int Type)
newFrame = independentFrame = false; newFrame = independentFrame = false;
numPtsValues = 0; numPtsValues = 0;
numIFrames = 0; numIFrames = 0;
isVideo = type == 0x02 || type == 0x1B; // MPEG 2 or MPEG 4 isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or 4
frameDuration = 0; frameDuration = 0;
framesInPayloadUnit = framesPerPayloadUnit = 0; framesInPayloadUnit = framesPerPayloadUnit = 0;
payloadUnitOfFrame = 0; payloadUnitOfFrame = 0;
@ -795,6 +815,7 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
scanner <<= 8; scanner <<= 8;
scanner |= Data[i]; scanner |= Data[i];
switch (type) { switch (type) {
case 0x01: // MPEG 1 video
case 0x02: // MPEG 2 video case 0x02: // MPEG 2 video
if (scanner == 0x00000100) { // Picture Start Code if (scanner == 0x00000100) { // Picture Start Code
if (synced && Processed) if (synced && Processed)

31
remux.h
View File

@ -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.10 2009/04/19 10:57:09 kls Exp $ * $Id: remux.h 2.17 2009/06/06 13:26:23 kls Exp $
*/ */
#ifndef __REMUX_H #ifndef __REMUX_H
@ -181,6 +181,15 @@ protected:
///< with GetPmt(). ///< with GetPmt().
public: public:
cPatPmtGenerator(cChannel *Channel = NULL); cPatPmtGenerator(cChannel *Channel = NULL);
void SetVersions(int PatVersion, int PmtVersion);
///< Sets the version numbers for the generated PAT and PMT, in case
///< this generator is used to, e.g., continue a previously interrupted
///< recording (in which case the numbers given should be derived from
///< the PAT/PMT versions last used in the existing recording, incremented
///< by 1. If the given numbers exceed the allowed range of 0..31, the
///< higher bits will automatically be cleared.
///< SetVersions() needs to be called before SetChannel() in order to
///< have an effect from the very start.
void SetChannel(cChannel *Channel); void SetChannel(cChannel *Channel);
///< Sets the Channel for which the PAT/PMT shall be generated. ///< Sets the Channel for which the PAT/PMT shall be generated.
uchar *GetPat(void); uchar *GetPat(void);
@ -204,10 +213,11 @@ private:
int pmtPid; int pmtPid;
int vpid; int vpid;
int vtype; int vtype;
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; }
public: public:
cPatPmtParser(void); cPatPmtParser(bool UpdatePrimaryDevice = false);
void Reset(void); void Reset(void);
///< Resets the parser. This function must be called whenever a new ///< Resets the parser. This function must be called whenever a new
///< stream is parsed. ///< stream is parsed.
@ -221,6 +231,9 @@ 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);
///< Returns true if a valid PAT/PMT has been parsed and stores
///< the current version numbers in the given variables.
int PmtPid(void) { return pmtPid; } int PmtPid(void) { 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.
@ -239,7 +252,6 @@ private:
int size; int size;
int length; int length;
int offset; int offset;
bool synced;
public: public:
cTsToPes(void); cTsToPes(void);
~cTsToPes(); ~cTsToPes();
@ -249,11 +261,24 @@ public:
///< If the given TS packet starts a new PES payload packet, the converter ///< If the given TS packet starts a new PES payload packet, the converter
///< will be automatically reset. Any packets before the first one that starts ///< will be automatically reset. Any packets before the first one that starts
///< a new PES payload packet will be ignored. ///< a new PES payload packet will be ignored.
///< Once a TS packet has been put into a cTsToPes converter, all subsequent
///< packets until the next call to Reset() must belong to the same PID as
///< the first packet. There is no check whether this actually is the case, so
///< the caller is responsible for making sure this condition is met.
const uchar *GetPes(int &Length); const uchar *GetPes(int &Length);
///< Gets a pointer to the complete PES packet, or NULL if the packet ///< Gets a pointer to the complete PES packet, or NULL if the packet
///< is not complete yet. If the packet is complete, Length will contain ///< is not complete yet. If the packet is complete, Length will contain
///< the total packet length. The returned pointer is only valid until ///< the total packet length. The returned pointer is only valid until
///< the next call to PutTs() or Reset(), or until this object is destroyed. ///< the next call to PutTs() or Reset(), or until this object is destroyed.
///< Once GetPes() has returned a non-NULL value, it must be called
///< repeatedly, and the data processed, until it returns NULL. This
///< is because video packets may be larger than the data a single
///< PES packet with an actual length field can hold, and are therefore
///< split into several PES packets with smaller sizes.
///< Note that for video data GetPes() may only be called if the next
///< TS packet that will be given to PutTs() has the "payload start" flag
///< set, because this is the only way to determine the end of a video PES
///< packet.
void Reset(void); void Reset(void);
///< Resets the converter. This needs to be called after a PES packet has ///< Resets the converter. This needs to be called after a PES packet has
///< been fetched by a call to GetPes(), and before the next call to ///< been fetched by a call to GetPes(), and before the next call to

View File

@ -7,7 +7,7 @@
* Parts of this file were inspired by the 'ringbuffy.c' from the * Parts of this file were inspired by the 'ringbuffy.c' from the
* LinuxDVB driver (see linuxtv.org). * LinuxDVB driver (see linuxtv.org).
* *
* $Id: ringbuffer.c 2.1 2009/02/24 11:32:14 kls Exp $ * $Id: ringbuffer.c 2.2 2009/05/17 10:05:17 kls Exp $
*/ */
#include "ringbuffer.h" #include "ringbuffer.h"
@ -43,7 +43,7 @@ void cRingBuffer::UpdatePercentage(int Fill)
{ {
if (Fill > maxFill) if (Fill > maxFill)
maxFill = Fill; maxFill = Fill;
int percent = Fill * 100 / (Size() - 1) / PERCENTAGEDELTA * PERCENTAGEDELTA; int percent = Fill * 100 / (Size() - 1) / PERCENTAGEDELTA * PERCENTAGEDELTA; // clamp down to nearest quantum
if (percent != lastPercent) { if (percent != lastPercent) {
if (percent >= PERCENTAGETHRESHOLD && percent > lastPercent || percent < PERCENTAGETHRESHOLD && lastPercent >= PERCENTAGETHRESHOLD) { if (percent >= PERCENTAGETHRESHOLD && percent > lastPercent || percent < PERCENTAGETHRESHOLD && lastPercent >= PERCENTAGETHRESHOLD) {
dsyslog("buffer usage: %d%% (tid=%d)", percent, getThreadTid); dsyslog("buffer usage: %d%% (tid=%d)", percent, getThreadTid);

View File

@ -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: skins.c 2.0 2008/02/17 11:31:09 kls Exp $ * $Id: skins.c 2.1 2009/06/06 15:12:31 kls Exp $
*/ */
#include "skins.h" #include "skins.h"
@ -78,8 +78,9 @@ void cSkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5)
tabs[3] = Tab3 ? tabs[2] + Tab3 : 0; tabs[3] = Tab3 ? tabs[2] + Tab3 : 0;
tabs[4] = Tab4 ? tabs[3] + Tab4 : 0; tabs[4] = Tab4 ? tabs[3] + Tab4 : 0;
tabs[5] = Tab5 ? tabs[4] + Tab5 : 0; tabs[5] = Tab5 ? tabs[4] + Tab5 : 0;
int AvgCharWidth = Setup.FontOsdSize * 3 / 5; // just an estimate
for (int i = 1; i < MaxTabs; i++) for (int i = 1; i < MaxTabs; i++)
tabs[i] *= 12;//XXX average character width of font used for items - see also skincurses.c!!! tabs[i] *= AvgCharWidth;
} }
void cSkinDisplayMenu::Scroll(bool Up, bool Page) void cSkinDisplayMenu::Scroll(bool Up, bool Page)

15
svdrp.c
View File

@ -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.3 2009/04/13 13:35:29 kls Exp $ * $Id: svdrp.c 2.5 2009/06/06 14:03:55 kls Exp $
*/ */
#include "svdrp.h" #include "svdrp.h"
@ -739,7 +739,7 @@ void cSVDRP::CmdGRAB(const char *Option)
char *strtok_next; char *strtok_next;
FileName = strtok_r(p, delim, &strtok_next); FileName = strtok_r(p, delim, &strtok_next);
// image type: // image type:
char *Extension = strrchr(FileName, '.'); const char *Extension = strrchr(FileName, '.');
if (Extension) { if (Extension) {
if (strcasecmp(Extension, ".jpg") == 0 || strcasecmp(Extension, ".jpeg") == 0) if (strcasecmp(Extension, ".jpg") == 0 || strcasecmp(Extension, ".jpeg") == 0)
Jpeg = true; Jpeg = true;
@ -798,16 +798,17 @@ void cSVDRP::CmdGRAB(const char *Option)
char RealFileName[PATH_MAX]; char RealFileName[PATH_MAX];
if (FileName) { if (FileName) {
if (grabImageDir) { if (grabImageDir) {
cString s; cString s(FileName);
char *slash = strrchr(FileName, '/'); FileName = s;
const char *slash = strrchr(FileName, '/');
if (!slash) { if (!slash) {
s = AddDirectory(grabImageDir, FileName); s = AddDirectory(grabImageDir, FileName);
FileName = s; FileName = s;
} }
slash = strrchr(FileName, '/'); // there definitely is one slash = strrchr(FileName, '/'); // there definitely is one
*slash = 0; cString t(s);
char *r = realpath(FileName, RealFileName); t.Truncate(slash - FileName);
*slash = '/'; char *r = realpath(t, RealFileName);
if (!r) { if (!r) {
LOG_ERROR_STR(FileName); LOG_ERROR_STR(FileName);
Reply(501, "Invalid file name \"%s\"", FileName); Reply(501, "Invalid file name \"%s\"", FileName);

View File

@ -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.2 2009/01/16 14:29:08 kls Exp $ * $Id: tools.c 2.3 2009/05/31 11:43:24 kls Exp $
*/ */
#include "tools.h" #include "tools.h"
@ -1473,16 +1473,18 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
int cUnbufferedFile::Close(void) int cUnbufferedFile::Close(void)
{ {
#ifdef USE_FADVISE
if (fd >= 0) { if (fd >= 0) {
#ifdef USE_FADVISE
if (totwritten) // if we wrote anything make sure the data has hit the disk before if (totwritten) // if we wrote anything make sure the data has hit the disk before
fdatasync(fd); // calling fadvise, as this is our last chance to un-cache it. fdatasync(fd); // calling fadvise, as this is our last chance to un-cache it.
posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED); posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
}
#endif #endif
int OldFd = fd; int OldFd = fd;
fd = -1; fd = -1;
return close(OldFd); return close(OldFd);
}
errno = EBADF;
return -1;
} }
// When replaying and going e.g. FF->PLAY the position jumps back 2..8M // When replaying and going e.g. FF->PLAY the position jumps back 2..8M

10
vdr.c
View File

@ -22,7 +22,7 @@
* *
* The project's page is at http://www.cadsoft.de/vdr * The project's page is at http://www.cadsoft.de/vdr
* *
* $Id: vdr.c 2.8 2009/05/03 10:33:06 kls Exp $ * $Id: vdr.c 2.10 2009/05/21 11:14:48 kls Exp $
*/ */
#include <getopt.h> #include <getopt.h>
@ -750,8 +750,10 @@ int main(int argc, char *argv[])
// Update the OSD size: // Update the OSD size:
{ {
static time_t lastOsdSizeUpdate = 0; static time_t lastOsdSizeUpdate = 0;
if (Now != lastOsdSizeUpdate) // once per second if (Now != lastOsdSizeUpdate) { // once per second
cOsdProvider::UpdateOsdSize(); cOsdProvider::UpdateOsdSize();
lastOsdSizeUpdate = Now;
}
} }
// Restart the Watchdog timer: // Restart the Watchdog timer:
if (WatchdogTimeout > 0) { if (WatchdogTimeout > 0) {
@ -1060,8 +1062,12 @@ int main(int argc, char *argv[])
case kPause: case kPause:
if (!cControl::Control()) { if (!cControl::Control()) {
DELETE_MENU; DELETE_MENU;
if (Setup.PauseKeyHandling) {
if (Setup.PauseKeyHandling > 1 || Interface->Confirm(tr("Pause live video?"))) {
if (!cRecordControls::PauseLiveVideo()) if (!cRecordControls::PauseLiveVideo())
Skins.Message(mtError, tr("No free DVB device to record!")); Skins.Message(mtError, tr("No free DVB device to record!"));
}
}
key = kNone; // nobody else needs to see this key key = kNone; // nobody else needs to see this key
} }
break; break;