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

📄 ctools.h

📁 DVBstream is based on the ts-rtp package available at http://www.linuxtv.org. It broadcasts a (subs
💻 H
字号:
/* *  mpegtools for the Siemens Fujitsu DVB PCI card * * Copyright (C) 2000, 2001 Marcus Metzler  *            for convergence integrated media GmbH *  * 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. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html *  * The author can be reached at marcus@convergence.de,  * the project's page is at http://linuxtv.org/dvb/ */#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <netinet/in.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include <libgen.h>#include <stdint.h>#include <netdb.h>#include <sys/param.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "ringbuffy.h"#include "transform.h"#ifndef _CTOOLS_H_#define _CTOOLS_H_#define VIDEO_MODE_PAL		0#define VIDEO_MODE_NTSC		1#ifdef __cplusplusextern "C" {#endif				/* __cplusplus */		typedef uint8_t u8;	typedef uint16_t u16;	typedef uint32_t u32;	typedef uint64_t u64;			enum {PS_STREAM, TS_STREAM, PES_STREAM};	enum {pDUNNO, pPAL, pNTSC};	u32 trans_pts_dts(u8 *pts);/*  PES*/#define PROG_STREAM_MAP  0xBC#ifndef PRIVATE_STREAM1#define PRIVATE_STREAM1  0xBD#endif#define PADDING_STREAM   0xBE#ifndef PRIVATE_STREAM2#define PRIVATE_STREAM2  0xBF#endif#define AUDIO_STREAM_S   0xC0#define AUDIO_STREAM_E   0xDF#define VIDEO_STREAM_S   0xE0#define VIDEO_STREAM_E   0xEF#define ECM_STREAM       0xF0#define EMM_STREAM       0xF1#define DSM_CC_STREAM    0xF2#define ISO13522_STREAM  0xF3#define PROG_STREAM_DIR  0xFF#define BUFFYSIZE    10*MAX_PLENGTH#define MAX_PTS      8192#define MAX_FRAME    8192#define MAX_PACK_L   4096#define PS_HEADER_L1    14#define PS_HEADER_L2    (PS_HEADER_L1+18)#define MAX_H_SIZE   (PES_H_MIN + PS_HEADER_L1 + 5)#define PES_MIN         7#define PES_H_MIN       9//flags1#define FLAGS            0x40#define SCRAMBLE_FLAGS   0x30#define PRIORITY_FLAG    0x08#define DATA_ALIGN_FLAG  0x04#define COPYRIGHT_FLAG   0x02#define ORIGINAL_FLAG    0x01//flags2#define PTS_DTS_FLAGS    0xC0#define ESCR_FLAG        0x20#define ES_RATE_FLAG     0x10#define DSM_TRICK_FLAG   0x08#define ADD_CPY_FLAG     0x04#define PES_CRC_FLAG     0x02#define PES_EXT_FLAG     0x01//pts_dts flags #define PTS_ONLY         0x80#define PTS_DTS          0xC0//private flags#define PRIVATE_DATA     0x80#define HEADER_FIELD     0x40#define PACK_SEQ_CTR     0x20#define P_STD_BUFFER     0x10#define PES_EXT_FLAG2    0x01#define MPEG1_2_ID       0x40#define STFF_LNGTH_MASK  0x3F	typedef struct pes_packet_{		u8 stream_id;		u8 llength[2];		uint32_t length;		u8 flags1;		u8 flags2;		u8 pes_hlength;		u8 pts[5];		u8 dts[5];		u8 escr[6];		u8 es_rate[3];		u8 trick;		u8 add_cpy;		u8 prev_pes_crc[2];		u8 priv_flags;		u8 pes_priv_data[16];		u8 pack_field_length;		u8 *pack_header;		u8 pck_sqnc_cntr;		u8 org_stuff_length;		u8 p_std[2];		u8 pes_ext_lngth;		u8 *pes_ext;		u8 *pes_pckt_data;		int padding;		int mpeg;		int mpeg1_pad;		u8 *mpeg1_headr;		u8 stuffing;	} pes_packet;	void init_pes(pes_packet *p);	void kill_pes(pes_packet *p);	void setlength_pes(pes_packet *p);	void nlength_pes(pes_packet *p);	int cwrite_pes(u8 *buf, pes_packet *p, long length);	void write_pes(int fd, pes_packet *p);	int read_pes(int f, pes_packet *p);	void cread_pes(char *buf, pes_packet *p);/*   Transport Stream*/#define TS_SIZE        188#define TRANS_ERROR    0x80#define PAY_START      0x40#define TRANS_PRIO     0x20#define PID_MASK_HI    0x1F//flags#define TRANS_SCRMBL1  0x80#define TRANS_SCRMBL2  0x40#define ADAPT_FIELD    0x20#define PAYLOAD        0x10#define COUNT_MASK     0x0F// adaptation flags#define DISCON_IND     0x80#define RAND_ACC_IND   0x40#define ES_PRI_IND     0x20#define PCR_FLAG       0x10#define OPCR_FLAG      0x08#define SPLICE_FLAG    0x04#define TRANS_PRIV     0x02#define ADAP_EXT_FLAG  0x01// adaptation extension flags#define LTW_FLAG       0x80#define PIECE_RATE     0x40#define SEAM_SPLICE    0x20	typedef struct  ts_packet_{		u8 pid[2];		u8 flags;		u8 count;		u8 data[184];		u8 adapt_length;		u8 adapt_flags;		u8 pcr[6];		u8 opcr[6];		u8 splice_count;		u8 priv_dat_len;		u8 *priv_dat;		u8 adapt_ext_len;		u8 adapt_eflags;		u8 ltw[2];		u8 piece_rate[3];		u8 dts[5];		int rest;		u8 stuffing;	} ts_packet;	void init_ts(ts_packet *p);	void kill_ts(ts_packet *p);	unsigned short pid_ts(ts_packet *p);	int cwrite_ts(u8 *buf, ts_packet *p, long length);	void write_ts(int fd, ts_packet *p);	int read_ts(int f, ts_packet *p);	void cread_ts (char *buf, ts_packet *p, long length);/*   Program Stream*/#define PACK_STUFF_MASK  0x07#define FIXED_FLAG       0x02#define CSPS_FLAG        0x01#define SAUDIO_LOCK_FLAG 0x80#define SVIDEO_LOCK_FLAG 0x40#define PS_MAX 200	typedef struct ps_packet_{		u8 scr[6];		u8 mux_rate[3];		u8 stuff_length;		u8 *data;		u8 sheader_llength[2];		int sheader_length;		u8 rate_bound[3];		u8 audio_bound;		u8 video_bound;		u8 reserved;		int npes;		int mpeg;	} ps_packet;	void init_ps(ps_packet *p);	void kill_ps(ps_packet *p);	void setlength_ps(ps_packet *p);	u32 scr_base_ps(ps_packet *p);	u16 scr_ext_ps(ps_packet *p);	int mux_ps(ps_packet *p);	int rate_ps(ps_packet *p);	int cwrite_ps(u8 *buf, ps_packet *p, long length);	void write_ps(int fd, ps_packet *p);	int read_ps (int f, ps_packet *p);	void cread_ps (char *buf, ps_packet *p, long length);#define MAX_PLENGTH 0xFFFF	typedef struct sectionstruct {		int  id;		int length;		int found;		u8 payload[4096+3];	} section;	typedef u32 tflags;#define MAXFILT 32#define MASKL 16	typedef struct trans_struct {		int found;		u8 packet[188];		u16 pid[MAXFILT];		u8 mask[MAXFILT*MASKL];		u8 filt[MAXFILT*MASKL];		u8 transbuf[MAXFILT*188];		int transcount[MAXFILT];		section sec[MAXFILT];	        tflags is_full;	        tflags pes_start;	        tflags pes_started;	        tflags pes;	        tflags set;	} trans;	void init_trans(trans *p);	int set_trans_filt(trans *p, int filtn, u16 pid, u8 *mask, 			   u8 *filt, int pes);	void clear_trans_filt(trans *p,int filtn);	int filt_is_set(trans *p, int filtn);	int pes_is_set(trans *p, int filtn);	int pes_is_started(trans *p, int filtn);	int pes_is_start(trans *p, int filtn);	int filt_is_ready(trans *p,int filtn);	void trans_filt(u8 *buf, int count, trans *p);	void filter(trans *p);	void pes_filter(trans *p, int filtn, int off);	void sec_filter(trans *p, int filtn, int off);	int get_filt_buf(trans *p, int filtn,u8 **buf); 	section *get_filt_sec(trans *p, int filtn); 	typedef struct a2pstruct{		int type;		int fd;		int found;		int length;		int headr;		int plength;		u8 cid;		u8 flags;		u8 abuf[MAX_PLENGTH];		int alength;		u8 vbuf[MAX_PLENGTH];		int vlength;	        u8 last_av_pts[4];		u8 av_pts[4];		u8 scr[4];		u8 pid0;		u8 pid1;		u8 pidv;		u8 pida;	} a2p;	void get_pespts(u8 *av_pts,u8 *pts);	void init_a2p(a2p *p);	void av_pes_to_pes(u8 *buf,int count, a2p *p);	int w_pesh(u8 id,int length ,u8 *pts, u8 *obuf);	int w_tsh(u8 id,int length ,u8 *pts, u8 *obuf,a2p *p,int startpes);	void pts2pts(u8 *av_pts, u8 *pts);	void write_ps_headr(ps_packet *p,u8 *pts,int fd);	typedef struct p2t_s{		u8           pes[TS_SIZE];		u8           counter;		long int     pos;		int          frags;		void         (*t_out)(u8 const *buf);	} p2t_t;	void twrite(u8 const *buf);	void init_p2t(p2t_t *p, void (*fkt)(u8 const *buf));	long int find_pes_header(u8 const *buf, long int length, int *frags);	void pes_to_ts( u8 const *buf, long int length, u16 pid, p2t_t *p);	void p_to_t( u8 const *buf, long int length, u16 pid, u8 *counter, 		    void (*ts_write)(u8 const *));	int write_pes_header(u8 id,int length , long PTS, 			     u8 *obuf, int stuffing);	int write_ps_header(uint8_t *buf, 			    uint32_t   SCR, 			    long  muxr,			    uint8_t    audio_bound,			    uint8_t    fixed,			    uint8_t    CSPS,			    uint8_t    audio_lock,			    uint8_t    video_lock,			    uint8_t    video_bound,			    uint8_t    stream1,			    uint8_t    buffer1_scale,			    uint32_t   buffer1_size,			    uint8_t    stream2,			    uint8_t    buffer2_scale,			    uint32_t   buffer2_size);                    		void split_mpg(char *name, uint64_t size);	void cut_mpg(char *name, uint64_t size);	int http_open (char *url);#ifdef __cplusplus}#endif				/* __cplusplus */#endif /*_CTOOLS_H_*/

⌨️ 快捷键说明

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