1
0
mirror of https://github.com/rofafor/vdr-plugin-iptv.git synced 2023-10-10 11:37:03 +00:00

Compare commits

...

16 Commits

Author SHA1 Message Date
Rolf Ahrenberg
6324eaf128 Updated HISTORY. 2008-06-20 19:34:50 +00:00
Rolf Ahrenberg
b31de2ec23 Rephrased. 2008-06-20 19:34:18 +00:00
Rolf Ahrenberg
b3b28a5faa Initial import. 2008-06-20 19:33:43 +00:00
Rolf Ahrenberg
037adaac86 Added pluginparam patch for vdr-1.7.0. 2008-04-13 16:04:03 +00:00
Rolf Ahrenberg
6fa46ca9e3 Revert non-working retuning optimization. 2008-04-04 20:55:44 +00:00
Rolf Ahrenberg
c507f373ff Fixed channels.conf format used in vlc2iptv. Disabled retuning feature and added some minor corrections. 2008-04-02 22:55:04 +00:00
Rolf Ahrenberg
e798ff1424 Removed old channels.conf format support and disabled re-tuning of EXT protocol. 2008-04-02 20:22:48 +00:00
Rolf Ahrenberg
613152c6db Updated Italian translations and incremented version number. 2008-03-30 20:25:12 +00:00
Rolf Ahrenberg
740d93aa2c Updated russian translation and API dependency. 2008-03-27 20:27:26 +00:00
Rolf Ahrenberg
94e70db977 Updated for vdr-1.6.0. 2008-03-27 20:14:18 +00:00
Rolf Ahrenberg
698ebb3a3c Updated pluginparam patches. 2008-03-13 23:32:51 +00:00
Rolf Ahrenberg
aaf93246c1 Added Russian translation. 2008-03-13 23:26:04 +00:00
Rolf Ahrenberg
1d8044b4e4 Updated Italian translation. 2008-02-23 12:37:56 +00:00
Rolf Ahrenberg
573584022c Fixed installation instructions. 2008-02-19 22:32:24 +00:00
Rolf Ahrenberg
5420374543 Removed obsolete patches. 2008-02-19 22:30:43 +00:00
Rolf Ahrenberg
71952ae0dc Removed support for older vdr versions. 2008-02-19 22:29:02 +00:00
29 changed files with 521 additions and 1117 deletions

16
HISTORY
View File

@@ -34,7 +34,7 @@ VDR Plugin 'iptv' Revision History
2008-01-20: Version 0.0.6
- Fixed some lint warnings.
- Added Italian translation (Thanks to Gringo).
- Added Italian translation (Thanks to Diego Pierotto).
- Added '-Wno-parentheses' to the compiler options.
- Mapped 'kInfo' as help key in setup menu.
- Refactored statistic collecting code.
@@ -49,3 +49,17 @@ VDR Plugin 'iptv' Revision History
- Modified channels.conf format to enable/disable channel
specific pid and sid scanning functionality.
- Removed the general sid scanning setup option.
2008-03-27: Version 0.2.0
- Updated for vdr-1.6.0.
- Updated Italian translation (Thanks to Diego Pierotto).
- Added Russian translation (Thanks to Alexander Gross).
2008-06-20: Version 0.2.1
- Updated Italian translation (Thanks to Diego Pierotto).
- Removed compatibility mode for old channels.conf format.
- Updated vlc2iptv script for new channels.conf format.
- Added pluginparam patch for vdr-1.7.0.
- Added new example scripts from VDR-WIKI.

View File

@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile,v 1.26 2008/01/30 22:41:58 rahrenbe Exp $
# $Id: Makefile,v 1.27 2008/02/19 22:29:02 rahrenbe Exp $
# Debugging on/off
#IPTV_DEBUG = 1
@@ -39,11 +39,6 @@ TMPDIR = /tmp
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
APIVERSNUM = $(shell sed -ne '/define APIVERSNUM/s/^.*APIVERSNUM[ \t]*\([0-9]*\).*$$/\1/p' $(VDRDIR)/config.h)
### Test whether VDR has locale support
#VDRLOCALE = $(shell grep '^LOCALEDIR' $(VDRDIR)/Makefile)
VDRLOCALE = $(shell if [ $(APIVERSNUM) -ge 10507 ]; then echo "locale"; fi)
### The name of the distribution archive:
@@ -60,11 +55,14 @@ ifdef IPTV_DEBUG
DEFINES += -DDEBUG
endif
.PHONY: all all-redirect
all-redirect: all
### The object files (add further files here):
OBJS = $(PLUGIN).o config.o setup.o device.o streamer.o protocoludp.o \
protocolhttp.o protocolfile.o protocolext.o sectionfilter.o \
sidscanner.o pidscanner.o statistics.o common.o socket.o i18n.o
sidscanner.o pidscanner.o statistics.o common.o socket.o
### The main target:
@@ -80,7 +78,7 @@ all: libvdr-$(PLUGIN).so i18n
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(subst i18n.c,,$(OBJS:%.o=%.c)) > $@
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
@@ -91,20 +89,11 @@ LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
ifeq ($(strip $(APIVERSION)),1.5.7)
I18Nvdrmo = $(PLUGIN).mo
else
I18Nvdrmo = vdr-$(PLUGIN).mo
endif
### Do gettext based i18n stuff
ifneq ($(strip $(VDRLOCALE)),)
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(subst i18n.c,,$(wildcard *.c))
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='Rolf Ahrenberg' -o $@ $^
%.po: $(I18Npot)
@@ -116,23 +105,7 @@ $(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
cp $< $@
.PHONY: i18n
i18n: $(I18Nmsgs)
i18n.c: i18n-template.c
@cp i18n-template.c i18n.c
### Do i18n.c based i18n stuff
else
i18n:
@### nothing to do
#i18n compatibility generator:
i18n.c: i18n-template.c po2i18n.pl $(I18Npo)
./po2i18n.pl < i18n-template.c > i18n.c
endif
i18n: $(I18Nmsgs) $(I18Npot)
### Targets:
@@ -152,4 +125,4 @@ dist: clean
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) i18n.c *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot

5
README
View File

@@ -44,10 +44,7 @@ cd /put/your/path/here/VDR/PLUGINS/src
tar -xzf /put/your/path/here/vdr-iptv-X.Y.Z.tgz
ln -s iptv-X.Y.Z iptv
cd /put/your/path/here/VDR
# Note: pluginparam patch is required for every vdr
patch -p1 < PLUGINS/src/iptv/patches/vdr-X.Y.Z-pluginparam.patch
# Note: closefilter patch is required only for vdr-1.5.9 or earlier
patch -p1 < PLUGINS/src/iptv/patches/vdr-X.Y.Z-closefilter.patch
cp sources.conf /path/to/vdrconf/
cp -R PLUGINS/src/iptv/iptv /path/to/vdrconf/plugins/
make
@@ -175,5 +172,3 @@ Acknowledgements:
- The IPTV section filtering code is derived from Linux kernel.
- The pid scanning code is derived from Udo Richter's streamplayer plugin.
- Udo Richter's po2i18n package is used to support VDR's old i18n system.

View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: device.c,v 1.84 2008/02/17 19:18:47 rahrenbe Exp $
* $Id: device.c,v 1.87 2008/04/02 22:55:04 rahrenbe Exp $
*/
#include "config.h"
@@ -58,10 +58,8 @@ cIptvDevice::cIptvDevice(unsigned int Index)
cIptvDevice::~cIptvDevice()
{
debug("cIptvDevice::~cIptvDevice(%d)\n", deviceIndex);
#if defined(APIVERSNUM) && APIVERSNUM >= 10515
// Stop section handler of iptv device
StopSectionHandler();
#endif
DELETE_POINTER(pIptvStreamer);
DELETE_POINTER(pUdpProtocol);
DELETE_POINTER(pHttpProtocol);
@@ -227,30 +225,6 @@ cString cIptvDevice::GetChannelSettings(const char *IptvParam, int *Parameter, i
return locstr;
}
}
// compatibility mode for old channels.conf format
else if (sscanf(IptvParam, "%a[^|]|%a[^|]|%a[^|]|%u", &tag, &proto, &loc, Parameter) == 4) {
cString tagstr(tag, true);
cString protostr(proto, true);
cString locstr(loc, true);
*SidScan = 0;
*PidScan = 0;
// check if IPTV tag
if (strncasecmp(*tagstr, "IPTV", 4) == 0) {
// check if protocol is supported and update the pointer
if (strncasecmp(*protostr, "UDP", 3) == 0)
*Protocol = pUdpProtocol;
else if (strncasecmp(*protostr, "HTTP", 4) == 0)
*Protocol = pHttpProtocol;
else if (strncasecmp(*protostr, "FILE", 4) == 0)
*Protocol = pFileProtocol;
else if (strncasecmp(*protostr, "EXT", 3) == 0)
*Protocol = pExtProtocol;
else
return NULL;
// return location
return locstr;
}
}
return NULL;
}
@@ -304,11 +278,12 @@ bool cIptvDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
}
sidScanEnabled = sidscan ? true : false;
pidScanEnabled = pidscan ? true : false;
pIptvStreamer->Set(location, parameter, deviceIndex, protocol);
if (sidScanEnabled && pSidScanner && IptvConfig.GetSectionFiltering())
pSidScanner->SetChannel(Channel);
if (pidScanEnabled && pPidScanner)
pPidScanner->SetChannel(Channel);
if (pIptvStreamer->Set(location, parameter, deviceIndex, protocol)) {
if (sidScanEnabled && pSidScanner && IptvConfig.GetSectionFiltering())
pSidScanner->SetChannel(Channel);
if (pidScanEnabled && pPidScanner)
pPidScanner->SetChannel(Channel);
}
return true;
}
@@ -396,7 +371,7 @@ bool cIptvDevice::OpenDvr(void)
void cIptvDevice::CloseDvr(void)
{
debug("cIptvDevice::CloseDvr(%d)\n", deviceIndex);
if (pidScanEnabled && pSidScanner && IptvConfig.GetSectionFiltering())
if (sidScanEnabled && pSidScanner && IptvConfig.GetSectionFiltering())
pSidScanner->SetStatus(false);
if (pIptvStreamer)
pIptvStreamer->Close();
@@ -461,7 +436,7 @@ bool cIptvDevice::GetTSPacket(uchar *&Data)
write(dvrFd, p, TS_SIZE);
// Analyze incomplete streams with built-in pid analyzer
if (pidScanEnabled && pPidScanner)
pPidScanner->Process(p);
pPidScanner->Process(p);
// Run the data through all filters
for (unsigned int i = 0; i < eMaxSecFilterCount; ++i) {
if (secfilters[i])

View File

@@ -1,18 +0,0 @@
/*
* i18n.c: IPTV plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id: i18n-template.c,v 1.1 2007/10/28 16:22:44 rahrenbe Exp $
*/
#include "common.h"
#include "i18n.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10507
const tI18nPhrase IptvPhrases[] = {
// START I18N
// END I18N
{ NULL }
};
#endif

18
i18n.h
View File

@@ -1,18 +0,0 @@
/*
* i18n.h: IPTV plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id: i18n.h,v 1.1 2007/10/28 16:22:44 rahrenbe Exp $
*/
#ifndef __IPTV_I18N_H
#define __IPTV_I18N_H
#include <vdr/i18n.h>
#if defined(APIVERSNUM) && APIVERSNUM < 10507
extern const tI18nPhrase IptvPhrases[];
#endif
#endif // __IPTV_I18N_H

12
iptv.c
View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: iptv.c,v 1.36 2008/02/01 21:54:24 rahrenbe Exp $
* $Id: iptv.c,v 1.39 2008/03/30 20:25:12 rahrenbe Exp $
*/
#include <getopt.h>
@@ -12,17 +12,16 @@
#include "config.h"
#include "setup.h"
#include "device.h"
#include "i18n.h"
#ifndef PLUGINPARAMPATCHVERSNUM
#error "You must apply the pluginparam patch for VDR!"
#endif
#if defined(APIVERSNUM) && APIVERSNUM < 10510 && !defined(CLOSEFILTERPATCHVERSNUM)
#error "You must apply the closefilter patch for VDR!"
#if defined(APIVERSNUM) && APIVERSNUM < 10600
#error "VDR-1.6.0 API version or greater is required!"
#endif
static const char VERSION[] = "0.0.7";
static const char VERSION[] = "0.2.1";
static const char DESCRIPTION[] = trNOOP("Experience the IPTV");
class cPluginIptv : public cPlugin {
@@ -100,9 +99,6 @@ bool cPluginIptv::Initialize(void)
{
debug("cPluginIptv::Initialize()\n");
// Initialize any background activities the plugin shall perform.
#if defined(APIVERSNUM) && APIVERSNUM < 10507
RegisterI18n(IptvPhrases);
#endif
IptvConfig.SetConfigDirectory(cPlugin::ConfigDirectory(PLUGIN_NAME_I18N));
return cIptvDevice::Initialize(deviceCount);
}

67
iptv/internetradio.sh Executable file
View File

@@ -0,0 +1,67 @@
#!/bin/sh
# internetradio.sh is used by the VDR iptv plugin to transcode an internet
# radio stream.
#
# The script originates from:
# http://www.vdr-wiki.de/wiki/index.php/Iptv-plugin
#
# An example channels.conf entry:
# internetradio;IPTV:2:IPTV|S0P0|EXT|internetradio.sh|0:P:0:0:256:0:0:2:0:0:0
#
# internetradio.sh 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.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
if [ $# -ne 2 ]; then
logger "$0: error: Invalid parameter count '$#' $*"
exit 1;
fi
# Channels.conf parameter
PARAMETER=${1}
# Iptv plugin listens this port
PORT=${2}
# Stream configuration
URL="mms://stream"
TITLE="internetradio"
# Stream temporary files
FIFO=/tmp/internetradio.fifo
LOG=/dev/null
{
rm -f "${FIFO}"
mkfifo "${FIFO}"
mplayer -dumpstream "${URL}" \
-quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \
-dumpfile "$FIFO" &
# Time to connect and fill pipe
sleep 3
# Build audio only stream
# PID 0x100/256 = Audio
ffmpeg -v -1 \
-i "${FIFO}" \
-title "${TITLE}" \
-f mpegts -acodec mp2 -ac 2 -ab 96k -ar 48000 \
- | nc -u 127.0.0.1 ${PORT}
rm -f "${FIFO}"
} > ${LOG} 2>&1

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# iptvstream.sh can be used by the VDR iptv plug-in to transcode external
# iptvstream.sh can be used by the VDR iptv plugin to transcode external
# sources
#
# (C) 2007 Rolf Ahrenberg, Antti Sepp<70>l<EFBFBD>

54
iptv/linein.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/sh
# linein.sh is used by the VDR iptv plugin to transcode line-in of
# a soundcard.
#
# The script originates from:
# http://www.vdr-wiki.de/wiki/index.php/Iptv-plugin
#
# An example channels.conf entry:
# linein;IPTV:5:IPTV|S0P0|EXT|linein.sh|0:P:27500:0:256:0:0:5:5:5:0
#
# linein.sh 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.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
if [ $# -ne 2 ]; then
logger "$0: error: Invalid parameter count '$#' $*"
exit 1;
fi
# Channels.conf parameter
PARAMETER=${1}
# Iptv plugin listens this port
PORT=${2}
# Stream configuration
TITLE="linein"
# Stream temporary files
LOG=/dev/null
{
# PID 0x100/256 = Audio
arecord -q -D hw:0,0 -f dat | \
ffmpeg -v -1 \
-f wav \
-i - \
-title "${TITLE}" \
-f mpegts -acodec mp2 -ac 2 -ab 128k -ar 48000 \
- | nc -nu 127.0.0.1 ${PORT}
} > ${LOG} 2>&1

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# vlc2iptv is used by the VDR iptv plug-in to transcode external sources
# vlc2iptv is used by the VDR iptv plugin to transcode external sources
#
# (C) 2007 Rolf Ahrenberg, Antti Sepp<70>l<EFBFBD>
# (C) 2007 Tobias Grimm
@@ -52,7 +52,7 @@ lookup_channel_and_pids()
[ ! -e "$CHANNELS_CONF" ] && \
exit_with_error "channels.conf not found ($CHANNELS_CONF)"
local CHANNEL_RECORD=`grep ":IPTV|EXT|vlc2iptv|$PARAMETER:" $CHANNELS_CONF`
local CHANNEL_RECORD=`grep "[:]IPTV[|][SP][10][SP][10][|]EXT[|]vlc2iptv[|]$PARAMETER[:]" $CHANNELS_CONF`
[ -z "$CHANNEL_RECORD" ] && \
exit_with_error "no iptv channel with parameter $PARAMETER found"

69
iptv/webcam.sh Executable file
View File

@@ -0,0 +1,69 @@
#!/bin/sh
# webcam.sh is used by the VDR iptv plugin to transcode an internet radio
# stream remuxed with images (e.g. webcam) to provide a video stream.
#
# The script originates from:
# http://www.vdr-wiki.de/wiki/index.php/Iptv-plugin
#
# An example channels.conf entry:
# webcam;IPTV:3:IPTV|S0P0|EXT|webcam.sh|0:P:0:256:257:0:0:3:0:0:0
#
# webcam.sh 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.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
if [ $# -ne 2 ]; then
logger "$0: error: Invalid parameter count '$#' $*"
exit 1;
fi
# Channels.conf parameter
PARAMETER=${1}
# Iptv plugin listens this port
PORT=${2}
# Stream configuration
URL="http://stream.address"
IMAGE="image.jpg"
TITLE="webcam"
# Stream temporary files
FIFO=/tmp/webcam.fifo
LOG=/dev/null
{
rm -f "${FIFO}"
mkfifo "${FIFO}"
mplayer -dumpstream "${URL}" \
-quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \
-dumpfile "${FIFO}" &
# Time to connect and fill pipe
sleep 3
# Build stream from audiodump with cycle image as video
# PID 0x100/256 = Video 0x101/257 = Audio
ffmpeg -v -1 \
-i "${FIFO}" -r 0.5 -loop_input -i '${IMAGE}' \
-title "${TITLE}" \
-f mpegts -intra -r 24 -vcodec mpeg2video -b 500k -s 352x288 \
-acodec mp2 -ac 2 -ab 96k -ar 48000 \
- | nc -u 127.0.0.1 ${PORT}
rm -f "${FIFO}"
} > ${LOG} 2>&1

View File

@@ -1,80 +0,0 @@
diff -Nru vdr-1.4.7-vanilla/config.h vdr-1.4.7-closefilter/config.h
--- vdr-1.4.7-vanilla/config.h 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/config.h 2007-10-27 01:39:43.000000000 +0300
@@ -29,6 +29,8 @@
#define APIVERSION "1.4.5"
#define APIVERSNUM 10405 // Version * 10000 + Major * 100 + Minor
+#define CLOSEFILTERPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.4.7-vanilla/device.c vdr-1.4.7-closefilter/device.c
--- vdr-1.4.7-vanilla/device.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/device.c 2007-10-27 01:37:34.000000000 +0300
@@ -509,6 +509,11 @@
return -1;
}
+void cDevice::CloseFilter(int Handle)
+{
+ close(Handle);
+}
+
void cDevice::AttachFilter(cFilter *Filter)
{
if (sectionHandler)
diff -Nru vdr-1.4.7-vanilla/device.h vdr-1.4.7-closefilter/device.h
--- vdr-1.4.7-vanilla/device.h 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/device.h 2007-10-27 01:37:19.000000000 +0300
@@ -302,6 +302,11 @@
///< Opens a file handle for the given filter data.
///< A derived device that provides section data must
///< implement this function.
+ virtual void CloseFilter(int Handle);
+ ///< Closes a file handle that has previously been opened
+ ///< by OpenFilter(). If this is as simple as calling close(Handle),
+ ///< a derived class need not implement this function, because this
+ ///< is done by the default implementation.
void AttachFilter(cFilter *Filter);
///< Attaches the given filter to this device.
void Detach(cFilter *Filter);
diff -Nru vdr-1.4.7-vanilla/dvbdevice.c vdr-1.4.7-closefilter/dvbdevice.c
--- vdr-1.4.7-vanilla/dvbdevice.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/dvbdevice.c 2007-10-27 01:37:50.000000000 +0300
@@ -726,6 +726,11 @@
return -1;
}
+void cDvbDevice::CloseFilter(int Handle)
+{
+ close(Handle);
+}
+
void cDvbDevice::TurnOffLiveMode(bool LiveView)
{
if (LiveView) {
diff -Nru vdr-1.4.7-vanilla/dvbdevice.h vdr-1.4.7-closefilter/dvbdevice.h
--- vdr-1.4.7-vanilla/dvbdevice.h 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/dvbdevice.h 2007-10-27 01:37:59.000000000 +0300
@@ -79,6 +79,7 @@
protected:
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
+ virtual void CloseFilter(int Handle);
// Image Grab facilities
diff -Nru vdr-1.4.7-vanilla/sections.c vdr-1.4.7-closefilter/sections.c
--- vdr-1.4.7-vanilla/sections.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-closefilter/sections.c 2007-10-27 01:34:06.000000000 +0300
@@ -105,7 +105,7 @@
for (fh = filterHandles.First(); fh; fh = filterHandles.Next(fh)) {
if (fh->filterData.Is(FilterData->pid, FilterData->tid, FilterData->mask)) {
if (--fh->used <= 0) {
- close(fh->handle);
+ device->CloseFilter(fh->handle);
filterHandles.Del(fh);
break;
}

View File

@@ -1,299 +0,0 @@
diff -Nru vdr-1.4.7-vanilla/channels.c vdr-1.4.7-pluginparam/channels.c
--- vdr-1.4.7-vanilla/channels.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/channels.c 2007-10-27 01:09:05.000000000 +0300
@@ -166,6 +166,7 @@
shortName = strdup("");
provider = strdup("");
portalName = strdup("");
+ pluginParam = strdup("");
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
inversion = INVERSION_AUTO;
bandwidth = BANDWIDTH_AUTO;
@@ -187,6 +188,7 @@
shortName = NULL;
provider = NULL;
portalName = NULL;
+ pluginParam = NULL;
schedule = NULL;
linkChannels = NULL;
refChannel = NULL;
@@ -215,6 +217,7 @@
free(shortName);
free(provider);
free(portalName);
+ free(pluginParam);
}
cChannel& cChannel::operator= (const cChannel &Channel)
@@ -223,6 +226,7 @@
shortName = strcpyrealloc(shortName, Channel.shortName);
provider = strcpyrealloc(provider, Channel.provider);
portalName = strcpyrealloc(portalName, Channel.portalName);
+ pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
return *this;
}
@@ -280,9 +284,26 @@
transmission = Channel->transmission;
guard = Channel->guard;
hierarchy = Channel->hierarchy;
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
}
}
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+ if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ source = Source;
+ frequency = Frequency;
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ schedule = NULL;
+ }
+ return true;
+}
+
bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH)
{
// Workarounds for broadcaster stupidity:
@@ -407,6 +428,18 @@
}
}
+void cChannel::SetPluginParam(const char *PluginParam)
+{
+ if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
+ if (Number()) {
+ dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ }
+}
+
#define STRDIFF 0x01
#define VALDIFF 0x02
@@ -579,7 +612,7 @@
if (isdigit(type))
type = 'S';
#define ST(s) if (strchr(s, type))
- char buffer[64];
+ char buffer[256];
char *q = buffer;
*q = 0;
ST(" S ") q += sprintf(q, "%c", polarization);
@@ -591,6 +624,7 @@
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST("P ") snprintf(buffer, sizeof(buffer), "%s", pluginParam);
return buffer;
}
@@ -612,7 +646,7 @@
bool cChannel::StringToParameters(const char *s)
{
- while (s && *s) {
+ while (s && *s && !IsPlug()) {
switch (toupper(*s)) {
case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
@@ -722,7 +756,7 @@
dpids[0] = 0;
ok = false;
if (parambuf && sourcebuf && vpidbuf && apidbuf) {
- ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
+ ok = ((source = cSource::FromString(sourcebuf)) >= 0) && StringToParameters(parambuf);
char *p = strchr(vpidbuf, '+');
if (p)
@@ -813,6 +847,7 @@
shortName = strcpyrealloc(shortName, p);
}
name = strcpyrealloc(name, namebuf);
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
free(parambuf);
free(sourcebuf);
diff -Nru vdr-1.4.7-vanilla/channels.h vdr-1.4.7-pluginparam/channels.h
--- vdr-1.4.7-vanilla/channels.h 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/channels.h 2007-10-27 01:12:37.000000000 +0300
@@ -114,6 +114,7 @@
char *shortName;
char *provider;
char *portalName;
+ char *pluginParam;
int __BeginData__;
int frequency; // MHz
int source;
@@ -165,6 +166,7 @@
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
+ const char *PluginParam(void) const { return pluginParam; }
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
@@ -198,6 +200,7 @@
int Hierarchy(void) const { return hierarchy; }
const cLinkChannels* LinkChannels(void) const { return linkChannels; }
const cChannel *RefChannel(void) const { return refChannel; }
+ bool IsPlug(void) const { return cSource::IsPlug(source); }
bool IsCable(void) const { return cSource::IsCable(source); }
bool IsSat(void) const { return cSource::IsSat(source); }
bool IsTerr(void) const { return cSource::IsTerr(source); }
@@ -205,12 +208,14 @@
bool HasTimer(void) const;
int Modification(int Mask = CHANNELMOD_ALL);
void CopyTransponderData(const cChannel *Channel);
+ bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH);
bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
void SetName(const char *Name, const char *ShortName, const char *Provider);
void SetPortalName(const char *PortalName);
+ void SetPluginParam(const char *PluginParam);
void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int Tpid);
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
diff -Nru vdr-1.4.7-vanilla/config.h vdr-1.4.7-pluginparam/config.h
--- vdr-1.4.7-vanilla/config.h 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/config.h 2007-10-27 01:14:39.000000000 +0300
@@ -29,6 +29,8 @@
#define APIVERSION "1.4.5"
#define APIVERSNUM 10405 // Version * 10000 + Major * 100 + Minor
+#define PLUGINPARAMPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.4.7-vanilla/i18n.c vdr-1.4.7-pluginparam/i18n.c
--- vdr-1.4.7-vanilla/i18n.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/i18n.c 2007-10-27 01:11:38.000000000 +0300
@@ -6126,6 +6126,28 @@
"Ingen titel",
"Bez n<>zvu",
},
+ { "Parameters",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "Parametrit",
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ "",// TODO
+ },
{ NULL }
};
diff -Nru vdr-1.4.7-vanilla/menu.c vdr-1.4.7-pluginparam/menu.c
--- vdr-1.4.7-vanilla/menu.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/menu.c 2007-10-27 01:09:05.000000000 +0300
@@ -216,6 +216,7 @@
cChannel *channel;
cChannel data;
char name[256];
+ char pluginParam[256];
void Setup(void);
public:
cMenuEditChannel(cChannel *Channel, bool New = false);
@@ -248,6 +249,7 @@
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
+ strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name), tr(FileNameChars)));
Add(new cMenuEditSrcItem( tr("Source"), &data.source));
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
@@ -276,6 +278,7 @@
ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none")));
+ ST("P ") Add(new cMenuEditStrItem( tr("Parameters"), pluginParam, sizeof(pluginParam), tr(FileNameChars)));
SetCurrent(Get(current));
Display();
@@ -290,6 +293,7 @@
if (Key == kOk) {
if (Channels.HasUniqueChannelID(&data, channel)) {
data.name = strcpyrealloc(data.name, name);
+ data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.4.7-vanilla/sources.c vdr-1.4.7-pluginparam/sources.c
--- vdr-1.4.7-vanilla/sources.c 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.c 2007-10-27 01:09:20.000000000 +0300
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
switch (Code & st_Mask) {
+ case stPlug: *q++ = 'P'; break;
case stCable: *q++ = 'C'; break;
case stSat: *q++ = 'S';
{
@@ -56,6 +57,7 @@
{
int type = stNone;
switch (toupper(*s)) {
+ case 'P': type = stPlug; break;
case 'C': type = stCable; break;
case 'S': type = stSat; break;
case 'T': type = stTerr; break;
diff -Nru vdr-1.4.7-vanilla/sources.conf vdr-1.4.7-pluginparam/sources.conf
--- vdr-1.4.7-vanilla/sources.conf 2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.conf 2007-10-27 01:09:20.000000000 +0300
@@ -188,3 +188,7 @@
# Terrestrial
T Terrestrial
+
+# Plugin
+
+P Plugin
diff -Nru vdr-1.4.7-vanilla/sources.h vdr-1.4.7-pluginparam/sources.h
--- vdr-1.4.7-vanilla/sources.h 2007-10-27 01:08:40.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.h 2007-10-27 01:09:20.000000000 +0300
@@ -16,10 +16,11 @@
public:
enum eSourceType {
stNone = 0x0000,
+ stPlug = 0x2000,
stCable = 0x4000,
stSat = 0x8000,
stTerr = 0xC000,
- st_Mask = 0xC000,
+ st_Mask = 0xE000,
st_Neg = 0x0800,
st_Pos = 0x07FF,
};
@@ -35,6 +36,7 @@
static cString ToString(int Code);
static int FromString(const char *s);
static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
+ static bool IsPlug(int Code) { return (Code & st_Mask) == stPlug; }
static bool IsCable(int Code) { return (Code & st_Mask) == stCable; }
static bool IsSat(int Code) { return (Code & st_Mask) == stSat; }
static bool IsTerr(int Code) { return (Code & st_Mask) == stTerr; }

View File

@@ -1,287 +0,0 @@
diff -Nru vdr-1.5.13-vanilla/channels.c vdr-1.5.13-pluginparam/channels.c
--- vdr-1.5.13-vanilla/channels.c 2007-10-12 17:40:53.000000000 +0300
+++ vdr-1.5.13-pluginparam/channels.c 2008-01-29 22:48:22.000000000 +0200
@@ -166,6 +166,7 @@
shortName = strdup("");
provider = strdup("");
portalName = strdup("");
+ pluginParam = strdup("");
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
inversion = INVERSION_AUTO;
bandwidth = BANDWIDTH_AUTO;
@@ -187,6 +188,7 @@
shortName = NULL;
provider = NULL;
portalName = NULL;
+ pluginParam = NULL;
schedule = NULL;
linkChannels = NULL;
refChannel = NULL;
@@ -215,6 +217,7 @@
free(shortName);
free(provider);
free(portalName);
+ free(pluginParam);
}
cChannel& cChannel::operator= (const cChannel &Channel)
@@ -223,6 +226,7 @@
shortName = strcpyrealloc(shortName, Channel.shortName);
provider = strcpyrealloc(provider, Channel.provider);
portalName = strcpyrealloc(portalName, Channel.portalName);
+ pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
return *this;
}
@@ -280,9 +284,26 @@
transmission = Channel->transmission;
guard = Channel->guard;
hierarchy = Channel->hierarchy;
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
}
}
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+ if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ source = Source;
+ frequency = Frequency;
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ schedule = NULL;
+ }
+ return true;
+}
+
bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH)
{
// Workarounds for broadcaster stupidity:
@@ -407,6 +428,18 @@
}
}
+void cChannel::SetPluginParam(const char *PluginParam)
+{
+ if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
+ if (Number()) {
+ dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ }
+}
+
#define STRDIFF 0x01
#define VALDIFF 0x02
@@ -593,7 +626,7 @@
if (isdigit(type))
type = 'S';
#define ST(s) if (strchr(s, type))
- char buffer[64];
+ char buffer[256];
char *q = buffer;
*q = 0;
ST(" S ") q += sprintf(q, "%c", polarization);
@@ -605,6 +638,7 @@
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST("P ") snprintf(buffer, sizeof(buffer), "%s", pluginParam);
return buffer;
}
@@ -626,7 +660,7 @@
bool cChannel::StringToParameters(const char *s)
{
- while (s && *s) {
+ while (s && *s && !IsPlug()) {
switch (toupper(*s)) {
case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
@@ -736,7 +770,7 @@
dpids[0] = 0;
ok = false;
if (parambuf && sourcebuf && vpidbuf && apidbuf) {
- ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
+ ok = ((source = cSource::FromString(sourcebuf)) >= 0) && StringToParameters(parambuf);
char *p = strchr(vpidbuf, '+');
if (p)
@@ -827,6 +861,7 @@
shortName = strcpyrealloc(shortName, p);
}
name = strcpyrealloc(name, namebuf);
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
free(parambuf);
free(sourcebuf);
diff -Nru vdr-1.5.13-vanilla/channels.h vdr-1.5.13-pluginparam/channels.h
--- vdr-1.5.13-vanilla/channels.h 2007-09-02 13:23:11.000000000 +0300
+++ vdr-1.5.13-pluginparam/channels.h 2008-01-29 22:47:43.000000000 +0200
@@ -114,6 +114,7 @@
char *shortName;
char *provider;
char *portalName;
+ char *pluginParam;
int __BeginData__;
int frequency; // MHz
int source;
@@ -165,6 +166,7 @@
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
+ const char *PluginParam(void) const { return pluginParam; }
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
@@ -199,6 +201,7 @@
int Hierarchy(void) const { return hierarchy; }
const cLinkChannels* LinkChannels(void) const { return linkChannels; }
const cChannel *RefChannel(void) const { return refChannel; }
+ bool IsPlug(void) const { return cSource::IsPlug(source); }
bool IsCable(void) const { return cSource::IsCable(source); }
bool IsSat(void) const { return cSource::IsSat(source); }
bool IsTerr(void) const { return cSource::IsTerr(source); }
@@ -206,12 +209,14 @@
bool HasTimer(void) const;
int Modification(int Mask = CHANNELMOD_ALL);
void CopyTransponderData(const cChannel *Channel);
+ bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH);
bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
void SetName(const char *Name, const char *ShortName, const char *Provider);
void SetPortalName(const char *PortalName);
+ void SetPluginParam(const char *PluginParam);
void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
diff -Nru vdr-1.5.13-vanilla/config.h vdr-1.5.13-pluginparam/config.h
--- vdr-1.5.13-vanilla/config.h 2007-11-25 15:45:48.000000000 +0200
+++ vdr-1.5.13-pluginparam/config.h 2008-01-29 22:47:43.000000000 +0200
@@ -30,6 +30,8 @@
#define APIVERSION "1.5.13"
#define APIVERSNUM 10513 // Version * 10000 + Major * 100 + Minor
+#define PLUGINPARAMPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.5.13-vanilla/menu.c vdr-1.5.13-pluginparam/menu.c
--- vdr-1.5.13-vanilla/menu.c 2008-01-13 15:59:33.000000000 +0200
+++ vdr-1.5.13-pluginparam/menu.c 2008-01-29 22:47:43.000000000 +0200
@@ -219,6 +219,7 @@
cChannel *channel;
cChannel data;
char name[256];
+ char pluginParam[256];
void Setup(void);
public:
cMenuEditChannel(cChannel *Channel, bool New = false);
@@ -251,6 +252,7 @@
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
+ strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name)));
Add(new cMenuEditSrcItem( tr("Source"), &data.source));
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
@@ -281,6 +283,7 @@
ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none")));
+ ST("P ") Add(new cMenuEditStrItem( tr("Parameters"), pluginParam, sizeof(pluginParam), tr(FileNameChars)));
SetCurrent(Get(current));
Display();
@@ -295,6 +298,7 @@
if (Key == kOk) {
if (Channels.HasUniqueChannelID(&data, channel)) {
data.name = strcpyrealloc(data.name, name);
+ data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.5.13-vanilla/po/fi_FI.po vdr-1.5.13-pluginparam/po/fi_FI.po
--- vdr-1.5.13-vanilla/po/fi_FI.po 2008-01-13 17:06:32.000000000 +0200
+++ vdr-1.5.13-pluginparam/po/fi_FI.po 2008-01-29 22:47:43.000000000 +0200
@@ -1001,3 +1001,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
msgstr "VDR sammuu %s minuutin kuluttua"
+
+msgid "Parameters"
+msgstr "Parametrit"
diff -Nru vdr-1.5.13-vanilla/po/fr_FR.po vdr-1.5.13-pluginparam/po/fr_FR.po
--- vdr-1.5.13-vanilla/po/fr_FR.po 2008-01-13 17:06:32.000000000 +0200
+++ vdr-1.5.13-pluginparam/po/fr_FR.po 2008-01-29 22:47:43.000000000 +0200
@@ -1004,3 +1004,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
msgstr "VDR s'arr<72>tera dans %s minutes"
+
+msgid "Parameters"
+msgstr "Param<61>tres"
diff -Nru vdr-1.5.13-vanilla/sources.c vdr-1.5.13-pluginparam/sources.c
--- vdr-1.5.13-vanilla/sources.c 2004-12-26 13:58:52.000000000 +0200
+++ vdr-1.5.13-pluginparam/sources.c 2008-01-29 22:47:43.000000000 +0200
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
switch (Code & st_Mask) {
+ case stPlug: *q++ = 'P'; break;
case stCable: *q++ = 'C'; break;
case stSat: *q++ = 'S';
{
@@ -56,6 +57,7 @@
{
int type = stNone;
switch (toupper(*s)) {
+ case 'P': type = stPlug; break;
case 'C': type = stCable; break;
case 'S': type = stSat; break;
case 'T': type = stTerr; break;
diff -Nru vdr-1.5.13-vanilla/sources.conf vdr-1.5.13-pluginparam/sources.conf
--- vdr-1.5.13-vanilla/sources.conf 2007-02-17 18:15:13.000000000 +0200
+++ vdr-1.5.13-pluginparam/sources.conf 2008-01-29 22:47:43.000000000 +0200
@@ -188,3 +188,7 @@
# Terrestrial
T Terrestrial
+
+# Plugin
+
+P Plugin
diff -Nru vdr-1.5.13-vanilla/sources.h vdr-1.5.13-pluginparam/sources.h
--- vdr-1.5.13-vanilla/sources.h 2005-05-14 12:30:41.000000000 +0300
+++ vdr-1.5.13-pluginparam/sources.h 2008-01-29 22:47:43.000000000 +0200
@@ -16,10 +16,11 @@
public:
enum eSourceType {
stNone = 0x0000,
+ stPlug = 0x2000,
stCable = 0x4000,
stSat = 0x8000,
stTerr = 0xC000,
- st_Mask = 0xC000,
+ st_Mask = 0xE000,
st_Neg = 0x0800,
st_Pos = 0x07FF,
};
@@ -35,6 +36,7 @@
static cString ToString(int Code);
static int FromString(const char *s);
static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
+ static bool IsPlug(int Code) { return (Code & st_Mask) == stPlug; }
static bool IsCable(int Code) { return (Code & st_Mask) == stCable; }
static bool IsSat(int Code) { return (Code & st_Mask) == stSat; }
static bool IsTerr(int Code) { return (Code & st_Mask) == stTerr; }

View File

@@ -1,6 +1,6 @@
diff -Nru vdr-1.5.15-vanilla/channels.c vdr-1.5.15-pluginparam/channels.c
--- vdr-1.5.15-vanilla/channels.c 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/channels.c 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/channels.c vdr-1.6.0-pluginparam/channels.c
--- vdr-1.6.0-vanilla/channels.c 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/channels.c 2008-03-27 22:06:47.000000000 +0200
@@ -166,6 +166,7 @@
shortName = strdup("");
provider = strdup("");
@@ -122,9 +122,9 @@ diff -Nru vdr-1.5.15-vanilla/channels.c vdr-1.5.15-pluginparam/channels.c
free(parambuf);
free(sourcebuf);
diff -Nru vdr-1.5.15-vanilla/channels.h vdr-1.5.15-pluginparam/channels.h
--- vdr-1.5.15-vanilla/channels.h 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/channels.h 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/channels.h vdr-1.6.0-pluginparam/channels.h
--- vdr-1.6.0-vanilla/channels.h 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/channels.h 2008-03-27 22:06:47.000000000 +0200
@@ -114,6 +114,7 @@
char *shortName;
char *provider;
@@ -164,21 +164,21 @@ diff -Nru vdr-1.5.15-vanilla/channels.h vdr-1.5.15-pluginparam/channels.h
void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
diff -Nru vdr-1.5.15-vanilla/config.h vdr-1.5.15-pluginparam/config.h
--- vdr-1.5.15-vanilla/config.h 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/config.h 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/config.h vdr-1.6.0-pluginparam/config.h
--- vdr-1.6.0-vanilla/config.h 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/config.h 2008-03-27 22:06:47.000000000 +0200
@@ -30,6 +30,8 @@
#define APIVERSION "1.5.15"
#define APIVERSNUM 10515 // Version * 10000 + Major * 100 + Minor
#define APIVERSION "1.6.0"
#define APIVERSNUM 10600 // Version * 10000 + Major * 100 + Minor
+#define PLUGINPARAMPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.5.15-vanilla/menu.c vdr-1.5.15-pluginparam/menu.c
--- vdr-1.5.15-vanilla/menu.c 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/menu.c 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/menu.c vdr-1.6.0-pluginparam/menu.c
--- vdr-1.6.0-vanilla/menu.c 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/menu.c 2008-03-27 22:06:47.000000000 +0200
@@ -253,6 +253,7 @@
cChannel *channel;
cChannel data;
@@ -211,9 +211,9 @@ diff -Nru vdr-1.5.15-vanilla/menu.c vdr-1.5.15-pluginparam/menu.c
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.5.15-vanilla/po/fi_FI.po vdr-1.5.15-pluginparam/po/fi_FI.po
--- vdr-1.5.15-vanilla/po/fi_FI.po 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/po/fi_FI.po 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/po/fi_FI.po vdr-1.6.0-pluginparam/po/fi_FI.po
--- vdr-1.6.0-vanilla/po/fi_FI.po 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/po/fi_FI.po 2008-03-27 22:06:47.000000000 +0200
@@ -1001,3 +1001,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
@@ -221,9 +221,9 @@ diff -Nru vdr-1.5.15-vanilla/po/fi_FI.po vdr-1.5.15-pluginparam/po/fi_FI.po
+
+msgid "Parameters"
+msgstr "Parametrit"
diff -Nru vdr-1.5.15-vanilla/po/fr_FR.po vdr-1.5.15-pluginparam/po/fr_FR.po
--- vdr-1.5.15-vanilla/po/fr_FR.po 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/po/fr_FR.po 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/po/fr_FR.po vdr-1.6.0-pluginparam/po/fr_FR.po
--- vdr-1.6.0-vanilla/po/fr_FR.po 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/po/fr_FR.po 2008-03-27 22:06:47.000000000 +0200
@@ -1004,3 +1004,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
@@ -231,9 +231,9 @@ diff -Nru vdr-1.5.15-vanilla/po/fr_FR.po vdr-1.5.15-pluginparam/po/fr_FR.po
+
+msgid "Parameters"
+msgstr "Paramètres"
diff -Nru vdr-1.5.15-vanilla/sources.c vdr-1.5.15-pluginparam/sources.c
--- vdr-1.5.15-vanilla/sources.c 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/sources.c 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/sources.c vdr-1.6.0-pluginparam/sources.c
--- vdr-1.6.0-vanilla/sources.c 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/sources.c 2008-03-27 22:06:47.000000000 +0200
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
@@ -250,9 +250,9 @@ diff -Nru vdr-1.5.15-vanilla/sources.c vdr-1.5.15-pluginparam/sources.c
case 'C': type = stCable; break;
case 'S': type = stSat; break;
case 'T': type = stTerr; break;
diff -Nru vdr-1.5.15-vanilla/sources.conf vdr-1.5.15-pluginparam/sources.conf
--- vdr-1.5.15-vanilla/sources.conf 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/sources.conf 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/sources.conf vdr-1.6.0-pluginparam/sources.conf
--- vdr-1.6.0-vanilla/sources.conf 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/sources.conf 2008-03-27 22:06:47.000000000 +0200
@@ -188,3 +188,7 @@
# Terrestrial
@@ -261,9 +261,9 @@ diff -Nru vdr-1.5.15-vanilla/sources.conf vdr-1.5.15-pluginparam/sources.conf
+# Plugin
+
+P Plugin
diff -Nru vdr-1.5.15-vanilla/sources.h vdr-1.5.15-pluginparam/sources.h
--- vdr-1.5.15-vanilla/sources.h 2008-02-17 17:21:42.000000000 +0200
+++ vdr-1.5.15-pluginparam/sources.h 2008-02-17 19:11:29.000000000 +0200
diff -Nru vdr-1.6.0-vanilla/sources.h vdr-1.6.0-pluginparam/sources.h
--- vdr-1.6.0-vanilla/sources.h 2008-03-27 21:43:25.000000000 +0200
+++ vdr-1.6.0-pluginparam/sources.h 2008-03-27 22:06:47.000000000 +0200
@@ -16,10 +16,11 @@
public:
enum eSourceType {

View File

@@ -1,6 +1,6 @@
diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
--- vdr-1.5.14-vanilla/channels.c 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/channels.c 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/channels.c vdr-1.7.0-pluginparam/channels.c
--- vdr-1.7.0-vanilla/channels.c 2008-04-12 16:49:12.000000000 +0300
+++ vdr-1.7.0-pluginparam/channels.c 2008-04-13 18:58:41.000000000 +0300
@@ -216,6 +216,7 @@
shortName = strdup("");
provider = strdup("");
@@ -33,7 +33,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
return *this;
}
@@ -338,9 +342,27 @@
@@ -338,9 +342,26 @@
alpha = Channel->alpha;
priority = Channel->priority;
rollOff = Channel->rollOff;
@@ -44,16 +44,15 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+ if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+ cString OldParameters = ParametersToString();
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ source = Source;
+ frequency = Frequency;
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ schedule = NULL;
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *OldParameters, frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ }
+ return true;
+}
@@ -61,7 +60,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff)
{
// Workarounds for broadcaster stupidity:
@@ -472,6 +494,18 @@
@@ -472,6 +493,18 @@
}
}
@@ -80,7 +79,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
#define STRDIFF 0x01
#define VALDIFF 0x02
@@ -658,7 +692,7 @@
@@ -665,7 +698,7 @@
if (isdigit(type))
type = 'S';
#define ST(s) if (strchr(s, type))
@@ -89,7 +88,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
char *q = buffer;
*q = 0;
ST(" S ") q += sprintf(q, "%c", polarization);
@@ -674,6 +708,7 @@
@@ -681,6 +714,7 @@
ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
@@ -97,7 +96,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
return buffer;
}
@@ -695,7 +730,7 @@
@@ -702,7 +736,7 @@
bool cChannel::StringToParameters(const char *s)
{
@@ -106,7 +105,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
switch (toupper(*s)) {
case 'A': s = ParseParameter(s, alpha, AlphaValues); break;
case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
@@ -810,7 +845,7 @@
@@ -817,7 +851,7 @@
dpids[0] = 0;
ok = false;
if (parambuf && sourcebuf && vpidbuf && apidbuf) {
@@ -115,7 +114,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
char *p = strchr(vpidbuf, '+');
if (p)
@@ -901,6 +936,7 @@
@@ -908,6 +942,7 @@
shortName = strcpyrealloc(shortName, p);
}
name = strcpyrealloc(name, namebuf);
@@ -123,9 +122,9 @@ diff -Nru vdr-1.5.14-vanilla/channels.c vdr-1.5.14-pluginparam/channels.c
free(parambuf);
free(sourcebuf);
diff -Nru vdr-1.5.14-vanilla/channels.h vdr-1.5.14-pluginparam/channels.h
--- vdr-1.5.14-vanilla/channels.h 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/channels.h 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/channels.h vdr-1.7.0-pluginparam/channels.h
--- vdr-1.7.0-vanilla/channels.h 2008-04-12 16:46:50.000000000 +0300
+++ vdr-1.7.0-pluginparam/channels.h 2008-04-13 18:57:08.000000000 +0300
@@ -118,6 +118,7 @@
char *shortName;
char *provider;
@@ -134,7 +133,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.h vdr-1.5.14-pluginparam/channels.h
int __BeginData__;
int frequency; // MHz
int source;
@@ -173,6 +174,7 @@
@@ -174,6 +175,7 @@
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
@@ -142,7 +141,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.h vdr-1.5.14-pluginparam/channels.h
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
@@ -211,6 +213,7 @@
@@ -212,6 +214,7 @@
int RollOff(void) const { return rollOff; }
const cLinkChannels* LinkChannels(void) const { return linkChannels; }
const cChannel *RefChannel(void) const { return refChannel; }
@@ -150,7 +149,7 @@ diff -Nru vdr-1.5.14-vanilla/channels.h vdr-1.5.14-pluginparam/channels.h
bool IsCable(void) const { return cSource::IsCable(source); }
bool IsSat(void) const { return cSource::IsSat(source); }
bool IsTerr(void) const { return cSource::IsTerr(source); }
@@ -218,12 +221,14 @@
@@ -219,12 +222,14 @@
bool HasTimer(void) const;
int Modification(int Mask = CHANNELMOD_ALL);
void CopyTransponderData(const cChannel *Channel);
@@ -165,22 +164,22 @@ diff -Nru vdr-1.5.14-vanilla/channels.h vdr-1.5.14-pluginparam/channels.h
void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
diff -Nru vdr-1.5.14-vanilla/config.h vdr-1.5.14-pluginparam/config.h
--- vdr-1.5.14-vanilla/config.h 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/config.h 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/config.h vdr-1.7.0-pluginparam/config.h
--- vdr-1.7.0-vanilla/config.h 2008-04-12 16:02:10.000000000 +0300
+++ vdr-1.7.0-pluginparam/config.h 2008-04-13 18:54:25.000000000 +0300
@@ -30,6 +30,8 @@
#define APIVERSION "1.5.14"
#define APIVERSNUM 10514 // Version * 10000 + Major * 100 + Minor
#define APIVERSION "1.7.0"
#define APIVERSNUM 10700 // Version * 10000 + Major * 100 + Minor
+#define PLUGINPARAMPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.5.14-vanilla/menu.c vdr-1.5.14-pluginparam/menu.c
--- vdr-1.5.14-vanilla/menu.c 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/menu.c 2008-01-28 23:32:58.000000000 +0200
@@ -155,6 +155,7 @@
diff -Nru vdr-1.7.0-vanilla/menu.c vdr-1.7.0-pluginparam/menu.c
--- vdr-1.7.0-vanilla/menu.c 2008-04-12 14:37:17.000000000 +0300
+++ vdr-1.7.0-pluginparam/menu.c 2008-04-13 18:56:07.000000000 +0300
@@ -189,6 +189,7 @@
cChannel *channel;
cChannel data;
char name[256];
@@ -188,7 +187,7 @@ diff -Nru vdr-1.5.14-vanilla/menu.c vdr-1.5.14-pluginparam/menu.c
void Setup(void);
public:
cMenuEditChannel(cChannel *Channel, bool New = false);
@@ -187,6 +188,7 @@
@@ -221,6 +222,7 @@
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
@@ -196,7 +195,7 @@ diff -Nru vdr-1.5.14-vanilla/menu.c vdr-1.5.14-pluginparam/menu.c
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name)));
Add(new cMenuEditSrcItem( tr("Source"), &data.source));
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
@@ -221,6 +223,7 @@
@@ -255,6 +257,7 @@
ST(" T") Add(new cMenuEditMapItem( tr("Alpha"), &data.alpha, AlphaValues));
ST(" T") Add(new cMenuEditMapItem( tr("Priority"), &data.priority, PriorityValues));
ST(" S ") Add(new cMenuEditMapItem( tr("Rolloff"), &data.rollOff, RollOffValues));
@@ -204,7 +203,7 @@ diff -Nru vdr-1.5.14-vanilla/menu.c vdr-1.5.14-pluginparam/menu.c
SetCurrent(Get(current));
Display();
@@ -235,6 +238,7 @@
@@ -269,6 +272,7 @@
if (Key == kOk) {
if (Channels.HasUniqueChannelID(&data, channel)) {
data.name = strcpyrealloc(data.name, name);
@@ -212,9 +211,9 @@ diff -Nru vdr-1.5.14-vanilla/menu.c vdr-1.5.14-pluginparam/menu.c
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.5.14-vanilla/po/fi_FI.po vdr-1.5.14-pluginparam/po/fi_FI.po
--- vdr-1.5.14-vanilla/po/fi_FI.po 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/po/fi_FI.po 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/po/fi_FI.po vdr-1.7.0-pluginparam/po/fi_FI.po
--- vdr-1.7.0-vanilla/po/fi_FI.po 2008-04-13 17:16:58.000000000 +0300
+++ vdr-1.7.0-pluginparam/po/fi_FI.po 2008-04-13 18:54:25.000000000 +0300
@@ -1019,3 +1019,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
@@ -222,9 +221,9 @@ diff -Nru vdr-1.5.14-vanilla/po/fi_FI.po vdr-1.5.14-pluginparam/po/fi_FI.po
+
+msgid "Parameters"
+msgstr "Parametrit"
diff -Nru vdr-1.5.14-vanilla/po/fr_FR.po vdr-1.5.14-pluginparam/po/fr_FR.po
--- vdr-1.5.14-vanilla/po/fr_FR.po 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/po/fr_FR.po 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/po/fr_FR.po vdr-1.7.0-pluginparam/po/fr_FR.po
--- vdr-1.7.0-vanilla/po/fr_FR.po 2008-04-13 17:16:58.000000000 +0300
+++ vdr-1.7.0-pluginparam/po/fr_FR.po 2008-04-13 18:54:25.000000000 +0300
@@ -1022,3 +1022,6 @@
#, c-format
msgid "VDR will shut down in %s minutes"
@@ -232,9 +231,9 @@ diff -Nru vdr-1.5.14-vanilla/po/fr_FR.po vdr-1.5.14-pluginparam/po/fr_FR.po
+
+msgid "Parameters"
+msgstr "Paramètres"
diff -Nru vdr-1.5.14-vanilla/sources.c vdr-1.5.14-pluginparam/sources.c
--- vdr-1.5.14-vanilla/sources.c 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/sources.c 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/sources.c vdr-1.7.0-pluginparam/sources.c
--- vdr-1.7.0-vanilla/sources.c 2008-02-10 16:07:26.000000000 +0200
+++ vdr-1.7.0-pluginparam/sources.c 2008-04-13 18:54:25.000000000 +0300
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
@@ -251,9 +250,9 @@ diff -Nru vdr-1.5.14-vanilla/sources.c vdr-1.5.14-pluginparam/sources.c
case 'C': type = stCable; break;
case 'S': type = stSat; break;
case 'T': type = stTerr; break;
diff -Nru vdr-1.5.14-vanilla/sources.conf vdr-1.5.14-pluginparam/sources.conf
--- vdr-1.5.14-vanilla/sources.conf 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/sources.conf 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/sources.conf vdr-1.7.0-pluginparam/sources.conf
--- vdr-1.7.0-vanilla/sources.conf 2007-02-17 18:15:13.000000000 +0200
+++ vdr-1.7.0-pluginparam/sources.conf 2008-04-13 18:54:25.000000000 +0300
@@ -188,3 +188,7 @@
# Terrestrial
@@ -262,9 +261,9 @@ diff -Nru vdr-1.5.14-vanilla/sources.conf vdr-1.5.14-pluginparam/sources.conf
+# Plugin
+
+P Plugin
diff -Nru vdr-1.5.14-vanilla/sources.h vdr-1.5.14-pluginparam/sources.h
--- vdr-1.5.14-vanilla/sources.h 2008-01-27 23:04:26.000000000 +0200
+++ vdr-1.5.14-pluginparam/sources.h 2008-01-28 23:32:58.000000000 +0200
diff -Nru vdr-1.7.0-vanilla/sources.h vdr-1.7.0-pluginparam/sources.h
--- vdr-1.7.0-vanilla/sources.h 2005-05-14 12:30:41.000000000 +0300
+++ vdr-1.7.0-pluginparam/sources.h 2008-04-13 18:54:25.000000000 +0300
@@ -16,10 +16,11 @@
public:
enum eSourceType {

View File

@@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: pidscanner.c,v 1.6 2008/02/02 21:06:14 rahrenbe Exp $
* $Id: pidscanner.c,v 1.7 2008/04/02 22:55:04 rahrenbe Exp $
*/
#include "common.h"
#include "pidscanner.h"
#define PIDSCANNER_TIMEOUT_IN_MS 15000 /* 15s timeout for detection */
#define PIDSCANNER_APID_COUNT 5 /* minimum count of audio pid samples for pid detection */
#define PIDSCANNER_APID_COUNT 10 /* minimum count of audio pid samples for pid detection */
#define PIDSCANNER_VPID_COUNT 10 /* minimum count of video pid samples for pid detection */
#define PIDSCANNER_PID_DELTA_COUNT 50 /* minimum count of pid samples for audio/video only pid detection */
@@ -92,29 +92,29 @@ void cPidScanner::Process(const uint8_t* buf)
// Stream ID
if ((sid >= 0xC0) && (sid <= 0xDF)) {
if (pid < Apid) {
debug("Found lower Apid: 0x%X instead of 0x%X\n", pid, Apid);
debug("cPidScanner::Process: Found lower Apid: 0x%X instead of 0x%X\n", pid, Apid);
Apid = pid;
numApids = 1;
}
else if (pid == Apid) {
++numApids;
debug("Incrementing Apids, now at %d\n", numApids);
debug("cPidScanner::Process: Incrementing Apids, now at %d\n", numApids);
}
}
else if ((sid >= 0xE0) && (sid <= 0xEF)) {
if (pid < Vpid) {
debug("Found lower Vpid: 0x%X instead of 0x%X\n", pid, Vpid);
debug("cPidScanner::Process: Found lower Vpid: 0x%X instead of 0x%X\n", pid, Vpid);
Vpid = pid;
numVpids = 1;
}
else if (pid == Vpid) {
++numVpids;
debug("Incrementing Vpids, now at %d\n", numVpids);
debug("cPidScanner::Process: Incrementing Vpids, now at %d\n", numVpids);
}
}
}
if (((numVpids > PIDSCANNER_VPID_COUNT) && (numApids > PIDSCANNER_APID_COUNT)) ||
(abs(numApids - numVpids) > PIDSCANNER_PID_DELTA_COUNT)) {
if (((numVpids >= PIDSCANNER_VPID_COUNT) && (numApids >= PIDSCANNER_APID_COUNT)) ||
(abs(numApids - numVpids) >= PIDSCANNER_PID_DELTA_COUNT)) {
// Lock channels for pid updates
if (!Channels.Lock(true, 10)) {
timeout.Set(PIDSCANNER_TIMEOUT_IN_MS);
@@ -130,9 +130,9 @@ void cPidScanner::Process(const uint8_t* buf)
int Ppid = IptvChannel->Ppid();
int Tpid = IptvChannel->Tpid();
bool foundApid = false;
if (numVpids <= PIDSCANNER_VPID_COUNT)
if (numVpids < PIDSCANNER_VPID_COUNT)
Vpid = 0; // No detected video pid
else if (numApids <= PIDSCANNER_APID_COUNT)
else if (numApids < PIDSCANNER_APID_COUNT)
Apid = 0; // No detected audio pid
for (unsigned int i = 1; i < MAXAPIDS; ++i) {
Apids[i] = IptvChannel->Apid(i);

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: iptv 0.0.7\n"
"Project-Id-Version: iptv 0.2.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-02-01 23:43+0200\n"
"PO-Revision-Date: 2007-10-29 21:19+0100\n"

View File

@@ -5,7 +5,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: iptv 0.0.7\n"
"Project-Id-Version: iptv 0.2.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-02-01 23:43+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: iptv 0.0.7\n"
"Project-Id-Version: iptv 0.2.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-02-01 23:43+0200\n"
"PO-Revision-Date: 2008-01-26 13:14+0100\n"

View File

@@ -1,15 +1,15 @@
# VDR plugin language source file.
# Copyright (C) 2007 Rolf Ahrenberg & Antti Seppala
# This file is distributed under the same license as the iptv package.
# Gringo <vdr-italian@tiscali.it>, 2008.
# Diego Pierotto <vdr-italian@tiscali.it>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: iptv 0.0.7\n"
"Project-Id-Version: iptv 0.2.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-02-01 23:43+0200\n"
"PO-Revision-Date: 2008-01-13 16:46+0100\n"
"Last-Translator: Gringo <vdr-italian@tiscali.it>\n"
"PO-Revision-Date: 2008-03-30 05:26+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -38,7 +38,7 @@ msgid "TDT (0x70)"
msgstr "TDT (0x70)"
msgid "Experience the IPTV"
msgstr "Esperimenta la IPTV"
msgstr "Scopri la IPTV"
msgid "UDP"
msgstr "UDP"
@@ -47,7 +47,7 @@ msgid "HTTP"
msgstr "HTTP"
msgid "FILE"
msgstr "DATEI"
msgstr "FILE"
msgid "EXT"
msgstr "EXT"
@@ -59,7 +59,7 @@ msgid "Delay (ms)"
msgstr "Ritardo (ms)"
msgid "Script"
msgstr "Skript"
msgstr "Script"
msgid "Parameter"
msgstr "Parametro"
@@ -117,15 +117,21 @@ msgid ""
"\n"
"Smaller sizes help memory consumption, but are more prone to buffer overflows."
msgstr ""
"Definisci una dimensione del buffer in MB per i flussi di trasporto.\n"
"\n"
"Dimensioni più piccole aiutano il consumo di memoria, ma sono più inclini a generare buffer overflows."
msgid "TS buffer prefill ratio [%]"
msgstr "Percentuale preriempimento buffer TS [%]"
msgstr "Percentuale riempimento buffer TS [%]"
msgid ""
"Define a prefill ratio of the ringbuffer for transport streams before data is transferred to VDR.\n"
"\n"
"This is useful if streaming media over a slow or unreliable connection."
msgstr ""
"Definisci un rapporto di riempimento del buffer per i flussi di trasporto prima che i dati siano trasferiti a VDR.\n"
"\n"
"Questo è utile se si trasmette dati su una connessione lenta oppure inaffidabile."
msgid "EXT protocol base port"
msgstr "Porta base protocollo EXT"
@@ -135,6 +141,9 @@ msgid ""
"\n"
"The port range is defined by the number of IPTV devices. This setting sets the port which is listened for connections from external applications when using the EXT protocol."
msgstr ""
"Definisci una porta base usata dal protocollo EXT.\n"
"\n"
"Il range della porta è definito dal numero di periferiche IPTV. Questo parametro imposta la porta che è in ascolto per connessioni da applicazioni esterne quando si usa il protocollo EXT."
msgid "Use section filtering"
msgstr "Utilizza sezione filtri"
@@ -145,6 +154,10 @@ msgid ""
"Section filtering means that IPTV plugin tries to parse and provide VDR with secondary data about the currently active stream. VDR can then use this data for providing various functionalities such as automatic pid change detection and EPG etc.\n"
"Enabling this feature does not affect streams that do not contain section data."
msgstr ""
"Definisci se la sezione filtri sarà utilizzata.\n"
"\n"
"La sezioni filtri significa che il plugin IPTV prova a elaborare e fornire a VDR dati secondari sul flusso attualmente attivo. VDR può successivamente usare questi dati per fornire varie funzionalità come il rilevamento del cambio Pid automatico, EPG, etc.\n"
"Abilitare questa funzione non influisce sui flussi che non contengono dati di sezione."
msgid "Disable filters"
msgstr "Disabilita filtri"
@@ -154,13 +167,17 @@ msgid ""
"\n"
"Certain section filters might cause some unwanted behaviour to VDR such as time being falsely synchronized. By black-listing the filters here useful section data can be left intact for VDR to process."
msgstr ""
"Definisci il numero di sezione filtri che sarà disabilitato.\n"
"\n"
"Certe sezioni filtri potrebbero generare alcuni comportamenti indesiderati per VDR come la non sincronizzazione dell'ora. Inserendo qui i filtri nella lista nera i dati di sezione utili possono essere lasciati intatti per l'elaborazione da parte di VDR."
#. TRANSLATORS: note the singular!
msgid "Disable filter"
msgstr "Disabilita filtro"
msgid "Define an ill-behaving filter to be blacklisted."
msgstr ""
msgstr "Definisci un filtro corrotto che sarà messo nella lista nera."
msgid "Help"
msgstr "Aiuto"

168
po/ru_RU.po Normal file
View File

@@ -0,0 +1,168 @@
# VDR plugin language source file.
# Copyright (C) 2007 Rolf Ahrenberg & Antti Seppala
# This file is distributed under the same license as the iptv package.
# Alexander Gross <Bikalexander@gmail.com>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: iptv 0.2.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-02-01 23:43+0200\n"
"PO-Revision-Date: 2008-03-16 12:14+0100\n"
"Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n"
"Language-Team: Russian <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: KBabel 1.11.4\n"
msgid "PAT (0x00)"
msgstr "PAT (0x00)"
msgid "NIT (0x40)"
msgstr "NIT (0x40)"
msgid "SDT (0x42)"
msgstr "SDT (0x42)"
msgid "EIT (0x4E/0x4F)"
msgstr "EIT (0x4E/0x4F)"
msgid "EIT (0x5X)"
msgstr "EIT (0x5X)"
msgid "EIT (0x6X)"
msgstr "EIT (0x6X)"
msgid "TDT (0x70)"
msgstr "TDT (0x70)"
msgid "Experience the IPTV"
msgstr "Попробуй IPTV"
msgid "UDP"
msgstr "UDP"
msgid "HTTP"
msgstr "HTTP"
msgid "FILE"
msgstr "ФАЙЛ"
msgid "EXT"
msgstr "EXT"
msgid "Protocol"
msgstr "Протокол"
msgid "Delay (ms)"
msgstr "Задержка (мс)"
msgid "Script"
msgstr "Скрипт"
msgid "Parameter"
msgstr "Параметр"
msgid "Address"
msgstr "Адрес"
msgid "Port"
msgstr "Порт"
msgid "Scan Sid"
msgstr "Сканировать SID"
msgid "Scan pids"
msgstr "Сканировать пиды"
msgid "Nid"
msgstr "Nid"
msgid "Tid"
msgstr "Tid"
msgid "Rid"
msgstr "Rid"
msgid "Cannot find unique channel settings!"
msgstr "Невозможно найти уникальные настройки канала!"
msgid "IPTV Channels"
msgstr "IPTV каналы"
msgid "IPTV Information"
msgstr "IPTV информация"
msgid "General"
msgstr "Общее"
msgid "Pids"
msgstr "Пиды"
msgid "Filters"
msgstr "Фильтры"
msgid "Bits/bytes"
msgstr "Биты / байт"
msgid "IPTV information not available!"
msgstr "IPTV информация отсутствует!"
msgid "TS buffer size [MB]"
msgstr "Размер TS буфера [MB]"
msgid ""
"Define a ringbuffer size for transport streams in megabytes.\n"
"\n"
"Smaller sizes help memory consumption, but are more prone to buffer overflows."
msgstr ""
msgid "TS buffer prefill ratio [%]"
msgstr "Предварительный буфер TS [%]"
msgid ""
"Define a prefill ratio of the ringbuffer for transport streams before data is transferred to VDR.\n"
"\n"
"This is useful if streaming media over a slow or unreliable connection."
msgstr ""
msgid "EXT protocol base port"
msgstr "Базисный порт EXT протокола"
msgid ""
"Define a base port used by EXT protocol.\n"
"\n"
"The port range is defined by the number of IPTV devices. This setting sets the port which is listened for connections from external applications when using the EXT protocol."
msgstr ""
msgid "Use section filtering"
msgstr "Использовать область фильтрации"
msgid ""
"Define whether the section filtering shall be used.\n"
"\n"
"Section filtering means that IPTV plugin tries to parse and provide VDR with secondary data about the currently active stream. VDR can then use this data for providing various functionalities such as automatic pid change detection and EPG etc.\n"
"Enabling this feature does not affect streams that do not contain section data."
msgstr ""
msgid "Disable filters"
msgstr "Деактивировать фильтры"
msgid ""
"Define number of section filters to be disabled.\n"
"\n"
"Certain section filters might cause some unwanted behaviour to VDR such as time being falsely synchronized. By black-listing the filters here useful section data can be left intact for VDR to process."
msgstr ""
#. TRANSLATORS: note the singular!
msgid "Disable filter"
msgstr "Деактивировать фильтр"
msgid "Define an ill-behaving filter to be blacklisted."
msgstr "Неправильно работающий фильтр, занести в черный список."
msgid "Help"
msgstr "Справка"

View File

@@ -1,156 +0,0 @@
#!/usr/bin/perl
#
# po2i18n - Convert plugin po files in into i18n.c-format
#
# See the README file for copyright information and how to reach the author.
#
use strict;
use warnings;
my @LANGS = (
"en_US",
"de_DE",
"sl_SI",
"it_IT",
"nl_NL",
"pt_PT",
"fr_FR",
"nn_NO",
"fi_FI",
"pl_PL",
"es_ES",
"el_GR",
"sv_SE",
"ro_RO",
"hu_HU",
"ca_ES",
"ru_RU",
"hr_HR",
"et_EE",
"da_DK",
"cs_CZ",
"tr_TR"
);
my %VERS = (
"en_US" => 10200,
"de_DE" => 10200,
"sl_SI" => 10200,
"it_IT" => 10200,
"nl_NL" => 10200,
"pt_PT" => 10200,
"fr_FR" => 10200,
"nn_NO" => 10200,
"fi_FI" => 10200,
"pl_PL" => 10200,
"es_ES" => 10200,
"el_GR" => 10200,
"sv_SE" => 10200,
"ro_RO" => 10200,
"hu_HU" => 10200,
"ca_ES" => 10200,
"ru_RU" => 10302,
"hr_HR" => 10307,
"et_EE" => 10313,
"da_DK" => 10316,
"cs_CZ" => 10342,
"tr_TR" => 10502
);
my %strings;
foreach my $lang (@LANGS) { $strings{$lang} = { }; }
sub LoadLanguage(*) {
my ($lang) = @_;
if (!open FILE, "<", "po/$lang.po") {
return 0;
}
my $msgid = "";
my $msgstr = "";
my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
while (<FILE>) {
chomp;
my $line = $_;
if ($line =~ /^msgid "(.*)"$/) {
if ($last eq 2) {
$strings{$lang}->{$msgid} = $msgstr;
$strings{"en_US"}->{$msgid} = $msgid;
}
$msgid = $1;
$last = 1;
} elsif ($line =~ /^msgstr "(.*)"/) {
$msgstr = $1;
$last = 2;
} elsif ($line =~ /^"(.*)"/) {
if ($last eq 1) {
$msgid = $msgid . $1;
} elsif ($last eq 2) {
$msgstr = $msgstr . $1;
}
}
}
if ($last eq 2) {
$strings{$lang}->{$msgid} = $msgstr;
$strings{"en_US"}->{$msgid} = $msgid;
}
close FILE;
}
foreach my $lang (@LANGS) {
LoadLanguage($lang);
}
my @msgids = sort keys %{$strings{"en_US"}};
my $silent = 0;
while (<>) {
my $line = $_;
if ($line =~ /^\/\/ START I18N/) {
print "// START I18N - automatically generated by po2i18n.pl\n";
for my $msgid (@msgids) {
next if $msgid eq "";
my $head = " { ";
my $endif = "";
my $versnum = 10200;
for my $lang (@LANGS) {
if ($VERS{$lang} ne $versnum) {
$versnum = $VERS{$lang};
print $endif;
print "#if VDRVERSNUM >= $versnum\n";
$endif = "#endif\n";
}
my $msgstr = $strings{$lang}->{$msgid};
$msgstr = "" if !defined $msgstr;
print "$head\"$msgstr\",\n";
$head = " ";
}
print $endif;
print " },\n";
}
$silent = 1;
}
if (!$silent) { print $line; }
if ($line =~ /^\/\/ END I18N/) {
print "// END I18N - automatically generated by po2i18n.pl\n";
$silent = 0;
}
}

View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: protocolhttp.c,v 1.24 2008/02/17 19:18:47 rahrenbe Exp $
* $Id: protocolhttp.c,v 1.25 2008/04/02 22:55:04 rahrenbe Exp $
*/
#include <sys/types.h>
@@ -34,7 +34,6 @@ cIptvProtocolHttp::~cIptvProtocolHttp()
// Free allocated memory
free(streamPath);
free(streamAddr);
}
bool cIptvProtocolHttp::Connect(void)
@@ -237,7 +236,7 @@ bool cIptvProtocolHttp::Set(const char* Location, const int Parameter, const int
else
streamPath = strcpyrealloc(streamPath, "/");
socketPort = Parameter;
debug("http://%s:%d%s\n", streamAddr, socketPort, streamPath);
//debug("http://%s:%d%s\n", streamAddr, socketPort, streamPath);
// Re-connect the socket
Connect();
}

63
setup.c
View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: setup.c,v 1.56 2008/02/18 16:50:07 rahrenbe Exp $
* $Id: setup.c,v 1.58 2008/04/02 20:22:48 rahrenbe Exp $
*/
#include <string.h>
@@ -117,29 +117,6 @@ cString cIptvMenuEditChannel::GetIptvSettings(const char *Param, int *Parameter,
return locstr;
}
}
else if (sscanf(Param, "%a[^|]|%a[^|]|%a[^|]|%d", &tag, &proto, &loc, Parameter) == 4) {
cString tagstr(tag, true);
cString protostr(proto, true);
cString locstr(loc, true);
*SidScan = 0;
*PidScan = 0;
// check if IPTV tag
if (strncasecmp(*tagstr, "IPTV", 4) == 0) {
// check if protocol is supported and update the pointer
if (strncasecmp(*protostr, "UDP", 3) == 0)
*Protocol = eProtocolUDP;
else if (strncasecmp(*protostr, "HTTP", 4) == 0)
*Protocol = eProtocolHTTP;
else if (strncasecmp(*protostr, "FILE", 4) == 0)
*Protocol = eProtocolFILE;
else if (strncasecmp(*protostr, "EXT", 3) == 0)
*Protocol = eProtocolEXT;
else
return NULL;
// return location
return locstr;
}
}
return NULL;
}
@@ -219,12 +196,8 @@ void cIptvMenuEditChannel::SetChannelData(cChannel *Channel)
param = cString::sprintf("IPTV|S%dP%d|UDP|%s|%d", data.sidscan, data.pidscan, data.location, data.parameter);
break;
}
#if defined(APIVERSNUM) && APIVERSNUM < 10510
Channel->SetPids(data.vpid, data.ppid, data.apid, alangs, data.dpid, dlangs, data.tpid);
#else
char slangs[MAXSPIDS][MAXLANGCODE2] = { "" };
Channel->SetPids(data.vpid, data.ppid, data.apid, alangs, data.dpid, dlangs, data.spid, slangs, data.tpid);
#endif
Channel->SetCaIds(data.caids);
Channel->SetId(data.nid, data.tid, data.sid, data.rid);
Channel->SetName(data.name, "", "IPTV");
@@ -241,29 +214,17 @@ void cIptvMenuEditChannel::Setup(void)
eProtocolCount, protocols));
switch (data.protocol) {
case eProtocolFILE:
#if defined(APIVERSNUM) && APIVERSNUM < 10511
Add(new cMenuEditStrItem(trVDR("File"), data.location, sizeof(data.location), trVDR(FileNameChars)));
#else
Add(new cMenuEditStrItem(trVDR("File"), data.location, sizeof(data.location)));
#endif
Add(new cMenuEditIntItem(tr("Delay (ms)"), &data.parameter, 0, 0xFFFF));
break;
case eProtocolEXT:
#if defined(APIVERSNUM) && APIVERSNUM < 10511
Add(new cMenuEditStrItem(tr("Script"), data.location, sizeof(data.location), trVDR(FileNameChars)));
#else
Add(new cMenuEditStrItem(tr("Script"), data.location, sizeof(data.location)));
#endif
Add(new cMenuEditIntItem(tr("Parameter"), &data.parameter, 0, 0xFFFF));
break;
case eProtocolHTTP:
case eProtocolUDP:
default:
#if defined(APIVERSNUM) && APIVERSNUM < 10511
Add(new cMenuEditStrItem(tr("Address"), data.location, sizeof(data.location), trVDR(FileNameChars)));
#else
Add(new cMenuEditStrItem(tr("Address"), data.location, sizeof(data.location)));
#endif
Add(new cMenuEditIntItem(tr("Port"), &data.parameter, 0, 0xFFFF));
break;
}
@@ -273,11 +234,7 @@ void cIptvMenuEditChannel::Setup(void)
Add(sidScanItem);
Add(new cMenuEditBoolItem(tr("Scan pids"), &data.pidscan));
// Normal settings
#if defined(APIVERSNUM) && APIVERSNUM < 10511
Add(new cMenuEditStrItem(trVDR("Name"), data.name, sizeof(data.name), trVDR(FileNameChars)));
#else
Add(new cMenuEditStrItem(trVDR("Name"), data.name, sizeof(data.name)));
#endif
Add(new cMenuEditIntItem(trVDR("Frequency"), &data.frequency));
Add(new cMenuEditIntItem(trVDR("Vpid"), &data.vpid, 0, 0x1FFF));
Add(new cMenuEditIntItem(trVDR("Ppid"), &data.ppid, 0, 0x1FFF));
@@ -285,10 +242,8 @@ void cIptvMenuEditChannel::Setup(void)
Add(new cMenuEditIntItem(trVDR("Apid2"), &data.apid[1], 0, 0x1FFF));
Add(new cMenuEditIntItem(trVDR("Dpid1"), &data.dpid[0], 0, 0x1FFF));
Add(new cMenuEditIntItem(trVDR("Dpid2"), &data.dpid[1], 0, 0x1FFF));
#if defined(APIVERSNUM) && APIVERSNUM >= 10510
Add(new cMenuEditIntItem(trVDR("Spid1"), &data.spid[0], 0, 0x1FFF));
Add(new cMenuEditIntItem(trVDR("Spid2"), &data.spid[1], 0, 0x1FFF));
#endif
Add(new cMenuEditIntItem(trVDR("Tpid"), &data.tpid, 0, 0x1FFF));
Add(new cMenuEditIntItem(trVDR("CA"), &data.caids[0], 0, 0xFFFF));
Add(new cMenuEditIntItem(trVDR("Sid"), &data.sid, 1, 0xFFFF));
@@ -690,42 +645,28 @@ void cIptvPluginSetup::Setup(void)
int current = Current();
Clear();
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Clear();
#endif
Add(new cMenuEditIntItem( tr("TS buffer size [MB]"), &tsBufferSize, 1, 4));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define a ringbuffer size for transport streams in megabytes.\n\nSmaller sizes help memory consumption, but are more prone to buffer overflows."));
#endif
Add(new cMenuEditIntItem( tr("TS buffer prefill ratio [%]"), &tsBufferPrefill, 0, 40));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define a prefill ratio of the ringbuffer for transport streams before data is transferred to VDR.\n\nThis is useful if streaming media over a slow or unreliable connection."));
#endif
Add(new cMenuEditIntItem( tr("EXT protocol base port"), &extProtocolBasePort, 0, 0xFFF7));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define a base port used by EXT protocol.\n\nThe port range is defined by the number of IPTV devices. This setting sets the port which is listened for connections from external applications when using the EXT protocol."));
#endif
Add(new cMenuEditBoolItem(tr("Use section filtering"), &sectionFiltering));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define whether the section filtering shall be used.\n\nSection filtering means that IPTV plugin tries to parse and provide VDR with secondary data about the currently active stream. VDR can then use this data for providing various functionalities such as automatic pid change detection and EPG etc.\nEnabling this feature does not affect streams that do not contain section data."));
#endif
if (sectionFiltering) {
Add(new cMenuEditIntItem( tr("Disable filters"), &numDisabledFilters, 0, SECTION_FILTER_TABLE_SIZE));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define number of section filters to be disabled.\n\nCertain section filters might cause some unwanted behaviour to VDR such as time being falsely synchronized. By black-listing the filters here useful section data can be left intact for VDR to process."));
#endif
for (int i = 0; i < numDisabledFilters; ++i) {
// TRANSLATORS: note the singular!
Add(new cMenuEditStraItem(tr("Disable filter"), &disabledFilterIndexes[i], SECTION_FILTER_TABLE_SIZE, disabledFilterNames));
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
help.Append(tr("Define an ill-behaving filter to be blacklisted."));
#endif
}
}
@@ -759,10 +700,8 @@ eOSState cIptvPluginSetup::ProcessKey(eKeys Key)
switch (Key) {
case kRed: return EditChannel();
case kBlue: return ShowInfo();
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
case kInfo: if (Current() < help.Size())
return AddSubMenu(new cMenuText(cString::sprintf("%s - %s '%s'", tr("Help"), trVDR("Plugin"), PLUGIN_NAME_I18N), help[Current()]));
#endif
default: state = osContinue;
}
}

View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: setup.h,v 1.20 2008/02/01 21:54:24 rahrenbe Exp $
* $Id: setup.h,v 1.21 2008/02/19 22:29:02 rahrenbe Exp $
*/
#ifndef __IPTV_SETUP_H
@@ -22,9 +22,7 @@ private:
int numDisabledFilters;
int disabledFilterIndexes[SECTION_FILTER_TABLE_SIZE];
const char *disabledFilterNames[SECTION_FILTER_TABLE_SIZE];
#if defined(APIVERSNUM) && APIVERSNUM >= 10513
cVector<const char*> help;
#endif
eOSState EditChannel(void);
eOSState ShowInfo(void);

View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: streamer.c,v 1.30 2008/01/30 21:57:33 rahrenbe Exp $
* $Id: streamer.c,v 1.33 2008/04/04 20:55:44 rahrenbe Exp $
*/
#include <vdr/thread.h>
@@ -76,12 +76,11 @@ bool cIptvStreamer::Close(void)
// where thread Action() may be in the process of accessing the protocol.
// Taking a mutex serializes the Close() and Action() -calls.
if (mutex)
mutex->Lock();
mutex->Lock();
if (protocol)
protocol->Close();
if (mutex)
mutex->Unlock();
return true;
}

View File

@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: streamer.h,v 1.14 2008/01/30 21:57:33 rahrenbe Exp $
* $Id: streamer.h,v 1.16 2008/04/04 20:55:44 rahrenbe Exp $
*/
#ifndef __IPTV_STREAMER_H