diff --git a/COPYING b/COPYING index 5b6e7c6..f90922e 100644 --- a/COPYING +++ b/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not @@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. - + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -225,7 +225,7 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. @@ -336,5 +336,5 @@ necessary. Here is a sample; alter the names: This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/HISTORY b/HISTORY index 95e42bb..e829fec 100644 --- a/HISTORY +++ b/HISTORY @@ -252,3 +252,20 @@ VDR Plugin 'femon' Revision History 2007-05-15: Version 1.1.3 - Fixed a race condition in cFemonReceiver (Thanks to Reinhard Nissl). + +2007-10-14: Version 1.1.4 + +- Backported from 1.2.2. + +2007-08-14: Version 1.2.0 + +- Updated for vdr-1.5.7. + +2007-08-19: Version 1.2.1 + +- Updated for vdr-1.5.8. + +2007-10-14: Version 1.2.2 + +- Added Spids support. +- Minor OSD layout changes. diff --git a/Makefile b/Makefile index 34f35a1..e97e82d 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ PLUGIN = femon ### The version number of this plugin (taken from the main source file): -VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).h | awk '{ print $$6 }' | sed -e 's/[";]//g') +VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g') ### The C++ compiler and options: @@ -67,6 +67,10 @@ all-redirect: all OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o femontools.o +### The main target: + +all: libvdr-$(PLUGIN).so + ### Implicit rules: %.o: %.c @@ -83,8 +87,6 @@ $(DEPFILE): Makefile ### Targets: -all: libvdr-$(PLUGIN).so - libvdr-$(PLUGIN).so: $(OBJS) $(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@ ifndef FEMON_DEBUG diff --git a/README b/README index 3af2525..4daf0c2 100644 --- a/README +++ b/README @@ -1,11 +1,16 @@ This is a DVB Frontend Status Monitor plugin for the Video Disk Recorder (VDR). -Written by: R o l f . A h r e n b e r g @ s c i . f i +Written by: Rolf Ahrenberg + < R o l f . A h r e n b e r g @ s c i . f i > Project's homepage: http://www.saunalahti.fi/~rahrenbe/vdr/femon/ Latest version available at: http://www.saunalahti.fi/~rahrenbe/vdr/femon/ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. See the file COPYING for license information. Requirements: diff --git a/femon.c b/femon.c index 6f43afd..8be56f2 100644 --- a/femon.c +++ b/femon.c @@ -14,12 +14,38 @@ #include "femonosd.h" #include "femonservice.h" #include "femontools.h" -#include "femon.h" #if defined(APIVERSNUM) && APIVERSNUM < 10400 #error "VDR-1.4.0 API version or greater is required!" #endif +static const char VERSION[] = "1.1.4"; +static const char DESCRIPTION[] = "DVB Signal Information Monitor (OSD)"; +static const char MAINMENUENTRY[] = "Signal Information"; + +class cPluginFemon : public cPlugin { +public: + cPluginFemon(void); + virtual ~cPluginFemon(); + virtual const char *Version(void) { return VERSION; } + virtual const char *Description(void) { return tr(DESCRIPTION); } + virtual const char *CommandLineHelp(void); + virtual bool ProcessArgs(int argc, char *argv[]); + virtual bool Initialize(void); + virtual bool Start(void); + virtual void Stop(void); + virtual void Housekeeping(void); + virtual void MainThreadHook(void) {} + virtual cString Active(void) { return NULL; } + virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); } + virtual cOsdObject *MainMenuAction(void); + virtual cMenuSetupPage *SetupMenu(void); + virtual bool SetupParse(const char *Name, const char *Value); + virtual bool Service(const char *Id, void *Data); + virtual const char **SVDRPHelpPages(void); + virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); + }; + cPluginFemon::cPluginFemon() { // Initialize any member variables here. @@ -234,6 +260,20 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int return NULL; } +class cMenuFemonSetup : public cMenuSetupPage { +private: + const char *dispmodes[eFemonModeMaxNumber]; + const char *skins[eFemonSkinMaxNumber]; + const char *themes[eFemonThemeMaxNumber]; + cFemonConfig data; + virtual void Setup(void); +protected: + virtual eOSState ProcessKey(eKeys Key); + virtual void Store(void); +public: + cMenuFemonSetup(void); + }; + cMenuFemonSetup::cMenuFemonSetup(void) { Dprintf("%s()\n", __PRETTY_FUNCTION__); diff --git a/femon.h b/femon.h deleted file mode 100644 index b5f7846..0000000 --- a/femon.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Frontend Status Monitor plugin for the Video Disk Recorder - * - * See the README file for copyright information and how to reach the author. - * - * $Id$ - */ - -#ifndef __FEMON_H -#define __FEMON_H - -#include - -static const char VERSION[] = "1.1.3"; -static const char DESCRIPTION[] = "DVB Signal Information Monitor (OSD)"; -static const char MAINMENUENTRY[] = "Signal Information"; - -class cPluginFemon : public cPlugin { -public: - cPluginFemon(void); - virtual ~cPluginFemon(); - virtual const char *Version(void) { return VERSION; } - virtual const char *Description(void) { return tr(DESCRIPTION); } - virtual const char *CommandLineHelp(void); - virtual bool ProcessArgs(int argc, char *argv[]); - virtual bool Initialize(void); - virtual bool Start(void); - virtual void Stop(void); - virtual void Housekeeping(void); - virtual void MainThreadHook(void) {} - virtual cString Active(void) { return NULL; } - virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); } - virtual cOsdObject *MainMenuAction(void); - virtual cMenuSetupPage *SetupMenu(void); - virtual bool SetupParse(const char *Name, const char *Value); - virtual bool Service(const char *Id, void *Data); - virtual const char **SVDRPHelpPages(void); - virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); - }; - -class cMenuFemonSetup : public cMenuSetupPage { -private: - const char *dispmodes[eFemonModeMaxNumber]; - const char *skins[eFemonSkinMaxNumber]; - const char *themes[eFemonThemeMaxNumber]; - cFemonConfig data; - virtual void Setup(void); -protected: - virtual eOSState ProcessKey(eKeys Key); - virtual void Store(void); -public: - cMenuFemonSetup(void); - }; - -#endif //__FEMON_H - diff --git a/femonosd.c b/femonosd.c index 99155a9..f6a3118 100644 --- a/femonosd.c +++ b/femonosd.c @@ -44,7 +44,7 @@ #define OSDHEIGHT femonConfig.osdheight // in pixels #define OSDWIDTH 600 // in pixels #define OSDROWHEIGHT m_Font->Height() // in pixels -#define OSDINFOHEIGHT (OSDROWHEIGHT * 11) // in pixels (11 rows) +#define OSDINFOHEIGHT (OSDROWHEIGHT * 12) // in pixels (12 rows) #define OSDSTATUSHEIGHT (OSDROWHEIGHT * 6) // in pixels (6 rows) #define OSDSPACING 5 #define OSDCORNERING 10 @@ -319,8 +319,8 @@ void cFemonOsd::DrawInfoWindow(void) m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *getDpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; - m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); - m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); + m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Spid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); + m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getSpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Tpid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; @@ -334,6 +334,9 @@ void cFemonOsd::DrawInfoWindow(void) m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Rid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Rid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; + m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); + m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); + offset += OSDROWHEIGHT; switch (m_FrontendInfo.type) { case FE_QPSK: m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s #%d - %s", tr("Satellite Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); @@ -432,6 +435,7 @@ void cFemonOsd::DrawInfoWindow(void) m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), m_Receiver ? *cString::sprintf("%d x %d", m_Receiver->VideoHorizontalSize(), m_Receiver->VideoVerticalSize()) : *cString::sprintf("---"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; + offset += OSDROWHEIGHT; m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", IS_AUDIO_TRACK(track) ? channel->Apid(int(track - ttAudioFirst)) : channel->Apid(0), IS_AUDIO_TRACK(track) ? channel->Alang(int(track - ttAudioFirst)) : channel->Alang(0)), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; @@ -451,13 +455,16 @@ void cFemonOsd::DrawInfoWindow(void) else if (m_DisplayMode == eFemonModeAC3) { m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground); m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); - m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s - %s #%d %s", tr("Stream Information"), tr("AC-3 Stream"), IS_DOLBY_TRACK(track) ? channel->Dpid(int(track - ttDolbyFirst)) : channel->Dpid(0), IS_DOLBY_TRACK(track) ? channel->Dlang(int(track - ttDolbyFirst)) : channel->Dlang(0)), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); + m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Stream Information"), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); if (IS_OSDCORNERING) { m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); } offset += OSDROWHEIGHT; if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) { + m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("AC-3 Stream"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); + m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", channel->Dpid(int(track - ttDolbyFirst)), channel->Dlang(int(track - ttDolbyFirst))), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); + offset += OSDROWHEIGHT; m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("%s (%s)", *getBitrateKbits(m_Receiver->AC3StreamBitrate()), *getBitrateKbits(m_Receiver->AC3Bitrate())), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); offset += OSDROWHEIGHT; diff --git a/femontools.c b/femontools.c index fa8bc21..8521f7b 100644 --- a/femontools.c +++ b/femontools.c @@ -165,6 +165,15 @@ cString getDpids(const cChannel *channel) return dpids; } +cString getSpids(const cChannel *channel) +{ + int value = 0; + cString spids = cString::sprintf("%d", channel->Spid(value)); + while (channel->Spid(++value) && (value < MAXSPIDS)) + spids = cString::sprintf("%s, %d", *spids, channel->Spid(value)); + return spids; +} + cString getCAids(const cChannel *channel, bool identify) { cString caids; diff --git a/femontools.h b/femontools.h index 97b87fd..0ad54cd 100644 --- a/femontools.h +++ b/femontools.h @@ -33,6 +33,7 @@ uint32_t getUNC(int cardIndex = 0); cString getApids(const cChannel *channel); cString getDpids(const cChannel *channel); +cString getSpids(const cChannel *channel); cString getCAids(const cChannel *channel, bool identify = false); cString getCA(int value); cString getCoderate(int value);