Version 1.4.1-5

- Replaced the "quick workaround for additional live audio PIDs" in
  cDvbDevice::SetChannelDevice() with an actual solution in
  cDvbDevice::SetAudioTrackDevice() in order to prevent sticky PIDs in CAMs,
  which caused long switching times or completely blank screens when switching
  between encrypted channels on the same transponder (reported by Tomas Berglund).
- Adapted cThread::ThreadId() to recent kernels (thanks to Ville Skyttä).
- Added --remove-destination to the 'cp' command for binaries in the Makefile to
  avoid a crash in case a new version is installed on a running system (suggested
  by Petri Hintukainen).
- Fixed handling "Ca Info" in case the CAM sends this again if the smart card is
  replaced with a different one.
This commit is contained in:
Klaus Schmidinger 2006-08-20 18:00:00 +02:00
parent f5ad8fc5d7
commit 0e310c57a4
7 changed files with 42 additions and 20 deletions

View File

@ -1626,6 +1626,7 @@ Ville Skytt
thread.c caused a compiler warning with g++ 4.1.1 thread.c caused a compiler warning with g++ 4.1.1
for fixing converting the port number in the "connect from..." log message of SVDRP for fixing converting the port number in the "connect from..." log message of SVDRP
for reporting that there are places where ntohs() is assigned to different types for reporting that there are places where ntohs() is assigned to different types
for adapting cThread::ThreadId() to recent kernels
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
@ -1808,6 +1809,8 @@ Gavin Hamill <gdh@acentral.co.uk>
Petri Hintukainen <Petri.Hintukainen@hut.fi> Petri Hintukainen <Petri.Hintukainen@hut.fi>
for suggesting to disable the use of "fadvise" in cUnbufferedFile because there for suggesting to disable the use of "fadvise" in cUnbufferedFile because there
have been several reports that it causes more problems than it solves have been several reports that it causes more problems than it solves
for suggesting to add --remove-destination to the 'cp' command for binaries in
the Makefile to avoid a crash in case a new version is installed on a running system
Marcel Schaeben <mts280@gmx.de> Marcel Schaeben <mts280@gmx.de>
for his "Easy Input" patch for his "Easy Input" patch
@ -1980,3 +1983,7 @@ Frank Schmirler <vdr@schmirler.de>
Jörn Reder <joern@zyn.de> Jörn Reder <joern@zyn.de>
for reporting that a recording may unnecessarily block a device with a CAM, while for reporting that a recording may unnecessarily block a device with a CAM, while
it could record on the primary device as well it could record on the primary device as well
Tomas Berglund <tomber@telia.com>
for reporting a problem with sticky PIDs in CAMs when switching between encrypted
channels on the same transponder

14
HISTORY
View File

@ -4874,3 +4874,17 @@ Video Disk Recorder Revision History
Oliver Endriss). Oliver Endriss).
- Added a log error message to cPlugin::ConfigDirectory() in case a plugin calls it - Added a log error message to cPlugin::ConfigDirectory() in case a plugin calls it
from a separate thread (reported by Udo Richter). from a separate thread (reported by Udo Richter).
2006-08-20: Version 1.4.1-5
- Replaced the "quick workaround for additional live audio PIDs" in
cDvbDevice::SetChannelDevice() with an actual solution in
cDvbDevice::SetAudioTrackDevice() in order to prevent sticky PIDs in CAMs,
which caused long switching times or completely blank screens when switching
between encrypted channels on the same transponder (reported by Tomas Berglund).
- Adapted cThread::ThreadId() to recent kernels (thanks to Ville Skyttä).
- Added --remove-destination to the 'cp' command for binaries in the Makefile to
avoid a crash in case a new version is installed on a running system (suggested
by Petri Hintukainen).
- Fixed handling "Ca Info" in case the CAM sends this again if the smart card is
replaced with a different one.

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: Makefile 1.94 2006/06/02 14:45:33 kls Exp $ # $Id: Makefile 1.95 2006/08/20 10:44:22 kls Exp $
.DELETE_ON_ERROR: .DELETE_ON_ERROR:
@ -201,7 +201,7 @@ install: install-bin install-conf install-doc install-plugins
install-bin: vdr install-bin: vdr
@mkdir -p $(BINDIR) @mkdir -p $(BINDIR)
@cp vdr runvdr $(BINDIR) @cp --remove-destination vdr runvdr $(BINDIR)
# Configuration files: # Configuration files:
@ -223,7 +223,7 @@ install-doc:
install-plugins: plugins install-plugins: plugins
@mkdir -p $(PLUGINLIBDIR) @mkdir -p $(PLUGINLIBDIR)
@cp $(PLUGINDIR)/lib/lib*-*.so.$(APIVERSION) $(PLUGINLIBDIR) @cp --remove-destination $(PLUGINDIR)/lib/lib*-*.so.$(APIVERSION) $(PLUGINLIBDIR)
# Source documentation: # Source documentation:

12
ci.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: ci.c 1.44 2006/08/12 10:14:27 kls Exp $ * $Id: ci.c 1.45 2006/08/20 11:38:33 kls Exp $
*/ */
#include "ci.h" #include "ci.h"
@ -985,6 +985,7 @@ bool cCiConditionalAccessSupport::Process(int Length, const uint8_t *Data)
switch (Tag) { switch (Tag) {
case AOT_CA_INFO: { case AOT_CA_INFO: {
dbgprotocol("%d: <== Ca Info", SessionId()); dbgprotocol("%d: <== Ca Info", SessionId());
numCaSystemIds = 0;
int l = 0; int l = 0;
const uint8_t *d = GetData(Data, l); const uint8_t *d = GetData(Data, l);
while (l > 1) { while (l > 1) {
@ -992,13 +993,14 @@ bool cCiConditionalAccessSupport::Process(int Length, const uint8_t *Data)
dbgprotocol(" %04X", id); dbgprotocol(" %04X", id);
d += 2; d += 2;
l -= 2; l -= 2;
if (numCaSystemIds < MAXCASYSTEMIDS) { if (numCaSystemIds < MAXCASYSTEMIDS)
caSystemIds[numCaSystemIds++] = id; caSystemIds[numCaSystemIds++] = id;
caSystemIds[numCaSystemIds] = 0; else {
}
else
esyslog("ERROR: too many CA system IDs!"); esyslog("ERROR: too many CA system IDs!");
break;
}
} }
caSystemIds[numCaSystemIds] = 0;
dbgprotocol("\n"); dbgprotocol("\n");
} }
state = 2; // got ca info state = 2; // got ca info

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 1.265 2006/08/12 09:10:11 kls Exp $ * $Id: config.h 1.266 2006/08/14 09:49:22 kls Exp $
*/ */
#ifndef __CONFIG_H #ifndef __CONFIG_H
@ -21,7 +21,7 @@
// VDR's own version number: // VDR's own version number:
#define VDRVERSION "1.4.1-4" #define VDRVERSION "1.4.1-5"
#define VDRVERSNUM 10401 // Version * 10000 + Major * 100 + Minor #define VDRVERSNUM 10401 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number: // The plugin API's version number:

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 1.159 2006/06/11 09:03:55 kls Exp $ * $Id: dvbdevice.c 1.160 2006/08/14 09:38:32 kls Exp $
*/ */
#include "dvbdevice.h" #include "dvbdevice.h"
@ -853,11 +853,6 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1); esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
return false; return false;
} }
//XXX quick workaround for additional live audio PIDs:
if (ciHandler) {
ciHandler->SetPid(Channel->Apid(1), true);
ciHandler->SetPid(Channel->Dpid(0), true);
}
if (IsPrimaryDevice()) if (IsPrimaryDevice())
AddPid(Channel->Tpid(), ptTeletext); AddPid(Channel->Tpid(), ptTeletext);
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schlüßler <marco@lordzodiac.de> this works CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schlüßler <marco@lordzodiac.de> this works
@ -927,8 +922,14 @@ void cDvbDevice::SetAudioTrackDevice(eTrackType Type)
if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) { if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) {
if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) { if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) {
DetachAll(pidHandles[ptAudio].pid); DetachAll(pidHandles[ptAudio].pid);
if (ciHandler)
ciHandler->SetPid(pidHandles[ptAudio].pid, false);
pidHandles[ptAudio].pid = TrackId->id; pidHandles[ptAudio].pid = TrackId->id;
SetPid(&pidHandles[ptAudio], ptAudio, true); SetPid(&pidHandles[ptAudio], ptAudio, true);
if (ciHandler) {
ciHandler->SetPid(pidHandles[ptAudio].pid, true);
ciHandler->StartDecrypting();
}
} }
} }
else if (IS_DOLBY_TRACK(Type)) { else if (IS_DOLBY_TRACK(Type)) {

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: thread.c 1.56 2006/06/24 10:10:58 kls Exp $ * $Id: thread.c 1.57 2006/08/20 10:20:44 kls Exp $
*/ */
#include "thread.h" #include "thread.h"
@ -316,11 +316,9 @@ bool cThread::EmergencyExit(bool Request)
return emergencyExitRequested = true; // yes, it's an assignment, not a comparison! return emergencyExitRequested = true; // yes, it's an assignment, not a comparison!
} }
_syscall0(pid_t, gettid)
tThreadId cThread::ThreadId(void) tThreadId cThread::ThreadId(void)
{ {
return gettid(); return syscall(__NR_gettid);
} }
void cThread::SetMainThreadId(void) void cThread::SetMainThreadId(void)