[vdr-plugin-femon] 02/04: Imported Upstream version 2.0.4

Tobias Grimm tiber-guest at moszumanska.debian.org
Mon Oct 27 18:29:07 UTC 2014


This is an automated email from the git hooks/post-receive script.

tiber-guest pushed a commit to branch master
in repository vdr-plugin-femon.

commit de92459e157c7b5497e3b0b5738c80f22fa53e02
Author: etobi <git at e-tobi.net>
Date:   Mon Oct 27 19:21:46 2014 +0100

    Imported Upstream version 2.0.4
---
 HISTORY                               |  17 +++++
 Makefile                              |   2 +-
 femon.c                               |  10 +--
 femonclient/vdr-femonclient-0.0.5.tgz | Bin 9264 -> 0 bytes
 femonclient/vdr-femonclient-0.0.6.tgz | Bin 0 -> 9294 bytes
 femonosd.c                            | 121 ++++++++++++++++++++++++++++------
 femonsymbol.c                         |  88 +++++++++++++------------
 femonsymbol.h                         |   5 +-
 femontools.c                          |   1 +
 femontools.h                          |   2 +
 po/de_DE.po                           |   8 +--
 po/es_ES.po                           |   8 +--
 po/et_EE.po                           |   8 +--
 po/fi_FI.po                           |   8 +--
 po/fr_FR.po                           |   8 +--
 po/hu_HU.po                           |   8 +--
 po/it_IT.po                           |   8 +--
 po/lt_LT.po                           |   8 +--
 po/ru_RU.po                           |   8 +--
 po/sk_SK.po                           |   9 ++-
 po/uk_UA.po                           |  28 +++-----
 po/zh_CN.po                           |   8 +--
 po/zh_TW.po                           |   8 +--
 23 files changed, 231 insertions(+), 140 deletions(-)

diff --git a/HISTORY b/HISTORY
index 5d8bc1d..a396097 100644
--- a/HISTORY
+++ b/HISTORY
@@ -475,3 +475,20 @@ VDR Plugin 'femon' Revision History
 
 - Updated for vdr-2.0.0.
 - Added Slovak translation (Thanks to Milan Hrala).
+
+2014-01-10: Version 2.0.1
+
+- Fixed a crash in SVDRP (Thanks for Lothar Englisch for reporting).
+- Fixed a memory leak and issues reported by scan-build tool.
+
+2014-01-18: Version 2.0.2
+
+- Added initial support for CAMs.
+
+2014-03-08: Version 2.0.3
+
+- Added support for SAT>IP devices.
+
+2014-03-15: Version 2.0.4
+
+- Refactored the SAT>IP support.
diff --git a/Makefile b/Makefile
index 209a364..88adc63 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,7 @@ GITTAG  = $(shell git describe --always 2>/dev/null)
 ### The directory environment:
 
 # Use package data if installed...otherwise assume we're under the VDR source directory:
-PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc))
+PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." pkg-config --variable=$(1) vdr))
 LIBDIR = $(call PKGCFG,libdir)
 LOCDIR = $(call PKGCFG,locdir)
 PLGCFG = $(call PKGCFG,plgcfg)
diff --git a/femon.c b/femon.c
index 3568aff..4c2ee4a 100644
--- a/femon.c
+++ b/femon.c
@@ -22,7 +22,7 @@
 #define GITVERSION ""
 #endif
 
-static const char VERSION[]       = "2.0.0" GITVERSION;
+static const char VERSION[]       = "2.0.4" GITVERSION;
 static const char DESCRIPTION[]   = trNOOP("DVB Signal Information Monitor (OSD)");
 static const char MAINMENUENTRY[] = trNOOP("Signal Information");
 
@@ -204,11 +204,11 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
      if (dev2)
         dev = dev2;
      }
+  if (cReplayControl::NowReplaying() || !dev) {
+     ReplyCode = 550; // Requested action not taken
+     return cString("Cannot open femon plugin while replaying");
+     }
   if (strcasecmp(Command, "OPEN") == 0) {
-     if (cReplayControl::NowReplaying()) {
-        ReplyCode = 550; // Requested action not taken
-        return cString("Cannot open femon plugin while replaying");
-        }
      if (!cFemonOsd::Instance())
         cRemote::CallPlugin(Name());
      return cString("Opening femon plugin");
diff --git a/femonclient/vdr-femonclient-0.0.5.tgz b/femonclient/vdr-femonclient-0.0.5.tgz
deleted file mode 100644
index 9083af1..0000000
Binary files a/femonclient/vdr-femonclient-0.0.5.tgz and /dev/null differ
diff --git a/femonclient/vdr-femonclient-0.0.6.tgz b/femonclient/vdr-femonclient-0.0.6.tgz
new file mode 100644
index 0000000..9181fe0
Binary files /dev/null and b/femonclient/vdr-femonclient-0.0.6.tgz differ
diff --git a/femonosd.c b/femonosd.c
index 29c9926..22ddd51 100644
--- a/femonosd.c
+++ b/femonosd.c
@@ -490,7 +490,6 @@ void cFemonOsd::DrawInfoWindow(void)
                          OSDDRAWINFOLEFT(tr("Protocol"),   *data.protocol);
                          offset += OSDROWHEIGHT;
                          OSDDRAWINFOLEFT(tr("Bitrate"),    *data.bitrate);
-                         offset += OSDROWHEIGHT;
                          }
                       }
                    }
@@ -626,6 +625,23 @@ void cFemonOsd::Action(void)
               m_BERValid = (ioctl(m_Frontend, FE_READ_BER, &m_BER) >= 0);
               m_UNCValid = (ioctl(m_Frontend, FE_READ_UNCORRECTED_BLOCKS, &m_UNC) >= 0);
               }
+           else if (strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) {
+              m_Quality = cDevice::ActualDevice()->SignalQuality();
+              m_QualityValid = (m_Quality >= 0);
+              m_Strength = cDevice::ActualDevice()->SignalStrength();
+              m_StrengthValid = (m_Strength >= 0);
+              m_FrontendName = cDevice::ActualDevice()->DeviceName();
+              m_FrontendStatus = (fe_status_t)(cDevice::ActualDevice()->HasLock() ? (FE_HAS_LOCK | FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC) : 0);
+              m_FrontendStatusValid = m_StrengthValid;
+              m_Signal = uint16_t(m_Strength * 0xFFFF / 100);
+              m_SignalValid = m_StrengthValid;
+              m_SNR = uint16_t(m_Quality * 0xFFFF / 100);
+              m_SNRValid = m_QualityValid;
+              m_BER = 0;
+              m_BERValid = false;
+              m_UNC = 0;
+              m_UNCValid = false;
+              }
            else if (m_SvdrpConnection.handle >= 0) {
               cmd.handle = m_SvdrpConnection.handle;
               m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
@@ -716,6 +732,9 @@ void cFemonOsd::Show(void)
            return;
            }
         }
+     else if (strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) {
+        // nop
+        }
      else if (femonConfig.usesvdrp) {
         if (!SvdrpConnect() || !SvdrpTune())
            return;
@@ -790,6 +809,9 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li
            return;
            }
         }
+     else if (strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) {
+        // nop
+        }
      else if (femonConfig.usesvdrp) {
         if (!SvdrpConnect() || !SvdrpTune())
            return;
@@ -836,26 +858,83 @@ bool cFemonOsd::DeviceSwitch(int direction)
      cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
      if (channel) {
         for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
-           if (direction >= 0) {
-              if (++device >= cDevice::NumDevices())
-                 device = 0;
-              }
-           else {
-              if (--device < 0)
-                 device = cDevice::NumDevices() - 1;
-              }
-           if (cDevice::GetDevice(device)->ProvidesChannel(channel, 0)) {
-              debug("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, direction, device);
-              cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0, true);
-              cControl::Shutdown();
-              cDevice::GetDevice(device)->SwitchChannel(channel, true);
-              if (cDevice::GetDevice(device) == cDevice::PrimaryDevice())
-                 cDevice::GetDevice(device)->ForceTransferMode();
-              cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel));
-              cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number(), true);
-              return (true);
-              }
-           }
+            if (direction >= 0) {
+               if (++device >= cDevice::NumDevices())
+                  device = 0;
+               }
+            else {
+               if (--device < 0)
+                  device = cDevice::NumDevices() - 1;
+               }
+            // Collect the current priorities of all CAM slots that can decrypt the channel:
+            int NumCamSlots = CamSlots.Count();
+            int SlotPriority[NumCamSlots];
+            int NumUsableSlots = 0;
+            bool NeedsDetachAllReceivers = false;
+            bool InternalCamNeeded = false;
+            bool ValidDevice = false;
+            cCamSlot *s = NULL;
+            cDevice *d = cDevice::GetDevice(device);
+            if (channel->Ca() >= CA_ENCRYPTED_MIN) {
+               for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) {
+                   SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used
+                   if (CamSlot->ModuleStatus() == msReady) {
+                      if (CamSlot->ProvidesCa(channel->Caids())) {
+                         if (!ChannelCamRelations.CamChecked(channel->GetChannelID(), CamSlot->SlotNumber())) {
+                            SlotPriority[CamSlot->Index()] = CamSlot->Priority();
+                            NumUsableSlots++;
+                            }
+                         }
+                      }
+                  }
+               if (!NumUsableSlots)
+                  InternalCamNeeded = true; // no CAM is able to decrypt this channel
+               }
+            for (int j = 0; j < NumCamSlots || !NumUsableSlots; ++j) {
+                if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY)
+                   continue; // there is no CAM available in this slot
+                bool HasInternalCam = d->HasInternalCam();
+                if (InternalCamNeeded && !HasInternalCam)
+                   continue; // no CAM is able to decrypt this channel and the device uses vdr handled CAMs
+                if (NumUsableSlots && !HasInternalCam && !CamSlots.Get(j)->Assign(d, true))
+                   continue; // CAM slot can't be used with this device
+                if (d->ProvidesChannel(channel, 0, &NeedsDetachAllReceivers)) { // this device is basically able to do the job
+                   debug("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, direction, device);
+                   if (NumUsableSlots && !HasInternalCam && d->CamSlot() && d->CamSlot() != CamSlots.Get(j))
+                      NeedsDetachAllReceivers = true; // using a different CAM slot requires detaching receivers
+                   if (NumUsableSlots && !HasInternalCam)
+                      s = CamSlots.Get(j);
+                   ValidDevice = true;
+                   break;
+                   }
+                if (!NumUsableSlots)
+                   break; // no CAM necessary, so just one loop over the devices
+                }
+            // Do the actual switch if valid device found
+            if (d && ValidDevice) {
+               cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0, true);
+               cControl::Shutdown();
+               if (NeedsDetachAllReceivers)
+                  d->DetachAllReceivers();
+               if (s) {
+                  if (s->Device() != d) {
+                     if (s->Device())
+                        s->Device()->DetachAllReceivers();
+                     if (d->CamSlot())
+                        d->CamSlot()->Assign(NULL);
+                     s->Assign(d);
+                     }
+                  }
+               else if (d->CamSlot() && !d->CamSlot()->IsDecrypting())
+                  d->CamSlot()->Assign(NULL);
+               d->SwitchChannel(channel, true);
+               if (d == cDevice::PrimaryDevice())
+                  d->ForceTransferMode();
+               cControl::Launch(new cTransferControl(d, channel));
+               cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number(), true);
+               return (true);
+               }
+            }
         }
      }
    return (false);
diff --git a/femonsymbol.c b/femonsymbol.c
index 03a6a25..02cc351 100644
--- a/femonsymbol.c
+++ b/femonsymbol.c
@@ -53,6 +53,7 @@
 #include "symbols/format480i.xpm"
 #include "symbols/format480p.xpm"
 
+static cBitmap bmOnePixel(1, 1, 1);
 static cBitmap bmStereo(stereo_xpm);
 static cBitmap bmMonoLeft(monoleft_xpm);
 static cBitmap bmMonoRight(monoright_xpm);
@@ -134,49 +135,50 @@ bool cFemonSymbolCache::Populate(void)
      Flush();
 
      // pushing order must follow the enumeration - keep original proportions except for frontend status ones
-     cacheM.Append(bmStereo.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_STEREO
-     cacheM.Append(bmMonoLeft.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_MONO_LEFT
-     cacheM.Append(bmMonoRight.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_MONO_RIGHT
-     cacheM.Append(bmDolbyDigital.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_DD
-     cacheM.Append(bmDolbyDigital20.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_DD20
-     cacheM.Append(bmDolbyDigital51.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_DD51
-     cacheM.Append(bmMpeg2.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_MPEG2
-     cacheM.Append(bmH264.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_H264
-     cacheM.Append(bmPal.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_PAL
-     cacheM.Append(bmNtsc.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_NTSC
-     cacheM.Append(bmEncrypted.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_ENCRYPTED
-     cacheM.Append(bmSvdrp.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_SVDRP
-     cacheM.Append(bmLock.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_LOCK
-     cacheM.Append(bmSignal.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SIGNAL
-     cacheM.Append(bmCarrier.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_CARRIER
-     cacheM.Append(bmViterbi.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_VITERBI
-     cacheM.Append(bmSync.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SYNC
-     cacheM.Append(bmAspectRatio11.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_1_1
-     cacheM.Append(bmAspectRatio169.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_16_9
+     cacheM.Append(bmOnePixel.Scaled(yFactorM, yFactorM, antiAliasM));        // SYMBOL_ONEPIXEL
+     cacheM.Append(bmStereo.Scaled(yFactorM, yFactorM, antiAliasM));          // SYMBOL_STEREO
+     cacheM.Append(bmMonoLeft.Scaled(yFactorM, yFactorM, antiAliasM));        // SYMBOL_MONO_LEFT
+     cacheM.Append(bmMonoRight.Scaled(yFactorM, yFactorM, antiAliasM));       // SYMBOL_MONO_RIGHT
+     cacheM.Append(bmDolbyDigital.Scaled(yFactorM, yFactorM, antiAliasM));    // SYMBOL_DD
+     cacheM.Append(bmDolbyDigital20.Scaled(yFactorM, yFactorM, antiAliasM));  // SYMBOL_DD20
+     cacheM.Append(bmDolbyDigital51.Scaled(yFactorM, yFactorM, antiAliasM));  // SYMBOL_DD51
+     cacheM.Append(bmMpeg2.Scaled(yFactorM, yFactorM, antiAliasM));           // SYMBOL_MPEG2
+     cacheM.Append(bmH264.Scaled(yFactorM, yFactorM, antiAliasM));            // SYMBOL_H264
+     cacheM.Append(bmPal.Scaled(yFactorM, yFactorM, antiAliasM));             // SYMBOL_PAL
+     cacheM.Append(bmNtsc.Scaled(yFactorM, yFactorM, antiAliasM));            // SYMBOL_NTSC
+     cacheM.Append(bmEncrypted.Scaled(yFactorM, yFactorM, antiAliasM));       // SYMBOL_ENCRYPTED
+     cacheM.Append(bmSvdrp.Scaled(yFactorM, yFactorM, antiAliasM));           // SYMBOL_SVDRP
+     cacheM.Append(bmLock.Scaled(xFactorM, yFactorM, antiAliasM));            // SYMBOL_LOCK
+     cacheM.Append(bmSignal.Scaled(xFactorM, yFactorM, antiAliasM));          // SYMBOL_SIGNAL
+     cacheM.Append(bmCarrier.Scaled(xFactorM, yFactorM, antiAliasM));         // SYMBOL_CARRIER
+     cacheM.Append(bmViterbi.Scaled(xFactorM, yFactorM, antiAliasM));         // SYMBOL_VITERBI
+     cacheM.Append(bmSync.Scaled(xFactorM, yFactorM, antiAliasM));            // SYMBOL_SYNC
+     cacheM.Append(bmAspectRatio11.Scaled(yFactorM, yFactorM, antiAliasM));   // SYMBOL_AR_1_1
+     cacheM.Append(bmAspectRatio169.Scaled(yFactorM, yFactorM, antiAliasM));  // SYMBOL_AR_16_9
      cacheM.Append(bmAspectRatio2211.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_2_21_1
-     cacheM.Append(bmAspectRatio43.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_4_3
-     cacheM.Append(bmDevice.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_DEVICE
-     cacheM.Append(bmZero.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_ZERO
-     cacheM.Append(bmOne.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_ONE
-     cacheM.Append(bmTwo.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_TWO
-     cacheM.Append(bmThree.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_THREE
-     cacheM.Append(bmFour.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FOUR
-     cacheM.Append(bmFive.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FIVE
-     cacheM.Append(bmSix.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_SIX
-     cacheM.Append(bmSeven.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_SEVEN
-     cacheM.Append(bmEight.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_EIGHT
-     cacheM.Append(bmFormat1080.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_1080
-     cacheM.Append(bmFormat1080i.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_1080i
-     cacheM.Append(bmFormat1080p.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_1080p
-     cacheM.Append(bmFormat720.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_720
-     cacheM.Append(bmFormat720i.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_720i
-     cacheM.Append(bmFormat720p.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_720p
-     cacheM.Append(bmFormat576.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_576
-     cacheM.Append(bmFormat576i.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_576i
-     cacheM.Append(bmFormat576p.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_576p
-     cacheM.Append(bmFormat480.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_480
-     cacheM.Append(bmFormat480i.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_480i
-     cacheM.Append(bmFormat480p.Scaled(yFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_480p
+     cacheM.Append(bmAspectRatio43.Scaled(yFactorM, yFactorM, antiAliasM));   // SYMBOL_AR_4_3
+     cacheM.Append(bmDevice.Scaled(yFactorM, yFactorM, antiAliasM));          // SYMBOL_DEVICE
+     cacheM.Append(bmZero.Scaled(yFactorM, yFactorM, antiAliasM));            // SYMBOL_ZERO
+     cacheM.Append(bmOne.Scaled(yFactorM, yFactorM, antiAliasM));             // SYMBOL_ONE
+     cacheM.Append(bmTwo.Scaled(yFactorM, yFactorM, antiAliasM));             // SYMBOL_TWO
+     cacheM.Append(bmThree.Scaled(yFactorM, yFactorM, antiAliasM));           // SYMBOL_THREE
+     cacheM.Append(bmFour.Scaled(yFactorM, yFactorM, antiAliasM));            // SYMBOL_FOUR
+     cacheM.Append(bmFive.Scaled(yFactorM, yFactorM, antiAliasM));            // SYMBOL_FIVE
+     cacheM.Append(bmSix.Scaled(yFactorM, yFactorM, antiAliasM));             // SYMBOL_SIX
+     cacheM.Append(bmSeven.Scaled(yFactorM, yFactorM, antiAliasM));           // SYMBOL_SEVEN
+     cacheM.Append(bmEight.Scaled(yFactorM, yFactorM, antiAliasM));           // SYMBOL_EIGHT
+     cacheM.Append(bmFormat1080.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_1080
+     cacheM.Append(bmFormat1080i.Scaled(yFactorM, yFactorM, antiAliasM));     // SYMBOL_FORMAT_1080i
+     cacheM.Append(bmFormat1080p.Scaled(yFactorM, yFactorM, antiAliasM));     // SYMBOL_FORMAT_1080p
+     cacheM.Append(bmFormat720.Scaled(yFactorM, yFactorM, antiAliasM));       // SYMBOL_FORMAT_720
+     cacheM.Append(bmFormat720i.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_720i
+     cacheM.Append(bmFormat720p.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_720p
+     cacheM.Append(bmFormat576.Scaled(yFactorM, yFactorM, antiAliasM));       // SYMBOL_FORMAT_576
+     cacheM.Append(bmFormat576i.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_576i
+     cacheM.Append(bmFormat576p.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_576p
+     cacheM.Append(bmFormat480.Scaled(yFactorM, yFactorM, antiAliasM));       // SYMBOL_FORMAT_480
+     cacheM.Append(bmFormat480i.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_480i
+     cacheM.Append(bmFormat480p.Scaled(yFactorM, yFactorM, antiAliasM));      // SYMBOL_FORMAT_480p
 
      return true;
      }
@@ -197,7 +199,7 @@ bool cFemonSymbolCache::Flush(void)
 
 cBitmap& cFemonSymbolCache::Get(eSymbols symbolP)
 {
-  cBitmap *bitmapM = NULL;
+  cBitmap *bitmapM = cacheM[SYMBOL_ONEPIXEL];
 
   if (symbolP < cacheM.Size())
      bitmapM = cacheM[symbolP];
diff --git a/femonsymbol.h b/femonsymbol.h
index 825ba13..4fe14c6 100644
--- a/femonsymbol.h
+++ b/femonsymbol.h
@@ -12,6 +12,7 @@
 #include <vdr/osd.h>
 
 enum eSymbols {
+  SYMBOL_ONEPIXEL,
   SYMBOL_STEREO,
   SYMBOL_MONO_LEFT,
   SYMBOL_MONO_RIGHT,
@@ -77,8 +78,8 @@ public:
   ~cFemonSymbolCache();
   void Refresh();
   cBitmap& Get(eSymbols symbolP);
-  int GetSpacing()  { return int(yFactorM * DEFAULT_SPACING);  }
-  int GetRounding() { return int(yFactorM * DEFAULT_ROUNDING); }
+  int GetSpacing()  { return int(yFactorM * cFemonSymbolCache::DEFAULT_SPACING);  }
+  int GetRounding() { return int(yFactorM * cFemonSymbolCache::DEFAULT_ROUNDING); }
 };
 
 extern cFemonSymbolCache femonSymbols;
diff --git a/femontools.c b/femontools.c
index 619be3d..1bd0c87 100644
--- a/femontools.c
+++ b/femontools.c
@@ -9,6 +9,7 @@
 #define __STDC_FORMAT_MACROS
 #endif
 
+#include <ctype.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <unistd.h>
diff --git a/femontools.h b/femontools.h
index 660d71c..d7fef1b 100644
--- a/femontools.h
+++ b/femontools.h
@@ -26,6 +26,8 @@
 
 #define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d"
 
+#define SATIP_DEVICE "SAT>IP"
+
 cDvbDevice *getDvbDevice(cDevice* device);
 
 cString getFrontendInfo(cDvbDevice *device);
diff --git a/po/de_DE.po b/po/de_DE.po
index e041903..7f06153 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,5 +1,5 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Peter Marquardt
 # Andreas Brachold
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Christian Wieninger\n"
 "Language-Team: German <vdr at linuxtv.org>\n"
 "Language: de\n"
diff --git a/po/es_ES.po b/po/es_ES.po
index e074f49..ad2fadf 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Luis Palacios
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Luis Palacios\n"
 "Language-Team: Spanish <vdr at linuxtv.org>\n"
 "Language: es\n"
diff --git a/po/et_EE.po b/po/et_EE.po
index 3918e6f..6066ed5 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Arthur Konovalov
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Arthur Konovalov\n"
 "Language-Team: Estonian <vdr at linuxtv.org>\n"
 "Language: et\n"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 554f21b..1323a4a 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Rolf Ahrenberg
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Rolf Ahrenberg\n"
 "Language-Team: Finnish <vdr at linuxtv.org>\n"
 "Language: fi\n"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 8fa57be..6f18db3 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,5 +1,5 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Nicolas Huillard
 # Michaël Nival <mnival at club-internet.fr>, 2010
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Bernard Jaulin <bernard.jaulin at gmail.com>\n"
 "Language-Team: French <vdr at linuxtv.org>\n"
 "Language: fr\n"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 5398a27..3657399 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # F�ley Istv�n <ifuley at tigercomp dot ro>, 2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2010-10-10 10:10+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: F�ley Istv�n <ifuley at tigercomp dot ro>\n"
 "Language-Team: Hungarian <ifuley at tigercomp dot ro>\n"
 "Language: hu\n"
diff --git a/po/it_IT.po b/po/it_IT.po
index 6707bab..24820d8 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,15 +1,15 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Sean Carlos
 # Diego Pierotto <vdr-italian at tiscali.it>
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
 "Language-Team: Italian <vdr at linuxtv.org>\n"
 "Language: it\n"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index efaaa08..c33a32e 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Valdemaras Pipiras
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Valdemaras Pipiras <varas at ambernet.lt>\n"
 "Language-Team: Lithuanian <vdr at linuxtv.org>\n"
 "Language: lt\n"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 41aae1f..34fc995 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Vyacheslav Dikonov
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Vyacheslav Dikonov\n"
 "Language-Team: Russian <vdr at linuxtv.org>\n"
 "Language: ru\n"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 19914c8..a091f17 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Milan Hrala
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Milan Hrala <hrala.milan at gmail.com>\n"
 "Language-Team: Slovak <vdr at linuxtv.org>\n"
 "Language: sk\n"
@@ -387,4 +387,3 @@ msgstr "Mbit/s"
 
 msgid "kbit/s"
 msgstr "kbit/s"
-
diff --git a/po/uk_UA.po b/po/uk_UA.po
index f8b413f..361cbed 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -4,18 +4,17 @@
 # Yarema aka Knedlyk <yupadmin at gmail.com>, 2010.
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: Yarema aka Knedlyk <yupadmin at gmail.com>\n"
 "Language-Team: Ukrainian <translation at linux.org.ua>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\\n\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\\n\n"
 
 msgid "DVB Signal Information Monitor (OSD)"
 msgstr "Монітор інформації про DVB сигнал"
@@ -113,12 +112,8 @@ msgstr "Визначення границі зеленої поділки, як
 msgid "OSD update interval [0.1s]"
 msgstr "Інтервал оновлення повідомлень [0.1с]"
 
-msgid ""
-"Define an interval for OSD updates. The smaller interval generates higher "
-"CPU load."
-msgstr ""
-"Визначення інтервалу оновлення повідомлень. Малий інтервал спричинює більше "
-"завантаження процесора."
+msgid "Define an interval for OSD updates. The smaller interval generates higher CPU load."
+msgstr "Визначення інтервалу оновлення повідомлень. Малий інтервал спричинює більше завантаження процесора."
 
 msgid "Analyze stream"
 msgstr "Аналіз потоку"
@@ -129,19 +124,14 @@ msgstr "Визначення, чи проводити аналіз DVB пото
 msgid "Calculation interval [0.1s]"
 msgstr "Інтервал обчислення [0.1с]"
 
-msgid ""
-"Define an interval for calculation. The bigger interval generates more "
-"stable values."
-msgstr ""
-"Визначення інтервалу обчислення. Більший інтервал дає стабільніші значення."
+msgid "Define an interval for calculation. The bigger interval generates more stable values."
+msgstr "Визначення інтервалу обчислення. Більший інтервал дає стабільніші значення."
 
 msgid "Use SVDRP service"
 msgstr "Використати SVDRP сервіс"
 
 msgid "Define whether the SVDRP service is used in client/server setups."
-msgstr ""
-"Визначення чи буде використовуватися SVDRP сервіс в налаштуваннях клієнта/"
-"сервера"
+msgstr "Визначення чи буде використовуватися SVDRP сервіс в налаштуваннях клієнта/сервера"
 
 msgid "SVDRP service port"
 msgstr "Порт SVDRP сервісу"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 878d0ea..1e721a5 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file.
-# Copyright (C) 2007-2013 Rolf Ahrenberg
+# Copyright (C) 2007-2014 Rolf Ahrenberg
 # This file is distributed under the same license as the femon package.
 # Nan Feng VDR <nfgx at 21cn.com>, 2009.2
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: NanFeng <nfgx at 21cn.com>\n"
 "Language-Team: Chinese (simplified) <vdr at linuxtv.org>\n"
 "Language: zh_CN\n"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index b260d2e..be49af2 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,14 +1,14 @@
 # VDR plugin language source file. 
-# Copyright (C) 2007-2013 Rolf Ahrenberg 
+# Copyright (C) 2007-2014 Rolf Ahrenberg 
 # This file is distributed under the same license as the femon package. 
 # Nan Feng VDR <nfgx at 21cn.com>, 2009.2 
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-femon 2.0.0\n"
+"Project-Id-Version: vdr-femon 2.0.4\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-04-01 04:01+0200\n"
-"PO-Revision-Date: 2013-04-01 04:01+0200\n"
+"POT-Creation-Date: 2014-03-15 03:15+0200\n"
+"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 "Last-Translator: NanFeng <nfgx at 21cn.com>\n"
 "Language-Team: Chinese (traditional) <vdr at linuxtv.org>\n"
 "Language: zh_TW\n"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr-plugin-femon.git



More information about the pkg-vdr-dvb-changes mailing list