亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? video-buf-dvb.c

?? V4l driver for DVB HD
?? C
字號:
/* * * some helper function for simple DVB cards which simply DMA the * complete transport stream and let the computer sort everything else * (i.e. we are using the software demux, ...).  Also uses the * video-buf to manage DMA buffers. * * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SUSE Labs] * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */#include "compat.h"#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)#include <linux/module.h>#include <linux/init.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/kthread.h>#include <linux/file.h>#include <linux/suspend.h>#include <media/video-buf.h>#include <media/video-buf-dvb.h>/* ------------------------------------------------------------------ */MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");MODULE_LICENSE("GPL");static unsigned int debug = 0;module_param(debug, int, 0644);MODULE_PARM_DESC(debug,"enable debug messages");#define dprintk(fmt, arg...)	if (debug)			\	printk(KERN_DEBUG "%s/dvb: " fmt, dvb->name , ## arg)/* ------------------------------------------------------------------ */static int videobuf_dvb_thread(void *data){	struct videobuf_dvb *dvb = data;	struct videobuf_buffer *buf;	unsigned long flags;	int err;	dprintk("dvb thread started\n");	videobuf_read_start(&dvb->dvbq);	for (;;) {		/* fetch next buffer */		buf = list_entry(dvb->dvbq.stream.next,				 struct videobuf_buffer, stream);		list_del(&buf->stream);		err = videobuf_waiton(buf,0,1);		BUG_ON(0 != err);		/* no more feeds left or stop_feed() asked us to quit */		if (0 == dvb->nfeeds)			break;		if (kthread_should_stop())			break;#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)		try_to_freeze();#else		if (current->flags & PF_FREEZE) {			refrigerator (PF_FREEZE);		}#endif		/* feed buffer data to demux */		if (buf->state == STATE_DONE)			dvb_dmx_swfilter(&dvb->demux, buf->dma.vmalloc,					 buf->size);		/* requeue buffer */		list_add_tail(&buf->stream,&dvb->dvbq.stream);		spin_lock_irqsave(dvb->dvbq.irqlock,flags);		dvb->dvbq.ops->buf_queue(&dvb->dvbq,buf);		spin_unlock_irqrestore(dvb->dvbq.irqlock,flags);	}	videobuf_read_stop(&dvb->dvbq);	dprintk("dvb thread stopped\n");	/* Hmm, linux becomes *very* unhappy without this ... */	while (!kthread_should_stop()) {		set_current_state(TASK_INTERRUPTIBLE);		schedule();	}	return 0;}static int videobuf_dvb_start_feed(struct dvb_demux_feed *feed){	struct dvb_demux *demux  = feed->demux;	struct videobuf_dvb *dvb = demux->priv;	int rc;	if (!demux->dmx.frontend)		return -EINVAL;	mutex_lock(&dvb->lock);	dvb->nfeeds++;	rc = dvb->nfeeds;	if (NULL != dvb->thread)		goto out;	dvb->thread = kthread_run(videobuf_dvb_thread,				  dvb, "%s dvb", dvb->name);	if (IS_ERR(dvb->thread)) {		rc = PTR_ERR(dvb->thread);		dvb->thread = NULL;	}out:	mutex_unlock(&dvb->lock);	return rc;}static int videobuf_dvb_stop_feed(struct dvb_demux_feed *feed){	struct dvb_demux *demux  = feed->demux;	struct videobuf_dvb *dvb = demux->priv;	int err = 0;	mutex_lock(&dvb->lock);	dvb->nfeeds--;	if (0 == dvb->nfeeds  &&  NULL != dvb->thread) {		// FIXME: cx8802_cancel_buffers(dev);		err = kthread_stop(dvb->thread);		dvb->thread = NULL;	}	mutex_unlock(&dvb->lock);	return err;}/* ------------------------------------------------------------------ */int videobuf_dvb_register(struct videobuf_dvb *dvb,			  struct module *module,			  void *adapter_priv,			  struct device *device){	int result;	mutex_init(&dvb->lock);	/* register adapter */	result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device);	if (result < 0) {		printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n",		       dvb->name, result);		goto fail_adapter;	}#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12))	dvb->adapter.priv = adapter_priv;	/* register frontend */	result = dvb_register_frontend(&dvb->adapter, dvb->frontend);#else	dvb->adapter->priv = adapter_priv;	/* register frontend */	result = dvb_register_frontend(dvb->adapter, dvb->frontend);#endif	if (result < 0) {		printk(KERN_WARNING "%s: dvb_register_frontend failed (errno = %d)\n",		       dvb->name, result);		goto fail_frontend;	}	/* register demux stuff */	dvb->demux.dmx.capabilities =		DMX_TS_FILTERING | DMX_SECTION_FILTERING |		DMX_MEMORY_BASED_FILTERING;	dvb->demux.priv       = dvb;	dvb->demux.filternum  = 256;	dvb->demux.feednum    = 256;	dvb->demux.start_feed = videobuf_dvb_start_feed;	dvb->demux.stop_feed  = videobuf_dvb_stop_feed;	result = dvb_dmx_init(&dvb->demux);	if (result < 0) {		printk(KERN_WARNING "%s: dvb_dmx_init failed (errno = %d)\n",		       dvb->name, result);		goto fail_dmx;	}	dvb->dmxdev.filternum    = 256;	dvb->dmxdev.demux        = &dvb->demux.dmx;	dvb->dmxdev.capabilities = 0;#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12))	result = dvb_dmxdev_init(&dvb->dmxdev, &dvb->adapter);#else	result = dvb_dmxdev_init(&dvb->dmxdev, dvb->adapter);#endif	if (result < 0) {		printk(KERN_WARNING "%s: dvb_dmxdev_init failed (errno = %d)\n",		       dvb->name, result);		goto fail_dmxdev;	}	dvb->fe_hw.source = DMX_FRONTEND_0;	result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_hw);	if (result < 0) {		printk(KERN_WARNING "%s: add_frontend failed (DMX_FRONTEND_0, errno = %d)\n",		       dvb->name, result);		goto fail_fe_hw;	}	dvb->fe_mem.source = DMX_MEMORY_FE;	result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_mem);	if (result < 0) {		printk(KERN_WARNING "%s: add_frontend failed (DMX_MEMORY_FE, errno = %d)\n",		       dvb->name, result);		goto fail_fe_mem;	}	result = dvb->demux.dmx.connect_frontend(&dvb->demux.dmx, &dvb->fe_hw);	if (result < 0) {		printk(KERN_WARNING "%s: connect_frontend failed (errno = %d)\n",		       dvb->name, result);		goto fail_fe_conn;	}	/* register network adapter */#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12))	dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx);#else	dvb_net_init(dvb->adapter, &dvb->net, &dvb->demux.dmx);#endif	return 0;fail_fe_conn:	dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);fail_fe_mem:	dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw);fail_fe_hw:	dvb_dmxdev_release(&dvb->dmxdev);fail_dmxdev:	dvb_dmx_release(&dvb->demux);fail_dmx:	dvb_unregister_frontend(dvb->frontend);fail_frontend:#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12))	dvb_unregister_adapter(&dvb->adapter);#else	dvb_unregister_adapter(dvb->adapter);#endiffail_adapter:	return result;}void videobuf_dvb_unregister(struct videobuf_dvb *dvb){	dvb_net_release(&dvb->net);	dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);	dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw);	dvb_dmxdev_release(&dvb->dmxdev);	dvb_dmx_release(&dvb->demux);	dvb_unregister_frontend(dvb->frontend);#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12))	dvb_unregister_adapter(&dvb->adapter);#else	dvb_unregister_adapter(dvb->adapter);#endif}EXPORT_SYMBOL(videobuf_dvb_register);EXPORT_SYMBOL(videobuf_dvb_unregister);/* ------------------------------------------------------------------ *//* * Local variables: * c-basic-offset: 8 * compile-command: "make DVB=1" * End: */#endif /* LINUX_VERSION_CODE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品动漫一区二区三区在线观看| 精品第一国产综合精品aⅴ| 欧美日本乱大交xxxxx| 久久综合九色综合97婷婷| 亚洲视频精选在线| 高清成人免费视频| 日韩一级大片在线| 亚洲高清在线视频| 91丝袜国产在线播放| 久久综合九色综合欧美亚洲| 午夜精品久久久久影视| 91丨porny丨蝌蚪视频| 久久久久国产精品麻豆ai换脸| 污片在线观看一区二区| 色拍拍在线精品视频8848| 日韩欧美一级在线播放| 一本色道综合亚洲| 九一九一国产精品| 在线视频中文字幕一区二区| 不卡的电影网站| 毛片av一区二区| 欧美三级欧美一级| 亚洲免费在线视频| 成人高清av在线| 久久久久久日产精品| 免费成人在线影院| 日韩一级在线观看| 欧美aaaaaa午夜精品| 欧美一区二区三区视频在线| 天堂蜜桃91精品| 欧美人体做爰大胆视频| 一区二区三区四区在线播放| proumb性欧美在线观看| 国产精品久久三| www.亚洲人| 亚洲欧美综合另类在线卡通| 亚洲婷婷综合色高清在线| 青青草成人在线观看| 欧美福利视频导航| 91麻豆免费看片| 亚洲色图在线视频| 91免费在线播放| 亚洲精品日韩专区silk| 91成人在线精品| 亚洲一区二区欧美日韩| 欧美日韩国产另类不卡| 免费看日韩a级影片| 欧美成人精品3d动漫h| 国产一区二区三区观看| 中文一区二区在线观看 | 欧美综合久久久| 亚洲国产欧美一区二区三区丁香婷| www.亚洲色图| 亚洲已满18点击进入久久| 91精品免费观看| 国产成人免费视频网站高清观看视频| 国产亚洲女人久久久久毛片| 一本久久精品一区二区| 午夜不卡av在线| 日韩欧美你懂的| 波多野结衣精品在线| 亚洲国产视频一区二区| 久久亚洲精精品中文字幕早川悠里| 粉嫩一区二区三区性色av| 亚洲免费大片在线观看| 日韩一区二区在线观看| 成人高清免费观看| 亚洲第一福利一区| 日本一区二区三区高清不卡 | 国产盗摄视频一区二区三区| 国产精品嫩草99a| 欧美日韩午夜在线| 国产成人亚洲精品青草天美| 亚洲妇熟xx妇色黄| 国产欧美日本一区视频| 欧美日韩一区高清| 国产69精品久久久久777| 亚洲一区二区在线免费观看视频| www欧美成人18+| 欧美日韩日本视频| 暴力调教一区二区三区| 国内外成人在线| 亚洲精品成人悠悠色影视| 亚洲精品一区二区精华| 欧美日韩一区三区四区| av在线综合网| 国内精品嫩模私拍在线| 亚洲va国产va欧美va观看| 欧美激情在线观看视频免费| 欧美一区二区在线免费播放| 色综合色综合色综合| 国产精一品亚洲二区在线视频| 亚洲bt欧美bt精品| 亚洲欧美日韩一区二区三区在线观看| 欧美精品一区二区久久久| 欧美日韩精品二区第二页| 91色视频在线| 成人av影院在线| 国产麻豆成人传媒免费观看| 三级亚洲高清视频| 一区二区三区不卡视频| 亚洲男人都懂的| 亚洲特黄一级片| 国产精品国产三级国产aⅴ中文 | 成人国产一区二区三区精品| 亚洲第一激情av| 樱桃国产成人精品视频| 国产日本亚洲高清| 精品国产乱码久久久久久浪潮| 欧美图片一区二区三区| 色8久久人人97超碰香蕉987| www.欧美日韩| 成人精品鲁一区一区二区| 国产精品一区二区三区乱码| 久久99精品国产麻豆婷婷洗澡| 午夜影院在线观看欧美| 亚洲成在人线在线播放| 亚洲一卡二卡三卡四卡五卡| 一区二区成人在线视频| 亚洲自拍与偷拍| 亚洲一级二级三级在线免费观看| 亚洲精品免费电影| 一区二区三区在线观看动漫| 一区二区三区日韩| 一区二区三区欧美亚洲| 五月激情综合色| 国产精品久久久久久久午夜片| 欧美一区二区成人6969| 青青草国产精品97视觉盛宴| 五月激情六月综合| 久久精品国产在热久久| 国内不卡的二区三区中文字幕| 国产一区二区三区在线看麻豆| 国产福利一区二区三区视频在线 | 91精品久久久久久久99蜜桃| 欧美丰满高潮xxxx喷水动漫| 91精品视频网| 国产日韩欧美激情| 亚洲人成人一区二区在线观看| 亚洲一区二区在线观看视频| 麻豆一区二区在线| 国产大陆a不卡| 91福利在线免费观看| 7777精品伊人久久久大香线蕉完整版| 日韩精品一区二区三区中文不卡| 国产亚洲短视频| 亚洲黄色免费网站| 日韩精品亚洲专区| 成人国产视频在线观看| 欧美日韩中字一区| 久久久www成人免费毛片麻豆| 亚洲丝袜自拍清纯另类| 日本中文字幕一区| 国产99久久久国产精品潘金| 在线观看免费成人| 久久亚洲精品国产精品紫薇 | 中文字幕第一区| 亚洲.国产.中文慕字在线| 韩国一区二区三区| 欧美主播一区二区三区美女| 精品区一区二区| 亚洲欧美激情插| 韩国精品主播一区二区在线观看 | 国产成人综合网| 欧美精品久久久久久久多人混战| 国产目拍亚洲精品99久久精品| 亚洲午夜av在线| 99视频精品在线| www激情久久| 日韩激情视频网站| 一本一本大道香蕉久在线精品| 久久午夜电影网| 天天av天天翘天天综合网色鬼国产| 国产成人免费视| 在线播放欧美女士性生活| 亚洲欧洲精品一区二区精品久久久 | 精品乱人伦一区二区三区| 有码一区二区三区| 成人丝袜18视频在线观看| 精品国产在天天线2019| 亚洲成人免费电影| 色天使久久综合网天天| 国产精品久久久久影院老司 | 午夜欧美大尺度福利影院在线看| 成人丝袜视频网| 国产人久久人人人人爽| 久久精品免费看| 欧美日本不卡视频| 一区二区三区免费看视频| 99re热这里只有精品视频| 久久精品水蜜桃av综合天堂| 欧美少妇bbb| 亚洲精品成a人| 99re热这里只有精品视频| 国产精品久久久久久久久果冻传媒| 国产在线一区二区| 久久九九国产精品| 国产suv精品一区二区6| 久久久国际精品| 国产成a人无v码亚洲福利|