summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Add_libdvbcsa_support.diff363
-rw-r--r--vdr-sc-0.9.3.20120815_vdr-2.1.4_compilefix.diff71
2 files changed, 0 insertions, 434 deletions
diff --git a/Add_libdvbcsa_support.diff b/Add_libdvbcsa_support.diff
deleted file mode 100644
index ebd520fbcf75..000000000000
--- a/Add_libdvbcsa_support.diff
+++ /dev/null
@@ -1,363 +0,0 @@
-diff -ruN vdr-sc.orig/cam.c vdr-sc/cam.c
---- vdr-sc.orig/cam.c 2013-05-04 22:47:03.338513750 +0200
-+++ vdr-sc/cam.c 2013-05-04 22:49:16.315041313 +0200
-@@ -2799,10 +2799,19 @@
- :stall(MAX_STALL_MS)
- {
- devId=DevId;
-+#ifndef LIBDVBCSA
- cs=get_suggested_cluster_size();
- PRINTF(L_CORE_CSA,"%s: clustersize=%d rangesize=%d",devId,cs,cs*2+5);
- range=MALLOC(unsigned char *,(cs*2+5));
- memset(keys,0,sizeof(keys));
-+#else
-+ cs = dvbcsa_bs_batch_size();
-+ PRINTF(L_CORE_CSA,"%d: batch_size=%d", devId, cs);
-+ cs_tsbbatch_even = (dvbcsa_bs_batch_s *) malloc((cs + 1) * sizeof(struct dvbcsa_bs_batch_s));
-+ cs_tsbbatch_odd = (dvbcsa_bs_batch_s *) malloc((cs + 1) * sizeof(struct dvbcsa_bs_batch_s));
-+ memset(cs_key_even, 0, sizeof(cs_key_even));
-+ memset(cs_key_odd, 0, sizeof(cs_key_odd));
-+#endif
- memset(pidmap,0,sizeof(pidmap));
- ResetState();
- }
-@@ -2810,8 +2819,19 @@
- cDeCSA::~cDeCSA()
- {
- for(int i=0; i<MAX_CSA_IDX; i++)
-+#ifndef LIBDVBCSA
- if(keys[i]) free_key_struct(keys[i]);
- free(range);
-+#else
-+ {
-+ if (cs_key_even[i])
-+ dvbcsa_bs_key_free(cs_key_even[i]);
-+ if (cs_key_odd[i])
-+ dvbcsa_bs_key_free(cs_key_odd[i]);
-+ }
-+ free(cs_tsbbatch_even);
-+ free(cs_tsbbatch_odd);
-+#endif
- }
-
- void cDeCSA::ResetState(void)
-@@ -2819,7 +2839,9 @@
- PRINTF(L_CORE_CSA,"%s: reset state",devId);
- memset(even_odd,0,sizeof(even_odd));
- memset(flags,0,sizeof(flags));
-+#ifndef LIBDVBCSA
- lastData=0;
-+#endif
- }
-
- void cDeCSA::SetActive(bool on)
-@@ -2831,8 +2853,16 @@
-
- bool cDeCSA::GetKeyStruct(int idx)
- {
-+#ifndef LIBDVBCSA
- if(!keys[idx]) keys[idx]=get_key_struct();
- return keys[idx]!=0;
-+#else
-+ if (!cs_key_even[idx])
-+ cs_key_even[idx] = dvbcsa_bs_key_alloc();
-+ if (!cs_key_odd[idx])
-+ cs_key_odd[idx] = dvbcsa_bs_key_alloc();
-+ return (cs_key_even[idx] != 0) && (cs_key_odd[idx] != 0);
-+#endif
- }
-
- bool cDeCSA::SetDescr(ca_descr_t *ca_descr, bool initial)
-@@ -2850,13 +2880,21 @@
- }
- LDUMP(L_CORE_CSA,ca_descr->cw,8,"%s.%d: %4s key set",devId,idx,ca_descr->parity?"odd":"even");
- if(ca_descr->parity==0) {
-+#ifndef LIBDVBCSA
- set_even_control_word(keys[idx],ca_descr->cw);
-+#else
-+ dvbcsa_bs_key_set(ca_descr->cw, cs_key_even[idx]);
-+#endif
- if(!CheckNull(ca_descr->cw,8)) flags[idx]|=FL_EVEN_GOOD|FL_ACTIVITY;
- else PRINTF(L_CORE_CSA,"%s.%d: zero even CW",devId,idx);
- wait.Broadcast();
- }
- else {
-+#ifndef LIBDVBCSA
- set_odd_control_word(keys[idx],ca_descr->cw);
-+#else
-+ dvbcsa_bs_key_set(ca_descr->cw, cs_key_odd[idx]);
-+#endif
- if(!CheckNull(ca_descr->cw,8)) flags[idx]|=FL_ODD_GOOD|FL_ACTIVITY;
- else PRINTF(L_CORE_CSA,"%s.%d: zero odd CW",devId,idx);
- wait.Broadcast();
-@@ -2875,24 +2913,80 @@
- return true;
- }
-
-+#ifdef LIBDVBCSA
-+unsigned char ts_packet_get_payload_offset(unsigned char *ts_packet)
-+{
-+ if (ts_packet[0] != TS_SYNC_BYTE)
-+ return 0;
-+
-+ unsigned char adapt_field = (ts_packet[3] &~ 0xDF) >> 5; // 11x11111
-+ unsigned char payload_field = (ts_packet[3] &~ 0xEF) >> 4; // 111x1111
-+
-+ if (!adapt_field && !payload_field) // Not allowed
-+ return 0;
-+
-+ if (adapt_field)
-+ {
-+ unsigned char adapt_len = ts_packet[4];
-+ if (payload_field && adapt_len > 182) // Validity checks
-+ return 0;
-+ if (!payload_field && adapt_len > 183)
-+ return 0;
-+ if (adapt_len + 4 > TS_SIZE) // adaptation field takes the whole packet
-+ return 0;
-+ return 4 + 1 + adapt_len; // ts header + adapt_field_len_byte + adapt_field_len
-+ }
-+ else
-+ {
-+ return 4; // No adaptation, data starts directly after TS header
-+ }
-+}
-+#endif
-+
- bool cDeCSA::Decrypt(unsigned char *data, int len, bool force)
- {
- cMutexLock lock(&mutex);
-+#ifndef LIBDVBCSA
-+ if (!range)
-+#else
-+ if (!cs_tsbbatch_even || !cs_tsbbatch_odd)
-+#endif
-+ {
-+ PRINTF(L_CORE_CSA,"%s: Error allocating memory for DeCSA", __FUNCTION__);
-+ return false;
-+ }
-+
-+#ifndef LIBDVBCSA
- int r=-2, ccs=0, currIdx=-1;
- bool newRange=true;
- range[0]=0;
-+#else
-+ int ccs = 0, currIdx = -1;
-+ int payload_len, offset;
-+ int cs_fill_even = 0;
-+ int cs_fill_odd = 0;
-+#endif
- len-=(TS_SIZE-1);
- int l;
- for(l=0; l<len; l+=TS_SIZE) {
- if(data[l]!=TS_SYNC_BYTE) { // let higher level cope with that
- PRINTF(L_CORE_CSA,"%s: garbage in TS buffer",devId);
-+#ifndef LIBDVBCSA
- if(ccs) force=true; // prevent buffer stall
-+#endif
- break;
- }
- unsigned int ev_od=data[l+3]&0xC0;
- if(ev_od==0x80 || ev_od==0xC0) { // encrypted
-+#ifdef LIBDVBCSA
-+ offset = ts_packet_get_payload_offset(data + l);
-+ payload_len = TS_SIZE - offset;
-+#endif
- int idx=pidmap[((data[l+1]<<8)+data[l+2])&(MAX_CSA_PIDS-1)];
- if(currIdx<0 || idx==currIdx) { // same or no index
-+#ifdef LIBDVBCSA
-+ data[l + 3] &= 0x3f; // consider it decrypted now
-+#endif
- currIdx=idx;
- if(ccs==0 && ev_od!=even_odd[idx]) {
- even_odd[idx]=ev_od;
-@@ -2917,20 +3011,38 @@
- else PRINTF(L_CORE_CSA,"%s.%d: not active. wait skipped",devId,idx);
- }
- }
-+#ifndef LIBDVBCSA
- if(newRange) {
- r+=2; newRange=false;
- range[r]=&data[l];
- range[r+2]=0;
- }
- range[r+1]=&data[l+TS_SIZE];
-+#else
-+ if (((ev_od & 0x40) >> 6) == 0)
-+ {
-+ cs_tsbbatch_even[cs_fill_even].data = &data[l + offset];
-+ cs_tsbbatch_even[cs_fill_even].len = payload_len;
-+ cs_fill_even++;
-+ }
-+ else
-+ {
-+ cs_tsbbatch_odd[cs_fill_odd].data = &data[l + offset];
-+ cs_tsbbatch_odd[cs_fill_odd].len = payload_len;
-+ cs_fill_odd++;
-+ }
-+#endif
- if(++ccs>=cs) break;
- }
-+#ifndef LIBDVBCSA
- else newRange=true; // other index, create hole
-+#endif
- }
- else { // unencrypted
- // nothing, we don't create holes for unencrypted packets
- }
- }
-+#ifndef LIBDVBCSA
- int scanTS=l/TS_SIZE;
- int stallP=ccs*100/scanTS;
-
-@@ -2977,6 +3089,26 @@
- }
- else PRINTF(L_CORE_CSAVERB,"%s.%d: incomplete ccs=%3d cs=%3d",devId,currIdx,ccs,cs);
- }
-+#else
-+ if (GetKeyStruct(currIdx))
-+ {
-+ if (cs_fill_even)
-+ {
-+ cs_tsbbatch_even[cs_fill_even].data = NULL;
-+ dvbcsa_bs_decrypt(cs_key_even[currIdx], cs_tsbbatch_even, 184);
-+ cs_fill_even = 0;
-+ }
-+ if (cs_fill_odd)
-+ {
-+ cs_tsbbatch_odd[cs_fill_odd].data = NULL;
-+ dvbcsa_bs_decrypt(cs_key_odd[currIdx], cs_tsbbatch_odd, 184);
-+ cs_fill_odd = 0;
-+ }
-+
-+ stall.Set(MAX_STALL_MS);
-+ return true;
-+ }
-+#endif
- return false;
- }
-
-diff -ruN vdr-sc.orig/cam.h vdr-sc/cam.h
---- vdr-sc.orig/cam.h 2013-05-04 22:47:03.631830306 +0200
-+++ vdr-sc/cam.h 2013-05-04 22:49:16.315041313 +0200
-@@ -235,15 +235,28 @@
-
- #ifndef SASC
-
-+#ifdef LIBDVBCSA
-+extern "C" {
-+#include <dvbcsa/dvbcsa.h>
-+}
-+#endif
-+
- #define MAX_CSA_PIDS 8192
- #define MAX_CSA_IDX 16
-
- class cDeCSA {
- private:
- int cs;
-+#ifndef LIBDVBCSA
- unsigned char **range, *lastData;
-- unsigned char pidmap[MAX_CSA_PIDS];
- void *keys[MAX_CSA_IDX];
-+#else
-+ struct dvbcsa_bs_batch_s *cs_tsbbatch_even;
-+ struct dvbcsa_bs_batch_s *cs_tsbbatch_odd;
-+ struct dvbcsa_bs_key_s *cs_key_even[MAX_CSA_IDX];
-+ struct dvbcsa_bs_key_s *cs_key_odd[MAX_CSA_IDX];
-+#endif
-+ unsigned char pidmap[MAX_CSA_PIDS];
- unsigned int even_odd[MAX_CSA_IDX], flags[MAX_CSA_IDX];
- cMutex mutex;
- cCondVar wait;
-diff -ruN vdr-sc.orig/device.c vdr-sc/device.c
---- vdr-sc.orig/device.c 2013-05-04 22:47:03.338513750 +0200
-+++ vdr-sc/device.c 2013-05-04 22:49:16.318374424 +0200
-@@ -52,7 +52,7 @@
- SetDescription("TS buffer on device %d", CardIndex);
- f=File; size=Size; cardIndex=CardIndex; decsa=DeCsa;
- delivered=false;
-- ringBuffer=new cRingBufferLinear(Size,TS_SIZE,true,"FFdecsa-TS");
-+ ringBuffer=new cRingBufferLinear(Size,TS_SIZE,true,RINGBUFFERNAME);
- ringBuffer->SetTimeouts(100,100);
- if(decsa) decsa->SetActive(true);
- SetActive(ScActive);
-diff -ruN vdr-sc.orig/device.h vdr-sc/device.h
---- vdr-sc.orig/device.h 2013-05-04 22:47:03.628497164 +0200
-+++ vdr-sc/device.h 2013-05-04 22:49:16.318374424 +0200
-@@ -25,6 +25,12 @@
- #include <vdr/thread.h>
- #include "misc.h"
-
-+#ifndef LIBDVBCSA
-+#define RINGBUFFERNAME "FFdecsa-TS"
-+#else
-+#define RINGBUFFERNAME "libdvbcsa-ts"
-+#endif
-+
- class cDeCSA;
-
- // ----------------------------------------------------------------
-diff -ruN vdr-sc.orig/Makefile vdr-sc/Makefile
---- vdr-sc.orig/Makefile 2013-05-04 22:47:03.628497164 +0200
-+++ vdr-sc/Makefile 2013-05-04 22:55:28.510416219 +0200
-@@ -143,19 +143,23 @@
- DEFINES += -DVDR_MAXCAID=$(MAXCAID)
- endif
-
-+ifndef LIBDVBCSA
- # FFdeCSA
--CPUOPT ?= pentium
--PARALLEL ?= PARALLEL_32_INT
--CSAFLAGS ?= -Wall -fPIC -g -O3 -mmmx -fomit-frame-pointer -fexpensive-optimizations -funroll-loops
-+PARALLEL ?= PARALLEL_128_SSE2
-+CSAFLAGS ?= -fexpensive-optimizations -funroll-loops -mmmx -msse -msse2 -msse3
- FFDECSADIR = FFdecsa
- FFDECSA = $(FFDECSADIR)/FFdecsa.o
--FFDECSATEST = $(FFDECSADIR)/FFdecsa_test.done
-+DECSALIB = $(FFDECSA)
-+else
-+# libdvbcsa
-+DECSALIB = -ldvbcsa
-+DEFINES += -DLIBDVBCSA
-+endif
-
- # SASC
- ifdef SASC
- DEFINES += -DSASC
- FFDECSA =
--FFDECSATEST =
- endif
-
- # export for system makefiles
-@@ -175,7 +179,7 @@
- else
- BUILDTARGETS = $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION) systems-pre $(DEVPLUGTARGETS)
- endif
--BUILDTARGETS += $(FFDECSATEST) systems i18n
-+BUILDTARGETS += systems i18n
-
- all: $(BUILDTARGETS)
- .PHONY: i18n systems systems-pre contrib clean clean-core clean-systems clean-pre dist srcdist
-@@ -196,7 +200,7 @@
- $(CXX) $(CXXFLAGS) -c $(DEFINES) $(SHAREDDEFINES) $(INCLUDES) $<
-
- libvdr-$(PLUGIN).so: $(OBJS) $(FFDECSA)
-- $(CXX) $(CXXFLAGS) -shared $(OBJS) $(FFDECSA) $(LIBS) $(SHAREDLIBS) -o $@
-+ $(CXX) $(CXXFLAGS) -shared $(OBJS) $(DECSALIB) $(LIBS) $(SHAREDLIBS) -o $@
-
- $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION): libvdr-$(PLUGIN).so
- @cp -p $< $@
-@@ -216,8 +220,10 @@
- $(LIBDIR)/libsc-dvbhddevice-$(SCAPIVERS).so.$(APIVERSION): libsc-dvbhddevice.so
- @cp -p $< $@
-
--$(FFDECSA) $(FFDECSATEST): $(FFDECSADIR)/*.c $(FFDECSADIR)/*.h
-- @$(MAKE) COMPILER="$(CXX)" FLAGS="$(CSAFLAGS) -march=$(CPUOPT)" PARALLEL_MODE=$(PARALLEL) -C $(FFDECSADIR) all
-+ifndef LIBDVBCSA
-+$(FFDECSA): $(FFDECSADIR)/*.c $(FFDECSADIR)/*.h
-+ @$(MAKE) COMPILER="$(CXX)" FLAGS="$(CXXFLAGS) $(CSAFLAGS)" PARALLEL_MODE=$(PARALLEL) -C $(FFDECSADIR) all
-+endif
-
- $(I18Npot): $(shell grep -rl '\(tr\|trNOOP\)(\".*\")' *.c $(SYSDIR))
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR-SC --package-version=$(VERSION) --msgid-bugs-address='<noone@nowhere.org>' -o $@ `ls $^`
diff --git a/vdr-sc-0.9.3.20120815_vdr-2.1.4_compilefix.diff b/vdr-sc-0.9.3.20120815_vdr-2.1.4_compilefix.diff
deleted file mode 100644
index 4d084343c91e..000000000000
--- a/vdr-sc-0.9.3.20120815_vdr-2.1.4_compilefix.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-diff -r 29b7b5f231c8 cam.c
---- a/cam.c Sat Jul 21 20:51:33 2012 +0200
-+++ b/cam.c Wed Jan 08 16:47:38 2014 +0400
-@@ -1841,7 +1841,7 @@
- cScCamSlot(cCam *Cam, const char *DevId, int Slot);
- void Process(const unsigned char *data, int len);
- eModuleStatus Status(void);
-- bool Reset(bool log=true);
-+ bool ResetSlot(bool log=true);
- cCiFrame *Frame(void) { return &frame; }
- };
-
-@@ -1853,7 +1853,7 @@
- cam=Cam; devId=DevId; slot=Slot;
- version=0; caids[0]=0; doReply=false; lastStatus=msReset;
- frame.SetRb(&rb);
-- Reset(false);
-+ ResetSlot(false);
- }
-
- eModuleStatus cScCamSlot::Status(void)
-@@ -1876,7 +1876,7 @@
- return status;
- }
-
--bool cScCamSlot::Reset(bool log)
-+bool cScCamSlot::ResetSlot(bool log)
- {
- reset=true; resetTimer.Set(SLOT_RESET_TIME);
- rb.Clear();
-@@ -1890,7 +1890,7 @@
- bool dr=cam->IsSoftCSA(false) || ScSetup.ConcurrentFF>0;
- if(dr!=doReply && !IsDecrypting()) {
- PRINTF(L_CORE_CI,"%s.%d: doReply changed, reset triggered",devId,slot);
-- Reset(false);
-+ ResetSlot(false);
- doReply=dr;
- }
- if(checkTimer.TimedOut()) {
-@@ -2330,7 +2330,7 @@
- {
- cMutexLock lock(&ciMutex);
- PRINTF(L_CORE_CI,"%s: reset of slot %d requested",devId,Slot);
-- return slots[Slot] ? slots[Slot]->Reset():false;
-+ return slots[Slot] ? slots[Slot]->ResetSlot():false;
- }
-
- eModuleStatus cCam::ModuleStatus(int Slot)
---- a/device-tmpl.c 2012-07-21 20:51:33.000000000 +0200
-+++ b/device-tmpl.c 2014-01-26 13:51:59.000000000 +0100
-@@ -41,7 +41,6 @@
- #endif //!SASC
- protected:
- #ifndef SASC
-- virtual bool Ready(void);
- virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
- virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
- virtual bool OpenDvr(void);
-@@ -164,12 +163,6 @@
- return cam || hwciadapter;
- }
-
--bool SCDEVICE::Ready(void)
--{
-- return (cam ? cam->Ready():true) &&
-- (hwciadapter ? hwciadapter->Ready():true);
--}
--
- bool SCDEVICE::SetPid(cPidHandle *Handle, int Type, bool On)
- {
- if(cam) cam->SetPid(Type,Handle->pid,On);