mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					825755281f | ||
| 
						 | 
					ab3f270eed | ||
| 
						 | 
					995b2567e5 | ||
| 
						 | 
					6f9961f499 | ||
| 
						 | 
					c454189adf | ||
| 
						 | 
					5339f71b33 | ||
| 
						 | 
					8e53fa8521 | 
							
								
								
									
										47
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								HISTORY
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
				
			|||||||
 | 
					===================================
 | 
				
			||||||
VDR Plugin 'femon' Revision History
 | 
					VDR Plugin 'femon' Revision History
 | 
				
			||||||
-----------------------------------
 | 
					===================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2004-02-15: Version 0.0.1
 | 
					2004-02-15: Version 0.0.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,7 +59,13 @@ VDR Plugin 'femon' Revision History
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Backported the "AC3 Stream Information" feature from version 0.1.3.
 | 
					- Backported the "AC3 Stream Information" feature from version 0.1.3.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-------------------------
 | 
					2004-09-11: Version 0.0.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-  Backported changes and fixes from version 0.1.6.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					VDR Plugin 'femon' Revision History
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2004-05-18: Version 0.1.0
 | 
					2004-05-18: Version 0.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,3 +94,39 @@ VDR Plugin 'femon' Revision History
 | 
				
			|||||||
- Added some new symbols and beautified the old ones.
 | 
					- Added some new symbols and beautified the old ones.
 | 
				
			||||||
- Added audio track selection feature.
 | 
					- Added audio track selection feature.
 | 
				
			||||||
- Added preliminary device switching feature (disabled at the moment).
 | 
					- Added preliminary device switching feature (disabled at the moment).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2004-08-18: Version 0.1.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fixed OSDSTATUSWIN_XC define.
 | 
				
			||||||
 | 
					- Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins).
 | 
				
			||||||
 | 
					- Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting this one).
 | 
				
			||||||
 | 
					- Added patches directory: CA system names by Lauri Tischler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2004-09-11: Version 0.1.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Yet Another Minor Release.
 | 
				
			||||||
 | 
					- Integrated the CA system names patch: "Setup / Show CA System".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2004-11-28: Version 0.1.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated for vdr-1.3.17.
 | 
				
			||||||
 | 
					- Fixed receiver related crash (Thanks to Marco Schluessler).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2005-01-15: Version 0.7.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated for vdr-1.3.18.
 | 
				
			||||||
 | 
					- Added DEBUG mode (make DEBUG=1 plugins).
 | 
				
			||||||
 | 
					- OSD height is now user configurable.
 | 
				
			||||||
 | 
					- Added audio channel selection into Yellow key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2005-01-23: Version 0.7.9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Some minor cosmetic fixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2005-01-23: Version 0.8.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated for vdr-1.3.19.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2005-01-24: Version 0.8.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added Estonian translations (Thanks to Arthur Konovalov).
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							@@ -16,7 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).h | awk '{ pri
 | 
				
			|||||||
### The C++ compiler and options:
 | 
					### The C++ compiler and options:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CXX      ?= g++
 | 
					CXX      ?= g++
 | 
				
			||||||
CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
 | 
					CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -fPIC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### The directory environment:
 | 
					### The directory environment:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,6 +44,10 @@ INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 | 
					DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef NTSC_SYSTEM
 | 
				
			||||||
 | 
					DEFINES += -DNTSC_SYSTEM
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### The object files (add further files here):
 | 
					### The object files (add further files here):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o
 | 
					OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README
									
									
									
									
									
								
							@@ -30,8 +30,8 @@ Metzler Brothers.
 | 
				
			|||||||
Terminology:
 | 
					Terminology:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--------------------------------------------------------------
 | 
					--------------------------------------------------------------
 | 
				
			||||||
|## Channel Name ######################### [DD][AR][VF][A][D]|
 | 
					|## Channel Name ########################## [AR][VF][A/DD][D]|
 | 
				
			||||||
|[=====Signal Strength in %  =============|=================]|
 | 
					|[=====Signal Strength in % ==============|=================]|
 | 
				
			||||||
|[=====Signal-to-Noise Ratio in % ========|=================]|
 | 
					|[=====Signal-to-Noise Ratio in % ========|=================]|
 | 
				
			||||||
| STR: #0000 (0%)       BER: #00000000       Video: 0 Mbit/s |
 | 
					| STR: #0000 (0%)       BER: #00000000       Video: 0 Mbit/s |
 | 
				
			||||||
| SNR: #0000 (0%)       UNC: #00000000       Audio: 0 kbit/s |
 | 
					| SNR: #0000 (0%)       UNC: #00000000       Audio: 0 kbit/s |
 | 
				
			||||||
@@ -51,10 +51,9 @@ CARRIER - Found a DVB signal
 | 
				
			|||||||
VITERBI - FEC (forward error correction) is stable
 | 
					VITERBI - FEC (forward error correction) is stable
 | 
				
			||||||
SYNC    - Found sync bytes
 | 
					SYNC    - Found sync bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DD      - AC-3 stream (optional)
 | 
					 | 
				
			||||||
AR      - Aspect Ratio: 1:1/4:3/16:9/2.21:1 (optional)
 | 
					AR      - Aspect Ratio: 1:1/4:3/16:9/2.21:1 (optional)
 | 
				
			||||||
VF      - Video format: PAL/NTSC (optional)
 | 
					VF      - Video format: PAL/NTSC (optional)
 | 
				
			||||||
A       - Audio track: 1..2 (optional)
 | 
					A/DD    - Audio (0..5) / AC-3 track (optional)
 | 
				
			||||||
D       - Device number: 0..3 (optional)
 | 
					D       - Device number: 0..3 (optional)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Controls:
 | 
					Controls:
 | 
				
			||||||
@@ -63,9 +62,10 @@ ChanUp/ChanDn - Switch channel up/down
 | 
				
			|||||||
Up/Down       - Switch channel up/down
 | 
					Up/Down       - Switch channel up/down
 | 
				
			||||||
0-9           - Select channel
 | 
					0-9           - Select channel
 | 
				
			||||||
Ok            - Switch between display modes: basic, transponder, stream, AC-3
 | 
					Ok            - Switch between display modes: basic, transponder, stream, AC-3
 | 
				
			||||||
Right/Left    - Switch to next/previous device that provides the current channel
 | 
					Green         - Select next audio track
 | 
				
			||||||
Green         - Select language (APID)
 | 
					Yellow        - Select audio channel: stereo, mono left, mono right
 | 
				
			||||||
Back          - Exit plugin
 | 
					Back          - Exit plugin
 | 
				
			||||||
 | 
					(Left/Right   - Switch to next/previous device that provides the current channel)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Installation:
 | 
					Installation:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,7 +82,14 @@ Notes:
 | 
				
			|||||||
- The plugin supports only those DVB cards with _one_ frontend (do any cards
 | 
					- 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
 | 
					  with multiple frontends even exist?), because I haven't yet figured howto do
 | 
				
			||||||
  it without patching the VDR core.
 | 
					  it without patching the VDR core.
 | 
				
			||||||
- Sometimes (read always) ttxtsubs plugin messes up the OSD - user should disable
 | 
					 | 
				
			||||||
  ttxtsubs, but closing and reopening the femon plugin might help temporarily as
 | 
					 | 
				
			||||||
  well. Btw., this same thing happens with OSDTeletext plugin too :)
 | 
					 | 
				
			||||||
- Disable the stream analyze to speed up heavy zapping sessions.
 | 
					- Disable the stream analyze to speed up heavy zapping sessions.
 | 
				
			||||||
 | 
					- The signal strength and signal-to-noise ratio values are comparable only
 | 
				
			||||||
 | 
					  between the same brand/model frontends. Due to the lack of proper frontend
 | 
				
			||||||
 | 
					  specifications those values cannot be calculated into any real units.
 | 
				
			||||||
 | 
					- If the OSD isn't visible, you've configured the OSD height too big or too
 | 
				
			||||||
 | 
					  small. Please, try to adjust the variable on the setup page before writing
 | 
				
			||||||
 | 
					  any bug reports.
 | 
				
			||||||
 | 
					- There's a shrinked default OSD height for NTSC users: make NTSC_SYSTEM=1
 | 
				
			||||||
 | 
					- The device switching feature is still non-functional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"Femon - A real womon who lives according to her natural feminine inclinations."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								femon.c
									
									
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
#include "femonosd.h"
 | 
					#include "femonosd.h"
 | 
				
			||||||
#include "femon.h"
 | 
					#include "femon.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if VDRVERSNUM && VDRVERSNUM < 10307
 | 
					#if VDRVERSNUM && VDRVERSNUM < 10319
 | 
				
			||||||
#error "You don't exist! Go away!"
 | 
					#error "You don't exist! Go away!"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,6 +71,8 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value)
 | 
				
			|||||||
  else if (!strcasecmp(Name, "SyslogOutput"))   femonConfig.syslogoutput   = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "SyslogOutput"))   femonConfig.syslogoutput   = atoi(Value);
 | 
				
			||||||
  else if (!strcasecmp(Name, "DisplayMode"))    femonConfig.displaymode    = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "DisplayMode"))    femonConfig.displaymode    = atoi(Value);
 | 
				
			||||||
  else if (!strcasecmp(Name, "Position"))       femonConfig.position       = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "Position"))       femonConfig.position       = atoi(Value);
 | 
				
			||||||
 | 
					  else if (!strcasecmp(Name, "OSDHeight"))      femonConfig.osdheight      = atoi(Value);
 | 
				
			||||||
 | 
					  else if (!strcasecmp(Name, "ShowCASystem"))   femonConfig.showcasystem   = atoi(Value);
 | 
				
			||||||
  else if (!strcasecmp(Name, "RedLimit"))       femonConfig.redlimit       = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "RedLimit"))       femonConfig.redlimit       = atoi(Value);
 | 
				
			||||||
  else if (!strcasecmp(Name, "GreenLimit"))     femonConfig.greenlimit     = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "GreenLimit"))     femonConfig.greenlimit     = atoi(Value);
 | 
				
			||||||
  else if (!strcasecmp(Name, "UpdateInterval")) femonConfig.updateinterval = atoi(Value);
 | 
					  else if (!strcasecmp(Name, "UpdateInterval")) femonConfig.updateinterval = atoi(Value);
 | 
				
			||||||
@@ -101,6 +103,8 @@ void cMenuFemonSetup::Setup(void)
 | 
				
			|||||||
  Add(new cMenuEditBoolItem(  tr("Use Syslog Output"),           &femonConfig.syslogoutput,   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,    modeMaxNumber, dispmodes));
 | 
					  Add(new cMenuEditStraItem(  tr("Default Display Mode"),        &femonConfig.displaymode,    modeMaxNumber, dispmodes));
 | 
				
			||||||
  Add(new cMenuEditBoolItem(  tr("Position"),                    &femonConfig.position,       tr("bottom"),  tr("top")));
 | 
					  Add(new cMenuEditBoolItem(  tr("Position"),                    &femonConfig.position,       tr("bottom"),  tr("top")));
 | 
				
			||||||
 | 
					  Add(new cMenuEditIntItem(   tr("Height"),                      &femonConfig.osdheight,      400,           500));
 | 
				
			||||||
 | 
					  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("Red Limit [%]"),               &femonConfig.redlimit,       1,             50));
 | 
				
			||||||
  Add(new cMenuEditIntItem(   tr("Green Limit [%]"),             &femonConfig.greenlimit,     51,            100));
 | 
					  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 cMenuEditIntItem(   tr("OSD Update Interval [0.1s]"),  &femonConfig.updateinterval, 1,             100));
 | 
				
			||||||
@@ -116,8 +120,10 @@ void cMenuFemonSetup::Store(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  SetupStore("HideMenu",       femonConfig.hidemenu);
 | 
					  SetupStore("HideMenu",       femonConfig.hidemenu);
 | 
				
			||||||
  SetupStore("SyslogOutput",   femonConfig.syslogoutput);
 | 
					  SetupStore("SyslogOutput",   femonConfig.syslogoutput);
 | 
				
			||||||
  SetupStore("Position",       femonConfig.position);
 | 
					 | 
				
			||||||
  SetupStore("DisplayMode",    femonConfig.displaymode);
 | 
					  SetupStore("DisplayMode",    femonConfig.displaymode);
 | 
				
			||||||
 | 
					  SetupStore("Position",       femonConfig.position);
 | 
				
			||||||
 | 
					  SetupStore("OSDHeight",      femonConfig.osdheight);
 | 
				
			||||||
 | 
					  SetupStore("ShowCASystem",   femonConfig.showcasystem);
 | 
				
			||||||
  SetupStore("RedLimit",       femonConfig.redlimit);
 | 
					  SetupStore("RedLimit",       femonConfig.redlimit);
 | 
				
			||||||
  SetupStore("GreenLimit",     femonConfig.greenlimit);
 | 
					  SetupStore("GreenLimit",     femonConfig.greenlimit);
 | 
				
			||||||
  SetupStore("UpdateInterval", femonConfig.updateinterval);
 | 
					  SetupStore("UpdateInterval", femonConfig.updateinterval);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								femon.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								femon.h
									
									
									
									
									
								
							@@ -11,7 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <vdr/plugin.h>
 | 
					#include <vdr/plugin.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *VERSION        = "0.1.4";
 | 
					static const char *VERSION        = "0.8.1";
 | 
				
			||||||
static const char *DESCRIPTION    = "DVB Signal Information Monitor (OSD)";
 | 
					static const char *DESCRIPTION    = "DVB Signal Information Monitor (OSD)";
 | 
				
			||||||
static const char *MAINMENUENTRY  = "Signal Information";
 | 
					static const char *MAINMENUENTRY  = "Signal Information";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,4 +21,10 @@ cFemonConfig::cFemonConfig(void)
 | 
				
			|||||||
  analyzestream  = 1;
 | 
					  analyzestream  = 1;
 | 
				
			||||||
  calcinterval   = 20;
 | 
					  calcinterval   = 20;
 | 
				
			||||||
  syslogoutput   = 0;
 | 
					  syslogoutput   = 0;
 | 
				
			||||||
 | 
					  showcasystem   = 0;
 | 
				
			||||||
 | 
					#ifdef NTSC_SYSTEM
 | 
				
			||||||
 | 
					  osdheight      = 420;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  osdheight      = 480;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,12 @@
 | 
				
			|||||||
#ifndef __FEMONCFG_H
 | 
					#ifndef __FEMONCFG_H
 | 
				
			||||||
#define __FEMONCFG_H
 | 
					#define __FEMONCFG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					#define debug(x) (x);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define debug(x) ;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum dispModes {
 | 
					enum dispModes {
 | 
				
			||||||
  modeBasic,
 | 
					  modeBasic,
 | 
				
			||||||
  modeTransponder,
 | 
					  modeTransponder,
 | 
				
			||||||
@@ -30,6 +36,8 @@ public:
 | 
				
			|||||||
  int analyzestream;
 | 
					  int analyzestream;
 | 
				
			||||||
  int calcinterval;
 | 
					  int calcinterval;
 | 
				
			||||||
  int syslogoutput;
 | 
					  int syslogoutput;
 | 
				
			||||||
 | 
					  int showcasystem;
 | 
				
			||||||
 | 
					  int osdheight;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern cFemonConfig femonConfig;
 | 
					extern cFemonConfig femonConfig;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										498
									
								
								femoni18n.c
									
									
									
									
									
								
							
							
						
						
									
										498
									
								
								femoni18n.c
									
									
									
									
									
								
							@@ -27,6 +27,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "DVB Signaalmonitor (OSD)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Signal Information", // English
 | 
					  { "Signal Information", // English
 | 
				
			||||||
    "Signalinformationen", // Deutsch
 | 
					    "Signalinformationen", // Deutsch
 | 
				
			||||||
@@ -46,6 +48,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Signaaliinfo", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Position", // English
 | 
					  { "Position", // English
 | 
				
			||||||
    "Position", // Deutsch
 | 
					    "Position", // Deutsch
 | 
				
			||||||
@@ -65,6 +69,29 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Positsioon", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Height", // English
 | 
				
			||||||
 | 
					    "H<EFBFBD>he", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "Altezza", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "Korkeus", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "K<EFBFBD>rgus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Default Display Mode", // English
 | 
					  { "Default Display Mode", // English
 | 
				
			||||||
    "Standard Anzeigemodus", // Deutsch
 | 
					    "Standard Anzeigemodus", // Deutsch
 | 
				
			||||||
@@ -84,6 +111,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>  
 | 
					    "", // Catal<61>  
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Vaikimisi displei moodus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "basic", // English
 | 
					  { "basic", // English
 | 
				
			||||||
    "Standard", // Deutsch
 | 
					    "Standard", // Deutsch
 | 
				
			||||||
@@ -103,6 +132,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>  
 | 
					    "", // Catal<61>  
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "standard", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "transponder", // English
 | 
					  { "transponder", // English
 | 
				
			||||||
    "Transponder", // Deutsch
 | 
					    "Transponder", // Deutsch
 | 
				
			||||||
@@ -122,6 +153,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>  
 | 
					    "", // Catal<61>  
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "", // Eesti
 | 
				
			||||||
 | 
					    "transponder", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "stream", // English
 | 
					  { "stream", // English
 | 
				
			||||||
    "Stream", // Deutsch
 | 
					    "Stream", // Deutsch
 | 
				
			||||||
@@ -141,6 +174,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>  
 | 
					    "", // Catal<61>  
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "striim", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Hide Mainmenu Entry", // English
 | 
					  { "Hide Mainmenu Entry", // English
 | 
				
			||||||
    "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch
 | 
					    "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch
 | 
				
			||||||
@@ -160,6 +195,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Peida valik peamen<65><6E>s", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "OSD Update Interval [0.1s]", // English
 | 
					  { "OSD Update Interval [0.1s]", // English
 | 
				
			||||||
    "OSD Updateintervall [0.1s]", // Deutsch
 | 
					    "OSD Updateintervall [0.1s]", // Deutsch
 | 
				
			||||||
@@ -179,6 +216,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (0,1 <20><><EFBFBD>)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (0,1 <20><><EFBFBD>)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Uuendusintervall [0,1s]", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Analyze Stream", // English
 | 
					  { "Analyze Stream", // English
 | 
				
			||||||
    "Stream analysieren", // Deutsch
 | 
					    "Stream analysieren", // Deutsch
 | 
				
			||||||
@@ -198,6 +237,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Striimi anal<61><6C>s", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Calculation Interval [0.1s]", // English
 | 
					  { "Calculation Interval [0.1s]", // English
 | 
				
			||||||
    "Berechnungsintervall [0.1s]", // Deutsch
 | 
					    "Berechnungsintervall [0.1s]", // Deutsch
 | 
				
			||||||
@@ -217,6 +258,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (0,1 <20><><EFBFBD>)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (0,1 <20><><EFBFBD>)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kalkulatsiooni intervall [0,1s]", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Red Limit [%]", // English
 | 
					  { "Red Limit [%]", // English
 | 
				
			||||||
    "Grenze Rot [%]", // Deutsch
 | 
					    "Grenze Rot [%]", // Deutsch
 | 
				
			||||||
@@ -236,6 +279,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (%)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (%)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Punase limiit [%]", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Green Limit [%]", // English
 | 
					  { "Green Limit [%]", // English
 | 
				
			||||||
    "Grenze Gr<47>n [%]", // Deutsch
 | 
					    "Grenze Gr<47>n [%]", // Deutsch
 | 
				
			||||||
@@ -255,6 +300,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (%)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (%)", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Rohelise limiit [%]", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Transponder Information", // English
 | 
					  { "Transponder Information", // English
 | 
				
			||||||
    "Transponderinformation", // Deutsch
 | 
					    "Transponderinformation", // Deutsch
 | 
				
			||||||
@@ -274,6 +321,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Transponderi info", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Satellite Card", // English
 | 
					  { "Satellite Card", // English
 | 
				
			||||||
    "Satellitenkarte", // Deutsch
 | 
					    "Satellitenkarte", // Deutsch
 | 
				
			||||||
@@ -293,6 +342,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Satelliidikaart", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Cable Card", // English
 | 
					  { "Cable Card", // English
 | 
				
			||||||
    "Kabelkarte", // Deutsch
 | 
					    "Kabelkarte", // Deutsch
 | 
				
			||||||
@@ -312,6 +363,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kaablikaart", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Terrestial Card", // English
 | 
					  { "Terrestial Card", // English
 | 
				
			||||||
    "Terrestrische Karte", // Deutsch
 | 
					    "Terrestrische Karte", // Deutsch
 | 
				
			||||||
@@ -331,6 +384,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Terrestiaalkaart", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Use Syslog Output", // English
 | 
					  { "Use Syslog Output", // English
 | 
				
			||||||
    "Benutze syslog Ausgabe", // Deutsch
 | 
					    "Benutze syslog Ausgabe", // Deutsch
 | 
				
			||||||
@@ -350,6 +405,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> syslog", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> syslog", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kirjuta s<>steemilogisse", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "LOCK", // English
 | 
					  { "LOCK", // English
 | 
				
			||||||
    "LOCK", // Deutsch
 | 
					    "LOCK", // Deutsch
 | 
				
			||||||
@@ -369,6 +426,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "LOCK", // Catal<61>
 | 
					    "LOCK", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "LOCK", // Hrvatski (Croatian)
 | 
					    "LOCK", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "LOCK", // Eesti
 | 
				
			||||||
 | 
					    "LOCK", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "SIGNAL", // English
 | 
					  { "SIGNAL", // English
 | 
				
			||||||
    "SIGNAL", // Deutsch
 | 
					    "SIGNAL", // Deutsch
 | 
				
			||||||
@@ -388,6 +447,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "SIGNAL", // Catal<61>
 | 
					    "SIGNAL", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "SIGNAL", // Hrvatski (Croatian)
 | 
					    "SIGNAL", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SIGNAL", // Eesti
 | 
				
			||||||
 | 
					    "SIGNAL", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "CARRIER", // English
 | 
					  { "CARRIER", // English
 | 
				
			||||||
    "CARRIER", // Deutsch
 | 
					    "CARRIER", // Deutsch
 | 
				
			||||||
@@ -407,6 +468,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "CARRIER", // Catal<61>
 | 
					    "CARRIER", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "CARRIER", // Hrvatski (Croatian)
 | 
					    "CARRIER", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "CARRIER", // Eesti
 | 
				
			||||||
 | 
					    "CARRIER", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "VITERBI", // English
 | 
					  { "VITERBI", // English
 | 
				
			||||||
    "VITERBI", // Deutsch
 | 
					    "VITERBI", // Deutsch
 | 
				
			||||||
@@ -426,6 +489,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "VITERBI", // Catal<61>
 | 
					    "VITERBI", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "VITERBI", // Hrvatski (Croatian)
 | 
					    "VITERBI", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "VITERBI", // Eesti
 | 
				
			||||||
 | 
					    "VITERBI", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "SYNC", // English
 | 
					  { "SYNC", // English
 | 
				
			||||||
    "SYNC", // Deutsch
 | 
					    "SYNC", // Deutsch
 | 
				
			||||||
@@ -445,6 +510,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "SYNC", // Catal<61>
 | 
					    "SYNC", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "SYNC", // Hrvatski (Croatian)
 | 
					    "SYNC", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SYNC", // Eesti
 | 
				
			||||||
 | 
					    "SYNC", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Audio", // English
 | 
					  { "Audio", // English
 | 
				
			||||||
    "Audio", // Deutsch
 | 
					    "Audio", // Deutsch
 | 
				
			||||||
@@ -464,6 +531,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Audio", // Catal<61>
 | 
					    "Audio", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Audio", // Hrvatski (Croatian)
 | 
					    "Audio", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Audio", // Eesti
 | 
				
			||||||
 | 
					    "Audio", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Video", // English
 | 
					  { "Video", // English
 | 
				
			||||||
    "Video", // Deutsch
 | 
					    "Video", // Deutsch
 | 
				
			||||||
@@ -483,6 +552,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Video", // Catal<61>
 | 
					    "Video", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Video", // Hrvatski (Croatian)
 | 
					    "Video", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Video", // Eesti
 | 
				
			||||||
 | 
					    "Video", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Auto", // English
 | 
					  { "Auto", // English
 | 
				
			||||||
    "Auto", // Deutsch
 | 
					    "Auto", // Deutsch
 | 
				
			||||||
@@ -502,6 +573,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Auto", // Catal<61>
 | 
					    "Auto", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Auto", // Hrvatski (Croatian)
 | 
					    "Auto", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Auto", // Eesti
 | 
				
			||||||
 | 
					    "Auto", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "None", // English
 | 
					  { "None", // English
 | 
				
			||||||
    "None", // Deutsch
 | 
					    "None", // Deutsch
 | 
				
			||||||
@@ -521,6 +594,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "None", // Catal<61>
 | 
					    "None", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "None", // Hrvatski (Croatian)
 | 
					    "None", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Ei", // Eesti
 | 
				
			||||||
 | 
					    "None", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Off", // English
 | 
					  { "Off", // English
 | 
				
			||||||
    "Off", // Deutsch
 | 
					    "Off", // Deutsch
 | 
				
			||||||
@@ -540,6 +615,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Off", // Catal<61>
 | 
					    "Off", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Off", // Hrvatski (Croatian)
 | 
					    "Off", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "V<EFBFBD>ljas", // Eesti
 | 
				
			||||||
 | 
					    "Off", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "On", // English
 | 
					  { "On", // English
 | 
				
			||||||
    "On", // Deutsch
 | 
					    "On", // Deutsch
 | 
				
			||||||
@@ -559,6 +636,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "On", // Catal<61>
 | 
					    "On", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "On", // Hrvatski (Croatian)
 | 
					    "On", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Sees", // Eesti
 | 
				
			||||||
 | 
					    "On", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "MHz", // English
 | 
					  { "MHz", // English
 | 
				
			||||||
    "MHz", // Deutsch
 | 
					    "MHz", // Deutsch
 | 
				
			||||||
@@ -578,6 +657,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "MHz", // Catal<61>
 | 
					    "MHz", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "MHz", // Hrvatski (Croatian)
 | 
					    "MHz", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "MHz", // Eesti
 | 
				
			||||||
 | 
					    "MHz", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Mbit/s", // English
 | 
					  { "Mbit/s", // English
 | 
				
			||||||
    "Mbit/s", // Deutsch
 | 
					    "Mbit/s", // Deutsch
 | 
				
			||||||
@@ -597,6 +678,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Mbit/s", // Catal<61>
 | 
					    "Mbit/s", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Mbit/s", // Hrvatski (Croatian)
 | 
					    "Mbit/s", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Mbit/s", // Eesti
 | 
				
			||||||
 | 
					    "Mbit/s", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "kbit/s", // English
 | 
					  { "kbit/s", // English
 | 
				
			||||||
    "kbit/s", // Deutsch
 | 
					    "kbit/s", // Deutsch
 | 
				
			||||||
@@ -616,6 +699,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "kbit/s", // Catal<61>
 | 
					    "kbit/s", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "kbit/s", // Hrvatski (Croatian)
 | 
					    "kbit/s", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "kbit/s", // Eesti
 | 
				
			||||||
 | 
					    "kbit/s", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Stream Information", // English
 | 
					  { "Stream Information", // English
 | 
				
			||||||
    "Streaminformation", // Deutsch
 | 
					    "Streaminformation", // Deutsch
 | 
				
			||||||
@@ -635,6 +720,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Striimi info", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "MPEG Layer", // English
 | 
					  { "MPEG Layer", // English
 | 
				
			||||||
    "MPEG Layer", // Deutsch
 | 
					    "MPEG Layer", // Deutsch
 | 
				
			||||||
@@ -654,6 +741,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "MPEG tase", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Video Stream", // English
 | 
					  { "Video Stream", // English
 | 
				
			||||||
    "Video Stream", // Deutsch
 | 
					    "Video Stream", // Deutsch
 | 
				
			||||||
@@ -673,6 +762,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Videostriim", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Bitrate", // English
 | 
					  { "Bitrate", // English
 | 
				
			||||||
    "Bitrate", // Deutsch
 | 
					    "Bitrate", // Deutsch
 | 
				
			||||||
@@ -692,6 +783,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Bitikiirus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Frame Rate", // English
 | 
					  { "Frame Rate", // English
 | 
				
			||||||
    "Bildrate", // Deutsch
 | 
					    "Bildrate", // Deutsch
 | 
				
			||||||
@@ -711,6 +804,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kaadrisagedus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Hz", // English
 | 
					  { "Hz", // English
 | 
				
			||||||
    "Hz", // Deutsch
 | 
					    "Hz", // Deutsch
 | 
				
			||||||
@@ -730,6 +825,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Hz", // Catal<61>
 | 
					    "Hz", // Catal<61>
 | 
				
			||||||
    "<EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "<EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Hz", // Hrvatski (Croatian)
 | 
					    "Hz", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Hz", // Eesti
 | 
				
			||||||
 | 
					    "Hz", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Aspect Ratio", // English
 | 
					  { "Aspect Ratio", // English
 | 
				
			||||||
    "Seitenverh<EFBFBD>ltnis", // Deutsch
 | 
					    "Seitenverh<EFBFBD>ltnis", // Deutsch
 | 
				
			||||||
@@ -749,6 +846,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "K<EFBFBD>lgsuhe", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "reserved", // English
 | 
					  { "reserved", // English
 | 
				
			||||||
    "belegt", // Deutsch
 | 
					    "belegt", // Deutsch
 | 
				
			||||||
@@ -768,6 +867,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "reserveeritud", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "free", // English
 | 
					  { "free", // English
 | 
				
			||||||
    "frei", // Deutsch
 | 
					    "frei", // Deutsch
 | 
				
			||||||
@@ -787,6 +888,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "vaba", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Video Format", // English
 | 
					  { "Video Format", // English
 | 
				
			||||||
    "Bildformat", // Deutsch
 | 
					    "Bildformat", // Deutsch
 | 
				
			||||||
@@ -806,6 +909,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Videoformaat", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "PAL", // English
 | 
					  { "PAL", // English
 | 
				
			||||||
    "PAL", // Deutsch
 | 
					    "PAL", // Deutsch
 | 
				
			||||||
@@ -825,6 +930,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "PAL", // Catal<61>
 | 
					    "PAL", // Catal<61>
 | 
				
			||||||
    "PAL", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "PAL", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "PAL", // Hrvatski (Croatian)
 | 
					    "PAL", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "PAL", // Eesti
 | 
				
			||||||
 | 
					    "PAL", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "NTSC", // English
 | 
					  { "NTSC", // English
 | 
				
			||||||
    "NTSC", // Deutsch
 | 
					    "NTSC", // Deutsch
 | 
				
			||||||
@@ -844,6 +951,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "NTSC", // Catal<61>
 | 
					    "NTSC", // Catal<61>
 | 
				
			||||||
    "NTSC", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "NTSC", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "NTSC", // Hrvatski (Croatian)
 | 
					    "NTSC", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "NTSC", // Eesti
 | 
				
			||||||
 | 
					    "NTSC", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "unknown", // English
 | 
					  { "unknown", // English
 | 
				
			||||||
    "unbekannt", // Deutsch
 | 
					    "unbekannt", // Deutsch
 | 
				
			||||||
@@ -863,6 +972,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "tundmatu", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Resolution", // English
 | 
					  { "Resolution", // English
 | 
				
			||||||
    "Aufl<EFBFBD>sung", // Deutsch
 | 
					    "Aufl<EFBFBD>sung", // Deutsch
 | 
				
			||||||
@@ -882,6 +993,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Resolutsioon", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Audio Stream", // English
 | 
					  { "Audio Stream", // English
 | 
				
			||||||
    "Audio Stream", // Deutsch
 | 
					    "Audio Stream", // Deutsch
 | 
				
			||||||
@@ -901,6 +1014,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Audiostriim", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Sampling Frequency", // English
 | 
					  { "Sampling Frequency", // English
 | 
				
			||||||
    "Abtastrate", // Deutsch
 | 
					    "Abtastrate", // Deutsch
 | 
				
			||||||
@@ -920,6 +1035,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "S<EFBFBD>mplimissagedus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "kHz", // English
 | 
					  { "kHz", // English
 | 
				
			||||||
    "kHz", // Deutsch
 | 
					    "kHz", // Deutsch
 | 
				
			||||||
@@ -939,6 +1056,50 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "kHz", // Catal<61>
 | 
					    "kHz", // Catal<61>
 | 
				
			||||||
    "ڳ<EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "ڳ<EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "kHz", // Hrvatski (Croatian)
 | 
					    "kHz", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "kHz", // Eesti
 | 
				
			||||||
 | 
					    "kHz", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Apid", // English
 | 
				
			||||||
 | 
					    "Apid", // Deutsch
 | 
				
			||||||
 | 
					    "Apid", // Slovenski
 | 
				
			||||||
 | 
					    "Apid", // Italiano
 | 
				
			||||||
 | 
					    "Apid", // Nederlands
 | 
				
			||||||
 | 
					    "Apid", // Portugu<67>s
 | 
				
			||||||
 | 
					    "Apid", // Fran<61>ais
 | 
				
			||||||
 | 
					    "Apid", // Norsk
 | 
				
			||||||
 | 
					    "<EFBFBD><EFBFBD>ni PID", // suomi
 | 
				
			||||||
 | 
					    "Apid", // Polski
 | 
				
			||||||
 | 
					    "Apid", // Espa<70>ol
 | 
				
			||||||
 | 
					    "Apid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "Apid", // Svenska
 | 
				
			||||||
 | 
					    "Apid", // Romaneste
 | 
				
			||||||
 | 
					    "Apid", // Magyar
 | 
				
			||||||
 | 
					    "Apid", // Catal<61>
 | 
				
			||||||
 | 
					    "Apid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "Apid", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Apid", // Eesti
 | 
				
			||||||
 | 
					    "Apid", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Dpid", // English
 | 
				
			||||||
 | 
					    "Dpid", // Deutsch
 | 
				
			||||||
 | 
					    "Dpid", // Slovenski
 | 
				
			||||||
 | 
					    "Dpid", // Italiano
 | 
				
			||||||
 | 
					    "Dpid", // Nederlands
 | 
				
			||||||
 | 
					    "Dpid", // Portugu<67>s
 | 
				
			||||||
 | 
					    "Dpid", // Fran<61>ais
 | 
				
			||||||
 | 
					    "Dpid", // Norsk
 | 
				
			||||||
 | 
					    "Dolby PID", // suomi
 | 
				
			||||||
 | 
					    "Dpid", // Polski
 | 
				
			||||||
 | 
					    "Dpid", // Espa<70>ol
 | 
				
			||||||
 | 
					    "Dpid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "Dpid", // Svenska
 | 
				
			||||||
 | 
					    "Dpid", // Romaneste
 | 
				
			||||||
 | 
					    "Dpid", // Magyar
 | 
				
			||||||
 | 
					    "Dpid", // Catal<61>
 | 
				
			||||||
 | 
					    "Dpid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "Dpid", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Dpid", // Eesti
 | 
				
			||||||
 | 
					    "Dpid", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Nid", // English
 | 
					  { "Nid", // English
 | 
				
			||||||
    "Nid", // Deutsch
 | 
					    "Nid", // Deutsch
 | 
				
			||||||
@@ -958,6 +1119,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Nid", // Catal<61>
 | 
					    "Nid", // Catal<61>
 | 
				
			||||||
    "Nid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "Nid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Nid", // Hrvatski (Croatian)
 | 
					    "Nid", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Nid", // Eesti
 | 
				
			||||||
 | 
					    "Nid", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Tid", // English
 | 
					  { "Tid", // English
 | 
				
			||||||
    "Tid", // Deutsch
 | 
					    "Tid", // Deutsch
 | 
				
			||||||
@@ -977,6 +1140,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Tid", // Catal<61>
 | 
					    "Tid", // Catal<61>
 | 
				
			||||||
    "Tid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "Tid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Tid", // Hrvatski (Croatian)
 | 
					    "Tid", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Tid", // Eesti
 | 
				
			||||||
 | 
					    "Tid", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Rid", // English
 | 
					  { "Rid", // English
 | 
				
			||||||
    "Rid", // Deutsch
 | 
					    "Rid", // Deutsch
 | 
				
			||||||
@@ -996,6 +1161,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "Rid", // Catal<61>
 | 
					    "Rid", // Catal<61>
 | 
				
			||||||
    "Rid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "Rid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "Rid", // Hrvatski (Croatian)
 | 
					    "Rid", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Rid", // Eesti
 | 
				
			||||||
 | 
					    "Rid", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "dB", // English
 | 
					  { "dB", // English
 | 
				
			||||||
    "dB", // Deutsch
 | 
					    "dB", // Deutsch
 | 
				
			||||||
@@ -1015,6 +1182,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "dB", // Catal<61>
 | 
					    "dB", // Catal<61>
 | 
				
			||||||
    "dB", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "dB", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "dB", // Hrvatski (Croatian)
 | 
					    "dB", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "dB", // Eesti
 | 
				
			||||||
 | 
					    "dB", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "not indicated", // English
 | 
					  { "not indicated", // English
 | 
				
			||||||
    "", // Deutsch
 | 
					    "", // Deutsch
 | 
				
			||||||
@@ -1034,6 +1203,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "m<EFBFBD>rkimata", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "AC-3", // English
 | 
					  { "AC-3", // English
 | 
				
			||||||
    "AC-3", // Deutsch
 | 
					    "AC-3", // Deutsch
 | 
				
			||||||
@@ -1053,6 +1224,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "AC-3", // Catal<61>
 | 
					    "AC-3", // Catal<61>
 | 
				
			||||||
    "AC-3", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "AC-3", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "AC-3", // Hrvatski (Croatian)
 | 
					    "AC-3", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "AC-3", // Eesti
 | 
				
			||||||
 | 
					    "AC-3", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "AC-3 Stream", // English
 | 
					  { "AC-3 Stream", // English
 | 
				
			||||||
    "AC-3 Stream", // Deutsch
 | 
					    "AC-3 Stream", // Deutsch
 | 
				
			||||||
@@ -1072,6 +1245,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "AC-3 striim", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Frame Size", // English
 | 
					  { "Frame Size", // English
 | 
				
			||||||
    "Frame Gr<47><72>e", // Deutsch
 | 
					    "Frame Gr<47><72>e", // Deutsch
 | 
				
			||||||
@@ -1091,6 +1266,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kaadri suurus", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Bit Stream Mode", // English
 | 
					  { "Bit Stream Mode", // English
 | 
				
			||||||
    "Bitstream Modus", // Deutsch
 | 
					    "Bitstream Modus", // Deutsch
 | 
				
			||||||
@@ -1110,6 +1287,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Bitistriimi t<><74>p", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Audio Coding Mode", // English
 | 
					  { "Audio Coding Mode", // English
 | 
				
			||||||
    "Audio Coding Modus", // Deutsch
 | 
					    "Audio Coding Modus", // Deutsch
 | 
				
			||||||
@@ -1129,6 +1308,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Audiokodeering", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Center Mix Level", // English
 | 
					  { "Center Mix Level", // English
 | 
				
			||||||
    "Center Mix Pegel", // Deutsch
 | 
					    "Center Mix Pegel", // Deutsch
 | 
				
			||||||
@@ -1148,6 +1329,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Keskmise kanali tase", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Surround Mix Level", // English
 | 
					  { "Surround Mix Level", // English
 | 
				
			||||||
    "Surround Mix Pegel", // Deutsch
 | 
					    "Surround Mix Pegel", // Deutsch
 | 
				
			||||||
@@ -1167,6 +1350,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Surround kanali tase", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Dolby Surround Mode", // English
 | 
					  { "Dolby Surround Mode", // English
 | 
				
			||||||
    "Dolby Surround Modus", // Deutsch
 | 
					    "Dolby Surround Modus", // Deutsch
 | 
				
			||||||
@@ -1186,6 +1371,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Dolby Surround'i t<><74>p", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Low Frequency Effects", // English
 | 
					  { "Low Frequency Effects", // English
 | 
				
			||||||
    "Tieft<EFBFBD>ner Effekte", // Deutsch
 | 
					    "Tieft<EFBFBD>ner Effekte", // Deutsch
 | 
				
			||||||
@@ -1205,6 +1392,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "LFE kanal", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Dialogue Normalization", // English
 | 
					  { "Dialogue Normalization", // English
 | 
				
			||||||
    "Dialog Normalisierung", // Deutsch
 | 
					    "Dialog Normalisierung", // Deutsch
 | 
				
			||||||
@@ -1224,6 +1413,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Dialoogi normalisatsioon", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Complete Main (CM)", // English
 | 
					  { "Complete Main (CM)", // English
 | 
				
			||||||
    "Complete Main (CM)", // Deutsch
 | 
					    "Complete Main (CM)", // Deutsch
 | 
				
			||||||
@@ -1243,6 +1434,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "CM", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Music and Effects (ME)", // English
 | 
					  { "Music and Effects (ME)", // English
 | 
				
			||||||
    "Musik und Effekte (ME)", // Deutsch
 | 
					    "Musik und Effekte (ME)", // Deutsch
 | 
				
			||||||
@@ -1262,6 +1455,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Muusika ja efektid (ME)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Visually Impaired (VI)", // English
 | 
					  { "Visually Impaired (VI)", // English
 | 
				
			||||||
    "Sehbehindert (VI)", // Deutsch
 | 
					    "Sehbehindert (VI)", // Deutsch
 | 
				
			||||||
@@ -1281,6 +1476,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Vaegn<EFBFBD>gemine (VE)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Hearing Impaired (HI)", // English
 | 
					  { "Hearing Impaired (HI)", // English
 | 
				
			||||||
    "H<EFBFBD>rbehindert (HI)", // Deutsch
 | 
					    "H<EFBFBD>rbehindert (HI)", // Deutsch
 | 
				
			||||||
@@ -1300,6 +1497,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Vaegkuulmine (HI)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Dialogue (D)", // English
 | 
					  { "Dialogue (D)", // English
 | 
				
			||||||
    "Dialog (D)", // Deutsch
 | 
					    "Dialog (D)", // Deutsch
 | 
				
			||||||
@@ -1319,6 +1518,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Dialoog (D)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Commentary (C)", // English
 | 
					  { "Commentary (C)", // English
 | 
				
			||||||
    "Kommentar (C)", // Deutsch
 | 
					    "Kommentar (C)", // Deutsch
 | 
				
			||||||
@@ -1338,6 +1539,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kommentaar (C)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Emergency (E)", // English
 | 
					  { "Emergency (E)", // English
 | 
				
			||||||
    "Notfall (E)", // Deutsch
 | 
					    "Notfall (E)", // Deutsch
 | 
				
			||||||
@@ -1357,6 +1560,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "H<EFBFBD>dateade (E)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Voice Over (VO)", // English
 | 
					  { "Voice Over (VO)", // English
 | 
				
			||||||
    "<EFBFBD>berlagerte Stimme (VO)", // Deutsch
 | 
					    "<EFBFBD>berlagerte Stimme (VO)", // Deutsch
 | 
				
			||||||
@@ -1376,6 +1581,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Pealer<EFBFBD><EFBFBD>kimine (VO)", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Karaoke", // English
 | 
					  { "Karaoke", // English
 | 
				
			||||||
    "Karaoke", // Deutsch
 | 
					    "Karaoke", // Deutsch
 | 
				
			||||||
@@ -1395,6 +1602,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Karaoke", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Ch1", // English "Channel 1"
 | 
					  { "Ch1", // English "Channel 1"
 | 
				
			||||||
    "Kan1", // Deutsch
 | 
					    "Kan1", // Deutsch
 | 
				
			||||||
@@ -1414,6 +1623,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kan. 1", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "Ch2", // English "Channel 2"
 | 
					  { "Ch2", // English "Channel 2"
 | 
				
			||||||
    "Kan2", // Deutsch
 | 
					    "Kan2", // Deutsch
 | 
				
			||||||
@@ -1433,6 +1644,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Kan. 2", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "C", // English "Center"
 | 
					  { "C", // English "Center"
 | 
				
			||||||
    "C", // Deutsch
 | 
					    "C", // Deutsch
 | 
				
			||||||
@@ -1452,6 +1665,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "K", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "L", // English "Left"
 | 
					  { "L", // English "Left"
 | 
				
			||||||
    "L", // Deutsch
 | 
					    "L", // Deutsch
 | 
				
			||||||
@@ -1471,6 +1686,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "L", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "R", // English "Right"
 | 
					  { "R", // English "Right"
 | 
				
			||||||
    "R", // Deutsch
 | 
					    "R", // Deutsch
 | 
				
			||||||
@@ -1490,6 +1707,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "R", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "S", // English "Surround"
 | 
					  { "S", // English "Surround"
 | 
				
			||||||
    "S", // Deutsch
 | 
					    "S", // Deutsch
 | 
				
			||||||
@@ -1509,6 +1728,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "S", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "SL", // English "Surround Left"
 | 
					  { "SL", // English "Surround Left"
 | 
				
			||||||
    "SL", // Deutsch
 | 
					    "SL", // Deutsch
 | 
				
			||||||
@@ -1528,6 +1749,8 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SL", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { "SR", // English "Surround Right"
 | 
					  { "SR", // English "Surround Right"
 | 
				
			||||||
    "SR", // Deutsch
 | 
					    "SR", // Deutsch
 | 
				
			||||||
@@ -1547,6 +1770,281 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
    "", // Catal<61>
 | 
					    "", // Catal<61>
 | 
				
			||||||
    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
    "", // Hrvatski (Croatian)
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SR", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Show CA System", // English
 | 
				
			||||||
 | 
					    "CA System anzeigen", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "N<EFBFBD>yt<EFBFBD> salausj<73>rjestelm<6C>", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "N<EFBFBD>ita CA s<>steemi", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Fixed", // English
 | 
				
			||||||
 | 
					    "Fest", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "kiinte<EFBFBD>", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Fikseeritud", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Free to Air", // English
 | 
				
			||||||
 | 
					    "Free to Air", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "salaamaton", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "FTA", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "SECA/Mediaguard", // English
 | 
				
			||||||
 | 
					    "SECA/Mediaguard", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "SECA/Mediaguard", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SECA/Mediaguard", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Viaccess", // English
 | 
				
			||||||
 | 
					    "Viaccess", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "Viaccess", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Viaccess", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Irdeto", // English
 | 
				
			||||||
 | 
					    "Irdeto", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "Irdeto", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Irdeto", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "NDS/Videoguard", // English
 | 
				
			||||||
 | 
					    "NDS/Videoguard", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "NDS/Videoguard", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "NDS/Videoguard", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "Conax", // English
 | 
				
			||||||
 | 
					    "Conax", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "Conax", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "Conax", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "CryptoWorks", // English
 | 
				
			||||||
 | 
					    "CryptoWorks", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "CryptoWorks", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "CryptoWorks", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "PowerVu", // English
 | 
				
			||||||
 | 
					    "PowerVu", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "PowerVu", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "PowerVu", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "BetaCrypt", // English
 | 
				
			||||||
 | 
					    "BetaCrypt", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "BetaCrypt", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "BetaCrypt", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "NagraVision", // English
 | 
				
			||||||
 | 
					    "NagraVision", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk
 | 
				
			||||||
 | 
					    "NagraVision", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "NagraVision", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { "SkyCrypt", // English
 | 
				
			||||||
 | 
					    "SkyCrypt", // Deutsch
 | 
				
			||||||
 | 
					    "", // Slovenski
 | 
				
			||||||
 | 
					    "", // Italiano
 | 
				
			||||||
 | 
					    "", // Nederlands
 | 
				
			||||||
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 | 
					    "", // Norsk   
 | 
				
			||||||
 | 
					    "SkyCrypt", // suomi
 | 
				
			||||||
 | 
					    "", // Polski
 | 
				
			||||||
 | 
					    "", // Espa<70>ol
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
 | 
				
			||||||
 | 
					    "", // Svenska
 | 
				
			||||||
 | 
					    "", // Romaneste
 | 
				
			||||||
 | 
					    "", // Magyar
 | 
				
			||||||
 | 
					    "", // Catal<61>
 | 
				
			||||||
 | 
					    "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
 | 
				
			||||||
 | 
					    "", // Hrvatski (Croatian)
 | 
				
			||||||
 | 
					    "SkyCrypt", // Eesti
 | 
				
			||||||
 | 
					    "", // Dansk
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  { NULL }
 | 
					  { NULL }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										416
									
								
								femonosd.c
									
									
									
									
									
								
							
							
						
						
									
										416
									
								
								femonosd.c
									
									
									
									
									
								
							@@ -12,12 +12,16 @@
 | 
				
			|||||||
#include "femonreceiver.h"
 | 
					#include "femonreceiver.h"
 | 
				
			||||||
#include "femonosd.h"
 | 
					#include "femonosd.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "symbols/dev0.xpm"
 | 
					#include "symbols/device.xpm"
 | 
				
			||||||
#include "symbols/dev1.xpm"
 | 
					#include "symbols/stereo.xpm"
 | 
				
			||||||
#include "symbols/dev2.xpm"
 | 
					#include "symbols/monoleft.xpm"
 | 
				
			||||||
#include "symbols/dev3.xpm"
 | 
					#include "symbols/monoright.xpm"
 | 
				
			||||||
#include "symbols/apid1.xpm"
 | 
					#include "symbols/zero.xpm"
 | 
				
			||||||
#include "symbols/apid2.xpm"
 | 
					#include "symbols/one.xpm"
 | 
				
			||||||
 | 
					#include "symbols/two.xpm"
 | 
				
			||||||
 | 
					#include "symbols/three.xpm"
 | 
				
			||||||
 | 
					#include "symbols/four.xpm"
 | 
				
			||||||
 | 
					#include "symbols/five.xpm"
 | 
				
			||||||
#include "symbols/ar11.xpm"
 | 
					#include "symbols/ar11.xpm"
 | 
				
			||||||
#include "symbols/ar169.xpm"
 | 
					#include "symbols/ar169.xpm"
 | 
				
			||||||
#include "symbols/ar2211.xpm"
 | 
					#include "symbols/ar2211.xpm"
 | 
				
			||||||
@@ -31,29 +35,31 @@
 | 
				
			|||||||
#define FRONTEND_DEVICE          "/dev/dvb/adapter%d/frontend%d"
 | 
					#define FRONTEND_DEVICE          "/dev/dvb/adapter%d/frontend%d"
 | 
				
			||||||
#define CHANNELINPUT_TIMEOUT     1000
 | 
					#define CHANNELINPUT_TIMEOUT     1000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SCREENWIDTH              720 // in pixels
 | 
					#define OSDHEIGHT                femonConfig.osdheight   // in pixels
 | 
				
			||||||
#define SCREENHEIGHT             576 // in pixels
 | 
					#define OSDWIDTH                 600                     // in pixels
 | 
				
			||||||
#define OSDWIDTH                 600 // in pixels
 | 
					 | 
				
			||||||
#define OSDHEIGHT                480 // in pixels
 | 
					 | 
				
			||||||
#define OSDINFOHEIGHT            (m_Font->Height() * 11) // in pixels (11 rows)
 | 
					#define OSDINFOHEIGHT            (m_Font->Height() * 11) // in pixels (11 rows)
 | 
				
			||||||
#define OSDSTATUSHEIGHT          (m_Font->Height() * 6)  // in pixels (6 rows)
 | 
					#define OSDSTATUSHEIGHT          (m_Font->Height() * 6)  // in pixels (6 rows)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OSDINFOWIN_Y(offset)     (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset)
 | 
					#define OSDINFOWIN_Y(offset)     (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset)
 | 
				
			||||||
#define OSDINFOWIN_X(col)        ((col == 4) ? 470 : (col == 3) ? 300 : (col==2) ? 180 : 15)
 | 
					#define OSDINFOWIN_X(col)        ((col == 4) ? 455 : (col == 3) ? 305 : (col == 2) ? 155 : 15)
 | 
				
			||||||
#define OSDSTATUSWIN_Y(offset)   (femonConfig.position ? offset : (OSDHEIGHT - OSDSTATUSHEIGHT + offset))
 | 
					#define OSDSTATUSWIN_Y(offset)   (femonConfig.position ? offset : (OSDHEIGHT - OSDSTATUSHEIGHT + offset))
 | 
				
			||||||
#define OSDSTATUSWIN_X(col)      ((col == 7) ? 475 : (col == 6) ? 410 : (col == 5) ? 275 : (col == 4) ? 220 : (col == 3) ? 125 : (col==2) ? 70 : 15)
 | 
					#define OSDSTATUSWIN_X(col)      ((col == 7) ? 475 : (col == 6) ? 410 : (col == 5) ? 275 : (col == 4) ? 220 : (col == 3) ? 125 : (col == 2) ? 70 : 15)
 | 
				
			||||||
#define OSDSTATUSWIN_XC(col,txt) (((col - 1) * SCREENWIDTH / 6) + ((SCREENWIDTH / 6 - m_Font->Width(txt)) / 2))
 | 
					#define OSDSTATUSWIN_XC(col,txt) (((col - 1) * OSDWIDTH / 5) + ((OSDWIDTH / 5 - m_Font->Width(txt)) / 2))
 | 
				
			||||||
#define BARWIDTH(x)              (OSDWIDTH * x / 100)
 | 
					#define BARWIDTH(x)              (OSDWIDTH * x / 100)
 | 
				
			||||||
#define SPACING                  5
 | 
					#define SPACING                  5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define clrBackground            clrGray50 // this should be tied somehow into current theme
 | 
					#define clrBackground            clrGray50 // this should be tied somehow into current theme
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cBitmap cFemonOsd::bmDevice0(dev0_xpm);
 | 
					cBitmap cFemonOsd::bmDevice(device_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmDevice1(dev1_xpm);
 | 
					cBitmap cFemonOsd::bmStereo(stereo_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmDevice2(dev2_xpm);
 | 
					cBitmap cFemonOsd::bmMonoLeft(monoleft_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmDevice3(dev3_xpm);
 | 
					cBitmap cFemonOsd::bmMonoRight(monoright_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmApid1(apid1_xpm);
 | 
					cBitmap cFemonOsd::bmZero(zero_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmApid2(apid2_xpm);
 | 
					cBitmap cFemonOsd::bmOne(one_xpm);
 | 
				
			||||||
 | 
					cBitmap cFemonOsd::bmTwo(two_xpm);
 | 
				
			||||||
 | 
					cBitmap cFemonOsd::bmThree(three_xpm);
 | 
				
			||||||
 | 
					cBitmap cFemonOsd::bmFour(four_xpm);
 | 
				
			||||||
 | 
					cBitmap cFemonOsd::bmFive(five_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmAspectRatio_1_1(ar11_xpm);
 | 
					cBitmap cFemonOsd::bmAspectRatio_1_1(ar11_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmAspectRatio_16_9(ar169_xpm);
 | 
					cBitmap cFemonOsd::bmAspectRatio_16_9(ar169_xpm);
 | 
				
			||||||
cBitmap cFemonOsd::bmAspectRatio_2_21_1(ar2211_xpm);
 | 
					cBitmap cFemonOsd::bmAspectRatio_2_21_1(ar2211_xpm);
 | 
				
			||||||
@@ -67,26 +73,33 @@ cBitmap cFemonOsd::bmDD51(dolbydigital51_xpm);
 | 
				
			|||||||
cFemonOsd::cFemonOsd(void)
 | 
					cFemonOsd::cFemonOsd(void)
 | 
				
			||||||
:cOsdObject(true), cThread("femon osd")
 | 
					:cOsdObject(true), cThread("femon osd")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonOsd::cFemonOsd()\n");
 | 
					  debug(printf("cFemonOsd::cFemonOsd()\n"));
 | 
				
			||||||
  m_Osd = NULL;
 | 
					  m_Osd = NULL;
 | 
				
			||||||
  m_Receiver = NULL;
 | 
					  m_Receiver = NULL;
 | 
				
			||||||
  m_Frontend = -1;
 | 
					  m_Frontend = -1;
 | 
				
			||||||
  m_Active = false;
 | 
					  m_Active = false;
 | 
				
			||||||
  m_Number = 0;
 | 
					  m_Number = 0;
 | 
				
			||||||
  m_OldNumber = 0;
 | 
					  m_OldNumber = 0;
 | 
				
			||||||
  m_InputTime = 0;
 | 
					 | 
				
			||||||
  m_Signal = 0;
 | 
					  m_Signal = 0;
 | 
				
			||||||
  m_SNR = 0;
 | 
					  m_SNR = 0;
 | 
				
			||||||
  m_BER = 0;
 | 
					  m_BER = 0;
 | 
				
			||||||
  m_UNC = 0;
 | 
					  m_UNC = 0;
 | 
				
			||||||
  m_DisplayMode = femonConfig.displaymode;
 | 
					  m_DisplayMode = femonConfig.displaymode;
 | 
				
			||||||
  m_Font = cFont::GetFont(fontSml);
 | 
					  m_InputTime.Set(0);
 | 
				
			||||||
  m_Mutex = new cMutex();
 | 
					  m_Mutex = new cMutex();
 | 
				
			||||||
 | 
					  if (Setup.UseSmallFont == 0) {
 | 
				
			||||||
 | 
					     // Dirty hack to force the small fonts...
 | 
				
			||||||
 | 
					     Setup.UseSmallFont = 1;
 | 
				
			||||||
 | 
					     m_Font = cFont::GetFont(fontSml);
 | 
				
			||||||
 | 
					     Setup.UseSmallFont = 0;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					     m_Font = cFont::GetFont(fontSml);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cFemonOsd::~cFemonOsd(void)
 | 
					cFemonOsd::~cFemonOsd(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonOsd::~cFemonOsd()\n");
 | 
					  debug(printf("cFemonOsd::~cFemonOsd()\n"));
 | 
				
			||||||
  if (m_Active) {
 | 
					  if (m_Active) {
 | 
				
			||||||
     m_Active = false;
 | 
					     m_Active = false;
 | 
				
			||||||
     Cancel(3);
 | 
					     Cancel(3);
 | 
				
			||||||
@@ -100,60 +113,128 @@ cFemonOsd::~cFemonOsd(void)
 | 
				
			|||||||
void cFemonOsd::DrawStatusWindow(void)
 | 
					void cFemonOsd::DrawStatusWindow(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  cMutexLock lock(m_Mutex);
 | 
					  cMutexLock lock(m_Mutex);
 | 
				
			||||||
  //printf("cFemonOsd::DrawStatusWindow()\n");
 | 
					  debug(printf("cFemonOsd::DrawStatusWindow()\n"));
 | 
				
			||||||
  char buf[128];
 | 
					  char buf[128];
 | 
				
			||||||
  int snr = m_SNR / 655;
 | 
					  int snr = m_SNR / 655;
 | 
				
			||||||
  int signal = m_Signal / 655;
 | 
					  int signal = m_Signal / 655;
 | 
				
			||||||
  int offset = 0;
 | 
					  int offset = 0;
 | 
				
			||||||
  int x = OSDWIDTH;
 | 
					  int x = OSDWIDTH;
 | 
				
			||||||
  int y = 0;
 | 
					  int y = 0;
 | 
				
			||||||
 | 
					  int value = 0;
 | 
				
			||||||
 | 
					  eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
  cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					  cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (m_Osd) {
 | 
					  if (m_Osd) {
 | 
				
			||||||
     m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrBackground);
 | 
					     m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrBackground);
 | 
				
			||||||
     snprintf(buf, sizeof(buf), "%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->Name());
 | 
					     snprintf(buf, sizeof(buf), "%d%s %s (%s)", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->ShortName(true), channel->Provider());
 | 
				
			||||||
     m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+m_Font->Height()-1), clrWhite);
 | 
					     m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+m_Font->Height()-1), clrWhite);
 | 
				
			||||||
     m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), buf, clrBlack, clrWhite, m_Font);
 | 
					     m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), buf, clrBlack, clrWhite, m_Font);
 | 
				
			||||||
     if (m_Receiver) {
 | 
					     if (m_Receiver) {
 | 
				
			||||||
        int value = cDevice::ActualDevice()->CardIndex();
 | 
					        value = cDevice::ActualDevice()->CardIndex();
 | 
				
			||||||
        if (value == 0) {
 | 
					        if (value == 1) {
 | 
				
			||||||
           x -= bmDevice0.Width() + SPACING;
 | 
					           x -= bmOne.Width() + SPACING;
 | 
				
			||||||
           y = (m_Font->Height() - bmDevice0.Height()) / 2;
 | 
					           y = (m_Font->Height() - bmOne.Height()) / 2;
 | 
				
			||||||
           if (y < 0) y = 0;
 | 
					           if (y < 0) y = 0;
 | 
				
			||||||
           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice0, clrBlack, clrWhite);
 | 
					           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmOne, clrBlack, clrWhite);
 | 
				
			||||||
           }
 | 
					 | 
				
			||||||
        else if (value == 1) {
 | 
					 | 
				
			||||||
           x -= bmDevice1.Width() + SPACING;
 | 
					 | 
				
			||||||
           y = (m_Font->Height() - bmDevice1.Height()) / 2;
 | 
					 | 
				
			||||||
           if (y < 0) y = 0;
 | 
					 | 
				
			||||||
           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice1, clrBlack, clrWhite);
 | 
					 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        else if (value == 2) {
 | 
					        else if (value == 2) {
 | 
				
			||||||
           x -= bmDevice2.Width() + SPACING;
 | 
					           x -= bmTwo.Width() + SPACING;
 | 
				
			||||||
           y = (m_Font->Height() - bmDevice2.Height()) / 2;
 | 
					           y = (m_Font->Height() - bmTwo.Height()) / 2;
 | 
				
			||||||
           if (y < 0) y = 0;
 | 
					           if (y < 0) y = 0;
 | 
				
			||||||
           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice2, clrBlack, clrWhite);
 | 
					           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmTwo, clrBlack, clrWhite);
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        else if (value == 3) {
 | 
					        else if (value == 3) {
 | 
				
			||||||
           x -= bmDevice3.Width() + SPACING;
 | 
					           x -= bmThree.Width() + SPACING;
 | 
				
			||||||
           y = (m_Font->Height() - bmDevice3.Height()) / 2;
 | 
					           y = (m_Font->Height() - bmThree.Height()) / 2;
 | 
				
			||||||
           if (y < 0) y = 0;
 | 
					           if (y < 0) y = 0;
 | 
				
			||||||
           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice3, clrBlack, clrWhite);
 | 
					           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmThree, clrBlack, clrWhite);
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        value = -1;
 | 
					        else {
 | 
				
			||||||
        const char **AudioTracks = cDevice::PrimaryDevice()->GetAudioTracks(&value);
 | 
					           x -= bmZero.Width() + SPACING;
 | 
				
			||||||
        if (AudioTracks) {
 | 
					           y = (m_Font->Height() - bmZero.Height()) / 2;
 | 
				
			||||||
           if (value == 0) {
 | 
					           if (y < 0) y = 0;
 | 
				
			||||||
              x -= bmApid1.Width() + SPACING;
 | 
					           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmZero, clrBlack, clrWhite);
 | 
				
			||||||
              y = (m_Font->Height() - bmApid1.Height()) / 2;
 | 
					           }
 | 
				
			||||||
 | 
					        x -= bmDevice.Width();
 | 
				
			||||||
 | 
					        y = (m_Font->Height() - bmDevice.Height()) / 2;
 | 
				
			||||||
 | 
					        if (y < 0) y = 0;
 | 
				
			||||||
 | 
					        m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					        if (IS_AUDIO_TRACK(track)) {
 | 
				
			||||||
 | 
					           value = int(track - ttAudioFirst);
 | 
				
			||||||
 | 
					           if (value == 1) {
 | 
				
			||||||
 | 
					              x -= bmOne.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmOne.Height()) / 2;
 | 
				
			||||||
              if (y < 0) y = 0;
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmApid1, clrBlack, clrWhite);
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmOne, clrBlack, clrWhite);
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
           else if (value == 1) {
 | 
					           else if (value == 2) {
 | 
				
			||||||
              x -= bmApid2.Width() + SPACING;
 | 
					              x -= bmTwo.Width() + SPACING;
 | 
				
			||||||
              y = (m_Font->Height() - bmApid2.Height()) / 2;
 | 
					              y = (m_Font->Height() - bmTwo.Height()) / 2;
 | 
				
			||||||
              if (y < 0) y = 0;
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmApid2, clrBlack, clrWhite);
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmTwo, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else if (value == 3) {
 | 
				
			||||||
 | 
					              x -= bmThree.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmThree.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmThree, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else if (value == 4) {
 | 
				
			||||||
 | 
					              x -= bmFour.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmFour.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmFour, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else if (value == 5) {
 | 
				
			||||||
 | 
					              x -= bmFive.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmFive.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmFive, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else {
 | 
				
			||||||
 | 
					              x -= bmZero.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmZero.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmZero, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           value = cDevice::PrimaryDevice()->GetAudioChannel();
 | 
				
			||||||
 | 
					           if (value == 1) {
 | 
				
			||||||
 | 
					              x -= bmMonoLeft.Width();
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmMonoLeft.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmMonoLeft, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else if (value == 2) {
 | 
				
			||||||
 | 
					              x -= bmMonoRight.Width();
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmMonoRight.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmMonoRight, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else {
 | 
				
			||||||
 | 
					              x -= bmStereo.Width();
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmStereo.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmStereo, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
 | 
					        else if (m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
 | 
				
			||||||
 | 
					           if (m_Receiver->AC3_5_1()) {
 | 
				
			||||||
 | 
					              x -= bmDD51.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmDD51.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD51, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else if (m_Receiver->AC3_2_0()) {
 | 
				
			||||||
 | 
					              x -= bmDD20.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmDD20.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD20, clrBlack, clrWhite);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					           else {
 | 
				
			||||||
 | 
					              x -= bmDD.Width() + SPACING;
 | 
				
			||||||
 | 
					              y = (m_Font->Height() - bmDD.Height()) / 2;
 | 
				
			||||||
 | 
					              if (y < 0) y = 0;
 | 
				
			||||||
 | 
					              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD, clrBlack, clrWhite);
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        value = m_Receiver->VideoFormat();
 | 
					        value = m_Receiver->VideoFormat();
 | 
				
			||||||
@@ -194,26 +275,6 @@ void cFemonOsd::DrawStatusWindow(void)
 | 
				
			|||||||
           if (y < 0) y = 0;
 | 
					           if (y < 0) y = 0;
 | 
				
			||||||
           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_2_21_1, clrBlack, clrWhite);
 | 
					           m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_2_21_1, clrBlack, clrWhite);
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        if (m_Receiver && m_Receiver->AC3Valid()) {
 | 
					 | 
				
			||||||
           if (m_Receiver->AC3_5_1()) {
 | 
					 | 
				
			||||||
              x -= bmDD51.Width() + SPACING;
 | 
					 | 
				
			||||||
              y = (m_Font->Height() - bmDD51.Height()) / 2;
 | 
					 | 
				
			||||||
              if (y < 0) y = 0;
 | 
					 | 
				
			||||||
              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD51, clrBlack, clrWhite);
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
           else if (m_Receiver->AC3_2_0()) {
 | 
					 | 
				
			||||||
              x -= bmDD20.Width() + SPACING;
 | 
					 | 
				
			||||||
              y = (m_Font->Height() - bmDD20.Height()) / 2;
 | 
					 | 
				
			||||||
              if (y < 0) y = 0;
 | 
					 | 
				
			||||||
              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD20, clrBlack, clrWhite);
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
           else {
 | 
					 | 
				
			||||||
              x -= bmDD.Width() + SPACING;
 | 
					 | 
				
			||||||
              y = (m_Font->Height() - bmDD.Height()) / 2;
 | 
					 | 
				
			||||||
              if (y < 0) y = 0;
 | 
					 | 
				
			||||||
              m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD, clrBlack, clrWhite);
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
           }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
     offset += m_Font->Height();
 | 
					     offset += m_Font->Height();
 | 
				
			||||||
     if (signal > 0) {
 | 
					     if (signal > 0) {
 | 
				
			||||||
@@ -260,9 +321,9 @@ void cFemonOsd::DrawStatusWindow(void)
 | 
				
			|||||||
     m_Osd->DrawText(OSDSTATUSWIN_X(4), OSDSTATUSWIN_Y(offset), "UNC:", clrWhite, clrBackground, m_Font);
 | 
					     m_Osd->DrawText(OSDSTATUSWIN_X(4), OSDSTATUSWIN_Y(offset), "UNC:", clrWhite, clrBackground, m_Font);
 | 
				
			||||||
     snprintf(buf, sizeof(buf), "%08x", m_UNC);
 | 
					     snprintf(buf, sizeof(buf), "%08x", m_UNC);
 | 
				
			||||||
     m_Osd->DrawText(OSDSTATUSWIN_X(5), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
					     m_Osd->DrawText(OSDSTATUSWIN_X(5), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
				
			||||||
     snprintf(buf, sizeof(buf), "%s:", (m_Receiver && m_Receiver->AC3Valid()) ? tr("AC-3") : tr("Audio"));
 | 
					     snprintf(buf, sizeof(buf), "%s:", (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? tr("AC-3") : tr("Audio"));
 | 
				
			||||||
     m_Osd->DrawText(OSDSTATUSWIN_X(6), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
					     m_Osd->DrawText(OSDSTATUSWIN_X(6), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
				
			||||||
     if (m_Receiver) snprintf(buf, sizeof(buf), "%.0f %s", m_Receiver->AC3Valid() ? m_Receiver->AC3Bitrate() : m_Receiver->AudioBitrate(), tr("kbit/s"));
 | 
					     if (m_Receiver) snprintf(buf, sizeof(buf), "%.0f %s", (m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? m_Receiver->AC3Bitrate() : m_Receiver->AudioBitrate(), tr("kbit/s"));
 | 
				
			||||||
     else            snprintf(buf, sizeof(buf), "--- %s", tr("kbit/s"));
 | 
					     else            snprintf(buf, sizeof(buf), "--- %s", tr("kbit/s"));
 | 
				
			||||||
     m_Osd->DrawText(OSDSTATUSWIN_X(7), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
					     m_Osd->DrawText(OSDSTATUSWIN_X(7), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
 | 
				
			||||||
     offset += m_Font->Height();
 | 
					     offset += m_Font->Height();
 | 
				
			||||||
@@ -278,13 +339,14 @@ void cFemonOsd::DrawStatusWindow(void)
 | 
				
			|||||||
void cFemonOsd::DrawInfoWindow(void)
 | 
					void cFemonOsd::DrawInfoWindow(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  cMutexLock lock(m_Mutex);
 | 
					  cMutexLock lock(m_Mutex);
 | 
				
			||||||
  //printf("cFemonOsd::DrawInfoWindow()\n");
 | 
					  debug(printf("cFemonOsd::DrawInfoWindow()\n"));
 | 
				
			||||||
  char buf[128];
 | 
					  char buf[128];
 | 
				
			||||||
  char buf2[20];
 | 
					  char buf2[20];
 | 
				
			||||||
  int offset = 0;
 | 
					  int offset = 0;
 | 
				
			||||||
  int value = 0;
 | 
					  int value = 0;
 | 
				
			||||||
  double dvalue = 0.0;
 | 
					  double dvalue = 0.0;
 | 
				
			||||||
  cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					  cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
 | 
					  eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (m_Osd) {
 | 
					  if (m_Osd) {
 | 
				
			||||||
     if (m_DisplayMode == modeTransponder) {
 | 
					     if (m_DisplayMode == modeTransponder) {
 | 
				
			||||||
@@ -299,19 +361,93 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
        snprintf(buf, sizeof(buf), "%d", channel->Ppid());
 | 
					        snprintf(buf, sizeof(buf), "%d", channel->Ppid());
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        offset += m_Font->Height();
 | 
					        offset += m_Font->Height();
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Apid1"), clrWhite, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Apid"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
        value = channel->Apid2();
 | 
					        snprintf(buf, sizeof(buf), "%d", channel->Apid(0));
 | 
				
			||||||
        if (value) snprintf(buf, sizeof(buf), "%d, %d", channel->Apid1(), value);
 | 
					        value = 1;
 | 
				
			||||||
        else       snprintf(buf, sizeof(buf), "%d", channel->Apid1());
 | 
					        while (channel->Apid(value) && (value < MAXAPIDS)) {
 | 
				
			||||||
 | 
					           snprintf(buf2, sizeof(buf2), ", %d", channel->Apid(value++));
 | 
				
			||||||
 | 
					           strncat(buf, buf2, sizeof(buf));
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid1"), clrWhite, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
        value = channel->Dpid2();
 | 
					        snprintf(buf, sizeof(buf), "%d", channel->Dpid(0));
 | 
				
			||||||
        if (value) snprintf(buf, sizeof(buf), "%d, %d", channel->Dpid1(), value);
 | 
					        value = 1;
 | 
				
			||||||
        else       snprintf(buf, sizeof(buf), "%d", channel->Dpid1());
 | 
					        while (channel->Dpid(value) && (value < MAXDPIDS)) {
 | 
				
			||||||
 | 
					           snprintf(buf2, sizeof(buf2), ", %d", channel->Dpid(value++));
 | 
				
			||||||
 | 
					           strncat(buf, buf2, sizeof(buf));
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        offset += m_Font->Height();
 | 
					        offset += m_Font->Height();
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), clrWhite, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
        snprintf(buf, sizeof(buf), "%d", channel->Ca());
 | 
					        value = channel->Ca();
 | 
				
			||||||
 | 
					        if (femonConfig.showcasystem) {
 | 
				
			||||||
 | 
					           /* http://www.dvb.org/index.php?id=174 */
 | 
				
			||||||
 | 
					           switch (value) {
 | 
				
			||||||
 | 
					             case 0x0000:
 | 
				
			||||||
 | 
					                  /* Reserved */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("Free to Air"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0001 ... 0x00FF:
 | 
				
			||||||
 | 
					                  /* Standardized systems */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("Fixed"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0100 ... 0x01FF:
 | 
				
			||||||
 | 
					                  /* Canal Plus */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("SECA/Mediaguard"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0500 ... 0x05FF:
 | 
				
			||||||
 | 
					                  /* France Telecom */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("Viaccess"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0600 ... 0x06FF:
 | 
				
			||||||
 | 
					                  /* Irdeto */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("Irdeto"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0900 ... 0x09FF:
 | 
				
			||||||
 | 
					                  /* News Datacom */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("NDS/Videoguard"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0B00 ... 0x0BFF:
 | 
				
			||||||
 | 
					                  /* Norwegian Telekom */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("Conax"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0D00 ... 0x0DFF:
 | 
				
			||||||
 | 
					                  /* Philips */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("CryptoWorks"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x0E00 ... 0x0EFF:
 | 
				
			||||||
 | 
					                  /* Scientific Atlanta */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("PowerVu"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x1200 ... 0x12FF:
 | 
				
			||||||
 | 
					                  /* BellVu Express */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("NagraVision"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x1700 ... 0x17FF:
 | 
				
			||||||
 | 
					                  /* BetaTechnik */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("BetaCrypt"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x1800 ... 0x18FF:
 | 
				
			||||||
 | 
					                  /* Kudelski SA */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("NagraVision"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             case 0x4A60 ... 0x4A6F:
 | 
				
			||||||
 | 
					                  /* @Sky */
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%s", tr("SkyCrypt"));
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             default:
 | 
				
			||||||
 | 
					                  snprintf(buf, sizeof(buf), "%X", value);
 | 
				
			||||||
 | 
					                  break;
 | 
				
			||||||
 | 
					             }
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					           snprintf(buf, sizeof(buf), "%X", value);
 | 
				
			||||||
 | 
					           value = 1;
 | 
				
			||||||
 | 
					           while (channel->Ca(value) && (value < MAXCAIDS)) {
 | 
				
			||||||
 | 
					             snprintf(buf2, sizeof(buf2), ", %X", channel->Ca(value++));
 | 
				
			||||||
 | 
					             strncat(buf, buf2, sizeof(buf));
 | 
				
			||||||
 | 
					             }
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), clrWhite, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
        snprintf(buf, sizeof(buf), "%d", channel->Tpid());
 | 
					        snprintf(buf, sizeof(buf), "%d", channel->Tpid());
 | 
				
			||||||
@@ -342,7 +478,7 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
               snprintf(buf, sizeof(buf), "%d %s", value, tr("MHz"));
 | 
					               snprintf(buf, sizeof(buf), "%d %s", value, tr("MHz"));
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Source"), clrWhite, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Source"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
               snprintf(buf, sizeof(buf), "%s", cSource::ToString(channel->Source()));
 | 
					               snprintf(buf, sizeof(buf), "%s", *cSource::ToString(channel->Source()));
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
               offset += m_Font->Height();
 | 
					               offset += m_Font->Height();
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Srate"), clrWhite, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Srate"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
@@ -383,7 +519,7 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
               snprintf(buf, sizeof(buf), "%d %s", value, tr("MHz"));
 | 
					               snprintf(buf, sizeof(buf), "%d %s", value, tr("MHz"));
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Source"), clrWhite, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Source"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
               snprintf(buf, sizeof(buf), "%s", cSource::ToString(channel->Source()));
 | 
					               snprintf(buf, sizeof(buf), "%s", *cSource::ToString(channel->Source()));
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
               offset += m_Font->Height();
 | 
					               offset += m_Font->Height();
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Srate"), clrWhite, clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Srate"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
@@ -553,9 +689,7 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        offset += m_Font->Height();
 | 
					        offset += m_Font->Height();
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        value = -1;
 | 
					        snprintf(buf, sizeof(buf), "#%d %s", IS_AUDIO_TRACK(track) ? channel->Apid(int(track - ttAudioFirst)) : channel->Apid(0), IS_AUDIO_TRACK(track) ? channel->Alang(int(track - ttAudioFirst)) : channel->Alang(0));
 | 
				
			||||||
        cDevice::PrimaryDevice()->GetAudioTracks(&value);
 | 
					 | 
				
			||||||
        snprintf(buf, sizeof(buf), "#%d", (value > 0 ? channel->Apid2() : channel->Apid1()));
 | 
					 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
        offset += m_Font->Height();
 | 
					        offset += m_Font->Height();
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
@@ -586,10 +720,10 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
     else if (m_DisplayMode == modeAC3) {
 | 
					     else if (m_DisplayMode == modeAC3) {
 | 
				
			||||||
        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrBackground);
 | 
					        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrBackground);
 | 
				
			||||||
        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+m_Font->Height()-1), clrWhite);
 | 
					        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+m_Font->Height()-1), clrWhite);
 | 
				
			||||||
        snprintf(buf, sizeof(buf), "%s - %s #%d", tr("Stream Information"), tr("AC-3 Stream"), channel->Dpid1());
 | 
					        snprintf(buf, sizeof(buf), "%s - %s #%d %s", tr("Stream Information"), tr("AC-3 Stream"), IS_DOLBY_TRACK(track) ? channel->Dpid(int(track - ttDolbyFirst)) : channel->Dpid(0), IS_DOLBY_TRACK(track) ? channel->Dlang(int(track - ttDolbyFirst)) : channel->Dlang(0));
 | 
				
			||||||
        m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), buf, clrBackground, clrWhite, m_Font);
 | 
					        m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), buf, clrBackground, clrWhite, m_Font);
 | 
				
			||||||
        offset += m_Font->Height();
 | 
					        offset += m_Font->Height();
 | 
				
			||||||
        if (m_Receiver && m_Receiver->AC3Valid()) {
 | 
					        if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
 | 
				
			||||||
           m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
 | 
				
			||||||
           snprintf(buf, sizeof(buf), "%.0f %s (%0.f %s)", m_Receiver->AC3StreamBitrate(), tr("kbit/s"), m_Receiver->AC3Bitrate(), tr("kbit/s"));
 | 
					           snprintf(buf, sizeof(buf), "%.0f %s (%0.f %s)", m_Receiver->AC3StreamBitrate(), tr("kbit/s"), m_Receiver->AC3Bitrate(), tr("kbit/s"));
 | 
				
			||||||
           m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
 | 
				
			||||||
@@ -684,9 +818,11 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void cFemonOsd::Action(void)
 | 
					void cFemonOsd::Action(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonOsd::Action()\n");
 | 
					  debug(printf("cFemonOsd::Action()\n"));
 | 
				
			||||||
 | 
					  cTimeMs t;
 | 
				
			||||||
  m_Active = true;
 | 
					  m_Active = true;
 | 
				
			||||||
  while (m_Active) {
 | 
					  while (m_Active) {
 | 
				
			||||||
 | 
					    t.Set(0);
 | 
				
			||||||
    if (m_Frontend != -1) {
 | 
					    if (m_Frontend != -1) {
 | 
				
			||||||
       CHECK(ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus));
 | 
					       CHECK(ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus));
 | 
				
			||||||
       CHECK(ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal));
 | 
					       CHECK(ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal));
 | 
				
			||||||
@@ -699,14 +835,17 @@ void cFemonOsd::Action(void)
 | 
				
			|||||||
          isyslog("Card #%d (%s) STR: %04x SNR: %04x BER: %08x UNC: %08x |%c|%c|%c|%c|%c|", cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name, m_Signal, m_SNR, m_BER, m_UNC, (m_FrontendStatus & FE_HAS_LOCK) ? 'L' : ' ', (m_FrontendStatus & FE_HAS_SIGNAL) ? 'S' : ' ', (m_FrontendStatus & FE_HAS_CARRIER) ? 'C' : ' ', (m_FrontendStatus & FE_HAS_VITERBI) ? 'V' : ' ', (m_FrontendStatus & FE_HAS_SYNC) ? 'Z' : ' ');
 | 
					          isyslog("Card #%d (%s) STR: %04x SNR: %04x BER: %08x UNC: %08x |%c|%c|%c|%c|%c|", cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name, m_Signal, m_SNR, m_BER, m_UNC, (m_FrontendStatus & FE_HAS_LOCK) ? 'L' : ' ', (m_FrontendStatus & FE_HAS_SIGNAL) ? 'S' : ' ', (m_FrontendStatus & FE_HAS_CARRIER) ? 'C' : ' ', (m_FrontendStatus & FE_HAS_VITERBI) ? 'V' : ' ', (m_FrontendStatus & FE_HAS_SYNC) ? 'Z' : ' ');
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
       }
 | 
					       }
 | 
				
			||||||
    usleep(100000L * femonConfig.updateinterval);
 | 
					    cCondWait::SleepMs(100 * femonConfig.updateinterval - t.Elapsed());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void cFemonOsd::Show(void)
 | 
					void cFemonOsd::Show(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonOsd::Show()\n");
 | 
					  debug(printf("cFemonOsd::Show()\n"));
 | 
				
			||||||
 | 
					  int apid[2] = {0, 0};
 | 
				
			||||||
 | 
					  int dpid[2] = {0, 0};
 | 
				
			||||||
  char *dev = NULL;
 | 
					  char *dev = NULL;
 | 
				
			||||||
 | 
					  eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
  asprintf(&dev, FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
 | 
					  asprintf(&dev, FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
 | 
				
			||||||
  m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
 | 
					  m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
 | 
				
			||||||
  free(dev);
 | 
					  free(dev);
 | 
				
			||||||
@@ -739,7 +878,9 @@ void cFemonOsd::Show(void)
 | 
				
			|||||||
        delete m_Receiver;
 | 
					        delete m_Receiver;
 | 
				
			||||||
     if (femonConfig.analyzestream) {
 | 
					     if (femonConfig.analyzestream) {
 | 
				
			||||||
        cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					        cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
        m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), channel->Apid1(), channel->Dpid1());
 | 
					        IS_AUDIO_TRACK(track) ? apid[0] = channel->Apid(int(track - ttAudioFirst)) : apid[0] = channel->Apid(0);
 | 
				
			||||||
 | 
					        IS_DOLBY_TRACK(track) ? dpid[0] = channel->Dpid(int(track - ttDolbyFirst)) : dpid[0] = channel->Dpid(0);
 | 
				
			||||||
 | 
					        m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), apid, dpid);
 | 
				
			||||||
        cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
					        cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
     Start();
 | 
					     Start();
 | 
				
			||||||
@@ -748,8 +889,11 @@ void cFemonOsd::Show(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
 | 
					void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonOsd::ChannelSwitch()\n");
 | 
					  debug(printf("cFemonOsd::ChannelSwitch()\n"));
 | 
				
			||||||
 | 
					  int apid[2] = {0, 0};
 | 
				
			||||||
 | 
					  int dpid[2] = {0, 0};
 | 
				
			||||||
  char *dev = NULL;
 | 
					  char *dev = NULL;
 | 
				
			||||||
 | 
					  eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
  if (!device->IsPrimaryDevice() || !channelNumber || cDevice::PrimaryDevice()->CurrentChannel() != channelNumber)
 | 
					  if (!device->IsPrimaryDevice() || !channelNumber || cDevice::PrimaryDevice()->CurrentChannel() != channelNumber)
 | 
				
			||||||
     return;
 | 
					     return;
 | 
				
			||||||
  close(m_Frontend);
 | 
					  close(m_Frontend);
 | 
				
			||||||
@@ -771,7 +915,26 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
 | 
				
			|||||||
     delete m_Receiver;
 | 
					     delete m_Receiver;
 | 
				
			||||||
  if (femonConfig.analyzestream) {
 | 
					  if (femonConfig.analyzestream) {
 | 
				
			||||||
     cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					     cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
     m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), channel->Apid1(), channel->Dpid1());
 | 
					     IS_AUDIO_TRACK(track) ? apid[0] = channel->Apid(int(track - ttAudioFirst)) : apid[0] = channel->Apid(0);
 | 
				
			||||||
 | 
					     IS_DOLBY_TRACK(track) ? dpid[0] = channel->Dpid(int(track - ttDolbyFirst)) : dpid[0] = channel->Dpid(0);
 | 
				
			||||||
 | 
					     m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), apid, dpid);
 | 
				
			||||||
 | 
					     cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void cFemonOsd::SetAudioTrack(int Index, const char * const *Tracks)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  debug(printf("cFemonOsd::SetAudioTrack()\n"));
 | 
				
			||||||
 | 
					  int apid[2] = {0, 0};
 | 
				
			||||||
 | 
					  int dpid[2] = {0, 0};
 | 
				
			||||||
 | 
					  eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
 | 
					  if (m_Receiver)
 | 
				
			||||||
 | 
					     delete m_Receiver;
 | 
				
			||||||
 | 
					  if (femonConfig.analyzestream) {
 | 
				
			||||||
 | 
					     cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
 | 
					     IS_AUDIO_TRACK(track) ? apid[0] = channel->Apid(int(track - ttAudioFirst)) : apid[0] = channel->Apid(0);
 | 
				
			||||||
 | 
					     IS_DOLBY_TRACK(track) ? dpid[0] = channel->Dpid(int(track - ttDolbyFirst)) : dpid[0] = channel->Dpid(0);
 | 
				
			||||||
 | 
					     m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), apid, dpid);
 | 
				
			||||||
     cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
					     cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -795,7 +958,7 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
 | 
				
			|||||||
               if (m_Number > 0) {
 | 
					               if (m_Number > 0) {
 | 
				
			||||||
                  DrawStatusWindow();
 | 
					                  DrawStatusWindow();
 | 
				
			||||||
                  cChannel *ch = Channels.GetByNumber(m_Number);
 | 
					                  cChannel *ch = Channels.GetByNumber(m_Number);
 | 
				
			||||||
                  m_InputTime = time_ms();
 | 
					                  m_InputTime.Set(0);
 | 
				
			||||||
                  // Lets see if there can be any useful further input:
 | 
					                  // Lets see if there can be any useful further input:
 | 
				
			||||||
                  int n = ch ? m_Number * 10 : 0;
 | 
					                  int n = ch ? m_Number * 10 : 0;
 | 
				
			||||||
                  while (ch && (ch = Channels.Next(ch)) != NULL) {
 | 
					                  while (ch && (ch = Channels.Next(ch)) != NULL) {
 | 
				
			||||||
@@ -821,23 +984,40 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
 | 
				
			|||||||
            return osEnd;
 | 
					            return osEnd;
 | 
				
			||||||
       case kGreen:
 | 
					       case kGreen:
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            int CurrentAudioTrack = -1;
 | 
					            eTrackType types[ttMaxTrackTypes];
 | 
				
			||||||
            const char **AudioTracks = cDevice::PrimaryDevice()->GetAudioTracks(&CurrentAudioTrack);
 | 
					            eTrackType CurrentAudioTrack = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
 | 
				
			||||||
            if (AudioTracks) {
 | 
					            int numTracks = 0;
 | 
				
			||||||
               const char **at = &AudioTracks[CurrentAudioTrack];
 | 
					            int oldTrack = 0;
 | 
				
			||||||
               if (!*++at)
 | 
					            int track = 0;
 | 
				
			||||||
                  at = AudioTracks;
 | 
					            for (int i = ttAudioFirst; i <= ttDolbyLast; i++) {
 | 
				
			||||||
               cDevice::PrimaryDevice()->SetAudioTrack(at - AudioTracks);
 | 
					                const tTrackId *TrackId = cDevice::PrimaryDevice()->GetTrack(eTrackType(i));
 | 
				
			||||||
               if (femonConfig.analyzestream) {
 | 
					                if (TrackId && TrackId->id) {
 | 
				
			||||||
                  cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					                   types[numTracks] = eTrackType(i);
 | 
				
			||||||
                  if (m_Receiver)
 | 
					                   if (i == CurrentAudioTrack)
 | 
				
			||||||
                     delete m_Receiver;
 | 
					                      track = numTracks;
 | 
				
			||||||
                  m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), (at - AudioTracks) ? channel->Apid2() : channel->Apid1(), channel->Dpid1());
 | 
					                   numTracks++;
 | 
				
			||||||
                  cDevice::ActualDevice()->AttachReceiver(m_Receiver);
 | 
					                   }
 | 
				
			||||||
                  }
 | 
					                }
 | 
				
			||||||
 | 
					            oldTrack = track;
 | 
				
			||||||
 | 
					            if (++track >= numTracks)
 | 
				
			||||||
 | 
					               track = 0;
 | 
				
			||||||
 | 
					            if (track != oldTrack) {
 | 
				
			||||||
 | 
					               cDevice::PrimaryDevice()->SetCurrentAudioTrack(types[track]);
 | 
				
			||||||
 | 
					               Setup.CurrentDolby = IS_DOLBY_TRACK(types[track]);
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					       case kYellow:
 | 
				
			||||||
 | 
					            if (IS_AUDIO_TRACK(cDevice::PrimaryDevice()->GetCurrentAudioTrack())) {
 | 
				
			||||||
 | 
					               int audioChannel = cDevice::PrimaryDevice()->GetAudioChannel();
 | 
				
			||||||
 | 
					               int oldAudioChannel = audioChannel;
 | 
				
			||||||
 | 
					               if (++audioChannel > 2)
 | 
				
			||||||
 | 
					                  audioChannel = 0;
 | 
				
			||||||
 | 
					               if (audioChannel != oldAudioChannel) {
 | 
				
			||||||
 | 
					                  cDevice::PrimaryDevice()->SetAudioChannel(audioChannel);
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
       case kRight:
 | 
					       case kRight:
 | 
				
			||||||
       case kLeft:
 | 
					       case kLeft:
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -845,7 +1025,7 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
 | 
				
			|||||||
            if (device >= 0) {
 | 
					            if (device >= 0) {
 | 
				
			||||||
               cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
					               cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
 | 
				
			||||||
               for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
 | 
					               for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
 | 
				
			||||||
                   if (NORMALKEY(Key) == kRight) {
 | 
					                   if (NORMALKEY(Key) == kBlue) {
 | 
				
			||||||
                      if (++device >= cDevice::NumDevices()) device = 0;
 | 
					                      if (++device >= cDevice::NumDevices()) device = 0;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                   else {
 | 
					                   else {
 | 
				
			||||||
@@ -854,7 +1034,7 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
 | 
				
			|||||||
                   if (cDevice::GetDevice(device)->ProvidesChannel(channel)) {
 | 
					                   if (cDevice::GetDevice(device)->ProvidesChannel(channel)) {
 | 
				
			||||||
                      //cStatus::MsgChannelSwitch(cDevice::GetDevice(device), 0);
 | 
					                      //cStatus::MsgChannelSwitch(cDevice::GetDevice(device), 0);
 | 
				
			||||||
                      //implement some tuning mechanism here
 | 
					                      //implement some tuning mechanism here
 | 
				
			||||||
                      //cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apid1(), channel->Apid2(), channel->Dpid1(), channel->Dpid2()));
 | 
					                      //cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apid(0), channel->Apid(1), channel->Dpid(0), channel->Dpid(1)));
 | 
				
			||||||
                      //cStatus::MsgChannelSwitch(cDevice::GetDevice(device), channel->Number());
 | 
					                      //cStatus::MsgChannelSwitch(cDevice::GetDevice(device), channel->Number());
 | 
				
			||||||
                      break;
 | 
					                      break;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
@@ -871,21 +1051,21 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
 | 
				
			|||||||
            m_Number = 0;
 | 
					            m_Number = 0;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
       case kNone:
 | 
					       case kNone:
 | 
				
			||||||
            if (m_Number && (time_ms() - m_InputTime > CHANNELINPUT_TIMEOUT)) {
 | 
					            if (m_Number && (m_InputTime.Elapsed() > CHANNELINPUT_TIMEOUT)) {
 | 
				
			||||||
               if (Channels.GetByNumber(m_Number)) {
 | 
					               if (Channels.GetByNumber(m_Number)) {
 | 
				
			||||||
                  m_OldNumber = cDevice::CurrentChannel();
 | 
					                  m_OldNumber = cDevice::CurrentChannel();
 | 
				
			||||||
                  Channels.SwitchTo(m_Number);
 | 
					                  Channels.SwitchTo(m_Number);
 | 
				
			||||||
                  m_Number = 0;
 | 
					                  m_Number = 0;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               else {
 | 
					               else {
 | 
				
			||||||
                  m_InputTime = time_ms();
 | 
					                  m_InputTime.Set(0);
 | 
				
			||||||
                  m_Number = 0;
 | 
					                  m_Number = 0;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
       case kOk:
 | 
					       case kOk:
 | 
				
			||||||
            // toggle between display modes
 | 
					            // toggle between display modes
 | 
				
			||||||
            if (++m_DisplayMode == modeAC3 && !Channels.GetByNumber(cDevice::CurrentChannel())->Dpid1()) m_DisplayMode++;
 | 
					            if (++m_DisplayMode == modeAC3 && !Channels.GetByNumber(cDevice::CurrentChannel())->Dpid(0)) m_DisplayMode++;
 | 
				
			||||||
            if (m_DisplayMode >= modeMaxNumber) m_DisplayMode = 0;
 | 
					            if (m_DisplayMode >= modeMaxNumber) m_DisplayMode = 0;
 | 
				
			||||||
            DrawInfoWindow();
 | 
					            DrawInfoWindow();
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@
 | 
				
			|||||||
#include <vdr/status.h>
 | 
					#include <vdr/status.h>
 | 
				
			||||||
#include <vdr/channels.h>
 | 
					#include <vdr/channels.h>
 | 
				
			||||||
#include <vdr/transfer.h>
 | 
					#include <vdr/transfer.h>
 | 
				
			||||||
 | 
					#include <vdr/tools.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
 | 
					class cFemonOsd : public cOsdObject, public cThread, public cStatus {
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@@ -27,7 +28,6 @@ private:
 | 
				
			|||||||
  struct dvb_frontend_info m_FrontendInfo;
 | 
					  struct dvb_frontend_info m_FrontendInfo;
 | 
				
			||||||
  int m_Number;
 | 
					  int m_Number;
 | 
				
			||||||
  int m_OldNumber;
 | 
					  int m_OldNumber;
 | 
				
			||||||
  int m_InputTime;
 | 
					 | 
				
			||||||
  uint16_t m_SNR;
 | 
					  uint16_t m_SNR;
 | 
				
			||||||
  uint16_t m_Signal;
 | 
					  uint16_t m_Signal;
 | 
				
			||||||
  uint32_t m_BER;
 | 
					  uint32_t m_BER;
 | 
				
			||||||
@@ -35,15 +35,18 @@ private:
 | 
				
			|||||||
  fe_status_t m_FrontendStatus;
 | 
					  fe_status_t m_FrontendStatus;
 | 
				
			||||||
  int m_DisplayMode;
 | 
					  int m_DisplayMode;
 | 
				
			||||||
  const cFont *m_Font;
 | 
					  const cFont *m_Font;
 | 
				
			||||||
 | 
					  cTimeMs m_InputTime;
 | 
				
			||||||
  cMutex* m_Mutex;
 | 
					  cMutex* m_Mutex;
 | 
				
			||||||
  static cBitmap bmDevice0, bmDevice1, bmDevice2, bmDevice3, bmApid1, bmApid2, bmDD, bmDD20, bmDD51;
 | 
					  static cBitmap bmStereo, bmMonoLeft, bmMonoRight, bmDD, bmDD20, bmDD51;
 | 
				
			||||||
  static cBitmap bmPAL, bmNTSC, bmAspectRatio_1_1, bmAspectRatio_16_9, bmAspectRatio_2_21_1, bmAspectRatio_4_3;
 | 
					  static cBitmap bmZero, bmDevice, bmPAL, bmNTSC, bmOne, bmTwo, bmThree, bmFour, bmFive;
 | 
				
			||||||
 | 
					  static cBitmap bmAspectRatio_1_1, bmAspectRatio_16_9, bmAspectRatio_2_21_1, bmAspectRatio_4_3;
 | 
				
			||||||
  void DrawStatusWindow(void);
 | 
					  void DrawStatusWindow(void);
 | 
				
			||||||
  void DrawInfoWindow(void);
 | 
					  void DrawInfoWindow(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  virtual void Action(void);
 | 
					  virtual void Action(void);
 | 
				
			||||||
  virtual void ChannelSwitch(const cDevice * device, int channelNumber);
 | 
					  virtual void ChannelSwitch(const cDevice * device, int channelNumber);
 | 
				
			||||||
 | 
					  virtual void SetAudioTrack(int Index, const char * const *Tracks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  cFemonOsd(void);
 | 
					  cFemonOsd(void);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <vdr/tools.h>
 | 
				
			||||||
#include "femoncfg.h"
 | 
					#include "femoncfg.h"
 | 
				
			||||||
#include "femonreceiver.h"
 | 
					#include "femonreceiver.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,14 +17,14 @@
 | 
				
			|||||||
#define PAYLOAD       0x10
 | 
					#define PAYLOAD       0x10
 | 
				
			||||||
#define PTS_DTS_FLAGS 0xC0
 | 
					#define PTS_DTS_FLAGS 0xC0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid)
 | 
					cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[])
 | 
				
			||||||
:cReceiver(Ca, -1, 3, Vpid, Apid, Dpid), cThread("femon receiver")
 | 
					:cReceiver(Ca, -1, Vpid, Apid, Dpid, NULL), cThread("femon receiver")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::cFemonReceiver()\n");
 | 
					  debug(printf("cFemonReceiver::cFemonReceiver()\n"));
 | 
				
			||||||
  m_Active = false;
 | 
					  m_Active = false;
 | 
				
			||||||
  m_VideoPid = Vpid;
 | 
					  m_VideoPid = Vpid;
 | 
				
			||||||
  m_AudioPid = Apid;
 | 
					  m_AudioPid = Apid[0];
 | 
				
			||||||
  m_AC3Pid = Dpid;      
 | 
					  m_AC3Pid = Dpid[0];      
 | 
				
			||||||
  m_VideoValid = false;
 | 
					  m_VideoValid = false;
 | 
				
			||||||
  m_VideoPacketCount = 0;
 | 
					  m_VideoPacketCount = 0;
 | 
				
			||||||
  m_VideoHorizontalSize = 0;
 | 
					  m_VideoHorizontalSize = 0;
 | 
				
			||||||
@@ -57,7 +58,8 @@ cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid)
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
cFemonReceiver::~cFemonReceiver(void)
 | 
					cFemonReceiver::~cFemonReceiver(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::~cFemonReceiver()\n");
 | 
					  debug(printf("cFemonReceiver::~cFemonReceiver()\n"));
 | 
				
			||||||
 | 
					  Detach();
 | 
				
			||||||
  if (m_Active) {
 | 
					  if (m_Active) {
 | 
				
			||||||
     m_Active = false;
 | 
					     m_Active = false;
 | 
				
			||||||
     Cancel(0);
 | 
					     Cancel(0);
 | 
				
			||||||
@@ -67,7 +69,7 @@ cFemonReceiver::~cFemonReceiver(void)
 | 
				
			|||||||
/* The following function originates from libdvbmpeg: */
 | 
					/* The following function originates from libdvbmpeg: */
 | 
				
			||||||
void cFemonReceiver::GetVideoInfo(uint8_t *mbuf, int count)
 | 
					void cFemonReceiver::GetVideoInfo(uint8_t *mbuf, int count)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::GetVideoInfo()\n");
 | 
					  debug(printf("cFemonReceiver::GetVideoInfo()\n"));
 | 
				
			||||||
  uint8_t *headr;
 | 
					  uint8_t *headr;
 | 
				
			||||||
  int found = 0;
 | 
					  int found = 0;
 | 
				
			||||||
  int c = 0;
 | 
					  int c = 0;
 | 
				
			||||||
@@ -160,7 +162,7 @@ static unsigned int samplerates[4] =
 | 
				
			|||||||
/* The following function originates from libdvbmpeg: */
 | 
					/* The following function originates from libdvbmpeg: */
 | 
				
			||||||
void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
 | 
					void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::GetAudioInfo()\n");
 | 
					  debug(printf("cFemonReceiver::GetAudioInfo()\n"));
 | 
				
			||||||
  uint8_t *headr;
 | 
					  uint8_t *headr;
 | 
				
			||||||
  int found = 0;
 | 
					  int found = 0;
 | 
				
			||||||
  int c = 0;
 | 
					  int c = 0;
 | 
				
			||||||
@@ -252,13 +254,20 @@ void cFemonReceiver::GetAC3Info(uint8_t *mbuf, int count)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void cFemonReceiver::Activate(bool On)
 | 
					void cFemonReceiver::Activate(bool On)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::Activate()\n");
 | 
					  debug(printf("cFemonReceiver::Activate()\n"));
 | 
				
			||||||
  Start();
 | 
					  if (On) {
 | 
				
			||||||
 | 
					     if (!m_Active)
 | 
				
			||||||
 | 
					        Start();
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					  else if (m_Active) {
 | 
				
			||||||
 | 
					     m_Active = false;
 | 
				
			||||||
 | 
					     Cancel(0);
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void cFemonReceiver::Receive(uchar *Data, int Length)
 | 
					void cFemonReceiver::Receive(uchar *Data, int Length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::Receive()\n");
 | 
					  debug(printf("cFemonReceiver::Receive()\n"));
 | 
				
			||||||
  // TS packet length: TS_SIZE
 | 
					  // TS packet length: TS_SIZE
 | 
				
			||||||
  if (Length == TS_SIZE) {
 | 
					  if (Length == TS_SIZE) {
 | 
				
			||||||
     int pid = ((Data[1] & 0x1f) << 8) | (Data[2]);
 | 
					     int pid = ((Data[1] & 0x1f) << 8) | (Data[2]);
 | 
				
			||||||
@@ -301,9 +310,11 @@ void cFemonReceiver::Receive(uchar *Data, int Length)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void cFemonReceiver::Action(void)
 | 
					void cFemonReceiver::Action(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  //printf("cFemonReceiver::Action()\n");
 | 
					  debug(printf("cFemonReceiver::Action()\n"));
 | 
				
			||||||
 | 
					  cTimeMs t;
 | 
				
			||||||
  m_Active = true;
 | 
					  m_Active = true;
 | 
				
			||||||
  while (m_Active) {
 | 
					  while (m_Active) {
 | 
				
			||||||
 | 
					        t.Set(0);
 | 
				
			||||||
        // TS packet 188 bytes - 4 byte header; MPEG standard defines 1Mbit = 1000000bit
 | 
					        // TS packet 188 bytes - 4 byte header; MPEG standard defines 1Mbit = 1000000bit
 | 
				
			||||||
        m_VideoBitrate = (8.0 * 184.0 * m_VideoPacketCount) / (femonConfig.calcinterval * 100000.0);
 | 
					        m_VideoBitrate = (8.0 * 184.0 * m_VideoPacketCount) / (femonConfig.calcinterval * 100000.0);
 | 
				
			||||||
        m_VideoPacketCount = 0;
 | 
					        m_VideoPacketCount = 0;
 | 
				
			||||||
@@ -311,6 +322,6 @@ void cFemonReceiver::Action(void)
 | 
				
			|||||||
        m_AudioPacketCount = 0;
 | 
					        m_AudioPacketCount = 0;
 | 
				
			||||||
        m_AC3Bitrate   = (8.0 * 184.0 * m_AC3PacketCount)   / (femonConfig.calcinterval * 100.0);
 | 
					        m_AC3Bitrate   = (8.0 * 184.0 * m_AC3PacketCount)   / (femonConfig.calcinterval * 100.0);
 | 
				
			||||||
        m_AC3PacketCount = 0;
 | 
					        m_AC3PacketCount = 0;
 | 
				
			||||||
        usleep(100000L * femonConfig.calcinterval);
 | 
					        cCondWait::SleepMs(100 * femonConfig.calcinterval - t.Elapsed());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,7 +95,7 @@ protected:
 | 
				
			|||||||
  virtual void Action(void);
 | 
					  virtual void Action(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid);
 | 
					  cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[]);
 | 
				
			||||||
  virtual ~cFemonReceiver();
 | 
					  virtual ~cFemonReceiver();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool VideoValid(void)           { return m_VideoValid; };          // boolean
 | 
					  bool VideoValid(void)           { return m_VideoValid; };          // boolean
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * apid1_xpm[] = {
 | 
					 | 
				
			||||||
"32 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"++++++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+..............................+",
 | 
					 | 
				
			||||||
"+..............++.......++.....+",
 | 
					 | 
				
			||||||
"+............++++....+++++.....+",
 | 
					 | 
				
			||||||
"+..........+++.++....+++++.....+",
 | 
					 | 
				
			||||||
"+........+++...++.......++.....+",
 | 
					 | 
				
			||||||
"+...+++++++....++.......++.....+",
 | 
					 | 
				
			||||||
"+...++++++.....++.......++.....+",
 | 
					 | 
				
			||||||
"+...++..++.....++.......++.....+",
 | 
					 | 
				
			||||||
"+...++..++.....++.......++.....+",
 | 
					 | 
				
			||||||
"+...++++++.....++.......++.....+",
 | 
					 | 
				
			||||||
"+...+++++++....++.......++.....+",
 | 
					 | 
				
			||||||
"+........+++...++.......++.....+",
 | 
					 | 
				
			||||||
"+..........+++.++.......++.....+",
 | 
					 | 
				
			||||||
"+............++++.......++.....+",
 | 
					 | 
				
			||||||
"+.............+++.......++.....+",
 | 
					 | 
				
			||||||
"+..............................+",
 | 
					 | 
				
			||||||
"++++++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * apid2_xpm[] = {
 | 
					 | 
				
			||||||
"32 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"++++++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+..............................+",
 | 
					 | 
				
			||||||
"+..............++.....++++.....+",
 | 
					 | 
				
			||||||
"+............++++...+++++++....+",
 | 
					 | 
				
			||||||
"+..........+++.++...++....++...+",
 | 
					 | 
				
			||||||
"+........+++...++.........++...+",
 | 
					 | 
				
			||||||
"+...+++++++....++.........++...+",
 | 
					 | 
				
			||||||
"+...++++++.....++........+++...+",
 | 
					 | 
				
			||||||
"+...++..++.....++.......+++....+",
 | 
					 | 
				
			||||||
"+...++..++.....++......+++.....+",
 | 
					 | 
				
			||||||
"+...++++++.....++.....+++......+",
 | 
					 | 
				
			||||||
"+...+++++++....++....+++.......+",
 | 
					 | 
				
			||||||
"+........+++...++...+++........+",
 | 
					 | 
				
			||||||
"+..........+++.++...++.........+",
 | 
					 | 
				
			||||||
"+............++++...++++++++...+",
 | 
					 | 
				
			||||||
"+.............+++...++++++++...+",
 | 
					 | 
				
			||||||
"+..............................+",
 | 
					 | 
				
			||||||
"++++++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * dev0_xpm[] = {
 | 
					 | 
				
			||||||
"29 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+.......+..+.......++++.....+",
 | 
					 | 
				
			||||||
"+.......+..+......++++++....+",
 | 
					 | 
				
			||||||
"+.......+..+......++..++....+",
 | 
					 | 
				
			||||||
"+....+++++++++...++....++...+",
 | 
					 | 
				
			||||||
"+....+++++++++...++....++...+",
 | 
					 | 
				
			||||||
"+......+..+......++....++...+",
 | 
					 | 
				
			||||||
"+......+..+......++....++...+",
 | 
					 | 
				
			||||||
"+......+..+......++....++...+",
 | 
					 | 
				
			||||||
"+......+..+......++....++...+",
 | 
					 | 
				
			||||||
"+...+++++++++....++....++...+",
 | 
					 | 
				
			||||||
"+...+++++++++....++....++...+",
 | 
					 | 
				
			||||||
"+.....+..+........++..++....+",
 | 
					 | 
				
			||||||
"+.....+..+........++++++....+",
 | 
					 | 
				
			||||||
"+.....+..+.........++++.....+",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * dev1_xpm[] = {
 | 
					 | 
				
			||||||
"29 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+.......+..+.........++.....+",
 | 
					 | 
				
			||||||
"+.......+..+......+++++.....+",
 | 
					 | 
				
			||||||
"+.......+..+......+++++.....+",
 | 
					 | 
				
			||||||
"+....+++++++++.......++.....+",
 | 
					 | 
				
			||||||
"+....+++++++++.......++.....+",
 | 
					 | 
				
			||||||
"+......+..+..........++.....+",
 | 
					 | 
				
			||||||
"+......+..+..........++.....+",
 | 
					 | 
				
			||||||
"+......+..+..........++.....+",
 | 
					 | 
				
			||||||
"+......+..+..........++.....+",
 | 
					 | 
				
			||||||
"+...+++++++++........++.....+",
 | 
					 | 
				
			||||||
"+...+++++++++........++.....+",
 | 
					 | 
				
			||||||
"+.....+..+...........++.....+",
 | 
					 | 
				
			||||||
"+.....+..+...........++.....+",
 | 
					 | 
				
			||||||
"+.....+..+...........++.....+",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * dev2_xpm[] = {
 | 
					 | 
				
			||||||
"29 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+.......+..+.......++++.....+",
 | 
					 | 
				
			||||||
"+.......+..+.....+++++++....+",
 | 
					 | 
				
			||||||
"+.......+..+.....++....++...+",
 | 
					 | 
				
			||||||
"+....+++++++++.........++...+",
 | 
					 | 
				
			||||||
"+....+++++++++.........++...+",
 | 
					 | 
				
			||||||
"+......+..+...........+++...+",
 | 
					 | 
				
			||||||
"+......+..+..........+++....+",
 | 
					 | 
				
			||||||
"+......+..+.........+++.....+",
 | 
					 | 
				
			||||||
"+......+..+........+++......+",
 | 
					 | 
				
			||||||
"+...+++++++++.....+++.......+",
 | 
					 | 
				
			||||||
"+...+++++++++....+++........+",
 | 
					 | 
				
			||||||
"+.....+..+.......++.........+",
 | 
					 | 
				
			||||||
"+.....+..+.......++++++++...+",
 | 
					 | 
				
			||||||
"+.....+..+.......++++++++...+",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/* XPM */
 | 
					 | 
				
			||||||
static char * dev3_xpm[] = {
 | 
					 | 
				
			||||||
"29 18 2 1",
 | 
					 | 
				
			||||||
".	c #FFFFFF",
 | 
					 | 
				
			||||||
"+	c #000000",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+.......+..+.......+++++....+",
 | 
					 | 
				
			||||||
"+.......+..+......+++++++...+",
 | 
					 | 
				
			||||||
"+.......+..+.....++....++...+",
 | 
					 | 
				
			||||||
"+....+++++++++...++....++...+",
 | 
					 | 
				
			||||||
"+....+++++++++.........++...+",
 | 
					 | 
				
			||||||
"+......+..+...........++....+",
 | 
					 | 
				
			||||||
"+......+..+.........+++.....+",
 | 
					 | 
				
			||||||
"+......+..+.........++++....+",
 | 
					 | 
				
			||||||
"+......+..+...........+++...+",
 | 
					 | 
				
			||||||
"+...+++++++++..........++...+",
 | 
					 | 
				
			||||||
"+...+++++++++....++....++...+",
 | 
					 | 
				
			||||||
"+.....+..+.......++...+++...+",
 | 
					 | 
				
			||||||
"+.....+..+........++++++....+",
 | 
					 | 
				
			||||||
"+.....+..+.........++++.....+",
 | 
					 | 
				
			||||||
"+...........................+",
 | 
					 | 
				
			||||||
"+++++++++++++++++++++++++++++"};
 | 
					 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/device.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/device.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * device_xpm[] = {
 | 
				
			||||||
 | 
					"14 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"++++++++++++++",
 | 
				
			||||||
 | 
					"+.............",
 | 
				
			||||||
 | 
					"+.......+..+..",
 | 
				
			||||||
 | 
					"+.......+..+..",
 | 
				
			||||||
 | 
					"+.......+..+..",
 | 
				
			||||||
 | 
					"+....+++++++++",
 | 
				
			||||||
 | 
					"+....+++++++++",
 | 
				
			||||||
 | 
					"+......+..+...",
 | 
				
			||||||
 | 
					"+......+..+...",
 | 
				
			||||||
 | 
					"+......+..+...",
 | 
				
			||||||
 | 
					"+......+..+...",
 | 
				
			||||||
 | 
					"+...+++++++++.",
 | 
				
			||||||
 | 
					"+...+++++++++.",
 | 
				
			||||||
 | 
					"+.....+..+....",
 | 
				
			||||||
 | 
					"+.....+..+....",
 | 
				
			||||||
 | 
					"+.....+..+....",
 | 
				
			||||||
 | 
					"+.............",
 | 
				
			||||||
 | 
					"++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/five.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/five.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * five_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"...+++++++....+",
 | 
				
			||||||
 | 
					"...+++++++....+",
 | 
				
			||||||
 | 
					"...++.........+",
 | 
				
			||||||
 | 
					"...++.........+",
 | 
				
			||||||
 | 
					"...++.........+",
 | 
				
			||||||
 | 
					"...++++++.....+",
 | 
				
			||||||
 | 
					"...+++++++....+",
 | 
				
			||||||
 | 
					"...++...+++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++...+++...+",
 | 
				
			||||||
 | 
					"...+++++++....+",
 | 
				
			||||||
 | 
					"....+++++.....+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/four.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/four.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * four_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"........+++...+",
 | 
				
			||||||
 | 
					".......++++...+",
 | 
				
			||||||
 | 
					"......++.++...+",
 | 
				
			||||||
 | 
					".....++..++...+",
 | 
				
			||||||
 | 
					".....++..++...+",
 | 
				
			||||||
 | 
					"....++...++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...+++++++++..+",
 | 
				
			||||||
 | 
					"...+++++++++..+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/monoleft.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/monoleft.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * monoleft_xpm[] = {
 | 
				
			||||||
 | 
					"17 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++++",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+...++...........",
 | 
				
			||||||
 | 
					"+...++++.........",
 | 
				
			||||||
 | 
					"+...++++++.......",
 | 
				
			||||||
 | 
					"+...++++++++.....",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++..++",
 | 
				
			||||||
 | 
					"+...+++++++++..++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...++++++++.....",
 | 
				
			||||||
 | 
					"+...++++++.......",
 | 
				
			||||||
 | 
					"+...++++.........",
 | 
				
			||||||
 | 
					"+...+++..........",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+++++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/monoright.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/monoright.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * monoright_xpm[] = {
 | 
				
			||||||
 | 
					"17 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++++",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+..............++",
 | 
				
			||||||
 | 
					"+............++++",
 | 
				
			||||||
 | 
					"+..........++++++",
 | 
				
			||||||
 | 
					"+........++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...++..+++++++++",
 | 
				
			||||||
 | 
					"+...++..+++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+...+++++++++++++",
 | 
				
			||||||
 | 
					"+........++++++++",
 | 
				
			||||||
 | 
					"+..........++++++",
 | 
				
			||||||
 | 
					"+............++++",
 | 
				
			||||||
 | 
					"+.............+++",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+++++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/one.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/one.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * one_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					"....+++++.....+",
 | 
				
			||||||
 | 
					"....+++++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					".......++.....+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/stereo.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/stereo.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * stereo_xpm[] = {
 | 
				
			||||||
 | 
					"17 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++++",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+..............++",
 | 
				
			||||||
 | 
					"+............++++",
 | 
				
			||||||
 | 
					"+..........+++.++",
 | 
				
			||||||
 | 
					"+........+++...++",
 | 
				
			||||||
 | 
					"+...+++++++....++",
 | 
				
			||||||
 | 
					"+...++++++.....++",
 | 
				
			||||||
 | 
					"+...++..++.....++",
 | 
				
			||||||
 | 
					"+...++..++.....++",
 | 
				
			||||||
 | 
					"+...++++++.....++",
 | 
				
			||||||
 | 
					"+...+++++++....++",
 | 
				
			||||||
 | 
					"+........+++...++",
 | 
				
			||||||
 | 
					"+..........+++.++",
 | 
				
			||||||
 | 
					"+............++++",
 | 
				
			||||||
 | 
					"+.............+++",
 | 
				
			||||||
 | 
					"+................",
 | 
				
			||||||
 | 
					"+++++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/three.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/three.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * three_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					".....+++++....+",
 | 
				
			||||||
 | 
					"....+++++++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"........++....+",
 | 
				
			||||||
 | 
					"......+++.....+",
 | 
				
			||||||
 | 
					"......++++....+",
 | 
				
			||||||
 | 
					"........+++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++...+++...+",
 | 
				
			||||||
 | 
					"....++++++....+",
 | 
				
			||||||
 | 
					".....++++.....+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/two.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/two.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * two_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					".....++++.....+",
 | 
				
			||||||
 | 
					"...+++++++....+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					".........++...+",
 | 
				
			||||||
 | 
					"........+++...+",
 | 
				
			||||||
 | 
					".......+++....+",
 | 
				
			||||||
 | 
					"......+++.....+",
 | 
				
			||||||
 | 
					".....+++......+",
 | 
				
			||||||
 | 
					"....+++.......+",
 | 
				
			||||||
 | 
					"...+++........+",
 | 
				
			||||||
 | 
					"...++.........+",
 | 
				
			||||||
 | 
					"...++++++++...+",
 | 
				
			||||||
 | 
					"...++++++++...+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
							
								
								
									
										23
									
								
								symbols/zero.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								symbols/zero.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * zero_xpm[] = {
 | 
				
			||||||
 | 
					"15 18 2 1",
 | 
				
			||||||
 | 
					".	c #FFFFFF",
 | 
				
			||||||
 | 
					"+	c #000000",
 | 
				
			||||||
 | 
					"+++++++++++++++",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					".....++++.....+",
 | 
				
			||||||
 | 
					"....++++++....+",
 | 
				
			||||||
 | 
					"....++..++....+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"...++....++...+",
 | 
				
			||||||
 | 
					"....++..++....+",
 | 
				
			||||||
 | 
					"....++++++....+",
 | 
				
			||||||
 | 
					".....++++.....+",
 | 
				
			||||||
 | 
					"..............+",
 | 
				
			||||||
 | 
					"+++++++++++++++"};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user