Lines Matching refs:p

7 void av7110_ipack_reset(struct ipack *p)  in av7110_ipack_reset()  argument
9 p->found = 0; in av7110_ipack_reset()
10 p->cid = 0; in av7110_ipack_reset()
11 p->plength = 0; in av7110_ipack_reset()
12 p->flag1 = 0; in av7110_ipack_reset()
13 p->flag2 = 0; in av7110_ipack_reset()
14 p->hlength = 0; in av7110_ipack_reset()
15 p->mpeg = 0; in av7110_ipack_reset()
16 p->check = 0; in av7110_ipack_reset()
17 p->which = 0; in av7110_ipack_reset()
18 p->done = 0; in av7110_ipack_reset()
19 p->count = 0; in av7110_ipack_reset()
23 int av7110_ipack_init(struct ipack *p, int size, in av7110_ipack_init() argument
26 if (!(p->buf = vmalloc(size*sizeof(u8)))) { in av7110_ipack_init()
30 p->size = size; in av7110_ipack_init()
31 p->func = func; in av7110_ipack_init()
32 p->repack_subids = 0; in av7110_ipack_init()
33 av7110_ipack_reset(p); in av7110_ipack_init()
38 void av7110_ipack_free(struct ipack *p) in av7110_ipack_free() argument
40 vfree(p->buf); in av7110_ipack_free()
44 static void send_ipack(struct ipack *p) in send_ipack() argument
53 switch (p->mpeg) { in send_ipack()
55 if (p->count < 10) in send_ipack()
57 p->buf[3] = p->cid; in send_ipack()
58 p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8); in send_ipack()
59 p->buf[5] = (u8)((p->count - 6) & 0x00ff); in send_ipack()
60 if (p->repack_subids && p->cid == PRIVATE_STREAM1) { in send_ipack()
61 off = 9 + p->buf[8]; in send_ipack()
62 streamid = p->buf[off]; in send_ipack()
65 ac3_off = ((p->buf[off + 2] << 8)| in send_ipack()
66 p->buf[off + 3]); in send_ipack()
67 if (ac3_off < p->count) in send_ipack()
68 f = dvb_filter_get_ac3info(p->buf + off + 3 + ac3_off, in send_ipack()
69 p->count - ac3_off, &ai, 0); in send_ipack()
71 nframes = (p->count - off - 3 - ac3_off) / in send_ipack()
73 p->buf[off + 2] = (ac3_off >> 8) & 0xff; in send_ipack()
74 p->buf[off + 3] = (ac3_off) & 0xff; in send_ipack()
75 p->buf[off + 1] = nframes; in send_ipack()
76 ac3_off += nframes * ai.framesize - p->count; in send_ipack()
80 p->func(p->buf, p->count, p->data); in send_ipack()
82 p->buf[6] = 0x80; in send_ipack()
83 p->buf[7] = 0x00; in send_ipack()
84 p->buf[8] = 0x00; in send_ipack()
85 p->count = 9; in send_ipack()
86 if (p->repack_subids && p->cid == PRIVATE_STREAM1 in send_ipack()
88 p->count += 4; in send_ipack()
89 p->buf[9] = streamid; in send_ipack()
90 p->buf[10] = (ac3_off >> 8) & 0xff; in send_ipack()
91 p->buf[11] = (ac3_off) & 0xff; in send_ipack()
92 p->buf[12] = 0; in send_ipack()
97 if (p->count < 8) in send_ipack()
99 p->buf[3] = p->cid; in send_ipack()
100 p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8); in send_ipack()
101 p->buf[5] = (u8)((p->count - 6) & 0x00ff); in send_ipack()
102 p->func(p->buf, p->count, p->data); in send_ipack()
104 p->buf[6] = 0x0f; in send_ipack()
105 p->count = 7; in send_ipack()
111 void av7110_ipack_flush(struct ipack *p) in av7110_ipack_flush() argument
113 if (p->plength != MMAX_PLENGTH - 6 || p->found <= 6) in av7110_ipack_flush()
115 p->plength = p->found - 6; in av7110_ipack_flush()
116 p->found = 0; in av7110_ipack_flush()
117 send_ipack(p); in av7110_ipack_flush()
118 av7110_ipack_reset(p); in av7110_ipack_flush()
122 static void write_ipack(struct ipack *p, const u8 *data, int count) in write_ipack() argument
126 if (p->count < 6) { in write_ipack()
127 memcpy(p->buf, headr, 3); in write_ipack()
128 p->count = 6; in write_ipack()
131 if (p->count + count < p->size){ in write_ipack()
132 memcpy(p->buf+p->count, data, count); in write_ipack()
133 p->count += count; in write_ipack()
135 int rest = p->size - p->count; in write_ipack()
136 memcpy(p->buf+p->count, data, rest); in write_ipack()
137 p->count += rest; in write_ipack()
138 send_ipack(p); in write_ipack()
140 write_ipack(p, data + rest, count - rest); in write_ipack()
145 int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) in av7110_ipack_instant_repack() argument
150 while (c < count && (p->mpeg == 0 || in av7110_ipack_instant_repack()
151 (p->mpeg == 1 && p->found < 7) || in av7110_ipack_instant_repack()
152 (p->mpeg == 2 && p->found < 9)) in av7110_ipack_instant_repack()
153 && (p->found < 5 || !p->done)) { in av7110_ipack_instant_repack()
154 switch (p->found) { in av7110_ipack_instant_repack()
158 p->found++; in av7110_ipack_instant_repack()
160 p->found = 0; in av7110_ipack_instant_repack()
165 p->found++; in av7110_ipack_instant_repack()
167 p->found = 2; in av7110_ipack_instant_repack()
169 p->found = 0; in av7110_ipack_instant_repack()
173 p->cid = 0; in av7110_ipack_instant_repack()
183 p->done = 1; in av7110_ipack_instant_repack()
188 p->found++; in av7110_ipack_instant_repack()
189 p->cid = buf[c]; in av7110_ipack_instant_repack()
193 p->found = 0; in av7110_ipack_instant_repack()
200 p->plen[0] = buf[c]; in av7110_ipack_instant_repack()
202 p->plen[1] = buf[c]; in av7110_ipack_instant_repack()
204 p->found += 2; in av7110_ipack_instant_repack()
205 p->plength = (p->plen[0] << 8) | p->plen[1]; in av7110_ipack_instant_repack()
207 p->plen[0] = buf[c]; in av7110_ipack_instant_repack()
208 p->found++; in av7110_ipack_instant_repack()
213 p->plen[1] = buf[c]; in av7110_ipack_instant_repack()
215 p->found++; in av7110_ipack_instant_repack()
216 p->plength = (p->plen[0] << 8) | p->plen[1]; in av7110_ipack_instant_repack()
219 if (!p->done) { in av7110_ipack_instant_repack()
220 p->flag1 = buf[c]; in av7110_ipack_instant_repack()
222 p->found++; in av7110_ipack_instant_repack()
223 if ((p->flag1 & 0xc0) == 0x80) in av7110_ipack_instant_repack()
224 p->mpeg = 2; in av7110_ipack_instant_repack()
226 p->hlength = 0; in av7110_ipack_instant_repack()
227 p->which = 0; in av7110_ipack_instant_repack()
228 p->mpeg = 1; in av7110_ipack_instant_repack()
229 p->flag2 = 0; in av7110_ipack_instant_repack()
235 if (!p->done && p->mpeg == 2) { in av7110_ipack_instant_repack()
236 p->flag2 = buf[c]; in av7110_ipack_instant_repack()
238 p->found++; in av7110_ipack_instant_repack()
243 if (!p->done && p->mpeg == 2) { in av7110_ipack_instant_repack()
244 p->hlength = buf[c]; in av7110_ipack_instant_repack()
246 p->found++; in av7110_ipack_instant_repack()
255 if (!p->plength) in av7110_ipack_instant_repack()
256 p->plength = MMAX_PLENGTH - 6; in av7110_ipack_instant_repack()
258 if (p->done || ((p->mpeg == 2 && p->found >= 9) || in av7110_ipack_instant_repack()
259 (p->mpeg == 1 && p->found >= 7))) { in av7110_ipack_instant_repack()
260 switch (p->cid) { in av7110_ipack_instant_repack()
264 if (p->mpeg == 2 && p->found == 9) { in av7110_ipack_instant_repack()
265 write_ipack(p, &p->flag1, 1); in av7110_ipack_instant_repack()
266 write_ipack(p, &p->flag2, 1); in av7110_ipack_instant_repack()
267 write_ipack(p, &p->hlength, 1); in av7110_ipack_instant_repack()
270 if (p->mpeg == 1 && p->found == 7) in av7110_ipack_instant_repack()
271 write_ipack(p, &p->flag1, 1); in av7110_ipack_instant_repack()
273 if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) && in av7110_ipack_instant_repack()
274 p->found < 14) { in av7110_ipack_instant_repack()
275 while (c < count && p->found < 14) { in av7110_ipack_instant_repack()
276 p->pts[p->found - 9] = buf[c]; in av7110_ipack_instant_repack()
277 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
279 p->found++; in av7110_ipack_instant_repack()
285 if (p->mpeg == 1 && p->which < 2000) { in av7110_ipack_instant_repack()
287 if (p->found == 7) { in av7110_ipack_instant_repack()
288 p->check = p->flag1; in av7110_ipack_instant_repack()
289 p->hlength = 1; in av7110_ipack_instant_repack()
292 while (!p->which && c < count && in av7110_ipack_instant_repack()
293 p->check == 0xff){ in av7110_ipack_instant_repack()
294 p->check = buf[c]; in av7110_ipack_instant_repack()
295 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
297 p->found++; in av7110_ipack_instant_repack()
298 p->hlength++; in av7110_ipack_instant_repack()
304 if ((p->check & 0xc0) == 0x40 && !p->which) { in av7110_ipack_instant_repack()
305 p->check = buf[c]; in av7110_ipack_instant_repack()
306 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
308 p->found++; in av7110_ipack_instant_repack()
309 p->hlength++; in av7110_ipack_instant_repack()
311 p->which = 1; in av7110_ipack_instant_repack()
314 p->check = buf[c]; in av7110_ipack_instant_repack()
315 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
317 p->found++; in av7110_ipack_instant_repack()
318 p->hlength++; in av7110_ipack_instant_repack()
319 p->which = 2; in av7110_ipack_instant_repack()
324 if (p->which == 1) { in av7110_ipack_instant_repack()
325 p->check = buf[c]; in av7110_ipack_instant_repack()
326 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
328 p->found++; in av7110_ipack_instant_repack()
329 p->hlength++; in av7110_ipack_instant_repack()
330 p->which = 2; in av7110_ipack_instant_repack()
335 if ((p->check & 0x30) && p->check != 0xff) { in av7110_ipack_instant_repack()
336 p->flag2 = (p->check & 0xf0) << 2; in av7110_ipack_instant_repack()
337 p->pts[0] = p->check; in av7110_ipack_instant_repack()
338 p->which = 3; in av7110_ipack_instant_repack()
343 if (p->which > 2){ in av7110_ipack_instant_repack()
344 if ((p->flag2 & PTS_DTS_FLAGS) == PTS_ONLY) { in av7110_ipack_instant_repack()
345 while (c < count && p->which < 7) { in av7110_ipack_instant_repack()
346 p->pts[p->which - 2] = buf[c]; in av7110_ipack_instant_repack()
347 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
349 p->found++; in av7110_ipack_instant_repack()
350 p->which++; in av7110_ipack_instant_repack()
351 p->hlength++; in av7110_ipack_instant_repack()
355 } else if ((p->flag2 & PTS_DTS_FLAGS) == PTS_DTS) { in av7110_ipack_instant_repack()
356 while (c < count && p->which < 12) { in av7110_ipack_instant_repack()
357 if (p->which < 7) in av7110_ipack_instant_repack()
358 p->pts[p->which - 2] = buf[c]; in av7110_ipack_instant_repack()
359 write_ipack(p, buf + c, 1); in av7110_ipack_instant_repack()
361 p->found++; in av7110_ipack_instant_repack()
362 p->which++; in av7110_ipack_instant_repack()
363 p->hlength++; in av7110_ipack_instant_repack()
368 p->which = 2000; in av7110_ipack_instant_repack()
373 while (c < count && p->found < p->plength + 6) { in av7110_ipack_instant_repack()
375 if (l + p->found > p->plength + 6) in av7110_ipack_instant_repack()
376 l = p->plength + 6 - p->found; in av7110_ipack_instant_repack()
377 write_ipack(p, buf + c, l); in av7110_ipack_instant_repack()
378 p->found += l; in av7110_ipack_instant_repack()
385 if (p->done) { in av7110_ipack_instant_repack()
386 if (p->found + count - c < p->plength + 6) { in av7110_ipack_instant_repack()
387 p->found += count - c; in av7110_ipack_instant_repack()
390 c += p->plength + 6 - p->found; in av7110_ipack_instant_repack()
391 p->found = p->plength + 6; in av7110_ipack_instant_repack()
395 if (p->plength && p->found == p->plength + 6) { in av7110_ipack_instant_repack()
396 send_ipack(p); in av7110_ipack_instant_repack()
397 av7110_ipack_reset(p); in av7110_ipack_instant_repack()
399 av7110_ipack_instant_repack(buf + c, count - c, p); in av7110_ipack_instant_repack()