From dcddcb9c8a8ac5a38917fddcfd75a254b2cef8c1 Mon Sep 17 00:00:00 2001 From: leslie Date: Tue, 14 Oct 2008 17:27:44 +0800 Subject: [PATCH] prevent TS buffer stall --- cam.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cam.c b/cam.c index 7bd3cfc..5ec3a4d 100644 --- a/cam.c +++ b/cam.c @@ -2406,7 +2406,7 @@ bool cDeCSA::Decrypt(unsigned char *data, int len, bool force) class cDeCsaTSBuffer : public cThread { private: int f; - int cardIndex; + int cardIndex, size; bool delivered; cRingBufferLinear *ringBuffer; // @@ -2426,7 +2426,7 @@ public: cDeCsaTSBuffer::cDeCsaTSBuffer(int File, int Size, int CardIndex, cDeCSA *DeCsa, bool ScActive) { SetDescription("TS buffer on device %d", CardIndex); - f=File; cardIndex=CardIndex; decsa=DeCsa; + f=File; size=Size; cardIndex=CardIndex; decsa=DeCsa; delivered=false; lastP=0; lastCount=0; ringBuffer=new cRingBufferLinear(Size,TS_SIZE,true,"FFdecsa-TS"); @@ -2484,7 +2484,7 @@ uchar *cDeCsaTSBuffer::Get(void) if(scActive && (p[3]&0xC0)) { if(decsa) { - if(!decsa->Decrypt(p,Count,(lastP==p && lastCount==Count))) { + if(!decsa->Decrypt(p,Count,(lastP==p && (lastCount==Count || Count>size/5)))) { lastP=p; lastCount=Count; cCondWait::SleepMs(20); return NULL; -- 2.39.5