Lines Matching defs:filter

378 				       struct dmx_section_filter *filter,
381 struct dmxdev_filter *dmxdevfilter = filter->priv;
476 /* stop feed but only mark the specified filter as stopped (state set) */
498 /* start feed associated with the specified filter */
499 static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
504 dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
506 switch (filter->type) {
508 return filter->feed.sec->start_filtering(filter->feed.sec);
510 list_for_each_entry(feed, &filter->feed.ts, next) {
513 dvb_dmxdev_feed_stop(filter);
527 static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter)
530 struct dmxdev *dmxdev = filter->dev;
531 u16 pid = filter->params.sec.pid;
534 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
535 dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
536 dmxdev->filter[i].params.sec.pid == pid) {
537 dvb_dmxdev_feed_start(&dmxdev->filter[i]);
541 filter->dev->demux->release_section_feed(dmxdev->demux,
542 filter->feed.sec);
560 if (dmxdevfilter->filter.sec)
563 dmxdevfilter->filter.sec);
612 struct dmxdev_filter *filter,
616 struct dmx_pes_filter_params *para = &filter->params.pes;
646 tsfeed->priv = filter;
663 static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
665 struct dmxdev *dmxdev = filter->dev;
670 if (filter->state < DMXDEV_STATE_SET)
673 if (filter->state >= DMXDEV_STATE_GO)
674 dvb_dmxdev_filter_stop(filter);
676 if (!filter->buffer.data) {
677 mem = vmalloc(filter->buffer.size);
680 spin_lock_irq(&filter->dev->lock);
681 filter->buffer.data = mem;
682 spin_unlock_irq(&filter->dev->lock);
685 dvb_ringbuffer_flush(&filter->buffer);
687 switch (filter->type) {
690 struct dmx_sct_filter_params *para = &filter->params.sec;
691 struct dmx_section_filter **secfilter = &filter->filter.sec;
692 struct dmx_section_feed **secfeed = &filter->feed.sec;
698 /* find active filter/feed with same PID */
700 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
701 dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
702 dmxdev->filter[i].params.sec.pid == para->pid) {
703 *secfeed = dmxdev->filter[i].feed.sec;
724 dvb_dmxdev_feed_restart(filter);
728 dvb_dmxdev_feed_stop(filter);
733 dvb_dmxdev_feed_restart(filter);
734 filter->feed.sec->start_filtering(*secfeed);
735 dprintk("could not get filter\n");
739 (*secfilter)->priv = filter;
742 &(para->filter.filter[1]), DMX_FILTER_SIZE - 1);
744 &para->filter.mask[1], DMX_FILTER_SIZE - 1);
746 &para->filter.mode[1], DMX_FILTER_SIZE - 1);
748 (*secfilter)->filter_value[0] = para->filter.filter[0];
749 (*secfilter)->filter_mask[0] = para->filter.mask[0];
750 (*secfilter)->filter_mode[0] = para->filter.mode[0];
754 filter->todo = 0;
756 ret = filter->feed.sec->start_filtering(filter->feed.sec);
760 dvb_dmxdev_filter_timer(filter);
764 list_for_each_entry(feed, &filter->feed.ts, next) {
765 ret = dvb_dmxdev_start_feed(dmxdev, filter, feed);
767 dvb_dmxdev_filter_stop(filter);
776 dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
787 if (!dmxdev->filter)
799 if (dmxdev->filter[i].state == DMXDEV_STATE_FREE)
807 dmxdevfilter = &dmxdev->filter[i];
859 static inline void invert_mode(struct dmx_filter *filter)
864 filter->mode[i] ^= 0xff;
868 struct dmxdev_filter *filter, u16 pid)
872 if ((filter->type != DMXDEV_TYPE_PES) ||
873 (filter->state < DMXDEV_STATE_SET))
877 if ((filter->params.pes.output != DMX_OUT_TSDEMUX_TAP) &&
878 (!list_empty(&filter->feed.ts)))
886 list_add(&feed->next, &filter->feed.ts);
888 if (filter->state >= DMXDEV_STATE_GO)
889 return dvb_dmxdev_start_feed(dmxdev, filter, feed);
895 struct dmxdev_filter *filter, u16 pid)
899 if ((filter->type != DMXDEV_TYPE_PES) ||
900 (filter->state < DMXDEV_STATE_SET))
903 list_for_each_entry_safe(feed, tmp, &filter->feed.ts, next) {
906 filter->dev->demux->release_ts_feed(filter->dev->demux,
928 invert_mode(&dmxdevfilter->params.sec.filter);
1416 dmxdev->filter = vmalloc(array_size(sizeof(struct dmxdev_filter),
1418 if (!dmxdev->filter)
1424 dmxdev->filter[i].dev = dmxdev;
1425 dmxdev->filter[i].buffer.data = NULL;
1426 dvb_dmxdev_filter_state_set(&dmxdev->filter[i],
1447 vfree(dmxdev->filter);
1448 dmxdev->filter = NULL;
1472 vfree(dmxdev->filter);
1473 dmxdev->filter = NULL;