• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/dvb/dvb-core/

Lines Matching defs:feed

72 	return (f->feed.sec.crc_val = crc32_be(f->feed.sec.crc_val, src, len));
85 static inline int dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed,
100 ccok = ((feed->cc + 1) & 0x0f) == cc;
101 feed->cc = cc;
107 feed->peslen = 0xfffa;
109 feed->peslen += count;
111 return feed->cb.ts(&buf[p], count, NULL, 0, &feed->feed.ts, DMX_OK);
114 static int dvb_dmx_swfilter_sectionfilter(struct dvb_demux_feed *feed,
121 u8 xor = f->filter.filter_value[i] ^ feed->feed.sec.secbuf[i];
132 return feed->cb.sec(feed->feed.sec.secbuf, feed->feed.sec.seclen,
136 static inline int dvb_dmx_swfilter_section_feed(struct dvb_demux_feed *feed)
138 struct dvb_demux *demux = feed->demux;
139 struct dvb_demux_filter *f = feed->filter;
140 struct dmx_section_feed *sec = &feed->feed.sec;
152 demux->check_crc32(feed, sec->secbuf, sec->seclen))
157 if (dvb_dmx_swfilter_sectionfilter(feed, f) < 0)
166 static void dvb_dmx_swfilter_section_new(struct dvb_demux_feed *feed)
168 struct dmx_section_feed *sec = &feed->feed.sec;
201 * In this case, without feed->pusi_seen you'll receive a garbage section
207 * when demux is started, let feed->pusi_seen = 0 to
210 * then set feed->pusi_seen = 1
212 static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed,
215 struct dvb_demux *demux = feed->demux;
216 struct dmx_section_feed *sec = &feed->feed.sec;
234 demux->memcopy(feed, sec->secbuf_base + sec->tsfeedp, buf, len);
255 if (feed->pusi_seen)
256 dvb_dmx_swfilter_section_feed(feed);
268 static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed,
283 ccok = ((feed->cc + 1) & 0x0f) == cc;
284 feed->cc = cc;
305 feed->pusi_seen = 0;
306 dvb_dmx_swfilter_section_new(feed);
317 dvb_dmx_swfilter_section_copy_dump(feed, before,
320 feed->pusi_seen = 1;
321 dvb_dmx_swfilter_section_new(feed);
322 dvb_dmx_swfilter_section_copy_dump(feed, after,
331 dvb_dmx_swfilter_section_copy_dump(feed, &buf[p], count);
337 static inline void dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed,
340 switch (feed->type) {
342 if (!feed->feed.ts.is_filtering)
344 if (feed->ts_type & TS_PACKET) {
345 if (feed->ts_type & TS_PAYLOAD_ONLY)
346 dvb_dmx_swfilter_payload(feed, buf);
348 feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts,
351 if (feed->ts_type & TS_DECODER)
352 if (feed->demux->write_to_decoder)
353 feed->demux->write_to_decoder(feed, buf, 188);
357 if (!feed->feed.sec.is_filtering)
359 if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
360 feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
370 ((f)->feed.ts.is_filtering) && \
375 struct dvb_demux_feed *feed;
381 feed = list_entry(pos, struct dvb_demux_feed, list_head);
383 if ((feed->pid != pid) && (feed->pid != 0x2000))
388 if ((DVR_FEED(feed)) && (dvr_done++))
391 if (feed->pid == pid) {
392 dvb_dmx_swfilter_packet_type(feed, buf);
393 if (DVR_FEED(feed))
397 if (feed->pid == 0x2000)
398 feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK);
532 if (demux->feed[i].state == DMX_STATE_FREE)
538 demux->feed[i].state = DMX_STATE_ALLOCATED;
540 return &demux->feed[i];
543 static int dvb_demux_feed_find(struct dvb_demux_feed *feed)
547 list_for_each_entry(entry, &feed->demux->feed_list, list_head)
548 if (entry == feed)
554 static void dvb_demux_feed_add(struct dvb_demux_feed *feed)
556 spin_lock_irq(&feed->demux->lock);
557 if (dvb_demux_feed_find(feed)) {
558 printk(KERN_ERR "%s: feed already in list (type=%x state=%x pid=%x)\n",
559 __FUNCTION__, feed->type, feed->state, feed->pid);
563 list_add(&feed->list_head, &feed->demux->feed_list);
565 spin_unlock_irq(&feed->demux->lock);
568 static void dvb_demux_feed_del(struct dvb_demux_feed *feed)
570 spin_lock_irq(&feed->demux->lock);
571 if (!(dvb_demux_feed_find(feed))) {
572 printk(KERN_ERR "%s: feed not in list (type=%x state=%x pid=%x)\n",
573 __FUNCTION__, feed->type, feed->state, feed->pid);
577 list_del(&feed->list_head);
579 spin_unlock_irq(&feed->demux->lock);
586 struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
587 struct dvb_demux *demux = feed->demux;
602 demux->pesfilter[pes_type] != feed) {
607 demux->pesfilter[pes_type] = feed;
611 dvb_demux_feed_add(feed);
613 feed->pid = pid;
614 feed->buffer_size = circular_buffer_size;
615 feed->timeout = timeout;
616 feed->ts_type = ts_type;
617 feed->pes_type = pes_type;
619 if (feed->buffer_size) {
621 feed->buffer = NULL;
623 feed->buffer = vmalloc(feed->buffer_size);
624 if (!feed->buffer) {
631 feed->state = DMX_STATE_READY;
639 struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
640 struct dvb_demux *demux = feed->demux;
646 if (feed->state != DMX_STATE_READY || feed->type != DMX_TYPE_TS) {
656 if ((ret = demux->start_feed(feed)) < 0) {
663 feed->state = DMX_STATE_GO;
672 struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
673 struct dvb_demux *demux = feed->demux;
678 if (feed->state < DMX_STATE_GO) {
688 ret = demux->stop_feed(feed);
692 feed->state = DMX_STATE_ALLOCATED;
704 struct dvb_demux_feed *feed;
709 if (!(feed = dvb_dmx_feed_alloc(demux))) {
714 feed->type = DMX_TYPE_TS;
715 feed->cb.ts = callback;
716 feed->demux = demux;
717 feed->pid = 0xffff;
718 feed->peslen = 0xfffa;
719 feed->buffer = NULL;
721 (*ts_feed) = &feed->feed.ts;
729 if (!(feed->filter = dvb_dmx_filter_alloc(demux))) {
730 feed->state = DMX_STATE_FREE;
735 feed->filter->type = DMX_TYPE_TS;
736 feed->filter->feed = feed;
737 feed->filter->state = DMX_STATE_READY;
748 struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
752 if (feed->state == DMX_STATE_FREE) {
757 vfree(feed->buffer);
758 feed->buffer = NULL;
761 feed->state = DMX_STATE_FREE;
762 feed->filter->state = DMX_STATE_FREE;
764 dvb_demux_feed_del(feed);
766 feed->pid = 0xffff;
768 if (feed->ts_type & TS_DECODER && feed->pes_type < DMX_TS_PES_OTHER)
769 demux->pesfilter[feed->pes_type] = NULL;
779 static int dmx_section_feed_allocate_filter(struct dmx_section_feed *feed,
782 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
797 (*filter)->parent = feed;
799 dvbdmxfilter->feed = dvbdmxfeed;
810 static int dmx_section_feed_set(struct dmx_section_feed *feed,
814 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
827 dvbdmxfeed->feed.sec.check_crc = check_crc;
866 static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed)
868 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
875 if (feed->is_filtering) {
885 dvbdmxfeed->feed.sec.tsfeedp = 0;
886 dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base;
887 dvbdmxfeed->feed.sec.secbufp = 0;
888 dvbdmxfeed->feed.sec.seclen = 0;
903 feed->is_filtering = 1;
911 static int dmx_section_feed_stop_filtering(struct dmx_section_feed *feed)
913 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
928 feed->is_filtering = 0;
935 static int dmx_section_feed_release_filter(struct dmx_section_feed *feed,
939 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
944 if (dvbdmxfilter->feed != dvbdmxfeed) {
949 if (feed->is_filtering)
950 feed->stop_filtering(feed);
970 struct dmx_section_feed **feed,
988 dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base;
989 dvbdmxfeed->feed.sec.secbufp = dvbdmxfeed->feed.sec.seclen = 0;
990 dvbdmxfeed->feed.sec.tsfeedp = 0;
994 (*feed) = &dvbdmxfeed->feed.sec;
995 (*feed)->is_filtering = 0;
996 (*feed)->parent = demux;
997 (*feed)->priv = NULL;
999 (*feed)->set = dmx_section_feed_set;
1000 (*feed)->allocate_filter = dmx_section_feed_allocate_filter;
1001 (*feed)->start_filtering = dmx_section_feed_start_filtering;
1002 (*feed)->stop_filtering = dmx_section_feed_stop_filtering;
1003 (*feed)->release_filter = dmx_section_feed_release_filter;
1010 struct dmx_section_feed *feed)
1012 struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
1160 dvbdemux->feed = vmalloc(dvbdemux->feednum * sizeof(struct dvb_demux_feed));
1161 if (!dvbdemux->feed) {
1170 dvbdemux->feed[i].state = DMX_STATE_FREE;
1171 dvbdemux->feed[i].index = i;
1221 vfree(dvbdemux->feed);