From 96d25c3be1ead9d1ecd6e1ffadfb57aa42b22c2b Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 6 Jun 2009 13:26:23 +0200 Subject: [PATCH] Fixed unwanted track modifications when parsing PAT/PMT for recording --- device.c | 3 ++- remux.c | 23 +++++++++++++++-------- remux.h | 5 +++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/device.c b/device.c index 94b0c2f8..834b6ead 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 2.22 2009/06/06 11:17:05 kls Exp $ + * $Id: device.c 2.23 2009/06/06 13:25:58 kls Exp $ */ #include "device.h" @@ -61,6 +61,7 @@ cDevice *cDevice::primaryDevice = NULL; cDevice *cDevice::avoidDevice = NULL; cDevice::cDevice(void) +:patPmtParser(true) { cardIndex = nextCardIndex++; diff --git a/remux.c b/remux.c index f3d0f262..97c139c9 100644 --- a/remux.c +++ b/remux.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.c 2.23 2009/05/24 11:44:54 kls Exp $ + * $Id: remux.c 2.24 2009/06/06 13:24:57 kls Exp $ */ #include "remux.h" @@ -389,8 +389,9 @@ uchar *cPatPmtGenerator::GetPmt(int &Index) // --- cPatPmtParser --------------------------------------------------------- -cPatPmtParser::cPatPmtParser(void) +cPatPmtParser::cPatPmtParser(bool UpdatePrimaryDevice) { + updatePrimaryDevice = UpdatePrimaryDevice; Reset(); } @@ -478,7 +479,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) dbgpatpmt(" pcr = %d\n", Pmt.getPCRPid()); if (pmtVersion == Pmt.getVersionNumber()) return; - cDevice::PrimaryDevice()->ClrAvailableTracks(false, true); + if (updatePrimaryDevice) + cDevice::PrimaryDevice()->ClrAvailableTracks(false, true); int NumApids = 0; int NumDpids = 0; int NumSpids = 0; @@ -522,7 +524,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) } delete d; } - cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs); + if (updatePrimaryDevice) + cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs); NumApids++; } } @@ -557,7 +560,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) break; } } - cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs); + if (updatePrimaryDevice) + cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs); NumSpids++; } break; @@ -573,7 +577,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) } if (dpid) { if (NumDpids < MAXDPIDS) { - cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang); + if (updatePrimaryDevice) + cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang); NumDpids++; } } @@ -581,8 +586,10 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) break; } dbgpatpmt("\n"); - cDevice::PrimaryDevice()->EnsureAudioTrack(true); - cDevice::PrimaryDevice()->EnsureSubtitleTrack(); + if (updatePrimaryDevice) { + cDevice::PrimaryDevice()->EnsureAudioTrack(true); + cDevice::PrimaryDevice()->EnsureSubtitleTrack(); + } } pmtVersion = Pmt.getVersionNumber(); } diff --git a/remux.h b/remux.h index 44ac9cbc..0dd1a9ab 100644 --- a/remux.h +++ b/remux.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.h 2.16 2009/05/24 15:07:44 kls Exp $ + * $Id: remux.h 2.17 2009/06/06 13:26:23 kls Exp $ */ #ifndef __REMUX_H @@ -213,10 +213,11 @@ private: int pmtPid; int vpid; int vtype; + bool updatePrimaryDevice; protected: int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; } public: - cPatPmtParser(void); + cPatPmtParser(bool UpdatePrimaryDevice = false); void Reset(void); ///< Resets the parser. This function must be called whenever a new ///< stream is parsed.