Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 261487
b: refs/heads/master
c: 36e3fc8
h: refs/heads/master
i:
  261485: 32ad376
  261483: 52b3eaa
  261479: b23ea8a
  261471: 8ce5bef
v: v3
  • Loading branch information
Oliver Endriss authored and Mauro Carvalho Chehab committed Jul 27, 2011
1 parent 98a4ed8 commit b66cba5
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3b2cfd6e1a4e727787b0a27ee7985e4012d7a142
refs/heads/master: 36e3fc8957abffa3218a6e3b61bef335eea80c03
2 changes: 1 addition & 1 deletion trunk/drivers/media/dvb/ngene/ngene-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ void FillTSBuffer(void *Buffer, int Length, u32 Flags)
{
u32 *ptr = Buffer;

memset(Buffer, 0xff, Length);
memset(Buffer, TS_FILLER, Length);
while (Length > 0) {
if (Flags & DF_SWAP32)
*ptr = 0x471FFF10;
Expand Down
42 changes: 36 additions & 6 deletions trunk/drivers/media/dvb/ngene/ngene-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,16 @@ static void swap_buffer(u32 *p, u32 len)
}
}

/* start of filler packet */
static u8 fill_ts[] = { 0x47, 0x1f, 0xff, 0x10, TS_FILLER };

/* #define DEBUG_CI_XFER */
#ifdef DEBUG_CI_XFER
static u32 ok;
static u32 overflow;
static u32 stripped;
#endif

void *tsin_exchange(void *priv, void *buf, u32 len, u32 clock, u32 flags)
{
struct ngene_channel *chan = priv;
Expand All @@ -126,21 +136,41 @@ void *tsin_exchange(void *priv, void *buf, u32 len, u32 clock, u32 flags)

if (flags & DF_SWAP32)
swap_buffer(buf, len);

if (dev->ci.en && chan->number == 2) {
if (dvb_ringbuffer_free(&dev->tsin_rbuf) > len) {
dvb_ringbuffer_write(&dev->tsin_rbuf, buf, len);
wake_up_interruptible(&dev->tsin_rbuf.queue);
while (len >= 188) {
if (memcmp(buf, fill_ts, sizeof fill_ts) != 0) {
if (dvb_ringbuffer_free(&dev->tsin_rbuf) >= 188) {
dvb_ringbuffer_write(&dev->tsin_rbuf, buf, 188);
wake_up(&dev->tsin_rbuf.queue);
#ifdef DEBUG_CI_XFER
ok++;
#endif
}
#ifdef DEBUG_CI_XFER
else
overflow++;
#endif
}
#ifdef DEBUG_CI_XFER
else
stripped++;

if (ok % 100 == 0 && overflow)
printk(KERN_WARNING "%s: ok %u overflow %u dropped %u\n", __func__, ok, overflow, stripped);
#endif
buf += 188;
len -= 188;
}
return 0;
return NULL;
}

if (chan->users > 0)
dvb_dmx_swfilter(&chan->demux, buf, len);

return NULL;
}

u8 fill_ts[188] = { 0x47, 0x1f, 0xff, 0x10 };

void *tsout_exchange(void *priv, void *buf, u32 len, u32 clock, u32 flags)
{
struct ngene_channel *chan = priv;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/media/dvb/ngene/ngene.h
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,8 @@ struct ngene {
u8 uart_rbuf[UART_RBUF_LEN];
int uart_rp, uart_wp;

#define TS_FILLER 0x6f

u8 *tsout_buf;
#define TSOUT_BUF_SIZE (512*188*8)
struct dvb_ringbuffer tsout_rbuf;
Expand Down

0 comments on commit b66cba5

Please sign in to comment.