No longer retuning or restarting a recording if only the language code of a audio or dolby PID changes

This commit is contained in:
Klaus Schmidinger
2005-05-07 13:15:34 +02:00
parent a20ddc1f22
commit 89105812fb
3 changed files with 29 additions and 15 deletions

View File

@@ -3504,3 +3504,5 @@ Video Disk Recorder Revision History
recording (suggested by Matthias Schniedermeyer). See man vdr(5) for details. recording (suggested by Matthias Schniedermeyer). See man vdr(5) for details.
- Removed scaling coordinates in letterbox mode from cDvbSpu - the DVD plugin, which - Removed scaling coordinates in letterbox mode from cDvbSpu - the DVD plugin, which
was the only one needing this, doesn't need it any more (thanks to Marco Schl<68><6C>ler). was the only one needing this, doesn't need it any more (thanks to Marco Schl<68><6C>ler).
- No longer retuning or restarting a recording if only the language code of an
audio or dolby PID changes.

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: channels.c 1.37 2005/05/06 13:46:57 kls Exp $ * $Id: channels.c 1.38 2005/05/07 13:14:32 kls Exp $
*/ */
#include "channels.h" #include "channels.h"
@@ -389,15 +389,21 @@ void cChannel::SetPortalName(const char *PortalName)
} }
} }
static bool IntArraysDiffer(const int *a, const int *b, const char na[][4] = NULL, const char nb[][4] = NULL) #define STRDIFF 0x01
#define VALDIFF 0x02
static int IntArraysDiffer(const int *a, const int *b, const char na[][4] = NULL, const char nb[][4] = NULL)
{ {
int i = 0; int result = 0;
while (a[i] && b[i]) { for (int i = 0; a[i] || b[i]; i++) {
if (a[i] != b[i] || na && nb && strcmp(na[i], nb[i]) != 0) if (a[i] && na && nb && strcmp(na[i], nb[i]) != 0)
return true; result |= STRDIFF;
i++; if (a[i] != b[i])
} result |= VALDIFF;
return a[i] != b[i] || a[i] && na && nb && strcmp(na[i], nb[i]) != 0; if (!a[i] || !b[i])
break;
}
return result;
} }
static int IntArrayToString(char *s, const int *a, int Base = 10, const char n[][4] = NULL) static int IntArrayToString(char *s, const int *a, int Base = 10, const char n[][4] = NULL)
@@ -418,10 +424,15 @@ static int IntArrayToString(char *s, const int *a, int Base = 10, const char n[]
void cChannel::SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][4], int *Dpids, char DLangs[][4], int Tpid) void cChannel::SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][4], int *Dpids, char DLangs[][4], int Tpid)
{ {
bool modified = vpid != Vpid || ppid != Ppid || tpid != Tpid; int mod = CHANNELMOD_NONE;
if (!modified) if (vpid != Vpid || ppid != Ppid || tpid != Tpid)
modified = IntArraysDiffer(apids, Apids, alangs, ALangs) || IntArraysDiffer(dpids, Dpids, dlangs, DLangs); mod |= CHANNELMOD_PIDS;
if (modified) { int m = IntArraysDiffer(apids, Apids, alangs, ALangs) | IntArraysDiffer(dpids, Dpids, dlangs, DLangs);
if (m & STRDIFF)
mod |= CHANNELMOD_LANGS;
if (m & VALDIFF)
mod |= CHANNELMOD_PIDS;
if (mod) {
char OldApidsBuf[(MAXAPIDS + MAXDPIDS) * 10 + 10]; // 10: 5 digits plus delimiting ',' or ';' plus optional '=cod', +10: paranoia char OldApidsBuf[(MAXAPIDS + MAXDPIDS) * 10 + 10]; // 10: 5 digits plus delimiting ',' or ';' plus optional '=cod', +10: paranoia
char NewApidsBuf[(MAXAPIDS + MAXDPIDS) * 10 + 10]; char NewApidsBuf[(MAXAPIDS + MAXDPIDS) * 10 + 10];
char *q = OldApidsBuf; char *q = OldApidsBuf;
@@ -450,7 +461,7 @@ void cChannel::SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][4], int *Dp
strn0cpy(dlangs[i], DLangs[i], 4); strn0cpy(dlangs[i], DLangs[i], 4);
} }
tpid = Tpid; tpid = Tpid;
modification |= CHANNELMOD_PIDS; modification |= mod;
Channels.SetModified(); Channels.SetModified();
} }
} }

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: channels.h 1.27 2005/05/06 13:47:06 kls Exp $ * $Id: channels.h 1.28 2005/05/07 13:07:09 kls Exp $
*/ */
#ifndef __CHANNELS_H #ifndef __CHANNELS_H
@@ -24,6 +24,7 @@
#define CHANNELMOD_ID 0x04 #define CHANNELMOD_ID 0x04
#define CHANNELMOD_CA 0x10 #define CHANNELMOD_CA 0x10
#define CHANNELMOD_TRANSP 0x20 #define CHANNELMOD_TRANSP 0x20
#define CHANNELMOD_LANGS 0x40
#define CHANNELMOD_RETUNE (CHANNELMOD_PIDS | CHANNELMOD_CA | CHANNELMOD_TRANSP) #define CHANNELMOD_RETUNE (CHANNELMOD_PIDS | CHANNELMOD_CA | CHANNELMOD_TRANSP)
#define CHANNELSMOD_NONE 0 #define CHANNELSMOD_NONE 0