1
0
mirror of https://github.com/rofafor/vdr-plugin-femon.git synced 2023-10-10 11:36:53 +00:00

Compare commits

..

20 Commits

Author SHA1 Message Date
Rolf Ahrenberg
315a3365ba Updated for vdr-1.7.27. 2012-03-25 16:55:42 +03:00
Rolf Ahrenberg
8e1e025b0f Updated default CXXFLAGS. 2012-03-25 16:02:16 +03:00
Rolf Ahrenberg
543accdd06 Cleaned up compilation warnings again. 2012-03-19 18:09:16 +02:00
Rolf Ahrenberg
66eca7f8b5 Fixed channel switching.
Cleaned up compilation warnings.
2012-03-12 21:59:34 +02:00
Rolf Ahrenberg
905b7c0870 Updated for a new release version. 2012-03-10 23:07:03 +02:00
Rolf Ahrenberg
597425a271 Updated for vdr-1.7.26. 2012-03-10 23:05:38 +02:00
Rolf Ahrenberg
86210928b8 Updated for vdr-1.7.25. 2012-03-03 15:19:18 +02:00
Rolf Ahrenberg
c98fe8ca87 Added a GIT tag into the version string. 2012-02-26 22:54:18 +02:00
Rolf Ahrenberg
5598f7cc43 Silenced compilation warnings. 2012-02-19 18:54:19 +02:00
Rolf Ahrenberg
62f1f5f776 Updated Makefile. 2012-02-19 17:48:21 +02:00
Rolf Ahrenberg
8ba74bf5c4 Silenced compilation warnings - again. 2012-02-05 18:21:07 +02:00
Rolf Ahrenberg
38fbb2d47d Updated translation files. 2012-02-05 14:08:01 +02:00
Rolf Ahrenberg
09cf40f215 Added initial support for PVRINPUT devices (Thanks to Winfried Köhler).
Added initial support for IPTV devices.
2012-02-05 14:04:04 +02:00
Rolf Ahrenberg
d809e98052 Silenced a compilation warning. 2012-02-05 11:39:14 +02:00
Rolf Ahrenberg
5e16064c33 Fixed an invalid character. 2012-01-15 23:25:31 +02:00
Rolf Ahrenberg
cf8920ddd6 Updated for vdr-1.7.23.
Updated SVDRP interface.
2012-01-15 23:07:53 +02:00
Rolf Ahrenberg
1e3b10faa7 Added Hungarian translation (Thanks to Fuley Istvan) and incremented version number. 2011-12-23 15:28:06 +02:00
Rolf Ahrenberg
b7a41c8d78 Merge branch 'master' of ssh://arabuusimiehet.com/git/femon 2011-12-09 16:00:40 +02:00
Rolf Ahrenberg
635f99fda6 Merge branch 'master' of ssh://arabuusimiehet.com/git/femon 2011-11-28 16:30:56 +02:00
Rolf Ahrenberg
0f45bd7f51 Fixed scan/framerate settings in the H.264 analyzer. 2011-11-21 13:48:46 +02:00
29 changed files with 771 additions and 253 deletions

25
HISTORY
View File

@@ -421,3 +421,28 @@ VDR Plugin 'femon' Revision History
and quality used to provide information for the OSD.
- Added cppcheck target into Makefile.
- Refactored bitstream code.
2012-01-15: Version 1.7.12
- Updated for vdr-1.7.23.
- Updated SVDRP interface.
- Added Hungarian translation (Thanks to Fuley Istvan).
2012-02-05: Version 1.7.13
- Added initial support for PVRINPUT devices (Thanks to Winfried Köhler).
- Added initial support for IPTV devices.
2012-03-10: Version 1.7.14
- Updated for vdr-1.7.26.
2012-03-12: Version 1.7.15
- Cleaned up compilation warnings.
- Fixed channel switching.
2012-03-25: Version 1.7.16
- Updated for vdr-1.7.27.
- Cleaned up compilation warnings again.

View File

@@ -19,18 +19,19 @@ PLUGIN = femon
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
GITTAG = $(shell git describe --always 2>/dev/null)
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -fPIC -g -O3 -Wall -Wextra -Wswitch-default -Wfloat-equal -Wundef -Wpointer-arith -Wconversion -Wcast-align -Wredundant-decls -Wno-unused-parameter -Woverloaded-virtual -Wno-parentheses
CXXFLAGS ?= -fPIC -g -O3 -Wall -Wextra -Wswitch-default -Wfloat-equal -Wundef -Wpointer-arith -Wconversion -Wcast-align -Wredundant-decls -Wno-unused-parameter -Werror=overloaded-virtual -Wno-parentheses
LDFLAGS ?= -Wl,--as-needed
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
VDRDIR ?= ../../..
LIBDIR ?= ../../lib
TMPDIR ?= /tmp
### Make sure that necessary options are included:
@@ -59,6 +60,10 @@ ifdef FEMON_DEBUG
DEFINES += -DDEBUG
endif
ifneq ($(strip $(GITTAG)),)
DEFINES += -DGITVERSION='"-GIT-$(GITTAG)"'
endif
.PHONY: all all-redirect
all-redirect: all

94
femon.c
View File

@@ -14,11 +14,15 @@
#include "femonservice.h"
#include "femontools.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10722
#error "VDR-1.7.22 API version or greater is required!"
#if defined(APIVERSNUM) && APIVERSNUM < 10727
#error "VDR-1.7.27 API version or greater is required!"
#endif
static const char VERSION[] = "1.7.11";
#ifndef GITVERSION
#define GITVERSION ""
#endif
static const char VERSION[] = "1.7.16" GITVERSION;
static const char DESCRIPTION[] = trNOOP("DVB Signal Information Monitor (OSD)");
static const char MAINMENUENTRY[] = trNOOP("Signal Information");
@@ -135,13 +139,13 @@ bool cPluginFemon::Service(const char *Id, void *Data)
FemonService_v1_0 *data = (FemonService_v1_0*)Data;
if (!cDevice::ActualDevice())
return false;
int ndx = cDevice::ActualDevice()->CardIndex();
data->fe_name = getFrontendName(ndx);
data->fe_status = getFrontendStatus(ndx);
data->fe_snr = getSNR(ndx);
data->fe_signal = getSignal(ndx);
data->fe_ber = getBER(ndx);
data->fe_unc = getUNC(ndx);
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice());
data->fe_name = getFrontendName(dev);
data->fe_status = getFrontendStatus(dev);
data->fe_snr = getSNR(dev);
data->fe_signal = getSignal(dev);
data->fe_ber = getBER(dev);
data->fe_unc = getUNC(dev);
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;
@@ -163,30 +167,30 @@ const char **cPluginFemon::SVDRPHelpPages(void)
" Switch to next possible device.",
"PREV\n"
" Switch to previous possible device.",
"INFO\n"
" Print the current frontend information.",
"NAME\n"
" Print the current frontend name.",
"STAT\n"
" Print the current frontend status.",
"STRG\n"
" Print the current signal strength.",
"QUAL\n"
" Print the current signal quality.",
"SGNL\n"
" Print the current signal strength from driver.",
"SNRA\n"
" Print the current signal-to-noise ratio from driver.",
"BERA\n"
" Print the current bit error rate.",
"UNCB\n"
" Print the current uncorrected blocks rate.",
"INFO <card index>\n"
" Print the frontend information.",
"NAME <card index>\n"
" Print the frontend name.",
"STAT <card index>\n"
" Print the frontend status.",
"STRG <card index>\n"
" Print the signal strength.",
"QUAL <card index>\n"
" Print the signal quality.",
"SGNL <card index>\n"
" Print the signal strength from driver.",
"SNRA <card index>\n"
" Print the signal-to-noise ratio from driver.",
"BERA <card index>\n"
" Print the bit error rate.",
"UNCB <card index>\n"
" Print the uncorrected blocks rate.",
"VIBR\n"
" Print the actual device and current video bitrate [Mbit/s].",
" Print the current video bitrate [Mbit/s].",
"AUBR\n"
" Print the actual device and current audio bitrate [kbit/s].",
" Print the current audio bitrate [kbit/s].",
"DDBR\n"
" Print the actual device and current dolby bitrate [kbit/s].",
" Print the current dolby bitrate [kbit/s].",
NULL
};
return HelpPages;
@@ -194,6 +198,12 @@ const char **cPluginFemon::SVDRPHelpPages(void)
cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
{
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice());
if (*Option && isnumber(Option)) {
cDvbDevice *dev2 = dynamic_cast<cDvbDevice*>(cDevice::GetDevice(int(strtol(Option, NULL, 10))));
if (dev2)
dev = dev2;
}
if (strcasecmp(Command, "OPEN") == 0) {
if (cReplayControl::NowReplaying()) {
ReplyCode = 550; // Requested action not taken
@@ -221,33 +231,33 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
return cString("Cannot switch device");
}
else if (strcasecmp(Command, "INFO") == 0) {
return getFrontendInfo(cDevice::ActualDevice()->CardIndex());
return getFrontendInfo(dev);
}
else if (strcasecmp(Command, "NAME") == 0) {
return getFrontendName(cDevice::ActualDevice()->CardIndex());
return getFrontendName(dev);
}
else if (strcasecmp(Command, "STAT") == 0) {
return getFrontendStatus(cDevice::ActualDevice()->CardIndex());
return getFrontendStatus(dev);
}
else if (strcasecmp(Command, "STRG") == 0) {
return cString::sprintf("%d on device #%d", cDevice::ActualDevice()->SignalStrength(), cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%d on device #%d", dev->SignalStrength(), dev->CardIndex());
}
else if (strcasecmp(Command, "QUAL") == 0) {
return cString::sprintf("%d on device #%d", cDevice::ActualDevice()->SignalQuality(), cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%d on device #%d", dev->SignalQuality(), dev->CardIndex());
}
else if (strcasecmp(Command, "SGNL") == 0) {
int value = getSignal(cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
int value = getSignal(dev);
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, dev->CardIndex());
}
else if (strcasecmp(Command, "SNRA") == 0) {
int value = getSNR(cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
int value = getSNR(dev);
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, dev->CardIndex());
}
else if (strcasecmp(Command, "BERA") == 0) {
return cString::sprintf("%08X on device #%d", getBER(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%08X on device #%d", getBER(dev), dev->CardIndex());
}
else if (strcasecmp(Command, "UNCB") == 0) {
return cString::sprintf("%08X on device #%d", getUNC(cDevice::ActualDevice()->CardIndex()), cDevice::ActualDevice()->CardIndex());
return cString::sprintf("%08X on device #%d", getUNC(dev), dev->CardIndex());
}
else if (strcasecmp(Command, "VIBR") == 0) {
if (cFemonOsd::Instance())

View File

@@ -10,7 +10,7 @@
#define IS_HEAAC_AUDIO(buf) (((buf)[0] == 0xFF) && (((buf)[1] & 0xF6) == 0xF0))
unsigned int cFemonAAC::s_Samplerates[16] =
int cFemonAAC::s_Samplerates[16] =
{
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, -1, -1, -1, -1
};

View File

@@ -14,7 +14,7 @@ class cFemonAAC {
private:
cFemonAudioIf *m_AudioHandler;
static unsigned int s_Samplerates[16];
static int s_Samplerates[16];
public:
cFemonAAC(cFemonAudioIf *audiohandler);

View File

@@ -9,17 +9,17 @@
#include "femontools.h"
#include "femonac3.h"
unsigned int cFemonAC3::s_Bitrates[32] =
int cFemonAC3::s_Bitrates[32] =
{
32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 576, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
unsigned int cFemonAC3::s_Frequencies[4] =
int cFemonAC3::s_Frequencies[4] =
{
480, 441, 320, 0
};
unsigned int cFemonAC3::s_Frames[3][32] =
int cFemonAC3::s_Frames[3][32] =
{
{64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 640, 768, 896, 1024, 1152, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{69, 87, 104, 121, 139, 174, 208, 243, 278, 348, 417, 487, 557, 696, 835, 975, 1114, 1253, 1393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

View File

@@ -14,9 +14,9 @@ class cFemonAC3 {
private:
cFemonAC3If *m_AudioHandler;
static unsigned int s_Bitrates[32];
static unsigned int s_Frequencies[4];
static unsigned int s_Frames[3][32];
static int s_Bitrates[32];
static int s_Frequencies[4];
static int s_Frames[3][32];
public:
cFemonAC3(cFemonAC3If *audiohandler);

View File

@@ -65,14 +65,14 @@ enum eFemonThemes
struct cFemonTheme
{
int bpp;
int clrBackground;
int clrTitleBackground;
int clrTitleText;
int clrActiveText;
int clrInactiveText;
int clrRed;
int clrYellow;
int clrGreen;
unsigned int clrBackground;
unsigned int clrTitleBackground;
unsigned int clrTitleText;
unsigned int clrActiveText;
unsigned int clrInactiveText;
unsigned int clrRed;
unsigned int clrYellow;
unsigned int clrGreen;
};
extern const cFemonTheme femonTheme[eFemonThemeMaxNumber];

View File

@@ -8,14 +8,14 @@
#include "femontools.h"
#include "femonlatm.h"
unsigned int cFemonLATM::s_Bitrates[3][16] =
int cFemonLATM::s_Bitrates[3][16] =
{
{0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, -1}, // MPEG-2 Layer I
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1}, // MPEG-2 Layer II/III
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1} // MPEG-2 Layer II/III
};
unsigned int cFemonLATM::s_Samplerates[4] =
int cFemonLATM::s_Samplerates[4] =
{
22050, 24000, 16000, -1
};

View File

@@ -14,8 +14,8 @@ class cFemonLATM {
private:
cFemonAudioIf *m_AudioHandler;
static unsigned int s_Bitrates[3][16];
static unsigned int s_Samplerates[4];
static int s_Bitrates[3][16];
static int s_Samplerates[4];
public:
cFemonLATM(cFemonAudioIf *audiohandler);

View File

@@ -10,7 +10,7 @@
#define IS_EXTENSION_START(buf) (((buf)[0] == 0x00) && ((buf)[1] == 0x00) && ((buf)[2] == 0x01) && ((buf)[3] == 0xB5))
unsigned int cFemonMPEG::s_Bitrates[2][3][16] =
int cFemonMPEG::s_Bitrates[2][3][16] =
{
{
{0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, -1}, // MPEG-2 Layer I
@@ -24,7 +24,7 @@ unsigned int cFemonMPEG::s_Bitrates[2][3][16] =
}
};
unsigned int cFemonMPEG::s_Samplerates[2][4] =
int cFemonMPEG::s_Samplerates[2][4] =
{
{22050, 24000, 16000, -1}, // MPEG-2
{44100, 48000, 32000, -1} // MPEG-1

View File

@@ -16,9 +16,9 @@ private:
cFemonVideoIf *m_VideoHandler;
cFemonAudioIf *m_AudioHandler;
static unsigned int s_Bitrates[2][3][16];
static unsigned int s_Samplerates[2][4];
static eAudioCodec s_Formats[2][4];
static int s_Bitrates[2][3][16];
static int s_Samplerates[2][4];
static eAudioCodec s_Formats[2][4];
public:
cFemonMPEG(cFemonVideoIf *videohandler, cFemonAudioIf *audiohandler);

View File

@@ -183,7 +183,9 @@ cFemonOsd::cFemonOsd()
m_BERValid(false),
m_UNC(0),
m_UNCValid(false),
m_FrontendName(""),
m_FrontendStatusValid(false),
m_DeviceSource(DEVICESOURCE_DVBAPI),
m_DisplayMode(femonConfig.displaymode),
m_OsdWidth(cOsd::OsdWidth() * (100 - femonConfig.downscale) / 100),
m_OsdHeight(cOsd::OsdHeight() * (100 - femonConfig.downscale) / 100),
@@ -199,7 +201,7 @@ cFemonOsd::cFemonOsd()
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
m_SvdrpConnection.handle = -1;
femonSymbols.Refresh();
m_Font = cFont::CreateFont(Setup.FontSml, min(max(Setup.FontSmlSize, MINFONTSIZE), MAXFONTSIZE));
m_Font = cFont::CreateFont(Setup.FontSml, constrain(Setup.FontSmlSize, MINFONTSIZE, MAXFONTSIZE));
if (!m_Font || !m_Font->Height()) {
m_Font = new cFemonDummyFont;
error("cFemonOsd::cFemonOsd() cannot create required font.");
@@ -419,7 +421,7 @@ void cFemonOsd::DrawInfoWindow(void)
offset += OSDROWHEIGHT;
switch (channel->Source() & cSource::st_Mask) {
case cSource::stSat:
OSDDRAWINFOLINE(*cString::sprintf("DVB-S%s #%d - %s", (m_FrontendInfo.caps & 0x10000000) ? "2" : "", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name));
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getSatelliteSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source()));
@@ -430,12 +432,13 @@ void cFemonOsd::DrawInfoWindow(void)
OSDDRAWINFOLEFT( trVDR("Inversion"), *getInversion(dtp.Inversion()));
OSDDRAWINFORIGHT(trVDR("CoderateH"), *getCoderate(dtp.CoderateH()));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("System"), *getSystem(dtp.System()));
OSDDRAWINFOLEFT( trVDR("System"), *getSatelliteSystem(dtp.System()));
if (dtp.System())
OSDDRAWINFORIGHT(trVDR("RollOff"), *getRollOff(dtp.RollOff()));
break;
case cSource::stCable:
OSDDRAWINFOLINE(*cString::sprintf("DVB-C #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name));
OSDDRAWINFOLINE(*cString::sprintf("DVB-C #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source()));
@@ -448,7 +451,7 @@ void cFemonOsd::DrawInfoWindow(void)
break;
case cSource::stTerr:
OSDDRAWINFOLINE(*cString::sprintf("DVB-T #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name));
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getTerrestrialSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Transmission"), *getTransmission(dtp.Transmission()));
@@ -461,6 +464,10 @@ void cFemonOsd::DrawInfoWindow(void)
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Hierarchy"), *getHierarchy(dtp.Hierarchy()));
OSDDRAWINFORIGHT(trVDR("Guard"), *getGuard(dtp.Guard()));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("System"), *getTerrestrialSystem(dtp.System()));
if (dtp.System())
OSDDRAWINFORIGHT(trVDR("PlpId"), *cString::sprintf("%d", dtp.PlpId()));
break;
default:
@@ -544,76 +551,114 @@ void cFemonOsd::Action(void)
m_SvdrpFrontend = -1;
m_SvdrpVideoBitrate = -1.0;
m_SvdrpAudioBitrate = -1.0;
if (m_Frontend != -1) {
m_Quality = cDevice::ActualDevice()->SignalQuality();
m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0);
m_FrontendStatusValid = (ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus) >= 0);
m_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 0);
m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0);
m_BERValid = (ioctl(m_Frontend, FE_READ_BER, &m_BER) >= 0);
m_UNCValid = (ioctl(m_Frontend, FE_READ_UNCORRECTED_BLOCKS, &m_UNC) >= 0);
DrawInfoWindow();
DrawStatusWindow();
}
else if (m_SvdrpConnection.handle >= 0) {
cmd.handle = m_SvdrpConnection.handle;
m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
if (cmd.responseCode == 900) {
m_StrengthValid = false;
m_QualityValid = false;
m_FrontendStatusValid = false;
m_SignalValid = false;
m_SNRValid = false;
m_BERValid = false;
m_UNCValid = false;
for (cLine *line = cmd.reply.First(); line; line = cmd.reply.Next(line)) {
const char *s = line->Text();
if (!strncasecmp(s, "CARD:", 5))
m_SvdrpFrontend = (int)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "STRG:", 5)) {
m_Strength = (int)strtol(s + 5, NULL, 10);
m_StrengthValid = (m_Strength >= 0);
}
else if (!strncasecmp(s, "QUAL:", 5)) {
m_Quality = (int)strtol(s + 5, NULL, 10);
m_QualityValid = (m_Quality >= 0);
}
else if (!strncasecmp(s, "TYPE:", 5))
m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "NAME:", 5)) {
strn0cpy(m_FrontendInfo.name, s + 5, sizeof(m_FrontendInfo.name));
}
else if (!strncasecmp(s, "STAT:", 5)) {
m_FrontendStatus = (fe_status_t)strtol(s + 5, NULL, 16);
m_FrontendStatusValid = true;
}
else if (!strncasecmp(s, "SGNL:", 5)) {
m_Signal = (uint16_t)strtol(s + 5, NULL, 16);
m_SignalValid = true;
}
else if (!strncasecmp(s, "SNRA:", 5)) {
m_SNR = (uint16_t)strtol(s + 5, NULL, 16);
m_SNRValid = true;
}
else if (!strncasecmp(s, "BERA:", 5)) {
m_BER = (uint32_t)strtol(s + 5, NULL, 16);
m_BERValid = true;
}
else if (!strncasecmp(s, "UNCB:", 5)) {
m_UNC = (uint32_t)strtol(s + 5, NULL, 16);
m_UNCValid = true;
}
else if (!strncasecmp(s, "VIBR:", 5))
m_SvdrpVideoBitrate = (double)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "AUBR:", 5))
m_SvdrpAudioBitrate = (double)strtol(s + 5, NULL, 10);
switch (m_DeviceSource) {
case DEVICESOURCE_PVRINPUT:
m_Quality = cDevice::ActualDevice()->SignalStrength();
m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0);
m_FrontendName = cDevice::ActualDevice()->DeviceName();
m_FrontendStatus = (fe_status_t)(m_StrengthValid ? (FE_HAS_LOCK | FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC) : 0);
m_FrontendStatusValid = m_StrengthValid;
m_Signal = uint16_t(m_Strength * 0xFFFF / 100);
m_SignalValid = m_StrengthValid;
m_SNR = 0;
m_SNRValid = false;
m_BER = 0;
m_BERValid = false;
m_UNC = 0;
m_UNCValid = false;
break;
case DEVICESOURCE_IPTV:
m_Quality = cDevice::ActualDevice()->SignalQuality();
m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0);
m_FrontendName = cDevice::ActualDevice()->DeviceName();
m_FrontendStatus = (fe_status_t)(m_StrengthValid ? (FE_HAS_LOCK | FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC) : 0);
m_FrontendStatusValid = m_StrengthValid;
m_Signal = uint16_t(m_Strength * 0xFFFF / 100);
m_SignalValid = m_StrengthValid;
m_SNR = uint16_t(m_Quality * 0xFFFF / 100);
m_SNRValid = m_QualityValid;
m_BER = 0;
m_BERValid = false;
m_UNC = 0;
m_UNCValid = false;
break;
default:
case DEVICESOURCE_DVBAPI:
if (m_Frontend != -1) {
m_Quality = cDevice::ActualDevice()->SignalQuality();
m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0);
m_FrontendName = cDevice::ActualDevice()->DeviceName();
m_FrontendStatusValid = (ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus) >= 0);
m_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 0);
m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0);
m_BERValid = (ioctl(m_Frontend, FE_READ_BER, &m_BER) >= 0);
m_UNCValid = (ioctl(m_Frontend, FE_READ_UNCORRECTED_BLOCKS, &m_UNC) >= 0);
}
}
DrawInfoWindow();
DrawStatusWindow();
}
else if (m_SvdrpConnection.handle >= 0) {
cmd.handle = m_SvdrpConnection.handle;
m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
if (cmd.responseCode == 900) {
m_StrengthValid = false;
m_QualityValid = false;
m_FrontendStatusValid = false;
m_SignalValid = false;
m_SNRValid = false;
m_BERValid = false;
m_UNCValid = false;
for (cLine *line = cmd.reply.First(); line; line = cmd.reply.Next(line)) {
const char *s = line->Text();
if (!strncasecmp(s, "CARD:", 5))
m_SvdrpFrontend = (int)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "STRG:", 5)) {
m_Strength = (int)strtol(s + 5, NULL, 10);
m_StrengthValid = (m_Strength >= 0);
}
else if (!strncasecmp(s, "QUAL:", 5)) {
m_Quality = (int)strtol(s + 5, NULL, 10);
m_QualityValid = (m_Quality >= 0);
}
else if (!strncasecmp(s, "TYPE:", 5))
m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "NAME:", 5)) {
m_FrontendName = s + 5;
}
else if (!strncasecmp(s, "STAT:", 5)) {
m_FrontendStatus = (fe_status_t)strtol(s + 5, NULL, 16);
m_FrontendStatusValid = true;
}
else if (!strncasecmp(s, "SGNL:", 5)) {
m_Signal = (uint16_t)strtol(s + 5, NULL, 16);
m_SignalValid = true;
}
else if (!strncasecmp(s, "SNRA:", 5)) {
m_SNR = (uint16_t)strtol(s + 5, NULL, 16);
m_SNRValid = true;
}
else if (!strncasecmp(s, "BERA:", 5)) {
m_BER = (uint32_t)strtol(s + 5, NULL, 16);
m_BERValid = true;
}
else if (!strncasecmp(s, "UNCB:", 5)) {
m_UNC = (uint32_t)strtol(s + 5, NULL, 16);
m_UNCValid = true;
}
else if (!strncasecmp(s, "VIBR:", 5))
m_SvdrpVideoBitrate = (double)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "AUBR:", 5))
m_SvdrpAudioBitrate = (double)strtol(s + 5, NULL, 10);
}
}
}
break;
}
DrawInfoWindow();
DrawStatusWindow();
m_Sleep.Wait(max((int)(100 * femonConfig.updateinterval - t.Elapsed()), 3));
}
}
@@ -622,26 +667,40 @@ void cFemonOsd::Show(void)
{
debug("%s()\n", __PRETTY_FUNCTION__);
eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
cString dev = cString::sprintf(FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
if (!femonConfig.usesvdrp)
error("cFemonOsd::Show() cannot read frontend info.");
close(m_Frontend);
m_Frontend = -1;
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
m_DeviceSource = DEVICESOURCE_DVBAPI;
if (channel) {
if (channel->IsSourceType('I'))
m_DeviceSource = DEVICESOURCE_IPTV;
else if (channel->IsSourceType('V'))
m_DeviceSource = DEVICESOURCE_PVRINPUT;
}
if (m_DeviceSource == DEVICESOURCE_DVBAPI) {
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice());
m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1;
if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
if (!femonConfig.usesvdrp)
error("cFemonOsd::Show() cannot read frontend info.");
close(m_Frontend);
m_Frontend = -1;
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
return;
}
}
else if (femonConfig.usesvdrp) {
if (!SvdrpConnect() || !SvdrpTune())
return;
}
else {
error("cFemonOsd::Show() cannot open frontend device.");
return;
}
}
else if (femonConfig.usesvdrp) {
if (!SvdrpConnect() || !SvdrpTune())
return;
}
else {
error("cFemonOsd::Show() cannot open frontend device.");
return;
}
else
m_Frontend = -1;
m_Osd = cOsdProvider::NewOsd(m_OsdLeft, m_OsdTop);
if (m_Osd) {
@@ -662,55 +721,66 @@ void cFemonOsd::Show(void)
m_Receiver->Deactivate();
DELETENULL(m_Receiver);
}
if (femonConfig.analyzestream) {
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (channel) {
m_Receiver = new cFemonReceiver(channel->Vtype(), channel->Vpid(), channel->Apid(IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0), channel->Dpid(IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0));
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
}
if (femonConfig.analyzestream && channel) {
m_Receiver = new cFemonReceiver(channel->Vtype(), channel->Vpid(), channel->Apid(IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0), channel->Dpid(IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0));
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
}
Start();
}
}
void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool liveView)
{
debug("%s(%d,%d)\n", __PRETTY_FUNCTION__, device->DeviceNumber(), channelNumber);
eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
if (!device->IsPrimaryDevice() || !channelNumber || cDevice::PrimaryDevice()->CurrentChannel() != channelNumber)
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (!liveView || !channelNumber || !channel || channel->Number() != channelNumber)
return;
close(m_Frontend);
cString dev = cString::sprintf(FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
m_DeviceSource = DEVICESOURCE_DVBAPI;
if (channel) {
if (channel->IsSourceType('I'))
m_DeviceSource = DEVICESOURCE_IPTV;
else if (channel->IsSourceType('V'))
m_DeviceSource = DEVICESOURCE_PVRINPUT;
}
if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
if (!femonConfig.usesvdrp)
error("cFemonOsd::ChannelSwitch() cannot read frontend info.");
close(m_Frontend);
m_Frontend = -1;
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
close(m_Frontend);
m_Frontend = -1;
}
if (m_DeviceSource == DEVICESOURCE_DVBAPI) {
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice());
m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1;
if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
if (!femonConfig.usesvdrp)
error("cFemonOsd::ChannelSwitch() cannot read frontend info.");
close(m_Frontend);
m_Frontend = -1;
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
return;
}
}
else if (femonConfig.usesvdrp) {
if (!SvdrpConnect() || !SvdrpTune())
return;
}
else {
error("cFemonOsd::ChannelSwitch() cannot open frontend device.");
return;
}
}
else if (femonConfig.usesvdrp) {
if (!SvdrpConnect() || !SvdrpTune())
return;
}
else {
error("cFemonOsd::ChannelSwitch() cannot open frontend device.");
return;
}
if (m_Receiver) {
m_Receiver->Deactivate();
DELETENULL(m_Receiver);
}
if (femonConfig.analyzestream) {
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (channel) {
m_Receiver = new cFemonReceiver(channel->Vtype(), channel->Vpid(), channel->Apid(IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0), channel->Dpid(IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0));
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
}
if (femonConfig.analyzestream && channel) {
m_Receiver = new cFemonReceiver(channel->Vtype(), channel->Vpid(), channel->Apid(IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0), channel->Dpid(IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0));
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
}
}
@@ -750,13 +820,13 @@ bool cFemonOsd::DeviceSwitch(int direction)
}
if (cDevice::GetDevice(device)->ProvidesChannel(channel, 0)) {
debug("%s(%d) device(%d)\n", __PRETTY_FUNCTION__, direction, device);
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0);
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0, true);
cControl::Shutdown();
cDevice::GetDevice(device)->SwitchChannel(channel, true);
if (cDevice::GetDevice(device) == cDevice::PrimaryDevice())
cDevice::GetDevice(device)->ForceTransferMode();
cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel));
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number());
cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number(), true);
return (true);
}
}

View File

@@ -24,6 +24,13 @@
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
private:
enum eDeviceSourceType {
DEVICESOURCE_DVBAPI = 0,
DEVICESOURCE_IPTV,
DEVICESOURCE_PVRINPUT,
DEVICESOURCE_COUNT
};
static cFemonOsd *pInstance;
cOsd *m_Osd;
@@ -48,9 +55,11 @@ private:
bool m_BERValid;
uint32_t m_UNC;
bool m_UNCValid;
cString m_FrontendName;
fe_status_t m_FrontendStatus;
bool m_FrontendStatusValid;
dvb_frontend_info m_FrontendInfo;
eDeviceSourceType m_DeviceSource;
int m_DisplayMode;
int m_OsdWidth;
int m_OsdHeight;
@@ -71,7 +80,7 @@ protected:
cFemonOsd(const cFemonOsd&);
cFemonOsd& operator= (const cFemonOsd&);
virtual void Action(void);
virtual void ChannelSwitch(const cDevice * device, int channelNumber);
virtual void ChannelSwitch(const cDevice *device, int channelNumber, bool liveView);
virtual void SetAudioTrack(int Index, const char * const *Tracks);
public:

View File

@@ -142,7 +142,7 @@ void cFemonReceiver::Action(void)
bool processed = false;
// process available video data
while (Data = m_VideoBuffer.Get(Length)) {
while ((Data = m_VideoBuffer.Get(Length))) {
if (!m_Active || (Length < TS_SIZE))
break;
Length = TS_SIZE;
@@ -179,7 +179,7 @@ void cFemonReceiver::Action(void)
}
// process available audio data
while (Data = m_AudioBuffer.Get(Length)) {
while ((Data = m_AudioBuffer.Get(Length))) {
if (!m_Active || (Length < TS_SIZE))
break;
Length = TS_SIZE;
@@ -204,7 +204,7 @@ void cFemonReceiver::Action(void)
}
// process available dolby data
while (Data = m_AC3Buffer.Get(Length)) {
while ((Data = m_AC3Buffer.Get(Length))) {
if (!m_Active || (Length < TS_SIZE))
break;
Length = TS_SIZE;

View File

@@ -77,8 +77,8 @@ public:
~cFemonSymbolCache();
void Refresh();
cBitmap& Get(eSymbols symbolP);
int GetSpacing() { return yFactorM * DEFAULT_SPACING; }
int GetRounding() { return yFactorM * DEFAULT_ROUNDING; }
int GetSpacing() { return int(yFactorM * DEFAULT_SPACING); }
int GetRounding() { return int(yFactorM * DEFAULT_ROUNDING); }
};
extern cFemonSymbolCache femonSymbols;

View File

@@ -76,7 +76,7 @@ static const char *getUserString(int Value, const tDvbParameterMap *Map)
return "---";
}
cString getFrontendInfo(int cardIndex)
cString getFrontendInfo(cDvbDevice *device)
{
cString info;
struct dvb_frontend_info value;
@@ -86,16 +86,18 @@ cString getFrontendInfo(int cardIndex)
uint32_t ber = 0;
uint32_t unc = 0;
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return info;
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return NULL;
return info;
info = cString::sprintf("CARD:%d\nSTRG:%d\nQUAL:%d", cardIndex, cDevice::ActualDevice()->SignalStrength(), cDevice::ActualDevice()->SignalQuality());
info = cString::sprintf("CARD:%d\nSTRG:%d\nQUAL:%d", device->CardIndex(), device->SignalStrength(), device->SignalQuality());
if (ioctl(fe, FE_GET_INFO, &value) >= 0)
info = cString::sprintf("%s\nTYPE:%d\nNAME:%s", *info, value.type, value.name);
info = cString::sprintf("%s\nTYPE:%d\nNAME:%s", *info, value.type, *device->DeviceName());
if (ioctl(fe, FE_READ_STATUS, &status) >= 0)
info = cString::sprintf("%s\nSTAT:%02X", *info, status);
if (ioctl(fe, FE_READ_SIGNAL_STRENGTH, &signal) >= 0)
@@ -117,42 +119,39 @@ cString getFrontendInfo(int cardIndex)
return info;
}
cString getFrontendName(int cardIndex)
cString getFrontendName(cDvbDevice *device)
{
struct dvb_frontend_info value;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (fe < 0)
if (!device)
return NULL;
memset(&value, 0, sizeof(value));
ioctl(fe, FE_GET_INFO, &value);
close(fe);
return (cString::sprintf("%s on device #%d", value.name, cardIndex));
return (cString::sprintf("%s on device #%d", *device->DeviceName(), device->CardIndex()));
}
cString getFrontendStatus(int cardIndex)
cString getFrontendStatus(cDvbDevice *device)
{
fe_status_t value;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return NULL;
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return NULL;
memset(&value, 0, sizeof(value));
ioctl(fe, FE_READ_STATUS, &value);
close(fe);
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));
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" : "-", device->CardIndex()));
}
uint16_t getSignal(int cardIndex)
uint16_t getSignal(cDvbDevice *device)
{
uint16_t value = 0;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return (value);
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return (value);
ioctl(fe, FE_READ_SIGNAL_STRENGTH, &value);
@@ -161,12 +160,14 @@ uint16_t getSignal(int cardIndex)
return (value);
}
uint16_t getSNR(int cardIndex)
uint16_t getSNR(cDvbDevice *device)
{
uint16_t value = 0;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return (value);
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return (value);
ioctl(fe, FE_READ_SNR, &value);
@@ -175,12 +176,14 @@ uint16_t getSNR(int cardIndex)
return (value);
}
uint32_t getBER(int cardIndex)
uint32_t getBER(cDvbDevice *device)
{
uint32_t value = 0;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return (value);
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return (value);
ioctl(fe, FE_READ_BER, &value);
@@ -189,12 +192,14 @@ uint32_t getBER(int cardIndex)
return (value);
}
uint32_t getUNC(int cardIndex)
uint32_t getUNC(cDvbDevice *device)
{
uint32_t value = 0;
cString dev = cString::sprintf(FRONTEND_DEVICE, cardIndex, 0);
int fe = open(dev, O_RDONLY | O_NONBLOCK);
if (!device)
return (value);
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK);
if (fe < 0)
return (value);
ioctl(fe, FE_READ_UNCORRECTED_BLOCKS, &value);
@@ -347,9 +352,14 @@ cString getModulation(int value)
return cString::sprintf("%s", getUserString(value, ModulationValues));
}
cString getSystem(int value)
cString getTerrestrialSystem(int value)
{
return cString::sprintf("%s", getUserString(value, SystemValues));
return cString::sprintf("%s", getUserString(value, SystemValuesTerr));
}
cString getSatelliteSystem(int value)
{
return cString::sprintf("%s", getUserString(value, SystemValuesSat));
}
cString getRollOff(int value)

View File

@@ -10,6 +10,7 @@
#include <stdint.h>
#include <vdr/channels.h>
#include <vdr/dvbdevice.h>
#include <vdr/remux.h>
#include <vdr/tools.h>
@@ -25,15 +26,15 @@
#define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d"
cString getFrontendInfo(int cardIndex = 0);
cString getFrontendName(int cardIndex = 0);
cString getFrontendStatus(int cardIndex = 0);
cString getFrontendInfo(cDvbDevice *device);
cString getFrontendName(cDvbDevice *device);
cString getFrontendStatus(cDvbDevice *device);
uint16_t getSNR(int cardIndex = 0);
uint16_t getSignal(int cardIndex = 0);
uint16_t getSNR(cDvbDevice *device);
uint16_t getSignal(cDvbDevice *device);
uint32_t getBER(int cardIndex = 0);
uint32_t getUNC(int cardIndex = 0);
uint32_t getBER(cDvbDevice *device);
uint32_t getUNC(cDvbDevice *device);
cString getApids(const cChannel *channel);
cString getDpids(const cChannel *channel);
@@ -51,7 +52,8 @@ cString getInversion(int value);
cString getHierarchy(int value);
cString getGuard(int value);
cString getModulation(int value);
cString getSystem(int value);
cString getTerrestrialSystem(int value);
cString getSatelliteSystem(int value);
cString getRollOff(int value);
cString getResolution(int width, int height, int scan);
cString getAspectRatio(int value);

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

387
po/hu_HU.po Normal file
View File

@@ -0,0 +1,387 @@
# VDR plugin language source file.
# Copyright (C) 2007 Rolf Ahrenberg
# This file is distributed under the same license as the femon package.
# F<>ley Istv<74>n <ifuley at tigercomp dot ro>, 2011
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0200\n"
"PO-Revision-Date: 2010-10-10 10:10+0200\n"
"Last-Translator: F<>ley Istv<74>n <ifuley at tigercomp dot ro>\n"
"Language-Team: Hungarian <ifuley at tigercomp dot ro>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Hungarian\n"
"X-Poedit-Country: HUNGARY\n"
"X-Poedit-SourceCharset: iso-8859-2\n"
msgid "DVB Signal Information Monitor (OSD)"
msgstr "DVB jelszint monitor (OSD)"
msgid "Signal Information"
msgstr "Jel inform<72>ci<63>"
msgid "Femon not available"
msgstr "Femon nem el<65>rhet<65>"
msgid "basic"
msgstr "alap"
msgid "transponder"
msgstr "transponder"
msgid "stream"
msgstr "adatfolyam (stream)"
msgid "AC-3"
msgstr "AC-3"
msgid "Classic"
msgstr "Klasszikus"
msgid "Elchi"
msgstr "Elchi"
msgid "ST:TNG"
msgstr "ST:TNG"
msgid "DeepBlue"
msgstr "S<>t<EFBFBD>tk<74>k"
msgid "Moronimo"
msgstr "Moronimo"
msgid "Enigma"
msgstr "Enigma"
msgid "EgalsTry"
msgstr "EgalsTry"
msgid "Duotone"
msgstr "K<>tsz<73>n<EFBFBD> (duotone)"
msgid "SilverGreen"
msgstr "Ez<45>st-z<>ld"
msgid "Hide main menu entry"
msgstr "Men<65>bejegyz<79>s elrejt<6A>se"
msgid "Define whether the main menu entry is hidden."
msgstr "Meghat<61>rozza, hogy megjelenjen-e a f<>men<65>ben."
msgid "Default display mode"
msgstr "Alap<61>rtelmezett megjelen<65>t<EFBFBD>si m<>d"
msgid "Define the default display mode at startup."
msgstr "Bekapcsol<6F>skor melyik megjelen<65>t<EFBFBD>si m<>ddal induljon."
msgid "Define the used OSD skin."
msgstr "Az OSD b<>r kiv<69>laszt<7A>sa."
msgid "Define the used OSD theme."
msgstr "Az OSD t<>ma kiv<69>laszt<7A>sa."
msgid "Position"
msgstr "Elhelyez<65>s"
msgid "Define the position of OSD."
msgstr "A k<>perny<6E>elhelyez<65>s kiv<69>laszt<7A>sa"
msgid "Downscale OSD size [%]"
msgstr "Az OSD lem<65>retez<65>se [%]"
msgid "Define the downscale ratio for OSD size."
msgstr "Az OSD m<>ret<65>nek lem<65>retez<65>se sz<73>zal<61>kban."
msgid "Red limit [%]"
msgstr "Piros sz<73>nt hat<61>ra [%]"
msgid "Define a limit for red bar, which is used to indicate a bad signal."
msgstr "A piros s<>v hat<61>r<EFBFBD>nak be<62>ll<6C>t<EFBFBD>sa, ezt haszn<7A>ljuk a nem el<65>gs<67>ges jelszint kijelz<6C>s<EFBFBD>hez."
msgid "Green limit [%]"
msgstr "Z<>ld sz<73>nt hat<61>ra [%]"
msgid "Define a limit for green bar, which is used to indicate a good signal."
msgstr "A z<>ld s<>v hat<61>r<EFBFBD>nak be<62>ll<6C>t<EFBFBD>sa, ezt haszn<7A>ljuk az el<65>gs<67>ges jelszint kijelz<6C>s<EFBFBD>hez."
msgid "OSD update interval [0.1s]"
msgstr "OSD friss<73>t<EFBFBD>s<EFBFBD>nek gyakoris<69>ga [0.1mp]"
msgid "Define an interval for OSD updates. The smaller interval generates higher CPU load."
msgstr "Meghat<61>rozza, hogy milyen gyakran legyen friss<73>tve az OSD. Kisebb intervallum nagyobb CPU terhel<65>st eredm<64>nyez."
msgid "Analyze stream"
msgstr "Adatfolyam (stream) elemz<6D>se."
msgid "Define whether the DVB stream is analyzed and bitrates calculated."
msgstr "Meghat<61>rozza, hogy a DVB adatfolyam elemz<6D>sre ker<65>lj<6C>n-e, <20>s sz<73>mol<6F>djon-e bitr<74>ta."
msgid "Calculation interval [0.1s]"
msgstr "Sz<53>m<EFBFBD>t<EFBFBD>s gyakoris<69>ga [0.1mp]"
msgid "Define an interval for calculation. The bigger interval generates more stable values."
msgstr "Meghat<61>rozza, hogy milyen gyakran t<>rt<72>njen sz<73>m<EFBFBD>t<EFBFBD>s. Nagyobb intervallum pontosabb <20>rt<72>keket eredm<64>nyez."
msgid "Use SVDRP service"
msgstr "SVDRP szolg<6C>ltat<61>s haszn<7A>lata."
msgid "Define whether the SVDRP service is used in client/server setups."
msgstr "Ki-bekapcsolja az SVDRP szolg<6C>ltat<61>st, amely kliens-szerver k<>rnyezetben haszn<7A>latos."
msgid "SVDRP service port"
msgstr "Az SVDRP szolg<6C>ltat<61>s portja"
msgid "Define the port number of SVDRP service."
msgstr "Meghat<61>rozza, hogy melyik porton fut az SVDRP."
msgid "SVDRP service IP"
msgstr "Az SVDRP szolg<6C>ltat<61>s IP-je"
msgid "Define the IP address of SVDRP service."
msgstr "Meghat<61>rozza, hogy milyen IP c<>men fut az SVDRP szolg<6C>ltat<61>s."
msgid "Help"
msgstr "Seg<65>ts<74>g"
msgid "Video"
msgstr "Video"
msgid "Audio"
msgstr "Audio"
msgid "Transponder Information"
msgstr "Transponder inf<6E>"
msgid "Apid"
msgstr "Apid"
msgid "Dpid"
msgstr "Dpid"
msgid "Spid"
msgstr "Spid"
msgid "Nid"
msgstr "Nid"
msgid "Tid"
msgstr "Tid"
msgid "Rid"
msgstr "Rid"
msgid "Coderate"
msgstr "Coderate"
msgid "Stream Information"
msgstr "Adatfolyam inf<6E>"
msgid "Video Stream"
msgstr "Vide<64> adatfolyam"
msgid "Codec"
msgstr "Kodek"
msgid "Bitrate"
msgstr "Bitr<74>ta"
msgid "Aspect Ratio"
msgstr "M<>retar<61>ny"
msgid "Frame Rate"
msgstr "K<>pfriss<73>t<EFBFBD>s"
msgid "Video Format"
msgstr "Vide<64> form<72>tum"
msgid "Resolution"
msgstr "Felbont<6E>s"
msgid "Audio Stream"
msgstr "Hang adatfolyam"
msgid "Channel Mode"
msgstr "Hangs<67>v m<>d"
msgid "Sampling Frequency"
msgstr "Mintav<61>telez<65>si frekvencia"
msgid "AC-3 Stream"
msgstr "AC-3 adatfolyam"
msgid "Bit Stream Mode"
msgstr "Bit Stream m<>d"
msgid "Audio Coding Mode"
msgstr "Hang k<>dol<6F>si m<>d"
msgid "Center Mix Level"
msgstr "K<>z<EFBFBD>pcsatorna kever<65>si jelszintje"
msgid "Surround Mix Level"
msgstr "T<>rhat<61>s csatorna kever<65>si szintje"
msgid "Dolby Surround Mode"
msgstr "Dolby Surround m<>d"
msgid "Low Frequency Effects"
msgstr "LFE - alacsony frekvenci<63>s effektek"
msgid "Dialogue Normalization"
msgstr "P<>rbesz<73>d jelszint normaliz<69>l<EFBFBD>sa"
msgid "Fixed"
msgstr "<22>lland<6E>"
msgid "Analog"
msgstr "analog"
msgid "MPEG-2"
msgstr "MPEG-2"
msgid "H.264"
msgstr "H.264"
msgid "MPEG-1 Layer I"
msgstr "MPEG-1 Layer I"
msgid "MPEG-1 Layer II"
msgstr "MPEG-1 Layer II"
msgid "MPEG-1 Layer III"
msgstr "MPEG-1 Layer III"
msgid "MPEG-2 Layer I"
msgstr "MPEG-2 Layer I"
msgid "MPEG-2 Layer II"
msgstr "MPEG-2 Layer II"
msgid "MPEG-2 Layer III"
msgstr "MPEG-2 Layer III"
msgid "HE-AAC"
msgstr "HE-AAC"
msgid "LATM"
msgstr "LATM"
msgid "stereo"
msgstr "sztere<72>"
msgid "joint Stereo"
msgstr "joint sztere<72>"
msgid "dual"
msgstr "du<64>l"
msgid "mono"
msgstr "mon<6F>"
msgid "interlaced"
msgstr "v<>ltotts<74>vos"
msgid "progressive"
msgstr "progressz<73>v"
msgid "reserved"
msgstr "fenntartott"
msgid "extended"
msgstr "kiterjesztett"
msgid "unknown"
msgstr "ismeretlen"
msgid "component"
msgstr "komponens"
msgid "PAL"
msgstr "PAL"
msgid "NTSC"
msgstr "NTSC"
msgid "SECAM"
msgstr "SECAM"
msgid "MAC"
msgstr "MAC"
msgid "Hz"
msgstr "Hz"
msgid "Complete Main (CM)"
msgstr "Mestercsatorna (CM)"
msgid "Music and Effects (ME)"
msgstr "Zene <20>s effektek (ME)"
msgid "Visually Impaired (VI)"
msgstr "L<>t<EFBFBD>sk<73>rosultak (VI)"
msgid "Hearing Impaired (HI)"
msgstr "Hall<6C>sk<73>rosultak (HI)"
msgid "Dialogue (D)"
msgstr "P<>rbesz<73>d (D)"
msgid "Commentary (C)"
msgstr "Narr<72>ci<63> (C)"
msgid "Emergency (E)"
msgstr "S<>rg<72>ss<73>gi (E)"
msgid "Voice Over (VO)"
msgstr "R<>besz<73>l<EFBFBD>s (VO)"
msgid "Karaoke"
msgstr "Karaoke"
msgid "Ch1"
msgstr "Ch1"
msgid "Ch2"
msgstr "Ch2"
msgid "C"
msgstr "K"
msgid "L"
msgstr "B"
msgid "R"
msgstr "J"
msgid "S"
msgstr "S"
msgid "SL"
msgstr "BS"
msgid "SR"
msgstr "JS"
msgid "dB"
msgstr "dB"
msgid "not indicated"
msgstr "nincs felt<6C>ntetve"
msgid "MHz"
msgstr "MHz"
msgid "free"
msgstr "szabad"
msgid "Mbit/s"
msgstr "Mbit/s"
msgid "kbit/s"
msgstr "kbit/s"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-femon 1.7.10\n"
"Project-Id-Version: vdr-femon 1.7.15\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n"