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 | Date | |
|---|---|---|---|
|
|
6324eaf128 | ||
|
|
b31de2ec23 | ||
|
|
b3b28a5faa | ||
|
|
037adaac86 | ||
|
|
6fa46ca9e3 | ||
|
|
c507f373ff | ||
|
|
e798ff1424 | ||
|
|
613152c6db | ||
|
|
740d93aa2c | ||
|
|
94e70db977 | ||
|
|
698ebb3a3c | ||
|
|
aaf93246c1 | ||
|
|
1d8044b4e4 | ||
|
|
573584022c | ||
|
|
5420374543 | ||
|
|
71952ae0dc |
16
HISTORY
16
HISTORY
@@ -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.
|
||||
|
||||
45
Makefile
45
Makefile
@@ -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
5
README
@@ -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.
|
||||
|
||||
43
device.c
43
device.c
@@ -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])
|
||||
|
||||
@@ -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
18
i18n.h
@@ -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
12
iptv.c
@@ -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
67
iptv/internetradio.sh
Executable 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
|
||||
@@ -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
54
iptv/linein.sh
Executable 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
|
||||
@@ -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
69
iptv/webcam.sh
Executable 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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
20
pidscanner.c
20
pidscanner.c
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
35
po/it_IT.po
35
po/it_IT.po
@@ -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
168
po/ru_RU.po
Normal 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 "Справка"
|
||||
|
||||
156
po2i18n.pl
156
po2i18n.pl
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
63
setup.c
@@ -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"), §ionFiltering));
|
||||
#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;
|
||||
}
|
||||
}
|
||||
|
||||
4
setup.h
4
setup.h
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user