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

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

?? scan.c

?? linux dvb的文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/** *  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 <unistd.h>#include <fcntl.h>#include <time.h>#include <errno.h>#include <linux/dvb/frontend.h>#include <linux/dvb/dmx.h>#include "list.h"#include "diseqc.h"#include "dump.h"#include "scan.h"struct list_entry {	int id1;	int id2;};struct list {	char *name;	struct list_entry *entry;	int count;	int entry_size;};struct network {	int dummy;	int network_id;	char *network_name;};enum polarisation {	POLARISATION_HORIZONTAL     = 0x00,	POLARISATION_VERTICAL       = 0x01,	POLARISATION_CIRCULAR_LEFT  = 0x02,	POLARISATION_CIRCULAR_RIGHT = 0x03};struct transponder {	int network_id;	int transport_stream_id;	fe_type_t type;	struct dvb_frontend_parameters param;	enum polarisation polarisation : 2;	   /*  only for DVB-S */	int scan_done		  : 1;	int last_tuning_failed	  : 1;};enum service_type {	ST_TV       = 0x01,	ST_RADIO    = 0x02,	ST_TELETEXT = 0x03,	ST_MHP      = 0x10};enum running_mode {	RM_NOT_RUNNING = 0x01,	RM_STARTS_SOON = 0x02,	RM_PAUSING     = 0x03,	RM_RUNNING     = 0x04};struct service {	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;	int private_pid_count     : 8;	enum service_type type    : 8;	enum running_mode running : 3;	int scrambled	     : 1;	void *priv;};staticstruct list network_list = {	"network_list",	NULL,	0,	sizeof(struct network)};staticstruct list transponder_list = {	"transponder_list",	NULL,	0,	sizeof(struct transponder)};static struct list service_list = {	"service_list",	NULL,	0,	sizeof(struct service)};static void* find_entry_by_id (struct list *list, int id1, int id2){	int i;	long entry = (long) list->entry;	for (i=0; i<list->count; i++, entry += list->entry_size) {		struct list_entry *e = (struct list_entry*) entry;		if (e->id1 == id1 && (e->id2 == id2 || id2 == -1))			return e;		if (e->id2 == id2 && id1 == -1)			return e;		if (e->id1 == id1 && e->id2 == -1) {			e->id2 = id2;			return e;		}		if (e->id1 == -1 && e->id2 == id2) {			e->id1 = id1;			return e;		}	}	return NULL;}static void* find_or_alloc_entry_by_id (struct list *list, int id1, int id2){	struct list_entry *e = find_entry_by_id (list, id1, id2);	long addr;	if (!e) {		list->entry = realloc (list->entry,				       (list->count+1) * list->entry_size);		addr = (long) list->entry + list->count * list->entry_size;		e = (struct list_entry*) addr;		memset (e, 0, list->entry_size);		e->id1 = id1;		e->id2 = id2;		list->count++;	}		return e;}staticvoid* find_nth_entry (struct list *list, unsigned int n){	if (n >= list->count)		return NULL;	return (void*) ((long) list->entry + n * list->entry_size);}staticvoid parse_network_name_descriptor (const unsigned char *buf, struct network *n){	unsigned char len = buf [1];	n->network_name = malloc (len + 1);	memcpy (n->network_name, buf + 2, len);	n->network_name[len] = '\0';	MSG("(%s)", n->network_name);}staticlong 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};staticvoid 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];	fprintf (stderr, "%#06x/%#06x ", t->network_id, t->transport_stream_id);	dump_dvb_parameters (stderr, t->type, &t->param);	if (t->scan_done)		fprintf (stderr, " (done)");	if (t->last_tuning_failed)		fprintf (stderr, " (tuning failed)");	fprintf (stderr, "\n");}staticvoid 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;	dump_dvb_parameters (stderr, t->type, &t->param);	if (t->scan_done)		fprintf (stderr, " (done)");	if (t->last_tuning_failed)		fprintf (stderr, " (tuning failed)");	fprintf (stderr, "\n");}staticvoid 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;	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_HP = FEC_AUTO;	else		o->code_rate_HP = 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;	dump_dvb_parameters (stderr, t->type, &t->param);	if (t->scan_done)		fprintf (stderr, " (done)");	if (t->last_tuning_failed)		fprintf (stderr, " (tuning failed)");	fprintf (stderr, "\n");}staticvoid 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';	if (s->service_name)		free (s->service_name);	buf += len;	len = *buf;	buf++;	/* FIXME: handle character set correctly (e.g. via iconv)	 * c.f. EN 300 468 annex A */	if (len && *buf < 0x20) {		buf++;		len--;	}	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) */	for (src = dest = s->service_name; *src; src++)		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f))			*dest++ = *src;	*dest = '\0';	MSG("0x%04x 0x%04x: pmt_pid 0x%04x %s -- %s (%s, %sscrambled)",	    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 ? "" : "not ");}staticvoid parse_descriptors (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) {			WARN("descriptor_tag == 0x%02x, descriptor_len == %i",			     descriptor_tag, descriptor_len);			break;		}		switch (descriptor_tag) {		case 0x40:			parse_network_name_descriptor (buf, data);			break;		case 0x43:			parse_satellite_delivery_system_descriptor (buf, data);			break;		case 0x44:			parse_cable_delivery_system_descriptor (buf, data);			break;		case 0x48:			parse_service_descriptor (buf, data);			break;		case 0x5a:			parse_terrestrial_delivery_system_descriptor (buf, data);			break;		default:			/*WARN("skip descriptor 0x%02x", descriptor_tag)*/;		};		buf += descriptor_len;		descriptors_loop_len -= descriptor_len;	}}staticvoid parse_pat (const unsigned char *buf, int section_length,		int transport_stream_id){	while (section_length > 0) {		struct service *s;		int service_id = (buf[0] << 8) | buf[1];		if (service_id == 0) {			buf += 4;		/*  skip nit pid entry... */			section_length -= 4;			continue;		}		s = find_or_alloc_entry_by_id (&service_list,					       transport_stream_id,					       service_id);		s->pmt_pid = ((buf[2] & 0x1f) << 8) | buf[3];		buf += 4;		section_length -= 4;	};}staticvoid parse_pmt (const unsigned char *buf, int section_length, int service_id){	int program_info_len;	struct service *s;	s = find_or_alloc_entry_by_id (&service_list,				       -1,				       service_id);	s->pcr_pid = ((buf[0] & 0x1f) << 8) | buf[1];	program_info_len = ((buf[2] & 0x0f) << 8) | buf[3];	buf += program_info_len + 4;	section_length -= program_info_len + 4;	while (section_length > 0) {		int ES_info_len = ((buf[3] & 0x0f) << 8) | buf[4];		int elementary_pid = ((buf[1] & 0x1f) << 8) | buf[2];		switch (buf[0]) {		case 0x01:		case 0x02:			s->video_pid = elementary_pid;			break;		case 0x03:		case 0x04:			s->audio_pid = elementary_pid;			break;		default:			s->private_pid_count++;		};		buf += ES_info_len + 5;		section_length -= ES_info_len + 5;	};	MSG("0x%04x 0x%04x: %s -- %s, pmt_pid 0x%04x, vpid 0x%04x, apid 0x%04x",	    s->transport_stream_id,	    s->service_id,	    s->provider_name, s->service_name,	    s->pmt_pid, s->video_pid, s->audio_pid);}staticvoid parse_nit (const unsigned char *buf, int section_length, int network_id){	int descriptors_loop_len = ((buf[0] & 0x0f) << 8) | buf[1];	struct network *n;	if (section_length < descriptors_loop_len + 4 || !descriptors_loop_len)	{		WARN("network_id == 0x%02x, section_length == %i"		     "descriptors_loop_len == %i",		     network_id, section_length, descriptors_loop_len);		return;	}	n = find_or_alloc_entry_by_id (&network_list, 0, network_id);	parse_descriptors (buf + 2, descriptors_loop_len, n);	section_length -= descriptors_loop_len + 4;	buf += descriptors_loop_len + 4;	while (section_length > 4) {		int transport_stream_id = (buf[0] << 8) | buf[1];		struct transponder *t;		descriptors_loop_len = ((buf[4] & 0x0f) << 8) | buf[5];		if (section_length < descriptors_loop_len + 4 ||		    !transport_stream_id ||		    !descriptors_loop_len)		{			WARN("transport_stream_id == 0x%02x, "			     "section_length == %i, descriptors_loop_len == %i",			     transport_stream_id, section_length,			     descriptors_loop_len);			break;		}		t = find_or_alloc_entry_by_id (&transponder_list,					       network_id,					       transport_stream_id);		parse_descriptors (buf + 6, descriptors_loop_len, t);		section_length -= descriptors_loop_len + 6;		buf += descriptors_loop_len + 6;	};}staticvoid parse_sdt (const unsigned char *buf, int section_length,		int transport_stream_id){	buf += 3;	       /*  skip original network id + reserved field */	while (section_length > 4) {		int service_id = (buf[0] << 8) | buf[1];		int descriptors_loop_len = ((buf[3] & 0x0f) << 8) | buf[4];		struct service *s;		if (section_length < descriptors_loop_len ||		    !transport_stream_id ||		    !descriptors_loop_len)		{			WARN("service_id == 0x%02x, section_length == %i"			     "descriptors_loop_len == %i",			     service_id, section_length,			     descriptors_loop_len);			break;		}		s = find_or_alloc_entry_by_id (&service_list,					       transport_stream_id,					       service_id);		s->running = (buf[3] >> 5) & 0x7;		s->scrambled = (buf[3] >> 4) & 1;		parse_descriptors (buf + 5, descriptors_loop_len, s);		section_length -= descriptors_loop_len + 5;		buf += descriptors_loop_len + 5;	};}struct section_buf {	struct list_head list_head;	const char *dmx_devname;	int run_once;	int fd;	int pid;	int table_id [3];	int id [3];	int section_version_number [3];	int start_section_number [3];	uint8_t section_done [3][32];	int sectionfilter_done [3];	unsigned char buf [1024];	int bytes_in_buf;	time_t timeout;	time_t start_time;	time_t running_time;};static

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久一| 在线国产亚洲欧美| 国产清纯美女被跳蛋高潮一区二区久久w | 精品无码三级在线观看视频| 精品久久久久香蕉网| 国产原创一区二区| 中文字幕av一区二区三区高 | 欧美中文字幕不卡| 天天综合色天天| 欧美精品一区二区三区在线| 国产乱人伦精品一区二区在线观看| 国产精品久久久久久久久图文区| 91丨九色丨国产丨porny| 亚洲国产精品欧美一二99| 91精品婷婷国产综合久久| 经典三级在线一区| 国产精品免费网站在线观看| 欧美四级电影网| 国产自产高清不卡| 国产精品久久久久久久久免费丝袜 | 精品夜夜嗨av一区二区三区| 亚洲国产成人自拍| 欧美日韩一区二区三区不卡| 激情综合色综合久久| 国产精品久久久久婷婷二区次| 欧美性猛片aaaaaaa做受| 久久99精品久久久久婷婷| 亚洲欧美日韩久久精品| 欧美一区二区女人| 成人高清免费观看| 天天av天天翘天天综合网 | 日韩va欧美va亚洲va久久| 久久亚洲一级片| 在线一区二区三区四区五区 | 亚洲国产欧美一区二区三区丁香婷| 欧美一级午夜免费电影| www.色精品| 美女免费视频一区| 艳妇臀荡乳欲伦亚洲一区| 久久综合999| 欧美日韩亚洲国产综合| 成人夜色视频网站在线观看| 日韩激情视频在线观看| 亚洲欧美偷拍三级| 国产女主播视频一区二区| 日韩欧美美女一区二区三区| 日本丶国产丶欧美色综合| 国产一区二区三区久久悠悠色av| 亚洲成av人片在线观看无码| 国产精品久久久久久久久晋中| 日韩欧美一级精品久久| 欧美色图一区二区三区| www.日韩大片| 国产91丝袜在线播放九色| 免费在线观看不卡| 性久久久久久久久| 一区二区三区成人| 中文字幕亚洲综合久久菠萝蜜| 亚洲精品一区二区在线观看| 欧美男同性恋视频网站| 色天天综合色天天久久| 成人av在线资源网站| 国产一区二区主播在线| 久久精品国产久精国产| 日本vs亚洲vs韩国一区三区二区 | 日韩欧美一区二区在线视频| 在线观看91视频| 色婷婷激情综合| 97精品久久久久中文字幕 | 欧美色中文字幕| 欧美亚洲一区二区在线| 波多野结衣中文字幕一区| 国模娜娜一区二区三区| 狠狠色丁香婷婷综合| 久久精品久久99精品久久| 日韩黄色小视频| 久久99这里只有精品| 久久99精品久久久久久动态图| 久久66热re国产| 国产精品系列在线播放| 国产精品99久久久| 成人黄色小视频| 成人99免费视频| 色婷婷久久一区二区三区麻豆| 色一区在线观看| 欧美日韩一区视频| 日韩一区二区免费电影| 亚洲精品在线三区| 久久久精品天堂| 国产精品日韩成人| 亚洲色图丝袜美腿| 亚洲国产成人av| 日本不卡视频在线观看| 国内精品久久久久影院一蜜桃| 国产aⅴ精品一区二区三区色成熟| 国产成人av一区二区三区在线观看| 成人综合婷婷国产精品久久蜜臀 | 在线免费av一区| 欧美日韩一区 二区 三区 久久精品| 91福利社在线观看| 日韩一区二区三区三四区视频在线观看| 欧美一二三区在线| 久久麻豆一区二区| 中文字幕一区二区三区四区不卡| 亚洲美女一区二区三区| 五月激情综合色| 国产成人一级电影| 91视频观看免费| 欧美一级欧美三级| 国产亚洲福利社区一区| 一区二区三区不卡视频在线观看| 全国精品久久少妇| youjizz国产精品| 欧美一区二区观看视频| 国产三级精品在线| 午夜一区二区三区视频| 国产揄拍国内精品对白| 在线亚洲高清视频| 久久―日本道色综合久久| 亚洲欧美日韩国产另类专区| 青青草国产成人99久久| 91在线免费播放| 日韩精品专区在线影院重磅| 中文字幕一区二区三区蜜月| 日本不卡免费在线视频| 91一区二区在线| 精品国产麻豆免费人成网站| 亚洲天堂av一区| 韩国在线一区二区| 欧美三级电影在线看| 欧美国产97人人爽人人喊| 亚洲成人一区二区在线观看| 丁香亚洲综合激情啪啪综合| 91.成人天堂一区| 亚洲欧美aⅴ...| 国产精品综合久久| 欧美日本韩国一区| 自拍偷拍亚洲欧美日韩| 国产一区二区三区在线观看精品| 欧美日韩日日摸| 亚洲美女视频一区| 国产精品123| 欧美成人官网二区| 亚洲成av人影院| 在线观看欧美日本| 国产精品色噜噜| 国产一区二区在线看| 日韩免费一区二区三区在线播放| 亚洲综合视频在线观看| 97精品电影院| **欧美大码日韩| 成人一区二区三区视频在线观看 | 亚洲免费在线视频| 国产成人福利片| 久久网站热最新地址| 蜜桃视频在线观看一区二区| 欧美日本一道本| 五月婷婷综合网| 欧美日韩视频不卡| 亚洲一区二区三区激情| 91久久精品一区二区| 亚洲女性喷水在线观看一区| 91网站在线播放| 亚洲精品视频在线| 91久久久免费一区二区| 亚洲亚洲精品在线观看| 欧美亚洲一区二区三区四区| 亚洲自拍另类综合| 欧美日韩一区二区三区不卡 | 精品制服美女丁香| 日韩视频免费观看高清完整版在线观看 | 国产一区视频导航| 国产亚洲成aⅴ人片在线观看| 国产一区二区精品久久| 久久无码av三级| 懂色av一区二区在线播放| 国产精品国产自产拍在线| av中文字幕亚洲| 1024国产精品| 在线观看亚洲专区| 午夜精品123| 欧美变态tickle挠乳网站| 韩国视频一区二区| 国产精品久久三| 色美美综合视频| 亚洲成人综合视频| 日韩午夜激情免费电影| 国产一区二区三区久久悠悠色av| 欧美国产激情二区三区| 91猫先生在线| 日韩精品91亚洲二区在线观看 | 国产麻豆精品一区二区| 日本一区二区成人| 在线国产亚洲欧美| 毛片不卡一区二区| 国产精品高潮呻吟久久| 欧美三片在线视频观看| 极品少妇一区二区三区精品视频 | 亚洲成人7777| 精品捆绑美女sm三区|