mirror of
https://github.com/rofafor/vdr-plugin-femon.git
synced 2023-10-10 11:36:53 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e53fa8521 | ||
|
|
9514ed5387 | ||
|
|
a6039cdd66 | ||
|
|
848a2ba78d |
31
HISTORY
31
HISTORY
@@ -50,6 +50,14 @@ VDR Plugin 'femon' Revision History
|
|||||||
|
|
||||||
- Backported "stream information" feature (from version 0.1.1).
|
- Backported "stream information" feature (from version 0.1.1).
|
||||||
|
|
||||||
|
2004-06-06: Version 0.0.5
|
||||||
|
|
||||||
|
- Backported changes and fixes from version 0.1.2.
|
||||||
|
|
||||||
|
2004-06-11: Version 0.0.6
|
||||||
|
|
||||||
|
- Backported the "AC3 Stream Information" feature from version 0.1.3.
|
||||||
|
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
2004-05-18: Version 0.1.0
|
2004-05-18: Version 0.1.0
|
||||||
@@ -63,3 +71,26 @@ VDR Plugin 'femon' Revision History
|
|||||||
.-> basic -> transponder -> stream -.
|
.-> basic -> transponder -> stream -.
|
||||||
`-----------------------------------<2D>
|
`-----------------------------------<2D>
|
||||||
- Added missing german translations (Thanks to Peter Marquardt).
|
- Added missing german translations (Thanks to Peter Marquardt).
|
||||||
|
|
||||||
|
2004-06-06: Version 0.1.2
|
||||||
|
|
||||||
|
- Fixed the channel switch bug (reported by Stefan Lucke).
|
||||||
|
- Nid/Tid/Rid are now included in translations.
|
||||||
|
- Added video format and aspect ratio symbols into status window.
|
||||||
|
|
||||||
|
2004-06-11: Version 0.1.3
|
||||||
|
|
||||||
|
- Added "AC-3 Stream Information" display mode (Thanks to Lothar Englisch).
|
||||||
|
|
||||||
|
2004-06-24: Version 0.1.4
|
||||||
|
|
||||||
|
- Added some new symbols and beautified the old ones.
|
||||||
|
- Added audio track selection feature.
|
||||||
|
- Added preliminary device switching feature (disabled at the moment).
|
||||||
|
|
||||||
|
2004-08-18: Version 0.1.5
|
||||||
|
|
||||||
|
- Fixed OSDSTATUSWIN_XC define.
|
||||||
|
- Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins).
|
||||||
|
- Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting this one).
|
||||||
|
- Added patches directory: CA system names by Lauri Tischler.
|
||||||
|
|||||||
6
Makefile
6
Makefile
@@ -11,7 +11,7 @@ PLUGIN = femon
|
|||||||
|
|
||||||
### The version number of this plugin (taken from the main source file):
|
### 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')
|
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).h | awk '{ print $$6 }' | sed -e 's/[";]//g')
|
||||||
|
|
||||||
### The C++ compiler and options:
|
### The C++ compiler and options:
|
||||||
|
|
||||||
@@ -44,6 +44,10 @@ INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
|
|||||||
|
|
||||||
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
|
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
|
||||||
|
|
||||||
|
ifdef NTSC_SYSTEM
|
||||||
|
DEFINES += -DNTSC_SYSTEM
|
||||||
|
endif
|
||||||
|
|
||||||
### The object files (add further files here):
|
### The object files (add further files here):
|
||||||
|
|
||||||
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o
|
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o
|
||||||
|
|||||||
75
README
75
README
@@ -10,9 +10,7 @@ See the file COPYING for license information.
|
|||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
|
|
||||||
Ph.D. in Astro Physics and preferably a six-pack waiting in a fridge.
|
VDR & DVB. BMW & Ph.D.. BEER. YARRR!
|
||||||
Never trust a Klingon. "Qu'vaD lI' De'vam". Beam me up, Scotty!
|
|
||||||
You're number six! I'm number two.
|
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
|
|
||||||
@@ -20,17 +18,66 @@ DVB Frontend Status Monitor is a plugin that displays some signal information
|
|||||||
parameters of the current tuned channel on OSD. You can zap through all your
|
parameters of the current tuned channel on OSD. You can zap through all your
|
||||||
channels and the plugin should be monitoring always the right frontend. The
|
channels and the plugin should be monitoring always the right frontend. The
|
||||||
transponder and stream information are also available in advanced display modes.
|
transponder and stream information are also available in advanced display modes.
|
||||||
User can switch between different display modes by pressing 'OK' key.
|
|
||||||
|
|
||||||
The plugin is based on a neat console frontend status monitor application called
|
The plugin is based on a neat console frontend status monitor application
|
||||||
'femon' by Johannes Stezenbach <js@convergence.de> (see DVB-apps/szap/femon.c
|
called 'femon' by Johannes Stezenbach (see DVB-apps/szap/femon.c for further
|
||||||
for further information). The other parts of plugin code are borrowed from the
|
information). The other parts of plugin code are borrowed from the excellent
|
||||||
excellent 'OSD Picture-In-Picture' plugin by Sascha Volkenandt and Andreas Regel.
|
'OSD Picture-In-Picture' plugin by Sascha Volkenandt and Andreas Regel. The
|
||||||
The bitrate calculation algorithm originates from the 'dvbstream' application by
|
bitrate calculation algorithm originates from the 'dvbstream' application by
|
||||||
Dave Chapman and the stream information routines from the 'libdvb' library by
|
Dave Chapman and the stream information routines from the 'libdvb' library by
|
||||||
Metzler Brothers.
|
Metzler Brothers.
|
||||||
|
|
||||||
Shortcomings / Todo list / Important Notes:
|
Terminology:
|
||||||
|
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|## Channel Name ######################### [DD][AR][VF][A][D]|
|
||||||
|
|[=====Signal Strength in % ==============|=================]|
|
||||||
|
|[=====Signal-to-Noise Ratio in % ========|=================]|
|
||||||
|
| STR: #0000 (0%) BER: #00000000 Video: 0 Mbit/s |
|
||||||
|
| SNR: #0000 (0%) UNC: #00000000 Audio: 0 kbit/s |
|
||||||
|
| [LOCK] [SIGNAL] [CARRIER] [VITERBI] [SYNC] |
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
STR - Signal strength
|
||||||
|
SNR - Signal-to-noise ratio
|
||||||
|
BER - Bit error rate
|
||||||
|
UNC - Uncorrected blocks
|
||||||
|
Video - Calculated video bitrate in Mbit/s
|
||||||
|
Audio - Calculated audio / AC-3 bitrate in kbit/s
|
||||||
|
|
||||||
|
LOCK - Everything's working...
|
||||||
|
SIGNAL - Found something above the noise level
|
||||||
|
CARRIER - Found a DVB signal
|
||||||
|
VITERBI - FEC (forward error correction) is stable
|
||||||
|
SYNC - Found sync bytes
|
||||||
|
|
||||||
|
DD - AC-3 stream (optional)
|
||||||
|
AR - Aspect Ratio: 1:1/4:3/16:9/2.21:1 (optional)
|
||||||
|
VF - Video format: PAL/NTSC (optional)
|
||||||
|
A - Audio track: 1..2 (optional)
|
||||||
|
D - Device number: 0..3 (optional)
|
||||||
|
|
||||||
|
Controls:
|
||||||
|
|
||||||
|
ChanUp/ChanDn - Switch channel up/down
|
||||||
|
Up/Down - Switch channel up/down
|
||||||
|
0-9 - Select channel
|
||||||
|
Ok - Switch between display modes: basic, transponder, stream, AC-3
|
||||||
|
Right/Left - Switch to next/previous device that provides the current channel
|
||||||
|
Green - Select language (APID)
|
||||||
|
Back - Exit plugin
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
|
||||||
|
cd /put/your/path/here/VDR/PLUGINS/src
|
||||||
|
tar -xzf /put/your/path/here/vdr-femon-X.Y.Z.tgz
|
||||||
|
ln -s femon-X.Y.Z femon
|
||||||
|
cd /put/your/path/here/VDR
|
||||||
|
make
|
||||||
|
make plugins
|
||||||
|
./vdr -P femon
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
- The plugin supports only those DVB cards with _one_ frontend (do any cards
|
- The plugin supports only those DVB cards with _one_ frontend (do any cards
|
||||||
with multiple frontends even exist?), because I haven't yet figured howto do
|
with multiple frontends even exist?), because I haven't yet figured howto do
|
||||||
@@ -39,4 +86,10 @@ Shortcomings / Todo list / Important Notes:
|
|||||||
ttxtsubs, but closing and reopening the femon plugin might help temporarily as
|
ttxtsubs, but closing and reopening the femon plugin might help temporarily as
|
||||||
well. Btw., this same thing happens with OSDTeletext plugin too :)
|
well. Btw., this same thing happens with OSDTeletext plugin too :)
|
||||||
- Disable the stream analyze to speed up heavy zapping sessions.
|
- Disable the stream analyze to speed up heavy zapping sessions.
|
||||||
- If you're using VDR version 1.3.6 or older, you'll have to stick with femon-0.0.4!
|
- The signal strength and signal-to-noise ratio values are comparable only
|
||||||
|
between the same brand/model frontends. Due to a lack of proper frontend
|
||||||
|
specifications those values cannot be calculated into any real unit.
|
||||||
|
- Shrinked OSD is available for NTSC users: make NTSC_SYSTEM=1
|
||||||
|
- The device switching feature is still non-functional.
|
||||||
|
|
||||||
|
"Femon - A real womon who lives according to her natural feminine inclinations."
|
||||||
|
|||||||
9
femon.c
9
femon.c
@@ -12,7 +12,7 @@
|
|||||||
#include "femonosd.h"
|
#include "femonosd.h"
|
||||||
#include "femon.h"
|
#include "femon.h"
|
||||||
|
|
||||||
#if VDRVERSNUM < 10307
|
#if VDRVERSNUM && VDRVERSNUM < 10307
|
||||||
#error "You don't exist! Go away!"
|
#error "You don't exist! Go away!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -85,9 +85,10 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value)
|
|||||||
|
|
||||||
cMenuFemonSetup::cMenuFemonSetup(void)
|
cMenuFemonSetup::cMenuFemonSetup(void)
|
||||||
{
|
{
|
||||||
dispmodes[0] = tr("basic");
|
dispmodes[modeBasic] = tr("basic");
|
||||||
dispmodes[1] = tr("transponder");
|
dispmodes[modeTransponder] = tr("transponder");
|
||||||
dispmodes[2] = tr("stream");
|
dispmodes[modeStream] = tr("stream");
|
||||||
|
dispmodes[modeAC3] = tr("AC-3");
|
||||||
Setup();
|
Setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
femon.h
2
femon.h
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
|
|
||||||
static const char *VERSION = "0.1.1";
|
static const char *VERSION = "0.1.5";
|
||||||
static const char *DESCRIPTION = "DVB Signal Information Monitor (OSD)";
|
static const char *DESCRIPTION = "DVB Signal Information Monitor (OSD)";
|
||||||
static const char *MAINMENUENTRY = "Signal Information";
|
static const char *MAINMENUENTRY = "Signal Information";
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ enum dispModes {
|
|||||||
modeBasic,
|
modeBasic,
|
||||||
modeTransponder,
|
modeTransponder,
|
||||||
modeStream,
|
modeStream,
|
||||||
|
modeAC3,
|
||||||
modeMaxNumber
|
modeMaxNumber
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
607
femoni18n.c
607
femoni18n.c
@@ -492,7 +492,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"Auto", // Portugu<67>s
|
"Auto", // Portugu<67>s
|
||||||
"Auto", // Fran<61>ais
|
"Auto", // Fran<61>ais
|
||||||
"Auto", // Norsk
|
"Auto", // Norsk
|
||||||
"Auto", // suomi
|
"auto", // suomi
|
||||||
"Auto", // Polski
|
"Auto", // Polski
|
||||||
"Auto", // Espa<70>ol
|
"Auto", // Espa<70>ol
|
||||||
"Auto", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
"Auto", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
@@ -511,7 +511,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"None", // Portugu<67>s
|
"None", // Portugu<67>s
|
||||||
"None", // Fran<61>ais
|
"None", // Fran<61>ais
|
||||||
"None", // Norsk
|
"None", // Norsk
|
||||||
"None", // suomi
|
"ei", // suomi
|
||||||
"None", // Polski
|
"None", // Polski
|
||||||
"None", // Espa<70>ol
|
"None", // Espa<70>ol
|
||||||
"None", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
"None", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
@@ -530,7 +530,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"Off", // Portugu<67>s
|
"Off", // Portugu<67>s
|
||||||
"Off", // Fran<61>ais
|
"Off", // Fran<61>ais
|
||||||
"Off", // Norsk
|
"Off", // Norsk
|
||||||
"Off", // suomi
|
"poissa", // suomi
|
||||||
"Off", // Polski
|
"Off", // Polski
|
||||||
"Off", // Espa<70>ol
|
"Off", // Espa<70>ol
|
||||||
"Off", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
"Off", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
@@ -549,7 +549,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"On", // Portugu<67>s
|
"On", // Portugu<67>s
|
||||||
"On", // Fran<61>ais
|
"On", // Fran<61>ais
|
||||||
"On", // Norsk
|
"On", // Norsk
|
||||||
"On", // suomi
|
"p<EFBFBD><EFBFBD>ll<EFBFBD>", // suomi
|
||||||
"On", // Polski
|
"On", // Polski
|
||||||
"On", // Espa<70>ol
|
"On", // Espa<70>ol
|
||||||
"On", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
"On", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
@@ -728,7 +728,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"Hz", // Romaneste
|
"Hz", // Romaneste
|
||||||
"Hz", // Magyar
|
"Hz", // Magyar
|
||||||
"Hz", // Catal<61>
|
"Hz", // Catal<61>
|
||||||
"Hz", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
"<EFBFBD><EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
"Hz", // Hrvatski (Croatian)
|
"Hz", // Hrvatski (Croatian)
|
||||||
},
|
},
|
||||||
{ "Aspect Ratio", // English
|
{ "Aspect Ratio", // English
|
||||||
@@ -937,18 +937,607 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"kHz", // Romaneste
|
"kHz", // Romaneste
|
||||||
"kHz", // Magyar
|
"kHz", // Magyar
|
||||||
"kHz", // Catal<61>
|
"kHz", // Catal<61>
|
||||||
"kHz", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
"ڳ<EFBFBD>", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
"kHz", // Hrvatski (Croatian)
|
"kHz", // Hrvatski (Croatian)
|
||||||
},
|
},
|
||||||
{ "MPEG Layer", // English
|
{ "Nid", // English
|
||||||
"MPEG Layer", // Deutsch
|
"Nid", // Deutsch
|
||||||
|
"Nid", // Slovenski
|
||||||
|
"Nid", // Italiano
|
||||||
|
"Nid", // Nederlands
|
||||||
|
"Nid", // Portugu<67>s
|
||||||
|
"Nid", // Fran<61>ais
|
||||||
|
"Nid", // Norsk
|
||||||
|
"Verkko ID", // suomi
|
||||||
|
"Nid", // Polski
|
||||||
|
"Nid", // Espa<70>ol
|
||||||
|
"Nid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"Nid", // Svenska
|
||||||
|
"Nid", // Romaneste
|
||||||
|
"Nid", // Magyar
|
||||||
|
"Nid", // Catal<61>
|
||||||
|
"Nid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"Nid", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Tid", // English
|
||||||
|
"Tid", // Deutsch
|
||||||
|
"Tid", // Slovenski
|
||||||
|
"Tid", // Italiano
|
||||||
|
"Tid", // Nederlands
|
||||||
|
"Tid", // Portugu<67>s
|
||||||
|
"Tid", // Fran<61>ais
|
||||||
|
"Tid", // Norsk
|
||||||
|
"L<EFBFBD>hete ID", // suomi
|
||||||
|
"Tid", // Polski
|
||||||
|
"Tid", // Espa<70>ol
|
||||||
|
"Tid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"Tid", // Svenska
|
||||||
|
"Tid", // Romaneste
|
||||||
|
"Tid", // Magyar
|
||||||
|
"Tid", // Catal<61>
|
||||||
|
"Tid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"Tid", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Rid", // English
|
||||||
|
"Rid", // Deutsch
|
||||||
|
"Rid", // Slovenski
|
||||||
|
"Rid", // Italiano
|
||||||
|
"Rid", // Nederlands
|
||||||
|
"Rid", // Portugu<67>s
|
||||||
|
"Rid", // Fran<61>ais
|
||||||
|
"Rid", // Norsk
|
||||||
|
"Radio ID", // suomi
|
||||||
|
"Rid", // Polski
|
||||||
|
"Rid", // Espa<70>ol
|
||||||
|
"Rid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"Rid", // Svenska
|
||||||
|
"Rid", // Romaneste
|
||||||
|
"Rid", // Magyar
|
||||||
|
"Rid", // Catal<61>
|
||||||
|
"Rid", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"Rid", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "dB", // English
|
||||||
|
"dB", // Deutsch
|
||||||
|
"dB", // Slovenski
|
||||||
|
"dB", // Italiano
|
||||||
|
"dB", // Nederlands
|
||||||
|
"dB", // Portugu<67>s
|
||||||
|
"dB", // Fran<61>ais
|
||||||
|
"dB", // Norsk
|
||||||
|
"dB", // suomi
|
||||||
|
"dB", // Polski
|
||||||
|
"dB", // Espa<70>ol
|
||||||
|
"dB", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"dB", // Svenska
|
||||||
|
"dB", // Romaneste
|
||||||
|
"dB", // Magyar
|
||||||
|
"dB", // Catal<61>
|
||||||
|
"dB", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"dB", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "not indicated", // English
|
||||||
|
"", // Deutsch
|
||||||
"", // Slovenski
|
"", // Slovenski
|
||||||
"", // Italiano
|
"", // Italiano
|
||||||
"", // Nederlands
|
"", // Nederlands
|
||||||
"", // Portugu<67>s
|
"", // Portugu<67>s
|
||||||
"", // Fran<61>ais
|
"", // Fran<61>ais
|
||||||
"", // Norsk
|
"", // Norsk
|
||||||
"MPEG-kerros", // suomi
|
"ei ilmaistu", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "AC-3", // English
|
||||||
|
"AC-3", // Deutsch
|
||||||
|
"AC-3", // Slovenski
|
||||||
|
"AC-3", // Italiano
|
||||||
|
"AC-3", // Nederlands
|
||||||
|
"AC-3", // Portugu<67>s
|
||||||
|
"AC-3", // Fran<61>ais
|
||||||
|
"AC-3", // Norsk
|
||||||
|
"AC-3", // suomi
|
||||||
|
"AC-3", // Polski
|
||||||
|
"AC-3", // Espa<70>ol
|
||||||
|
"AC-3", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"AC-3", // Svenska
|
||||||
|
"AC-3", // Romaneste
|
||||||
|
"AC-3", // Magyar
|
||||||
|
"AC-3", // Catal<61>
|
||||||
|
"AC-3", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"AC-3", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "AC-3 Stream", // English
|
||||||
|
"AC-3 Stream", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"AC-3 <20><>niraita", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Frame Size", // English
|
||||||
|
"Frame Gr<47><72>e", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Kehyksen koko", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Bit Stream Mode", // English
|
||||||
|
"Bitstream Modus", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"L<EFBFBD>hetteen tyyppi", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Audio Coding Mode", // English
|
||||||
|
"Audio Coding Modus", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"<EFBFBD><EFBFBD>nikoodaus", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Center Mix Level", // English
|
||||||
|
"Center Mix Pegel", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Keskikanavan taso", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Surround Mix Level", // English
|
||||||
|
"Surround Mix Pegel", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Tehostekanavien taso", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Dolby Surround Mode", // English
|
||||||
|
"Dolby Surround Modus", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Dolby Surround -moodi", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Low Frequency Effects", // English
|
||||||
|
"Tieft<EFBFBD>ner Effekte", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"LFE-kanava", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Dialogue Normalization", // English
|
||||||
|
"Dialog Normalisierung", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Dialogin normalisointi", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Complete Main (CM)", // English
|
||||||
|
"Complete Main (CM)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"P<EFBFBD><EFBFBD>asiallinen (CM)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Music and Effects (ME)", // English
|
||||||
|
"Musik und Effekte (ME)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Musiikki ja tehosteet (ME)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Visually Impaired (VI)", // English
|
||||||
|
"Sehbehindert (VI)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"N<EFBFBD>k<EFBFBD>rajoitteinen (VI)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Hearing Impaired (HI)", // English
|
||||||
|
"H<EFBFBD>rbehindert (HI)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Kuulorajoitteinen (HI)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Dialogue (D)", // English
|
||||||
|
"Dialog (D)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Vuoropuhelu (D)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Commentary (C)", // English
|
||||||
|
"Kommentar (C)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Kommentointi (C)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Emergency (E)", // English
|
||||||
|
"Notfall (E)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"H<EFBFBD>t<EFBFBD>tiedote (E)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Voice Over (VO)", // English
|
||||||
|
"<EFBFBD>berlagerte Stimme (VO)", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"P<EFBFBD><EFBFBD>lle puhuttu (VO)", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Karaoke", // English
|
||||||
|
"Karaoke", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"Karaoke", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Ch1", // English "Channel 1"
|
||||||
|
"Kan1", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"kan. 1", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "Ch2", // English "Channel 2"
|
||||||
|
"Kan2", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"kan. 2", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "C", // English "Center"
|
||||||
|
"C", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"K", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "L", // English "Left"
|
||||||
|
"L", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"V", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "R", // English "Right"
|
||||||
|
"R", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"O", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "S", // English "Surround"
|
||||||
|
"S", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"T", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "SL", // English "Surround Left"
|
||||||
|
"SL", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"TV", // suomi
|
||||||
|
"", // Polski
|
||||||
|
"", // Espa<70>ol
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
"", // Svenska
|
||||||
|
"", // Romaneste
|
||||||
|
"", // Magyar
|
||||||
|
"", // Catal<61>
|
||||||
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian)
|
||||||
|
"", // Hrvatski (Croatian)
|
||||||
|
},
|
||||||
|
{ "SR", // English "Surround Right"
|
||||||
|
"SR", // Deutsch
|
||||||
|
"", // Slovenski
|
||||||
|
"", // Italiano
|
||||||
|
"", // Nederlands
|
||||||
|
"", // Portugu<67>s
|
||||||
|
"", // Fran<61>ais
|
||||||
|
"", // Norsk
|
||||||
|
"TO", // suomi
|
||||||
"", // Polski
|
"", // Polski
|
||||||
"", // Espa<70>ol
|
"", // Espa<70>ol
|
||||||
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek)
|
||||||
|
|||||||
372
femonosd.c
372
femonosd.c
@@ -12,13 +12,31 @@
|
|||||||
#include "femonreceiver.h"
|
#include "femonreceiver.h"
|
||||||
#include "femonosd.h"
|
#include "femonosd.h"
|
||||||
|
|
||||||
|
#include "symbols/dev0.xpm"
|
||||||
|
#include "symbols/dev1.xpm"
|
||||||
|
#include "symbols/dev2.xpm"
|
||||||
|
#include "symbols/dev3.xpm"
|
||||||
|
#include "symbols/apid1.xpm"
|
||||||
|
#include "symbols/apid2.xpm"
|
||||||
|
#include "symbols/ar11.xpm"
|
||||||
|
#include "symbols/ar169.xpm"
|
||||||
|
#include "symbols/ar2211.xpm"
|
||||||
|
#include "symbols/ar43.xpm"
|
||||||
|
#include "symbols/ntsc.xpm"
|
||||||
|
#include "symbols/pal.xpm"
|
||||||
|
#include "symbols/dolbydigital.xpm"
|
||||||
|
#include "symbols/dolbydigital20.xpm"
|
||||||
|
#include "symbols/dolbydigital51.xpm"
|
||||||
|
|
||||||
#define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d"
|
#define FRONTEND_DEVICE "/dev/dvb/adapter%d/frontend%d"
|
||||||
#define CHANNELINPUT_TIMEOUT 1000
|
#define CHANNELINPUT_TIMEOUT 1000
|
||||||
|
|
||||||
#define SCREENWIDTH 720 // in pixels
|
#ifdef NTSC_SYSTEM
|
||||||
#define SCREENHEIGHT 576 // in pixels
|
#define OSDHEIGHT 420 // in pixels
|
||||||
#define OSDWIDTH 600 // in pixels
|
#else
|
||||||
#define OSDHEIGHT 480 // in pixels
|
#define OSDHEIGHT 480 // in pixels
|
||||||
|
#endif
|
||||||
|
#define OSDWIDTH 600 // in pixels
|
||||||
#define OSDINFOHEIGHT (m_Font->Height() * 11) // in pixels (11 rows)
|
#define OSDINFOHEIGHT (m_Font->Height() * 11) // in pixels (11 rows)
|
||||||
#define OSDSTATUSHEIGHT (m_Font->Height() * 6) // in pixels (6 rows)
|
#define OSDSTATUSHEIGHT (m_Font->Height() * 6) // in pixels (6 rows)
|
||||||
|
|
||||||
@@ -26,11 +44,28 @@
|
|||||||
#define OSDINFOWIN_X(col) ((col == 4) ? 470 : (col == 3) ? 300 : (col==2) ? 180 : 15)
|
#define OSDINFOWIN_X(col) ((col == 4) ? 470 : (col == 3) ? 300 : (col==2) ? 180 : 15)
|
||||||
#define OSDSTATUSWIN_Y(offset) (femonConfig.position ? offset : (OSDHEIGHT - OSDSTATUSHEIGHT + offset))
|
#define OSDSTATUSWIN_Y(offset) (femonConfig.position ? offset : (OSDHEIGHT - OSDSTATUSHEIGHT + offset))
|
||||||
#define OSDSTATUSWIN_X(col) ((col == 7) ? 475 : (col == 6) ? 410 : (col == 5) ? 275 : (col == 4) ? 220 : (col == 3) ? 125 : (col==2) ? 70 : 15)
|
#define OSDSTATUSWIN_X(col) ((col == 7) ? 475 : (col == 6) ? 410 : (col == 5) ? 275 : (col == 4) ? 220 : (col == 3) ? 125 : (col==2) ? 70 : 15)
|
||||||
#define OSDSTATUSWIN_XC(col,txt) (((col - 1) * SCREENWIDTH / 6) + ((SCREENWIDTH / 6 - m_Font->Width(txt)) / 2))
|
#define OSDSTATUSWIN_XC(col,txt) (((col - 1) * OSDWIDTH / 5) + ((OSDWIDTH / 5 - m_Font->Width(txt)) / 2))
|
||||||
#define BARWIDTH(x) (OSDWIDTH * x / 100)
|
#define BARWIDTH(x) (OSDWIDTH * x / 100)
|
||||||
|
#define SPACING 5
|
||||||
|
|
||||||
#define clrBackground clrGray50 // this should be tied somehow into current theme
|
#define clrBackground clrGray50 // this should be tied somehow into current theme
|
||||||
|
|
||||||
|
cBitmap cFemonOsd::bmDevice0(dev0_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDevice1(dev1_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDevice2(dev2_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDevice3(dev3_xpm);
|
||||||
|
cBitmap cFemonOsd::bmApid1(apid1_xpm);
|
||||||
|
cBitmap cFemonOsd::bmApid2(apid2_xpm);
|
||||||
|
cBitmap cFemonOsd::bmAspectRatio_1_1(ar11_xpm);
|
||||||
|
cBitmap cFemonOsd::bmAspectRatio_16_9(ar169_xpm);
|
||||||
|
cBitmap cFemonOsd::bmAspectRatio_2_21_1(ar2211_xpm);
|
||||||
|
cBitmap cFemonOsd::bmAspectRatio_4_3(ar43_xpm);
|
||||||
|
cBitmap cFemonOsd::bmPAL(pal_xpm);
|
||||||
|
cBitmap cFemonOsd::bmNTSC(ntsc_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDD(dolbydigital_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDD20(dolbydigital20_xpm);
|
||||||
|
cBitmap cFemonOsd::bmDD51(dolbydigital51_xpm);
|
||||||
|
|
||||||
cFemonOsd::cFemonOsd(void)
|
cFemonOsd::cFemonOsd(void)
|
||||||
:cOsdObject(true), cThread("femon osd")
|
:cOsdObject(true), cThread("femon osd")
|
||||||
{
|
{
|
||||||
@@ -47,8 +82,15 @@ cFemonOsd::cFemonOsd(void)
|
|||||||
m_BER = 0;
|
m_BER = 0;
|
||||||
m_UNC = 0;
|
m_UNC = 0;
|
||||||
m_DisplayMode = femonConfig.displaymode;
|
m_DisplayMode = femonConfig.displaymode;
|
||||||
m_Font = cFont::GetFont(fontSml);
|
|
||||||
m_Mutex = new cMutex();
|
m_Mutex = new cMutex();
|
||||||
|
if (Setup.UseSmallFont == 0) {
|
||||||
|
// Dirty hack to force the small fonts...
|
||||||
|
Setup.UseSmallFont = 1;
|
||||||
|
m_Font = cFont::GetFont(fontSml);
|
||||||
|
Setup.UseSmallFont = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_Font = cFont::GetFont(fontSml);
|
||||||
}
|
}
|
||||||
|
|
||||||
cFemonOsd::~cFemonOsd(void)
|
cFemonOsd::~cFemonOsd(void)
|
||||||
@@ -72,6 +114,8 @@ void cFemonOsd::DrawStatusWindow(void)
|
|||||||
int snr = m_SNR / 655;
|
int snr = m_SNR / 655;
|
||||||
int signal = m_Signal / 655;
|
int signal = m_Signal / 655;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
int x = OSDWIDTH;
|
||||||
|
int y = 0;
|
||||||
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
|
|
||||||
if (m_Osd) {
|
if (m_Osd) {
|
||||||
@@ -79,6 +123,107 @@ void cFemonOsd::DrawStatusWindow(void)
|
|||||||
snprintf(buf, sizeof(buf), "%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->Name());
|
snprintf(buf, sizeof(buf), "%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->Name());
|
||||||
m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+m_Font->Height()-1), clrWhite);
|
m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+m_Font->Height()-1), clrWhite);
|
||||||
m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), buf, clrBlack, clrWhite, m_Font);
|
m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), buf, clrBlack, clrWhite, m_Font);
|
||||||
|
if (m_Receiver) {
|
||||||
|
int value = cDevice::ActualDevice()->CardIndex();
|
||||||
|
if (value == 0) {
|
||||||
|
x -= bmDevice0.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDevice0.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice0, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == 1) {
|
||||||
|
x -= bmDevice1.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDevice1.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice1, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == 2) {
|
||||||
|
x -= bmDevice2.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDevice2.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice2, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == 3) {
|
||||||
|
x -= bmDevice3.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDevice3.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDevice3, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
value = -1;
|
||||||
|
const char **AudioTracks = cDevice::PrimaryDevice()->GetAudioTracks(&value);
|
||||||
|
if (AudioTracks) {
|
||||||
|
if (value == 0) {
|
||||||
|
x -= bmApid1.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmApid1.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmApid1, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == 1) {
|
||||||
|
x -= bmApid2.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmApid2.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmApid2, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
value = m_Receiver->VideoFormat();
|
||||||
|
if (value == VF_PAL) {
|
||||||
|
x -= bmPAL.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmPAL.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmPAL, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == VF_NTSC) {
|
||||||
|
x -= bmNTSC.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmNTSC.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmNTSC, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
value = m_Receiver->VideoAspectRatio();
|
||||||
|
if (value == AR_1_1) {
|
||||||
|
x -= bmAspectRatio_1_1.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmAspectRatio_1_1.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_1_1, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == AR_4_3) {
|
||||||
|
x -= bmAspectRatio_4_3.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmAspectRatio_4_3.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_4_3, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == AR_16_9) {
|
||||||
|
x -= bmAspectRatio_16_9.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmAspectRatio_16_9.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_16_9, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (value == AR_2_21_1) {
|
||||||
|
x -= bmAspectRatio_2_21_1.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmAspectRatio_2_21_1.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmAspectRatio_2_21_1, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
if (m_Receiver && m_Receiver->AC3Valid()) {
|
||||||
|
if (m_Receiver->AC3_5_1()) {
|
||||||
|
x -= bmDD51.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDD51.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD51, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else if (m_Receiver->AC3_2_0()) {
|
||||||
|
x -= bmDD20.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDD20.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD20, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
x -= bmDD.Width() + SPACING;
|
||||||
|
y = (m_Font->Height() - bmDD.Height()) / 2;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset+y), bmDD, clrBlack, clrWhite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
if (signal > 0) {
|
if (signal > 0) {
|
||||||
signal = BARWIDTH(signal);
|
signal = BARWIDTH(signal);
|
||||||
@@ -124,9 +269,9 @@ void cFemonOsd::DrawStatusWindow(void)
|
|||||||
m_Osd->DrawText(OSDSTATUSWIN_X(4), OSDSTATUSWIN_Y(offset), "UNC:", clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDSTATUSWIN_X(4), OSDSTATUSWIN_Y(offset), "UNC:", clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%08x", m_UNC);
|
snprintf(buf, sizeof(buf), "%08x", m_UNC);
|
||||||
m_Osd->DrawText(OSDSTATUSWIN_X(5), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDSTATUSWIN_X(5), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%s:", tr("Audio"));
|
snprintf(buf, sizeof(buf), "%s:", (m_Receiver && m_Receiver->AC3Valid()) ? tr("AC-3") : tr("Audio"));
|
||||||
m_Osd->DrawText(OSDSTATUSWIN_X(6), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDSTATUSWIN_X(6), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
||||||
if (m_Receiver) snprintf(buf, sizeof(buf), "%.0f %s", m_Receiver->AudioBitrate(), tr("kbit/s"));
|
if (m_Receiver) snprintf(buf, sizeof(buf), "%.0f %s", m_Receiver->AC3Valid() ? m_Receiver->AC3Bitrate() : m_Receiver->AudioBitrate(), tr("kbit/s"));
|
||||||
else snprintf(buf, sizeof(buf), "--- %s", tr("kbit/s"));
|
else snprintf(buf, sizeof(buf), "--- %s", tr("kbit/s"));
|
||||||
m_Osd->DrawText(OSDSTATUSWIN_X(7), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDSTATUSWIN_X(7), OSDSTATUSWIN_Y(offset), buf, clrWhite, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
@@ -175,7 +320,7 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Ca());
|
snprintf(buf, sizeof(buf), "%X", channel->Ca());
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Tpid());
|
snprintf(buf, sizeof(buf), "%d", channel->Tpid());
|
||||||
@@ -184,14 +329,14 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Sid"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Sid"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Sid());
|
snprintf(buf, sizeof(buf), "%d", channel->Sid());
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), "Nid", clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Nid"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Nid());
|
snprintf(buf, sizeof(buf), "%d", channel->Nid());
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), "Tid" /*tr("Tid")*/, clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Tid"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Tid());
|
snprintf(buf, sizeof(buf), "%d", channel->Tid());
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), "Rid" /*tr("Rid")*/, clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Rid"), clrWhite, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "%d", channel->Rid());
|
snprintf(buf, sizeof(buf), "%d", channel->Rid());
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
@@ -386,14 +531,14 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Aspect Ratio"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Aspect Ratio"), clrWhite, clrBackground, m_Font);
|
||||||
if (m_Receiver) {
|
if (m_Receiver) {
|
||||||
value = m_Receiver->VideoAspectRatio();
|
value = m_Receiver->VideoAspectRatio();
|
||||||
if (value == 100) snprintf(buf, sizeof(buf), "1:1");
|
if (value == AR_1_1) snprintf(buf, sizeof(buf), "1:1");
|
||||||
else if (value == 133) snprintf(buf, sizeof(buf), "4:3");
|
else if (value == AR_4_3) snprintf(buf, sizeof(buf), "4:3");
|
||||||
else if (value == 177) snprintf(buf, sizeof(buf), "16:9");
|
else if (value == AR_16_9) snprintf(buf, sizeof(buf), "16:9");
|
||||||
else if (value == 233) snprintf(buf, sizeof(buf), "2.21:1");
|
else if (value == AR_2_21_1) snprintf(buf, sizeof(buf), "2.21:1");
|
||||||
else snprintf(buf, sizeof(buf), "%s", tr("reserved"));
|
else snprintf(buf, sizeof(buf), "%s", tr("reserved"));
|
||||||
}
|
}
|
||||||
else snprintf(buf, sizeof(buf), "---");
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Frame Rate"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Frame Rate"), clrWhite, clrBackground, m_Font);
|
||||||
@@ -403,12 +548,12 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Video Format"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Video Format"), clrWhite, clrBackground, m_Font);
|
||||||
if (m_Receiver) {
|
if (m_Receiver) {
|
||||||
value = m_Receiver->VideoFormat();
|
value = m_Receiver->VideoFormat();
|
||||||
if (value == 1) snprintf(buf, sizeof(buf), "%s", tr("PAL"));
|
if (value == VF_PAL) snprintf(buf, sizeof(buf), "%s", tr("PAL"));
|
||||||
else if (value == 2) snprintf(buf, sizeof(buf), "%s", tr("NTSC"));
|
else if (value == VF_NTSC) snprintf(buf, sizeof(buf), "%s", tr("NTSC"));
|
||||||
else snprintf(buf, sizeof(buf), "%s", tr("unknown"));
|
else snprintf(buf, sizeof(buf), "%s", tr("unknown"));
|
||||||
}
|
}
|
||||||
else snprintf(buf, sizeof(buf), "---");
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), clrWhite, clrBackground, m_Font);
|
||||||
@@ -417,17 +562,19 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), clrYellow, clrBackground, m_Font);
|
||||||
snprintf(buf, sizeof(buf), "#%d", channel->Apid1());
|
value = -1;
|
||||||
|
cDevice::PrimaryDevice()->GetAudioTracks(&value);
|
||||||
|
snprintf(buf, sizeof(buf), "#%d", (value > 0 ? channel->Apid2() : channel->Apid1()));
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
|
||||||
dvalue = m_Receiver->AudioStreamBitrate();
|
|
||||||
if (m_Receiver) {
|
if (m_Receiver) {
|
||||||
if (dvalue == -1.0) snprintf(buf, sizeof(buf), "%s (%.0f %s)", tr("reserved"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
dvalue = m_Receiver->AudioStreamBitrate();
|
||||||
else if (dvalue == -2.0) snprintf(buf, sizeof(buf), "%s (%.0f %s)", tr("free"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
if (dvalue == (double)FR_RESERVED) snprintf(buf, sizeof(buf), "%s (%.0f %s)", tr("reserved"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
||||||
else snprintf(buf, sizeof(buf), "%.0f %s (%.0f %s)", dvalue, tr("kbit/s"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
else if (dvalue == (double)FR_FREE) snprintf(buf, sizeof(buf), "%s (%.0f %s)", tr("free"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
||||||
}
|
else snprintf(buf, sizeof(buf), "%.0f %s (%.0f %s)", dvalue, tr("kbit/s"), m_Receiver->AudioBitrate(), tr("kbit/s"));
|
||||||
else snprintf(buf, sizeof(buf), "---");
|
}
|
||||||
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("MPEG Layer"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("MPEG Layer"), clrWhite, clrBackground, m_Font);
|
||||||
@@ -437,12 +584,105 @@ void cFemonOsd::DrawInfoWindow(void)
|
|||||||
offset += m_Font->Height();
|
offset += m_Font->Height();
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Sampling Frequency"), clrWhite, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Sampling Frequency"), clrWhite, clrBackground, m_Font);
|
||||||
if (m_Receiver) {
|
if (m_Receiver) {
|
||||||
value = m_Receiver->AudioSamplingFreq();
|
value = m_Receiver->AudioSamplingFreq();
|
||||||
if (value == -1) snprintf(buf, sizeof(buf), "%s", tr("reserved"));
|
if (value == FR_RESERVED) snprintf(buf, sizeof(buf), "%s", tr("reserved"));
|
||||||
else snprintf(buf, sizeof(buf), "%.1f %s", (value / 1000.0), tr("kHz"));
|
else snprintf(buf, sizeof(buf), "%.1f %s", (value / 1000.0), tr("kHz"));
|
||||||
}
|
}
|
||||||
else snprintf(buf, sizeof(buf), "---");
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
}
|
||||||
|
else if (m_DisplayMode == modeAC3) {
|
||||||
|
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrBackground);
|
||||||
|
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+m_Font->Height()-1), clrWhite);
|
||||||
|
snprintf(buf, sizeof(buf), "%s - %s #%d", tr("Stream Information"), tr("AC-3 Stream"), channel->Dpid1());
|
||||||
|
m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), buf, clrBackground, clrWhite, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
if (m_Receiver && m_Receiver->AC3Valid()) {
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), clrWhite, clrBackground, m_Font);
|
||||||
|
snprintf(buf, sizeof(buf), "%.0f %s (%0.f %s)", m_Receiver->AC3StreamBitrate(), tr("kbit/s"), m_Receiver->AC3Bitrate(), tr("kbit/s"));
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Sampling Frequency"), clrWhite, clrBackground, m_Font);
|
||||||
|
snprintf(buf, sizeof(buf), "%.1f %s", m_Receiver->AC3SamplingFreq() / 1000., tr("kHz"));
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Frame Size"), clrWhite, clrBackground, m_Font);
|
||||||
|
snprintf(buf, sizeof(buf), "%d", m_Receiver->AC3FrameSize());
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bit Stream Mode"), clrWhite, clrBackground, m_Font);
|
||||||
|
switch (m_Receiver->AC3BitStreamMode()) {
|
||||||
|
case 0: snprintf(buf, sizeof(buf), tr("Complete Main (CM)")); break;
|
||||||
|
case 1: snprintf(buf, sizeof(buf), tr("Music and Effects (ME)")); break;
|
||||||
|
case 2: snprintf(buf, sizeof(buf), tr("Visually Impaired (VI)")); break;
|
||||||
|
case 3: snprintf(buf, sizeof(buf), tr("Hearing Impaired (HI)")); break;
|
||||||
|
case 4: snprintf(buf, sizeof(buf), tr("Dialogue (D)")); break;
|
||||||
|
case 5: snprintf(buf, sizeof(buf), tr("Commentary (C)")); break;
|
||||||
|
case 6: snprintf(buf, sizeof(buf), tr("Emergency (E)")); break;
|
||||||
|
case 7: (m_Receiver->AC3AudioCodingMode() == 1) ? snprintf(buf, sizeof(buf), tr("Voice Over (VO)")) : snprintf(buf, sizeof(buf), tr("Karaoke")); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "---");
|
||||||
|
}
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Coding Mode"), clrWhite, clrBackground, m_Font);
|
||||||
|
if (m_Receiver->AC3BitStreamMode() != 7) {
|
||||||
|
switch (m_Receiver->AC3AudioCodingMode()) {
|
||||||
|
case 0: snprintf(buf, sizeof(buf), "1+1 - %s, %s", tr("Ch1"), tr("Ch2")); break;
|
||||||
|
case 1: snprintf(buf, sizeof(buf), "1/0 - %s", tr("C")); break;
|
||||||
|
case 2: snprintf(buf, sizeof(buf), "2/0 - %s, %s", tr("L"), tr("R")); break;
|
||||||
|
case 3: snprintf(buf, sizeof(buf), "3/0 - %s, %s, %s", tr("L"), tr("C"), tr("R")); break;
|
||||||
|
case 4: snprintf(buf, sizeof(buf), "2/1 - %s, %s, %s", tr("L"), tr("R"), tr("S")); break;
|
||||||
|
case 5: snprintf(buf, sizeof(buf), "3/1 - %s, %s, %s, %s", tr("L"), tr("C"), tr("R"), tr("S")); break;
|
||||||
|
case 6: snprintf(buf, sizeof(buf), "2/2 - %s, %s, %s, %s", tr("L"), tr("R"), tr("SL"), tr("SR")); break;
|
||||||
|
case 7: snprintf(buf, sizeof(buf), "3/2 - %s, %s, %s, %s, %s", tr("L"), tr("C"), tr("R"), tr("SL"), tr("SR")); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "---");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Center Mix Level"), clrWhite, clrBackground, m_Font);
|
||||||
|
switch (m_Receiver->AC3CenterMixLevel()) {
|
||||||
|
case CML_MINUS_3dB: snprintf(buf, sizeof(buf), "-3.0 %s", tr("dB")); break;
|
||||||
|
case CML_MINUS_4_5dB: snprintf(buf, sizeof(buf), "-4.5 %s", tr("dB")); break;
|
||||||
|
case CML_MINUS_6dB: snprintf(buf, sizeof(buf), "-6.0 %s", tr("dB")); break;
|
||||||
|
case CML_RESERVED: snprintf(buf, sizeof(buf), "%s", tr("reserved")); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "---");
|
||||||
|
}
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Surround Mix Level"), clrWhite, clrBackground, m_Font);
|
||||||
|
switch (m_Receiver->AC3SurroundMixLevel()) {
|
||||||
|
case SML_MINUS_3dB: snprintf(buf, sizeof(buf), "-3 %s", tr("dB")); break;
|
||||||
|
case SML_MINUS_6dB: snprintf(buf, sizeof(buf), "-6 %s", tr("dB")); break;
|
||||||
|
case SML_0_dB: snprintf(buf, sizeof(buf), "0 %s", tr("dB")); break;
|
||||||
|
case SML_RESERVED: snprintf(buf, sizeof(buf), "%s", tr("reserved")); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "---");
|
||||||
|
}
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Dolby Surround Mode"), clrWhite, clrBackground, m_Font);
|
||||||
|
switch (m_Receiver->AC3DolbySurroundMode()) {
|
||||||
|
case DSM_NOT_INDICATED: snprintf(buf, sizeof(buf), "%s", tr("not indicated")); break;
|
||||||
|
case DSM_NOT_DOLBYSURROUND: snprintf(buf, sizeof(buf), "%s", tr("no")); break;
|
||||||
|
case DSM_DOLBYSURROUND: snprintf(buf, sizeof(buf), "%s", tr("yes")); break;
|
||||||
|
case DSM_RESERVED: snprintf(buf, sizeof(buf), "%s", tr("reserved")); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "---");
|
||||||
|
}
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Low Frequency Effects"), clrWhite, clrBackground, m_Font);
|
||||||
|
snprintf(buf, sizeof(buf), "%s", m_Receiver->AC3LfeOn() ? tr("On") : tr("Off"));
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Dialogue Normalization"), clrWhite, clrBackground, m_Font);
|
||||||
|
value = m_Receiver->AC3DialogLevel();
|
||||||
|
if (value > 0) snprintf(buf, sizeof(buf), "-%d %s", value, tr("dB"));
|
||||||
|
else snprintf(buf, sizeof(buf), "---");
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else /* modeBasic */ {
|
else /* modeBasic */ {
|
||||||
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent);
|
m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent);
|
||||||
@@ -486,8 +726,8 @@ void cFemonOsd::Show(void)
|
|||||||
}
|
}
|
||||||
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
|
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
|
||||||
isyslog("cFemonOsd::Show() cannot read frontend info.");
|
isyslog("cFemonOsd::Show() cannot read frontend info.");
|
||||||
m_Frontend = -1;
|
|
||||||
close(m_Frontend);
|
close(m_Frontend);
|
||||||
|
m_Frontend = -1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_Osd = cOsdProvider::NewOsd(((Setup.OSDWidth - OSDWIDTH) / 2) + Setup.OSDLeft, ((Setup.OSDHeight - OSDHEIGHT) / 2) + Setup.OSDTop);
|
m_Osd = cOsdProvider::NewOsd(((Setup.OSDWidth - OSDWIDTH) / 2) + Setup.OSDLeft, ((Setup.OSDHeight - OSDHEIGHT) / 2) + Setup.OSDTop);
|
||||||
@@ -507,8 +747,8 @@ void cFemonOsd::Show(void)
|
|||||||
if (m_Receiver)
|
if (m_Receiver)
|
||||||
delete m_Receiver;
|
delete m_Receiver;
|
||||||
if (femonConfig.analyzestream) {
|
if (femonConfig.analyzestream) {
|
||||||
int channelNumber = cDevice::CurrentChannel();
|
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
m_Receiver = new cFemonReceiver(Channels.GetByNumber(channelNumber)->Ca(), Channels.GetByNumber(channelNumber)->Vpid(), Channels.GetByNumber(channelNumber)->Apid1());
|
m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), channel->Apid1(), channel->Dpid1());
|
||||||
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
|
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
|
||||||
}
|
}
|
||||||
Start();
|
Start();
|
||||||
@@ -519,6 +759,8 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
|
|||||||
{
|
{
|
||||||
//printf("cFemonOsd::ChannelSwitch()\n");
|
//printf("cFemonOsd::ChannelSwitch()\n");
|
||||||
char *dev = NULL;
|
char *dev = NULL;
|
||||||
|
if (!device->IsPrimaryDevice() || !channelNumber || cDevice::PrimaryDevice()->CurrentChannel() != channelNumber)
|
||||||
|
return;
|
||||||
close(m_Frontend);
|
close(m_Frontend);
|
||||||
asprintf(&dev, FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
|
asprintf(&dev, FRONTEND_DEVICE, cDevice::ActualDevice()->CardIndex(), 0);
|
||||||
m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
|
m_Frontend = open(dev, O_RDONLY | O_NONBLOCK);
|
||||||
@@ -530,15 +772,15 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
|
|||||||
}
|
}
|
||||||
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
|
if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) {
|
||||||
isyslog("cFemonOsd::ChannelSwitch() cannot read frontend info.");
|
isyslog("cFemonOsd::ChannelSwitch() cannot read frontend info.");
|
||||||
m_Frontend = -1;
|
|
||||||
close(m_Frontend);
|
close(m_Frontend);
|
||||||
|
m_Frontend = -1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (m_Receiver)
|
if (m_Receiver)
|
||||||
delete m_Receiver;
|
delete m_Receiver;
|
||||||
if (femonConfig.analyzestream) {
|
if (femonConfig.analyzestream) {
|
||||||
channelNumber = cDevice::CurrentChannel();
|
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
m_Receiver = new cFemonReceiver(Channels.GetByNumber(channelNumber)->Ca(), Channels.GetByNumber(channelNumber)->Vpid(), Channels.GetByNumber(channelNumber)->Apid1());
|
m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), channel->Apid1(), channel->Dpid1());
|
||||||
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
|
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -546,9 +788,8 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber)
|
|||||||
eOSState cFemonOsd::ProcessKey(eKeys Key)
|
eOSState cFemonOsd::ProcessKey(eKeys Key)
|
||||||
{
|
{
|
||||||
eOSState state = cOsdObject::ProcessKey(Key);
|
eOSState state = cOsdObject::ProcessKey(Key);
|
||||||
|
|
||||||
if (state == osUnknown) {
|
if (state == osUnknown) {
|
||||||
switch (Key & ~k_Repeat) {
|
switch (Key) {
|
||||||
case k0:
|
case k0:
|
||||||
if ((m_Number == 0) && (m_OldNumber != 0)) {
|
if ((m_Number == 0) && (m_OldNumber != 0)) {
|
||||||
m_Number = m_OldNumber;
|
m_Number = m_OldNumber;
|
||||||
@@ -587,6 +828,49 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
|
|||||||
break;
|
break;
|
||||||
case kBack:
|
case kBack:
|
||||||
return osEnd;
|
return osEnd;
|
||||||
|
case kGreen:
|
||||||
|
{
|
||||||
|
int CurrentAudioTrack = -1;
|
||||||
|
const char **AudioTracks = cDevice::PrimaryDevice()->GetAudioTracks(&CurrentAudioTrack);
|
||||||
|
if (AudioTracks) {
|
||||||
|
const char **at = &AudioTracks[CurrentAudioTrack];
|
||||||
|
if (!*++at)
|
||||||
|
at = AudioTracks;
|
||||||
|
cDevice::PrimaryDevice()->SetAudioTrack(at - AudioTracks);
|
||||||
|
if (femonConfig.analyzestream) {
|
||||||
|
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
|
if (m_Receiver)
|
||||||
|
delete m_Receiver;
|
||||||
|
m_Receiver = new cFemonReceiver(channel->Ca(), channel->Vpid(), (at - AudioTracks) ? channel->Apid2() : channel->Apid1(), channel->Dpid1());
|
||||||
|
cDevice::ActualDevice()->AttachReceiver(m_Receiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case kRight:
|
||||||
|
case kLeft:
|
||||||
|
{
|
||||||
|
int device = cDevice::ActualDevice()->DeviceNumber();
|
||||||
|
if (device >= 0) {
|
||||||
|
cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
|
for (int i = 0; i < cDevice::NumDevices() - 1; i++) {
|
||||||
|
if (NORMALKEY(Key) == kRight) {
|
||||||
|
if (++device >= cDevice::NumDevices()) device = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (--device < 0) device = cDevice::NumDevices() - 1;
|
||||||
|
}
|
||||||
|
if (cDevice::GetDevice(device)->ProvidesChannel(channel)) {
|
||||||
|
//cStatus::MsgChannelSwitch(cDevice::GetDevice(device), 0);
|
||||||
|
//implement some tuning mechanism here
|
||||||
|
//cControl::Launch(new cTransferControl(cDevice::GetDevice(device), channel->Vpid(), channel->Apid1(), channel->Apid2(), channel->Dpid1(), channel->Dpid2()));
|
||||||
|
//cStatus::MsgChannelSwitch(cDevice::GetDevice(device), channel->Number());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case kUp|k_Repeat:
|
case kUp|k_Repeat:
|
||||||
case kUp:
|
case kUp:
|
||||||
case kDown|k_Repeat:
|
case kDown|k_Repeat:
|
||||||
@@ -609,7 +893,9 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kOk:
|
case kOk:
|
||||||
if (++m_DisplayMode >= modeMaxNumber) m_DisplayMode = 0; // toggle between display modes
|
// toggle between display modes
|
||||||
|
if (++m_DisplayMode == modeAC3 && !Channels.GetByNumber(cDevice::CurrentChannel())->Dpid1()) m_DisplayMode++;
|
||||||
|
if (m_DisplayMode >= modeMaxNumber) m_DisplayMode = 0;
|
||||||
DrawInfoWindow();
|
DrawInfoWindow();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include <vdr/thread.h>
|
#include <vdr/thread.h>
|
||||||
#include <vdr/status.h>
|
#include <vdr/status.h>
|
||||||
#include <vdr/channels.h>
|
#include <vdr/channels.h>
|
||||||
|
#include <vdr/transfer.h>
|
||||||
|
|
||||||
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
|
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
|
||||||
private:
|
private:
|
||||||
@@ -35,6 +36,8 @@ private:
|
|||||||
int m_DisplayMode;
|
int m_DisplayMode;
|
||||||
const cFont *m_Font;
|
const cFont *m_Font;
|
||||||
cMutex* m_Mutex;
|
cMutex* m_Mutex;
|
||||||
|
static cBitmap bmDevice0, bmDevice1, bmDevice2, bmDevice3, bmApid1, bmApid2, bmDD, bmDD20, bmDD51;
|
||||||
|
static cBitmap bmPAL, bmNTSC, bmAspectRatio_1_1, bmAspectRatio_16_9, bmAspectRatio_2_21_1, bmAspectRatio_4_3;
|
||||||
void DrawStatusWindow(void);
|
void DrawStatusWindow(void);
|
||||||
void DrawInfoWindow(void);
|
void DrawInfoWindow(void);
|
||||||
|
|
||||||
|
|||||||
174
femonreceiver.c
174
femonreceiver.c
@@ -16,28 +16,43 @@
|
|||||||
#define PAYLOAD 0x10
|
#define PAYLOAD 0x10
|
||||||
#define PTS_DTS_FLAGS 0xC0
|
#define PTS_DTS_FLAGS 0xC0
|
||||||
|
|
||||||
cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid)
|
cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid)
|
||||||
:cReceiver(Ca, -1, 2, Vpid, Apid), cThread("femon receiver")
|
:cReceiver(Ca, -1, 3, Vpid, Apid, Dpid), cThread("femon receiver")
|
||||||
{
|
{
|
||||||
//printf("cFemonReceiver::cFemonReceiver()\n");
|
//printf("cFemonReceiver::cFemonReceiver()\n");
|
||||||
m_Active = false;
|
m_Active = false;
|
||||||
m_VideoPid = Vpid;
|
m_VideoPid = Vpid;
|
||||||
m_AudioPid = Apid;
|
m_AudioPid = Apid;
|
||||||
|
m_AC3Pid = Dpid;
|
||||||
|
m_VideoValid = false;
|
||||||
m_VideoPacketCount = 0;
|
m_VideoPacketCount = 0;
|
||||||
m_VideoHorizontalSize = 0;
|
m_VideoHorizontalSize = 0;
|
||||||
m_VideoVerticalSize = 0;
|
m_VideoVerticalSize = 0;
|
||||||
m_VideoAspectRatio = 0;
|
m_VideoAspectRatio = AR_RESERVED;
|
||||||
m_VideoFormat = 0;
|
m_VideoFormat = VF_UNKNOWN;
|
||||||
m_VideoFrameRate = 0.0;
|
m_VideoFrameRate = 0.0;
|
||||||
m_VideoStreamBitrate = 0.0;
|
m_VideoStreamBitrate = 0.0;
|
||||||
m_VideoBitrate = 0.0;
|
m_VideoBitrate = 0.0;
|
||||||
|
m_AudioValid = false;
|
||||||
m_AudioPacketCount = 0;
|
m_AudioPacketCount = 0;
|
||||||
m_AudioStreamBitrate = -2.0;
|
m_AudioStreamBitrate = -2.0;
|
||||||
m_AudioBitrate = 0.0;
|
m_AudioBitrate = 0.0;
|
||||||
m_AudioSamplingFreq = -1;
|
m_AudioSamplingFreq = -1;
|
||||||
m_AudioMPEGLayer = 0;
|
m_AudioMPEGLayer = 0;
|
||||||
m_AudioBitrate = 0.0;
|
m_AudioBitrate = 0.0;
|
||||||
|
m_AC3Valid = false;
|
||||||
|
m_AC3PacketCount = 0;
|
||||||
|
m_AC3StreamBitrate = 0;
|
||||||
|
m_AC3SamplingFreq = 0;
|
||||||
|
m_AC3Bitrate = 0;
|
||||||
|
m_AC3FrameSize = 0;
|
||||||
|
m_AC3BitStreamMode = FR_NOTVALID;
|
||||||
|
m_AC3AudioCodingMode = FR_NOTVALID;
|
||||||
|
m_AC3CenterMixLevel = FR_NOTVALID;
|
||||||
|
m_AC3SurroundMixLevel = FR_NOTVALID;
|
||||||
|
m_AC3DolbySurroundMode = FR_NOTVALID;
|
||||||
|
m_AC3LfeOn = false;
|
||||||
|
m_AC3DialogLevel = FR_NOTVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
cFemonReceiver::~cFemonReceiver(void)
|
cFemonReceiver::~cFemonReceiver(void)
|
||||||
@@ -49,76 +64,84 @@ cFemonReceiver::~cFemonReceiver(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the following function originates from libdvbmpeg: */
|
/* The following function originates from libdvbmpeg: */
|
||||||
void cFemonReceiver::GetVideoInfo(uint8_t *mbuf, int count)
|
void cFemonReceiver::GetVideoInfo(uint8_t *mbuf, int count)
|
||||||
{
|
{
|
||||||
//printf("cFemonReceiver::GetVideoInfo()\n");
|
//printf("cFemonReceiver::GetVideoInfo()\n");
|
||||||
uint8_t *headr;
|
uint8_t *headr;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
while (found < 4 && c + 4 < count) {
|
m_VideoValid = false;
|
||||||
|
while ((found < 4) && ((c + 4) < count)) {
|
||||||
uint8_t *b;
|
uint8_t *b;
|
||||||
b = mbuf + c;
|
b = mbuf + c;
|
||||||
if (b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01 && b[3] == 0xb3)
|
if ((b[0] == 0x00) && (b[1] == 0x00) && (b[2] == 0x01) && (b[3] == 0xb3))
|
||||||
found = 4;
|
found = 4;
|
||||||
else
|
else
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
if (!found) return;
|
if ((!found) || ((c + 16) >= count)) return;
|
||||||
c += 4;
|
m_VideoValid = true;
|
||||||
if (c + 12 >= count) return;
|
headr = mbuf + c + 4;
|
||||||
headr = mbuf + c;
|
m_VideoHorizontalSize = ((headr[1] & 0xF0) >> 4) | (headr[0] << 4);
|
||||||
m_VideoHorizontalSize = ((headr[1] &0xF0) >> 4) | (headr[0] << 4);
|
m_VideoVerticalSize = ((headr[1] & 0x0F) << 8) | (headr[2]);
|
||||||
m_VideoVerticalSize = ((headr[1] &0x0F) << 8) | (headr[2]);
|
|
||||||
int sw = (int)((headr[3] & 0xF0) >> 4);
|
int sw = (int)((headr[3] & 0xF0) >> 4);
|
||||||
switch( sw ){
|
switch ( sw ){
|
||||||
case 1:
|
case 1:
|
||||||
m_VideoAspectRatio = 100;
|
m_VideoAspectRatio = AR_1_1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
m_VideoAspectRatio = 133;
|
m_VideoAspectRatio = AR_4_3;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
m_VideoAspectRatio = 177;
|
m_VideoAspectRatio = AR_16_9;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
m_VideoAspectRatio = 221;
|
m_VideoAspectRatio = AR_2_21_1;
|
||||||
break;
|
break;
|
||||||
case 5 ... 15:
|
case 5 ... 15:
|
||||||
m_VideoAspectRatio = 0;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return;
|
m_VideoAspectRatio = AR_RESERVED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
sw = (int)(headr[3] & 0x0F);
|
sw = (int)(headr[3] & 0x0F);
|
||||||
switch ( sw ) {
|
switch ( sw ) {
|
||||||
case 1:
|
case 1:
|
||||||
m_VideoFrameRate = 24000/1001.0;
|
m_VideoFrameRate = 24000 / 1001.0;
|
||||||
m_VideoFormat = 0;
|
m_VideoFormat = VF_UNKNOWN;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
m_VideoFrameRate = 24.0;
|
m_VideoFrameRate = 24.0;
|
||||||
m_VideoFormat = 0;
|
m_VideoFormat = VF_UNKNOWN;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
m_VideoFrameRate = 25.0;
|
m_VideoFrameRate = 25.0;
|
||||||
m_VideoFormat = 1;
|
m_VideoFormat = VF_PAL;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
m_VideoFrameRate = 30000/1001.0;
|
m_VideoFrameRate = 30000 / 1001.0;
|
||||||
m_VideoFormat = 2;
|
m_VideoFormat = VF_NTSC;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
m_VideoFrameRate = 30.0;
|
m_VideoFrameRate = 30.0;
|
||||||
m_VideoFormat = 2;
|
m_VideoFormat = VF_NTSC;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
m_VideoFrameRate = 50.0;
|
m_VideoFrameRate = 50.0;
|
||||||
m_VideoFormat = 1;
|
m_VideoFormat = VF_PAL;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
m_VideoFrameRate = 60.0;
|
m_VideoFrameRate = 60.0;
|
||||||
m_VideoFormat = 2;
|
m_VideoFormat = VF_NTSC;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
m_VideoFrameRate = 60000 / 1001.0;
|
||||||
|
m_VideoFormat = VF_NTSC;
|
||||||
|
break;
|
||||||
|
case 9 ... 15:
|
||||||
|
default:
|
||||||
|
m_VideoFrameRate = 0;
|
||||||
|
m_VideoFormat = VF_UNKNOWN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
m_VideoStreamBitrate = 400 * (((headr[4] << 10) & 0x0003FC00UL) | ((headr[5] << 2) & 0x000003FCUL) | (((headr[6] & 0xC0) >> 6) & 0x00000003UL)) / 1000000.0;
|
m_VideoStreamBitrate = 400 * (((headr[4] << 10) & 0x0003FC00UL) | ((headr[5] << 2) & 0x000003FCUL) | (((headr[6] & 0xC0) >> 6) & 0x00000003UL)) / 1000000.0;
|
||||||
@@ -131,9 +154,10 @@ static unsigned int bitrates[3][16] =
|
|||||||
{0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}
|
{0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned int samplerates[4] = {441, 480, 320, 0};
|
static unsigned int samplerates[4] =
|
||||||
|
{441, 480, 320, 0};
|
||||||
|
|
||||||
/* the following function originates from libdvbmpeg: */
|
/* The following function originates from libdvbmpeg: */
|
||||||
void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
|
void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
|
||||||
{
|
{
|
||||||
//printf("cFemonReceiver::GetAudioInfo()\n");
|
//printf("cFemonReceiver::GetAudioInfo()\n");
|
||||||
@@ -141,31 +165,91 @@ void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
|
|||||||
int found = 0;
|
int found = 0;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
int tmp = 0;
|
int tmp = 0;
|
||||||
while (!found && c < count) {
|
m_AudioValid = false;
|
||||||
|
while (!found && (c < count)) {
|
||||||
uint8_t *b = mbuf + c;
|
uint8_t *b = mbuf + c;
|
||||||
if (b[0] == 0xff && (b[1] & 0xf8) == 0xf8)
|
if ((b[0] == 0xff) && ((b[1] & 0xf8) == 0xf8))
|
||||||
found = 1;
|
found = 1;
|
||||||
else
|
else
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
if (!found) return;
|
if ((!found) || ((c + 3) >= count)) return;
|
||||||
if (c + 3 >= count) return;
|
m_AudioValid = true;
|
||||||
headr = mbuf + c;
|
headr = mbuf + c;
|
||||||
m_AudioMPEGLayer = 4 - ((headr[1] & 0x06) >> 1);
|
m_AudioMPEGLayer = 4 - ((headr[1] & 0x06) >> 1);
|
||||||
tmp = bitrates[(3 - ((headr[1] & 0x06) >> 1))][(headr[2] >> 4)] * 1000;
|
tmp = bitrates[(3 - ((headr[1] & 0x06) >> 1))][(headr[2] >> 4)] * 1000;
|
||||||
if (tmp == 0)
|
if (tmp == 0)
|
||||||
m_AudioStreamBitrate = -2.0; // free
|
m_AudioStreamBitrate = (double)FR_FREE;
|
||||||
else if (tmp == 0xf)
|
else if (tmp == 0xf)
|
||||||
m_AudioStreamBitrate = -1.0; // reserved
|
m_AudioStreamBitrate = (double)FR_RESERVED;
|
||||||
else
|
else
|
||||||
m_AudioStreamBitrate = tmp / 1000.0;
|
m_AudioStreamBitrate = tmp / 1000.0;
|
||||||
tmp = samplerates[((headr[2] & 0x0c) >> 2)] * 100;
|
tmp = samplerates[((headr[2] & 0x0c) >> 2)] * 100;
|
||||||
if (tmp == 3)
|
if (tmp == 3)
|
||||||
m_AudioSamplingFreq = -1; // reserved
|
m_AudioSamplingFreq = FR_RESERVED;
|
||||||
else
|
else
|
||||||
m_AudioSamplingFreq = tmp;
|
m_AudioSamplingFreq = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int ac3_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};
|
||||||
|
|
||||||
|
static unsigned int ac3_freq[4] =
|
||||||
|
{480, 441, 320, 0};
|
||||||
|
|
||||||
|
static unsigned int ac3_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},
|
||||||
|
{96, 120, 144, 168, 192, 240, 288, 336, 384, 480, 576, 672, 768, 960, 1152, 1344, 1536, 1728, 1920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
** AC3 Audio Header: http://www.atsc.org/standards/a_52a.pdf
|
||||||
|
** The following function originates from libdvbmpeg:
|
||||||
|
*/
|
||||||
|
void cFemonReceiver::GetAC3Info(uint8_t *mbuf, int count)
|
||||||
|
{
|
||||||
|
uint8_t *headr;
|
||||||
|
int found = 0;
|
||||||
|
int c = 0;
|
||||||
|
uint8_t frame;
|
||||||
|
m_AC3Valid = false;
|
||||||
|
while (!found && (c < count)) {
|
||||||
|
uint8_t *b = mbuf + c;
|
||||||
|
if ((b[0] == 0x0b) && (b[1] == 0x77))
|
||||||
|
found = 1;
|
||||||
|
else
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
if ((!found) || ((c + 5) >= count)) return;
|
||||||
|
m_AC3Valid = true;
|
||||||
|
headr = mbuf + c + 2;
|
||||||
|
frame = (headr[2] & 0x3f);
|
||||||
|
m_AC3StreamBitrate = ac3_bitrates[frame >> 1];
|
||||||
|
int fr = (headr[2] & 0xc0 ) >> 6;
|
||||||
|
m_AC3SamplingFreq = ac3_freq[fr] * 100;
|
||||||
|
m_AC3FrameSize = ac3_frames[fr][frame >> 1];
|
||||||
|
if ((frame & 1) && (fr == 1)) m_AC3FrameSize++;
|
||||||
|
m_AC3FrameSize <<= 1;
|
||||||
|
m_AC3BitStreamMode = (headr[3] & 7);
|
||||||
|
m_AC3AudioCodingMode = (headr[4] & 0xE0) >> 5;
|
||||||
|
if ((m_AC3AudioCodingMode & 0x01) && (m_AC3AudioCodingMode != 0x01)) // if 3 front channels
|
||||||
|
m_AC3CenterMixLevel = (headr[4] & 0x18) >> 3;
|
||||||
|
else
|
||||||
|
m_AC3CenterMixLevel = FR_NOTVALID;
|
||||||
|
if (m_AC3AudioCodingMode & 0x04) // if a surround channel exists
|
||||||
|
m_AC3SurroundMixLevel = (headr[4] & 0x06) >> 1;
|
||||||
|
else
|
||||||
|
m_AC3SurroundMixLevel = FR_NOTVALID;
|
||||||
|
if (m_AC3AudioCodingMode == 0x02) // if in 2/0 mode
|
||||||
|
m_AC3DolbySurroundMode = ((headr[4] & 1) << 1) | ((headr[5] & 0x80) >> 7);
|
||||||
|
else
|
||||||
|
m_AC3DolbySurroundMode = FR_NOTVALID;
|
||||||
|
m_AC3LfeOn = (headr[5] & 0x40) >> 6;
|
||||||
|
m_AC3DialogLevel = (headr[5] & 0x3e) >> 1;
|
||||||
|
}
|
||||||
|
|
||||||
void cFemonReceiver::Activate(bool On)
|
void cFemonReceiver::Activate(bool On)
|
||||||
{
|
{
|
||||||
//printf("cFemonReceiver::Activate()\n");
|
//printf("cFemonReceiver::Activate()\n");
|
||||||
@@ -184,6 +268,9 @@ void cFemonReceiver::Receive(uchar *Data, int Length)
|
|||||||
else if (pid == m_AudioPid) {
|
else if (pid == m_AudioPid) {
|
||||||
m_AudioPacketCount++;
|
m_AudioPacketCount++;
|
||||||
}
|
}
|
||||||
|
else if (pid == m_AC3Pid) {
|
||||||
|
m_AC3PacketCount++;
|
||||||
|
}
|
||||||
/* the following originates from libdvbmpeg: */
|
/* the following originates from libdvbmpeg: */
|
||||||
if (!(Data[3] & PAYLOAD)) {
|
if (!(Data[3] & PAYLOAD)) {
|
||||||
return;
|
return;
|
||||||
@@ -200,9 +287,12 @@ void cFemonReceiver::Receive(uchar *Data, int Length)
|
|||||||
if (pid == m_VideoPid) {
|
if (pid == m_VideoPid) {
|
||||||
GetVideoInfo(pay, l);
|
GetVideoInfo(pay, l);
|
||||||
}
|
}
|
||||||
if (pid == m_AudioPid) {
|
else if (pid == m_AudioPid) {
|
||||||
GetAudioInfo(pay, l);
|
GetAudioInfo(pay, l);
|
||||||
}
|
}
|
||||||
|
else if (pid == m_AC3Pid) {
|
||||||
|
GetAC3Info(pay, l);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* end */
|
/* end */
|
||||||
@@ -219,6 +309,8 @@ void cFemonReceiver::Action(void)
|
|||||||
m_VideoPacketCount = 0;
|
m_VideoPacketCount = 0;
|
||||||
m_AudioBitrate = (8.0 * 184.0 * m_AudioPacketCount) / (femonConfig.calcinterval * 100.0);
|
m_AudioBitrate = (8.0 * 184.0 * m_AudioPacketCount) / (femonConfig.calcinterval * 100.0);
|
||||||
m_AudioPacketCount = 0;
|
m_AudioPacketCount = 0;
|
||||||
|
m_AC3Bitrate = (8.0 * 184.0 * m_AC3PacketCount) / (femonConfig.calcinterval * 100.0);
|
||||||
|
m_AC3PacketCount = 0;
|
||||||
usleep(100000L * femonConfig.calcinterval);
|
usleep(100000L * femonConfig.calcinterval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
107
femonreceiver.h
107
femonreceiver.h
@@ -12,26 +12,82 @@
|
|||||||
#include <vdr/thread.h>
|
#include <vdr/thread.h>
|
||||||
#include <vdr/receiver.h>
|
#include <vdr/receiver.h>
|
||||||
|
|
||||||
|
enum eVideoFormat {
|
||||||
|
VF_UNKNOWN = 0,
|
||||||
|
VF_PAL = 1,
|
||||||
|
VF_NTSC = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eAspectRatio {
|
||||||
|
AR_RESERVED = 0,
|
||||||
|
AR_1_1 = 100,
|
||||||
|
AR_4_3 = 133,
|
||||||
|
AR_16_9 = 177,
|
||||||
|
AR_2_21_1 = 233,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eCenterMixLevel {
|
||||||
|
CML_MINUS_3dB = 0,
|
||||||
|
CML_MINUS_4_5dB = 1,
|
||||||
|
CML_MINUS_6dB = 2,
|
||||||
|
CML_RESERVED = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eSurroundMixLevel {
|
||||||
|
SML_MINUS_3dB = 0,
|
||||||
|
SML_MINUS_6dB = 1,
|
||||||
|
SML_0_dB = 2,
|
||||||
|
SML_RESERVED = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eDolbySurroundMode {
|
||||||
|
DSM_NOT_INDICATED = 0,
|
||||||
|
DSM_NOT_DOLBYSURROUND = 1,
|
||||||
|
DSM_DOLBYSURROUND = 2,
|
||||||
|
DSM_RESERVED = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FR_RESERVED -1
|
||||||
|
#define FR_FREE -2
|
||||||
|
#define FR_NOTVALID -3
|
||||||
|
|
||||||
class cFemonReceiver : public cReceiver, public cThread {
|
class cFemonReceiver : public cReceiver, public cThread {
|
||||||
private:
|
private:
|
||||||
bool m_Active;
|
bool m_Active;
|
||||||
int m_VideoPid;
|
int m_VideoPid;
|
||||||
int m_AudioPid;
|
int m_AudioPid;
|
||||||
int m_VideoPacketCount;
|
int m_AC3Pid;
|
||||||
int m_VideoHorizontalSize;
|
bool m_VideoValid;
|
||||||
int m_VideoVerticalSize;
|
int m_VideoPacketCount;
|
||||||
int m_VideoAspectRatio;
|
int m_VideoHorizontalSize;
|
||||||
int m_VideoFormat;
|
int m_VideoVerticalSize;
|
||||||
|
int m_VideoAspectRatio;
|
||||||
|
int m_VideoFormat;
|
||||||
double m_VideoFrameRate;
|
double m_VideoFrameRate;
|
||||||
double m_VideoStreamBitrate;
|
double m_VideoStreamBitrate;
|
||||||
double m_VideoBitrate;
|
double m_VideoBitrate;
|
||||||
int m_AudioPacketCount;
|
bool m_AudioValid;
|
||||||
|
int m_AudioPacketCount;
|
||||||
double m_AudioStreamBitrate;
|
double m_AudioStreamBitrate;
|
||||||
double m_AudioBitrate;
|
double m_AudioBitrate;
|
||||||
int m_AudioSamplingFreq;
|
int m_AudioSamplingFreq;
|
||||||
int m_AudioMPEGLayer;
|
int m_AudioMPEGLayer;
|
||||||
void GetVideoInfo(uint8_t *mbuf, int count);
|
bool m_AC3Valid;
|
||||||
void GetAudioInfo(uint8_t *mbuf, int count);
|
int m_AC3PacketCount;
|
||||||
|
double m_AC3Bitrate;
|
||||||
|
int m_AC3FrameSize;
|
||||||
|
int m_AC3SamplingFreq;
|
||||||
|
int m_AC3StreamBitrate;
|
||||||
|
int m_AC3BitStreamMode;
|
||||||
|
int m_AC3AudioCodingMode;
|
||||||
|
int m_AC3CenterMixLevel;
|
||||||
|
int m_AC3SurroundMixLevel;
|
||||||
|
int m_AC3DolbySurroundMode;
|
||||||
|
bool m_AC3LfeOn;
|
||||||
|
int m_AC3DialogLevel;
|
||||||
|
void GetVideoInfo(uint8_t *mbuf, int count);
|
||||||
|
void GetAudioInfo(uint8_t *mbuf, int count);
|
||||||
|
void GetAC3Info(uint8_t *mbuf, int count);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Activate(bool On);
|
virtual void Activate(bool On);
|
||||||
@@ -39,21 +95,38 @@ protected:
|
|||||||
virtual void Action(void);
|
virtual void Action(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cFemonReceiver(int Ca, int Vpid, int Apid);
|
cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid);
|
||||||
virtual ~cFemonReceiver();
|
virtual ~cFemonReceiver();
|
||||||
|
|
||||||
|
bool VideoValid(void) { return m_VideoValid; }; // boolean
|
||||||
int VideoHorizontalSize(void) { return m_VideoHorizontalSize; }; // pixels
|
int VideoHorizontalSize(void) { return m_VideoHorizontalSize; }; // pixels
|
||||||
int VideoVerticalSize(void) { return m_VideoVerticalSize; }; // pixels
|
int VideoVerticalSize(void) { return m_VideoVerticalSize; }; // pixels
|
||||||
int VideoAspectRatio(void) { return m_VideoAspectRatio; }; // 4:3 == 133, ...
|
int VideoAspectRatio(void) { return m_VideoAspectRatio; }; // eAspectRatio
|
||||||
int VideoFormat(void) { return m_VideoFormat; }; // 0 == unknown, 1 == PAL, 2 == NTSC
|
int VideoFormat(void) { return m_VideoFormat; }; // eVideoFormat
|
||||||
double VideoFrameRate(void) { return m_VideoFrameRate; }; // Hz
|
double VideoFrameRate(void) { return m_VideoFrameRate; }; // Hz
|
||||||
double VideoStreamBitrate(void) { return m_VideoStreamBitrate; }; // Mbit/s
|
double VideoStreamBitrate(void) { return m_VideoStreamBitrate; }; // Mbit/s
|
||||||
double VideoBitrate(void) { return m_VideoBitrate; }; // Mbit/s
|
double VideoBitrate(void) { return m_VideoBitrate; }; // Mbit/s
|
||||||
|
|
||||||
int AudioMPEGLayer(void) { return m_AudioMPEGLayer; }; // number
|
bool AudioValid(void) { return m_AudioValid; }; // boolean
|
||||||
|
int AudioMPEGLayer(void) { return m_AudioMPEGLayer; }; // layer number
|
||||||
int AudioSamplingFreq(void) { return m_AudioSamplingFreq; }; // Hz
|
int AudioSamplingFreq(void) { return m_AudioSamplingFreq; }; // Hz
|
||||||
double AudioStreamBitrate(void) { return m_AudioStreamBitrate; }; // kbit/s
|
double AudioStreamBitrate(void) { return m_AudioStreamBitrate; }; // kbit/s
|
||||||
double AudioBitrate(void) { return m_AudioBitrate; }; // kbit/s
|
double AudioBitrate(void) { return m_AudioBitrate; }; // kbit/s
|
||||||
|
|
||||||
|
bool AC3Valid(void) { return m_AC3Valid; }; // boolean
|
||||||
|
int AC3SamplingFreq(void) { return m_AC3SamplingFreq; }; // Hz
|
||||||
|
double AC3StreamBitrate(void) { return m_AC3StreamBitrate; }; // kbit/s
|
||||||
|
double AC3Bitrate(void) { return m_AC3Bitrate; }; // kbit/s
|
||||||
|
int AC3FrameSize(void) { return m_AC3FrameSize; }; // Bytes
|
||||||
|
int AC3BitStreamMode(void) { return m_AC3BitStreamMode; }; // 0..7
|
||||||
|
int AC3AudioCodingMode(void) { return m_AC3AudioCodingMode; }; // 0..7
|
||||||
|
bool AC3_2_0(void) { return m_AC3AudioCodingMode == 2; }; // DD 2.0
|
||||||
|
bool AC3_5_1(void) { return m_AC3AudioCodingMode == 7; }; // DD 5.1
|
||||||
|
int AC3CenterMixLevel(void) { return m_AC3CenterMixLevel; }; // eCenterMixLevel
|
||||||
|
int AC3SurroundMixLevel(void) { return m_AC3SurroundMixLevel; }; // eSurroundMixLevel
|
||||||
|
int AC3DolbySurroundMode(void) { return m_AC3DolbySurroundMode; }; // eDolbySurroundMode
|
||||||
|
bool AC3LfeOn(void) { return m_AC3LfeOn; }; // boolean
|
||||||
|
int AC3DialogLevel(void) { return m_AC3DialogLevel; }; // -dB
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__FEMONRECEIVER_H
|
#endif //__FEMONRECEIVER_H
|
||||||
|
|||||||
52
patches/ca_system_names.diff
Normal file
52
patches/ca_system_names.diff
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
--- femonosd.c.orig 2004-08-19 19:42:32.000000000 +0300
|
||||||
|
+++ femonosd.c 2004-08-19 20:02:31.000000000 +0300
|
||||||
|
@@ -320,7 +320,48 @@
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
offset += m_Font->Height();
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), clrWhite, clrBackground, m_Font);
|
||||||
|
- snprintf(buf, sizeof(buf), "%X", channel->Ca());
|
||||||
|
+ value = channel->Ca();
|
||||||
|
+ switch (value >> 8) {
|
||||||
|
+ case 0x0:
|
||||||
|
+ if (value)
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "Fixed");
|
||||||
|
+ else
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "Free to Air");
|
||||||
|
+ break;
|
||||||
|
+ case 0x1:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "SECA/Mediaguard");
|
||||||
|
+ break;
|
||||||
|
+ case 0x5:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "Viaccess");
|
||||||
|
+ break;
|
||||||
|
+ case 0x6:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "Irdeto");
|
||||||
|
+ break;
|
||||||
|
+ case 0x9:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "NDS/Videoguard");
|
||||||
|
+ break;
|
||||||
|
+ case 0xB:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "Conax");
|
||||||
|
+ break;
|
||||||
|
+ case 0xD:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "CryptoWorks");
|
||||||
|
+ break;
|
||||||
|
+ case 0xE:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "PowerVu");
|
||||||
|
+ break;
|
||||||
|
+ case 0x17:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "BetaCrypt");
|
||||||
|
+ break;
|
||||||
|
+ case 0x18:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "NagraVision");
|
||||||
|
+ break;
|
||||||
|
+ case 0x4A:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%s", "SkyCrypt");
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ snprintf(buf, sizeof(buf), "%X", value);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, clrYellow, clrBackground, m_Font);
|
||||||
|
m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), clrWhite, clrBackground, m_Font);
|
||||||
|
snprintf(buf, sizeof(buf), "%d", channel->Tpid());
|
||||||
23
symbols/apid1.xpm
Normal file
23
symbols/apid1.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * apid1_xpm[] = {
|
||||||
|
"32 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++++++++++++++++",
|
||||||
|
"+..............................+",
|
||||||
|
"+..............++.......++.....+",
|
||||||
|
"+............++++....+++++.....+",
|
||||||
|
"+..........+++.++....+++++.....+",
|
||||||
|
"+........+++...++.......++.....+",
|
||||||
|
"+...+++++++....++.......++.....+",
|
||||||
|
"+...++++++.....++.......++.....+",
|
||||||
|
"+...++..++.....++.......++.....+",
|
||||||
|
"+...++..++.....++.......++.....+",
|
||||||
|
"+...++++++.....++.......++.....+",
|
||||||
|
"+...+++++++....++.......++.....+",
|
||||||
|
"+........+++...++.......++.....+",
|
||||||
|
"+..........+++.++.......++.....+",
|
||||||
|
"+............++++.......++.....+",
|
||||||
|
"+.............+++.......++.....+",
|
||||||
|
"+..............................+",
|
||||||
|
"++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/apid2.xpm
Normal file
23
symbols/apid2.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * apid2_xpm[] = {
|
||||||
|
"32 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++++++++++++++++",
|
||||||
|
"+..............................+",
|
||||||
|
"+..............++.....++++.....+",
|
||||||
|
"+............++++...+++++++....+",
|
||||||
|
"+..........+++.++...++....++...+",
|
||||||
|
"+........+++...++.........++...+",
|
||||||
|
"+...+++++++....++.........++...+",
|
||||||
|
"+...++++++.....++........+++...+",
|
||||||
|
"+...++..++.....++.......+++....+",
|
||||||
|
"+...++..++.....++......+++.....+",
|
||||||
|
"+...++++++.....++.....+++......+",
|
||||||
|
"+...+++++++....++....+++.......+",
|
||||||
|
"+........+++...++...+++........+",
|
||||||
|
"+..........+++.++...++.........+",
|
||||||
|
"+............++++...++++++++...+",
|
||||||
|
"+.............+++...++++++++...+",
|
||||||
|
"+..............................+",
|
||||||
|
"++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/ar11.xpm
Normal file
23
symbols/ar11.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * ar11_xpm[] = {
|
||||||
|
"26 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++++++++++",
|
||||||
|
"+........................+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+...+++++.......+++++....+",
|
||||||
|
"+...+++++.......+++++....+",
|
||||||
|
"+......++...++.....++....+",
|
||||||
|
"+......++...++.....++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++..........++....+",
|
||||||
|
"+......++...++.....++....+",
|
||||||
|
"+......++...++.....++....+",
|
||||||
|
"+........................+",
|
||||||
|
"++++++++++++++++++++++++++"};
|
||||||
23
symbols/ar169.xpm
Normal file
23
symbols/ar169.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * ar169_xpm[] = {
|
||||||
|
"38 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++++++++++++++++++++++",
|
||||||
|
"+....................................+",
|
||||||
|
"+......++.....++++..........++++.....+",
|
||||||
|
"+...+++++....+++++++.......++++++....+",
|
||||||
|
"+...+++++....++...++......++...+++...+",
|
||||||
|
"+......++...++........++..++....++...+",
|
||||||
|
"+......++...++........++..++....++...+",
|
||||||
|
"+......++...++............++....++...+",
|
||||||
|
"+......++...++.+++.........+++++++...+",
|
||||||
|
"+......++...+++++++.........+++.++...+",
|
||||||
|
"+......++...++....++............++...+",
|
||||||
|
"+......++...++....++............++...+",
|
||||||
|
"+......++...++....++............++...+",
|
||||||
|
"+......++...+++...++......++...++....+",
|
||||||
|
"+......++....++++++...++..+++++++....+",
|
||||||
|
"+......++.....++++....++...+++++.....+",
|
||||||
|
"+....................................+",
|
||||||
|
"++++++++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/ar2211.xpm
Normal file
23
symbols/ar2211.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * ar2211_xpm[] = {
|
||||||
|
"52 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++++++++++++++++++++++++++++++++++++",
|
||||||
|
"+..................................................+",
|
||||||
|
"+.....++++..........++++........++...........++....+",
|
||||||
|
"+...+++++++.......+++++++....+++++........+++++....+",
|
||||||
|
"+...++....++......++....++...+++++........+++++....+",
|
||||||
|
"+.........++............++......++...++......++....+",
|
||||||
|
"+.........++............++......++...++......++....+",
|
||||||
|
"+........+++...........+++......++...........++....+",
|
||||||
|
"+.......+++...........+++.......++...........++....+",
|
||||||
|
"+......+++...........+++........++...........++....+",
|
||||||
|
"+.....+++...........+++.........++...........++....+",
|
||||||
|
"+....+++...........+++..........++...........++....+",
|
||||||
|
"+...+++...........+++...........++...........++....+",
|
||||||
|
"+...++............++............++...........++....+",
|
||||||
|
"+...++++++++..++..++++++++......++...++......++....+",
|
||||||
|
"+...++++++++..++..++++++++......++...++......++....+",
|
||||||
|
"+..................................................+",
|
||||||
|
"++++++++++++++++++++++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/ar43.xpm
Normal file
23
symbols/ar43.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * ar43_xpm[] = {
|
||||||
|
"31 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++++",
|
||||||
|
"+.............................+",
|
||||||
|
"+.........++.........+++++....+",
|
||||||
|
"+........+++........+++++++...+",
|
||||||
|
"+.......++++.......++....++...+",
|
||||||
|
"+......++.++...++..++....++...+",
|
||||||
|
"+.....++..++...++........++...+",
|
||||||
|
"+.....++..++............++....+",
|
||||||
|
"+....++...++..........+++.....+",
|
||||||
|
"+...++....++..........++++....+",
|
||||||
|
"+...+++++++++...........+++...+",
|
||||||
|
"+...+++++++++............++...+",
|
||||||
|
"+.........++.......++....++...+",
|
||||||
|
"+.........++.......++...+++...+",
|
||||||
|
"+.........++...++...++++++....+",
|
||||||
|
"+.........++...++....++++.....+",
|
||||||
|
"+.............................+",
|
||||||
|
"+++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dev0.xpm
Normal file
23
symbols/dev0.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dev0_xpm[] = {
|
||||||
|
"29 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++",
|
||||||
|
"+...........................+",
|
||||||
|
"+.......+..+.......++++.....+",
|
||||||
|
"+.......+..+......++++++....+",
|
||||||
|
"+.......+..+......++..++....+",
|
||||||
|
"+....+++++++++...++....++...+",
|
||||||
|
"+....+++++++++...++....++...+",
|
||||||
|
"+......+..+......++....++...+",
|
||||||
|
"+......+..+......++....++...+",
|
||||||
|
"+......+..+......++....++...+",
|
||||||
|
"+......+..+......++....++...+",
|
||||||
|
"+...+++++++++....++....++...+",
|
||||||
|
"+...+++++++++....++....++...+",
|
||||||
|
"+.....+..+........++..++....+",
|
||||||
|
"+.....+..+........++++++....+",
|
||||||
|
"+.....+..+.........++++.....+",
|
||||||
|
"+...........................+",
|
||||||
|
"+++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dev1.xpm
Normal file
23
symbols/dev1.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dev1_xpm[] = {
|
||||||
|
"29 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++",
|
||||||
|
"+...........................+",
|
||||||
|
"+.......+..+.........++.....+",
|
||||||
|
"+.......+..+......+++++.....+",
|
||||||
|
"+.......+..+......+++++.....+",
|
||||||
|
"+....+++++++++.......++.....+",
|
||||||
|
"+....+++++++++.......++.....+",
|
||||||
|
"+......+..+..........++.....+",
|
||||||
|
"+......+..+..........++.....+",
|
||||||
|
"+......+..+..........++.....+",
|
||||||
|
"+......+..+..........++.....+",
|
||||||
|
"+...+++++++++........++.....+",
|
||||||
|
"+...+++++++++........++.....+",
|
||||||
|
"+.....+..+...........++.....+",
|
||||||
|
"+.....+..+...........++.....+",
|
||||||
|
"+.....+..+...........++.....+",
|
||||||
|
"+...........................+",
|
||||||
|
"+++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dev2.xpm
Normal file
23
symbols/dev2.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dev2_xpm[] = {
|
||||||
|
"29 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++",
|
||||||
|
"+...........................+",
|
||||||
|
"+.......+..+.......++++.....+",
|
||||||
|
"+.......+..+.....+++++++....+",
|
||||||
|
"+.......+..+.....++....++...+",
|
||||||
|
"+....+++++++++.........++...+",
|
||||||
|
"+....+++++++++.........++...+",
|
||||||
|
"+......+..+...........+++...+",
|
||||||
|
"+......+..+..........+++....+",
|
||||||
|
"+......+..+.........+++.....+",
|
||||||
|
"+......+..+........+++......+",
|
||||||
|
"+...+++++++++.....+++.......+",
|
||||||
|
"+...+++++++++....+++........+",
|
||||||
|
"+.....+..+.......++.........+",
|
||||||
|
"+.....+..+.......++++++++...+",
|
||||||
|
"+.....+..+.......++++++++...+",
|
||||||
|
"+...........................+",
|
||||||
|
"+++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dev3.xpm
Normal file
23
symbols/dev3.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dev3_xpm[] = {
|
||||||
|
"29 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++",
|
||||||
|
"+...........................+",
|
||||||
|
"+.......+..+.......+++++....+",
|
||||||
|
"+.......+..+......+++++++...+",
|
||||||
|
"+.......+..+.....++....++...+",
|
||||||
|
"+....+++++++++...++....++...+",
|
||||||
|
"+....+++++++++.........++...+",
|
||||||
|
"+......+..+...........++....+",
|
||||||
|
"+......+..+.........+++.....+",
|
||||||
|
"+......+..+.........++++....+",
|
||||||
|
"+......+..+...........+++...+",
|
||||||
|
"+...+++++++++..........++...+",
|
||||||
|
"+...+++++++++....++....++...+",
|
||||||
|
"+.....+..+.......++...+++...+",
|
||||||
|
"+.....+..+........++++++....+",
|
||||||
|
"+.....+..+.........++++.....+",
|
||||||
|
"+...........................+",
|
||||||
|
"+++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dolbydigital.xpm
Normal file
23
symbols/dolbydigital.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dolbydigital_xpm[] = {
|
||||||
|
"31 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++++",
|
||||||
|
"+.............................+",
|
||||||
|
"+...+++++++++++.+++++++++++...+",
|
||||||
|
"+...++.++++++++.++++++++.++...+",
|
||||||
|
"+...++...++++++.++++++...++...+",
|
||||||
|
"+...++.....++++.++++.....++...+",
|
||||||
|
"+...++......+++.+++......++...+",
|
||||||
|
"+...++.......++.++.......++...+",
|
||||||
|
"+...++.......++.++.......++...+",
|
||||||
|
"+...++.......++.++.......++...+",
|
||||||
|
"+...++.......++.++.......++...+",
|
||||||
|
"+...++......+++.+++......++...+",
|
||||||
|
"+...++.....++++.++++.....++...+",
|
||||||
|
"+...++...++++++.++++++...++...+",
|
||||||
|
"+...++.++++++++.++++++++.++...+",
|
||||||
|
"+...+++++++++++.+++++++++++...+",
|
||||||
|
"+.............................+",
|
||||||
|
"+++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dolbydigital20.xpm
Normal file
23
symbols/dolbydigital20.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dolbydigital20_xpm[] = {
|
||||||
|
"55 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++",
|
||||||
|
"+.....................................................+",
|
||||||
|
"+...+++++++++++.+++++++++++.....++++.........++++.....+",
|
||||||
|
"+...++.++++++++.++++++++.++...+++++++.......++++++....+",
|
||||||
|
"+...++...++++++.++++++...++...++....++......++..++....+",
|
||||||
|
"+...++.....++++.++++.....++.........++.....++....++...+",
|
||||||
|
"+...++......+++.+++......++.........++.....++....++...+",
|
||||||
|
"+...++.......++.++.......++........+++.....++....++...+",
|
||||||
|
"+...++.......++.++.......++.......+++......++....++...+",
|
||||||
|
"+...++.......++.++.......++......+++.......++....++...+",
|
||||||
|
"+...++.......++.++.......++.....+++........++....++...+",
|
||||||
|
"+...++......+++.+++......++....+++.........++....++...+",
|
||||||
|
"+...++.....++++.++++.....++...+++..........++....++...+",
|
||||||
|
"+...++...++++++.++++++...++...++............++..++....+",
|
||||||
|
"+...++.++++++++.++++++++.++...++++++++..++..++++++....+",
|
||||||
|
"+...+++++++++++.+++++++++++...++++++++..++...++++.....+",
|
||||||
|
"+.....................................................+",
|
||||||
|
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/dolbydigital51.xpm
Normal file
23
symbols/dolbydigital51.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * dolbydigital51_xpm[] = {
|
||||||
|
"51 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++++++++++++++++++++++++++++++++++",
|
||||||
|
"+.................................................+",
|
||||||
|
"+...+++++++++++.+++++++++++...+++++++........++...+",
|
||||||
|
"+...++.++++++++.++++++++.++...+++++++.....+++++...+",
|
||||||
|
"+...++...++++++.++++++...++...++..........+++++...+",
|
||||||
|
"+...++.....++++.++++.....++...++.............++...+",
|
||||||
|
"+...++......+++.+++......++...++++++.........++...+",
|
||||||
|
"+...++.......++.++.......++...+++++++........++...+",
|
||||||
|
"+...++.......++.++.......++...++...+++.......++...+",
|
||||||
|
"+...++.......++.++.......++.........++.......++...+",
|
||||||
|
"+...++.......++.++.......++.........++.......++...+",
|
||||||
|
"+...++......+++.+++......++.........++.......++...+",
|
||||||
|
"+...++.....++++.++++.....++...++....++.......++...+",
|
||||||
|
"+...++...++++++.++++++...++...++...+++.......++...+",
|
||||||
|
"+...++.++++++++.++++++++.++...+++++++...++...++...+",
|
||||||
|
"+...+++++++++++.+++++++++++....+++++....++...++...+",
|
||||||
|
"+.................................................+",
|
||||||
|
"+++++++++++++++++++++++++++++++++++++++++++++++++++"};
|
||||||
23
symbols/ntsc.xpm
Normal file
23
symbols/ntsc.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * ntsc_xpm[] = {
|
||||||
|
"19 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"+++++++++++++++++++",
|
||||||
|
"+.................+",
|
||||||
|
"+...++.......++...+",
|
||||||
|
"+...+++......++...+",
|
||||||
|
"+...++++.....++...+",
|
||||||
|
"+...++++.....++...+",
|
||||||
|
"+...++.++....++...+",
|
||||||
|
"+...++..++...++...+",
|
||||||
|
"+...++..++...++...+",
|
||||||
|
"+...++...++..++...+",
|
||||||
|
"+...++...++..++...+",
|
||||||
|
"+...++....++.++...+",
|
||||||
|
"+...++.....++++...+",
|
||||||
|
"+...++.....++++...+",
|
||||||
|
"+...++......+++...+",
|
||||||
|
"+...++.......++...+",
|
||||||
|
"+.................+",
|
||||||
|
"+++++++++++++++++++"};
|
||||||
23
symbols/pal.xpm
Normal file
23
symbols/pal.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * pal_xpm[] = {
|
||||||
|
"18 18 2 1",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #000000",
|
||||||
|
"++++++++++++++++++",
|
||||||
|
"+................+",
|
||||||
|
"+...++++++++.....+",
|
||||||
|
"+...+++++++++....+",
|
||||||
|
"+...++.....+++...+",
|
||||||
|
"+...++......++...+",
|
||||||
|
"+...++......++...+",
|
||||||
|
"+...++.....+++...+",
|
||||||
|
"+...+++++++++....+",
|
||||||
|
"+...++++++++.....+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+...++...........+",
|
||||||
|
"+................+",
|
||||||
|
"++++++++++++++++++"};
|
||||||
Reference in New Issue
Block a user