Commit 14bd32b9 authored by Klaus Schmidinger's avatar Klaus Schmidinger Committed by Dieter Hametner

Version 1.7.37

VDR developer version 1.7.37 is now available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.37.tar.bz2

A 'diff' against the previous version is available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.36-1.7.37.diff

MD5 checksums:

602dc7e678bcfcf075da36344a337562  vdr-1.7.37.tar.bz2
34e953fcffc112f316cbfc1f53915324  vdr-1.7.36-1.7.37.diff

WARNING:
========

This is a developer version. Even though I use it in my productive
environment. I strongly recommend that you only use it under controlled
conditions and for testing and debugging.

Approaching version 2.0.0:
==========================

If all goes well, there should be no more functional or API changes
before the final version 2.0.0. There will just be a few more fixes.

From the HISTORY file:
- Now also using FindHeader() in cMpeg2Fixer::AdjTref() (pointed out by Sören Moch).
- Added missing template for DVBDIR to Make.config.template (reported by Derek Kelly).
- The LCARS menu now also works if the OSD has only 1bpp (two colors).
- Fixed possible garbage in the remaining time of the LCARS replay display in case the
  hours change from two to one digit.
- Fixed upscaling bitmaps. The last row and column of the scaled bitmap was not filled,
  which resulted in empty lines between scaled subtitles.
- Fixed a leftover line in case a two line subtitle was followed by a one line
  subtitle on the dvbhddevice in "high level" OSD mode.
- Returning 0 from cDvbSdFfDevice::NumProvidedSystems() if option --outputonly is given.
- The index file is now closed after initially reading it if it is older than 3600 seconds.
- Improved responsiveness during replay when close to the recording's end.
- Fixed a leftover progress display in the LCARS main menu when replay of a recording
  ends while the menu is open, and the live channel has no EPG information.
- Fixed possible audio chatter when a recording is replayed to its very end.
- Added dependency on 'i18n' to 'install-i18n' in the VDR Makefile (thanks to Tobias
  Grimm).
- Changed several calls to Skins.Message() in vdr.c to Skins.QueueMessage() in order to
  avoid a black screen while such a message is displayed in case the channel will be
  switched (reported by Uwe Scheffler).
- Updated the Slovakian language texts (thanks to Milan Hrala).
- Improved LIRC timing for repeat function.
- When pausing live video, the current audio and subtitle tracks are now retained.
- Added some notes about plugin Makefiles to PLUGINS.html.
- Avoiding an extra key press event if the repeat function kicks in when controlling
  VDR via the PC keyboard.
- The new options "Setup/Miscellaneous/Remote control repeat delay" and
  "Setup/Miscellaneous/Remote control repeat delta" can be used to adjust the
  behavior of the remote control in case a key is held pressed down for a while, so
  that the repeat function kicks in (see MANUAL).
  The builtin LIRC and KBD remote controls already use these parameters. It is
  recommended that plugins that implement an interface to any kind of remote controls
  also use the parameters Setup.RcRepeatDelay and Setup.RcRepeatDelta for the desired
  purpose, and remove any setup options they might have that serve the same purpose.
- cTimer no longer does any special "VFAT" handling to shorten directory names to 40
  characters. When a string is used as a directory name for a recording, the maximum
  length of the directory path, as well as the individual directory names, is now
  limited to the values specified by the new command line option --dirnames (see
  man vdr(1) for details). For backwards compatibility the option --vfat is still
  available and has the same effect as --dirnames=250,40,1.
- The macro MaxFileName is now obsolete and may be removed in future versions. Use
  NAME_MAX directly instead.
- There is no more fixed limit to the maximum number of cPixmap objects an OSD can
  create. However, a particular device may still be unable to create an arbitrary
  number of pixmaps, due to limited resources. So it's always a good idea to use
  as few pixmaps as possible.
- Fixed formatting and removed some superfluous break statements in vdr.c's command
  line option switch.
parent 889f7dee
......@@ -280,6 +280,7 @@ Uwe Scheffler <linux_dvb@uni.de>
for reporting a problem with frozen live view in conjunction with device bonding
for reporting a problem in handling the PrimaryLimit when requesting a device for
live viewing
for reporting a black screen while a "Recording started" message is displayed
Matjaz Thaler <matjaz.thaler@guest.arnes.si>
for improving AC3 decoding when replaying DVDs
......@@ -2384,6 +2385,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net>
for avoiding a gcc 4.6 compiler error in the skincurses plugin.
for suggesting to move setting LC_NUMERIC further up to make sure any floating point
numbers use a decimal point
for adding dependency on 'i18n' to 'install-i18n' in the VDR Makefile
Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
......@@ -2735,6 +2737,7 @@ Derek Kelly (user.vdr@gmail.com)
for reporting a problem with getting the maximum short channel name length in case there
are no short names at all
for reporting an incompatible change from DTV_DVBT2_PLP_ID to DTV_STREAM_ID in DVB API 5.8
for reporting a missing template for DVBDIR in Make.config.template
Marcel Unbehaun <frostworks@gmx.de>
for adding cRecordingInfo::GetEvent()
......@@ -3025,6 +3028,7 @@ S
for simplifying calculating the PTS offset in cPtsFixer::Fix() and fixing the overflow
handling of PCR values
for improving cutting MPEG-2 video
for pointing out that FindHeader() can also be used in cMpeg2Fixer::AdjTref()
Peter Münster <pmlists@free.fr>
for fixing 'make install' to not overwrite existing configuration files
......
......@@ -7533,3 +7533,54 @@ Video Disk Recorder Revision History
- Improved cutting MPEG-2 video (thanks to Sören Moch).
- Reduced the number of retries in cTransfer::Receive() to avoid blocking recordings
in case the primary device can't handle the current live signal.
2013-02-08: Version 1.7.37
- Now also using FindHeader() in cMpeg2Fixer::AdjTref() (pointed out by Sören Moch).
- Added missing template for DVBDIR to Make.config.template (reported by Derek Kelly).
- The LCARS menu now also works if the OSD has only 1bpp (two colors).
- Fixed possible garbage in the remaining time of the LCARS replay display in case the
hours change from two to one digit.
- Fixed upscaling bitmaps. The last row and column of the scaled bitmap was not filled,
which resulted in empty lines between scaled subtitles.
- Fixed a leftover line in case a two line subtitle was followed by a one line
subtitle on the dvbhddevice in "high level" OSD mode.
- Returning 0 from cDvbSdFfDevice::NumProvidedSystems() if option --outputonly is given.
- The index file is now closed after initially reading it if it is older than 3600 seconds.
- Improved responsiveness during replay when close to the recording's end.
- Fixed a leftover progress display in the LCARS main menu when replay of a recording
ends while the menu is open, and the live channel has no EPG information.
- Fixed possible audio chatter when a recording is replayed to its very end.
- Added dependency on 'i18n' to 'install-i18n' in the VDR Makefile (thanks to Tobias
Grimm).
- Changed several calls to Skins.Message() in vdr.c to Skins.QueueMessage() in order to
avoid a black screen while such a message is displayed in case the channel will be
switched (reported by Uwe Scheffler).
- Updated the Slovakian language texts (thanks to Milan Hrala).
- Improved LIRC timing for repeat function.
- When pausing live video, the current audio and subtitle tracks are now retained.
- Added some notes about plugin Makefiles to PLUGINS.html.
- Avoiding an extra key press event if the repeat function kicks in when controlling
VDR via the PC keyboard.
- The new options "Setup/Miscellaneous/Remote control repeat delay" and
"Setup/Miscellaneous/Remote control repeat delta" can be used to adjust the
behavior of the remote control in case a key is held pressed down for a while, so
that the repeat function kicks in (see MANUAL).
The builtin LIRC and KBD remote controls already use these parameters. It is
recommended that plugins that implement an interface to any kind of remote controls
also use the parameters Setup.RcRepeatDelay and Setup.RcRepeatDelta for the desired
purpose, and remove any setup options they might have that serve the same purpose.
- cTimer no longer does any special "VFAT" handling to shorten directory names to 40
characters. When a string is used as a directory name for a recording, the maximum
length of the directory path, as well as the individual directory names, is now
limited to the values specified by the new command line option --dirnames (see
man vdr(1) for details). For backwards compatibility the option --vfat is still
available and has the same effect as --dirnames=250,40,1.
- The macro MaxFileName is now obsolete and may be removed in future versions. Use
NAME_MAX directly instead.
- There is no more fixed limit to the maximum number of cPixmap objects an OSD can
create. However, a particular device may still be unable to create an arbitrary
number of pixmaps, due to limited resources. So it's always a good idea to use
as few pixmaps as possible.
- Fixed formatting and removed some superfluous break statements in vdr.c's command
line option switch.
......@@ -58,8 +58,10 @@ Alternatively you can use the '--lirc' option at runtime.
This option accepts an optional path to the remote control device,
the default of which can be set via the LIRC_DEVICE macro.
If your video directory will be on a VFAT partition, you can call VDR with
the command line option '--vfat'.
If you want to make your video directory available to other machines that
have limitations on directory name lengths and/or allowed characters in
directory names, you can call VDR with the command line option '--dirnames'
(see man vdr(1) for details).
When running, the 'vdr' program writes status information into the
system log file, which is usually /var/log/messages (or /var/log/user.log,
......
......@@ -926,6 +926,18 @@ Version 1.6
key. Note that the total maximum is also limited by
the "OSD/Channel info time" parameter.
Remote control repeat delay = 300
The earliest time (in milliseconds) after which the repeat
function of the remote control kicks in if a key is held
pressed down for a while. If the remote control in use
has a repeat delay that is longer than that given in this
parameter, that longer delay will prevail.
Remote control repeat delta = 100
The time (in milliseconds) between two subsequent key
presses generated by the remote control's repeat function.
If the remote control in use has a repeat delta that is
longer than that given in this parameter, that longer delay
will prevail.
Initial channel = The channel ID of the channel that shall be tuned to when
VDR starts. Default is empty, which means that it will
tune to the channel that was on before VDR was stopped.
......
......@@ -6,7 +6,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Make.config.template 2.16 2013/01/12 13:50:17 kls Exp $
# $Id: Make.config.template 2.18 2013/02/08 10:31:38 kls Exp $
### The C compiler and options:
......@@ -34,6 +34,7 @@ endif
#MANDIR = $(PREFIX)/share/man
#PCDIR = $(PREFIX)/lib/pkgconfig
#RESDIR = $(PREFIX)/share/vdr
#DVBDIR = /usr/src/v4l-dvb/linux/include/uapi
#VIDEODIR = /srv/vdr/video
#CONFDIR = /var/lib/vdr
......
......@@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Makefile 2.49 2013/01/12 13:45:01 kls Exp $
# $Id: Makefile 2.50 2013/01/27 14:19:49 kls Exp $
.DELETE_ON_ERROR:
......@@ -183,7 +183,7 @@ $(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo
.PHONY: i18n
i18n: $(I18Nmsgs)
install-i18n:
install-i18n: i18n
@mkdir -p $(DESTDIR)$(LOCDIR)
cp -r $(LOCALEDIR)/* $(DESTDIR)$(LOCDIR)
......
......@@ -173,9 +173,15 @@ The <tt>src</tt> directory contains one subdirectory for each plugin, which carr
the name of that plugin (in the above example that would be <tt>hello</tt>).
What's inside the individual source directory of a
plugin is entirely up to the author of that plugin. The only prerequisites are
that there is a <tt>Makefile</tt> that provides the targets <tt>all</tt> and
that there is a <tt>Makefile</tt> that provides the targets <tt>all</tt><modified>, <tt>install</tt></modified> and
<tt>clean</tt>, and that a call to <tt>make all</tt> actually produces a dynamically
loadable library file for that plugin (we'll get to the details later).
<modified>
The dynamically loadable library file for the plugin shall be located directly under
the plugin's source directory.
See the section <a href="#Initializing a new plugin directory">Initializing a new plugin directory</a>
for how to generate an example Makefile.
</modified>
<p>
The <tt>lib</tt> directory contains the dynamically loadable libraries of all
available plugins. Note that the names of these files are created by concatenating
......@@ -2215,6 +2221,13 @@ Put(uint64 Code, bool Repeat = false, bool Release = false);
</pre></td></tr></table><p>
The other parameters have the same meaning as in the first version of this function.
<p>
<modified>
If your remote control has a repeat function that automatically repeats key events
if a key is held pressed down for a while, your derived class should use the global
parameters <tt>Setup.RcRepeatDelay</tt> and <tt>Setup.RcRepeatDelta</tt> to allow
users to configure the behavior of this function.
</modified>
<hr><h2><a name="Conditional Access">Conditional Access</a></h2>
......
......@@ -51,3 +51,7 @@ VDR Plugin 'dvbhddevice' Revision History
2013-01-12: Version 0.0.6
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-24: Version 0.0.7
- Fixed cHdffOsd::SetAreas() (didn't clear the OSD).
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbhddevice.c 1.19 2013/01/12 14:11:35 kls Exp $
* $Id: dvbhddevice.c 1.21 2013/01/29 08:59:36 kls Exp $
*/
#include <vdr/plugin.h>
......@@ -12,7 +12,7 @@
#include "menu.h"
#include "setup.h"
static const char *VERSION = "0.0.6";
static const char *VERSION = "0.0.7";
static const char *DESCRIPTION = trNOOP("HD Full Featured DVB device");
static const char *MAINMENUENTRY = "dvbhddevice";
......@@ -26,6 +26,7 @@ public:
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return tr(DESCRIPTION); }
virtual void MainThreadHook(void);
virtual void Stop(void);
virtual const char *MainMenuEntry(void);
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
......@@ -60,6 +61,19 @@ void cPluginDvbhddevice::MainThreadHook(void)
}
}
void cPluginDvbhddevice::Stop(void)
{
if (gHdffSetup.CecEnabled && gHdffSetup.CecTvOff)
{
HDFF::cHdffCmdIf * hdffCmdIf = cDvbHdFfDevice::GetHdffCmdHandler();
if (hdffCmdIf)
{
hdffCmdIf->CmdHdmiSendCecCommand(HDFF_CEC_COMMAND_TV_OFF);
isyslog("HDFF_CEC_COMMAND_TV_OFF");
}
}
}
const char *cPluginDvbhddevice::MainMenuEntry(void)
{
return gHdffSetup.HideMainMenu ? NULL : MAINMENUENTRY;
......
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbhdffdevice.c 1.47 2012/12/29 13:23:22 kls Exp $
* $Id: dvbhdffdevice.c 1.48 2013/01/29 08:59:36 kls Exp $
*/
#include <stdint.h>
......@@ -96,10 +96,6 @@ cDvbHdFfDevice::~cDvbHdFfDevice()
delete spuDecoder;
if (isHdffPrimary)
{
if (gHdffSetup.CecEnabled && gHdffSetup.CecTvOff)
{
mHdffCmdIf->CmdHdmiSendCecCommand(HDFF_CEC_COMMAND_TV_OFF);
}
delete mHdffCmdIf;
}
// We're not explicitly closing any device files here, since this sometimes
......
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: hdffosd.c 1.18 2012/11/15 09:20:24 kls Exp $
* $Id: hdffosd.c 1.20 2013/01/29 08:59:36 kls Exp $
*/
#include "hdffosd.h"
......@@ -38,7 +38,6 @@ private:
int mTop;
int mDispWidth;
int mDispHeight;
bool shown;
bool mChanged;
uint32_t mDisplay;
tFontFace mFontFaces[MAX_NUM_FONTFACES];
......@@ -77,7 +76,6 @@ cHdffOsd::cHdffOsd(int Left, int Top, HDFF::cHdffCmdIf * pHdffCmdIf, uint Level)
mHdffCmdIf = pHdffCmdIf;
mLeft = Left;
mTop = Top;
shown = false;
mChanged = false;
mBitmapPalette = HDFF_INVALID_HANDLE;
......@@ -154,11 +152,10 @@ eOsdError cHdffOsd::SetAreas(const tArea *Areas, int NumAreas)
{
//printf("SetAreas %d: %d %d %d %d %d\n", i, Areas[i].x1, Areas[i].y1, Areas[i].x2, Areas[i].y2, Areas[i].bpp);
}
if (shown)
if (mDisplay != HDFF_INVALID_HANDLE)
{
mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
shown = false;
}
error = cOsd::SetAreas(Areas, NumAreas);
......@@ -180,11 +177,10 @@ void cHdffOsd::SetActive(bool On)
if (GetBitmap(0)) // only flush here if there are already bitmaps
Flush();
}
else if (shown)
else if (mDisplay != HDFF_INVALID_HANDLE)
{
mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
shown = false;
}
}
}
......
......@@ -37,3 +37,7 @@ VDR Plugin 'dvbsddevice' Revision History
2013-01-12: Version 0.0.8
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-25: Version 0.0.9
- Returning 0 from cDvbSdFfDevice::NumProvidedSystems() if option --outputonly is given.
......@@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsddevice.c 1.8 2013/01/12 14:12:07 kls Exp $
* $Id: dvbsddevice.c 1.9 2013/01/25 10:48:50 kls Exp $
*/
#include <getopt.h>
#include <vdr/plugin.h>
#include "dvbsdffdevice.h"
static const char *VERSION = "0.0.8";
static const char *VERSION = "0.0.9";
static const char *DESCRIPTION = "SD Full Featured DVB device";
class cPluginDvbsddevice : public cPlugin {
......
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffdevice.c 2.33 2012/03/11 13:32:42 kls Exp $
* $Id: dvbsdffdevice.c 2.34 2013/01/25 10:48:29 kls Exp $
*/
#include "dvbsdffdevice.h"
......@@ -362,6 +362,13 @@ bool cDvbSdFfDevice::ProvidesSource(int Source) const
return cDvbDevice::ProvidesSource(Source);
}
int cDvbSdFfDevice::NumProvidedSystems(void) const
{
if (outputOnly)
return 0;
return cDvbDevice::NumProvidedSystems();
}
void cDvbSdFfDevice::TurnOffLiveMode(bool LiveView)
{
if (LiveView) {
......
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffdevice.h 2.14 2012/12/03 13:43:55 kls Exp $
* $Id: dvbsdffdevice.h 2.15 2013/01/25 10:43:14 kls Exp $
*/
#ifndef __DVBSDFFDEVICE_H
......@@ -37,6 +37,7 @@ public:
public:
virtual bool ProvidesSource(int Source) const;
virtual int NumProvidedSystems(void) const;
private:
void TurnOffLiveMode(bool LiveView);
protected:
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 2.32 2013/01/17 14:50:51 kls Exp $
* $Id: config.c 2.34 2013/02/05 11:16:08 kls Exp $
*/
#include "config.h"
......@@ -408,6 +408,8 @@ cSetup::cSetup(void)
SVDRPTimeout = 300;
ZapTimeout = 3;
ChannelEntryTimeout = 1000;
RcRepeatDelay = 300;
RcRepeatDelta = 100;
DefaultPriority = 50;
DefaultLifetime = MAXLIFETIME;
PauseKeyHandling = 2;
......@@ -585,7 +587,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "MenuScrollWrap")) MenuScrollWrap = atoi(Value);
else if (!strcasecmp(Name, "MenuKeyCloses")) MenuKeyCloses = atoi(Value);
else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
else if (!strcasecmp(Name, "NameInstantRecord")) Utf8Strn0Cpy(NameInstantRecord, Value, MaxFileName);
else if (!strcasecmp(Name, "NameInstantRecord")) Utf8Strn0Cpy(NameInstantRecord, Value, sizeof(NameInstantRecord));
else if (!strcasecmp(Name, "InstantRecordTime")) InstantRecordTime = atoi(Value);
else if (!strcasecmp(Name, "LnbSLOF")) LnbSLOF = atoi(Value);
else if (!strcasecmp(Name, "LnbFrequLo")) LnbFrequLo = atoi(Value);
......@@ -610,6 +612,8 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "SVDRPTimeout")) SVDRPTimeout = atoi(Value);
else if (!strcasecmp(Name, "ZapTimeout")) ZapTimeout = atoi(Value);
else if (!strcasecmp(Name, "ChannelEntryTimeout")) ChannelEntryTimeout= atoi(Value);
else if (!strcasecmp(Name, "RcRepeatDelay")) RcRepeatDelay = atoi(Value);
else if (!strcasecmp(Name, "RcRepeatDelta")) RcRepeatDelta = atoi(Value);
else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value);
else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value);
else if (!strcasecmp(Name, "PauseKeyHandling")) PauseKeyHandling = atoi(Value);
......@@ -716,6 +720,8 @@ bool cSetup::Save(void)
Store("SVDRPTimeout", SVDRPTimeout);
Store("ZapTimeout", ZapTimeout);
Store("ChannelEntryTimeout",ChannelEntryTimeout);
Store("RcRepeatDelay", RcRepeatDelay);
Store("RcRepeatDelta", RcRepeatDelta);
Store("DefaultPriority", DefaultPriority);
Store("DefaultLifetime", DefaultLifetime);
Store("PauseKeyHandling", PauseKeyHandling);
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 2.60 2012/12/30 13:08:41 kls Exp $
* $Id: config.h 2.64 2013/02/05 11:19:20 kls Exp $
*/
#ifndef __CONFIG_H
......@@ -22,13 +22,13 @@
// VDR's own version number:
#define VDRVERSION "1.7.36"
#define VDRVERSNUM 10736 // Version * 10000 + Major * 100 + Minor
#define VDRVERSION "1.7.37"
#define VDRVERSNUM 10737 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
#define APIVERSION "1.7.36"
#define APIVERSNUM 10736 // Version * 10000 + Major * 100 + Minor
#define APIVERSION "1.7.37"
#define APIVERSNUM 10737 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
......@@ -49,7 +49,7 @@
#define MINOSDHEIGHT 324
#define MAXOSDHEIGHT 1200
#define MaxFileName 256
#define MaxFileName NAME_MAX // obsolete - use NAME_MAX directly instead!
#define MaxSkinName 16
#define MaxThemeName 16
......@@ -257,7 +257,7 @@ public:
int MenuScrollWrap;
int MenuKeyCloses;
int MarkInstantRecord;
char NameInstantRecord[MaxFileName];
char NameInstantRecord[NAME_MAX];
int InstantRecordTime;
int LnbSLOF;
int LnbFrequLo;
......@@ -280,6 +280,8 @@ public:
int SVDRPTimeout;
int ZapTimeout;
int ChannelEntryTimeout;
int RcRepeatDelay;
int RcRepeatDelta;
int DefaultPriority, DefaultLifetime;
int PausePriority, PauseLifetime;
int PauseKeyHandling;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: cutter.c 2.22 2013/01/20 12:04:07 kls Exp $
* $Id: cutter.c 2.23 2013/01/23 10:39:27 kls Exp $
*/
#include "cutter.h"
......@@ -206,11 +206,8 @@ void cMpeg2Fixer::AdjGopTime(int Offset, int FramesPerSecond)
void cMpeg2Fixer::AdjTref(int TrefOffset)
{
Reset();
if (!Find(0x00000100)) {
esyslog("ERROR: Picture header not found!");
if (!FindHeader(0x00000100, "picture"))
return;
}
int Tref = GetByte() << 2;
int Index1 = GetLastIndex();
uchar Byte2 = GetByte();
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 2.70 2012/11/19 09:59:09 kls Exp $
* $Id: device.c 2.71 2013/02/01 12:00:09 kls Exp $
*/
#include "device.h"
......@@ -98,6 +98,7 @@ cDevice::cDevice(void)
currentAudioTrack = ttNone;
currentAudioTrackMissingCount = 0;
currentSubtitleTrack = ttNone;
keepTracks = false;
liveSubtitle = NULL;
dvbSubtitleConverter = NULL;
autoSelectPreferredSubtitleLanguage = true;
......@@ -923,6 +924,8 @@ void cDevice::SetVolume(int Volume, bool Absolute)
void cDevice::ClrAvailableTracks(bool DescriptionsOnly, bool IdsOnly)
{
if (keepTracks)
return;
if (DescriptionsOnly) {
for (int i = ttNone; i < ttMaxTrackTypes; i++)
*availableTracks[i].description = 0;
......@@ -1044,6 +1047,8 @@ bool cDevice::SetCurrentSubtitleTrack(eTrackType Type, bool Manual)
void cDevice::EnsureAudioTrack(bool Force)
{
if (keepTracks)
return;
if (Force || !availableTracks[currentAudioTrack].id) {
eTrackType PreferredTrack = ttAudioFirst;
int PreferredAudioChannel = 0;
......@@ -1075,6 +1080,8 @@ void cDevice::EnsureAudioTrack(bool Force)
void cDevice::EnsureSubtitleTrack(void)
{
if (keepTracks)
return;
if (Setup.DisplaySubtitles) {
eTrackType PreferredTrack = ttNone;
int LanguagePreference = INT_MAX; // higher than the maximum possible value
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.h 2.43 2013/01/03 08:53:06 kls Exp $
* $Id: device.h 2.45 2013/02/01 11:54:08 kls Exp $
*/
#ifndef __DEVICE_H
......@@ -490,6 +490,7 @@ private:
cMutex mutexCurrentSubtitleTrack;
int currentAudioTrackMissingCount;
bool autoSelectPreferredSubtitleLanguage;
bool keepTracks;
int pre_1_3_19_PrivateStream;
protected:
virtual void SetAudioTrackDevice(eTrackType Type);
......@@ -539,6 +540,10 @@ public:
void EnsureSubtitleTrack(void);
///< Makes sure one of the preferred language subtitle tracks is selected.
///< Only has an effect if Setup.DisplaySubtitles is on.
void SetKeepTracks(bool KeepTracks) { keepTracks = KeepTracks; }
///< Controls whether the current audio and subtitle track settings shall
///< be kept as they currently are, or if they shall be automatically
///< adjusted. This is used when pausing live video.
// Audio facilities
......@@ -752,7 +757,7 @@ public:
///< Returns -1 in case of error, otherwise the number of actually
///< processed bytes is returned.
///< PlayTs() shall process the TS packets either as a whole (returning
///< n*TS_SIZE) or not at all, returning 0 or -1 and setting 'errno' accordingly).
///< TS_SIZE) or not at all, returning 0 or -1 and setting 'errno' accordingly).
bool Replaying(void) const;
///< Returns true if we are currently replaying.
bool Transferring(void) const;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbplayer.c 2.28 2012/06/09 14:37:24 kls Exp $
* $Id: dvbplayer.c 2.29 2013/01/27 14:03:16 kls Exp $
*/
#include "dvbplayer.h"
......@@ -548,10 +548,11 @@ void cDvbPlayer::Action(void)
}
if (p) {
int w;
bool VideoOnly = (dropFrame || playMode != pmPlay && !(playMode == pmSlow && playDir == pdForward)) && DeviceIsPlayingVideo();
if (isPesRecording)
w = PlayPes(p, pc, playMode != pmPlay && !(playMode == pmSlow && playDir == pdForward) && DeviceIsPlayingVideo());
w = PlayPes(p, pc, VideoOnly);
else
w = PlayTs(p, pc, playMode != pmPlay && !(playMode == pmSlow && playDir == pdForward) && DeviceIsPlayingVideo());
w = PlayTs(p, pc, VideoOnly);
if (w > 0) {
p += w;
pc -= w;
......
......@@ -6,16 +6,13 @@
*
* LIRC support added by Carsten Koch <Carsten.Koch@icem.de> 2000-06-16.
*
* $Id: lirc.c 2.1 2011/03/08 15:35:13 kls Exp $
* $Id: lirc.c 2.4 2013/02/03 11:23:18 kls Exp $
*/
#include "lirc.h"
#include <netinet/in.h>
#include <sys/socket.h>
#define REPEATDELAY 350 // ms
#define REPEATFREQ 100 // ms
#define REPEATTIMEOUT 500 // ms
#define RECONNECTDELAY 3000 // ms
cLircRemote::cLircRemote(const char *DeviceName)
......@@ -63,8 +60,10 @@ void cLircRemote::Action(void)
{
cTimeMs FirstTime;
cTimeMs LastTime;
cTimeMs ThisTime;
char buf[LIRC_BUFFER_SIZE];
char LastKeyName[LIRC_KEY_BUF] = "";
bool pressed = false;
bool repeat = false;
int timeout = -1;
......@@ -94,34 +93,43 @@ void cLircRemote::Action(void)
esyslog("ERROR: unparseable lirc command: %s", buf);
continue;
}
int Delta = ThisTime.Elapsed(); // the time between two subsequent LIRC events
ThisTime.Set();
if (count == 0) {
if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < REPEATDELAY)
if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < (uint)Setup.RcRepeatDelay)
continue; // skip keys coming in too fast
if (repeat)
Put(LastKeyName, false, true);
strcpy(LastKeyName, KeyName);
pressed = true;
repeat = false;
FirstTime.Set();
timeout = -1;
}
else if (FirstTime.Elapsed() < (uint)Setup.RcRepeatDelay)
continue; // repeat function kicks in after a short delay
else if (LastTime.Elapsed() < (uint)Setup.RcRepeatDelta)
continue; // skip same keys coming in too fast
else {
if (LastTime.Elapsed() < REPEATFREQ)
continue; // repeat function kicks in after a short delay (after last key instead of first key)
if (FirstTime.Elapsed() < REPEATDELAY)
continue; // skip keys coming in too fast (for count != 0 as well)
repeat = true;
timeout = REPEATDELAY;
timeout = Delta * 10 / 9;
}
LastTime.Set();
Put(KeyName, repeat);
if (pressed)
LastTime.Set();
Put(KeyName, repeat);
}
else if (repeat) { // the last one was a repeat, so let's generate a release
if (LastTime.Elapsed() >= REPEATTIMEOUT) {
Put(LastKeyName, false, true);
repeat = false;
*LastKeyName = 0;
timeout = -1;
}
else if (pressed && repeat) { // the last one was a repeat, so let's generate a release
Put(LastKeyName, false, true);
pressed = false;
repeat = false;
*LastKeyName = 0;
timeout = -1;
}
else {
pressed = false;
repeat = false;
*LastKeyName = 0;
timeout = -1;
}
}
}
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 2.74 2013/01/17 14:20:08 kls Exp $
* $Id: menu.c 2.76 2013/02/02 14:00:39 kls Exp $
*/
#include "menu.h"
......@@ -3186,6 +3186,8 @@ cMenuSetupMisc::cMenuSetupMisc(void)
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$SVDRP timeout (s)"), &data.SVDRPTimeout));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Zap timeout (s)"), &data.ZapTimeout));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Channel entry timeout (ms)"), &data.ChannelEntryTimeout, 0));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Remote control repeat delay (ms)"), &data.RcRepeatDelay, 0));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Remote control repeat delta (ms)"), &data.RcRepeatDelta, 0));
Add(new cMenuEditChanItem(tr("Setup.Miscellaneous$Initial channel"), &data.InitialChannel, tr("Setup.Miscellaneous$as before")));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Initial volume"), &data.InitialVolume, -1, 255, tr("Setup.Miscellaneous$as before")));
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Channels wrap"), &data.ChannelsWrap));
......@@ -4485,6 +4487,7 @@ cString cReplayControl::fileName;
cReplayControl::cReplayControl(bool PauseLive)
:cDvbPlayerControl(fileName, PauseLive)
{
cDevice::PrimaryDevice()->SetKeepTracks(PauseLive);
currentReplayControl = this;
displayReplay = NULL;
marksModified = false;
......@@ -4504,6 +4507,7 @@ cReplayControl::cReplayControl(bool PauseLive)
cReplayControl::~cReplayControl()
{
cDevice::PrimaryDevice()->SetKeepTracks(false);
Hide();
cStatus::MsgReplaying(this, NULL, fileName, false);
Stop();
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osd.c 2.33 2012/12/15 11:16:41 kls Exp $
* $Id: osd.c 2.35 2013/02/08 10:16:47 kls Exp $
*/
#include "osd.h"
......@@ -853,12 +853,12 @@ cBitmap *cBitmap::Scaled(double FactorX, double FactorY, bool AntiAlias)
b->SetBpp(8);
b->Replace(*this); // copy palette (must be done *after* SetBpp()!)
int SourceY = 0;
for (int y = 0; y < b->Height() - 1; y++) {
for (int y = 0; y < b->Height(); y++) {
int SourceX = 0;
int sy = SourceY >> 16;
int sy = min(SourceY >> 16, Height() - 2);
uint8_t BlendY = 0xFF - ((SourceY >> 8) & 0xFF);
for (int x = 0; x < b->Width() -