Updated for vdr-1.3.36.

Added french translation (Thanks to Nicolas Huillard).
Enabled bitrate commands via SVDRP.
Added new SVDRP commands.
Modified femon service without incrementing version number.
Added "Duotone" theme for 2bpp on screen displays.
Fixed crash bug in femonreceiver.
Fixed setup page bug (Thanks to Thomas Günther for reporting this one).
This commit is contained in:
Rolf Ahrenberg 2005-11-13 04:20:00 +02:00
parent e2fb9e994a
commit 7da8cb2110
16 changed files with 323 additions and 178 deletions

11
HISTORY
View File

@ -183,3 +183,14 @@ VDR Plugin 'femon' Revision History
- Added Enigma theme (Thanks to Rolf Hoverath).
- Added EgalsTry theme (Thanks to Uwe Hanke).
- Added option to disable rounded corners.
2005-11-13: Version 0.9.5
- Updated for vdr-1.3.36.
- Added french translation (Thanks to Nicolas Huillard).
- Enabled bitrate commands via SVDRP.
- Added new SVDRP commands.
- Modified femon service without incrementing version number.
- Added "Duotone" theme for 2bpp on screen displays.
- Fixed crash bug in femonreceiver.
- Fixed setup page bug (Thanks to Thomas Günther for reporting this one).

View File

@ -16,11 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).h | awk '{ pri
### The C++ compiler and options:
CXX ?= g++
ifdef FEMON_DEBUG
CXXFLAGS ?= -g -Wall -Woverloaded-virtual -fPIC
else
CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual -fPIC
endif
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
### The directory environment:

5
README
View File

@ -77,9 +77,8 @@ make plugins
Notes:
- The plugin supports only those DVB cards with _one_ frontend (do any cards
with multiple frontends even exist?), because I haven't yet figured howto do
it without patching the VDR core.
- The plugin supports only those DVB cards with _one_ frontend, because I
haven't yet figured howto do it without patching the VDR core.
- Disable the stream analyze to speed up heavy zapping sessions.

116
femon.c
View File

@ -6,6 +6,7 @@
* $Id$
*/
#include <vdr/remote.h>
#include "femoncfg.h"
#include "femoni18n.h"
#include "femonreceiver.h"
@ -14,20 +15,22 @@
#include "femontools.h"
#include "femon.h"
#if defined(VDRVERSNUM) && VDRVERSNUM < 10334
#if defined(VDRVERSNUM) && VDRVERSNUM < 10336
#error "You don't exist! Go away! Upgrade yourself!"
#endif
cPluginFemon::cPluginFemon(void)
cPluginFemon::cPluginFemon()
{
// Initialize any member variables here.
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
// VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
Dprintf("%s()\n", __PRETTY_FUNCTION__);
}
cPluginFemon::~cPluginFemon()
{
// Clean up after yourself!
Dprintf("%s()\n", __PRETTY_FUNCTION__);
}
const char *cPluginFemon::CommandLineHelp(void)
@ -68,7 +71,8 @@ void cPluginFemon::Housekeeping(void)
cOsdObject *cPluginFemon::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
return new cFemonOsd();
Dprintf("%s()\n", __PRETTY_FUNCTION__);
return cFemonOsd::Instance(true);
}
bool cPluginFemon::SetupParse(const char *Name, const char *Value)
@ -106,8 +110,9 @@ bool cPluginFemon::Service(const char *Id, void *Data)
data->fe_signal = getSignal(ndx);
data->fe_ber = getBER(ndx);
data->fe_unc = getUNC(ndx);
data->video_bitrate = getVideoBitrate();
data->audio_bitrate = getAudioBitrate();
data->video_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetVideoBitrate() : 0.0;
data->audio_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetAudioBitrate() : 0.0;
data->dolby_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetDolbyBitrate() : 0.0;
return true;
}
@ -117,6 +122,14 @@ bool cPluginFemon::Service(const char *Id, void *Data)
const char **cPluginFemon::SVDRPHelpPages(void)
{
static const char *HelpPages[] = {
"OPEN\n"
" Open femon plugin.",
"QUIT\n"
" Close femon plugin.",
"NEXT\n"
" Switch to next possible device.",
"PREV\n"
" Switch to previous possible device.",
"NAME\n"
" Print the current frontend name.",
"STAT\n"
@ -130,9 +143,11 @@ const char **cPluginFemon::SVDRPHelpPages(void)
"UNCB\n"
" Print the current uncorrcted blocks rate.",
"VIBR\n"
" Print the current video bitrate [Mbit/s].",
" Print the actual device and current video bitrate [Mbit/s].",
"AUBR\n"
" Print the current audio bitrate [kbit/s].",
" Print the actual device and current audio bitrate [kbit/s].",
"DDBR\n"
" Print the actual device and current dolby bitrate [kbit/s].",
NULL
};
return HelpPages;
@ -140,35 +155,72 @@ const char **cPluginFemon::SVDRPHelpPages(void)
cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
{
if (strcasecmp(Command, "NAME") == 0) {
if (strcasecmp(Command, "OPEN") == 0) {
if (!cFemonOsd::Instance())
cRemote::CallPlugin("femon");
return cString("Opening femon plugin");
}
else if (strcasecmp(Command, "QUIT") == 0) {
if (cFemonOsd::Instance())
cRemote::Put(kBack);
return cString("Closing femon plugin");
}
else if (strcasecmp(Command, "NEXT") == 0) {
if (cFemonOsd::Instance())
return cString::sprintf("Switching to next device: %s", cFemonOsd::Instance()->DeviceSwitch(1) ? "ok" : "failed");
else
return cString("Cannot switch device");
}
else if (strcasecmp(Command, "PREV") == 0) {
if (cFemonOsd::Instance())
return cString::sprintf("Switching to previous device: %s", cFemonOsd::Instance()->DeviceSwitch(-1) ? "ok" : "failed");
else
return cString("Cannot switch device");
}
else if (strcasecmp(Command, "NAME") == 0) {
return getFrontendName(cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "STAT") == 0) {
return getFrontendStatus(cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "SGNL") == 0) {
return cString::sprintf("%04X", getSignal(cDevice::ActualDevice()->CardIndex()));
int value = getSignal(cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "SNRA") == 0) {
return cString::sprintf("%04X", getSNR(cDevice::ActualDevice()->CardIndex()));
int value = getSNR(cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "BERA") == 0) {
return cString::sprintf("%08X", getBER(cDevice::ActualDevice()->CardIndex()));
return cString::sprintf("%08X on device #%d", getBER(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "UNCB") == 0) {
return cString::sprintf("%08X", getUNC(cDevice::ActualDevice()->CardIndex()));
return cString::sprintf("%08X on device #%d", getUNC(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "VIBR") == 0) {
return cString::sprintf("%.2f", getVideoBitrate());
if (cFemonOsd::Instance())
return cString::sprintf("%.2f Mbit/s on device #%d", cFemonOsd::Instance()->GetVideoBitrate(), cDevice::ActualDevice()->CardIndex());
else
return cString::sprintf("--- Mbit/s on device #%d", cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "AUBR") == 0) {
return cString::sprintf("%.0f", getAudioBitrate());
if (cFemonOsd::Instance())
return cString::sprintf("%.0f kbit/s on device #%d", cFemonOsd::Instance()->GetAudioBitrate(), cDevice::ActualDevice()->CardIndex());
else
return cString::sprintf("--- kbit/s on device #%d", cDevice::ActualDevice()->CardIndex());
}
else if (strcasecmp(Command, "DDBR") == 0) {
if (cFemonOsd::Instance())
return cString::sprintf("%.0f kbit/s on device #%d", cFemonOsd::Instance()->GetDolbyBitrate(), cDevice::ActualDevice()->CardIndex());
else
return cString::sprintf("--- kbit/s on device #%d", cDevice::ActualDevice()->CardIndex());
}
return NULL;
}
cMenuFemonSetup::cMenuFemonSetup(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
dispmodes[eFemonModeBasic] = tr("basic");
dispmodes[eFemonModeTransponder] = tr("transponder");
dispmodes[eFemonModeStream] = tr("stream");
@ -183,7 +235,9 @@ cMenuFemonSetup::cMenuFemonSetup(void)
themes[eFemonThemeMoronimo] = tr("Moronimo");
themes[eFemonThemeEnigma] = tr("Enigma");
themes[eFemonThemeEgalsTry] = tr("EgalsTry");
themes[eFemonThemeDuotone] = tr("Duotone");
data = femonConfig;
Setup();
}
@ -192,21 +246,21 @@ void cMenuFemonSetup::Setup(void)
int current = Current();
Clear();
Add(new cMenuEditBoolItem( tr("Hide main menu entry"), &femonConfig.hidemenu, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Use syslog output"), &femonConfig.syslogoutput, tr("no"), tr("yes")));
Add(new cMenuEditStraItem( tr("Default display mode"), &femonConfig.displaymode, eFemonModeMaxNumber, dispmodes));
Add(new cMenuEditStraItem( tr("Skin"), &femonConfig.skin, eFemonSkinMaxNumber, skins));
Add(new cMenuEditStraItem( tr("Theme"), &femonConfig.theme, eFemonThemeMaxNumber,themes));
Add(new cMenuEditBoolItem( tr("Position"), &femonConfig.position, tr("bottom"), tr("top")));
Add(new cMenuEditIntItem( tr("Height"), &femonConfig.osdheight, 400, 500));
Add(new cMenuEditIntItem( tr("Horizontal offset"), &femonConfig.osdoffset, -50, 50));
Add(new cMenuEditBoolItem( tr("Show CA system"), &femonConfig.showcasystem, tr("no"), tr("yes")));
Add(new cMenuEditIntItem( tr("Red limit [%]"), &femonConfig.redlimit, 1, 50));
Add(new cMenuEditIntItem( tr("Green limit [%]"), &femonConfig.greenlimit, 51, 100));
Add(new cMenuEditIntItem( tr("OSD update interval [0.1s]"), &femonConfig.updateinterval, 1, 100));
Add(new cMenuEditBoolItem( tr("Analyze stream"), &femonConfig.analyzestream, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Hide main menu entry"), &data.hidemenu, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Use syslog output"), &data.syslogoutput, tr("no"), tr("yes")));
Add(new cMenuEditStraItem( tr("Default display mode"), &data.displaymode, eFemonModeMaxNumber, dispmodes));
Add(new cMenuEditStraItem( tr("Skin"), &data.skin, eFemonSkinMaxNumber, skins));
Add(new cMenuEditStraItem( tr("Theme"), &data.theme, eFemonThemeMaxNumber,themes));
Add(new cMenuEditBoolItem( tr("Position"), &data.position, tr("bottom"), tr("top")));
Add(new cMenuEditIntItem( tr("Height"), &data.osdheight, 400, 500));
Add(new cMenuEditIntItem( tr("Horizontal offset"), &data.osdoffset, -50, 50));
Add(new cMenuEditBoolItem( tr("Show CA system"), &data.showcasystem, tr("no"), tr("yes")));
Add(new cMenuEditIntItem( tr("Red limit [%]"), &data.redlimit, 1, 50));
Add(new cMenuEditIntItem( tr("Green limit [%]"), &data.greenlimit, 51, 100));
Add(new cMenuEditIntItem( tr("OSD update interval [0.1s]"), &data.updateinterval, 1, 100));
Add(new cMenuEditBoolItem( tr("Analyze stream"), &data.analyzestream, tr("no"), tr("yes")));
if (femonConfig.analyzestream)
Add(new cMenuEditIntItem(tr("Calculation interval [0.1s]"), &femonConfig.calcinterval, 1, 100));
Add(new cMenuEditIntItem(tr("Calculation interval [0.1s]"), &data.calcinterval, 1, 100));
SetCurrent(Get(current));
Display();
@ -214,6 +268,8 @@ void cMenuFemonSetup::Setup(void)
void cMenuFemonSetup::Store(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
femonConfig = data;
SetupStore("HideMenu", femonConfig.hidemenu);
SetupStore("SyslogOutput", femonConfig.syslogoutput);
SetupStore("DisplayMode", femonConfig.displaymode);
@ -232,11 +288,11 @@ void cMenuFemonSetup::Store(void)
eOSState cMenuFemonSetup::ProcessKey(eKeys Key)
{
int oldAnalyzestream = femonConfig.analyzestream;
int oldAnalyzestream = data.analyzestream;
eOSState state = cMenuSetupPage::ProcessKey(Key);
if (Key != kNone && (femonConfig.analyzestream != oldAnalyzestream)) {
if (Key != kNone && (data.analyzestream != oldAnalyzestream)) {
Setup();
}

View File

@ -11,13 +11,11 @@
#include <vdr/plugin.h>
static const char *VERSION = "0.9.4";
static const char *VERSION = "0.9.5";
static const char *DESCRIPTION = "DVB Signal Information Monitor (OSD)";
static const char *MAINMENUENTRY = "Signal Information";
class cPluginFemon : public cPlugin {
private:
// Add any member variables or functions you may need here.
public:
cPluginFemon(void);
virtual ~cPluginFemon();
@ -43,6 +41,7 @@ class cMenuFemonSetup : public cMenuSetupPage {
const char *dispmodes[eFemonModeMaxNumber];
const char *skins[eFemonSkinMaxNumber];
const char *themes[eFemonThemeMaxNumber];
cFemonConfig data;
virtual void Setup(void);
protected:
virtual eOSState ProcessKey(eKeys Key);

View File

@ -36,6 +36,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
{
{
// eFemonThemeClassic
4, // bpp
0x7F000000, // clrBackground
0xFFFCFCFC, // clrTitleBackground
0xFF000000, // clrTitleText
@ -47,6 +48,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
},
{
// eFemonThemeElchi
4, // bpp
0xC8000066, // clrBackground
0xC833AAEE, // clrTitleBackground
0xFF000000, // clrTitleText
@ -58,6 +60,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
},
{
// eFemonThemeDeepBlue
4, // bpp
0xC80C0C0C, // clrBackground
0xC832557A, // clrTitleBackground
0xFF000000, // clrTitleText
@ -69,6 +72,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
},
{
// eFemonThemeMoronimo
4, // bpp
0xDF294A6B, // clrBackground
0xDF3E5578, // clrTitleBackground
0xFF9BBAD7, // clrTitleText
@ -80,6 +84,7 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
},
{
// eFemonThemeEnigma
4, // bpp
0xB8DEE5FA, // clrBackground
0xB84158BC, // clrTitleBackground
0xFFFFFFFF, // clrTitleText
@ -100,4 +105,16 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
0xFFFCC024, // clrYellow
0xFF20980B, // clrGreen
},
{
// eFemonThemeDuotone
2, // bpp
0x7F000000, // clrBackground
0xFFFCFCFC, // clrTitleBackground
0x7F000000, // clrTitleText
0xFFFCFCFC, // clrActiveText
0xFFFCFCFC, // clrInactiveText
0xFFFC1414, // clrRed
0xFFFCFCFC, // clrYellow
0xFFFCFCFC, // clrGreen
},
};

View File

@ -55,11 +55,13 @@ enum eFemonThemes
eFemonThemeMoronimo,
eFemonThemeEnigma,
eFemonThemeEgalsTry,
eFemonThemeDuotone,
eFemonThemeMaxNumber
};
struct cFemonTheme
{
int bpp;
int clrBackground;
int clrTitleBackground;
int clrTitleText;

View File

@ -16,7 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ pri
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual -fPIC
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
### The directory environment:

View File

@ -40,6 +40,7 @@ cOsdObject *cPluginFemonClient::MainMenuAction(void)
printf("UNC : %08X\n", femon.fe_unc);
printf("Video : %.2f Mbit/s\n", femon.video_bitrate);
printf("Audio : %.0f kbit/s\n", femon.audio_bitrate);
printf("Dolby : %.0f kbit/s\n", femon.dolby_bitrate);
}
else
printf("\n--- No support for FemonService-v1.0 found ---\n");

View File

@ -15,7 +15,7 @@ const tI18nPhrase Phrases[] = {
"Visualizza le informazioni sul segnale DVB", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Affiche les informations du signal DVB", // Français
"", // Norsk
"Signaalimittari (OSD)", // suomi
"", // Polski
@ -36,7 +36,7 @@ const tI18nPhrase Phrases[] = {
"Informazioni sul segnale", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Signal DVB", // Français
"", // Norsk
"Signaalimittari", // suomi
"", // Polski
@ -57,7 +57,7 @@ const tI18nPhrase Phrases[] = {
"Posizione", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Position", // Français
"", // Norsk
"Sijainti", // suomi
"", // Polski
@ -78,7 +78,7 @@ const tI18nPhrase Phrases[] = {
"Altezza", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Hauteur", // Français
"", // Norsk
"Korkeus", // suomi
"", // Polski
@ -99,7 +99,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Déplacement horizontal", // Français
"", // Norsk
"Vaakakeskitys", // suomi
"", // Polski
@ -120,7 +120,7 @@ const tI18nPhrase Phrases[] = {
"Modo di visualizzazione standard", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Affichage par défaut", // Français
"", // Norsk
"Oletusnäyttötila", // suomi
"", // Polski
@ -141,7 +141,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"basique", // Français
"", // Norsk
"perus", // suomi
"", // Polski
@ -162,7 +162,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"transpondeur", // Français
"", // Norsk
"transponderi", // suomi
"", // Polski
@ -183,7 +183,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"flux", // Français
"", // Norsk
"lähete", // suomi
"", // Polski
@ -204,7 +204,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Skin", // Français
"", // Norsk
"Ulkoasu", // suomi
"", // Polski
@ -225,7 +225,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Thème", // Français
"", // Norsk
"Teema", // suomi
"", // Polski
@ -246,7 +246,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Classique", // Français
"", // Norsk
"Klassinen", // suomi
"", // Polski
@ -366,13 +366,34 @@ const tI18nPhrase Phrases[] = {
"EgalsTry", // Eesti
"EgalsTry", // Dansk
},
{ "Duotone", // English
"Duotone", // Deutsch
"Duotone", // Slovenski
"Duotone", // Italiano
"Duotone", // Nederlands
"Duotone", // Português
"Duotone", // Français
"Duotone", // Norsk
"Duotone", // suomi
"Duotone", // Polski
"Duotone", // Español
"Duotone", // ÅëëçíéêÜ (Greek)
"Duotone", // Svenska
"Duotone", // Romaneste
"Duotone", // Magyar
"Duotone", // Català
"Duotone", // ÀãááÚØÙ (Russian)
"Duotone", // Hrvatski (Croatian)
"Duotone", // Eesti
"Duotone", // Dansk
},
{ "Hide main menu entry", // English
"Hauptmenüeintrag verstecken", // Deutsch
"", // Slovenski
"Nascondi voce menů", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Masquer dans le menu principal", // Français
"", // Norsk
"Piilota valinta päävalikosta", // suomi
"", // Polski
@ -393,7 +414,7 @@ const tI18nPhrase Phrases[] = {
"Intervallo di aggiornamento [0.1s]", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Intervalle de mise à jour (0,1s)", // Français
"", // Norsk
"Näytön päivitysväli [0.1s]", // suomi
"", // Polski
@ -414,7 +435,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Analyser le flux", // Français
"", // Norsk
"Lähetteen analysointi", // suomi
"", // Polski
@ -435,7 +456,7 @@ const tI18nPhrase Phrases[] = {
"Intervallo di calcolo [0.1s]", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Intervalle de calcul (0,1s)", // Français
"", // Norsk
"Laskennan päivitysväli [0.1s]", // suomi
"", // Polski
@ -456,7 +477,7 @@ const tI18nPhrase Phrases[] = {
"Limite rosso [%]", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Limite du rouge (%)", // Français
"", // Norsk
"Punaisen taso [%]", // suomi
"", // Polski
@ -477,7 +498,7 @@ const tI18nPhrase Phrases[] = {
"Limite verde [%]", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Limite du vert (%)", // Français
"", // Norsk
"Vihreän taso [%]", // suomi
"", // Polski
@ -498,7 +519,7 @@ const tI18nPhrase Phrases[] = {
"Informazioni transponder", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Information transpondeur", // Français
"", // Norsk
"Transponderin tiedot", // suomi
"", // Polski
@ -519,7 +540,7 @@ const tI18nPhrase Phrases[] = {
"Scheda satellitare", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Carte Satellite", // Français
"", // Norsk
"Satelliittikortti", // suomi
"", // Polski
@ -540,7 +561,7 @@ const tI18nPhrase Phrases[] = {
"Scheda via cavo", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Carte Câble", // Français
"", // Norsk
"Kaapelikortti", // suomi
"", // Polski
@ -561,7 +582,7 @@ const tI18nPhrase Phrases[] = {
"Scheda terrestre", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Carte TNT", // Français
"", // Norsk
"Terrestiaalikortti", // suomi
"", // Polski
@ -582,7 +603,7 @@ const tI18nPhrase Phrases[] = {
"Registra su syslog", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Enregistrer les infos dans syslog", // Français
"", // Norsk
"Kirjaa systeemilokiin", // suomi
"", // Polski
@ -624,7 +645,7 @@ const tI18nPhrase Phrases[] = {
"Video", // Italiano
"Video", // Nederlands
"Video", // Portuguęs
"Video", // Français
"Vidéo", // Français
"Video", // Norsk
"Kuva", // suomi
"Video", // Polski
@ -666,7 +687,7 @@ const tI18nPhrase Phrases[] = {
"None", // Italiano
"None", // Nederlands
"None", // Portuguęs
"None", // Français
"Aucun", // Français
"None", // Norsk
"ei", // suomi
"None", // Polski
@ -687,7 +708,7 @@ const tI18nPhrase Phrases[] = {
"Off", // Italiano
"Off", // Nederlands
"Off", // Portuguęs
"Off", // Français
"Non", // Français
"Off", // Norsk
"poissa", // suomi
"Off", // Polski
@ -708,7 +729,7 @@ const tI18nPhrase Phrases[] = {
"On", // Italiano
"On", // Nederlands
"On", // Portuguęs
"On", // Français
"Oui", // Français
"On", // Norsk
"päällä", // suomi
"On", // Polski
@ -792,7 +813,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Information flux", // Français
"", // Norsk
"Lähetteen tiedot", // suomi
"", // Polski
@ -813,7 +834,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"MPEG Layer", // Français
"", // Norsk
"MPEG-taso", // suomi
"", // Polski
@ -834,7 +855,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Flux vidéo", // Français
"", // Norsk
"Kuvaraita", // suomi
"", // Polski
@ -855,7 +876,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Bitrate", // Français
"", // Norsk
"Bittinopeus", // suomi
"", // Polski
@ -876,7 +897,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Rafraîchissement", // Français
"", // Norsk
"Ruudunpäivitysnopeus", // suomi
"", // Polski
@ -918,7 +939,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Proportions d'image", // Français
"", // Norsk
"Kuvasuhde", // suomi
"", // Polski
@ -939,7 +960,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"réservé", // Français
"", // Norsk
"varattu", // suomi
"", // Polski
@ -960,7 +981,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"libre", // Français
"", // Norsk
"vapaa", // suomi
"", // Polski
@ -981,7 +1002,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Standard vidéo", // Français
"", // Norsk
"Kuvaformaatti", // suomi
"", // Polski
@ -1044,7 +1065,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"inconnu", // Français
"", // Norsk
"tuntematon", // suomi
"", // Polski
@ -1065,7 +1086,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Résolution", // Français
"", // Norsk
"Resoluutio", // suomi
"", // Polski
@ -1086,7 +1107,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Flux audio", // Français
"", // Norsk
"Ääniraita", // suomi
"", // Polski
@ -1107,7 +1128,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Fréquence d'échantillonage", // Français
"", // Norsk
"Näytteenottotaajuus", // suomi
"", // Polski
@ -1296,7 +1317,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"non indiqué", // Français
"", // Norsk
"ei ilmaistu", // suomi
"", // Polski
@ -1338,7 +1359,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Flux AC-3", // Français
"", // Norsk
"AC-3-ääniraita", // suomi
"", // Polski
@ -1359,7 +1380,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Taille de paquet", // Français
"", // Norsk
"Kehyksen koko", // suomi
"", // Polski
@ -1380,7 +1401,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Mode bitstream", // Français
"", // Norsk
"Lähetteen tyyppi", // suomi
"", // Polski
@ -1401,7 +1422,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Mode de codage audio", // Français
"", // Norsk
"Äänikoodaus", // suomi
"", // Polski
@ -1422,7 +1443,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Niveau sonore milieu", // Français
"", // Norsk
"Keskikanavan taso", // suomi
"", // Polski
@ -1443,7 +1464,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Niveau sonore surround", // Français
"", // Norsk
"Tehostekanavien taso", // suomi
"", // Polski
@ -1464,7 +1485,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Mode Dolby Surround", // Français
"", // Norsk
"Dolby Surround -tehoste", // suomi
"", // Polski
@ -1485,7 +1506,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Effets de basses", // Français
"", // Norsk
"LFE-kanava", // suomi
"", // Polski
@ -1506,7 +1527,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Normalisation des dialogues", // Français
"", // Norsk
"Dialogin normalisointi", // suomi
"", // Polski
@ -1527,7 +1548,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Principal (CM)", // Français
"", // Norsk
"Pääasiallinen (CM)", // suomi
"", // Polski
@ -1548,7 +1569,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Musique et effets (ME)", // Français
"", // Norsk
"Musiikki ja tehosteet (ME)", // suomi
"", // Polski
@ -1569,7 +1590,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Malvoyants (VI)", // Français
"", // Norsk
"Näkörajoitteinen (VI)", // suomi
"", // Polski
@ -1590,7 +1611,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Malentendants (HI)", // Français
"", // Norsk
"Kuulorajoitteinen (HI)", // suomi
"", // Polski
@ -1611,7 +1632,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Dialogue (D)", // Français
"", // Norsk
"Vuoropuhelu (D)", // suomi
"", // Polski
@ -1632,7 +1653,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Commentaires (C)", // Français
"", // Norsk
"Kommentointi (C)", // suomi
"", // Polski
@ -1653,7 +1674,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Urgence (E)", // Français
"", // Norsk
"Hätätiedote (E)", // suomi
"", // Polski
@ -1674,7 +1695,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Voix off (VO)", // Français
"", // Norsk
"Päälle puhuttu (VO)", // suomi
"", // Polski
@ -1695,7 +1716,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Karaoke", // Français
"", // Norsk
"Karaoke", // suomi
"", // Polski
@ -1716,7 +1737,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Can. 1", // Français
"", // Norsk
"kan. 1", // suomi
"", // Polski
@ -1737,7 +1758,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Can. 2", // Français
"", // Norsk
"kan. 2", // suomi
"", // Polski
@ -1758,7 +1779,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Centre", // Français
"", // Norsk
"K", // suomi
"", // Polski
@ -1779,7 +1800,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Gauche", // Français
"", // Norsk
"V", // suomi
"", // Polski
@ -1800,7 +1821,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Droite", // Français
"", // Norsk
"O", // suomi
"", // Polski
@ -1821,7 +1842,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Surround", // Français
"", // Norsk
"T", // suomi
"", // Polski
@ -1842,7 +1863,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Surround gauche", // Français
"", // Norsk
"TV", // suomi
"", // Polski
@ -1863,7 +1884,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Surround droit", // Français
"", // Norsk
"TO", // suomi
"", // Polski
@ -1884,7 +1905,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Système CA", // Français
"", // Norsk
"Näytä salausjärjestelmä", // suomi
"", // Polski
@ -1905,7 +1926,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Fixe", // Français
"", // Norsk
"kiinteä", // suomi
"", // Polski
@ -1926,7 +1947,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Analogique", // Français
"", // Norsk
"analoginen", // suomi
"", // Polski
@ -1947,7 +1968,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Free To Air", // Français
"", // Norsk
"salaamaton", // suomi
"", // Polski
@ -1968,7 +1989,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"SECA/Mediaguard", // Français
"", // Norsk
"SECA/Mediaguard", // suomi
"", // Polski
@ -1989,7 +2010,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Viaccess", // Français
"", // Norsk
"Viaccess", // suomi
"", // Polski
@ -2010,7 +2031,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Irdeto", // Français
"", // Norsk
"Irdeto", // suomi
"", // Polski
@ -2031,7 +2052,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"NDS/Videoguard", // Français
"", // Norsk
"NDS/Videoguard", // suomi
"", // Polski
@ -2052,7 +2073,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"Conax", // Français
"", // Norsk
"Conax", // suomi
"", // Polski
@ -2073,7 +2094,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"CryptoWorks", // Français
"", // Norsk
"CryptoWorks", // suomi
"", // Polski
@ -2094,7 +2115,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"PowerVu", // Français
"", // Norsk
"PowerVu", // suomi
"", // Polski
@ -2115,7 +2136,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"BetaCrypt", // Français
"", // Norsk
"BetaCrypt", // suomi
"", // Polski
@ -2136,7 +2157,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"NagraVision", // Français
"", // Norsk
"NagraVision", // suomi
"", // Polski
@ -2157,7 +2178,7 @@ const tI18nPhrase Phrases[] = {
"", // Italiano
"", // Nederlands
"", // Portuguęs
"", // Français
"SkyCrypt", // Français
"", // Norsk
"SkyCrypt", // suomi
"", // Polski

View File

@ -81,7 +81,19 @@ cBitmap cFemonOsd::bmCarrier(carrier_xpm);
cBitmap cFemonOsd::bmViterbi(viterbi_xpm);
cBitmap cFemonOsd::bmSync(sync_xpm);
cFemonOsd::cFemonOsd(void)
cFemonOsd *cFemonOsd::pInstance = NULL;
cFemonOsd *cFemonOsd::Instance(bool create)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
if (pInstance == NULL && create)
{
pInstance = new cFemonOsd();
}
return (pInstance);
}
cFemonOsd::cFemonOsd()
:cOsdObject(true), cThread("femon osd")
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
@ -110,13 +122,13 @@ cFemonOsd::cFemonOsd(void)
cFemonOsd::~cFemonOsd(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
if (Running()) {
if (Running())
Cancel(3);
}
if (m_Receiver)
delete m_Receiver;
if (m_Osd)
delete m_Osd;
pInstance = NULL;
}
void cFemonOsd::DrawStatusWindow(void)
@ -903,13 +915,13 @@ void cFemonOsd::Show(void)
}
m_Osd = cOsdProvider::NewOsd(((Setup.OSDWidth - OSDWIDTH) / 2) + Setup.OSDLeft + femonConfig.osdoffset, ((Setup.OSDHeight - OSDHEIGHT) / 2) + Setup.OSDTop);
if (m_Osd) {
tArea Areas1[] = { { 0, 0, OSDWIDTH, OSDHEIGHT, 4 } };
tArea Areas1[] = { { 0, 0, OSDWIDTH, OSDHEIGHT, femonTheme[femonConfig.theme].bpp } };
if (m_Osd->CanHandleAreas(Areas1, sizeof(Areas1) / sizeof(tArea)) == oeOk) {
m_Osd->SetAreas(Areas1, sizeof(Areas1) / sizeof(tArea));
}
else {
tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0), (OSDWIDTH-1), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-1), 4 },
{ 0, OSDINFOWIN_Y(0), (OSDWIDTH-1), OSDINFOWIN_Y(OSDROWHEIGHT-1), 4 },
tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0), (OSDWIDTH-1), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-1), femonTheme[femonConfig.theme].bpp },
{ 0, OSDINFOWIN_Y(0), (OSDWIDTH-1), OSDINFOWIN_Y(OSDROWHEIGHT-1), femonTheme[femonConfig.theme].bpp },
{ 0, OSDINFOWIN_Y(OSDROWHEIGHT), (OSDWIDTH-1), OSDINFOWIN_Y(OSDINFOHEIGHT-1), 2 } };
m_Osd->SetAreas(Areas2, sizeof(Areas2) / sizeof(tArea));
}
@ -980,6 +992,69 @@ void cFemonOsd::SetAudioTrack(int Index, const char * const *Tracks)
}
}
bool cFemonOsd::DeviceSwitch(int direction)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
int device = cDevice::ActualDevice()->DeviceNumber();
direction = sgn(direction);
if (device >= 0) {
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
if (direction) {
if (++device >= cDevice::NumDevices()) device = 0;
}
else {
if (--device < 0) device = cDevice::NumDevices() - 1;
}
if (cDevice::GetDevice(device)->ProvidesChannel(channel)) {
Dprintf("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, direction, device);
// here should be added some checks, if the device is really available (i.e. not recording)
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0);
cControl::Shutdown();
cDevice::GetDevice(device)->SwitchChannel(channel, true);
// does this work with primary devices ?
cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apids(), channel->Dpids(), channel->Spids()));
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number());
return (true);
}
}
}
return (false);
}
double cFemonOsd::GetVideoBitrate(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
double value = 0.0;
if (m_Receiver)
value = m_Receiver->VideoBitrate();
return (value);
}
double cFemonOsd::GetAudioBitrate(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
double value = 0.0;
if (m_Receiver)
value = m_Receiver->AudioBitrate();
return (value);
}
double cFemonOsd::GetDolbyBitrate(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
double value = 0.0;
if (m_Receiver)
value = m_Receiver->AC3Bitrate();
return (value);
}
eOSState cFemonOsd::ProcessKey(eKeys Key)
{
eOSState state = cOsdObject::ProcessKey(Key);
@ -1060,32 +1135,10 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
}
break;
case kRight:
DeviceSwitch(1);
break;
case kLeft:
{
int device = cDevice::ActualDevice()->DeviceNumber();
if (device >= 0) {
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
if (NORMALKEY(Key) == kRight) {
if (++device >= cDevice::NumDevices()) device = 0;
}
else {
if (--device < 0) device = cDevice::NumDevices() - 1;
}
if (cDevice::GetDevice(device)->ProvidesChannel(channel)) {
Dprintf("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, Key, device);
// here should be added some checks, if the device is really available (i.e. not recording)
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0);
cControl::Shutdown();
cDevice::GetDevice(device)->SwitchChannel(channel, true);
// does this work with primary devices ?
cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apids(), channel->Dpids(), channel->Spids()));
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number());
break;
}
}
}
}
DeviceSwitch(-1);
break;
case kUp|k_Repeat:
case kUp:

View File

@ -21,6 +21,7 @@
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
private:
static cFemonOsd *pInstance;
cOsd *m_Osd;
cFemonReceiver *m_Receiver;
int m_Frontend;
@ -44,16 +45,24 @@ private:
void DrawInfoWindow(void);
protected:
cFemonOsd();
cFemonOsd(const cFemonOsd&);
cFemonOsd& operator= (const cFemonOsd&);
virtual void Action(void);
virtual void ChannelSwitch(const cDevice * device, int channelNumber);
virtual void SetAudioTrack(int Index, const char * const *Tracks);
public:
cFemonOsd(void);
static cFemonOsd *Instance(bool create = false);
~cFemonOsd();
virtual void Show(void);
virtual eOSState ProcessKey(eKeys Key);
bool DeviceSwitch(int direction);
double GetVideoBitrate(void);
double GetAudioBitrate(void);
double GetDolbyBitrate(void);
};
#endif //__FEMONOSD_H

View File

@ -58,9 +58,8 @@ cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[])
cFemonReceiver::~cFemonReceiver(void)
{
Dprintf("%s()\n", __PRETTY_FUNCTION__);
Detach();
if (Running())
Cancel();
Cancel(3);
}
/* The following function originates from libdvbmpeg: */

View File

@ -20,6 +20,7 @@ struct FemonService_v1_0 {
uint32_t fe_unc;
double video_bitrate;
double audio_bitrate;
double dolby_bitrate;
};
#endif //__FEMONSERVICE_H

View File

@ -25,7 +25,7 @@ cString getFrontendName(int cardIndex)
ioctl(fe, FE_GET_INFO, &value);
close(fe);
return (cString::sprintf("#%d %s", cardIndex, value.name));
return (cString::sprintf("%s on device #%d", value.name, cardIndex));
}
cString getFrontendStatus(int cardIndex)
@ -41,7 +41,7 @@ cString getFrontendStatus(int cardIndex)
CHECK(ioctl(fe, FE_READ_STATUS, &value));
close(fe);
return (cString::sprintf("%s:%s:%s:%s:%s", (value & FE_HAS_LOCK) ? "LOCKED" : "-", (value & FE_HAS_SIGNAL) ? "SIGNAL" : "-", (value & FE_HAS_CARRIER) ? "CARRIER" : "-", (value & FE_HAS_VITERBI) ? "VITERBI" : "-", (value & FE_HAS_SYNC) ? "SYNC" : "-"));
return (cString::sprintf("Status %s:%s:%s:%s:%s on device #%d", (value & FE_HAS_LOCK) ? "LOCKED" : "-", (value & FE_HAS_SIGNAL) ? "SIGNAL" : "-", (value & FE_HAS_CARRIER) ? "CARRIER" : "-", (value & FE_HAS_VITERBI) ? "VITERBI" : "-", (value & FE_HAS_SYNC) ? "SYNC" : "-", cardIndex));
}
uint16_t getSignal(int cardIndex)
@ -108,20 +108,3 @@ uint32_t getUNC(int cardIndex)
return (value);
}
double getVideoBitrate(void)
{
double value = 0.0;
// Not yet implemented.
return (value);
}
double getAudioBitrate(void)
{
double value = 0.0;
// Not yet implemented.
return (value);
}

View File

@ -26,7 +26,5 @@ uint16_t getSNR(int cardIndex = 0);
uint16_t getSignal(int cardIndex = 0);
uint32_t getBER(int cardIndex = 0);
uint32_t getUNC(int cardIndex = 0);
double getVideoBitrate(void);
double getAudioBitrate(void);
#endif // __FEMONTOOLS_H