From e657da96f2831e3d96b0509ba031de48a144e5bb Mon Sep 17 00:00:00 2001 From: leslie Date: Thu, 11 Mar 2010 19:41:12 +0800 Subject: [PATCH] remove vdr 1.4.7 compatibility code --- .hgignore | 1 - Makefile | 22 +- README | 23 +- README.po2i18n | 44 ---- cam.c | 125 ----------- cam.h | 28 --- contrib/sasc-ng/sc/include/vdr/config.h | 8 +- contrib/sasc-ng/sc/include/vdr/i18n.h | 2 + i18n-template.c | 18 -- i18n.h | 5 - patches/vdr-1.4.x-sc7.diff | 272 ------------------------ po2i18n.pl | 156 -------------- sc.c | 21 +- 13 files changed, 14 insertions(+), 711 deletions(-) delete mode 100644 README.po2i18n delete mode 100644 i18n-template.c delete mode 100644 patches/vdr-1.4.x-sc7.diff delete mode 100644 po2i18n.pl diff --git a/.hgignore b/.hgignore index c23b951..9ad8230 100644 --- a/.hgignore +++ b/.hgignore @@ -11,7 +11,6 @@ po/*.pot *.rej *.bak version.c -i18n.c FFdecsa/FFdecsa_test FFdecsa/FFdecsa_test.done dump.* diff --git a/Makefile b/Makefile index 66bff81..bc50602 100644 --- a/Makefile +++ b/Makefile @@ -88,18 +88,9 @@ OBJS = $(PLUGIN).o data.o filter.o system.o misc.o cam.o version.o \ PODIR = po I18Npot = $(PODIR)/$(PLUGIN).pot -ifeq ($(strip $(APIVERSION)),1.5.7) - I18Nmo = $(PLUGIN).mo -else - I18Nmo = vdr-$(PLUGIN).mo -endif +I18Nmo = vdr-$(PLUGIN).mo I18Nmsgs = $(addprefix $(LOCALEDIR)/,$(addsuffix /LC_MESSAGES/$(I18Nmo),$(notdir $(foreach file, $(wildcard $(PODIR)/*.po), $(basename $(file)))))) LOCALEDIR = $(VDRDIR)/locale -HASLOCALE = $(shell grep -l 'I18N_DEFAULT_LOCALE' $(VDRDIR)/include/vdr/i18n.h) - -ifeq ($(strip $(HASLOCALE)),) - OBJS += i18n.o -endif ### VDR version dependant @@ -164,11 +155,7 @@ SHAREDDEFINES += -DSTATICBUILD else BUILDTARGETS = $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION) systems-pre endif -BUILDTARGETS += $(FFDECSATEST) systems - -ifneq ($(strip $(HASLOCALE)),) -BUILDTARGETS += i18n -endif +BUILDTARGETS += $(FFDECSATEST) systems i18n all: $(BUILDTARGETS) .PHONY: i18n systems systems-pre contrib clean clean-core clean-systems clean-pre dist srcdist @@ -216,9 +203,6 @@ $(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/$(I18Nmo): $(PODIR)/%.mo i18n: $(I18Nmsgs) -i18n.c: $(PODIR)/*.po i18n-template.c po2i18n.pl - perl ./po2i18n.pl i18n.c - version.c: FORCE @echo >$@.new "/* generated file, do not edit */"; \ echo >>$@.new 'const char *ScVersion =' '"'$(VERSION)'";'; \ @@ -244,7 +228,7 @@ clean-core: @if test -d $(FFDECSADIR); then $(MAKE) -C $(FFDECSADIR) clean; fi @-rm -f $(LIBDIR)/libsc-*-$(SCAPIVERS).so.$(APIVERSION) @-rm -f $(LIBDIR)/libvdr-$(PLUGIN).a $(LIBDIR)/libsc-*.a - @-rm -f $(OBJS) $(DEPFILE) version.c i18n.c *.so *.tar.gz core* *~ + @-rm -f $(OBJS) $(DEPFILE) version.c *.so *.tar.gz core* *~ @-rm -f $(PODIR)/*.mo clean-pre: diff --git a/README b/README index b0009c7..6db7668 100644 --- a/README +++ b/README @@ -39,7 +39,7 @@ Requirements * DVB driver from dvb-kernel 2.6 or 2.4 branch with applied patches * a patched firmware version 2620 or newer -* VDR 1.5.0 or newer (VDR 1.4.6+ in compatibility mode, see 1.4.x setup section) +* VDR 1.6.0 or newer * Openssl package version 0.9.7 or newer @@ -57,15 +57,13 @@ ARM crashes, add "hw_sections=0" while loading the dvb-ttpci module. Contrary to older plugin versions (before 0.7.0) you MUST NOT apply patches to the VDR core (neither vdr-sc nor ffdecsa/softcsa) except if: -- you are using VDR 1.4.x (see section below) - you are using VDR 1.7.8 or lower and want to view channels with split ECM To correctly decode channels with split ECM (i.e. audio and video encrypted with different CW) you need to apply a patch to the VDR core if you are using a VDR version before 1.7.9. You can find the "vdr-1.6.0-2-streamca.diff" file in the patches subdirectory. It has been tested with VDR 1.6.0-2 only, but -probably will apply to other VDR versions as well. This feature is explicitely -not supported for VDR 1.4.x. +probably will apply to other VDR versions as well. You must have installed the openssl development files. For most distributions this means to install openssl-devel package. You should use a openssl package @@ -107,23 +105,6 @@ rotated. -How to setup for VDR 1.4.x ? ----------------------------- - -NOTE: support for VDR 1.4.7 is deprecated. As development requires, the support -will be removed. - -Additional to the points mentioned above, you have to patch the VDR core with -the supplied patch (vdr-1.4.x-sc7.diff). Recompile VDR and use the new binary. -Patches from older SC releases are not going to work. - -Even with VDR 1.4.x you don't have to use a softcsa/ffdecsa patch. - -Activating/deactivating DVB cards in the plugin setup menu needs a VDR restart -to take effect. - - - Pre-compiled libraries ---------------------- diff --git a/README.po2i18n b/README.po2i18n deleted file mode 100644 index c690235..0000000 --- a/README.po2i18n +++ /dev/null @@ -1,44 +0,0 @@ - - po2i18n - Converter for po files - - -Written by: Udo Richter -Project's homepage: http://www.udo-richter.de/vdr/scripts.html#po2i18n - http://www.udo-richter.de/vdr/scripts.en.html#po2i18n - - - -About --------------------------------------------------------------------------- -po2i18n is a perl script that generates an i18n.c file compatible to the i18n -system of VDR 1.2.0 - VDR 1.5.6, based on the .po files of VDR 1.5.7. This -allows plugins to transit to the translation system of VDR 1.5.7 while -maintaining compatibility to earlier versions. The script can be used manually -or automatically as part of the Makefile. - - -Use --------------------------------------------------------------------------- -po2i18n.pl is a filter and can be used manually like this: - - ./po2i18n.pl < i18n-template.c > i18n.c - -The filter reads all relevant ./po/*.po files and writes the i18n strings -into the template file. Strings will be added between the following two lines: - - // START I18N - // END I18N - -See also the sample i18n.h and i18n-template.c file. Note that the phrases data -structure is encapsulated in #if VDRVERSNUM < 10507, so the i18n strings won't -be in the plugin file after 1.5.7. The call to RegisterI18n() of your plugin -should also be encapsulated like this. - -po2i18n can also generate the i18n.c file on the fly while compiling. The -changes to the Makefile are demonstrated by the included Makefile.diff sample. -With these changes, the i18n.c file will be generated on VDR up to 1.5.6, and -the whole gettext conversion is skipped. From 1.5.7 on, the i18n-template.c -file will be simply copied as a dummy, and the new locale system will run. - -As a drawback, the automatic .dependencies for i18n.c won't work. - diff --git a/cam.c b/cam.c index e08ec99..f19e99a 100644 --- a/cam.c +++ b/cam.c @@ -29,9 +29,7 @@ #include #include #ifndef SASC -#if APIVERSNUM >= 10500 #include -#endif #include #include "FFdecsa/FFdecsa.h" @@ -1916,8 +1914,6 @@ void cCam::RemHandler(cEcmHandler *handler) // --- cChannelCaids ----------------------------------------------------------- -#if APIVERSNUM >= 10500 - class cChannelCaids : public cSimpleItem { private: int prg, source, transponder; @@ -2695,8 +2691,6 @@ bool cScCiAdapter::Assign(cDevice *Device, bool Query) return Device ? (Device==device) : true; } -#endif //APIVERSNUM >= 10500 - // -- cDeCSA ------------------------------------------------------------------- #define MAX_CSA_PIDS 8192 @@ -3206,11 +3200,7 @@ cScDevice::cScDevice(int Adapter, int Frontend, int cafd) #endif { decsa=0; tsBuffer=0; cam=0; fullts=false; -#if APIVERSNUM >= 10500 ciadapter=0; hwciadapter=0; -#else - memset(lrucaid,0,sizeof(lrucaid)); -#endif fd_ca=cafd; fd_ca2=dup(fd_ca); fd_dvr=-1; softcsa=(fd_ca<0); } @@ -3222,18 +3212,14 @@ cScDevice::~cScDevice() EarlyShutdown(); delete decsa; if(fd_ca>=0) close(fd_ca); -#if APIVERSNUM >= 10500 if(fd_ca2>=0) close(fd_ca2); -#endif } void cScDevice::EarlyShutdown(void) { -#if APIVERSNUM >= 10500 SetCamSlot(0); delete ciadapter; ciadapter=0; delete hwciadapter; hwciadapter=0; -#endif if(cam) cam->Stop(); delete cam; cam=0; } @@ -3251,17 +3237,9 @@ void cScDevice::LateInit(void) softcsa=true; } -#if APIVERSNUM >= 10500 if(fd_ca2>=0) hwciadapter=cDvbCiAdapter::CreateCiAdapter(this,fd_ca2); cam=new cCam(this,n); ciadapter=new cScCiAdapter(this,n,cam); -#else - if(fd_ca2>=0) { - ciHandler=cCiHandler::CreateCiHandler(fd_ca2); - if(!ciHandler) close(fd_ca2); - } - cam=ScSetup.CapCheck(n) ? new cCam(this,n):0; -#endif if(softcsa) { decsa=new cDeCSA(n); if(IsPrimaryDevice() && HasDecoder()) { @@ -3272,20 +3250,16 @@ void cScDevice::LateInit(void) } } -#if APIVERSNUM >= 10501 bool cScDevice::HasCi(void) { return ciadapter || hwciadapter; } -#endif -#if APIVERSNUM >= 10500 bool cScDevice::Ready(void) { return (ciadapter ? ciadapter->Ready():true) && (hwciadapter ? hwciadapter->Ready():true); } -#endif bool cScDevice::SetPid(cPidHandle *Handle, int Type, bool On) { @@ -3298,112 +3272,15 @@ bool cScDevice::SetPid(cPidHandle *Handle, int Type, bool On) bool cScDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) { -#if APIVERSNUM < 10500 - SetChannelLRU(Channel); -#endif if(cam) cam->Tune(Channel); bool ret=cDvbDevice::SetChannelDevice(Channel,LiveView); if(ret && cam) cam->PostTune(); return ret; } -#if APIVERSNUM < 10500 -int cScDevice::ProvidesCa(const cChannel *Channel) const -{ - if(cam && Channel->Ca()>=CA_ENCRYPTED_MIN) { - int caid; - for(int j=0; (caid=Channel->Ca(j)); j++) - if(!overrides.Ignore(Channel->Source(),Channel->Transponder(),caid)) { - int n=cSystems::CanHandle(caid,!softcsa); - if(n<0) break; - if(n>0) return 2; - } - } - return cDvbDevice::ProvidesCa(Channel); -} - -bool cScDevice::CiAllowConcurrent(void) const -{ - return softcsa || ScSetup.ConcurrentFF>0; -} - -bool cScDevice::GetPrgCaids(int source, int transponder, int prg, caid_t *c) -{ - cMutexLock lock(&lruMutex); - int i=FindLRUPrg(source,transponder,prg); - if(i>=0) { - for(int j=0; jSource(),Channel->Transponder(),Channel->Sid()); - if(i<0) i=MAX_LRU_CAID-1; - if(i>0) memmove(&lrucaid[1],&lrucaid[0],sizeof(struct LruCaid)*i); - for(i=0; i<=MAXCAIDS; i++) if((lrucaid[0].caids[i]=Channel->Ca(i))==0) break; - lrucaid[0].src=Channel->Source(); - lrucaid[0].tr=Channel->Transponder(); - lrucaid[0].prg=Channel->Sid(); - lruMutex.Unlock(); -} - -void cScDevice::CiStartDecrypting(void) -{ - if(cam) { - cSimpleList prgList; - for(cCiCaProgramData *p=ciProgramList.First(); p; p=ciProgramList.Next(p)) { - if(p->modified) { - cPrg *prg=new cPrg(p->programNumber,cam->HasPrg(p->programNumber)); - if(prg) { - bool haspid=false; - for(cCiCaPidData *q=p->pidList.First(); q; q=p->pidList.Next(q)) { - if(q->active) { - prg->pids.Add(new cPrgPid(q->streamType,q->pid)); - haspid=true; - } - } - if(haspid) { - caid_t casys[MAXCAIDS+1]; - if(GetPrgCaids(ciSource,ciTransponder,p->programNumber,casys)) { - unsigned char buff[2048]; - bool streamflag; - int len=GetCaDescriptors(ciSource,ciTransponder,p->programNumber,casys,sizeof(buff),buff,streamflag); - if(len>0) prg->caDescr.Set(buff,len); - } - } - prgList.Add(prg); - } - p->modified=false; - } - } - for(int loop=1; loop<=2; loop++) // first delete, then add - for(cPrg *prg=prgList.First(); prg; prg=prgList.Next(prg)) - if((loop==1)!=(prg->pids.Count()>0)) - cam->AddPrg(prg); - } - cDvbDevice::CiStartDecrypting(); -} -#endif //APIVERSNUM < 10500 - bool cScDevice::ScActive(void) { -#if APIVERSNUM >= 10500 return dynamic_cast(CamSlot())!=0; -#else - return cam && softcsa; -#endif } bool cScDevice::OpenDvr(void) @@ -3439,10 +3316,8 @@ bool cScDevice::SoftCSA(bool live) void cScDevice::CaidsChanged(void) { -#if APIVERSNUM >= 10500 if(ciadapter) ciadapter->CaidsChanged(); PRINTF(L_CORE_CAIDS,"caid list rebuild triggered"); -#endif } bool cScDevice::SetCaDescr(ca_descr_t *ca_descr, bool initial) diff --git a/cam.h b/cam.h index e05cd64..74603fb 100644 --- a/cam.h +++ b/cam.h @@ -112,11 +112,7 @@ public: // ---------------------------------------------------------------- -#if APIVERSNUM >= 10500 typedef int caid_t; -#else -typedef unsigned short caid_t; -#endif #define MAX_CW_IDX 16 #define MAX_CI_SLOTS 8 @@ -211,10 +207,8 @@ private: cDeCSA *decsa; cDeCsaTSBuffer *tsBuffer; cMutex tsMutex; -#if APIVERSNUM >= 10500 cScCiAdapter *ciadapter; cCiAdapter *hwciadapter; -#endif cCam *cam; int fd_dvr, fd_ca, fd_ca2; bool softcsa, fullts; @@ -227,26 +221,9 @@ private: bool ScActive(void); #endif //SASC // -#if APIVERSNUM < 10500 -#define MAX_LRU_CAID 10 - struct LruCaid { - int src, tr, prg; - caid_t caids[MAXCAIDS+1]; - } lrucaid[MAX_LRU_CAID]; - cMutex lruMutex; - // - int FindLRUPrg(int source, int transponder, int prg); - bool GetPrgCaids(int source, int transponder, int prg, caid_t *c); - void SetChannelLRU(const cChannel *Channel); -#endif protected: #ifndef SASC -#if APIVERSNUM >= 10500 virtual bool Ready(void); -#else - virtual void CiStartDecrypting(void); - virtual bool CiAllowConcurrent(void) const; -#endif virtual bool SetPid(cPidHandle *Handle, int Type, bool On); virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView); virtual bool OpenDvr(void); @@ -257,12 +234,7 @@ public: cScDevice(int Adapter, int Frontend, int cafd); ~cScDevice(); #ifndef SASC -#if APIVERSNUM >= 10501 virtual bool HasCi(void); -#endif -#if APIVERSNUM < 10500 - virtual int ProvidesCa(const cChannel *Channel) const; -#endif #endif //SASC virtual bool SetCaDescr(ca_descr_t *ca_descr, bool initial); virtual bool SetCaPid(ca_pid_t *ca_pid); diff --git a/contrib/sasc-ng/sc/include/vdr/config.h b/contrib/sasc-ng/sc/include/vdr/config.h index aa4cfe8..964ba4f 100644 --- a/contrib/sasc-ng/sc/include/vdr/config.h +++ b/contrib/sasc-ng/sc/include/vdr/config.h @@ -22,13 +22,13 @@ // VDR's own version number: -#define VDRVERSION "1.5.5" -#define VDRVERSNUM 10505 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.6.0" +#define VDRVERSNUM 10600 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: -#define APIVERSION "1.5.5" -#define APIVERSNUM 10505 // Version * 10000 + Major * 100 + Minor +#define APIVERSION "1.6.0" +#define APIVERSNUM 10600 // Version * 10000 + Major * 100 + Minor // When loading plugins, VDR searches them by their APIVERSION, which // may be smaller than VDRVERSION in case there have been no changes to diff --git a/contrib/sasc-ng/sc/include/vdr/i18n.h b/contrib/sasc-ng/sc/include/vdr/i18n.h index 7f9f065..3d1d8ec 100644 --- a/contrib/sasc-ng/sc/include/vdr/i18n.h +++ b/contrib/sasc-ng/sc/include/vdr/i18n.h @@ -44,4 +44,6 @@ bool I18nIsPreferredLanguage(int *PreferredLanguages, const char *LanguageCode, #define tr(s) I18nTranslate(s) #endif +#define trNOOP(s) (s) + #endif //__I18N_H diff --git a/i18n-template.c b/i18n-template.c deleted file mode 100644 index 2678e03..0000000 --- a/i18n-template.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Auto generated file, do not edit - * Will be overwritten/deleted without warning - * - * Edit the .po files if you want to update translations!! - */ - -#include "i18n.h" - -#if VDRVERSNUM < 10507 - -const tI18nPhrase ScPhrases[] = { -// START I18N -// END I18N - { NULL } - }; - -#endif diff --git a/i18n.h b/i18n.h index 151afb1..2df5a56 100644 --- a/i18n.h +++ b/i18n.h @@ -22,9 +22,4 @@ #include -#if APIVERSNUM < 10507 -extern const tI18nPhrase ScPhrases[]; -#define trNOOP(s) (s) -#endif - #endif //___I18N_H diff --git a/patches/vdr-1.4.x-sc7.diff b/patches/vdr-1.4.x-sc7.diff deleted file mode 100644 index 8ee66ef..0000000 --- a/patches/vdr-1.4.x-sc7.diff +++ /dev/null @@ -1,272 +0,0 @@ -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/ci.c vdr-1.4.7-sc7/ci.c ---- vdr-1.4.7-orig/ci.c 2007-04-30 14:58:41.000000000 +0200 -+++ vdr-1.4.7-sc7/ci.c 2007-05-13 18:04:04.000000000 +0200 -@@ -1502,9 +1502,8 @@ - close(fd); - } - --cCiHandler *cCiHandler::CreateCiHandler(const char *FileName) -+cCiHandler *cCiHandler::CreateCiHandler(int fd_ca) - { -- int fd_ca = open(FileName, O_RDWR); - if (fd_ca >= 0) { - ca_caps_t Caps; - if (ioctl(fd_ca, CA_GET_CAP, &Caps) == 0) { -@@ -1520,8 +1519,7 @@ - esyslog("ERROR: no CAM slots found"); - } - else -- LOG_ERROR_STR(FileName); -- close(fd_ca); -+ LOG_ERROR_STR("CA_GET_CAP"); - } - return NULL; - } -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/ci.h vdr-1.4.7-sc7/ci.h ---- vdr-1.4.7-orig/ci.h 2006-08-12 11:43:31.000000000 +0200 -+++ vdr-1.4.7-sc7/ci.h 2007-06-24 19:46:39.000000000 +0200 -@@ -85,10 +85,12 @@ - class cCiCaProgramData : public cListObject { - public: - int programNumber; -+ bool modified; - cList pidList; - cCiCaProgramData(int ProgramNumber) - { - programNumber = ProgramNumber; -+ modified = true; - } - }; - -@@ -96,6 +98,8 @@ - class cCiTransportLayer; - class cCiTransportConnection; - -+#define VDR_IS_SC_PATCHED 402 -+ - class cCiHandler { - private: - cMutex mutex; -@@ -123,7 +127,7 @@ - void SendCaPmt(void); - public: - ~cCiHandler(); -- static cCiHandler *CreateCiHandler(const char *FileName); -+ static cCiHandler *CreateCiHandler(int fd_ca); - ///< Creates a new cCiHandler for the given CA device. - int NumSlots(void) { return numSlots; } - ///< Returns the number of CAM slots provided by this CA device. -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/device.c vdr-1.4.7-sc7/device.c ---- vdr-1.4.7-orig/device.c 2006-09-03 12:13:25.000000000 +0200 -+++ vdr-1.4.7-sc7/device.c 2007-05-13 18:30:57.000000000 +0200 -@@ -395,6 +395,54 @@ - return false; - } - -+void cDevice::CiStartDecrypting(void) -+{ -+ if (ciHandler) -+ ciHandler->StartDecrypting(); -+} -+ -+void cDevice::CiSetSource(int Source, int Transponder) -+{ -+ cMutexLock MutexLock(&ciListMutex); -+ if (ciSource != Source || ciTransponder != Transponder) -+ ciProgramList.Clear(); -+ ciSource = Source; -+ ciTransponder = Transponder; -+} -+ -+void cDevice::CiAddPid(int ProgramNumber, int Pid, int StreamType) -+{ -+ cMutexLock MutexLock(&ciListMutex); -+ cCiCaProgramData *ProgramData = NULL; -+ for (cCiCaProgramData *p = ciProgramList.First(); p; p = ciProgramList.Next(p)) { -+ if (p->programNumber == ProgramNumber) { -+ ProgramData = p; -+ for (cCiCaPidData *q = p->pidList.First(); q; q = p->pidList.Next(q)) { -+ if (q->pid == Pid) -+ return; -+ } -+ } -+ } -+ if (!ProgramData) -+ ciProgramList.Add(ProgramData = new cCiCaProgramData(ProgramNumber)); -+ ProgramData->pidList.Add(new cCiCaPidData(Pid, StreamType)); -+ ProgramData->modified=true; -+} -+ -+void cDevice::CiSetPid(int Pid, bool Active) -+{ -+ cMutexLock MutexLock(&ciListMutex); -+ for (cCiCaProgramData *p = ciProgramList.First(); p; p = ciProgramList.Next(p)) { -+ for (cCiCaPidData *q = p->pidList.First(); q; q = p->pidList.Next(q)) { -+ if (q->pid == Pid) { -+ q->active = Active; -+ p->modified = true; -+ return; -+ } -+ } -+ } -+} -+ - bool cDevice::AddPid(int Pid, ePidType PidType) - { - if (Pid || PidType == ptPcr) { -@@ -424,6 +472,7 @@ - } - if (ciHandler) - ciHandler->SetPid(Pid, true); -+ CiSetPid(Pid, true); - } - PRINTPIDS("a"); - return true; -@@ -453,6 +502,7 @@ - } - if (ciHandler) - ciHandler->SetPid(Pid, true); -+ CiSetPid(Pid, true); - } - } - return true; -@@ -481,6 +531,7 @@ - pidHandles[n].pid = 0; - if (ciHandler) - ciHandler->SetPid(Pid, false); -+ CiSetPid(Pid, false); - } - } - PRINTPIDS("E"); -@@ -663,6 +714,16 @@ - } - #endif - } -+ -+ CiSetSource(Channel->Source(), Channel->Transponder()); -+ if (Channel->Ca() >= CA_ENCRYPTED_MIN) { -+ CiAddPid(Channel->Sid(), Channel->Vpid(), 2); -+ for (const int *Apid = Channel->Apids(); *Apid; Apid++) -+ CiAddPid(Channel->Sid(), *Apid, 4); -+ for (const int *Dpid = Channel->Dpids(); *Dpid; Dpid++) -+ CiAddPid(Channel->Sid(), *Dpid, 0); -+ } -+ - if (NeedsDetachReceivers) - DetachAllReceivers(); - if (SetChannelDevice(Channel, LiveView)) { -@@ -672,8 +733,7 @@ - sectionHandler->SetStatus(true); - } - // Start decrypting any PIDs that might have been set in SetChannelDevice(): -- if (ciHandler) -- ciHandler->StartDecrypting(); -+ CiStartDecrypting(); - } - else - Result = scrFailed; -@@ -1258,8 +1318,7 @@ - Unlock(); - if (!Running()) - Start(); -- if (ciHandler) -- ciHandler->StartDecrypting(); -+ CiStartDecrypting(); - return true; - } - } -@@ -1286,8 +1345,7 @@ - else if (receiver[i]) - receiversLeft = true; - } -- if (ciHandler) -- ciHandler->StartDecrypting(); -+ CiStartDecrypting(); - if (!receiversLeft) - Cancel(3); - } -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/device.h vdr-1.4.7-sc7/device.h ---- vdr-1.4.7-orig/device.h 2006-06-15 11:32:48.000000000 +0200 -+++ vdr-1.4.7-sc7/device.h 2007-05-13 18:04:04.000000000 +0200 -@@ -311,6 +311,14 @@ - - protected: - cCiHandler *ciHandler; -+ int ciSource, ciTransponder; -+ cList ciProgramList; -+ cMutex ciListMutex; -+ virtual void CiStartDecrypting(void); -+ virtual bool CiAllowConcurrent(void) const { return false; } -+ void CiSetSource(int Source, int Transponder); -+ void CiAddPid(int ProgramNumber, int Pid, int StreamType); -+ void CiSetPid(int Pid, bool Active); - public: - cCiHandler *CiHandler(void) { return ciHandler; } - -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/dvbdevice.c vdr-1.4.7-sc7/dvbdevice.c ---- vdr-1.4.7-orig/dvbdevice.c 2007-02-24 12:10:14.000000000 +0100 -+++ vdr-1.4.7-sc7/dvbdevice.c 2007-06-24 19:42:24.000000000 +0200 -@@ -419,7 +419,11 @@ - dvb_frontend_info feinfo; - if (ioctl(fd_frontend, FE_GET_INFO, &feinfo) >= 0) { - frontendType = feinfo.type; -- ciHandler = cCiHandler::CreateCiHandler(*cDvbName(DEV_DVB_CA, n)); -+ int fd_ca = DvbOpen(DEV_DVB_CA, n, O_RDWR); -+ if(fd_ca>=0) { -+ ciHandler = cCiHandler::CreateCiHandler(fd_ca); -+ if(!ciHandler) close(fd_ca); -+ } - dvbTuner = new cDvbTuner(fd_frontend, CardIndex(), frontendType, ciHandler); - } - else -@@ -776,8 +780,12 @@ - if (Channel->Vpid() && !HasPid(Channel->Vpid()) || Channel->Apid(0) && !HasPid(Channel->Apid(0))) { - #ifdef DO_MULTIPLE_RECORDINGS - #ifndef DO_MULTIPLE_CA_CHANNELS -- if (Ca() >= CA_ENCRYPTED_MIN || Channel->Ca() >= CA_ENCRYPTED_MIN) -- needsDetachReceivers = Ca() != Channel->Ca(); -+ if (Ca() >= CA_ENCRYPTED_MIN || Channel->Ca() >= CA_ENCRYPTED_MIN) { -+ if(Channel->Ca()Ca(); -+ } - else - #endif - if (!IsPrimaryDevice()) -@@ -927,7 +935,7 @@ - SetPid(&pidHandles[ptAudio], ptAudio, true); - if (ciHandler) { - ciHandler->SetPid(pidHandles[ptAudio].pid, true); -- ciHandler->StartDecrypting(); -+ CiStartDecrypting(); - } - } - } -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/tools.c vdr-1.4.7-sc7/tools.c ---- vdr-1.4.7-orig/tools.c 2006-12-02 12:12:59.000000000 +0100 -+++ vdr-1.4.7-sc7/tools.c 2007-05-13 18:04:04.000000000 +0200 -@@ -542,9 +542,9 @@ - - // --- cTimeMs --------------------------------------------------------------- - --cTimeMs::cTimeMs(void) -+cTimeMs::cTimeMs(int Ms) - { -- Set(); -+ Set(Ms); - } - - uint64_t cTimeMs::Now(void) -diff -urN -X ex.vdr-sc7 vdr-1.4.7-orig/tools.h vdr-1.4.7-sc7/tools.h ---- vdr-1.4.7-orig/tools.h 2006-12-03 18:38:38.000000000 +0100 -+++ vdr-1.4.7-sc7/tools.h 2007-05-13 18:04:04.000000000 +0200 -@@ -162,7 +162,7 @@ - private: - uint64_t begin; - public: -- cTimeMs(void); -+ cTimeMs(int Ms = 0); - static uint64_t Now(void); - void Set(int Ms = 0); - bool TimedOut(void); diff --git a/po2i18n.pl b/po2i18n.pl deleted file mode 100644 index cef8092..0000000 --- a/po2i18n.pl +++ /dev/null @@ -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 () { - 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; - } -} diff --git a/sc.c b/sc.c index 1ec9f4a..fb426c0 100644 --- a/sc.c +++ b/sc.c @@ -54,26 +54,17 @@ #include "version.h" #define MIN_VERS 1 // required VDR version -#define MIN_MAJOR 4 -#define MIN_MINOR 6 -#define MINAPIVERSNUM 10405 +#define MIN_MAJOR 6 +#define MIN_MINOR 0 +#define MINAPIVERSNUM 10600 // some sanity checks #ifdef HAVE_SOFTCSA #error softcsa/ffdecsa patch MUST NOT be applied. Next time read the README first. #endif -#if APIVERSNUM >= 10500 #ifdef VDR_IS_SC_PATCHED #error You MUST NOT patch the VDR core. Next time read the README first. #endif -#else //APIVERSNUM >= 10500 -#if !defined(VDR_IS_SC_PATCHED) -#error You MUST patch the VDR core with the supplied patch. Next time read the README first. -#endif -#if VDR_IS_SC_PATCHED<402 -#error Your VDR core is patched with an outdated patch version. Please upgrade to the supplied version. -#endif -#endif //APIVERSNUM >= 10500 #if APIVERSNUM