mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 7da8cb2110 | 
							
								
								
									
										11
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -183,3 +183,14 @@ VDR Plugin 'femon' Revision History | ||||
| - Added Enigma theme (Thanks to Rolf Hoverath). | ||||
| - Added EgalsTry theme (Thanks to Uwe Hanke). | ||||
| - Added option to disable rounded corners. | ||||
|  | ||||
| 2005-11-13: Version 0.9.5 | ||||
|  | ||||
| - Updated for vdr-1.3.36. | ||||
| - Added french translation (Thanks to Nicolas Huillard). | ||||
| - Enabled bitrate commands via SVDRP. | ||||
| - Added new SVDRP commands. | ||||
| - Modified femon service without incrementing version number. | ||||
| - Added "Duotone" theme for 2bpp on screen displays. | ||||
| - Fixed crash bug in femonreceiver. | ||||
| - Fixed setup page bug (Thanks to Thomas G<>nther for reporting this one). | ||||
|   | ||||
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							| @@ -16,11 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).h | awk '{ pri | ||||
| ### The C++ compiler and options: | ||||
|  | ||||
| CXX      ?= g++ | ||||
| ifdef FEMON_DEBUG | ||||
| CXXFLAGS ?= -g -Wall -Woverloaded-virtual -fPIC | ||||
| else | ||||
| CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual -fPIC | ||||
| endif | ||||
| CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual | ||||
|  | ||||
| ### The directory environment: | ||||
|  | ||||
|   | ||||
							
								
								
									
										5
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								README
									
									
									
									
									
								
							| @@ -77,9 +77,8 @@ make plugins | ||||
|  | ||||
| Notes: | ||||
|  | ||||
| - The plugin supports only those DVB cards with _one_ frontend (do any cards | ||||
|   with multiple frontends even exist?), because I haven't yet figured howto do | ||||
|   it without patching the VDR core. | ||||
| - The plugin supports only those DVB cards with _one_ frontend, because I | ||||
|   haven't yet figured howto do it without patching the VDR core. | ||||
|  | ||||
| - Disable the stream analyze to speed up heavy zapping sessions. | ||||
|  | ||||
|   | ||||
							
								
								
									
										116
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								femon.c
									
									
									
									
									
								
							| @@ -6,6 +6,7 @@ | ||||
|  * $Id$ | ||||
|  */ | ||||
|  | ||||
| #include <vdr/remote.h> | ||||
| #include "femoncfg.h" | ||||
| #include "femoni18n.h" | ||||
| #include "femonreceiver.h" | ||||
| @@ -14,20 +15,22 @@ | ||||
| #include "femontools.h" | ||||
| #include "femon.h" | ||||
|  | ||||
| #if defined(VDRVERSNUM) && VDRVERSNUM < 10334 | ||||
| #if defined(VDRVERSNUM) && VDRVERSNUM < 10336 | ||||
| #error "You don't exist! Go away! Upgrade yourself!" | ||||
| #endif | ||||
|  | ||||
| cPluginFemon::cPluginFemon(void) | ||||
| cPluginFemon::cPluginFemon() | ||||
| { | ||||
|   // Initialize any member variables here. | ||||
|   // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL | ||||
|   // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
| } | ||||
|  | ||||
| cPluginFemon::~cPluginFemon() | ||||
| { | ||||
|   // Clean up after yourself! | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
| } | ||||
|  | ||||
| const char *cPluginFemon::CommandLineHelp(void) | ||||
| @@ -68,7 +71,8 @@ void cPluginFemon::Housekeeping(void) | ||||
| cOsdObject *cPluginFemon::MainMenuAction(void) | ||||
| { | ||||
|   // Perform the action when selected from the main VDR menu. | ||||
|   return new cFemonOsd(); | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   return cFemonOsd::Instance(true); | ||||
| } | ||||
|  | ||||
| bool cPluginFemon::SetupParse(const char *Name, const char *Value) | ||||
| @@ -106,8 +110,9 @@ bool cPluginFemon::Service(const char *Id, void *Data) | ||||
|      data->fe_signal = getSignal(ndx); | ||||
|      data->fe_ber = getBER(ndx); | ||||
|      data->fe_unc = getUNC(ndx); | ||||
|      data->video_bitrate = getVideoBitrate(); | ||||
|      data->audio_bitrate = getAudioBitrate(); | ||||
|      data->video_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetVideoBitrate() : 0.0; | ||||
|      data->audio_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetAudioBitrate() : 0.0; | ||||
|      data->dolby_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetDolbyBitrate() : 0.0; | ||||
|      return true; | ||||
|      } | ||||
|  | ||||
| @@ -117,6 +122,14 @@ bool cPluginFemon::Service(const char *Id, void *Data) | ||||
| const char **cPluginFemon::SVDRPHelpPages(void) | ||||
| {  | ||||
|   static const char *HelpPages[] = { | ||||
|     "OPEN\n" | ||||
|     "    Open femon plugin.", | ||||
|     "QUIT\n" | ||||
|     "    Close femon plugin.", | ||||
|     "NEXT\n" | ||||
|     "    Switch to next possible device.", | ||||
|     "PREV\n" | ||||
|     "    Switch to previous possible device.", | ||||
|     "NAME\n" | ||||
|     "    Print the current frontend name.", | ||||
|     "STAT\n" | ||||
| @@ -130,9 +143,11 @@ const char **cPluginFemon::SVDRPHelpPages(void) | ||||
|     "UNCB\n" | ||||
|     "    Print the current uncorrcted blocks rate.", | ||||
|     "VIBR\n" | ||||
|     "    Print the current video bitrate [Mbit/s].", | ||||
|     "    Print the actual device and current video bitrate [Mbit/s].", | ||||
|     "AUBR\n" | ||||
|     "    Print the current audio bitrate [kbit/s].", | ||||
|     "    Print the actual device and current audio bitrate [kbit/s].", | ||||
|     "DDBR\n" | ||||
|     "    Print the actual device and current dolby bitrate [kbit/s].", | ||||
|     NULL | ||||
|     }; | ||||
|   return HelpPages; | ||||
| @@ -140,35 +155,72 @@ const char **cPluginFemon::SVDRPHelpPages(void) | ||||
|  | ||||
| cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) | ||||
| { | ||||
|   if (strcasecmp(Command, "NAME") == 0) { | ||||
|   if (strcasecmp(Command, "OPEN") == 0) { | ||||
|      if (!cFemonOsd::Instance()) | ||||
|         cRemote::CallPlugin("femon"); | ||||
|      return cString("Opening femon plugin"); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "QUIT") == 0) { | ||||
|      if (cFemonOsd::Instance()) | ||||
|         cRemote::Put(kBack); | ||||
|      return cString("Closing femon plugin"); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "NEXT") == 0) { | ||||
|      if (cFemonOsd::Instance()) | ||||
|         return cString::sprintf("Switching to next device: %s", cFemonOsd::Instance()->DeviceSwitch(1) ? "ok" : "failed"); | ||||
|      else | ||||
|         return cString("Cannot switch device"); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "PREV") == 0) { | ||||
|      if (cFemonOsd::Instance()) | ||||
|         return cString::sprintf("Switching to previous device: %s", cFemonOsd::Instance()->DeviceSwitch(-1) ? "ok" : "failed"); | ||||
|      else | ||||
|         return cString("Cannot switch device"); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "NAME") == 0) { | ||||
|      return getFrontendName(cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "STAT") == 0) { | ||||
|      return getFrontendStatus(cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "SGNL") == 0) { | ||||
|      return cString::sprintf("%04X", getSignal(cDevice::ActualDevice()->CardIndex())); | ||||
|      int value = getSignal(cDevice::ActualDevice()->CardIndex()); | ||||
|      return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "SNRA") == 0) { | ||||
|      return cString::sprintf("%04X", getSNR(cDevice::ActualDevice()->CardIndex())); | ||||
|      int value = getSNR(cDevice::ActualDevice()->CardIndex()); | ||||
|      return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "BERA") == 0) { | ||||
|      return cString::sprintf("%08X", getBER(cDevice::ActualDevice()->CardIndex())); | ||||
|      return cString::sprintf("%08X on device #%d", getBER(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "UNCB") == 0) { | ||||
|      return cString::sprintf("%08X", getUNC(cDevice::ActualDevice()->CardIndex())); | ||||
|      return cString::sprintf("%08X on device #%d", getUNC(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "VIBR") == 0) { | ||||
|      return cString::sprintf("%.2f", getVideoBitrate()); | ||||
|      if (cFemonOsd::Instance()) | ||||
|         return cString::sprintf("%.2f Mbit/s on device #%d", cFemonOsd::Instance()->GetVideoBitrate(), cDevice::ActualDevice()->CardIndex()); | ||||
|      else | ||||
|         return cString::sprintf("--- Mbit/s on device #%d", cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "AUBR") == 0) { | ||||
|      return cString::sprintf("%.0f", getAudioBitrate()); | ||||
|      if (cFemonOsd::Instance()) | ||||
|         return cString::sprintf("%.0f kbit/s on device #%d", cFemonOsd::Instance()->GetAudioBitrate(), cDevice::ActualDevice()->CardIndex()); | ||||
|      else | ||||
|         return cString::sprintf("--- kbit/s on device #%d", cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   else if (strcasecmp(Command, "DDBR") == 0) { | ||||
|      if (cFemonOsd::Instance()) | ||||
|         return cString::sprintf("%.0f kbit/s on device #%d", cFemonOsd::Instance()->GetDolbyBitrate(), cDevice::ActualDevice()->CardIndex()); | ||||
|      else | ||||
|         return cString::sprintf("--- kbit/s on device #%d", cDevice::ActualDevice()->CardIndex()); | ||||
|      } | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| cMenuFemonSetup::cMenuFemonSetup(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   dispmodes[eFemonModeBasic]       = tr("basic"); | ||||
|   dispmodes[eFemonModeTransponder] = tr("transponder"); | ||||
|   dispmodes[eFemonModeStream]      = tr("stream"); | ||||
| @@ -183,7 +235,9 @@ cMenuFemonSetup::cMenuFemonSetup(void) | ||||
|   themes[eFemonThemeMoronimo]      = tr("Moronimo"); | ||||
|   themes[eFemonThemeEnigma]        = tr("Enigma"); | ||||
|   themes[eFemonThemeEgalsTry]      = tr("EgalsTry"); | ||||
|   themes[eFemonThemeDuotone]       = tr("Duotone"); | ||||
|  | ||||
|   data = femonConfig; | ||||
|   Setup(); | ||||
| } | ||||
|  | ||||
| @@ -192,21 +246,21 @@ void cMenuFemonSetup::Setup(void) | ||||
|   int current = Current(); | ||||
|  | ||||
|   Clear(); | ||||
|   Add(new cMenuEditBoolItem(  tr("Hide main menu entry"),        &femonConfig.hidemenu,       tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditBoolItem(  tr("Use syslog output"),           &femonConfig.syslogoutput,   tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditStraItem(  tr("Default display mode"),        &femonConfig.displaymode,    eFemonModeMaxNumber, dispmodes)); | ||||
|   Add(new cMenuEditStraItem(  tr("Skin"),                        &femonConfig.skin,           eFemonSkinMaxNumber, skins)); | ||||
|   Add(new cMenuEditStraItem(  tr("Theme"),                       &femonConfig.theme,          eFemonThemeMaxNumber,themes)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Position"),                    &femonConfig.position,       tr("bottom"),        tr("top"))); | ||||
|   Add(new cMenuEditIntItem(   tr("Height"),                      &femonConfig.osdheight,      400,                 500)); | ||||
|   Add(new cMenuEditIntItem(   tr("Horizontal offset"),           &femonConfig.osdoffset,      -50,                 50)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Show CA system"),              &femonConfig.showcasystem,   tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditIntItem(   tr("Red limit [%]"),               &femonConfig.redlimit,       1,                   50)); | ||||
|   Add(new cMenuEditIntItem(   tr("Green limit [%]"),             &femonConfig.greenlimit,     51,                  100)); | ||||
|   Add(new cMenuEditIntItem(   tr("OSD update interval [0.1s]"),  &femonConfig.updateinterval, 1,                   100)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Analyze stream"),              &femonConfig.analyzestream,  tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditBoolItem(  tr("Hide main menu entry"),        &data.hidemenu,       tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditBoolItem(  tr("Use syslog output"),           &data.syslogoutput,   tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditStraItem(  tr("Default display mode"),        &data.displaymode,    eFemonModeMaxNumber, dispmodes)); | ||||
|   Add(new cMenuEditStraItem(  tr("Skin"),                        &data.skin,           eFemonSkinMaxNumber, skins)); | ||||
|   Add(new cMenuEditStraItem(  tr("Theme"),                       &data.theme,          eFemonThemeMaxNumber,themes)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Position"),                    &data.position,       tr("bottom"),        tr("top"))); | ||||
|   Add(new cMenuEditIntItem(   tr("Height"),                      &data.osdheight,      400,                 500)); | ||||
|   Add(new cMenuEditIntItem(   tr("Horizontal offset"),           &data.osdoffset,      -50,                 50)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Show CA system"),              &data.showcasystem,   tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditIntItem(   tr("Red limit [%]"),               &data.redlimit,       1,                   50)); | ||||
|   Add(new cMenuEditIntItem(   tr("Green limit [%]"),             &data.greenlimit,     51,                  100)); | ||||
|   Add(new cMenuEditIntItem(   tr("OSD update interval [0.1s]"),  &data.updateinterval, 1,                   100)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Analyze stream"),              &data.analyzestream,  tr("no"),            tr("yes"))); | ||||
|   if (femonConfig.analyzestream) | ||||
|      Add(new cMenuEditIntItem(tr("Calculation interval [0.1s]"), &femonConfig.calcinterval,   1,                   100)); | ||||
|      Add(new cMenuEditIntItem(tr("Calculation interval [0.1s]"), &data.calcinterval,   1,                   100)); | ||||
|  | ||||
|   SetCurrent(Get(current)); | ||||
|   Display(); | ||||
| @@ -214,6 +268,8 @@ void cMenuFemonSetup::Setup(void) | ||||
|  | ||||
| void cMenuFemonSetup::Store(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   femonConfig = data; | ||||
|   SetupStore("HideMenu",       femonConfig.hidemenu); | ||||
|   SetupStore("SyslogOutput",   femonConfig.syslogoutput); | ||||
|   SetupStore("DisplayMode",    femonConfig.displaymode); | ||||
| @@ -232,11 +288,11 @@ void cMenuFemonSetup::Store(void) | ||||
|  | ||||
| eOSState cMenuFemonSetup::ProcessKey(eKeys Key) | ||||
| { | ||||
|   int oldAnalyzestream = femonConfig.analyzestream; | ||||
|   int oldAnalyzestream = data.analyzestream; | ||||
|  | ||||
|   eOSState state = cMenuSetupPage::ProcessKey(Key); | ||||
|  | ||||
|   if (Key != kNone && (femonConfig.analyzestream != oldAnalyzestream)) { | ||||
|   if (Key != kNone && (data.analyzestream != oldAnalyzestream)) { | ||||
|      Setup(); | ||||
|      } | ||||
|  | ||||
|   | ||||
							
								
								
									
										5
									
								
								femon.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								femon.h
									
									
									
									
									
								
							| @@ -11,13 +11,11 @@ | ||||
|  | ||||
| #include <vdr/plugin.h> | ||||
|  | ||||
| static const char *VERSION        = "0.9.4"; | ||||
| static const char *VERSION        = "0.9.5"; | ||||
| static const char *DESCRIPTION    = "DVB Signal Information Monitor (OSD)"; | ||||
| static const char *MAINMENUENTRY  = "Signal Information"; | ||||
|  | ||||
| class cPluginFemon : public cPlugin { | ||||
| private: | ||||
|   // Add any member variables or functions you may need here. | ||||
| public: | ||||
|   cPluginFemon(void); | ||||
|   virtual ~cPluginFemon(); | ||||
| @@ -43,6 +41,7 @@ class cMenuFemonSetup : public cMenuSetupPage { | ||||
|     const char *dispmodes[eFemonModeMaxNumber]; | ||||
|     const char *skins[eFemonSkinMaxNumber]; | ||||
|     const char *themes[eFemonThemeMaxNumber]; | ||||
|     cFemonConfig data; | ||||
|     virtual void Setup(void); | ||||
|   protected: | ||||
|     virtual eOSState ProcessKey(eKeys Key); | ||||
|   | ||||
							
								
								
									
										17
									
								
								femoncfg.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								femoncfg.c
									
									
									
									
									
								
							| @@ -36,6 +36,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
| { | ||||
|   { | ||||
|     // eFemonThemeClassic | ||||
|     4,          // bpp | ||||
|     0x7F000000, // clrBackground | ||||
|     0xFFFCFCFC, // clrTitleBackground | ||||
|     0xFF000000, // clrTitleText | ||||
| @@ -47,6 +48,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeElchi | ||||
|     4,          // bpp | ||||
|     0xC8000066, // clrBackground | ||||
|     0xC833AAEE, // clrTitleBackground | ||||
|     0xFF000000, // clrTitleText | ||||
| @@ -58,6 +60,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeDeepBlue | ||||
|     4,          // bpp | ||||
|     0xC80C0C0C, // clrBackground | ||||
|     0xC832557A, // clrTitleBackground | ||||
|     0xFF000000, // clrTitleText | ||||
| @@ -69,6 +72,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeMoronimo | ||||
|     4,          // bpp | ||||
|     0xDF294A6B, // clrBackground | ||||
|     0xDF3E5578, // clrTitleBackground | ||||
|     0xFF9BBAD7, // clrTitleText | ||||
| @@ -80,6 +84,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeEnigma | ||||
|     4,          // bpp | ||||
|     0xB8DEE5FA, // clrBackground | ||||
|     0xB84158BC, // clrTitleBackground | ||||
|     0xFFFFFFFF, // clrTitleText | ||||
| @@ -100,4 +105,16 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|     0xFFFCC024, // clrYellow | ||||
|     0xFF20980B, // clrGreen | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeDuotone | ||||
|     2,          // bpp | ||||
|     0x7F000000, // clrBackground | ||||
|     0xFFFCFCFC, // clrTitleBackground | ||||
|     0x7F000000, // clrTitleText                                                                                                               | ||||
|     0xFFFCFCFC, // clrActiveText                                                                                                             | ||||
|     0xFFFCFCFC, // clrInactiveText | ||||
|     0xFFFC1414, // clrRed | ||||
|     0xFFFCFCFC, // clrYellow | ||||
|     0xFFFCFCFC, // clrGreen | ||||
|   }, | ||||
| }; | ||||
|   | ||||
| @@ -55,11 +55,13 @@ enum eFemonThemes | ||||
|   eFemonThemeMoronimo, | ||||
|   eFemonThemeEnigma, | ||||
|   eFemonThemeEgalsTry, | ||||
|   eFemonThemeDuotone, | ||||
|   eFemonThemeMaxNumber | ||||
| }; | ||||
|  | ||||
| struct cFemonTheme | ||||
| { | ||||
|   int bpp; | ||||
|   int clrBackground; | ||||
|   int clrTitleBackground; | ||||
|   int clrTitleText; | ||||
|   | ||||
| @@ -16,7 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ pri | ||||
| ### The C++ compiler and options: | ||||
|  | ||||
| CXX      ?= g++ | ||||
| CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual -fPIC | ||||
| CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual | ||||
|  | ||||
| ### The directory environment: | ||||
|  | ||||
|   | ||||
| @@ -40,6 +40,7 @@ cOsdObject *cPluginFemonClient::MainMenuAction(void) | ||||
|      printf("UNC    : %08X\n", femon.fe_unc); | ||||
|      printf("Video  : %.2f Mbit/s\n", femon.video_bitrate); | ||||
|      printf("Audio  : %.0f kbit/s\n", femon.audio_bitrate); | ||||
|      printf("Dolby  : %.0f kbit/s\n", femon.dolby_bitrate); | ||||
|      } | ||||
|   else | ||||
|      printf("\n--- No support for FemonService-v1.0 found ---\n"); | ||||
|   | ||||
							
								
								
									
										183
									
								
								femoni18n.c
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								femoni18n.c
									
									
									
									
									
								
							| @@ -15,7 +15,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Visualizza le informazioni sul segnale DVB", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Affiche les informations du signal DVB", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Signaalimittari (OSD)", // suomi | ||||
|     "", // Polski | ||||
| @@ -36,7 +36,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Informazioni sul segnale", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Signal DVB", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Signaalimittari", // suomi | ||||
|     "", // Polski | ||||
| @@ -57,7 +57,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Posizione", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Position", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Sijainti", // suomi | ||||
|     "", // Polski | ||||
| @@ -78,7 +78,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Altezza", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Hauteur", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Korkeus", // suomi | ||||
|     "", // Polski | ||||
| @@ -99,7 +99,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "D<EFBFBD>placement horizontal", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Vaakakeskitys", // suomi | ||||
|     "", // Polski | ||||
| @@ -120,7 +120,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Modo di visualizzazione standard", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Affichage par d<>faut", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Oletusn<EFBFBD>ytt<EFBFBD>tila", // suomi | ||||
|     "", // Polski | ||||
| @@ -141,7 +141,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "basique", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "perus", // suomi | ||||
|     "", // Polski | ||||
| @@ -162,7 +162,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "transpondeur", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "transponderi", // suomi | ||||
|     "", // Polski | ||||
| @@ -183,7 +183,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "flux", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "l<EFBFBD>hete", // suomi | ||||
|     "", // Polski | ||||
| @@ -204,7 +204,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Skin", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Ulkoasu", // suomi | ||||
|     "", // Polski | ||||
| @@ -225,7 +225,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Th<EFBFBD>me", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Teema", // suomi | ||||
|     "", // Polski | ||||
| @@ -246,7 +246,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Classique", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Klassinen", // suomi | ||||
|     "", // Polski | ||||
| @@ -366,13 +366,34 @@ const tI18nPhrase Phrases[] = { | ||||
|     "EgalsTry", // Eesti | ||||
|     "EgalsTry", // Dansk | ||||
|   }, | ||||
|   { "Duotone", // English | ||||
|     "Duotone", // Deutsch | ||||
|     "Duotone", // Slovenski | ||||
|     "Duotone", // Italiano | ||||
|     "Duotone", // Nederlands | ||||
|     "Duotone", // Portugu<67>s | ||||
|     "Duotone", // Fran<61>ais | ||||
|     "Duotone", // Norsk | ||||
|     "Duotone", // suomi | ||||
|     "Duotone", // Polski | ||||
|     "Duotone", // Espa<70>ol | ||||
|     "Duotone", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "Duotone", // Svenska | ||||
|     "Duotone", // Romaneste | ||||
|     "Duotone", // Magyar | ||||
|     "Duotone", // Catal<61> | ||||
|     "Duotone", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "Duotone", // Hrvatski (Croatian) | ||||
|     "Duotone", // Eesti | ||||
|     "Duotone", // Dansk | ||||
|   }, | ||||
|   { "Hide main menu entry", // English | ||||
|     "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch | ||||
|     "", // Slovenski | ||||
|     "Nascondi voce men<65>", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Masquer dans le menu principal", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Piilota valinta p<><70>valikosta", // suomi | ||||
|     "", // Polski | ||||
| @@ -393,7 +414,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Intervallo di aggiornamento [0.1s]", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Intervalle de mise <20> jour (0,1s)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "N<EFBFBD>yt<EFBFBD>n p<>ivitysv<73>li [0.1s]", // suomi | ||||
|     "", // Polski | ||||
| @@ -414,7 +435,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Analyser le flux", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "L<EFBFBD>hetteen analysointi", // suomi | ||||
|     "", // Polski | ||||
| @@ -435,7 +456,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Intervallo di calcolo [0.1s]", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Intervalle de calcul (0,1s)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Laskennan p<>ivitysv<73>li [0.1s]", // suomi | ||||
|     "", // Polski | ||||
| @@ -456,7 +477,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Limite rosso [%]", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Limite du rouge (%)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Punaisen taso [%]", // suomi | ||||
|     "", // Polski | ||||
| @@ -477,7 +498,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Limite verde [%]", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Limite du vert (%)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Vihre<EFBFBD>n taso [%]", // suomi | ||||
|     "", // Polski | ||||
| @@ -498,7 +519,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Informazioni transponder", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Information transpondeur", // Fran<61>ais | ||||
|     "", // Norsk    | ||||
|     "Transponderin tiedot", // suomi | ||||
|     "", // Polski | ||||
| @@ -519,7 +540,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Scheda satellitare", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Carte Satellite", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Satelliittikortti", // suomi | ||||
|     "", // Polski | ||||
| @@ -540,7 +561,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Scheda via cavo", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Carte C<>ble", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kaapelikortti", // suomi | ||||
|     "", // Polski | ||||
| @@ -561,7 +582,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Scheda terrestre", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Carte TNT", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Terrestiaalikortti", // suomi | ||||
|     "", // Polski | ||||
| @@ -582,7 +603,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Registra su syslog", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Enregistrer les infos dans syslog", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kirjaa systeemilokiin", // suomi | ||||
|     "", // Polski | ||||
| @@ -624,7 +645,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Video", // Italiano | ||||
|     "Video", // Nederlands | ||||
|     "Video", // Portugu<67>s | ||||
|     "Video", // Fran<61>ais | ||||
|     "Vid<EFBFBD>o", // Fran<61>ais | ||||
|     "Video", // Norsk | ||||
|     "Kuva", // suomi | ||||
|     "Video", // Polski | ||||
| @@ -666,7 +687,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "None", // Italiano | ||||
|     "None", // Nederlands | ||||
|     "None", // Portugu<67>s | ||||
|     "None", // Fran<61>ais | ||||
|     "Aucun", // Fran<61>ais | ||||
|     "None", // Norsk | ||||
|     "ei", // suomi | ||||
|     "None", // Polski | ||||
| @@ -687,7 +708,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Off", // Italiano | ||||
|     "Off", // Nederlands | ||||
|     "Off", // Portugu<67>s | ||||
|     "Off", // Fran<61>ais | ||||
|     "Non", // Fran<61>ais | ||||
|     "Off", // Norsk | ||||
|     "poissa", // suomi | ||||
|     "Off", // Polski | ||||
| @@ -708,7 +729,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "On", // Italiano | ||||
|     "On", // Nederlands | ||||
|     "On", // Portugu<67>s | ||||
|     "On", // Fran<61>ais | ||||
|     "Oui", // Fran<61>ais | ||||
|     "On", // Norsk | ||||
|     "p<EFBFBD><EFBFBD>ll<EFBFBD>", // suomi | ||||
|     "On", // Polski | ||||
| @@ -792,7 +813,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Information flux", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "L<EFBFBD>hetteen tiedot", // suomi | ||||
|     "", // Polski | ||||
| @@ -813,7 +834,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "MPEG Layer", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "MPEG-taso", // suomi | ||||
|     "", // Polski | ||||
| @@ -834,7 +855,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Flux vid<69>o", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kuvaraita", // suomi | ||||
|     "", // Polski | ||||
| @@ -855,7 +876,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Bitrate", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Bittinopeus", // suomi | ||||
|     "", // Polski | ||||
| @@ -876,7 +897,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Rafra<EFBFBD>chissement", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Ruudunp<EFBFBD>ivitysnopeus", // suomi | ||||
|     "", // Polski | ||||
| @@ -918,7 +939,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Proportions d'image", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kuvasuhde", // suomi | ||||
|     "", // Polski | ||||
| @@ -939,7 +960,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "r<EFBFBD>serv<EFBFBD>", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "varattu", // suomi | ||||
|     "", // Polski | ||||
| @@ -960,7 +981,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "libre", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "vapaa", // suomi | ||||
|     "", // Polski | ||||
| @@ -981,7 +1002,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Standard vid<69>o", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kuvaformaatti", // suomi | ||||
|     "", // Polski | ||||
| @@ -1044,7 +1065,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "inconnu", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "tuntematon", // suomi | ||||
|     "", // Polski | ||||
| @@ -1065,7 +1086,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "R<EFBFBD>solution", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Resoluutio", // suomi | ||||
|     "", // Polski | ||||
| @@ -1086,7 +1107,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Flux audio", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "<EFBFBD><EFBFBD>niraita", // suomi | ||||
|     "", // Polski | ||||
| @@ -1107,7 +1128,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Fr<EFBFBD>quence d'<27>chantillonage", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "N<EFBFBD>ytteenottotaajuus", // suomi | ||||
|     "", // Polski | ||||
| @@ -1296,7 +1317,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "non indiqu<71>", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "ei ilmaistu", // suomi | ||||
|     "", // Polski | ||||
| @@ -1338,7 +1359,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Flux AC-3", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "AC-3-<2D><>niraita", // suomi | ||||
|     "", // Polski | ||||
| @@ -1359,7 +1380,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Taille de paquet", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kehyksen koko", // suomi | ||||
|     "", // Polski | ||||
| @@ -1380,7 +1401,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Mode bitstream", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "L<EFBFBD>hetteen tyyppi", // suomi | ||||
|     "", // Polski | ||||
| @@ -1401,7 +1422,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Mode de codage audio", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "<EFBFBD><EFBFBD>nikoodaus", // suomi | ||||
|     "", // Polski | ||||
| @@ -1422,7 +1443,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Niveau sonore milieu", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Keskikanavan taso", // suomi | ||||
|     "", // Polski | ||||
| @@ -1443,7 +1464,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Niveau sonore surround", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Tehostekanavien taso", // suomi | ||||
|     "", // Polski | ||||
| @@ -1464,7 +1485,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Mode Dolby Surround", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Dolby Surround -tehoste", // suomi | ||||
|     "", // Polski | ||||
| @@ -1485,7 +1506,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Effets de basses", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "LFE-kanava", // suomi | ||||
|     "", // Polski | ||||
| @@ -1506,7 +1527,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Normalisation des dialogues", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Dialogin normalisointi", // suomi | ||||
|     "", // Polski | ||||
| @@ -1527,7 +1548,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Principal (CM)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "P<EFBFBD><EFBFBD>asiallinen (CM)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1548,7 +1569,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Musique et effets (ME)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Musiikki ja tehosteet (ME)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1569,7 +1590,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Malvoyants (VI)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "N<EFBFBD>k<EFBFBD>rajoitteinen (VI)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1590,7 +1611,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Malentendants (HI)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kuulorajoitteinen (HI)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1611,7 +1632,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Dialogue (D)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Vuoropuhelu (D)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1632,7 +1653,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Commentaires (C)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Kommentointi (C)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1653,7 +1674,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Urgence (E)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "H<EFBFBD>t<EFBFBD>tiedote (E)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1674,7 +1695,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Voix off (VO)", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "P<EFBFBD><EFBFBD>lle puhuttu (VO)", // suomi | ||||
|     "", // Polski | ||||
| @@ -1695,7 +1716,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Karaoke", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Karaoke", // suomi | ||||
|     "", // Polski | ||||
| @@ -1716,7 +1737,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Can. 1", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "kan. 1", // suomi | ||||
|     "", // Polski | ||||
| @@ -1737,7 +1758,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Can. 2", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "kan. 2", // suomi | ||||
|     "", // Polski | ||||
| @@ -1758,7 +1779,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Centre", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "K", // suomi | ||||
|     "", // Polski | ||||
| @@ -1779,7 +1800,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Gauche", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "V", // suomi | ||||
|     "", // Polski | ||||
| @@ -1800,7 +1821,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Droite", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "O", // suomi | ||||
|     "", // Polski | ||||
| @@ -1821,7 +1842,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Surround", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "T", // suomi | ||||
|     "", // Polski | ||||
| @@ -1842,7 +1863,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Surround gauche", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "TV", // suomi | ||||
|     "", // Polski | ||||
| @@ -1863,7 +1884,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Surround droit", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "TO", // suomi | ||||
|     "", // Polski | ||||
| @@ -1884,7 +1905,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Syst<EFBFBD>me CA", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "N<EFBFBD>yt<EFBFBD> salausj<73>rjestelm<6C>", // suomi | ||||
|     "", // Polski | ||||
| @@ -1905,7 +1926,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Fixe", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "kiinte<EFBFBD>", // suomi | ||||
|     "", // Polski | ||||
| @@ -1926,7 +1947,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Analogique", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "analoginen", // suomi | ||||
|     "", // Polski | ||||
| @@ -1947,7 +1968,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Free To Air", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "salaamaton", // suomi | ||||
|     "", // Polski | ||||
| @@ -1968,7 +1989,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "SECA/Mediaguard", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "SECA/Mediaguard", // suomi | ||||
|     "", // Polski | ||||
| @@ -1989,7 +2010,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Viaccess", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Viaccess", // suomi | ||||
|     "", // Polski | ||||
| @@ -2010,7 +2031,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Irdeto", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Irdeto", // suomi | ||||
|     "", // Polski | ||||
| @@ -2031,7 +2052,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "NDS/Videoguard", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "NDS/Videoguard", // suomi | ||||
|     "", // Polski | ||||
| @@ -2052,7 +2073,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "Conax", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Conax", // suomi | ||||
|     "", // Polski | ||||
| @@ -2073,7 +2094,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "CryptoWorks", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "CryptoWorks", // suomi | ||||
|     "", // Polski | ||||
| @@ -2094,7 +2115,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "PowerVu", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "PowerVu", // suomi | ||||
|     "", // Polski | ||||
| @@ -2115,7 +2136,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "BetaCrypt", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "BetaCrypt", // suomi | ||||
|     "", // Polski | ||||
| @@ -2136,7 +2157,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "NagraVision", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "NagraVision", // suomi | ||||
|     "", // Polski | ||||
| @@ -2157,7 +2178,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "SkyCrypt", // Fran<61>ais | ||||
|     "", // Norsk    | ||||
|     "SkyCrypt", // suomi | ||||
|     "", // Polski | ||||
|   | ||||
							
								
								
									
										115
									
								
								femonosd.c
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								femonosd.c
									
									
									
									
									
								
							| @@ -81,7 +81,19 @@ cBitmap cFemonOsd::bmCarrier(carrier_xpm); | ||||
| cBitmap cFemonOsd::bmViterbi(viterbi_xpm); | ||||
| cBitmap cFemonOsd::bmSync(sync_xpm); | ||||
|  | ||||
| cFemonOsd::cFemonOsd(void) | ||||
| cFemonOsd *cFemonOsd::pInstance = NULL; | ||||
|  | ||||
| cFemonOsd *cFemonOsd::Instance(bool create) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   if (pInstance == NULL && create) | ||||
|   { | ||||
|      pInstance = new cFemonOsd(); | ||||
|   } | ||||
|   return (pInstance); | ||||
| } | ||||
|  | ||||
| cFemonOsd::cFemonOsd() | ||||
| :cOsdObject(true), cThread("femon osd") | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
| @@ -110,13 +122,13 @@ cFemonOsd::cFemonOsd(void) | ||||
| cFemonOsd::~cFemonOsd(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   if (Running()) { | ||||
|   if (Running()) | ||||
|      Cancel(3); | ||||
|      } | ||||
|   if (m_Receiver) | ||||
|      delete m_Receiver; | ||||
|   if (m_Osd) | ||||
|      delete m_Osd; | ||||
|   pInstance = NULL; | ||||
| } | ||||
|  | ||||
| void cFemonOsd::DrawStatusWindow(void) | ||||
| @@ -903,13 +915,13 @@ void cFemonOsd::Show(void) | ||||
|      } | ||||
|   m_Osd = cOsdProvider::NewOsd(((Setup.OSDWidth - OSDWIDTH) / 2) + Setup.OSDLeft + femonConfig.osdoffset, ((Setup.OSDHeight - OSDHEIGHT) / 2) + Setup.OSDTop); | ||||
|   if (m_Osd) { | ||||
|      tArea Areas1[] = { { 0, 0, OSDWIDTH, OSDHEIGHT, 4 } }; | ||||
|      tArea Areas1[] = { { 0, 0, OSDWIDTH, OSDHEIGHT, femonTheme[femonConfig.theme].bpp } }; | ||||
|      if (m_Osd->CanHandleAreas(Areas1, sizeof(Areas1) / sizeof(tArea)) == oeOk) { | ||||
|         m_Osd->SetAreas(Areas1, sizeof(Areas1) / sizeof(tArea)); | ||||
|         } | ||||
|      else { | ||||
|         tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0),          (OSDWIDTH-1), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-1), 4 }, | ||||
|                            { 0, OSDINFOWIN_Y(0),            (OSDWIDTH-1), OSDINFOWIN_Y(OSDROWHEIGHT-1),      4 }, | ||||
|         tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0),          (OSDWIDTH-1), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-1), femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(0),            (OSDWIDTH-1), OSDINFOWIN_Y(OSDROWHEIGHT-1),      femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(OSDROWHEIGHT), (OSDWIDTH-1), OSDINFOWIN_Y(OSDINFOHEIGHT-1),     2 } }; | ||||
|         m_Osd->SetAreas(Areas2, sizeof(Areas2) / sizeof(tArea)); | ||||
|         } | ||||
| @@ -980,6 +992,69 @@ void cFemonOsd::SetAudioTrack(int Index, const char * const *Tracks) | ||||
|      } | ||||
| } | ||||
|  | ||||
| bool cFemonOsd::DeviceSwitch(int direction) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   int device = cDevice::ActualDevice()->DeviceNumber();                             | ||||
|   direction = sgn(direction); | ||||
|   if (device >= 0) { | ||||
|      cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|      for (int i = 0; i < cDevice::NumDevices() - 1; i++) {                          | ||||
|         if (direction) { | ||||
|            if (++device >= cDevice::NumDevices()) device = 0;                      | ||||
|            } | ||||
|         else { | ||||
|            if (--device < 0) device = cDevice::NumDevices() - 1; | ||||
|            } | ||||
|         if (cDevice::GetDevice(device)->ProvidesChannel(channel)) { | ||||
|            Dprintf("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, direction, device); | ||||
|            // here should be added some checks, if the device is really available (i.e. not recording) | ||||
|            cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0); | ||||
|            cControl::Shutdown(); | ||||
|            cDevice::GetDevice(device)->SwitchChannel(channel, true); | ||||
|            // does this work with primary devices ? | ||||
|            cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apids(), channel->Dpids(), channel->Spids())); | ||||
|            cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number()); | ||||
|            return (true); | ||||
|            } | ||||
|         } | ||||
|      } | ||||
|    return (false); | ||||
| } | ||||
|  | ||||
| double cFemonOsd::GetVideoBitrate(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   double value = 0.0; | ||||
|  | ||||
|   if (m_Receiver) | ||||
|      value = m_Receiver->VideoBitrate(); | ||||
|  | ||||
|   return (value); | ||||
| } | ||||
|  | ||||
| double cFemonOsd::GetAudioBitrate(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   double value = 0.0; | ||||
|  | ||||
|   if (m_Receiver) | ||||
|      value = m_Receiver->AudioBitrate(); | ||||
|  | ||||
|   return (value); | ||||
| } | ||||
|  | ||||
| double cFemonOsd::GetDolbyBitrate(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   double value = 0.0; | ||||
|  | ||||
|   if (m_Receiver) | ||||
|      value = m_Receiver->AC3Bitrate(); | ||||
|  | ||||
|   return (value); | ||||
| } | ||||
|  | ||||
| eOSState cFemonOsd::ProcessKey(eKeys Key) | ||||
| {  | ||||
|   eOSState state = cOsdObject::ProcessKey(Key); | ||||
| @@ -1060,32 +1135,10 @@ eOSState cFemonOsd::ProcessKey(eKeys Key) | ||||
|                } | ||||
|             break; | ||||
|        case kRight: | ||||
|             DeviceSwitch(1); | ||||
|             break; | ||||
|        case kLeft: | ||||
|             { | ||||
|             int device = cDevice::ActualDevice()->DeviceNumber(); | ||||
|             if (device >= 0) { | ||||
|                cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|                for (int i = 0; i < cDevice::NumDevices() - 1; i++) { | ||||
|                    if (NORMALKEY(Key) == kRight) { | ||||
|                       if (++device >= cDevice::NumDevices()) device = 0; | ||||
|                       } | ||||
|                    else { | ||||
|                       if (--device < 0) device = cDevice::NumDevices() - 1; | ||||
|                       } | ||||
|                    if (cDevice::GetDevice(device)->ProvidesChannel(channel)) { | ||||
|                       Dprintf("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, Key, device); | ||||
|                       // here should be added some checks, if the device is really available (i.e. not recording) | ||||
|                       cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0); | ||||
|                       cControl::Shutdown(); | ||||
|                       cDevice::GetDevice(device)->SwitchChannel(channel, true); | ||||
|                       // does this work with primary devices ? | ||||
|                       cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apids(), channel->Dpids(), channel->Spids())); | ||||
|                       cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number()); | ||||
|                       break; | ||||
|                       } | ||||
|                    } | ||||
|                } | ||||
|             } | ||||
|             DeviceSwitch(-1); | ||||
|             break; | ||||
|        case kUp|k_Repeat: | ||||
|        case kUp: | ||||
|   | ||||
							
								
								
									
										11
									
								
								femonosd.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								femonosd.h
									
									
									
									
									
								
							| @@ -21,6 +21,7 @@ | ||||
|  | ||||
| class cFemonOsd : public cOsdObject, public cThread, public cStatus { | ||||
| private: | ||||
|   static cFemonOsd *pInstance; | ||||
|   cOsd *m_Osd; | ||||
|   cFemonReceiver *m_Receiver; | ||||
|   int m_Frontend; | ||||
| @@ -44,16 +45,24 @@ private: | ||||
|   void DrawInfoWindow(void); | ||||
|  | ||||
| protected: | ||||
|   cFemonOsd(); | ||||
|   cFemonOsd(const cFemonOsd&); | ||||
|   cFemonOsd& operator= (const cFemonOsd&); | ||||
|   virtual void Action(void); | ||||
|   virtual void ChannelSwitch(const cDevice * device, int channelNumber); | ||||
|   virtual void SetAudioTrack(int Index, const char * const *Tracks); | ||||
|  | ||||
| public: | ||||
|   cFemonOsd(void); | ||||
|   static cFemonOsd *Instance(bool create = false); | ||||
|   ~cFemonOsd(); | ||||
|  | ||||
|   virtual void Show(void); | ||||
|   virtual eOSState ProcessKey(eKeys Key); | ||||
|  | ||||
|   bool DeviceSwitch(int direction); | ||||
|   double GetVideoBitrate(void); | ||||
|   double GetAudioBitrate(void); | ||||
|   double GetDolbyBitrate(void); | ||||
| }; | ||||
|  | ||||
| #endif //__FEMONOSD_H | ||||
|   | ||||
| @@ -58,9 +58,8 @@ cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[]) | ||||
| cFemonReceiver::~cFemonReceiver(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   Detach(); | ||||
|   if (Running()) | ||||
|      Cancel(); | ||||
|      Cancel(3); | ||||
| } | ||||
|  | ||||
| /* The following function originates from libdvbmpeg: */ | ||||
|   | ||||
| @@ -20,6 +20,7 @@ struct FemonService_v1_0 { | ||||
|   uint32_t fe_unc; | ||||
|   double video_bitrate; | ||||
|   double audio_bitrate; | ||||
|   double dolby_bitrate; | ||||
|   }; | ||||
|  | ||||
| #endif //__FEMONSERVICE_H | ||||
|   | ||||
							
								
								
									
										21
									
								
								femontools.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								femontools.c
									
									
									
									
									
								
							| @@ -25,7 +25,7 @@ cString getFrontendName(int cardIndex) | ||||
|   ioctl(fe, FE_GET_INFO, &value); | ||||
|   close(fe); | ||||
|  | ||||
|   return (cString::sprintf("#%d %s", cardIndex, value.name)); | ||||
|   return (cString::sprintf("%s on device #%d", value.name, cardIndex)); | ||||
| } | ||||
|  | ||||
| cString getFrontendStatus(int cardIndex) | ||||
| @@ -41,7 +41,7 @@ cString getFrontendStatus(int cardIndex) | ||||
|   CHECK(ioctl(fe, FE_READ_STATUS, &value)); | ||||
|   close(fe); | ||||
|  | ||||
|   return (cString::sprintf("%s:%s:%s:%s:%s", (value & FE_HAS_LOCK) ? "LOCKED" : "-", (value & FE_HAS_SIGNAL) ? "SIGNAL" : "-", (value & FE_HAS_CARRIER) ? "CARRIER" : "-", (value & FE_HAS_VITERBI) ? "VITERBI" : "-", (value & FE_HAS_SYNC) ? "SYNC" : "-")); | ||||
|   return (cString::sprintf("Status %s:%s:%s:%s:%s on device #%d", (value & FE_HAS_LOCK) ? "LOCKED" : "-", (value & FE_HAS_SIGNAL) ? "SIGNAL" : "-", (value & FE_HAS_CARRIER) ? "CARRIER" : "-", (value & FE_HAS_VITERBI) ? "VITERBI" : "-", (value & FE_HAS_SYNC) ? "SYNC" : "-", cardIndex)); | ||||
| } | ||||
|  | ||||
| uint16_t getSignal(int cardIndex) | ||||
| @@ -108,20 +108,3 @@ uint32_t getUNC(int cardIndex) | ||||
|   return (value); | ||||
| } | ||||
|  | ||||
| double getVideoBitrate(void) | ||||
| { | ||||
|   double value = 0.0; | ||||
|  | ||||
|   // Not yet implemented. | ||||
|  | ||||
|   return (value); | ||||
| } | ||||
|  | ||||
| double getAudioBitrate(void) | ||||
| { | ||||
|   double value = 0.0; | ||||
|  | ||||
|   // Not yet implemented. | ||||
|  | ||||
|   return (value); | ||||
| } | ||||
|   | ||||
| @@ -26,7 +26,5 @@ uint16_t getSNR(int cardIndex = 0); | ||||
| uint16_t getSignal(int cardIndex = 0); | ||||
| uint32_t getBER(int cardIndex = 0); | ||||
| uint32_t getUNC(int cardIndex = 0); | ||||
| double getVideoBitrate(void); | ||||
| double getAudioBitrate(void); | ||||
|  | ||||
| #endif // __FEMONTOOLS_H | ||||
|   | ||||
		Reference in New Issue
	
	Block a user