===================================================================
RCS file: ./RCS/MANUAL
retrieving revision 2.15
diff -u -b -r2.15 ./MANUAL
--- ./MANUAL	2012/01/14 13:03:21	2.15
+++ ./MANUAL	2012/02/25 13:38:52
@@ -763,15 +763,6 @@
                          These margins are added automatically to timers that
                          are created from the EPG data.
 
-  Primary limit = 0      The minimum priority a timer must have to be allowed to
-                         use the primary DVB interface, or to force another timer
-                         with higher priority to use the primary DVB interface.
-                         This is mainly useful for recordings that should take
-                         place only when there is nothing else to do, but should
-                         never keep the user from viewing stuff on the primary
-                         interface. On systems with only one DVB card, timers
-                         with a priority below PrimaryLimit will never execute.
-
   Default priority = 50  The default Priority and Lifetime values used when
   Default lifetime = 99  creating a new timer event. A Lifetime value of 99
                          means that this recording will never be deleted
===================================================================
RCS file: ./RCS/config.c
retrieving revision 2.18
diff -u -b -r2.18 ./config.c
--- ./config.c	2012/01/14 13:04:59	2.18
+++ ./config.c	2012/02/25 13:31:46
@@ -406,7 +406,6 @@
   SVDRPTimeout = 300;
   ZapTimeout = 3;
   ChannelEntryTimeout = 1000;
-  PrimaryLimit = 0;
   DefaultPriority = 50;
   DefaultLifetime = 99;
   PauseKeyHandling = 2;
@@ -601,7 +600,6 @@
   else if (!strcasecmp(Name, "SVDRPTimeout"))        SVDRPTimeout       = atoi(Value);
   else if (!strcasecmp(Name, "ZapTimeout"))          ZapTimeout         = atoi(Value);
   else if (!strcasecmp(Name, "ChannelEntryTimeout")) ChannelEntryTimeout= atoi(Value);
-  else if (!strcasecmp(Name, "PrimaryLimit"))        PrimaryLimit       = atoi(Value);
   else if (!strcasecmp(Name, "DefaultPriority"))     DefaultPriority    = atoi(Value);
   else if (!strcasecmp(Name, "DefaultLifetime"))     DefaultLifetime    = atoi(Value);
   else if (!strcasecmp(Name, "PauseKeyHandling"))    PauseKeyHandling   = atoi(Value);
@@ -699,7 +697,6 @@
   Store("SVDRPTimeout",       SVDRPTimeout);
   Store("ZapTimeout",         ZapTimeout);
   Store("ChannelEntryTimeout",ChannelEntryTimeout);
-  Store("PrimaryLimit",       PrimaryLimit);
   Store("DefaultPriority",    DefaultPriority);
   Store("DefaultLifetime",    DefaultLifetime);
   Store("PauseKeyHandling",   PauseKeyHandling);
===================================================================
RCS file: ./RCS/config.h
retrieving revision 2.41
diff -u -b -r2.41 ./config.h
--- ./config.h	2012/02/19 14:33:23	2.41
+++ ./config.h	2012/02/25 13:31:34
@@ -264,7 +264,6 @@
   int SVDRPTimeout;
   int ZapTimeout;
   int ChannelEntryTimeout;
-  int PrimaryLimit;
   int DefaultPriority, DefaultLifetime;
   int PausePriority, PauseLifetime;
   int PauseKeyHandling;
===================================================================
RCS file: ./RCS/device.c
retrieving revision 2.49
diff -u -b -r2.49 ./device.c
--- ./device.c	2012/02/15 13:15:19	2.49
+++ ./device.c	2012/02/25 12:45:53
@@ -59,9 +59,6 @@
 
 // --- cDevice ---------------------------------------------------------------
 
-// The default priority for non-primary devices:
-#define DEFAULTPRIORITY  -1
-
 // The minimum number of unknown PS1 packets to consider this a "pre 1.3.19 private stream":
 #define MIN_PRE_1_3_19_PRIVATESTREAM 10
 
@@ -269,7 +266,7 @@
           if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
              continue; // CAM slot can't be used with this device
           bool ndr;
-          if (device[i]->ProvidesChannel(Channel, (LiveView && device[i]->IsPrimaryDevice()) ? Setup.PrimaryLimit : Priority, &ndr)) { // this device is basicly able to do the job
+          if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
              if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j))
                 ndr = true; // using a different CAM slot requires detaching receivers
              // Put together an integer number that reflects the "impact" using
@@ -690,7 +687,7 @@
      cChannel *channel;
      while ((channel = Channels.GetByNumber(n, Direction)) != NULL) {
            // try only channels which are currently available
-           if (GetDevice(channel, 0, true))
+           if (GetDevice(channel, LIVEPRIORITY, true))
               break;
            n = channel->Number() + Direction;
            }
@@ -717,7 +714,7 @@
      DELETENULL(dvbSubtitleConverter);
      }
 
-  cDevice *Device = (LiveView && IsPrimaryDevice()) ? GetDevice(Channel, 0, LiveView) : this;
+  cDevice *Device = (LiveView && IsPrimaryDevice()) ? GetDevice(Channel, LIVEPRIORITY, true) : this;
 
   bool NeedsTransferMode = Device != this;
 
@@ -1495,7 +1492,7 @@
 
 int cDevice::Priority(void) const
 {
-  int priority = IsPrimaryDevice() ? Setup.PrimaryLimit - 1 : DEFAULTPRIORITY;
+  int priority = IDLEPRIORITY;
   cMutexLock MutexLock(&mutexReceiver);
   for (int i = 0; i < MAXRECEIVERS; i++) {
       if (receiver[i])
===================================================================
RCS file: ./RCS/device.h
retrieving revision 2.33
diff -u -b -r2.33 ./device.h
--- ./device.h	2012/02/14 14:42:42	2.33
+++ ./device.h	2012/02/25 12:54:39
@@ -31,6 +31,8 @@
 #define MAXVOLUME         255
 #define VOLUMEDELTA         5 // used to increase/decrease the volume
 #define MAXOCCUPIEDTIMEOUT 99 // max. time (in seconds) a device may be occupied
+#define LIVEPRIORITY        0 // priority used when selecting a device for live viewing
+#define IDLEPRIORITY       (-MAXPRIORITY - 1)
 
 enum eSetChannelResult { scrOk, scrNotAvailable, scrNoTransfer, scrFailed };
 
@@ -237,9 +239,8 @@
          ///< the given channel's transponder.
   virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
          ///< Returns true if this device can provide the given channel.
-         ///< In case the device has cReceivers attached to it or it is the primary
-         ///< device, Priority is used to decide whether the caller's request can
-         ///< be honored.
+         ///< In case the device has cReceivers attached to it, Priority is used to
+         ///< decide whether the caller's request can be honored.
          ///< The special Priority value -1 will tell the caller whether this device
          ///< is principally able to provide the given Channel, regardless of any
          ///< attached cReceivers.
@@ -719,9 +720,8 @@
   cReceiver *receiver[MAXRECEIVERS];
 public:
   int Priority(void) const;
-      ///< Returns the priority of the current receiving session (0..MAXPRIORITY),
-      ///< or -1 if no receiver is currently active. The primary device will
-      ///< always return at least Setup.PrimaryLimit-1.
+      ///< Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),
+      ///< or IDLEPRIORITY if no receiver is currently active.
 protected:
   virtual bool OpenDvr(void);
       ///< Opens the DVR of this device and prepares it to deliver a Transport
===================================================================
RCS file: ./RCS/dvbdevice.c
retrieving revision 2.63
diff -u -b -r2.63 ./dvbdevice.c
--- ./dvbdevice.c	2012/02/20 12:45:49	2.63
+++ ./dvbdevice.c	2012/02/25 12:10:12
@@ -1453,13 +1453,11 @@
                     else
                        needsDetachReceivers = true;
                     }
-                 else if (!IsPrimaryDevice())
-                    result = true;
                  else
-                    result = Priority >= Setup.PrimaryLimit;
+                    result = true;
                  }
               else
-                 result = !IsPrimaryDevice() || Priority >= Setup.PrimaryLimit;
+                 result = true;
               }
            else
               needsDetachReceivers = Receiving(true);
===================================================================
RCS file: ./RCS/menu.c
retrieving revision 2.37
diff -u -b -r2.37 ./menu.c
--- ./menu.c	2012/02/19 11:37:55	2.37
+++ ./menu.c	2012/02/25 13:50:49
@@ -3093,7 +3093,6 @@
   SetSection(tr("Recording"));
   Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"),     &data.MarginStart));
   Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"),      &data.MarginStop));
-  Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"),             &data.PrimaryLimit, 0, MAXPRIORITY));
   Add(new cMenuEditIntItem( tr("Setup.Recording$Default priority"),          &data.DefaultPriority, 0, MAXPRIORITY));
   Add(new cMenuEditIntItem( tr("Setup.Recording$Default lifetime (d)"),      &data.DefaultLifetime, 0, MAXLIFETIME));
   Add(new cMenuEditStraItem(tr("Setup.Recording$Pause key handling"),        &data.PauseKeyHandling, 3, pauseKeyHandlingTexts));
@@ -3654,7 +3653,7 @@
            Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
            if (!Channel && Setup.ChannelsWrap)
               Channel = Direction > 0 ? Channels.First() : Channels.Last();
-           if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0, true))
+           if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, LIVEPRIORITY, true))
               return Channel;
            }
      }
@@ -4294,7 +4293,7 @@
                }
            }
         }
-     else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) {
+     else if (!Timer || !Timer->Pending()) {
         isyslog("no free DVB device to record channel %d!", ch);
         Skins.Message(mtError, tr("No free DVB device to record!"));
         }
===================================================================
RCS file: ./RCS/receiver.h
retrieving revision 2.3
diff -u -b -r2.3 ./receiver.h
--- ./receiver.h	2012/02/25 11:19:53	2.3
+++ ./receiver.h	2012/02/25 12:49:31
@@ -49,7 +49,7 @@
                ///< Otherwise pids can be added to the receiver by separate calls to the AddPid[s]
                ///< functions.
                ///< The total number of PIDs added to a receiver must not exceed MAXRECEIVEPIDS.
-               ///< Priority may be any value in the range -99..99. Negative values indicate
+               ///< Priority may be any value in the range +/-MAXPRIORITY. Negative values indicate
                ///< that this cReceiver may be detached at any time (without blocking the
                ///< cDevice it is attached to).
   virtual ~cReceiver();
