⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pes_data_ebu.c

📁 dvbsnoop is a DVB/MPEG stream analyzer program. The program can be used to sniff, monitor, debug, d
💻 C
字号:
/*$Id: pes_data_ebu.c,v 1.4 2004/03/10 21:05:53 rasc Exp $ DVBSNOOP a dvb sniffer  and mpeg2 stream analyzer tool http://dvbsnoop.sourceforge.net/ (c) 2001-2004   Rainer.Scherg@gmx.de  (rasc) -- PES Data: Teletext, VPS, WSS, closed caption, etc. -- EBU data (see EN 300 472, EN 301 775, and some more)$Log: pes_data_ebu.c,v $Revision 1.4  2004/03/10 21:05:53  rascWSS (Wide Screen Signalling)  data decodingRevision 1.3  2004/03/09 20:59:23  rascVPS decoding (someone check the NPP & PTY code output please...)Revision 1.2  2004/02/04 22:36:29  rascmore EBU/teletext stuffRevision 1.1  2004/02/02 23:41:23  rasc- output indent changed to avoid \r  (which sucks on logged output)- EBU PES data started (teletext, vps, wss, ...)- bugfix: PES synch. data stream, restructuring- some other stuff*/#include "dvbsnoop.h"#include "pes_data_ebu.h"#include "strings/dvb_str.h"#include "ebu/teletext.h"#include "ebu/vps.h"#include "ebu/wss.h"#include "ebu/ebu_misc.h"#include "misc/helper.h"#include "misc/hexprint.h"#include "misc/output.h"static int teletext_data_field (int v, u_char *b, int len);static int vps_data_field (int v, u_char *b, int len);static int wss_data_field (int v, u_char *b, int len);static int closed_caption_data_field (int v, u_char *b, int len);static int monochrome_data_field (int v, u_char *b, int len);/*   -- Data Teletext*/void PES_decodeDATA_EBU_etc (u_char *b, int len){	   // -- PES_DATA_bytes EBU   // -- Data Buffer starts at PES_DATA_BYTES...   // --> see parent   int  data_identifier;   out_nl (4,"EBU data:");   indent (+1);   data_identifier		= getBits (b, 0,  0,  8);   outBit_S2x_NL (4,"data_identifier: ",	b, 0, 8,			(char *(*)(u_long)) dvbstrPESDataIdentifier);   b++;   len--;   while (len > 0) {	int len2;	int dui;	int n=0;	out_NL (4);   	dui  = outBit_S2x_NL (4,"data_unit_id: ",	b, 0, 8,			(char *(*)(u_long)) dvbstrPES_EBUDataUnitID);   	len2 = outBit_Sx_NL (4,"data_unit_length: ",	b, 8, 8);	b += 2;	len -= 2;	if (dui==0x02 || dui==0x03 || dui==0xC0 || dui==0xC1) {		n = teletext_data_field (4, b, len2);	} else if (dui==0xC3) {		n = vps_data_field(4, b,len2);	} else if (dui==0xC4) {		n = wss_data_field (4, b,len2);	} else if (dui==0xC5) {		n = closed_caption_data_field (4, b,len2);	} else if (dui==0xC6) {		n = monochrome_data_field (4, b,len2);	} else if (dui==0xFF) {		/* No data field */		n = 0;	}	if ( (len2-n) > 0 ) {		print_databytes (4,"stuffing bytes:", b+n, len2-n);	}	b += len2;	len -= len2;   }   indent (-1);}// EN 300 472  and  EN 300 706static int teletext_data_field (int v, u_char *b, int len){   int  v1 = v+1;   int  len2;   out_nl (v,"Teletext data:");   indent (+1);   	ebu_rfl_out (v1,b);   	outBit_S2x_NL (v1,"frame_coding: ", b, 8, 8,			(char *(*)(u_long)) dvbstrTELETEXT_framingcode );	b += 2;	len -= 2;	print_databytes (8,"data_block:", b, 42);	out_nl (v1," => decoded:");		indent (+1);		invertBuffer (b, 42);		len2 = print_teletext_control_decode (v1, b, 42);		b += len2;		len -= len2;		indent (-1);   indent (-1);   return 44;}// EN 300 231static int vps_data_field (int v, u_char *b, int len){   int  v1 = v+1;   out_nl (v,"VPS (Video Programming System) data:");   indent (+1);   	ebu_rfl_out (v1,b);	print_vps_decode (v1, b+1, 13);   indent (-1);   return 14;}// EN 300 294static int wss_data_field (int v, u_char *b, int len){   int  v1 = v+1;   out_nl (v,"WSS (Wide Screen Signalling) data:");   indent (+1);   	ebu_rfl_out (v1,b);	b++;	print_wss_decode (v1, b);		// 14 bit   	outBit_Sx_NL (v1,"reserved: ",		b,14, 2);   indent (-1);   return 3;}// Closed Captioning data packets EIA-608 Revision Astatic int closed_caption_data_field (int v, u_char *b, int len){   int  v1 = v+1;   out_nl (v,"CC (Closed Caption) data:");   indent (+1);   	ebu_rfl_out (v1,b);	// $$$ TODO   	outBit_Sx_NL (v1,"closed_caption_data_block: ",	b, 8,16);   indent (-1);   return 3;}// Monochrome 4:2:2: ITU-R BT.601-1 and ITU-R BT.656static int monochrome_data_field (int v, u_char *b, int len){   int  v1 = v+1;   int  n;   out_nl (v,"Monochrome 4:2:2 sample data:");   indent (+1);   	outBit_Sx_NL (v1,"first_segment_flag: ",b, 0, 1);   	outBit_Sx_NL (v1,"last_segment_flag: ", b, 1, 1);   	outBit_Sx_NL (v1,"field_parity: ",	b, 2, 1);   	outBit_Sx_NL (v1,"line_offset: ",	b, 3, 5);   	outBit_Sx_NL (v1,"first_pixel_position: ",b, 8, 16);   	n = outBit_Sx_NL (v1,"n_pixel: ",	b, 24, 8);	print_databytes (v1,"Y_values:", b+3, n);   indent (-1);   return 3+n;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -