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

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

?? scan.c

?? linux TV 源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/** *  Simple MPEG parser to achieve network/service information. * *  refered standards: * *    ETSI EN 300 468 *    ETSI TR 101 211 *    ETSI ETR 211 *    ITU-T H.222.0 */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/poll.h>#include <unistd.h>#include <fcntl.h>#include <time.h>#include <errno.h>#include <signal.h>#include <assert.h>#include <linux/dvb/frontend.h>#include <linux/dvb/dmx.h>#include "list.h"#include "diseqc.h"#include "dump-zap.h"#include "dump-vdr.h"#include "scan.h"static char demux_devname[80];static struct dvb_frontend_info fe_info = {	.type = -1};int verbosity = 2;static int long_timeout;static int current_tp_only;static int get_other_nits;static int vdr_dump_provider;static int ca_select = 1;static int serv_select = 7;static int vdr_version = 2;static enum fe_spectral_inversion spectral_inversion = INVERSION_AUTO;enum table_type {	PAT,	PMT,	SDT,	NIT};enum format {        OUTPUT_ZAP,        OUTPUT_VDR,	OUTPUT_PIDS};static enum format output_format = OUTPUT_ZAP;enum polarisation {	POLARISATION_HORIZONTAL     = 0x00,	POLARISATION_VERTICAL       = 0x01,	POLARISATION_CIRCULAR_LEFT  = 0x02,	POLARISATION_CIRCULAR_RIGHT = 0x03};enum running_mode {	RM_NOT_RUNNING = 0x01,	RM_STARTS_SOON = 0x02,	RM_PAUSING     = 0x03,	RM_RUNNING     = 0x04};#define AUDIO_CHAN_MAX (32)#define CA_SYSTEM_ID_MAX (16)struct service {	struct list_head list;	int transport_stream_id;	int service_id;	char *provider_name;	char *service_name;	uint16_t pmt_pid;	uint16_t pcr_pid;	uint16_t video_pid;	uint16_t audio_pid[AUDIO_CHAN_MAX];	char audio_lang[AUDIO_CHAN_MAX][4];	int audio_num;	uint16_t ca_id[CA_SYSTEM_ID_MAX];	int ca_num;	uint16_t teletext_pid;	uint16_t subtitling_pid;	uint16_t ac3_pid;	unsigned int type         : 8;	unsigned int scrambled	  : 1;	enum running_mode running;	void *priv;};struct transponder {	struct list_head list;	struct list_head services;	int network_id;	int transport_stream_id;	enum fe_type type;	struct dvb_frontend_parameters param;	enum polarisation polarisation;		/* only for DVB-S */	int orbital_pos;			/* only for DVB-S */	unsigned int we_flag		  : 1;	/* West/East Flag - only for DVB-S */	unsigned int scan_done		  : 1;	unsigned int last_tuning_failed	  : 1;	unsigned int other_frequency_flag : 1;	/* DVB-T */	int n_other_f;	uint32_t *other_f;			/* DVB-T freqeuency-list descriptor */};struct section_buf {	struct list_head list;	const char *dmx_devname;	unsigned int run_once  : 1;	unsigned int segmented : 1;	/* segmented by table_id_ext */	int fd;	int pid;	int table_id;	int table_id_ext;	int section_version_number;	uint8_t section_done[32];	int sectionfilter_done;	unsigned char buf[1024];	time_t timeout;	time_t start_time;	time_t running_time;	struct section_buf *next_seg;	/* this is used to handle					 * segmented tables (like NIT-other)					 */};static LIST_HEAD(scanned_transponders);static LIST_HEAD(new_transponders);static struct transponder *current_tp;static void dump_dvb_parameters (FILE *f, struct transponder *p);static void setup_filter (struct section_buf* s, const char *dmx_devname,		          int pid, int tid, int run_once, int segmented, int timeout);static void add_filter (struct section_buf *s);/* According to the DVB standards, the combination of network_id and * transport_stream_id should be unique, but in real life the satellite * operators and broadcasters don't care enough to coordinate * the numbering. Thus we identify TPs by frequency (scan handles only * one satellite at a time). Further complication: Different NITs on * one satellite sometimes list the same TP with slightly different * frequencies, so we have to search within some bandwidth. */static struct transponder *alloc_transponder(uint32_t frequency){	struct transponder *tp = calloc(1, sizeof(*tp));	tp->param.frequency = frequency;	INIT_LIST_HEAD(&tp->list);	INIT_LIST_HEAD(&tp->services);	list_add_tail(&tp->list, &new_transponders);	return tp;}static int is_same_transponder(uint32_t f1, uint32_t f2){	uint32_t diff;	if (f1 == f2)		return 1;	diff = (f1 > f2) ? (f1 - f2) : (f2 - f1);	//FIXME: use symbolrate etc. to estimate bandwidth	if (diff < 2000) {		debug("f1 = %u is same TP as f2 = %u\n", f1, f2);		return 1;	}	return 0;}static struct transponder *find_transponder(uint32_t frequency){	struct list_head *pos;	struct transponder *tp;	list_for_each(pos, &scanned_transponders) {		tp = list_entry(pos, struct transponder, list);		if (is_same_transponder(tp->param.frequency, frequency))			return tp;	}	list_for_each(pos, &new_transponders) {		tp = list_entry(pos, struct transponder, list);		if (is_same_transponder(tp->param.frequency, frequency))			return tp;	}	return NULL;}static void copy_transponder(struct transponder *d, struct transponder *s){	d->network_id = s->network_id;	d->transport_stream_id = s->transport_stream_id;	d->type = s->type;	memcpy(&d->param, &s->param, sizeof(d->param));	d->polarisation = s->polarisation;	d->orbital_pos = s->orbital_pos;	d->we_flag = s->we_flag;	d->scan_done = s->scan_done;	d->last_tuning_failed = s->last_tuning_failed;	d->other_frequency_flag = s->other_frequency_flag;	d->n_other_f = s->n_other_f;	if (d->n_other_f) {		d->other_f = calloc(d->n_other_f, sizeof(uint32_t));		memcpy(d->other_f, s->other_f, d->n_other_f * sizeof(uint32_t));	}	else		d->other_f = NULL;}/* service_ids are guaranteed to be unique within one TP * (the DVB standards say theay should be unique within one * network, but in real life...) */static struct service *alloc_service(struct transponder *tp, int service_id){	struct service *s = calloc(1, sizeof(*s));	INIT_LIST_HEAD(&s->list);	s->service_id = service_id;	list_add_tail(&s->list, &tp->services);	return s;}static struct service *find_service(struct transponder *tp, int service_id){	struct list_head *pos;	struct service *s;	list_for_each(pos, &tp->services) {		s = list_entry(pos, struct service, list);		if (s->service_id == service_id)			return s;	}	return NULL;}static void parse_ca_identifier_descriptor (const unsigned char *buf,				     struct service *s){	unsigned char len = buf [1];	int i;	buf += 2;	if (len > sizeof(s->ca_id)) {		len = sizeof(s->ca_id);		warning("too many CA system ids\n");	}	memcpy(s->ca_id, buf, len);	for (i = 0; i < len / sizeof(s->ca_id[0]); i++)		moreverbose("  CA ID 0x%04x\n", s->ca_id[i]);}static void parse_iso639_language_descriptor (const unsigned char *buf, struct service *s){	unsigned char len = buf [1];	buf += 2;	if (len >= 4) {		debug("    LANG=%.3s %d\n", buf, buf[3]);		memcpy(s->audio_lang[s->audio_num], buf, 3);#if 0		/* seems like the audio_type is wrong all over the place */		//if (buf[3] == 0) -> normal		if (buf[3] == 1)			s->audio_lang[s->audio_num][3] = '!'; /* clean effects (no language) */		else if (buf[3] == 2)			s->audio_lang[s->audio_num][3] = '?'; /* for the hearing impaired */		else if (buf[3] == 3)			s->audio_lang[s->audio_num][3] = '+'; /* visually impaired commentary */#endif	}}static void parse_network_name_descriptor (const unsigned char *buf, void *dummy){	unsigned char len = buf [1];	info("Network Name '%.*s'\n", len, buf + 2);}static long bcd32_to_cpu (const int b0, const int b1, const int b2, const int b3){	return ((b0 >> 4) & 0x0f) * 10000000 + (b0 & 0x0f) * 1000000 +	       ((b1 >> 4) & 0x0f) * 100000   + (b1 & 0x0f) * 10000 +	       ((b2 >> 4) & 0x0f) * 1000     + (b2 & 0x0f) * 100 +	       ((b3 >> 4) & 0x0f) * 10       + (b3 & 0x0f);}static const fe_code_rate_t fec_tab [8] = {	FEC_AUTO, FEC_1_2, FEC_2_3, FEC_3_4,	FEC_5_6, FEC_7_8, FEC_NONE, FEC_NONE};static const fe_modulation_t qam_tab [6] = {	QAM_AUTO, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256};static void parse_cable_delivery_system_descriptor (const unsigned char *buf,					     struct transponder *t){	t->type = FE_QAM;	t->param.frequency = bcd32_to_cpu (buf[2], buf[3], buf[4], buf[5]);	t->param.frequency *= 100;	t->param.u.qam.fec_inner = fec_tab[buf[12] & 0x07];	t->param.u.qam.symbol_rate = 10 * bcd32_to_cpu (buf[9],							buf[10],							buf[11],							buf[12] & 0xf0);	if ((buf[8] & 0x0f) > 5)		t->param.u.qam.modulation = QAM_AUTO;	else		t->param.u.qam.modulation = qam_tab[buf[8] & 0x0f];	t->param.inversion = spectral_inversion;	if (verbosity >= 5) {		debug("0x%#04x/0x%#04x ", t->network_id, t->transport_stream_id);		dump_dvb_parameters (stderr, t);		if (t->scan_done)			dprintf(5, " (done)");		if (t->last_tuning_failed)			dprintf(5, " (tuning failed)");		dprintf(5, "\n");	}}static void parse_satellite_delivery_system_descriptor (const unsigned char *buf,						 struct transponder *t){	t->type = FE_QPSK;	t->param.frequency = 10 * bcd32_to_cpu (buf[2], buf[3], buf[4], buf[5]);	t->param.u.qpsk.fec_inner = fec_tab[buf[12] & 0x07];	t->param.u.qpsk.symbol_rate = 10 * bcd32_to_cpu (buf[9],							 buf[10],							 buf[11],							 buf[12] & 0xf0);	t->polarisation = (buf[8] >> 5) & 0x03;	t->param.inversion = spectral_inversion;	t->orbital_pos = bcd32_to_cpu (0x00, 0x00, buf[6], buf[7]);	t->we_flag = buf[8] >> 7;	if (verbosity >= 5) {		debug("0x%#04x/0x%#04x ", t->network_id, t->transport_stream_id);		dump_dvb_parameters (stderr, t);		if (t->scan_done)			dprintf(5, " (done)");		if (t->last_tuning_failed)			dprintf(5, " (tuning failed)");		dprintf(5, "\n");	}}static void parse_terrestrial_delivery_system_descriptor (const unsigned char *buf,						   struct transponder *t){	static const fe_modulation_t m_tab [] = { QPSK, QAM_16, QAM_64, QAM_AUTO };	static const fe_code_rate_t ofec_tab [8] = { FEC_1_2, FEC_2_3, FEC_3_4,					       FEC_5_6, FEC_7_8 };	struct dvb_ofdm_parameters *o = &t->param.u.ofdm;	t->type = FE_OFDM;	t->param.frequency = (buf[2] << 24) | (buf[3] << 16);	t->param.frequency |= (buf[4] << 8) | buf[5];	t->param.frequency *= 10;	t->param.inversion = spectral_inversion;	o->bandwidth = BANDWIDTH_8_MHZ + ((buf[6] >> 5) & 0x3);	o->constellation = m_tab[(buf[7] >> 6) & 0x3];	o->hierarchy_information = HIERARCHY_NONE + ((buf[7] >> 3) & 0x3);	if ((buf[7] & 0x7) > 4)		o->code_rate_HP = FEC_AUTO;	else		o->code_rate_HP = ofec_tab [buf[7] & 0x7];	if (((buf[8] >> 5) & 0x7) > 4)		o->code_rate_LP = FEC_AUTO;	else		o->code_rate_LP = ofec_tab [(buf[8] >> 5) & 0x7];	o->guard_interval = GUARD_INTERVAL_1_32 + ((buf[8] >> 3) & 0x3);	o->transmission_mode = (buf[8] & 0x2) ?			       TRANSMISSION_MODE_8K :			       TRANSMISSION_MODE_2K;	t->other_frequency_flag = (buf[8] & 0x01);	if (verbosity >= 5) {		debug("0x%#04x/0x%#04x ", t->network_id, t->transport_stream_id);		dump_dvb_parameters (stderr, t);		if (t->scan_done)			dprintf(5, " (done)");		if (t->last_tuning_failed)			dprintf(5, " (tuning failed)");		dprintf(5, "\n");	}}static void parse_frequency_list_descriptor (const unsigned char *buf,				      struct transponder *t){	int n, i;	typeof(*t->other_f) f;	if (t->other_f)		return;	n = (buf[1] - 1) / 4;	if (n < 1 || (buf[2] & 0x03) != 3)		return;	t->other_f = calloc(n, sizeof(*t->other_f));	t->n_other_f = n;	buf += 3;	for (i = 0; i < n; i++) {		f = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];		t->other_f[i] = f * 10;		buf += 4;	}}static void parse_service_descriptor (const unsigned char *buf, struct service *s){	unsigned char len;	unsigned char *src, *dest;	s->type = buf[2];	buf += 3;	len = *buf;	buf++;	if (s->provider_name)		free (s->provider_name);	s->provider_name = malloc (len + 1);	memcpy (s->provider_name, buf, len);	s->provider_name[len] = '\0';	/* remove control characters (FIXME: handle short/long name) */	/* FIXME: handle character set correctly (e.g. via iconv)	 * c.f. EN 300 468 annex A */	for (src = dest = s->provider_name; *src; src++)		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f))			*dest++ = *src;	*dest = '\0';	if (!s->provider_name[0]) {		/* zap zero length names */		free (s->provider_name);		s->provider_name = 0;	}	if (s->service_name)		free (s->service_name);	buf += len;	len = *buf;	buf++;	s->service_name = malloc (len + 1);	memcpy (s->service_name, buf, len);	s->service_name[len] = '\0';	/* remove control characters (FIXME: handle short/long name) */	/* FIXME: handle character set correctly (e.g. via iconv)	 * c.f. EN 300 468 annex A */	for (src = dest = s->service_name; *src; src++)		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f))			*dest++ = *src;	*dest = '\0';	if (!s->service_name[0]) {		/* zap zero length names */		free (s->service_name);		s->service_name = 0;	}	info("0x%04x 0x%04x: pmt_pid 0x%04x %s -- %s (%s%s)\n",	    s->transport_stream_id,	    s->service_id,	    s->pmt_pid,	    s->provider_name, s->service_name,	    s->running == RM_NOT_RUNNING ? "not running" :	    s->running == RM_STARTS_SOON ? "starts soon" :	    s->running == RM_PAUSING     ? "pausing" :	    s->running == RM_RUNNING     ? "running" : "???",	    s->scrambled ? ", scrambled" : "");}static int find_descriptor(uint8_t tag, const unsigned char *buf,		int descriptors_loop_len,		const unsigned char **desc, int *desc_len){	while (descriptors_loop_len > 0) {		unsigned char descriptor_tag = buf[0];		unsigned char descriptor_len = buf[1] + 2;		if (!descriptor_len) {			warning("descriptor_tag == 0x%02x, len is 0\n", descriptor_tag);			break;		}		if (tag == descriptor_tag) {			if (desc)				*desc = buf;			if (desc_len)				*desc_len = descriptor_len;			return 1;		}		buf += descriptor_len;		descriptors_loop_len -= descriptor_len;	}	return 0;}static void parse_descriptors(enum table_type t, const unsigned char *buf,			      int descriptors_loop_len, void *data){	while (descriptors_loop_len > 0) {		unsigned char descriptor_tag = buf[0];		unsigned char descriptor_len = buf[1] + 2;		if (!descriptor_len) {			warning("descriptor_tag == 0x%02x, len is 0\n", descriptor_tag);			break;		}		switch (descriptor_tag) {		case 0x0a:			if (t == PMT)				parse_iso639_language_descriptor (buf, data);			break;		case 0x40:			if (t == NIT)				parse_network_name_descriptor (buf, data);			break;		case 0x43:			if (t == NIT)				parse_satellite_delivery_system_descriptor (buf, data);			break;		case 0x44:			if (t == NIT)				parse_cable_delivery_system_descriptor (buf, data);			break;		case 0x48:			if (t == SDT)				parse_service_descriptor (buf, data);			break;		case 0x53:			if (t == SDT)				parse_ca_identifier_descriptor (buf, data);			break;		case 0x5a:			if (t == NIT)				parse_terrestrial_delivery_system_descriptor (buf, data);			break;		case 0x62:			if (t == NIT)				parse_frequency_list_descriptor (buf, data);			break;		default:			verbosedebug("skip descriptor 0x%02x\n", descriptor_tag);		};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色呦呦国产精品| 经典三级视频一区| 91免费视频观看| 亚洲六月丁香色婷婷综合久久| 波多野结衣在线一区| 亚洲国产精品传媒在线观看| 91最新地址在线播放| 亚洲激情六月丁香| 欧美一级日韩不卡播放免费| 国内精品久久久久影院一蜜桃| 国产片一区二区| 91久久精品午夜一区二区| 图片区小说区国产精品视频| 精品国产乱码久久久久久免费| 国产成人精品aa毛片| 亚洲精品欧美专区| 日韩欧美aaaaaa| 成人小视频在线观看| 一级日本不卡的影视| 日韩精品一区二区三区在线| 成人av免费网站| 天天操天天干天天综合网| 精品国产百合女同互慰| 97精品久久久久中文字幕| 全国精品久久少妇| 中文字幕一区三区| 日韩三级在线观看| 91理论电影在线观看| 久久黄色级2电影| 一区二区三区蜜桃网| 精品国产sm最大网站免费看| 色激情天天射综合网| 国产一区二区三区免费| 亚洲午夜激情av| 国产亚洲一二三区| 欧美高清精品3d| 成人91在线观看| 秋霞国产午夜精品免费视频| 国产精品电影院| 精品成人在线观看| 欧洲av一区二区嗯嗯嗯啊| 国产真实乱子伦精品视频| 亚洲h精品动漫在线观看| 亚洲国产精品av| 精品久久久三级丝袜| 在线观看91视频| www.日韩大片| 国产露脸91国语对白| 丝瓜av网站精品一区二区 | 国产盗摄一区二区三区| 午夜精品久久久| 亚洲欧美另类小说| 久久精品男人天堂av| 日韩欧美一级在线播放| 欧美日韩一级二级三级| 99久久99久久精品免费观看| 国内精品久久久久影院一蜜桃| 日日嗨av一区二区三区四区| 亚洲国产一区二区三区青草影视| 国产精品天干天干在线综合| 精品处破学生在线二十三| 欧美一区二区三区系列电影| 欧美三级日韩在线| 欧美午夜电影在线播放| 欧美亚洲精品一区| 91传媒视频在线播放| 91视频在线看| 99久久国产综合精品麻豆| 成人精品免费看| 波多野结衣一区二区三区| av在线播放成人| 成人av电影在线| 99re6这里只有精品视频在线观看| 国产98色在线|日韩| 成人黄色在线网站| 成人丝袜视频网| 91丝袜国产在线播放| 97se亚洲国产综合自在线 | 午夜激情久久久| 亚洲成av人在线观看| 亚洲一区二区三区精品在线| 亚洲伊人伊色伊影伊综合网| 亚洲午夜久久久久中文字幕久| 亚洲动漫第一页| 奇米777欧美一区二区| 麻豆极品一区二区三区| 喷水一区二区三区| 国产精品一线二线三线| 成人午夜av电影| 色哟哟精品一区| 欧美日韩三级一区二区| 日韩视频在线观看一区二区| 精品国产一区二区三区久久影院| 久久久青草青青国产亚洲免观| 中文字幕不卡的av| 一区二区三区日韩精品视频| 午夜久久久久久| 国产又粗又猛又爽又黄91精品| 不卡影院免费观看| 欧美日韩成人综合天天影院| 精品久久一二三区| 自拍偷在线精品自拍偷无码专区| 亚洲一线二线三线视频| 日韩av不卡一区二区| 国产原创一区二区三区| 91美女片黄在线| 欧美一区二区三区在线观看视频| 欧美精品一区二区三区四区| 国产精品乱人伦中文| 亚洲香肠在线观看| 国产一区二区三区在线看麻豆| av亚洲精华国产精华| 3atv在线一区二区三区| 国产欧美精品区一区二区三区 | 亚洲国产一区二区三区青草影视| 久久成人麻豆午夜电影| 91网站在线播放| 日韩免费一区二区三区在线播放| 国产精品久久久久久一区二区三区| 午夜精品一区在线观看| 丁香六月综合激情| 69精品人人人人| 亚洲欧洲精品一区二区三区| 五月天久久比比资源色| 91在线视频网址| 精品国产a毛片| 亚洲一区二区欧美| 成人污污视频在线观看| 欧美大片国产精品| 香蕉成人伊视频在线观看| 成人午夜av影视| 久久在线免费观看| 丝袜脚交一区二区| 日本韩国欧美一区二区三区| 久久久久久久久久久黄色| 日韩成人精品在线| 色婷婷一区二区三区四区| 国产日产精品一区| 国内精品嫩模私拍在线| 欧美日韩精品高清| 亚洲美女在线国产| 国产成人在线色| 精品成人佐山爱一区二区| 日本欧美在线看| 欧美日韩国产a| 亚洲图片欧美色图| 99re在线视频这里只有精品| 国产欧美日韩中文久久| 久久精工是国产品牌吗| 91精品国产手机| 丝袜诱惑制服诱惑色一区在线观看| 色综合久久中文字幕综合网| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩精品一区二区在线| 日韩高清在线不卡| 91精品国产综合久久香蕉的特点| 亚洲国产毛片aaaaa无费看| 91麻豆免费视频| 亚洲理论在线观看| 91视视频在线观看入口直接观看www | 亚洲另类一区二区| 成人免费看黄yyy456| 久久久久亚洲蜜桃| 国产精品一级在线| 久久久久高清精品| 国产精品88av| 国产精品三级在线观看| 国产成人午夜视频| 久久久www成人免费毛片麻豆| 麻豆久久久久久| 欧美mv和日韩mv的网站| 九九国产精品视频| 久久久无码精品亚洲日韩按摩| 国产一区二区h| 欧美激情一区二区三区全黄 | 亚洲理论在线观看| 色综合久久88色综合天天 | 日韩电影在线一区| 欧美一区二区三区四区视频| 麻豆精品视频在线| 久久午夜免费电影| 99久久国产免费看| 亚洲第一av色| 精品粉嫩aⅴ一区二区三区四区| 狠狠色综合播放一区二区| 国产欧美日韩一区二区三区在线观看 | 色综合久久中文字幕| 亚洲国产精品一区二区久久恐怖片| 欧美男女性生活在线直播观看| 男人的j进女人的j一区| 久久青草国产手机看片福利盒子 | 在线视频一区二区三区| 午夜精品一区二区三区电影天堂| 欧美电视剧免费观看| 成人免费黄色在线| 亚洲va欧美va人人爽| 久久影视一区二区| 色噜噜狠狠成人中文综合| 日日骚欧美日韩| 国产午夜精品一区二区三区四区 |