int av7110_ipack_init(struct ipack *p, int size,
- void (*func)(u8 *buf, int size, void *priv))
+ void (*func)(u8 *buf, int size, void *priv))
{
- if ( !(p->buf = vmalloc(size*sizeof(u8))) ){
+ if (!(p->buf = vmalloc(size*sizeof(u8)))) {
printk ("Couldn't allocate memory for ipack\n");
return -ENOMEM;
}
}
-void av7110_ipack_free(struct ipack * p)
+void av7110_ipack_free(struct ipack *p)
{
- if (p->buf)
- vfree(p->buf);
+ vfree(p->buf);
}
int off;
struct dvb_audio_info ai;
int ac3_off = 0;
- int streamid=0;
- int nframes= 0;
- int f=0;
+ int streamid = 0;
+ int nframes = 0;
+ int f = 0;
- switch ( p->mpeg ){
- case 2:
+ switch (p->mpeg) {
+ case 2:
if (p->count < 10)
return;
p->buf[3] = p->cid;
p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8);
p->buf[5] = (u8)((p->count - 6) & 0x00ff);
- if (p->repack_subids && p->cid == PRIVATE_STREAM1){
- off = 9+p->buf[8];
+ if (p->repack_subids && p->cid == PRIVATE_STREAM1) {
+ off = 9 + p->buf[8];
streamid = p->buf[off];
if ((streamid & 0xf8) == 0x80) {
ai.off = 0;
- ac3_off = ((p->buf[off+2] << 8)|
- p->buf[off+3]);
+ ac3_off = ((p->buf[off + 2] << 8)|
+ p->buf[off + 3]);
if (ac3_off < p->count)
- f=dvb_filter_get_ac3info(p->buf+off+3+ac3_off,
- p->count-ac3_off, &ai,0);
- if ( !f ){
- nframes = (p->count-off-3-ac3_off)/
+ f = dvb_filter_get_ac3info(p->buf + off + 3 + ac3_off,
+ p->count - ac3_off, &ai, 0);
+ if (!f) {
+ nframes = (p->count - off - 3 - ac3_off) /
ai.framesize + 1;
p->buf[off + 2] = (ac3_off >> 8) & 0xff;
p->buf[off + 3] = (ac3_off) & 0xff;
- p->buf[off+1] = nframes;
+ p->buf[off + 1] = nframes;
ac3_off += nframes * ai.framesize - p->count;
}
}
- }
+ }
p->func(p->buf, p->count, p->data);
-
+
p->buf[6] = 0x80;
p->buf[7] = 0x00;
p->buf[8] = 0x00;
p->count = 9;
- if (p->repack_subids && p->cid == PRIVATE_STREAM1
+ if (p->repack_subids && p->cid == PRIVATE_STREAM1
&& (streamid & 0xf8) == 0x80) {
p->count += 4;
p->buf[9] = streamid;
p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8);
p->buf[5] = (u8)((p->count - 6) & 0x00ff);
p->func(p->buf, p->count, p->data);
-
+
p->buf[6] = 0x0f;
p->count = 7;
break;
void av7110_ipack_flush(struct ipack *p)
{
- if (p->plength != MMAX_PLENGTH-6 || p->found<=6)
+ if (p->plength != MMAX_PLENGTH - 6 || p->found <= 6)
return;
- p->plength = p->found-6;
+ p->plength = p->found - 6;
p->found = 0;
send_ipack(p);
av7110_ipack_reset(p);
static void write_ipack(struct ipack *p, const u8 *data, int count)
{
- u8 headr[3] = { 0x00, 0x00, 0x01} ;
+ u8 headr[3] = { 0x00, 0x00, 0x01 };
- if (p->count < 6){
+ if (p->count < 6) {
memcpy(p->buf, headr, 3);
p->count = 6;
}
p->count += rest;
send_ipack(p);
if (count - rest > 0)
- write_ipack(p, data+rest, count-rest);
+ write_ipack(p, data + rest, count - rest);
}
}
int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p)
{
int l;
- int c=0;
+ int c = 0;
while (c < count && (p->mpeg == 0 ||
(p->mpeg == 1 && p->found < 7) ||
(p->mpeg == 2 && p->found < 9))
- && (p->found < 5 || !p->done)){
- switch ( p->found ){
+ && (p->found < 5 || !p->done)) {
+ switch (p->found) {
case 0:
case 1:
if (buf[c] == 0x00)
break;
case 3:
p->cid = 0;
- switch (buf[c]){
+ switch (buf[c]) {
case PROG_STREAM_MAP:
case PRIVATE_STREAM2:
case PROG_STREAM_DIR:
break;
}
break;
-
+
case 4:
- if (count-c > 1){
+ if (count-c > 1) {
p->plen[0] = buf[c];
c++;
p->plen[1] = buf[c];
c++;
- p->found+=2;
- p->plength=(p->plen[0]<<8)|p->plen[1];
- } else {
+ p->found += 2;
+ p->plength = (p->plen[0] << 8) | p->plen[1];
+ } else {
p->plen[0] = buf[c];
p->found++;
return count;
p->plen[1] = buf[c];
c++;
p->found++;
- p->plength=(p->plen[0]<<8)|p->plen[1];
+ p->plength = (p->plen[0] << 8) | p->plen[1];
break;
case 6:
- if (!p->done){
+ if (!p->done) {
p->flag1 = buf[c];
c++;
p->found++;
break;
case 7:
- if ( !p->done && p->mpeg == 2) {
+ if (!p->done && p->mpeg == 2) {
p->flag2 = buf[c];
c++;
p->found++;
- }
+ }
break;
case 8:
- if ( !p->done && p->mpeg == 2) {
+ if (!p->done && p->mpeg == 2) {
p->hlength = buf[c];
c++;
p->found++;
if (!p->plength)
p->plength = MMAX_PLENGTH - 6;
- if ( p->done || ((p->mpeg == 2 && p->found >= 9) ||
- (p->mpeg == 1 && p->found >= 7)) ){
- switch (p->cid){
-
- case AUDIO_STREAM_S ... AUDIO_STREAM_E:
+ if (p->done || ((p->mpeg == 2 && p->found >= 9) ||
+ (p->mpeg == 1 && p->found >= 7))) {
+ switch (p->cid) {
+ case AUDIO_STREAM_S ... AUDIO_STREAM_E:
case VIDEO_STREAM_S ... VIDEO_STREAM_E:
case PRIVATE_STREAM1:
-
if (p->mpeg == 2 && p->found == 9) {
write_ipack(p, &p->flag1, 1);
write_ipack(p, &p->flag2, 1);
write_ipack(p, &p->hlength, 1);
}
- if (p->mpeg == 1 && p->found == 7)
+ if (p->mpeg == 1 && p->found == 7)
write_ipack(p, &p->flag1, 1);
-
- if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) &&
+
+ if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) &&
p->found < 14) {
while (c < count && p->found < 14) {
- p->pts[p->found-9] = buf[c];
- write_ipack(p, buf+c, 1);
+ p->pts[p->found - 9] = buf[c];
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
}
p->hlength = 1;
}
- while (!p->which && c < count &&
+ while (!p->which && c < count &&
p->check == 0xff){
p->check = buf[c];
- write_ipack(p, buf+c, 1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->hlength++;
}
-
+
if (c == count)
return count;
-
+
if ((p->check & 0xc0) == 0x40 && !p->which) {
p->check = buf[c];
- write_ipack(p, buf+c, 1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->hlength++;
-
+
p->which = 1;
if (c == count)
return count;
p->check = buf[c];
- write_ipack(p, buf+c, 1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->hlength++;
if (c == count)
return count;
}
-
- if (p->which == 1){
+
+ if (p->which == 1) {
p->check = buf[c];
- write_ipack(p, buf+c, 1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->hlength++;
if (c == count)
return count;
}
-
+
if ((p->check & 0x30) && p->check != 0xff) {
p->flag2 = (p->check & 0xf0) << 2;
p->pts[0] = p->check;
p->which = 3;
- }
-
+ }
+
if (c == count)
return count;
if (p->which > 2){
if ((p->flag2 & PTS_DTS_FLAGS) == PTS_ONLY) {
while (c < count && p->which < 7) {
p->pts[p->which - 2] = buf[c];
- write_ipack(p,buf+c,1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->which++;
return count;
} else if ((p->flag2 & PTS_DTS_FLAGS) == PTS_DTS) {
while (c < count && p->which < 12) {
- if (p->which< 7)
+ if (p->which < 7)
p->pts[p->which - 2] = buf[c];
- write_ipack(p,buf+c,1);
+ write_ipack(p, buf + c, 1);
c++;
p->found++;
p->which++;
}
p->which = 2000;
}
-
+
}
-
- while (c < count && p->found < p->plength+6){
- l = count -c;
- if (l+p->found > p->plength+6)
- l = p->plength+6-p->found;
- write_ipack(p, buf+c, l);
+
+ while (c < count && p->found < p->plength + 6) {
+ l = count - c;
+ if (l + p->found > p->plength + 6)
+ l = p->plength + 6 - p->found;
+ write_ipack(p, buf + c, l);
p->found += l;
c += l;
- }
-
+ }
break;
}
- if ( p->done ){
- if( p->found + count - c < p->plength+6){
- p->found += count-c;
+ if (p->done) {
+ if (p->found + count - c < p->plength + 6) {
+ p->found += count - c;
c = count;
} else {
- c += p->plength+6 - p->found;
- p->found = p->plength+6;
+ c += p->plength + 6 - p->found;
+ p->found = p->plength + 6;
}
}
- if (p->plength && p->found == p->plength+6) {
+ if (p->plength && p->found == p->plength + 6) {
send_ipack(p);
av7110_ipack_reset(p);
if (c < count)
- av7110_ipack_instant_repack(buf+c, count-c, p);
+ av7110_ipack_instant_repack(buf + c, count - c, p);
}
}
return count;
}
-