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

Compare commits

...

11 Commits

Author SHA1 Message Date
Rolf Ahrenberg
5b5f704ea8 Removed cppcheck warnings and updated HISTORY. 2012-04-02 19:25:31 +03:00
Rolf Ahrenberg
2d849b4fb8 Added transponder info window support for IPTV devices. 2012-04-01 22:39:33 +03:00
Rolf Ahrenberg
0e6457ab42 Added an info line for IPTV devices. 2012-03-31 13:22:11 +03:00
Rolf Ahrenberg
0f8cc6c9ce Modified cFemonReceiver constructor. 2012-03-31 11:47:57 +03:00
Rolf Ahrenberg
f1d9b112a4 Added a new theme: PearlHD (Thanks to Taipan @ VDRPortal). 2012-03-30 20:48:25 +03:00
Rolf Ahrenberg
4431cf57d9 Silenced error log messages when accessing pseudo devices. 2012-03-29 23:31:44 +03:00
Rolf Ahrenberg
18840de217 Added the dynamite compatibility patch (Thanks to Lars Hanisch). 2012-03-29 21:48:52 +03:00
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
31 changed files with 305 additions and 147 deletions

17
HISTORY
View File

@@ -436,3 +436,20 @@ VDR Plugin 'femon' Revision History
2012-03-10: Version 1.7.14 2012-03-10: Version 1.7.14
- Updated for vdr-1.7.26. - 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.
2012-04-02: Version 1.7.17
- Added the dynamite compatibility patch (Thanks to Lars Hanisch).
- Silenced error log messages when accessing pseudo devices.
- Added a new theme: PearlHD (Thanks to Taipan @ VDRPortal).
- Added the transponder info window support for IPTV devices.

View File

@@ -24,7 +24,7 @@ GITTAG = $(shell git describe --always 2>/dev/null)
### The C++ compiler and options: ### The C++ compiler and options:
CXX ?= g++ 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 LDFLAGS ?= -Wl,--as-needed
### The directory environment: ### The directory environment:

11
femon.c
View File

@@ -14,15 +14,15 @@
#include "femonservice.h" #include "femonservice.h"
#include "femontools.h" #include "femontools.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10726 #if defined(APIVERSNUM) && APIVERSNUM < 10727
#error "VDR-1.7.26 API version or greater is required!" #error "VDR-1.7.27 API version or greater is required!"
#endif #endif
#ifndef GITVERSION #ifndef GITVERSION
#define GITVERSION "" #define GITVERSION ""
#endif #endif
static const char VERSION[] = "1.7.14" GITVERSION; static const char VERSION[] = "1.7.17" GITVERSION;
static const char DESCRIPTION[] = trNOOP("DVB Signal Information Monitor (OSD)"); static const char DESCRIPTION[] = trNOOP("DVB Signal Information Monitor (OSD)");
static const char MAINMENUENTRY[] = trNOOP("Signal Information"); static const char MAINMENUENTRY[] = trNOOP("Signal Information");
@@ -139,7 +139,7 @@ bool cPluginFemon::Service(const char *Id, void *Data)
FemonService_v1_0 *data = (FemonService_v1_0*)Data; FemonService_v1_0 *data = (FemonService_v1_0*)Data;
if (!cDevice::ActualDevice()) if (!cDevice::ActualDevice())
return false; return false;
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice()); cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice());
data->fe_name = getFrontendName(dev); data->fe_name = getFrontendName(dev);
data->fe_status = getFrontendStatus(dev); data->fe_status = getFrontendStatus(dev);
data->fe_snr = getSNR(dev); data->fe_snr = getSNR(dev);
@@ -198,7 +198,7 @@ const char **cPluginFemon::SVDRPHelpPages(void)
cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
{ {
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice()); cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice());
if (*Option && isnumber(Option)) { if (*Option && isnumber(Option)) {
cDvbDevice *dev2 = dynamic_cast<cDvbDevice*>(cDevice::GetDevice(int(strtol(Option, NULL, 10)))); cDvbDevice *dev2 = dynamic_cast<cDvbDevice*>(cDevice::GetDevice(int(strtol(Option, NULL, 10))));
if (dev2) if (dev2)
@@ -315,6 +315,7 @@ cMenuFemonSetup::cMenuFemonSetup(void)
themes[eFemonThemeEgalsTry] = tr("EgalsTry"); themes[eFemonThemeEgalsTry] = tr("EgalsTry");
themes[eFemonThemeDuotone] = tr("Duotone"); themes[eFemonThemeDuotone] = tr("Duotone");
themes[eFemonThemeSilverGreen] = tr("SilverGreen"); themes[eFemonThemeSilverGreen] = tr("SilverGreen");
themes[eFemonThemePearlHD] = tr("PearlHD");
data = femonConfig; data = femonConfig;
Setup(); Setup();

View File

@@ -10,7 +10,7 @@
#define IS_HEAAC_AUDIO(buf) (((buf)[0] == 0xFF) && (((buf)[1] & 0xF6) == 0xF0)) #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 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: private:
cFemonAudioIf *m_AudioHandler; cFemonAudioIf *m_AudioHandler;
static unsigned int s_Samplerates[16]; static int s_Samplerates[16];
public: public:
cFemonAAC(cFemonAudioIf *audiohandler); cFemonAAC(cFemonAudioIf *audiohandler);

View File

@@ -9,17 +9,17 @@
#include "femontools.h" #include "femontools.h"
#include "femonac3.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 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 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}, {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}, {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: private:
cFemonAC3If *m_AudioHandler; cFemonAC3If *m_AudioHandler;
static unsigned int s_Bitrates[32]; static int s_Bitrates[32];
static unsigned int s_Frequencies[4]; static int s_Frequencies[4];
static unsigned int s_Frames[3][32]; static int s_Frames[3][32];
public: public:
cFemonAC3(cFemonAC3If *audiohandler); cFemonAC3(cFemonAC3If *audiohandler);

View File

@@ -138,4 +138,16 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
0xFFCE7B00, // clrYellow 0xFFCE7B00, // clrYellow
0xFF336600, // clrGreen 0xFF336600, // clrGreen
}, },
{
// eFemonThemePearlHD
4, // bpp
0x90000000, // clrBackground
0xCC000000, // clrTitleBackground
0xFFBEBEBE, // clrTitleText
0xFF4E78B1, // clrActiveText
0xFFBEBEBE, // clrInactiveText
0xAAFF0000, // clrRed
0xAAF8F800, // clrYellow
0x6000ff00, // clrGreen
},
}; };

View File

@@ -59,20 +59,21 @@ enum eFemonThemes
eFemonThemeEgalsTry, eFemonThemeEgalsTry,
eFemonThemeDuotone, eFemonThemeDuotone,
eFemonThemeSilverGreen, eFemonThemeSilverGreen,
eFemonThemePearlHD,
eFemonThemeMaxNumber eFemonThemeMaxNumber
}; };
struct cFemonTheme struct cFemonTheme
{ {
int bpp; int bpp;
int clrBackground; unsigned int clrBackground;
int clrTitleBackground; unsigned int clrTitleBackground;
int clrTitleText; unsigned int clrTitleText;
int clrActiveText; unsigned int clrActiveText;
int clrInactiveText; unsigned int clrInactiveText;
int clrRed; unsigned int clrRed;
int clrYellow; unsigned int clrYellow;
int clrGreen; unsigned int clrGreen;
}; };
extern const cFemonTheme femonTheme[eFemonThemeMaxNumber]; extern const cFemonTheme femonTheme[eFemonThemeMaxNumber];

View File

@@ -8,14 +8,14 @@
#include "femontools.h" #include "femontools.h"
#include "femonlatm.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, 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
{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 22050, 24000, 16000, -1
}; };

View File

@@ -14,8 +14,8 @@ class cFemonLATM {
private: private:
cFemonAudioIf *m_AudioHandler; cFemonAudioIf *m_AudioHandler;
static unsigned int s_Bitrates[3][16]; static int s_Bitrates[3][16];
static unsigned int s_Samplerates[4]; static int s_Samplerates[4];
public: public:
cFemonLATM(cFemonAudioIf *audiohandler); 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)) #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 {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 {22050, 24000, 16000, -1}, // MPEG-2
{44100, 48000, 32000, -1} // MPEG-1 {44100, 48000, 32000, -1} // MPEG-1

View File

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

View File

@@ -11,6 +11,7 @@
#include <ctype.h> #include <ctype.h>
#include <math.h> #include <math.h>
#include "iptvservice.h"
#include "femoncfg.h" #include "femoncfg.h"
#include "femonreceiver.h" #include "femonreceiver.h"
#include "femontools.h" #include "femontools.h"
@@ -183,6 +184,7 @@ cFemonOsd::cFemonOsd()
m_BERValid(false), m_BERValid(false),
m_UNC(0), m_UNC(0),
m_UNCValid(false), m_UNCValid(false),
m_FrontendName(""),
m_FrontendStatusValid(false), m_FrontendStatusValid(false),
m_DeviceSource(DEVICESOURCE_DVBAPI), m_DeviceSource(DEVICESOURCE_DVBAPI),
m_DisplayMode(femonConfig.displaymode), m_DisplayMode(femonConfig.displaymode),
@@ -395,7 +397,6 @@ void cFemonOsd::DrawInfoWindow(void)
if (m_Osd && channel) { if (m_Osd && channel) {
int offset = 0; int offset = 0;
eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
cDvbTransponderParameters dtp(channel->Parameters());
switch (m_DisplayMode) { switch (m_DisplayMode) {
case eFemonModeTransponder: case eFemonModeTransponder:
@@ -419,8 +420,9 @@ void cFemonOsd::DrawInfoWindow(void)
OSDDRAWINFOLEFT( trVDR("CA"), *getCAids(channel)); OSDDRAWINFOLEFT( trVDR("CA"), *getCAids(channel));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
switch (channel->Source() & cSource::st_Mask) { switch (channel->Source() & cSource::st_Mask) {
case cSource::stSat: case cSource::stSat: {
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getSatelliteSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); cDvbTransponderParameters dtp(channel->Parameters());
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getSatelliteSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency())); OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source())); OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source()));
@@ -434,10 +436,12 @@ void cFemonOsd::DrawInfoWindow(void)
OSDDRAWINFOLEFT( trVDR("System"), *getSatelliteSystem(dtp.System())); OSDDRAWINFOLEFT( trVDR("System"), *getSatelliteSystem(dtp.System()));
if (dtp.System()) if (dtp.System())
OSDDRAWINFORIGHT(trVDR("RollOff"), *getRollOff(dtp.RollOff())); OSDDRAWINFORIGHT(trVDR("RollOff"), *getRollOff(dtp.RollOff()));
}
break; break;
case cSource::stCable: case cSource::stCable: {
OSDDRAWINFOLINE(*cString::sprintf("DVB-C #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); cDvbTransponderParameters dtp(channel->Parameters());
OSDDRAWINFOLINE(*cString::sprintf("DVB-C #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency())); OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source())); OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source()));
@@ -447,10 +451,12 @@ void cFemonOsd::DrawInfoWindow(void)
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Inversion"), *getInversion(dtp.Inversion())); OSDDRAWINFOLEFT( trVDR("Inversion"), *getInversion(dtp.Inversion()));
OSDDRAWINFORIGHT(trVDR("CoderateH"), *getCoderate(dtp.CoderateH())); OSDDRAWINFORIGHT(trVDR("CoderateH"), *getCoderate(dtp.CoderateH()));
}
break; break;
case cSource::stTerr: case cSource::stTerr: {
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getTerrestrialSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); cDvbTransponderParameters dtp(channel->Parameters());
OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", *getTerrestrialSystem(dtp.System()), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency())); OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Transmission"), *getTransmission(dtp.Transmission())); OSDDRAWINFORIGHT(trVDR("Transmission"), *getTransmission(dtp.Transmission()));
@@ -467,6 +473,25 @@ void cFemonOsd::DrawInfoWindow(void)
OSDDRAWINFOLEFT( trVDR("System"), *getTerrestrialSystem(dtp.System())); OSDDRAWINFOLEFT( trVDR("System"), *getTerrestrialSystem(dtp.System()));
if (dtp.System()) if (dtp.System())
OSDDRAWINFORIGHT(trVDR("PlpId"), *cString::sprintf("%d", dtp.PlpId())); OSDDRAWINFORIGHT(trVDR("PlpId"), *cString::sprintf("%d", dtp.PlpId()));
}
break;
case stIptv: {
OSDDRAWINFOLINE(*cString::sprintf("IPTV #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), *m_FrontendName));
offset += OSDROWHEIGHT;
if (m_SvdrpFrontend < 0) {
cPlugin *p;
IptvService_v1_0 data;
data.cardIndex = cDevice::ActualDevice()->CardIndex();
p = cPluginManager::CallFirstService("IptvService-v1.0", &data);
if (p) {
OSDDRAWINFOLEFT(tr("Protocol"), *data.protocol);
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT(tr("Bitrate"), *data.bitrate);
offset += OSDROWHEIGHT;
}
}
}
break; break;
default: default:
@@ -556,6 +581,7 @@ void cFemonOsd::Action(void)
m_QualityValid = (m_Quality >= 0); m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength(); m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0); 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_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_FrontendStatusValid = m_StrengthValid;
m_Signal = uint16_t(m_Strength * 0xFFFF / 100); m_Signal = uint16_t(m_Strength * 0xFFFF / 100);
@@ -572,6 +598,7 @@ void cFemonOsd::Action(void)
m_QualityValid = (m_Quality >= 0); m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength(); m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0); 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_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_FrontendStatusValid = m_StrengthValid;
m_Signal = uint16_t(m_Strength * 0xFFFF / 100); m_Signal = uint16_t(m_Strength * 0xFFFF / 100);
@@ -590,6 +617,7 @@ void cFemonOsd::Action(void)
m_QualityValid = (m_Quality >= 0); m_QualityValid = (m_Quality >= 0);
m_Strength = cDevice::ActualDevice()->SignalStrength(); m_Strength = cDevice::ActualDevice()->SignalStrength();
m_StrengthValid = (m_Strength >= 0); m_StrengthValid = (m_Strength >= 0);
m_FrontendName = cDevice::ActualDevice()->DeviceName();
m_FrontendStatusValid = (ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus) >= 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_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 0);
m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0); m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0);
@@ -622,7 +650,7 @@ void cFemonOsd::Action(void)
else if (!strncasecmp(s, "TYPE:", 5)) else if (!strncasecmp(s, "TYPE:", 5))
m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10); m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
else if (!strncasecmp(s, "NAME:", 5)) { else if (!strncasecmp(s, "NAME:", 5)) {
strn0cpy(m_FrontendInfo.name, s + 5, sizeof(m_FrontendInfo.name)); m_FrontendName = s + 5;
} }
else if (!strncasecmp(s, "STAT:", 5)) { else if (!strncasecmp(s, "STAT:", 5)) {
m_FrontendStatus = (fe_status_t)strtol(s + 5, NULL, 16); m_FrontendStatus = (fe_status_t)strtol(s + 5, NULL, 16);
@@ -663,7 +691,7 @@ void cFemonOsd::Show(void)
{ {
debug("%s()\n", __PRETTY_FUNCTION__); debug("%s()\n", __PRETTY_FUNCTION__);
eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); const cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
m_DeviceSource = DEVICESOURCE_DVBAPI; m_DeviceSource = DEVICESOURCE_DVBAPI;
if (channel) { if (channel) {
@@ -674,7 +702,7 @@ void cFemonOsd::Show(void)
} }
if (m_DeviceSource == DEVICESOURCE_DVBAPI) { if (m_DeviceSource == DEVICESOURCE_DVBAPI) {
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice()); cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice());
m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1;
if (m_Frontend >= 0) { if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
@@ -718,7 +746,7 @@ void cFemonOsd::Show(void)
DELETENULL(m_Receiver); DELETENULL(m_Receiver);
} }
if (femonConfig.analyzestream && channel) { 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)); m_Receiver = new cFemonReceiver(channel, IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0, IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0);
cDevice::ActualDevice()->AttachReceiver(m_Receiver); cDevice::ActualDevice()->AttachReceiver(m_Receiver);
} }
Start(); Start();
@@ -729,9 +757,9 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li
{ {
debug("%s(%d,%d)\n", __PRETTY_FUNCTION__, device->DeviceNumber(), channelNumber); debug("%s(%d,%d)\n", __PRETTY_FUNCTION__, device->DeviceNumber(), channelNumber);
eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack();
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); const cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (!liveView || !device->IsPrimaryDevice() || !channelNumber || !channel || channel->Number() != channelNumber) if (!liveView || !channelNumber || !channel || channel->Number() != channelNumber)
return; return;
m_DeviceSource = DEVICESOURCE_DVBAPI; m_DeviceSource = DEVICESOURCE_DVBAPI;
@@ -748,7 +776,7 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li
} }
if (m_DeviceSource == DEVICESOURCE_DVBAPI) { if (m_DeviceSource == DEVICESOURCE_DVBAPI) {
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(cDevice::ActualDevice()); cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice());
m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1;
if (m_Frontend >= 0) { if (m_Frontend >= 0) {
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
@@ -775,7 +803,7 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li
DELETENULL(m_Receiver); DELETENULL(m_Receiver);
} }
if (femonConfig.analyzestream && channel) { 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)); m_Receiver = new cFemonReceiver(channel, IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0, IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0);
cDevice::ActualDevice()->AttachReceiver(m_Receiver); cDevice::ActualDevice()->AttachReceiver(m_Receiver);
} }
} }
@@ -789,9 +817,9 @@ void cFemonOsd::SetAudioTrack(int Index, const char * const *Tracks)
DELETENULL(m_Receiver); DELETENULL(m_Receiver);
} }
if (femonConfig.analyzestream) { if (femonConfig.analyzestream) {
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); const cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (channel) { 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)); m_Receiver = new cFemonReceiver(channel, IS_AUDIO_TRACK(track) ? int(track - ttAudioFirst) : 0, IS_DOLBY_TRACK(track) ? int(track - ttDolbyFirst) : 0);
cDevice::ActualDevice()->AttachReceiver(m_Receiver); cDevice::ActualDevice()->AttachReceiver(m_Receiver);
} }
} }

View File

@@ -55,6 +55,7 @@ private:
bool m_BERValid; bool m_BERValid;
uint32_t m_UNC; uint32_t m_UNC;
bool m_UNCValid; bool m_UNCValid;
cString m_FrontendName;
fe_status_t m_FrontendStatus; fe_status_t m_FrontendStatus;
bool m_FrontendStatusValid; bool m_FrontendStatusValid;
dvb_frontend_info m_FrontendInfo; dvb_frontend_info m_FrontendInfo;

View File

@@ -10,8 +10,9 @@
#include "femoncfg.h" #include "femoncfg.h"
#include "femonreceiver.h" #include "femonreceiver.h"
cFemonReceiver::cFemonReceiver(int Vtype, int Vpid, int Apid, int Dpid) cFemonReceiver::cFemonReceiver(const cChannel *Channel, int ATrack, int DTrack)
: cThread("femon receiver"), : cReceiver(Channel),
cThread("femon receiver"),
m_Mutex(), m_Mutex(),
m_Sleep(), m_Sleep(),
m_Active(false), m_Active(false),
@@ -21,24 +22,25 @@ cFemonReceiver::cFemonReceiver(int Vtype, int Vpid, int Apid, int Dpid)
m_DetectLATM(this), m_DetectLATM(this),
m_DetectAC3(this), m_DetectAC3(this),
m_VideoBuffer(KILOBYTE(512), TS_SIZE, false, "Femon video"), m_VideoBuffer(KILOBYTE(512), TS_SIZE, false, "Femon video"),
m_VideoType(Vtype), m_VideoType(Channel ? Channel->Vtype(): 0),
m_VideoPid(Vpid), m_VideoPid(Channel ? Channel->Vpid() : 0),
m_VideoPacketCount(0), m_VideoPacketCount(0),
m_VideoBitrate(0.0), m_VideoBitrate(0.0),
m_VideoValid(false), m_VideoValid(false),
m_AudioBuffer(KILOBYTE(256), TS_SIZE, false, "Femon audio"), m_AudioBuffer(KILOBYTE(256), TS_SIZE, false, "Femon audio"),
m_AudioPid(Apid), m_AudioPid(Channel ? Channel->Apid(ATrack) : 0),
m_AudioPacketCount(0), m_AudioPacketCount(0),
m_AudioBitrate(0.0), m_AudioBitrate(0.0),
m_AudioValid(false), m_AudioValid(false),
m_AC3Buffer(KILOBYTE(256), TS_SIZE, false, "Femon AC3"), m_AC3Buffer(KILOBYTE(256), TS_SIZE, false, "Femon AC3"),
m_AC3Pid(Dpid), m_AC3Pid(Channel ? Channel->Dpid(DTrack) : 0),
m_AC3PacketCount(0), m_AC3PacketCount(0),
m_AC3Bitrate(0), m_AC3Bitrate(0),
m_AC3Valid(false) m_AC3Valid(false)
{ {
debug("%s()\n", __PRETTY_FUNCTION__); debug("%s()\n", __PRETTY_FUNCTION__);
SetPids(NULL);
AddPid(m_VideoPid); AddPid(m_VideoPid);
AddPid(m_AudioPid); AddPid(m_AudioPid);
AddPid(m_AC3Pid); AddPid(m_AC3Pid);

View File

@@ -108,7 +108,7 @@ public:
m_AC3Info.lfe = onoff; } m_AC3Info.lfe = onoff; }
public: public:
cFemonReceiver(int Vtype, int Vpid, int Apid, int Dpid); cFemonReceiver(const cChannel* Channel, int ATrack, int DTrack);
virtual ~cFemonReceiver(); virtual ~cFemonReceiver();
void Deactivate(void); void Deactivate(void);

View File

@@ -25,41 +25,41 @@ static cString getCA(int value)
switch (value) { switch (value) {
case 0x0000: return cString::sprintf("%s (%X)", trVDR("Free To Air"), value); // Reserved case 0x0000: return cString::sprintf("%s (%X)", trVDR("Free To Air"), value); // Reserved
case 0x0001 ... 0x009F: case 0x0001 ... 0x009F:
case 0x00A2 ... 0x00FF: return cString::sprintf("%s (%X)", tr("Fixed"), value); // Standardized systems case 0x00A2 ... 0x00FF: return cString::sprintf("%s (%X)", tr("Fixed"), value); // Standardized systems
case 0x00A0 ... 0x00A1: return cString::sprintf("%s (%X)", tr("Analog"), value); // Analog signals case 0x00A0 ... 0x00A1: return cString::sprintf("%s (%X)", tr("Analog"), value); // Analog signals
case 0x0100 ... 0x01FF: return cString::sprintf("%s (%X)", "SECA Mediaguard", value); // Canal Plus case 0x0100 ... 0x01FF: return cString::sprintf("SECA Mediaguard (%X)", value); // Canal Plus
case 0x0464: return cString::sprintf("%s (%X)", "EuroDec", value); // EuroDec case 0x0464: return cString::sprintf("EuroDec (%X)", value); // EuroDec
case 0x0500 ... 0x05FF: return cString::sprintf("%s (%X)", "Viaccess", value); // France Telecom case 0x0500 ... 0x05FF: return cString::sprintf("Viaccess (%X)", value); // France Telecom
case 0x0600 ... 0x06FF: return cString::sprintf("%s (%X)", "Irdeto", value); // Irdeto case 0x0600 ... 0x06FF: return cString::sprintf("Irdeto (%X)", value); // Irdeto
case 0x0900 ... 0x09FF: return cString::sprintf("%s (%X)", "NDS Videoguard", value); // News Datacom case 0x0900 ... 0x09FF: return cString::sprintf("NDS Videoguard (%X)", value); // News Datacom
case 0x0B00 ... 0x0BFF: return cString::sprintf("%s (%X)", "Conax", value); // Norwegian Telekom case 0x0B00 ... 0x0BFF: return cString::sprintf("Conax (%X)", value); // Norwegian Telekom
case 0x0D00 ... 0x0DFF: return cString::sprintf("%s (%X)", "CryptoWorks", value); // Philips case 0x0D00 ... 0x0DFF: return cString::sprintf("CryptoWorks (%X)", value); // Philips
case 0x0E00 ... 0x0EFF: return cString::sprintf("%s (%X)", "PowerVu", value); // Scientific Atlanta case 0x0E00 ... 0x0EFF: return cString::sprintf("PowerVu (%X)", value); // Scientific Atlanta
case 0x1000: return cString::sprintf("%s (%X)", "RAS", value); // Tandberg Television case 0x1000: return cString::sprintf("RAS (%X)", value); // Tandberg Television
case 0x1200 ... 0x12FF: return cString::sprintf("%s (%X)", "NagraVision", value); // BellVu Express case 0x1200 ... 0x12FF: return cString::sprintf("NagraVision (%X)", value); // BellVu Express
case 0x1700 ... 0x17FF: return cString::sprintf("%s (%X)", "BetaCrypt", value); // BetaTechnik case 0x1700 ... 0x17FF: return cString::sprintf("BetaCrypt (%X)", value); // BetaTechnik
case 0x1800 ... 0x18FF: return cString::sprintf("%s (%X)", "NagraVision", value); // Kudelski SA case 0x1800 ... 0x18FF: return cString::sprintf("NagraVision (%X)", value); // Kudelski SA
case 0x22F0: return cString::sprintf("%s (%X)", "Codicrypt", value); // Scopus Network Technologies case 0x22F0: return cString::sprintf("Codicrypt (%X)", value); // Scopus Network Technologies
case 0x2600: return cString::sprintf("%s (%X)", "BISS", value); // European Broadcasting Union case 0x2600: return cString::sprintf("BISS (%X)", value); // European Broadcasting Union
case 0x4347: return cString::sprintf("%s (%X)", "CryptOn", value); // CryptOn case 0x4347: return cString::sprintf("CryptOn (%X)", value); // CryptOn
case 0x4800: return cString::sprintf("%s (%X)", "Accessgate", value); // Telemann case 0x4800: return cString::sprintf("Accessgate (%X)", value); // Telemann
case 0x4900: return cString::sprintf("%s (%X)", "China Crypt", value); // CryptoWorks case 0x4900: return cString::sprintf("China Crypt (%X)", value); // CryptoWorks
case 0x4A10: return cString::sprintf("%s (%X)", "EasyCas", value); // EasyCas case 0x4A10: return cString::sprintf("EasyCas (%X)", value); // EasyCas
case 0x4A20: return cString::sprintf("%s (%X)", "AlphaCrypt", value); // AlphaCrypt case 0x4A20: return cString::sprintf("AlphaCrypt (%X)", value); // AlphaCrypt
case 0x4A70: return cString::sprintf("%s (%X)", "DreamCrypt", value); // Dream Multimedia case 0x4A70: return cString::sprintf("DreamCrypt (%X)", value); // Dream Multimedia
case 0x4A60: return cString::sprintf("%s (%X)", "SkyCrypt", value); // @Sky case 0x4A60: return cString::sprintf("SkyCrypt (%X)", value); // @Sky
case 0x4A61: return cString::sprintf("%s (%X)", "Neotioncrypt", value); // Neotion case 0x4A61: return cString::sprintf("Neotioncrypt (%X)", value); // Neotion
case 0x4A62: return cString::sprintf("%s (%X)", "SkyCrypt", value); // @Sky case 0x4A62: return cString::sprintf("SkyCrypt (%X)", value); // @Sky
case 0x4A63: return cString::sprintf("%s (%X)", "Neotion SHL", value); // Neotion case 0x4A63: return cString::sprintf("Neotion SHL (%X)", value); // Neotion
case 0x4A64 ... 0x4A6F: return cString::sprintf("%s (%X)", "SkyCrypt", value); // @Sky case 0x4A64 ... 0x4A6F: return cString::sprintf("SkyCrypt (%X)", value); // @Sky
case 0x4A80: return cString::sprintf("%s (%X)", "ThalesCrypt", value); // TPS case 0x4A80: return cString::sprintf("ThalesCrypt (%X)", value); // TPS
case 0x4AA1: return cString::sprintf("%s (%X)", "KeyFly", value); // SIDSA case 0x4AA1: return cString::sprintf("KeyFly (%X)", value); // SIDSA
case 0x4ABF: return cString::sprintf("%s (%X)", "DG-Crypt", value); // Beijing Compunicate Technology Inc. case 0x4ABF: return cString::sprintf("DG-Crypt (%X)", value); // Beijing Compunicate Technology Inc.
case 0x4AD0 ... 0x4AD1: return cString::sprintf("%s (%X)", "X-Crypt", value); // XCrypt Inc. case 0x4AD0 ... 0x4AD1: return cString::sprintf("X-Crypt (%X)", value); // XCrypt Inc.
case 0x4AD4: return cString::sprintf("%s (%X)", "OmniCrypt", value); // Widevine Technologies, Inc. case 0x4AD4: return cString::sprintf("OmniCrypt (%X)", value); // Widevine Technologies, Inc.
case 0x4AE0: return cString::sprintf("%s (%X)", "RossCrypt", value); // Digi Raum Electronics Co. Ltd. case 0x4AE0: return cString::sprintf("RossCrypt (%X)", value); // Digi Raum Electronics Co. Ltd.
case 0x5500: return cString::sprintf("%s (%X)", "Z-Crypt", value); // Digi Raum Electronics Co. Ltd. case 0x5500: return cString::sprintf("Z-Crypt (%X)", value); // Digi Raum Electronics Co. Ltd.
case 0x5501: return cString::sprintf("%s (%X)", "Griffin", value); // Griffin case 0x5501: return cString::sprintf("Griffin (%X)", value); // Griffin
default: break; default: break;
} }
return cString::sprintf("%X", value); return cString::sprintf("%X", value);
@@ -76,6 +76,16 @@ static const char *getUserString(int Value, const tDvbParameterMap *Map)
return "---"; return "---";
} }
cDvbDevice *getDvbDevice(cDevice* device)
{
cDvbDevice *dev = dynamic_cast<cDvbDevice*>(device);
#ifdef __DYNAMIC_DEVICE_PROBE
if (!dev && device && device->HasSubDevice())
dev = dynamic_cast<cDvbDevice*>(device->SubDevice());
#endif
return dev;
}
cString getFrontendInfo(cDvbDevice *device) cString getFrontendInfo(cDvbDevice *device)
{ {
cString info; cString info;
@@ -97,7 +107,7 @@ cString getFrontendInfo(cDvbDevice *device)
info = cString::sprintf("CARD:%d\nSTRG:%d\nQUAL:%d", device->CardIndex(), device->SignalStrength(), device->SignalQuality()); info = cString::sprintf("CARD:%d\nSTRG:%d\nQUAL:%d", device->CardIndex(), device->SignalStrength(), device->SignalQuality());
if (ioctl(fe, FE_GET_INFO, &value) >= 0) 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) if (ioctl(fe, FE_READ_STATUS, &status) >= 0)
info = cString::sprintf("%s\nSTAT:%02X", *info, status); info = cString::sprintf("%s\nSTAT:%02X", *info, status);
if (ioctl(fe, FE_READ_SIGNAL_STRENGTH, &signal) >= 0) if (ioctl(fe, FE_READ_SIGNAL_STRENGTH, &signal) >= 0)
@@ -121,19 +131,10 @@ cString getFrontendInfo(cDvbDevice *device)
cString getFrontendName(cDvbDevice *device) cString getFrontendName(cDvbDevice *device)
{ {
struct dvb_frontend_info value;
if (!device) if (!device)
return NULL; return NULL;
int fe = open(*cString::sprintf(FRONTEND_DEVICE, device->Adapter(), device->Frontend()), O_RDONLY | O_NONBLOCK); return (cString::sprintf("%s on device #%d", *device->DeviceName(), device->CardIndex()));
if (fe < 0)
return NULL;
memset(&value, 0, sizeof(value));
ioctl(fe, FE_GET_INFO, &value);
close(fe);
return (cString::sprintf("%s on device #%d", value.name, device->CardIndex()));
} }
cString getFrontendStatus(cDvbDevice *device) cString getFrontendStatus(cDvbDevice *device)

View File

@@ -26,6 +26,8 @@
#define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d" #define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d"
cDvbDevice *getDvbDevice(cDevice* device);
cString getFrontendInfo(cDvbDevice *device); cString getFrontendInfo(cDvbDevice *device);
cString getFrontendName(cDvbDevice *device); cString getFrontendName(cDvbDevice *device);
cString getFrontendStatus(cDvbDevice *device); cString getFrontendStatus(cDvbDevice *device);

22
iptvservice.h Normal file
View File

@@ -0,0 +1,22 @@
/*
* iptvservice.h: IPTV plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
*/
#ifndef __IPTVSERVICE_H
#define __IPTVSERVICE_H
#include <vdr/tools.h>
#define stIptv ('I' << 24)
struct IptvService_v1_0 {
unsigned int cardIndex;
cString protocol;
cString bitrate;
};
#endif //__IPTVSERVICE_H

View File

@@ -7,7 +7,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -66,6 +66,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Hauptmen<65>eintrag verstecken" msgstr "Hauptmen<65>eintrag verstecken"
@@ -177,6 +180,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Bitrate"
msgid "Stream Information" msgid "Stream Information"
msgstr "Streaminformation" msgstr "Streaminformation"
@@ -186,9 +195,6 @@ msgstr "Video Stream"
msgid "Codec" msgid "Codec"
msgstr "" msgstr ""
msgid "Bitrate"
msgstr "Bitrate"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Seitenverh<72>ltnis" msgstr "Seitenverh<72>ltnis"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Ocultar en el men<65> principal" msgstr "Ocultar en el men<65> principal"
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Tasa de bits"
msgid "Stream Information" msgid "Stream Information"
msgstr "Informaci<63>n del flujo" msgstr "Informaci<63>n del flujo"
@@ -184,9 +193,6 @@ msgstr "Flujo de video"
msgid "Codec" msgid "Codec"
msgstr "" msgstr ""
msgid "Bitrate"
msgstr "Tasa de bits"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Proporciones de la imagen" msgstr "Proporciones de la imagen"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Peita valik peamen<65><6E>s" msgstr "Peita valik peamen<65><6E>s"
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Bitikiirus"
msgid "Stream Information" msgid "Stream Information"
msgstr "Vooinfo" msgstr "Vooinfo"
@@ -184,9 +193,6 @@ msgstr "Videovoog"
msgid "Codec" msgid "Codec"
msgstr "Koodek" msgstr "Koodek"
msgid "Bitrate"
msgstr "Bitikiirus"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "K<>lgsuhe" msgstr "K<>lgsuhe"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Piilota valinta päävalikosta" msgstr "Piilota valinta päävalikosta"
@@ -175,6 +178,12 @@ msgstr "Radio-ID"
msgid "Coderate" msgid "Coderate"
msgstr "Suojaustaso" msgstr "Suojaustaso"
msgid "Protocol"
msgstr "Protokolla"
msgid "Bitrate"
msgstr "Bittinopeus"
msgid "Stream Information" msgid "Stream Information"
msgstr "Lähetteen tiedot" msgstr "Lähetteen tiedot"
@@ -184,9 +193,6 @@ msgstr "Kuvaraita"
msgid "Codec" msgid "Codec"
msgstr "Koodekki" msgstr "Koodekki"
msgid "Bitrate"
msgstr "Bittinopeus"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Kuvasuhde" msgstr "Kuvasuhde"
@@ -381,3 +387,9 @@ msgstr "Mbit/s"
msgid "kbit/s" msgid "kbit/s"
msgstr "kbit/s" msgstr "kbit/s"
#~ msgid "Information"
#~ msgstr "Tiedot"
#~ msgid "Statistics"
#~ msgstr "Tilastot"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Masquer dans le menu principal" msgstr "Masquer dans le menu principal"
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Bitrate"
msgid "Stream Information" msgid "Stream Information"
msgstr "Information flux" msgstr "Information flux"
@@ -184,9 +193,6 @@ msgstr "Flux vid
msgid "Codec" msgid "Codec"
msgstr "" msgstr ""
msgid "Bitrate"
msgstr "Bitrate"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Proportions d'image" msgstr "Proportions d'image"

View File

@@ -5,9 +5,9 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0200\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-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" "Last-Translator: F<>ley Istv<74>n <ifuley at tigercomp dot ro>\n"
"Language-Team: Hungarian <ifuley at tigercomp dot ro>\n" "Language-Team: Hungarian <ifuley at tigercomp dot ro>\n"
@@ -67,6 +67,9 @@ msgstr "K
msgid "SilverGreen" msgid "SilverGreen"
msgstr "Ez<45>st-z<>ld" msgstr "Ez<45>st-z<>ld"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Men<65>bejegyz<79>s elrejt<6A>se" msgstr "Men<65>bejegyz<79>s elrejt<6A>se"
@@ -178,6 +181,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Bitr<74>ta"
msgid "Stream Information" msgid "Stream Information"
msgstr "Adatfolyam inf<6E>" msgstr "Adatfolyam inf<6E>"
@@ -187,9 +196,6 @@ msgstr "Vide
msgid "Codec" msgid "Codec"
msgstr "Kodek" msgstr "Kodek"
msgid "Bitrate"
msgstr "Bitr<74>ta"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "M<>retar<61>ny" msgstr "M<>retar<61>ny"
@@ -384,4 +390,3 @@ msgstr "Mbit/s"
msgid "kbit/s" msgid "kbit/s"
msgstr "kbit/s" msgstr "kbit/s"

View File

@@ -6,7 +6,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -68,6 +68,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Nascondi voce menu principale" msgstr "Nascondi voce menu principale"
@@ -179,6 +182,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Bitrate"
msgid "Stream Information" msgid "Stream Information"
msgstr "Informazioni flusso" msgstr "Informazioni flusso"
@@ -188,9 +197,6 @@ msgstr "Flusso video"
msgid "Codec" msgid "Codec"
msgstr "Codifica" msgstr "Codifica"
msgid "Bitrate"
msgstr "Bitrate"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Formato immagine" msgstr "Formato immagine"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "Paslėpti pagrindinio meniu įrašus" msgstr "Paslėpti pagrindinio meniu įrašus"
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Kodavimo dažnis" msgstr "Kodavimo dažnis"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "Kokybė"
msgid "Stream Information" msgid "Stream Information"
msgstr "Srauto informacija" msgstr "Srauto informacija"
@@ -184,9 +193,6 @@ msgstr "Video srautas"
msgid "Codec" msgid "Codec"
msgstr "Kodekas" msgstr "Kodekas"
msgid "Bitrate"
msgstr "Kokybė"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "Proporcijos" msgstr "Proporcijos"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "Duotone"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "SilverGreen" msgstr "SilverGreen"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "Coderate" msgstr "Coderate"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr ""
msgid "Stream Information" msgid "Stream Information"
msgstr "" msgstr ""
@@ -184,9 +193,6 @@ msgstr ""
msgid "Codec" msgid "Codec"
msgstr "" msgstr ""
msgid "Bitrate"
msgstr ""
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "" msgstr ""

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "双色调"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "银绿" msgstr "银绿"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "隐藏主菜单条目." msgstr "隐藏主菜单条目."
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "码速率" msgstr "码速率"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "比特率"
msgid "Stream Information" msgid "Stream Information"
msgstr "流信息" msgstr "流信息"
@@ -184,9 +193,6 @@ msgstr "视频流"
msgid "Codec" msgid "Codec"
msgstr "解码模式" msgstr "解码模式"
msgid "Bitrate"
msgstr "比特率"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "纵横比" msgstr "纵横比"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-femon 1.7.14\n" "Project-Id-Version: vdr-femon 1.7.17\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2010-10-10 10:10+0300\n" "POT-Creation-Date: 2010-10-10 10:10+0300\n"
"PO-Revision-Date: 2010-10-10 10:10+0300\n" "PO-Revision-Date: 2010-10-10 10:10+0300\n"
@@ -64,6 +64,9 @@ msgstr "雙色調"
msgid "SilverGreen" msgid "SilverGreen"
msgstr "銀綠" msgstr "銀綠"
msgid "PearlHD"
msgstr "PearlHD"
msgid "Hide main menu entry" msgid "Hide main menu entry"
msgstr "隱藏主菜單條目." msgstr "隱藏主菜單條目."
@@ -175,6 +178,12 @@ msgstr "Rid"
msgid "Coderate" msgid "Coderate"
msgstr "碼速率" msgstr "碼速率"
msgid "Protocol"
msgstr ""
msgid "Bitrate"
msgstr "比特率"
msgid "Stream Information" msgid "Stream Information"
msgstr "流信息" msgstr "流信息"
@@ -184,9 +193,6 @@ msgstr "視頻流"
msgid "Codec" msgid "Codec"
msgstr "解碼模式" msgstr "解碼模式"
msgid "Bitrate"
msgstr "比特率"
msgid "Aspect Ratio" msgid "Aspect Ratio"
msgstr "縱橫比" msgstr "縱橫比"