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

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

?? video-buf-dvb.c

?? LINUX 2.6.17.4的源碼
?? 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 <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;		try_to_freeze();		/* 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){	int result;	mutex_init(&dvb->lock);	/* register adapter */	result = dvb_register_adapter(&dvb->adapter, dvb->name, module);	if (result < 0) {		printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n",		       dvb->name, result);		goto fail_adapter;	}	dvb->adapter.priv = adapter_priv;	/* register frontend */	result = dvb_register_frontend(&dvb->adapter, dvb->frontend);	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;	result = dvb_dmxdev_init(&dvb->dmxdev, &dvb->adapter);	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 */	dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx);	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:	dvb_unregister_adapter(&dvb->adapter);fail_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);	dvb_unregister_adapter(&dvb->adapter);}EXPORT_SYMBOL(videobuf_dvb_register);EXPORT_SYMBOL(videobuf_dvb_unregister);/* ------------------------------------------------------------------ *//* * Local variables: * c-basic-offset: 8 * compile-command: "make DVB=1" * End: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区中文字幕| 成人免费看的视频| 日本亚洲免费观看| 欧美精品一区二区高清在线观看| 色8久久精品久久久久久蜜| 东方欧美亚洲色图在线| 极品少妇xxxx偷拍精品少妇| 七七婷婷婷婷精品国产| 日韩电影免费一区| 蜜臀va亚洲va欧美va天堂| 日韩av高清在线观看| 美女视频一区二区三区| 精品一区二区三区在线观看国产| 国产在线日韩欧美| 国产成人免费9x9x人网站视频| 国产麻豆精品久久一二三| www.亚洲在线| 色噜噜狠狠成人网p站| 欧美性xxxxx极品少妇| 舔着乳尖日韩一区| 国产成人8x视频一区二区| 久久国产日韩欧美精品| 另类欧美日韩国产在线| 国产精品自产自拍| 99久久综合99久久综合网站| 日本韩国精品一区二区在线观看| 欧美日韩精品一区视频| 91精品国模一区二区三区| 欧美电影免费观看高清完整版在线| 久久久一区二区三区捆绑**| 国产精品美女久久久久久| 亚洲激情校园春色| 久久激情五月婷婷| 91在线观看视频| 91精品国产乱码| 亚洲国产精品精华液ab| 亚洲国产视频一区二区| 经典三级一区二区| 污片在线观看一区二区| 91色在线porny| 国产成+人+日韩+欧美+亚洲| 91麻豆国产福利精品| 日韩欧美一区二区不卡| 成人欧美一区二区三区白人| 首页国产欧美久久| 国产成人一级电影| 欧美日韩另类国产亚洲欧美一级| 久久精品一区八戒影视| 视频在线观看一区| jlzzjlzz亚洲女人18| 精品久久久久99| 一区二区三区在线视频免费观看| 国产综合色精品一区二区三区| 欧美性大战xxxxx久久久| 久久久av毛片精品| 日韩成人精品视频| 色域天天综合网| 国产网站一区二区| 蜜乳av一区二区三区| 夜夜嗨av一区二区三区网页| 国产精品网友自拍| 国产精品高潮久久久久无| 另类小说视频一区二区| 欧美色综合网站| 亚洲精选在线视频| 成人免费av资源| 日韩久久久久久| 爽好久久久欧美精品| 在线日韩国产精品| 自拍偷在线精品自拍偷无码专区| 国产精品456露脸| 精品福利在线导航| 韩日欧美一区二区三区| 欧美日韩国产天堂| 亚洲国产另类精品专区| 在线视频欧美精品| 亚洲一区影音先锋| 色中色一区二区| 亚洲乱码精品一二三四区日韩在线| 国产成人综合在线| 国产女人aaa级久久久级| 乱一区二区av| 久久蜜臀中文字幕| 国产成人在线免费观看| 国产人伦精品一区二区| 国产成人精品aa毛片| 国产精品午夜春色av| 一本色道久久综合精品竹菊| 亚洲乱码国产乱码精品精可以看| 91网站最新地址| 亚洲一二三区不卡| 欧美二区在线观看| 久久99九九99精品| 国产精品人妖ts系列视频| 成人av免费观看| 一卡二卡三卡日韩欧美| 91精品国产综合久久精品app| 免费成人av在线| 精品国产凹凸成av人导航| 国产91丝袜在线18| 亚洲综合久久久| 在线91免费看| 国产成人精品亚洲日本在线桃色| 国产精品污网站| 欧美色综合网站| 国产精品 日产精品 欧美精品| 国产精品久线在线观看| 欧美系列在线观看| 国产精品18久久久| 亚洲一区二区三区四区在线免费观看 | 天堂在线亚洲视频| 久久综合色综合88| 在线精品视频免费观看| 九色|91porny| 亚洲视频一区二区在线观看| 91精品国产福利在线观看| 国产69精品久久久久毛片 | 欧美在线短视频| 久久国产精品第一页| 亚洲另类色综合网站| 日韩欧美视频一区| 色婷婷狠狠综合| 国产精品综合一区二区三区| 亚洲乱码中文字幕综合| 精品国产123| 欧美精品色一区二区三区| 国产福利一区二区| 日本aⅴ免费视频一区二区三区| 国产精品天干天干在线综合| 欧美一卡二卡在线观看| 91黄视频在线| 国产精品羞羞答答xxdd| 成人免费高清视频| 亚洲午夜成aⅴ人片| 国产亚洲综合在线| 国产精品亚洲人在线观看| 偷窥少妇高潮呻吟av久久免费| 婷婷中文字幕综合| 久久99久久99精品免视看婷婷 | 欧美日本韩国一区二区三区视频| 在线观看不卡一区| 在线视频国内自拍亚洲视频| 亚洲一区中文日韩| 91国产视频在线观看| 欧美美女一区二区在线观看| 午夜激情久久久| 国产在线日韩欧美| 久久国产精品第一页| 免费观看成人鲁鲁鲁鲁鲁视频| 99久久亚洲一区二区三区青草| 国产成人av电影免费在线观看| 粉嫩aⅴ一区二区三区四区 | 国产精品视频第一区| 欧美精品一区二区在线观看| 国产女主播一区| 亚洲福利视频三区| 国内精品国产成人| 在线看日韩精品电影| 欧美成人性战久久| 亚洲三级免费电影| 国产一区二三区| 在线亚洲人成电影网站色www| 日韩午夜激情av| 亚洲免费伊人电影| 激情综合五月婷婷| 欧美视频在线一区二区三区| 久久综合久久久久88| 一区二区免费在线播放| 国产福利精品一区| 欧美高清精品3d| 国产精品理论在线观看| 久久成人综合网| 欧美专区日韩专区| 国产婷婷一区二区| 亚洲成人久久影院| 9l国产精品久久久久麻豆| 欧美xxx久久| 亚洲国产视频一区二区| av日韩在线网站| 精品国产精品一区二区夜夜嗨| 五月天激情综合网| 91精品国产欧美一区二区18| 国产精品免费视频一区| 激情综合色综合久久| 欧美区一区二区三区| 亚洲精品中文在线影院| 成人免费黄色在线| 国产欧美日韩激情| 国产一区二区在线电影| 日韩一级二级三级| 日韩成人一级片| 欧美一区二区性放荡片| 午夜精品一区二区三区三上悠亚| 色一情一伦一子一伦一区| 国产精品护士白丝一区av| 成人涩涩免费视频| 欧美国产精品中文字幕| 国产成人免费视频网站高清观看视频| 日韩欧美国产系列| 婷婷久久综合九色综合伊人色|