123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- /*
- * dvb_filter.h
- *
- * Copyright (C) 2003 Convergence GmbH
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * 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 Lesser 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.
- */
- #ifndef _DVB_FILTER_H_
- #define _DVB_FILTER_H_
- #include <linux/slab.h>
- #include "demux.h"
- typedef int (dvb_filter_pes2ts_cb_t) (void *, unsigned char *);
- struct dvb_filter_pes2ts {
- unsigned char buf[188];
- unsigned char cc;
- dvb_filter_pes2ts_cb_t *cb;
- void *priv;
- };
- void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid,
- dvb_filter_pes2ts_cb_t *cb, void *priv);
- int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes,
- int len, int payload_start);
- #define PROG_STREAM_MAP 0xBC
- #define PRIVATE_STREAM1 0xBD
- #define PADDING_STREAM 0xBE
- #define PRIVATE_STREAM2 0xBF
- #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 DVB_PICTURE_START 0x00
- #define DVB_USER_START 0xb2
- #define DVB_SEQUENCE_HEADER 0xb3
- #define DVB_SEQUENCE_ERROR 0xb4
- #define DVB_EXTENSION_START 0xb5
- #define DVB_SEQUENCE_END 0xb7
- #define DVB_GOP_START 0xb8
- #define DVB_EXCEPT_SLICE 0xb0
- #define SEQUENCE_EXTENSION 0x01
- #define SEQUENCE_DISPLAY_EXTENSION 0x02
- #define PICTURE_CODING_EXTENSION 0x08
- #define QUANT_MATRIX_EXTENSION 0x03
- #define PICTURE_DISPLAY_EXTENSION 0x07
- #define I_FRAME 0x01
- #define B_FRAME 0x02
- #define P_FRAME 0x03
- /* Initialize sequence_data */
- #define INIT_HORIZONTAL_SIZE 720
- #define INIT_VERTICAL_SIZE 576
- #define INIT_ASPECT_RATIO 0x02
- #define INIT_FRAME_RATE 0x03
- #define INIT_DISP_HORIZONTAL_SIZE 540
- #define INIT_DISP_VERTICAL_SIZE 576
- //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
- #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
- #define MAX_PLENGTH 0xFFFF
- #define MMAX_PLENGTH (256*MAX_PLENGTH)
- #ifndef IPACKS
- #define IPACKS 2048
- #endif
- struct ipack {
- int size;
- int found;
- u8 *buf;
- u8 cid;
- u32 plength;
- u8 plen[2];
- u8 flag1;
- u8 flag2;
- u8 hlength;
- u8 pts[5];
- u16 *pid;
- int mpeg;
- u8 check;
- int which;
- int done;
- void *data;
- void (*func)(u8 *buf, int size, void *priv);
- int count;
- int repack_subids;
- };
- struct dvb_video_info {
- u32 horizontal_size;
- u32 vertical_size;
- u32 aspect_ratio;
- u32 framerate;
- u32 video_format;
- u32 bit_rate;
- u32 comp_bit_rate;
- u32 vbv_buffer_size;
- s16 vbv_delay;
- u32 CSPF;
- u32 off;
- };
- #define OFF_SIZE 4
- #define FIRST_FIELD 0
- #define SECOND_FIELD 1
- #define VIDEO_FRAME_PICTURE 0x03
- struct mpg_picture {
- int channel;
- struct dvb_video_info vinfo;
- u32 *sequence_gop_header;
- u32 *picture_header;
- s32 time_code;
- int low_delay;
- int closed_gop;
- int broken_link;
- int sequence_header_flag;
- int gop_flag;
- int sequence_end_flag;
- u8 profile_and_level;
- s32 picture_coding_parameter;
- u32 matrix[32];
- s8 matrix_change_flag;
- u8 picture_header_parameter;
- /* bit 0 - 2: bwd f code
- bit 3 : fpb vector
- bit 4 - 6: fwd f code
- bit 7 : fpf vector */
- int mpeg1_flag;
- int progressive_sequence;
- int sequence_display_extension_flag;
- u32 sequence_header_data;
- s16 last_frame_centre_horizontal_offset;
- s16 last_frame_centre_vertical_offset;
- u32 pts[2]; /* [0] 1st field, [1] 2nd field */
- int top_field_first;
- int repeat_first_field;
- int progressive_frame;
- int bank;
- int forward_bank;
- int backward_bank;
- int compress;
- s16 frame_centre_horizontal_offset[OFF_SIZE];
- /* [0-2] 1st field, [3] 2nd field */
- s16 frame_centre_vertical_offset[OFF_SIZE];
- /* [0-2] 1st field, [3] 2nd field */
- s16 temporal_reference[2];
- /* [0] 1st field, [1] 2nd field */
- s8 picture_coding_type[2];
- /* [0] 1st field, [1] 2nd field */
- s8 picture_structure[2];
- /* [0] 1st field, [1] 2nd field */
- s8 picture_display_extension_flag[2];
- /* [0] 1st field, [1] 2nd field */
- /* picture_display_extenion() 0:no 1:exit*/
- s8 pts_flag[2];
- /* [0] 1st field, [1] 2nd field */
- };
- struct dvb_audio_info {
- int layer;
- u32 bit_rate;
- u32 frequency;
- u32 mode;
- u32 mode_extension ;
- u32 emphasis;
- u32 framesize;
- u32 off;
- };
- int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr);
- #endif
|