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

Added scaling for symbols.

Updated for vdr-1.7.18.
This commit is contained in:
Rolf Ahrenberg 2011-04-20 17:41:17 +03:00
parent 0fd4062c76
commit de92daf5f0
5 changed files with 222 additions and 94 deletions

View File

@ -410,6 +410,7 @@ VDR Plugin 'femon' Revision History
- Fixed detection of replaying. - Fixed detection of replaying.
- Added support for LDFLAGS. - Added support for LDFLAGS.
2011-03-13: Version 1.7.10 2011-04-20: Version 1.7.10
- Updated for vdr-1.7.17. - Updated for vdr-1.7.18.
- Added scaling for symbols.

View File

@ -14,8 +14,8 @@
#include "femonservice.h" #include "femonservice.h"
#include "femontools.h" #include "femontools.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10717 #if defined(APIVERSNUM) && APIVERSNUM < 10718
#error "VDR-1.7.17 API version or greater is required!" #error "VDR-1.7.18 API version or greater is required!"
#endif #endif
static const char VERSION[] = "1.7.10"; static const char VERSION[] = "1.7.10";

View File

@ -25,8 +25,9 @@
#define OSDROWHEIGHT m_Font->Height() // in pixels #define OSDROWHEIGHT m_Font->Height() // in pixels
#define OSDINFOHEIGHT (OSDROWHEIGHT * 13) // in pixels (13 rows) #define OSDINFOHEIGHT (OSDROWHEIGHT * 13) // in pixels (13 rows)
#define OSDSTATUSHEIGHT (OSDROWHEIGHT * 6) // in pixels (6 rows) #define OSDSTATUSHEIGHT (OSDROWHEIGHT * 6) // in pixels (6 rows)
#define OSDSPACING 5 #define OSDSYMBOL(id) femonSymbols.Get(id)
#define OSDROUNDING 10 #define OSDSPACING femonSymbols.GetSpacing()
#define OSDROUNDING femonSymbols.GetRounding()
#define IS_OSDROUNDING (femonConfig.skin == eFemonSkinElchi) #define IS_OSDROUNDING (femonConfig.skin == eFemonSkinElchi)
#define IS_OSDRESOLUTION(r1, r2) (abs(r1 - r2) < 20) #define IS_OSDRESOLUTION(r1, r2) (abs(r1 - r2) < 20)
#define OSDINFOWIN_Y(offset) (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset) #define OSDINFOWIN_Y(offset) (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset)
@ -193,12 +194,13 @@ cFemonOsd::cFemonOsd()
memset(&m_FrontendStatus, 0, sizeof(m_FrontendStatus)); memset(&m_FrontendStatus, 0, sizeof(m_FrontendStatus));
memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo)); memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo));
m_SvdrpConnection.handle = -1; m_SvdrpConnection.handle = -1;
femonSymbols.Refresh();
m_Font = cFont::CreateFont(Setup.FontSml, min(max(Setup.FontSmlSize, MINFONTSIZE), MAXFONTSIZE)); m_Font = cFont::CreateFont(Setup.FontSml, min(max(Setup.FontSmlSize, MINFONTSIZE), MAXFONTSIZE));
if (!m_Font || !m_Font->Height()) { if (!m_Font || !m_Font->Height()) {
m_Font = new cFemonDummyFont; m_Font = new cFemonDummyFont;
error("cFemonOsd::cFemonOsd() cannot create required font."); error("cFemonOsd::cFemonOsd() cannot create required font.");
} }
tmp = 5 * bmSymbol[SYMBOL_LOCK].Width() + 6 * OSDSPACING; tmp = 5 * OSDSYMBOL(SYMBOL_LOCK).Width() + 6 * OSDSPACING;
if (OSDWIDTH < tmp) { if (OSDWIDTH < tmp) {
error("cFemonOsd::cFemonOsd() OSD width (%d) smaller than required (%d).", OSDWIDTH, tmp); error("cFemonOsd::cFemonOsd() OSD width (%d) smaller than required (%d).", OSDWIDTH, tmp);
OSDWIDTH = tmp; OSDWIDTH = tmp;
@ -249,84 +251,84 @@ void cFemonOsd::DrawStatusWindow(void)
if (m_Osd && channel) { if (m_Osd && channel) {
OSDDRAWSTATUSTITLEBAR(*cString::sprintf("%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->ShortName(true))); OSDDRAWSTATUSTITLEBAR(*cString::sprintf("%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->ShortName(true)));
if (m_SvdrpFrontend >= 0) { if (m_SvdrpFrontend >= 0) {
bm = &bmSymbol[SYMBOL_SVDRP]; bm = &OSDSYMBOL(SYMBOL_SVDRP);
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
} }
switch (cDevice::ActualDevice()->CardIndex()) { switch (cDevice::ActualDevice()->CardIndex()) {
case 1: bm = &bmSymbol[SYMBOL_ONE]; break; case 1: bm = &OSDSYMBOL(SYMBOL_ONE); break;
case 2: bm = &bmSymbol[SYMBOL_TWO]; break; case 2: bm = &OSDSYMBOL(SYMBOL_TWO); break;
case 3: bm = &bmSymbol[SYMBOL_THREE]; break; case 3: bm = &OSDSYMBOL(SYMBOL_THREE); break;
case 4: bm = &bmSymbol[SYMBOL_FOUR]; break; case 4: bm = &OSDSYMBOL(SYMBOL_FOUR); break;
case 5: bm = &bmSymbol[SYMBOL_FIVE]; break; case 5: bm = &OSDSYMBOL(SYMBOL_FIVE); break;
case 6: bm = &bmSymbol[SYMBOL_SIX]; break; case 6: bm = &OSDSYMBOL(SYMBOL_SIX); break;
case 7: bm = &bmSymbol[SYMBOL_SEVEN]; break; case 7: bm = &OSDSYMBOL(SYMBOL_SEVEN); break;
case 8: bm = &bmSymbol[SYMBOL_EIGHT]; break; case 8: bm = &OSDSYMBOL(SYMBOL_EIGHT); break;
default: bm = &bmSymbol[SYMBOL_ZERO]; break; default: bm = &OSDSYMBOL(SYMBOL_ZERO); break;
} }
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
bm = &bmSymbol[SYMBOL_DEVICE]; bm = &OSDSYMBOL(SYMBOL_DEVICE);
OSDDRAWSTATUSBM(0); OSDDRAWSTATUSBM(0);
if (IS_AUDIO_TRACK(track)) { if (IS_AUDIO_TRACK(track)) {
switch (int(track - ttAudioFirst)) { switch (int(track - ttAudioFirst)) {
case 1: bm = &bmSymbol[SYMBOL_ONE]; break; case 1: bm = &OSDSYMBOL(SYMBOL_ONE); break;
case 2: bm = &bmSymbol[SYMBOL_TWO]; break; case 2: bm = &OSDSYMBOL(SYMBOL_TWO); break;
case 3: bm = &bmSymbol[SYMBOL_THREE]; break; case 3: bm = &OSDSYMBOL(SYMBOL_THREE); break;
case 4: bm = &bmSymbol[SYMBOL_FOUR]; break; case 4: bm = &OSDSYMBOL(SYMBOL_FOUR); break;
case 5: bm = &bmSymbol[SYMBOL_FIVE]; break; case 5: bm = &OSDSYMBOL(SYMBOL_FIVE); break;
case 6: bm = &bmSymbol[SYMBOL_SIX]; break; case 6: bm = &OSDSYMBOL(SYMBOL_SIX); break;
case 7: bm = &bmSymbol[SYMBOL_SEVEN]; break; case 7: bm = &OSDSYMBOL(SYMBOL_SEVEN); break;
case 8: bm = &bmSymbol[SYMBOL_EIGHT]; break; case 8: bm = &OSDSYMBOL(SYMBOL_EIGHT); break;
default: bm = &bmSymbol[SYMBOL_ZERO]; break; default: bm = &OSDSYMBOL(SYMBOL_ZERO); break;
} }
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
switch (cDevice::PrimaryDevice()->GetAudioChannel()) { switch (cDevice::PrimaryDevice()->GetAudioChannel()) {
case 1: bm = &bmSymbol[SYMBOL_MONO_LEFT]; break; case 1: bm = &OSDSYMBOL(SYMBOL_MONO_LEFT); break;
case 2: bm = &bmSymbol[SYMBOL_MONO_RIGHT]; break; case 2: bm = &OSDSYMBOL(SYMBOL_MONO_RIGHT); break;
default: bm = &bmSymbol[SYMBOL_STEREO]; break; default: bm = &OSDSYMBOL(SYMBOL_STEREO); break;
} }
OSDDRAWSTATUSBM(0); OSDDRAWSTATUSBM(0);
} }
else if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) { else if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
if (m_Receiver->AC3_5_1()) bm = &bmSymbol[SYMBOL_DD51]; if (m_Receiver->AC3_5_1()) bm = &OSDSYMBOL(SYMBOL_DD51);
else if (m_Receiver->AC3_2_0()) bm = &bmSymbol[SYMBOL_DD20]; else if (m_Receiver->AC3_2_0()) bm = &OSDSYMBOL(SYMBOL_DD20);
else bm = &bmSymbol[SYMBOL_DD]; else bm = &OSDSYMBOL(SYMBOL_DD);
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
} }
if (m_Receiver) { if (m_Receiver) {
if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 1080)) if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 1080))
bm = &bmSymbol[SYMBOL_FORMAT_1080]; bm = &OSDSYMBOL(SYMBOL_FORMAT_1080);
else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 720)) else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 720))
bm = &bmSymbol[SYMBOL_FORMAT_720]; bm = &OSDSYMBOL(SYMBOL_FORMAT_720);
else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 576)) else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 576))
bm = &bmSymbol[SYMBOL_FORMAT_576]; bm = &OSDSYMBOL(SYMBOL_FORMAT_576);
else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 480)) else if (IS_OSDRESOLUTION(m_Receiver->VideoVerticalSize(), 480))
bm = &bmSymbol[SYMBOL_FORMAT_480]; bm = &OSDSYMBOL(SYMBOL_FORMAT_480);
else else
bm = NULL; bm = NULL;
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
switch (m_Receiver->VideoCodec()) { switch (m_Receiver->VideoCodec()) {
case VIDEO_CODEC_MPEG2: bm = &bmSymbol[SYMBOL_MPEG2]; break; case VIDEO_CODEC_MPEG2: bm = &OSDSYMBOL(SYMBOL_MPEG2); break;
case VIDEO_CODEC_H264: bm = &bmSymbol[SYMBOL_H264]; break; case VIDEO_CODEC_H264: bm = &OSDSYMBOL(SYMBOL_H264); break;
default: bm = NULL; break; default: bm = NULL; break;
} }
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
switch (m_Receiver->VideoFormat()) { switch (m_Receiver->VideoFormat()) {
case VIDEO_FORMAT_PAL: bm = &bmSymbol[SYMBOL_PAL]; break; case VIDEO_FORMAT_PAL: bm = &OSDSYMBOL(SYMBOL_PAL); break;
case VIDEO_FORMAT_NTSC: bm = &bmSymbol[SYMBOL_NTSC]; break; case VIDEO_FORMAT_NTSC: bm = &OSDSYMBOL(SYMBOL_NTSC); break;
default: bm = NULL; break; default: bm = NULL; break;
} }
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
switch (m_Receiver->VideoAspectRatio()) { switch (m_Receiver->VideoAspectRatio()) {
case VIDEO_ASPECT_RATIO_1_1: bm = &bmSymbol[SYMBOL_AR_1_1]; break; case VIDEO_ASPECT_RATIO_1_1: bm = &OSDSYMBOL(SYMBOL_AR_1_1); break;
case VIDEO_ASPECT_RATIO_4_3: bm = &bmSymbol[SYMBOL_AR_4_3]; break; case VIDEO_ASPECT_RATIO_4_3: bm = &OSDSYMBOL(SYMBOL_AR_4_3); break;
case VIDEO_ASPECT_RATIO_16_9: bm = &bmSymbol[SYMBOL_AR_16_9]; break; case VIDEO_ASPECT_RATIO_16_9: bm = &OSDSYMBOL(SYMBOL_AR_16_9); break;
case VIDEO_ASPECT_RATIO_2_21_1: bm = &bmSymbol[SYMBOL_AR_2_21_1]; break; case VIDEO_ASPECT_RATIO_2_21_1: bm = &OSDSYMBOL(SYMBOL_AR_2_21_1); break;
default: bm = NULL; break; default: bm = NULL; break;
} }
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
} }
if (channel->Ca() > 0xFF) { if (channel->Ca() > 0xFF) {
bm = &bmSymbol[SYMBOL_ENCRYPTED]; bm = &OSDSYMBOL(SYMBOL_ENCRYPTED);
OSDDRAWSTATUSBM(OSDSPACING); OSDDRAWSTATUSBM(OSDSPACING);
} }
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
@ -345,14 +347,14 @@ void cFemonOsd::DrawStatusWindow(void)
*cString::sprintf("%s:", (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? tr("AC-3") : tr("Audio")), *cString::sprintf("%s:", (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? tr("AC-3") : tr("Audio")),
*getBitrateKbits(m_Receiver ? ((m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? m_Receiver->AC3Bitrate() : m_Receiver->AudioBitrate()) : (m_SvdrpFrontend >= 0 ? m_SvdrpAudioBitrate : -1.0))); *getBitrateKbits(m_Receiver ? ((m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? m_Receiver->AC3Bitrate() : m_Receiver->AudioBitrate()) : (m_SvdrpFrontend >= 0 ? m_SvdrpAudioBitrate : -1.0)));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
x = bmSymbol[SYMBOL_LOCK].Width(); x = OSDSYMBOL(SYMBOL_LOCK).Width();
y = (OSDROWHEIGHT - bmSymbol[SYMBOL_LOCK].Height()) / 2; y = (OSDROWHEIGHT - OSDSYMBOL(SYMBOL_LOCK).Height()) / 2;
if (m_FrontendStatusValid) { if (m_FrontendStatusValid) {
OSDDRAWSTATUSFRONTEND(1, bmSymbol[SYMBOL_LOCK], FE_HAS_LOCK); OSDDRAWSTATUSFRONTEND(1, OSDSYMBOL(SYMBOL_LOCK), FE_HAS_LOCK);
OSDDRAWSTATUSFRONTEND(2, bmSymbol[SYMBOL_SIGNAL], FE_HAS_SIGNAL); OSDDRAWSTATUSFRONTEND(2, OSDSYMBOL(SYMBOL_SIGNAL), FE_HAS_SIGNAL);
OSDDRAWSTATUSFRONTEND(3, bmSymbol[SYMBOL_CARRIER], FE_HAS_CARRIER); OSDDRAWSTATUSFRONTEND(3, OSDSYMBOL(SYMBOL_CARRIER), FE_HAS_CARRIER);
OSDDRAWSTATUSFRONTEND(4, bmSymbol[SYMBOL_VITERBI], FE_HAS_VITERBI); OSDDRAWSTATUSFRONTEND(4, OSDSYMBOL(SYMBOL_VITERBI), FE_HAS_VITERBI);
OSDDRAWSTATUSFRONTEND(5, bmSymbol[SYMBOL_SYNC], FE_HAS_SYNC); OSDDRAWSTATUSFRONTEND(5, OSDSYMBOL(SYMBOL_SYNC), FE_HAS_SYNC);
} }
OSDDRAWSTATUSBOTTOMBAR(); OSDDRAWSTATUSBOTTOMBAR();
m_Osd->Flush(); m_Osd->Flush();

View File

@ -5,6 +5,8 @@
* *
*/ */
#include <vdr/device.h>
#include "femontools.h"
#include "femonsymbol.h" #include "femonsymbol.h"
#include "symbols/stereo.xpm" #include "symbols/stereo.xpm"
@ -43,41 +45,140 @@
#include "symbols/format576.xpm" #include "symbols/format576.xpm"
#include "symbols/format480.xpm" #include "symbols/format480.xpm"
cBitmap bmSymbol[SYMBOL_MAX_COUNT] = static cBitmap bmStereo(stereo_xpm);
static cBitmap bmMonoLeft(monoleft_xpm);
static cBitmap bmMonoRight(monoright_xpm);
static cBitmap bmDolbyDigital(dolbydigital_xpm);
static cBitmap bmDolbyDigital20(dolbydigital20_xpm);
static cBitmap bmDolbyDigital51(dolbydigital51_xpm);
static cBitmap bmMpeg2(mpeg2_xpm);
static cBitmap bmH264(h264_xpm);
static cBitmap bmPal(pal_xpm);
static cBitmap bmNtsc(ntsc_xpm);
static cBitmap bmEncrypted(encrypted_xpm);
static cBitmap bmSvdrp(svdrp_xpm);
static cBitmap bmLock(lock_xpm);
static cBitmap bmSignal(signal_xpm);
static cBitmap bmCarrier(carrier_xpm);
static cBitmap bmViterbi(viterbi_xpm);
static cBitmap bmSync(sync_xpm);
static cBitmap bmAspectRatio11(ar11_xpm);
static cBitmap bmAspectRatio169(ar169_xpm);
static cBitmap bmAspectRatio2211(ar2211_xpm);
static cBitmap bmAspectRatio43(ar43_xpm);
static cBitmap bmDevice(device_xpm);
static cBitmap bmZero(zero_xpm);
static cBitmap bmOne(one_xpm);
static cBitmap bmTwo(two_xpm);
static cBitmap bmThree(three_xpm);
static cBitmap bmFour(four_xpm);
static cBitmap bmFive(five_xpm);
static cBitmap bmSix(six_xpm);
static cBitmap bmSeven(seven_xpm);
static cBitmap bmEight(eight_xpm);
static cBitmap bmFormat1080(format1080_xpm);
static cBitmap bmFormat720(format720_xpm);
static cBitmap bmFormat576(format576_xpm);
static cBitmap bmFormat480(format480_xpm);
cFemonSymbolCache femonSymbols;
cFemonSymbolCache::cFemonSymbolCache()
: xFactorM(1.0),
yFactorM(1.0),
antiAliasM(false)
{ {
cBitmap(stereo_xpm), // SYMBOL_STEREO Populate();
cBitmap(monoleft_xpm), // SYMBOL_MONO_LEFT }
cBitmap(monoright_xpm), // SYMBOL_MONO_RIGHT
cBitmap(dolbydigital_xpm), // SYMBOL_DD cFemonSymbolCache::~cFemonSymbolCache()
cBitmap(dolbydigital20_xpm), // SYMBOL_DD20 {
cBitmap(dolbydigital51_xpm), // SYMBOL_DD51 Flush();
cBitmap(mpeg2_xpm), // SYMBOL_MPEG2 }
cBitmap(h264_xpm), // SYMBOL_H264
cBitmap(pal_xpm), // SYMBOL_PAL void cFemonSymbolCache::Refresh()
cBitmap(ntsc_xpm), // SYMBOL_NTSC {
cBitmap(encrypted_xpm), // SYMBOL_ENCRYPTED int width, height;
cBitmap(svdrp_xpm), // SYMBOL_SVDRP double aspect, xfactor, yfactor;
cBitmap(lock_xpm), // SYMBOL_LOCK cDevice::PrimaryDevice()->GetOsdSize(width, height, aspect);
cBitmap(signal_xpm), // SYMBOL_SIGNAL debug("cFemonSymbolCache::Refresh(): %dx%d", width, height);
cBitmap(carrier_xpm), // SYMBOL_CARRIER xfactor = (double)width / DEFAULT_WIDTH;
cBitmap(viterbi_xpm), // SYMBOL_VITERBI yfactor = (double)height / DEFAULT_HEIGHT;
cBitmap(sync_xpm), // SYMBOL_SYNC if (!DoubleEqual(xfactor, xFactorM) || !DoubleEqual(yfactor, yFactorM)) {
cBitmap(ar11_xpm), // SYMBOL_AR_1_1 xFactorM = xfactor;
cBitmap(ar169_xpm), // SYMBOL_AR_16_9 yFactorM = yfactor;
cBitmap(ar2211_xpm), // SYMBOL_AR_2_21_1 Populate();
cBitmap(ar43_xpm), // SYMBOL_AR_4_3 }
cBitmap(device_xpm), // SYMBOL_DEVICE }
cBitmap(zero_xpm), // SYMBOL_ZERO
cBitmap(one_xpm), // SYMBOL_ONE bool cFemonSymbolCache::Populate(void)
cBitmap(two_xpm), // SYMBOL_TWO {
cBitmap(three_xpm), // SYMBOL_THREE debug("cFemonSymbolCache::Populate(): %.02fx%.02f ", xFactorM, yFactorM);
cBitmap(four_xpm), // SYMBOL_FOUR if (!DoubleEqual(0.0, xFactorM) || !DoubleEqual(0.0, yFactorM)) {
cBitmap(five_xpm), // SYMBOL_FIVE Flush();
cBitmap(six_xpm), // SYMBOL_SIX
cBitmap(seven_xpm), // SYMBOL_SEVEN // pushing order must follow the enumeration
cBitmap(eight_xpm), // SYMBOL_EIGHT cacheM.push_back(bmStereo.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_STEREO
cBitmap(format1080_xpm), // SYMBOL_FORMAT_1080 cacheM.push_back(bmMonoLeft.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_MONO_LEFT
cBitmap(format720_xpm), // SYMBOL_FORMAT_720 cacheM.push_back(bmMonoRight.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_MONO_RIGHT
cBitmap(format576_xpm), // SYMBOL_FORMAT_576 cacheM.push_back(bmDolbyDigital.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_DD
cBitmap(format480_xpm) // SYMBOL_FORMAT_480 cacheM.push_back(bmDolbyDigital20.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_DD20
}; cacheM.push_back(bmDolbyDigital51.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_DD51
cacheM.push_back(bmMpeg2.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_MPEG2
cacheM.push_back(bmH264.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_H264
cacheM.push_back(bmPal.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_PAL
cacheM.push_back(bmNtsc.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_NTSC
cacheM.push_back(bmEncrypted.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_ENCRYPTED
cacheM.push_back(bmSvdrp.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SVDRP
cacheM.push_back(bmLock.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_LOCK
cacheM.push_back(bmSignal.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SIGNAL
cacheM.push_back(bmCarrier.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_CARRIER
cacheM.push_back(bmViterbi.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_VITERBI
cacheM.push_back(bmSync.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SYNC
cacheM.push_back(bmAspectRatio11.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_1_1
cacheM.push_back(bmAspectRatio169.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_16_9
cacheM.push_back(bmAspectRatio2211.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_2_21_1
cacheM.push_back(bmAspectRatio43.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_AR_4_3
cacheM.push_back(bmDevice.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_DEVICE
cacheM.push_back(bmZero.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_ZERO
cacheM.push_back(bmOne.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_ONE
cacheM.push_back(bmTwo.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_TWO
cacheM.push_back(bmThree.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_THREE
cacheM.push_back(bmFour.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FOUR
cacheM.push_back(bmFive.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FIVE
cacheM.push_back(bmSix.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SIX
cacheM.push_back(bmSeven.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_SEVEN
cacheM.push_back(bmEight.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_EIGHT
cacheM.push_back(bmFormat1080.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_1080
cacheM.push_back(bmFormat720.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_720
cacheM.push_back(bmFormat576.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_576
cacheM.push_back(bmFormat480.Scaled(xFactorM, yFactorM, antiAliasM)); // SYMBOL_FORMAT_480
return true;
}
return false;
}
bool cFemonSymbolCache::Flush(void)
{
debug("cFemonSymbolCache::Flush()");
if (!cacheM.empty()) {
for (unsigned int i = 0; i < cacheM.size(); ++i) {
cBitmap *bmp = cacheM[i];
DELETENULL(bmp);
}
cacheM.clear();
}
return true;
}
cBitmap& cFemonSymbolCache::Get(unsigned int symbolP)
{
cBitmap *bitmapM = NULL;
if (symbolP < cacheM.size())
bitmapM = cacheM[symbolP];
return *bitmapM;
}

View File

@ -8,6 +8,7 @@
#ifndef __FEMONSYMBOL_H #ifndef __FEMONSYMBOL_H
#define __FEMONSYMBOL_H #define __FEMONSYMBOL_H
#include <vector>
#include <vdr/osd.h> #include <vdr/osd.h>
enum eSymbols { enum eSymbols {
@ -49,6 +50,29 @@ enum eSymbols {
SYMBOL_MAX_COUNT SYMBOL_MAX_COUNT
}; };
extern cBitmap bmSymbol[SYMBOL_MAX_COUNT]; class cFemonSymbolCache {
private:
enum {
DEFAULT_SPACING = 5,
DEFAULT_ROUNDING = 10,
DEFAULT_HEIGHT = 576,
DEFAULT_WIDTH = 720
};
double xFactorM;
double yFactorM;
bool antiAliasM;
std::vector<cBitmap*> cacheM;
bool Populate(void);
bool Flush(void);
public:
cFemonSymbolCache();
~cFemonSymbolCache();
void Refresh();
cBitmap& Get(unsigned int symbolP);
int GetSpacing() { return yFactorM * DEFAULT_SPACING; }
int GetRounding() { return yFactorM * DEFAULT_ROUNDING; }
};
extern cFemonSymbolCache femonSymbols;
#endif // __FEMONSYMBOL_H #endif // __FEMONSYMBOL_H