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

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

?? videobuf-dvb.c

?? linux 內核源代碼
?? 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/freezer.h>#include <media/videobuf-dma-sg.h>#include <media/videobuf-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;	struct videobuf_dmabuf *dma;	dprintk("dvb thread started\n");	set_freezable();	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);		/* 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 */		dma=videobuf_to_dma(buf);		if (buf->state == STATE_DONE)			dvb_dmx_swfilter(&dvb->demux, 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;	}	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_frontend_detach(dvb->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_frontend_detach(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一区二区三区免费野_久草精品视频
美腿丝袜亚洲一区| 欧美日韩中文字幕一区二区| 欧美激情综合五月色丁香| 精品一区二区三区欧美| 日韩精品一区二区在线| 精彩视频一区二区| 久久影视一区二区| 成人午夜在线播放| 亚洲免费观看高清完整版在线| 欧美在线短视频| 日本午夜一区二区| 国产三级一区二区| 91行情网站电视在线观看高清版| 亚洲国产精品久久不卡毛片 | 国内一区二区在线| 久久久久久久电影| 99re成人在线| 五月激情综合网| 久久久蜜桃精品| 91啪在线观看| 日本免费在线视频不卡一不卡二| 精品理论电影在线观看| av一区二区三区黑人| 亚洲第一成人在线| 久久精品水蜜桃av综合天堂| 欧洲中文字幕精品| 韩日精品视频一区| 一区二区免费看| 久久综合久色欧美综合狠狠| 97成人超碰视| 免费人成黄页网站在线一区二区| 欧美韩国日本一区| 欧美老女人第四色| 高清beeg欧美| 青青草97国产精品免费观看 | 成人教育av在线| 亚洲国产精品麻豆| 中文字幕 久热精品 视频在线| 欧美日韩情趣电影| 成人黄色电影在线| 六月婷婷色综合| 亚洲精选视频在线| 精品欧美一区二区久久| 91久久精品一区二区三| 国产一区在线看| 日产精品久久久久久久性色| 成人午夜伦理影院| 久久久久久久综合日本| 欧美在线免费播放| 国产成a人亚洲| 麻豆精品精品国产自在97香蕉| 亚洲免费观看高清在线观看| 久久综合狠狠综合久久综合88| 欧美日韩视频在线第一区 | 国产欧美日韩精品在线| 欧美美女一区二区在线观看| 一本久久a久久精品亚洲 | 粉嫩欧美一区二区三区高清影视| 日韩专区中文字幕一区二区| 亚洲日穴在线视频| 中文字幕欧美国产| 久久久久久电影| 精品久久久久久久久久久久久久久 | 色综合天天狠狠| 成人做爰69片免费看网站| 国产美女视频一区| 国产一区二区三区四| 捆绑调教美女网站视频一区| 日韩精品视频网| 亚洲成人一二三| 亚洲成人自拍一区| 亚洲一区二区三区美女| 亚洲人成电影网站色mp4| 欧美国产禁国产网站cc| 久久精品一级爱片| 久久久精品一品道一区| 久久久久久久久久久久久久久99| 精品国产一区二区三区四区四 | 久草热8精品视频在线观看| 日韩不卡一区二区| 麻豆精品在线播放| 麻豆久久久久久久| 黄色日韩三级电影| 国产精品一区二区免费不卡 | 欧美亚洲日本国产| 欧美中文字幕不卡| 欧美日韩激情在线| 欧美日产在线观看| 欧美大片日本大片免费观看| 日韩精品一区二区三区三区免费| 久久丝袜美腿综合| 欧美国产一区二区| 国产精品不卡一区| 亚洲精品视频观看| 亚洲bt欧美bt精品| 蜜臀99久久精品久久久久久软件| 久久99最新地址| 国产91精品久久久久久久网曝门| 不卡影院免费观看| 色美美综合视频| 欧美日本一道本| 精品久久国产老人久久综合| 国产亚洲欧美日韩日本| 中文字幕一区二区三区在线观看| 亚洲免费观看高清在线观看| 欧美精品一二三四| av成人老司机| 欧美日韩一区二区三区视频 | 成人黄色软件下载| 在线一区二区观看| 欧美一级日韩免费不卡| 国产亚洲欧洲997久久综合| 国产精品乱码人人做人人爱 | 一个色在线综合| 麻豆国产精品官网| 91免费看`日韩一区二区| 制服丝袜亚洲网站| 国产精品三级电影| 日韩国产精品91| 丁香五精品蜜臀久久久久99网站| 欧美三级日韩在线| 久久综合九色综合欧美就去吻| 国产精品久久久久9999吃药| 亚洲电影一级黄| 国产成人综合精品三级| 欧美性猛交一区二区三区精品| 精品国产3级a| 亚洲一区二区在线视频| 精品一区二区三区日韩| 在线视频国产一区| 国产色综合一区| 日韩电影在线一区二区| 99久久99久久综合| 精品国产一区久久| 亚洲18色成人| 成人激情免费电影网址| 91精品国产日韩91久久久久久| 《视频一区视频二区| 国内精品不卡在线| 欧美日高清视频| 亚洲精品欧美综合四区| 国产麻豆午夜三级精品| 欧美猛男超大videosgay| ㊣最新国产の精品bt伙计久久| 国产麻豆日韩欧美久久| 欧美一级久久久久久久大片| 一区二区三区精品在线观看| 成人免费黄色在线| 久久综合av免费| 男男视频亚洲欧美| 欧美日韩成人一区二区| 一区二区在线电影| 9人人澡人人爽人人精品| 久久影音资源网| 久久精品国产久精国产爱| 4438x亚洲最大成人网| 亚洲同性同志一二三专区| 在线观看成人小视频| 2021中文字幕一区亚洲| 美国一区二区三区在线播放| 69堂国产成人免费视频| 亚洲午夜电影网| 欧美剧情电影在线观看完整版免费励志电影| 国产精品国产三级国产普通话99| 国产综合久久久久久久久久久久| 精品国产乱子伦一区| 精品一区二区三区免费播放| 欧美v国产在线一区二区三区| 毛片av一区二区三区| 日韩精品中文字幕一区二区三区| 另类中文字幕网| 亚洲精品在线观看视频| 国产一区二区电影| 欧美激情中文不卡| 福利一区福利二区| 国产精品精品国产色婷婷| 97se狠狠狠综合亚洲狠狠| 亚洲欧洲精品一区二区三区不卡| 成人高清视频在线观看| 1024成人网色www| 91成人在线精品| 视频一区视频二区中文字幕| 美女视频黄频大全不卡视频在线播放| 成人高清视频在线观看| 亚洲色图一区二区三区| 欧美视频在线一区| 蜜桃av一区二区三区电影| 精品国产伦一区二区三区免费| 国产黄色精品网站| 亚洲青青青在线视频| 欧美日韩成人在线一区| 激情五月播播久久久精品| 国产欧美精品一区aⅴ影院 | 看电视剧不卡顿的网站| 日韩精品一区二区三区在线| 国产成人av在线影院| 亚洲一区在线视频| 日韩欧美在线一区二区三区| 国产精品一二三四区| 一区二区三区日韩在线观看|