From 39f1ba7e0320832d44558045a10ad95f221acf30 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 1 Jan 2010 13:38:02 +0100 Subject: Fixed handling the "CA PMT" generation --- HISTORY | 4 +++- ci.c | 15 ++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/HISTORY b/HISTORY index b04d166d..096cb488 100644 --- a/HISTORY +++ b/HISTORY @@ -6197,7 +6197,7 @@ Video Disk Recorder Revision History - Fixed the default value for "Pause key handling" in the MANUAL (reported by Diego Pierotto). -2009-12-31: Version 1.7.11 +2010-01-01: Version 1.7.11 - Fixed resetting the file size when regenerating the index file. - The new function cDevice::PatPmtParser() can be used in derived devices to access @@ -6240,3 +6240,5 @@ Video Disk Recorder Revision History to view live or recorded video. If the plugin is not loaded, the card will be treated like a budget DVB card, and there will be no OSD or viewing capability. +- Fixed handling the "CA PMT" generation (revised a change not mentioned in version + 1.7.9's changes, which caused a malfunction with Conax and Viaccess CAMs). diff --git a/ci.c b/ci.c index c2d4415f..02834713 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 2.4 2009/12/05 15:51:12 kls Exp $ + * $Id: ci.c 2.5 2010/01/01 13:38:02 kls Exp $ */ #include "ci.h" @@ -610,10 +610,8 @@ cCiCaPmt::cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber capmt[length++] = 0x01; // version_number, current_next_indicator - apparently vn doesn't matter, but cni must be 1 esInfoLengthPos = length; capmt[length++] = 0x00; // program_info_length H (at program level) - capmt[length++] = 0x01; // program_info_length L - capmt[length++] = cmdId; - if (caDescriptorsLength > 0) - AddCaDescriptors(caDescriptorsLength, caDescriptors); + capmt[length++] = 0x00; // program_info_length L + AddCaDescriptors(caDescriptorsLength, caDescriptors); } void cCiCaPmt::SetListManagement(uint8_t ListManagement) @@ -632,10 +630,8 @@ void cCiCaPmt::AddPid(int Pid, uint8_t StreamType) capmt[length++] = Pid & 0xFF; esInfoLengthPos = length; capmt[length++] = 0x00; // ES_info_length H (at ES level) - capmt[length++] = 0x01; // ES_info_length L - capmt[length++] = cmdId; - if (caDescriptorsLength > 0) - AddCaDescriptors(caDescriptorsLength, caDescriptors); + capmt[length++] = 0x00; // ES_info_length L + AddCaDescriptors(caDescriptorsLength, caDescriptors); } } @@ -643,6 +639,7 @@ void cCiCaPmt::AddCaDescriptors(int Length, const uint8_t *Data) { if (esInfoLengthPos) { if (length + Length <= int(sizeof(capmt))) { + capmt[length++] = cmdId; memcpy(capmt + length, Data, Length); length += Length; int l = length - esInfoLengthPos - 2; -- cgit v1.2.3