Compare commits

...

2 Commits

Author SHA1 Message Date
Rolf Ahrenberg 5819441c03 Updated Italian translation (Thanks to Diego Pierotto).
Added '-Wno-parentheses' to the compiler options.
2008-01-20 04:20:00 +02:00
Rolf Ahrenberg b0b0fe4f02 Backported from 1.2.2. 2007-10-14 04:20:00 +03:00
10 changed files with 191 additions and 153 deletions

18
COPYING
View File

@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

28
HISTORY
View File

@ -252,3 +252,31 @@ VDR Plugin 'femon' Revision History
2007-05-15: Version 1.1.3
- Fixed a race condition in cFemonReceiver (Thanks to Reinhard Nissl).
2007-10-14: Version 1.1.4
- Backported from 1.2.2.
2008-01-20: Version 1.1.5
- Updated Italian translation (Thanks to Gringo).
- Added '-Wno-parentheses' to the compiler options.
2007-08-14: Version 1.2.0
- Updated for vdr-1.5.7.
2007-08-19: Version 1.2.1
- Updated for vdr-1.5.8.
2007-10-14: Version 1.2.2
- Added Spids support.
- Minor OSD layout changes.
2008-01-20: Version 1.2.3
- Updated Italian translation (Thanks to Gringo).
- Added '-Wno-parentheses' to the compiler options.
- Mapped 'kInfo' as help key in setup menu.

View File

@ -15,17 +15,19 @@ STRIP = strip
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = femon
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).h | awk '{ print $$6 }' | sed -e 's/[";]//g')
VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
@ -67,14 +69,18 @@ all-redirect: all
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o femontools.o
### The main target:
all: libvdr-$(PLUGIN).so
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
# Dependencies:
### Dependencies:
MAKEDEP = g++ -MM -MG
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@ -83,8 +89,6 @@ $(DEPFILE): Makefile
### Targets:
all: libvdr-$(PLUGIN).so
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
ifndef FEMON_DEBUG

7
README
View File

@ -1,11 +1,16 @@
This is a DVB Frontend Status Monitor plugin for the Video Disk Recorder (VDR).
Written by: R o l f . A h r e n b e r g @ s c i . f i
Written by: Rolf Ahrenberg
< R o l f . A h r e n b e r g @ s c i . f i >
Project's homepage: http://www.saunalahti.fi/~rahrenbe/vdr/femon/
Latest version available at: http://www.saunalahti.fi/~rahrenbe/vdr/femon/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for license information.
Requirements:

42
femon.c
View File

@ -14,12 +14,38 @@
#include "femonosd.h"
#include "femonservice.h"
#include "femontools.h"
#include "femon.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10400
#error "VDR-1.4.0 API version or greater is required!"
#endif
static const char VERSION[] = "1.1.5";
static const char DESCRIPTION[] = "DVB Signal Information Monitor (OSD)";
static const char MAINMENUENTRY[] = "Signal Information";
class cPluginFemon : public cPlugin {
public:
cPluginFemon(void);
virtual ~cPluginFemon();
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return tr(DESCRIPTION); }
virtual const char *CommandLineHelp(void);
virtual bool ProcessArgs(int argc, char *argv[]);
virtual bool Initialize(void);
virtual bool Start(void);
virtual void Stop(void);
virtual void Housekeeping(void);
virtual void MainThreadHook(void) {}
virtual cString Active(void) { return NULL; }
virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); }
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value);
virtual bool Service(const char *Id, void *Data);
virtual const char **SVDRPHelpPages(void);
virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
};
cPluginFemon::cPluginFemon()
{
// Initialize any member variables here.
@ -234,6 +260,20 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
return NULL;
}
class cMenuFemonSetup : public cMenuSetupPage {
private:
const char *dispmodes[eFemonModeMaxNumber];
const char *skins[eFemonSkinMaxNumber];
const char *themes[eFemonThemeMaxNumber];
cFemonConfig data;
virtual void Setup(void);
protected:
virtual eOSState ProcessKey(eKeys Key);
virtual void Store(void);
public:
cMenuFemonSetup(void);
};
cMenuFemonSetup::cMenuFemonSetup(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);

56
femon.h
View File

@ -1,56 +0,0 @@
/*
* Frontend Status Monitor plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id$
*/
#ifndef __FEMON_H
#define __FEMON_H
#include <vdr/plugin.h>
static const char VERSION[] = "1.1.3";
static const char DESCRIPTION[] = "DVB Signal Information Monitor (OSD)";
static const char MAINMENUENTRY[] = "Signal Information";
class cPluginFemon : public cPlugin {
public:
cPluginFemon(void);
virtual ~cPluginFemon();
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return tr(DESCRIPTION); }
virtual const char *CommandLineHelp(void);
virtual bool ProcessArgs(int argc, char *argv[]);
virtual bool Initialize(void);
virtual bool Start(void);
virtual void Stop(void);
virtual void Housekeeping(void);
virtual void MainThreadHook(void) {}
virtual cString Active(void) { return NULL; }
virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); }
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value);
virtual bool Service(const char *Id, void *Data);
virtual const char **SVDRPHelpPages(void);
virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
};
class cMenuFemonSetup : public cMenuSetupPage {
private:
const char *dispmodes[eFemonModeMaxNumber];
const char *skins[eFemonSkinMaxNumber];
const char *themes[eFemonThemeMaxNumber];
cFemonConfig data;
virtual void Setup(void);
protected:
virtual eOSState ProcessKey(eKeys Key);
virtual void Store(void);
public:
cMenuFemonSetup(void);
};
#endif //__FEMON_H

View File

@ -12,7 +12,7 @@ const tI18nPhrase Phrases[] = {
{ "DVB Signal Information Monitor (OSD)", // English
"DVB Signal Informationsanzeige (OSD)", // Deutsch
"", // Slovenski
"Visualizza le informazioni sul segnale DVB", // Italiano
"Visualizza informazioni segnale DVB", // Italiano
"", // Nederlands
"", // Português
"Affiche les informations du signal DVB", // Français
@ -34,7 +34,7 @@ const tI18nPhrase Phrases[] = {
{ "Signal Information", // English
"Signalinformationen", // Deutsch
"", // Slovenski
"Informazioni sul segnale", // Italiano
"Informazioni segnale", // Italiano
"", // Nederlands
"", // Português
"Signal DVB", // Français
@ -100,7 +100,7 @@ const tI18nPhrase Phrases[] = {
{ "Horizontal offset", // English
"Horizontaler Offset", // Deutsch
"", // Slovenski
"", // Italiano
"Limite orizzontale", // Italiano
"", // Nederlands
"", // Português
"Déplacement horizontal", // Français
@ -122,7 +122,7 @@ const tI18nPhrase Phrases[] = {
{ "Default display mode", // English
"Standard Anzeigemodus", // Deutsch
"", // Slovenski
"Modo di visualizzazione standard", // Italiano
"Modalità visualizz. standard", // Italiano
"", // Nederlands
"", // Português
"Affichage par défaut", // Français
@ -144,7 +144,7 @@ const tI18nPhrase Phrases[] = {
{ "basic", // English
"Standard", // Deutsch
"", // Slovenski
"", // Italiano
"base", // Italiano
"", // Nederlands
"", // Português
"basique", // Français
@ -166,7 +166,7 @@ const tI18nPhrase Phrases[] = {
{ "transponder", // English
"Transponder", // Deutsch
"", // Slovenski
"", // Italiano
"transponder", // Italiano
"", // Nederlands
"", // Português
"transpondeur", // Français
@ -188,7 +188,7 @@ const tI18nPhrase Phrases[] = {
{ "stream", // English
"Stream", // Deutsch
"", // Slovenski
"", // Italiano
"flusso", // Italiano
"", // Nederlands
"", // Português
"flux", // Français
@ -210,7 +210,7 @@ const tI18nPhrase Phrases[] = {
{ "Skin", // English
"Oberfläche", // Deutsch
"", // Slovenski
"", // Italiano
"Interfaccia", // Italiano
"", // Nederlands
"", // Português
"Skin", // Français
@ -232,7 +232,7 @@ const tI18nPhrase Phrases[] = {
{ "Theme", // English
"Thema", // Deutsch
"", // Slovenski
"", // Italiano
"Tema", // Italiano
"", // Nederlands
"", // Português
"Thème", // Français
@ -254,7 +254,7 @@ const tI18nPhrase Phrases[] = {
{ "Classic", // English
"Klassischer", // Deutsch
"", // Slovenski
"", // Italiano
"Classico", // Italiano
"", // Nederlands
"", // Português
"Classique", // Français
@ -430,7 +430,7 @@ const tI18nPhrase Phrases[] = {
{ "Hide main menu entry", // English
"Hauptmenüeintrag verstecken", // Deutsch
"", // Slovenski
"Nascondi voce menù", // Italiano
"Nascondi voce menu principale", // Italiano
"", // Nederlands
"", // Português
"Masquer dans le menu principal", // Français
@ -452,7 +452,7 @@ const tI18nPhrase Phrases[] = {
{ "OSD update interval [0.1s]", // English
"OSD Updateintervall [0.1s]", // Deutsch
"", // Slovenski
"Intervallo di aggiornamento [0.1s]", // Italiano
"Intervallo aggiornamento OSD [0.1s]", // Italiano
"", // Nederlands
"", // Português
"Intervalle de mise à jour (0,1s)", // Français
@ -474,7 +474,7 @@ const tI18nPhrase Phrases[] = {
{ "Analyze stream", // English
"Stream analysieren", // Deutsch
"", // Slovenski
"", // Italiano
"Analizza flusso", // Italiano
"", // Nederlands
"", // Português
"Analyser le flux", // Français
@ -496,7 +496,7 @@ const tI18nPhrase Phrases[] = {
{ "Calculation interval [0.1s]", // English
"Berechnungsintervall [0.1s]", // Deutsch
"", // Slovenski
"Intervallo di calcolo [0.1s]", // Italiano
"Intervallo calcolo [0.1s]", // Italiano
"", // Nederlands
"", // Português
"Intervalle de calcul (0,1s)", // Français
@ -540,7 +540,7 @@ const tI18nPhrase Phrases[] = {
{ "Green limit [%]", // English
"Grenze Grün [%]", // Deutsch
"", // Slovenski
"Limite de verde [%]", // Italiano
"Limite verde [%]", // Italiano
"", // Nederlands
"", // Português
"Limite du vert (%)", // Français
@ -716,7 +716,7 @@ const tI18nPhrase Phrases[] = {
{ "None", // English
"Nichts", // Deutsch
"None", // Slovenski
"None", // Italiano
"Nessuno", // Italiano
"None", // Nederlands
"None", // Português
"Aucun", // Français
@ -738,7 +738,7 @@ const tI18nPhrase Phrases[] = {
{ "Off", // English
"Aus", // Deutsch
"Off", // Slovenski
"Off", // Italiano
"Disattivo", // Italiano
"Off", // Nederlands
"Off", // Português
"Non", // Français
@ -760,7 +760,7 @@ const tI18nPhrase Phrases[] = {
{ "On", // English
"Ein", // Deutsch
"On", // Slovenski
"On", // Italiano
"Attivo", // Italiano
"On", // Nederlands
"On", // Português
"Oui", // Français
@ -848,7 +848,7 @@ const tI18nPhrase Phrases[] = {
{ "Stream Information", // English
"Streaminformation", // Deutsch
"", // Slovenski
"", // Italiano
"Informazione flusso", // Italiano
"", // Nederlands
"", // Português
"Information flux", // Français
@ -870,7 +870,7 @@ const tI18nPhrase Phrases[] = {
{ "MPEG Layer", // English
"MPEG Layer", // Deutsch
"", // Slovenski
"", // Italiano
"Formato MPEG", // Italiano
"", // Nederlands
"", // Português
"MPEG Layer", // Français
@ -892,7 +892,7 @@ const tI18nPhrase Phrases[] = {
{ "Video Stream", // English
"Video Stream", // Deutsch
"", // Slovenski
"", // Italiano
"Flusso video", // Italiano
"", // Nederlands
"", // Português
"Flux vidéo", // Français
@ -914,7 +914,7 @@ const tI18nPhrase Phrases[] = {
{ "Bitrate", // English
"Bitrate", // Deutsch
"", // Slovenski
"", // Italiano
"Bitrate", // Italiano
"", // Nederlands
"", // Português
"Bitrate", // Français
@ -936,7 +936,7 @@ const tI18nPhrase Phrases[] = {
{ "Frame Rate", // English
"Bildrate", // Deutsch
"", // Slovenski
"", // Italiano
"Frame rate", // Italiano
"", // Nederlands
"", // Português
"Rafraîchissement", // Français
@ -980,7 +980,7 @@ const tI18nPhrase Phrases[] = {
{ "Aspect Ratio", // English
"Seitenverhältnis", // Deutsch
"", // Slovenski
"", // Italiano
"Dimensione immagine", // Italiano
"", // Nederlands
"", // Português
"Proportions d'image", // Français
@ -1002,7 +1002,7 @@ const tI18nPhrase Phrases[] = {
{ "reserved", // English
"belegt", // Deutsch
"", // Slovenski
"", // Italiano
"riservato", // Italiano
"", // Nederlands
"", // Português
"réservé", // Français
@ -1024,7 +1024,7 @@ const tI18nPhrase Phrases[] = {
{ "free", // English
"frei", // Deutsch
"", // Slovenski
"", // Italiano
"libero", // Italiano
"", // Nederlands
"", // Português
"libre", // Français
@ -1046,7 +1046,7 @@ const tI18nPhrase Phrases[] = {
{ "Video Format", // English
"Bildformat", // Deutsch
"", // Slovenski
"", // Italiano
"Formato video", // Italiano
"", // Nederlands
"", // Português
"Standard vidéo", // Français
@ -1112,7 +1112,7 @@ const tI18nPhrase Phrases[] = {
{ "unknown", // English
"unbekannt", // Deutsch
"", // Slovenski
"", // Italiano
"sconosciuto", // Italiano
"", // Nederlands
"", // Português
"inconnu", // Français
@ -1134,7 +1134,7 @@ const tI18nPhrase Phrases[] = {
{ "Resolution", // English
"Auflösung", // Deutsch
"", // Slovenski
"", // Italiano
"Risoluzione", // Italiano
"", // Nederlands
"", // Português
"Résolution", // Français
@ -1156,7 +1156,7 @@ const tI18nPhrase Phrases[] = {
{ "Audio Stream", // English
"Audio Stream", // Deutsch
"", // Slovenski
"", // Italiano
"Flusso audio", // Italiano
"", // Nederlands
"", // Português
"Flux audio", // Français
@ -1178,7 +1178,7 @@ const tI18nPhrase Phrases[] = {
{ "Sampling Frequency", // English
"Abtastrate", // Deutsch
"", // Slovenski
"", // Italiano
"Frequenza campionamento", // Italiano
"", // Nederlands
"", // Português
"Fréquence d'échantillonage", // Français
@ -1376,7 +1376,7 @@ const tI18nPhrase Phrases[] = {
{ "not indicated", // English
"nicht angegeben", // Deutsch
"", // Slovenski
"", // Italiano
"non indicato", // Italiano
"", // Nederlands
"", // Português
"non indiqué", // Français
@ -1420,7 +1420,7 @@ const tI18nPhrase Phrases[] = {
{ "AC-3 Stream", // English
"AC-3 Stream", // Deutsch
"", // Slovenski
"", // Italiano
"Flusso AC-3", // Italiano
"", // Nederlands
"", // Português
"Flux AC-3", // Français
@ -1442,7 +1442,7 @@ const tI18nPhrase Phrases[] = {
{ "Frame Size", // English
"Frame Größe", // Deutsch
"", // Slovenski
"", // Italiano
"Dimensione frame", // Italiano
"", // Nederlands
"", // Português
"Taille de paquet", // Français
@ -1464,7 +1464,7 @@ const tI18nPhrase Phrases[] = {
{ "Bit Stream Mode", // English
"Bitstream Modus", // Deutsch
"", // Slovenski
"", // Italiano
"Modalità bitstream", // Italiano
"", // Nederlands
"", // Português
"Mode bitstream", // Français
@ -1486,7 +1486,7 @@ const tI18nPhrase Phrases[] = {
{ "Audio Coding Mode", // English
"Audiokodierung", // Deutsch
"", // Slovenski
"", // Italiano
"Modalità codifica audio", // Italiano
"", // Nederlands
"", // Português
"Mode de codage audio", // Français
@ -1508,7 +1508,7 @@ const tI18nPhrase Phrases[] = {
{ "Center Mix Level", // English
"Center Mix Pegel", // Deutsch
"", // Slovenski
"", // Italiano
"Livello sonoro centrale", // Italiano
"", // Nederlands
"", // Português
"Niveau sonore milieu", // Français
@ -1530,7 +1530,7 @@ const tI18nPhrase Phrases[] = {
{ "Surround Mix Level", // English
"Surround Mix Pegel", // Deutsch
"", // Slovenski
"", // Italiano
"Livello sonoro surround", // Italiano
"", // Nederlands
"", // Português
"Niveau sonore surround", // Français
@ -1552,7 +1552,7 @@ const tI18nPhrase Phrases[] = {
{ "Dolby Surround Mode", // English
"Dolby Surround Modus", // Deutsch
"", // Slovenski
"", // Italiano
"Modalità Dolby Surround", // Italiano
"", // Nederlands
"", // Português
"Mode Dolby Surround", // Français
@ -1574,7 +1574,7 @@ const tI18nPhrase Phrases[] = {
{ "Low Frequency Effects", // English
"Tieftöner Effekte", // Deutsch
"", // Slovenski
"", // Italiano
"Effetti bassa frequenza", // Italiano
"", // Nederlands
"", // Português
"Effets de basses", // Français
@ -1596,7 +1596,7 @@ const tI18nPhrase Phrases[] = {
{ "Dialogue Normalization", // English
"Dialog Normalisierung", // Deutsch
"", // Slovenski
"", // Italiano
"Normalizzazione dialoghi", // Italiano
"", // Nederlands
"", // Português
"Normalisation des dialogues", // Français
@ -1618,7 +1618,7 @@ const tI18nPhrase Phrases[] = {
{ "Complete Main (CM)", // English
"Complete Main (CM)", // Deutsch
"", // Slovenski
"", // Italiano
"Principale (CM)", // Italiano
"", // Nederlands
"", // Português
"Principal (CM)", // Français
@ -1640,7 +1640,7 @@ const tI18nPhrase Phrases[] = {
{ "Music and Effects (ME)", // English
"Musik und Effekte (ME)", // Deutsch
"", // Slovenski
"", // Italiano
"Musica ed effetti (ME)", // Italiano
"", // Nederlands
"", // Português
"Musique et effets (ME)", // Français
@ -1662,7 +1662,7 @@ const tI18nPhrase Phrases[] = {
{ "Visually Impaired (VI)", // English
"Sehbehindert (VI)", // Deutsch
"", // Slovenski
"", // Italiano
"Immagine alterata (VI)", // Italiano
"", // Nederlands
"", // Português
"Malvoyants (VI)", // Français
@ -1684,7 +1684,7 @@ const tI18nPhrase Phrases[] = {
{ "Hearing Impaired (HI)", // English
"Hörbehindert (HI)", // Deutsch
"", // Slovenski
"", // Italiano
"Suono deteriorato (HI)", // Italiano
"", // Nederlands
"", // Português
"Malentendants (HI)", // Français
@ -1706,7 +1706,7 @@ const tI18nPhrase Phrases[] = {
{ "Dialogue (D)", // English
"Dialog (D)", // Deutsch
"", // Slovenski
"", // Italiano
"Dialogo (D)", // Italiano
"", // Nederlands
"", // Português
"Dialogue (D)", // Français
@ -1728,7 +1728,7 @@ const tI18nPhrase Phrases[] = {
{ "Commentary (C)", // English
"Kommentar (C)", // Deutsch
"", // Slovenski
"", // Italiano
"Commenti (C)", // Italiano
"", // Nederlands
"", // Português
"Commentaires (C)", // Français
@ -1750,7 +1750,7 @@ const tI18nPhrase Phrases[] = {
{ "Emergency (E)", // English
"Notfall (E)", // Deutsch
"", // Slovenski
"", // Italiano
"Emergenza (E)", // Italiano
"", // Nederlands
"", // Português
"Urgence (E)", // Français
@ -1772,7 +1772,7 @@ const tI18nPhrase Phrases[] = {
{ "Voice Over (VO)", // English
"Überlagerte Stimme (VO)", // Deutsch
"", // Slovenski
"", // Italiano
"Voce off (VO)", // Italiano
"", // Nederlands
"", // Português
"Voix off (VO)", // Français
@ -1794,7 +1794,7 @@ const tI18nPhrase Phrases[] = {
{ "Karaoke", // English
"Karaoke", // Deutsch
"", // Slovenski
"", // Italiano
"Karaoke", // Italiano
"", // Nederlands
"", // Português
"Karaoke", // Français
@ -1816,7 +1816,7 @@ const tI18nPhrase Phrases[] = {
{ "Ch1", // English "Channel 1"
"Kan1", // Deutsch
"", // Slovenski
"", // Italiano
"Can. 1", // Italiano
"", // Nederlands
"", // Português
"Can. 1", // Français
@ -1838,7 +1838,7 @@ const tI18nPhrase Phrases[] = {
{ "Ch2", // English "Channel 2"
"Kan2", // Deutsch
"", // Slovenski
"", // Italiano
"Can. 2", // Italiano
"", // Nederlands
"", // Português
"Can. 2", // Français
@ -1860,7 +1860,7 @@ const tI18nPhrase Phrases[] = {
{ "C", // English "Center"
"C", // Deutsch
"", // Slovenski
"", // Italiano
"C", // Italiano
"", // Nederlands
"", // Português
"Centre", // Français
@ -1882,7 +1882,7 @@ const tI18nPhrase Phrases[] = {
{ "L", // English "Left"
"L", // Deutsch
"", // Slovenski
"", // Italiano
"S", // Italiano
"", // Nederlands
"", // Português
"Gauche", // Français
@ -1904,7 +1904,7 @@ const tI18nPhrase Phrases[] = {
{ "R", // English "Right"
"R", // Deutsch
"", // Slovenski
"", // Italiano
"D", // Italiano
"", // Nederlands
"", // Português
"Droite", // Français
@ -1926,7 +1926,7 @@ const tI18nPhrase Phrases[] = {
{ "S", // English "Surround"
"S", // Deutsch
"", // Slovenski
"", // Italiano
"S", // Italiano
"", // Nederlands
"", // Português
"Surround", // Français
@ -1948,7 +1948,7 @@ const tI18nPhrase Phrases[] = {
{ "SL", // English "Surround Left"
"SL", // Deutsch
"", // Slovenski
"", // Italiano
"SS", // Italiano
"", // Nederlands
"", // Português
"Surround gauche", // Français
@ -1970,7 +1970,7 @@ const tI18nPhrase Phrases[] = {
{ "SR", // English "Surround Right"
"SR", // Deutsch
"", // Slovenski
"", // Italiano
"SD", // Italiano
"", // Nederlands
"", // Português
"Surround droit", // Français
@ -1992,7 +1992,7 @@ const tI18nPhrase Phrases[] = {
{ "Show CA system", // English
"CA System anzeigen", // Deutsch
"", // Slovenski
"", // Italiano
"Mostra sistema CA", // Italiano
"", // Nederlands
"", // Português
"Système CA", // Français
@ -2014,7 +2014,7 @@ const tI18nPhrase Phrases[] = {
{ "Fixed", // English
"Fest", // Deutsch
"", // Slovenski
"", // Italiano
"Fisso", // Italiano
"", // Nederlands
"", // Português
"Fixe", // Français
@ -2036,7 +2036,7 @@ const tI18nPhrase Phrases[] = {
{ "Analog", // English
"Analog", // Deutsch
"", // Slovenski
"", // Italiano
"Analogico", // Italiano
"", // Nederlands
"", // Português
"Analogique", // Français
@ -2058,7 +2058,7 @@ const tI18nPhrase Phrases[] = {
{ "Free to Air", // English
"Frei empfangbar", // Deutsch
"", // Slovenski
"", // Italiano
"In chiaro", // Italiano
"", // Nederlands
"", // Português
"Free To Air", // Français
@ -2080,7 +2080,7 @@ const tI18nPhrase Phrases[] = {
{ "SECA/Mediaguard", // English
"SECA/Mediaguard", // Deutsch
"", // Slovenski
"", // Italiano
"SECA/Mediaguard", // Italiano
"", // Nederlands
"", // Português
"SECA/Mediaguard", // Français
@ -2102,7 +2102,7 @@ const tI18nPhrase Phrases[] = {
{ "Viaccess", // English
"Viaccess", // Deutsch
"", // Slovenski
"", // Italiano
"Viaccess", // Italiano
"", // Nederlands
"", // Português
"Viaccess", // Français
@ -2124,7 +2124,7 @@ const tI18nPhrase Phrases[] = {
{ "Irdeto", // English
"Irdeto", // Deutsch
"", // Slovenski
"", // Italiano
"Irdeto", // Italiano
"", // Nederlands
"", // Português
"Irdeto", // Français
@ -2146,7 +2146,7 @@ const tI18nPhrase Phrases[] = {
{ "NDS/Videoguard", // English
"NDS/Videoguard", // Deutsch
"", // Slovenski
"", // Italiano
"NDS/Videoguard", // Italiano
"", // Nederlands
"", // Português
"NDS/Videoguard", // Français
@ -2168,7 +2168,7 @@ const tI18nPhrase Phrases[] = {
{ "Conax", // English
"Conax", // Deutsch
"", // Slovenski
"", // Italiano
"Conax", // Italiano
"", // Nederlands
"", // Português
"Conax", // Français
@ -2190,7 +2190,7 @@ const tI18nPhrase Phrases[] = {
{ "CryptoWorks", // English
"CryptoWorks", // Deutsch
"", // Slovenski
"", // Italiano
"CryptoWorks", // Italiano
"", // Nederlands
"", // Português
"CryptoWorks", // Français
@ -2212,7 +2212,7 @@ const tI18nPhrase Phrases[] = {
{ "PowerVu", // English
"PowerVu", // Deutsch
"", // Slovenski
"", // Italiano
"PowerVu", // Italiano
"", // Nederlands
"", // Português
"PowerVu", // Français
@ -2234,7 +2234,7 @@ const tI18nPhrase Phrases[] = {
{ "BetaCrypt", // English
"BetaCrypt", // Deutsch
"", // Slovenski
"", // Italiano
"BetaCrypt", // Italiano
"", // Nederlands
"", // Português
"BetaCrypt", // Français
@ -2256,7 +2256,7 @@ const tI18nPhrase Phrases[] = {
{ "NagraVision", // English
"NagraVision", // Deutsch
"", // Slovenski
"", // Italiano
"NagraVision", // Italiano
"", // Nederlands
"", // Português
"NagraVision", // Français
@ -2278,7 +2278,7 @@ const tI18nPhrase Phrases[] = {
{ "SkyCrypt", // English
"SkyCrypt", // Deutsch
"", // Slovenski
"", // Italiano
"SkyCrypt", // Italiano
"", // Nederlands
"", // Português
"SkyCrypt", // Français
@ -2300,7 +2300,7 @@ const tI18nPhrase Phrases[] = {
{ "Use SVDRP service", // English
"SVDRP Service verwenden", // Deutsch
"", // Slovenski
"", // Italiano
"Utilizza servizio SVDRP", // Italiano
"", // Nederlands
"", // Português
"", // Français
@ -2322,7 +2322,7 @@ const tI18nPhrase Phrases[] = {
{ "SVDRP service IP", // English
"SVDRP Service IP", // Deutsch
"", // Slovenski
"", // Italiano
"IP servizio SVDRP", // Italiano
"", // Nederlands
"", // Português
"", // Français
@ -2344,7 +2344,7 @@ const tI18nPhrase Phrases[] = {
{ "SVDRP service port", // English
"SVDRP Service Port", // Deutsch
"", // Slovenski
"", // Italiano
"Porta servizio SVDRP", // Italiano
"", // Nederlands
"", // Português
"", // Français
@ -2366,7 +2366,7 @@ const tI18nPhrase Phrases[] = {
{ "Femon not available while replaying", // English
"", // Deutsch
"", // Slovenski
"", // Italiano
"Femon non disponibile durante la riproduzione", // Italiano
"", // Nederlands
"", // Português
"", // Français

View File

@ -44,7 +44,7 @@
#define OSDHEIGHT femonConfig.osdheight // in pixels
#define OSDWIDTH 600 // in pixels
#define OSDROWHEIGHT m_Font->Height() // in pixels
#define OSDINFOHEIGHT (OSDROWHEIGHT * 11) // in pixels (11 rows)
#define OSDINFOHEIGHT (OSDROWHEIGHT * 12) // in pixels (12 rows)
#define OSDSTATUSHEIGHT (OSDROWHEIGHT * 6) // in pixels (6 rows)
#define OSDSPACING 5
#define OSDCORNERING 10
@ -319,8 +319,8 @@ void cFemonOsd::DrawInfoWindow(void)
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *getDpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Spid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getSpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Tpid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
@ -334,6 +334,9 @@ void cFemonOsd::DrawInfoWindow(void)
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Rid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Rid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
switch (m_FrontendInfo.type) {
case FE_QPSK:
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s #%d - %s", tr("Satellite Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
@ -432,6 +435,7 @@ void cFemonOsd::DrawInfoWindow(void)
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), m_Receiver ? *cString::sprintf("%d x %d", m_Receiver->VideoHorizontalSize(), m_Receiver->VideoVerticalSize()) : *cString::sprintf("---"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
offset += OSDROWHEIGHT;
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%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)), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;
@ -451,13 +455,16 @@ void cFemonOsd::DrawInfoWindow(void)
else if (m_DisplayMode == eFemonModeAC3) {
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground);
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground);
m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%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)), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Stream Information"), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
if (IS_OSDCORNERING) {
m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2);
m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1);
}
offset += OSDROWHEIGHT;
if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("AC-3 Stream"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", channel->Dpid(int(track - ttDolbyFirst)), channel->Dlang(int(track - ttDolbyFirst))), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
offset += OSDROWHEIGHT;
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("%s (%s)", *getBitrateKbits(m_Receiver->AC3StreamBitrate()), *getBitrateKbits(m_Receiver->AC3Bitrate())), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
offset += OSDROWHEIGHT;

View File

@ -165,6 +165,15 @@ cString getDpids(const cChannel *channel)
return dpids;
}
cString getSpids(const cChannel *channel)
{
int value = 0;
cString spids = cString::sprintf("%d", channel->Spid(value));
while (channel->Spid(++value) && (value < MAXSPIDS))
spids = cString::sprintf("%s, %d", *spids, channel->Spid(value));
return spids;
}
cString getCAids(const cChannel *channel, bool identify)
{
cString caids;

View File

@ -33,6 +33,7 @@ uint32_t getUNC(int cardIndex = 0);
cString getApids(const cChannel *channel);
cString getDpids(const cChannel *channel);
cString getSpids(const cChannel *channel);
cString getCAids(const cChannel *channel, bool identify = false);
cString getCA(int value);
cString getCoderate(int value);