Version 2.1.4

VDR developer version 2.1.4 is now available at

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

A 'diff' against the previous version is available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.3-2.1.4.diff

MD5 checksums:

e1018c13dc257c986e0e30494913b415  vdr-2.1.4.tar.bz2
870f6f03f4697d136c886358c3be4277  vdr-2.1.3-2.1.4.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.

From the HISTORY file:
- Updated 'sources.conf' (thanks to Antti Hartikainen).
- cFont::CreateFont() now returns a dummy font in case there are no fonts installed.
  This prevents a crash with the LCARS skin on a system that has no fonts.
- Improved locking for CAM slots and made the pure functions of cCiAdapter have
  default implementations, to fix a possible crash with CI adapters and CAM slots
  that are implemented in a plugin.
- Added logging the supported system ids of a CAM.
- Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 in order to be able to record
  channels that need more than 5 TS packets for detecting frame borders (reported by
  Eike Sauer).
- Fixed deleting the source recording after moving it to a different volume (reported
  by Christoph Haubrich).
- Now waiting explicitly until all CAM slots are ready before switching to the
  initial channel when VDR is started. This is necessary in case CI adapters are
  used that are not physically connected to a dedicated device. The respective checks
  in cDvbDevice have been removed to avoid redundancy.
- Fixed detecting frame borders in MPEG-2 streams that have "bottom fields" or varying
  GOP structures (reported by Christian Paulick, with help from Helmut Auer).
- Now unassigning CAMs from their devices when they are no longer used.
- Now making sure the primary device goes into transfer mode for live viewing if the
  CAM wants to receive the TS data.
- Fixed a wrong alignment in cCiDateTime::SendDateTime().
- Since the new cRecordingsHandler that was introduced in version 2.1.2 not only
  handles "cutting", but also "moving" and "copying" recordings, the German word
  "Schnitt" has been replaced with the more generic "Bearbeitung", which covers all
  three variations of "editing" a recording (suggested by Christoph Haubrich).
  Maintainers of translations for other languages may want to change their *.po files
  accordingly.
- The new function cStatus::ChannelChange() can be implemented by plugins to be
  informed about changes to the parameters of a channel that may require a retune.
  This may, for instance, be useful for plugins that implement live streaming, so that
  they can react on changes to a channel's PIDs or CA descriptors (problem reported
  by Mariusz Bialonczyk).
- Fixed a superfluous call to the skin's SetRecording() function after renaming a
  recording (reported by Christoph Haubrich).
This commit is contained in:
Klaus Schmidinger
2014-01-26 11:45:00 +01:00
committed by Dieter Hametner
parent 716c03a47e
commit 67e322b0dd
23 changed files with 344 additions and 171 deletions

View File

@@ -89,3 +89,7 @@ VDR Plugin 'dvbhddevice' Revision History
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
- cDevice::TrickSpeed() now has an additional parameter named Forward.
2014-01-17: Version 2.1.4
- Using PCR based clock recovery in transfer mode.

View File

@@ -10,7 +10,7 @@
#include "menu.h"
#include "setup.h"
static const char *VERSION = "2.1.3";
static const char *VERSION = "2.1.4";
static const char *DESCRIPTION = trNOOP("HD Full Featured DVB device");
static const char *MAINMENUENTRY = "dvbhddevice";

View File

@@ -51,6 +51,12 @@ cDvbHdFfDevice::cDvbHdFfDevice(int Adapter, int Frontend)
isHdffPrimary = true;
mHdffCmdIf = new HDFF::cHdffCmdIf(fd_osd);
uint32_t firmwareVersion = mHdffCmdIf->CmdGetFirmwareVersion(NULL, 0);
if (firmwareVersion < 0x401)
supportsPcrInTransferMode = false;
else
supportsPcrInTransferMode = true;
/* reset some stuff in case the VDR was killed before and had no chance
to clean up. */
mHdffCmdIf->CmdOsdReset();
@@ -511,13 +517,15 @@ bool cDvbHdFfDevice::SetPlayMode(ePlayMode PlayMode)
}
else
{
mHdffCmdIf->CmdAvSetPlayMode(1, Transferring() || (cTransferControl::ReceiverDevice() == this));
isTransferMode = Transferring() || (cTransferControl::ReceiverDevice() == this);
mHdffCmdIf->CmdAvSetPlayMode(1, isTransferMode);
mHdffCmdIf->CmdAvSetStc(0, 100000);
mHdffCmdIf->CmdAvEnableSync(0, false);
mHdffCmdIf->CmdAvEnableVideoAfterStop(0, true);
playVideoPid = -1;
playAudioPid = -1;
playPcrPid = -1;
audioCounter = 0;
videoCounter = 0;
freezed = false;
@@ -606,7 +614,11 @@ void cDvbHdFfDevice::ScaleVideo(const cRect &Rect)
}
}
#if (APIVERSNUM >= 20103)
void cDvbHdFfDevice::TrickSpeed(int Speed, bool Forward)
#else
void cDvbHdFfDevice::TrickSpeed(int Speed)
#endif
{
freezed = false;
mHdffCmdIf->CmdAvEnableSync(0, false);
@@ -896,6 +908,14 @@ int cDvbHdFfDevice::PlayTsVideo(const uchar *Data, int Length)
mHdffCmdIf->CmdAvSetVideoPid(0, playVideoPid, MapVideoStreamTypes(PatPmtParser()->Vtype()), true);
}
}
if (isTransferMode && supportsPcrInTransferMode) {
if (pid != playPcrPid) {
if (pid == PatPmtParser()->Ppid()) {
playPcrPid = pid;
mHdffCmdIf->CmdAvSetPcrPid(0, playPcrPid);
}
}
}
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
}

View File

@@ -77,9 +77,12 @@ protected:
private:
int playVideoPid;
int playAudioPid;
int playPcrPid;
bool freezed;
bool trickMode;
bool isPlayingVideo;
bool isTransferMode;
bool supportsPcrInTransferMode;
// Pes2Ts conversion stuff
uint8_t videoCounter;
@@ -99,7 +102,11 @@ public:
virtual int64_t GetSTC(void);
virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter);
virtual void ScaleVideo(const cRect &Rect = cRect::Null);
#if (APIVERSNUM >= 20103)
virtual void TrickSpeed(int Speed, bool Forward);
#else
virtual void TrickSpeed(int Speed);
#endif
virtual void Clear(void);
virtual void Play(void);
virtual void Freeze(void);