Lines Matching refs:demux

2  * dvb_demux.c - DVB kernel demux API
155 struct dvb_demux *demux = feed->demux;
169 demux->check_crc32(feed, sec->secbuf, sec->seclen))
224 * when demux is started, let feed->pusi_seen = 0 to
232 struct dvb_demux *demux = feed->demux;
251 demux->memcopy(feed, sec->secbuf_base + sec->tsfeedp, buf, len);
369 if (feed->demux->write_to_decoder)
370 feed->demux->write_to_decoder(feed, buf, 188);
390 static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
400 demux->speed_pkts_cnt++;
403 if (!(demux->speed_pkts_cnt % SPEED_PKTS_INTERVAL)) {
406 if (demux->speed_last_time.tv_sec != 0 &&
407 demux->speed_last_time.tv_nsec != 0) {
409 demux->speed_last_time);
410 speed_bytes = (u64)demux->speed_pkts_cnt
424 demux->speed_last_time = cur_time;
425 demux->speed_pkts_cnt = 0;
429 if (demux->cnt_storage && dvb_demux_tscheck) {
437 if ((buf[3] & 0xf) != demux->cnt_storage[pid])
441 pid, demux->cnt_storage[pid],
444 demux->cnt_storage[pid] = ((buf[3] & 0xf) + 1)&0xf;
449 list_for_each_entry(feed, &demux->feed_list, list_head) {
465 void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
468 spin_lock(&demux->lock);
472 dvb_dmx_swfilter_packet(demux, buf);
476 spin_unlock(&demux->lock);
506 static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf,
512 spin_lock(&demux->lock);
514 if (demux->tsbufp) { /* tsbuf[0] is now 0x47. */
515 i = demux->tsbufp;
518 memcpy(&demux->tsbuf[i], buf, count);
519 demux->tsbufp += count;
522 memcpy(&demux->tsbuf[i], buf, j);
523 if (demux->tsbuf[0] == 0x47) /* double check */
524 dvb_dmx_swfilter_packet(demux, demux->tsbuf);
525 demux->tsbufp = 0;
539 memcpy(demux->tsbuf, q, 188);
540 demux->tsbuf[0] = 0x47;
541 q = demux->tsbuf;
543 dvb_dmx_swfilter_packet(demux, q);
549 memcpy(demux->tsbuf, &buf[p], i);
550 demux->tsbufp = i;
551 if (pktsize == 204 && demux->tsbuf[0] == 0xB8)
552 demux->tsbuf[0] = 0x47;
556 spin_unlock(&demux->lock);
559 void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
561 _dvb_dmx_swfilter(demux, buf, count, 188);
565 void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count)
567 _dvb_dmx_swfilter(demux, buf, count, 204);
571 static struct dvb_demux_filter *dvb_dmx_filter_alloc(struct dvb_demux *demux)
575 for (i = 0; i < demux->filternum; i++)
576 if (demux->filter[i].state == DMX_STATE_FREE)
579 if (i == demux->filternum)
582 demux->filter[i].state = DMX_STATE_ALLOCATED;
584 return &demux->filter[i];
587 static struct dvb_demux_feed *dvb_dmx_feed_alloc(struct dvb_demux *demux)
591 for (i = 0; i < demux->feednum; i++)
592 if (demux->feed[i].state == DMX_STATE_FREE)
595 if (i == demux->feednum)
598 demux->feed[i].state = DMX_STATE_ALLOCATED;
600 return &demux->feed[i];
607 list_for_each_entry(entry, &feed->demux->feed_list, list_head)
616 spin_lock_irq(&feed->demux->lock);
623 list_add(&feed->list_head, &feed->demux->feed_list);
625 spin_unlock_irq(&feed->demux->lock);
630 spin_lock_irq(&feed->demux->lock);
639 spin_unlock_irq(&feed->demux->lock);
647 struct dvb_demux *demux = feed->demux;
652 if (mutex_lock_interruptible(&demux->mutex))
657 mutex_unlock(&demux->mutex);
661 if (demux->pesfilter[pes_type] &&
662 demux->pesfilter[pes_type] != feed) {
663 mutex_unlock(&demux->mutex);
667 demux->pesfilter[pes_type] = feed;
668 demux->pids[pes_type] = pid;
685 mutex_unlock(&demux->mutex);
692 mutex_unlock(&demux->mutex);
700 struct dvb_demux *demux = feed->demux;
703 if (mutex_lock_interruptible(&demux->mutex))
707 mutex_unlock(&demux->mutex);
711 if (!demux->start_feed) {
712 mutex_unlock(&demux->mutex);
716 if ((ret = demux->start_feed(feed)) < 0) {
717 mutex_unlock(&demux->mutex);
721 spin_lock_irq(&demux->lock);
724 spin_unlock_irq(&demux->lock);
725 mutex_unlock(&demux->mutex);
733 struct dvb_demux *demux = feed->demux;
736 mutex_lock(&demux->mutex);
739 mutex_unlock(&demux->mutex);
743 if (!demux->stop_feed) {
744 mutex_unlock(&demux->mutex);
748 ret = demux->stop_feed(feed);
750 spin_lock_irq(&demux->lock);
753 spin_unlock_irq(&demux->lock);
754 mutex_unlock(&demux->mutex);
763 struct dvb_demux *demux = (struct dvb_demux *)dmx;
766 if (mutex_lock_interruptible(&demux->mutex))
769 if (!(feed = dvb_dmx_feed_alloc(demux))) {
770 mutex_unlock(&demux->mutex);
776 feed->demux = demux;
789 if (!(feed->filter = dvb_dmx_filter_alloc(demux))) {
791 mutex_unlock(&demux->mutex);
799 mutex_unlock(&demux->mutex);
807 struct dvb_demux *demux = (struct dvb_demux *)dmx;
810 mutex_lock(&demux->mutex);
813 mutex_unlock(&demux->mutex);
829 demux->pesfilter[feed->pes_type] = NULL;
831 mutex_unlock(&demux->mutex);
843 struct dvb_demux *dvbdemux = dvbdmxfeed->demux;
875 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
929 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
974 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
1000 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
1029 static int dvbdmx_allocate_section_feed(struct dmx_demux *demux,
1033 struct dvb_demux *dvbdmx = (struct dvb_demux *)demux;
1046 dvbdmxfeed->demux = dvbdmx;
1056 (*feed)->parent = demux;
1069 static int dvbdmx_release_section_feed(struct dmx_demux *demux,
1073 struct dvb_demux *dvbdmx = (struct dvb_demux *)demux;
1099 static int dvbdmx_open(struct dmx_demux *demux)
1101 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1110 static int dvbdmx_close(struct dmx_demux *demux)
1112 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1122 static int dvbdmx_write(struct dmx_demux *demux, const char __user *buf, size_t count)
1124 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1127 if ((!demux->frontend) || (demux->frontend->source != DMX_MEMORY_FE))
1146 static int dvbdmx_add_frontend(struct dmx_demux *demux,
1149 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1157 static int dvbdmx_remove_frontend(struct dmx_demux *demux,
1160 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1173 static struct list_head *dvbdmx_get_frontends(struct dmx_demux *demux)
1175 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1183 static int dvbdmx_connect_frontend(struct dmx_demux *demux,
1186 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1188 if (demux->frontend)
1193 demux->frontend = frontend;
1198 static int dvbdmx_disconnect_frontend(struct dmx_demux *demux)
1200 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
1204 demux->frontend = NULL;
1209 static int dvbdmx_get_pes_pids(struct dmx_demux *demux, u16 * pids)
1211 struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;