1*989cf18eSMauro Carvalho Chehab /* 2*989cf18eSMauro Carvalho Chehab * dvb_filter.h 3*989cf18eSMauro Carvalho Chehab * 4*989cf18eSMauro Carvalho Chehab * Copyright (C) 2003 Convergence GmbH 5*989cf18eSMauro Carvalho Chehab * 6*989cf18eSMauro Carvalho Chehab * This program is free software; you can redistribute it and/or 7*989cf18eSMauro Carvalho Chehab * modify it under the terms of the GNU Lesser General Public License 8*989cf18eSMauro Carvalho Chehab * as published by the Free Software Foundation; either version 2.1 9*989cf18eSMauro Carvalho Chehab * of the License, or (at your option) any later version. 10*989cf18eSMauro Carvalho Chehab * 11*989cf18eSMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 12*989cf18eSMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 13*989cf18eSMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*989cf18eSMauro Carvalho Chehab * GNU General Public License for more details. 15*989cf18eSMauro Carvalho Chehab */ 16*989cf18eSMauro Carvalho Chehab 17*989cf18eSMauro Carvalho Chehab #ifndef _DVB_FILTER_H_ 18*989cf18eSMauro Carvalho Chehab #define _DVB_FILTER_H_ 19*989cf18eSMauro Carvalho Chehab 20*989cf18eSMauro Carvalho Chehab #include <linux/slab.h> 21*989cf18eSMauro Carvalho Chehab 22*989cf18eSMauro Carvalho Chehab #include <media/demux.h> 23*989cf18eSMauro Carvalho Chehab 24*989cf18eSMauro Carvalho Chehab typedef int (dvb_filter_pes2ts_cb_t) (void *, unsigned char *); 25*989cf18eSMauro Carvalho Chehab 26*989cf18eSMauro Carvalho Chehab struct dvb_filter_pes2ts { 27*989cf18eSMauro Carvalho Chehab unsigned char buf[188]; 28*989cf18eSMauro Carvalho Chehab unsigned char cc; 29*989cf18eSMauro Carvalho Chehab dvb_filter_pes2ts_cb_t *cb; 30*989cf18eSMauro Carvalho Chehab void *priv; 31*989cf18eSMauro Carvalho Chehab }; 32*989cf18eSMauro Carvalho Chehab 33*989cf18eSMauro Carvalho Chehab void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid, 34*989cf18eSMauro Carvalho Chehab dvb_filter_pes2ts_cb_t *cb, void *priv); 35*989cf18eSMauro Carvalho Chehab 36*989cf18eSMauro Carvalho Chehab int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, 37*989cf18eSMauro Carvalho Chehab int len, int payload_start); 38*989cf18eSMauro Carvalho Chehab 39*989cf18eSMauro Carvalho Chehab 40*989cf18eSMauro Carvalho Chehab #define PROG_STREAM_MAP 0xBC 41*989cf18eSMauro Carvalho Chehab #define PRIVATE_STREAM1 0xBD 42*989cf18eSMauro Carvalho Chehab #define PADDING_STREAM 0xBE 43*989cf18eSMauro Carvalho Chehab #define PRIVATE_STREAM2 0xBF 44*989cf18eSMauro Carvalho Chehab #define AUDIO_STREAM_S 0xC0 45*989cf18eSMauro Carvalho Chehab #define AUDIO_STREAM_E 0xDF 46*989cf18eSMauro Carvalho Chehab #define VIDEO_STREAM_S 0xE0 47*989cf18eSMauro Carvalho Chehab #define VIDEO_STREAM_E 0xEF 48*989cf18eSMauro Carvalho Chehab #define ECM_STREAM 0xF0 49*989cf18eSMauro Carvalho Chehab #define EMM_STREAM 0xF1 50*989cf18eSMauro Carvalho Chehab #define DSM_CC_STREAM 0xF2 51*989cf18eSMauro Carvalho Chehab #define ISO13522_STREAM 0xF3 52*989cf18eSMauro Carvalho Chehab #define PROG_STREAM_DIR 0xFF 53*989cf18eSMauro Carvalho Chehab 54*989cf18eSMauro Carvalho Chehab #define DVB_PICTURE_START 0x00 55*989cf18eSMauro Carvalho Chehab #define DVB_USER_START 0xb2 56*989cf18eSMauro Carvalho Chehab #define DVB_SEQUENCE_HEADER 0xb3 57*989cf18eSMauro Carvalho Chehab #define DVB_SEQUENCE_ERROR 0xb4 58*989cf18eSMauro Carvalho Chehab #define DVB_EXTENSION_START 0xb5 59*989cf18eSMauro Carvalho Chehab #define DVB_SEQUENCE_END 0xb7 60*989cf18eSMauro Carvalho Chehab #define DVB_GOP_START 0xb8 61*989cf18eSMauro Carvalho Chehab #define DVB_EXCEPT_SLICE 0xb0 62*989cf18eSMauro Carvalho Chehab 63*989cf18eSMauro Carvalho Chehab #define SEQUENCE_EXTENSION 0x01 64*989cf18eSMauro Carvalho Chehab #define SEQUENCE_DISPLAY_EXTENSION 0x02 65*989cf18eSMauro Carvalho Chehab #define PICTURE_CODING_EXTENSION 0x08 66*989cf18eSMauro Carvalho Chehab #define QUANT_MATRIX_EXTENSION 0x03 67*989cf18eSMauro Carvalho Chehab #define PICTURE_DISPLAY_EXTENSION 0x07 68*989cf18eSMauro Carvalho Chehab 69*989cf18eSMauro Carvalho Chehab #define I_FRAME 0x01 70*989cf18eSMauro Carvalho Chehab #define B_FRAME 0x02 71*989cf18eSMauro Carvalho Chehab #define P_FRAME 0x03 72*989cf18eSMauro Carvalho Chehab 73*989cf18eSMauro Carvalho Chehab /* Initialize sequence_data */ 74*989cf18eSMauro Carvalho Chehab #define INIT_HORIZONTAL_SIZE 720 75*989cf18eSMauro Carvalho Chehab #define INIT_VERTICAL_SIZE 576 76*989cf18eSMauro Carvalho Chehab #define INIT_ASPECT_RATIO 0x02 77*989cf18eSMauro Carvalho Chehab #define INIT_FRAME_RATE 0x03 78*989cf18eSMauro Carvalho Chehab #define INIT_DISP_HORIZONTAL_SIZE 540 79*989cf18eSMauro Carvalho Chehab #define INIT_DISP_VERTICAL_SIZE 576 80*989cf18eSMauro Carvalho Chehab 81*989cf18eSMauro Carvalho Chehab 82*989cf18eSMauro Carvalho Chehab //flags2 83*989cf18eSMauro Carvalho Chehab #define PTS_DTS_FLAGS 0xC0 84*989cf18eSMauro Carvalho Chehab #define ESCR_FLAG 0x20 85*989cf18eSMauro Carvalho Chehab #define ES_RATE_FLAG 0x10 86*989cf18eSMauro Carvalho Chehab #define DSM_TRICK_FLAG 0x08 87*989cf18eSMauro Carvalho Chehab #define ADD_CPY_FLAG 0x04 88*989cf18eSMauro Carvalho Chehab #define PES_CRC_FLAG 0x02 89*989cf18eSMauro Carvalho Chehab #define PES_EXT_FLAG 0x01 90*989cf18eSMauro Carvalho Chehab 91*989cf18eSMauro Carvalho Chehab //pts_dts flags 92*989cf18eSMauro Carvalho Chehab #define PTS_ONLY 0x80 93*989cf18eSMauro Carvalho Chehab #define PTS_DTS 0xC0 94*989cf18eSMauro Carvalho Chehab 95*989cf18eSMauro Carvalho Chehab #define TS_SIZE 188 96*989cf18eSMauro Carvalho Chehab #define TRANS_ERROR 0x80 97*989cf18eSMauro Carvalho Chehab #define PAY_START 0x40 98*989cf18eSMauro Carvalho Chehab #define TRANS_PRIO 0x20 99*989cf18eSMauro Carvalho Chehab #define PID_MASK_HI 0x1F 100*989cf18eSMauro Carvalho Chehab //flags 101*989cf18eSMauro Carvalho Chehab #define TRANS_SCRMBL1 0x80 102*989cf18eSMauro Carvalho Chehab #define TRANS_SCRMBL2 0x40 103*989cf18eSMauro Carvalho Chehab #define ADAPT_FIELD 0x20 104*989cf18eSMauro Carvalho Chehab #define PAYLOAD 0x10 105*989cf18eSMauro Carvalho Chehab #define COUNT_MASK 0x0F 106*989cf18eSMauro Carvalho Chehab 107*989cf18eSMauro Carvalho Chehab // adaptation flags 108*989cf18eSMauro Carvalho Chehab #define DISCON_IND 0x80 109*989cf18eSMauro Carvalho Chehab #define RAND_ACC_IND 0x40 110*989cf18eSMauro Carvalho Chehab #define ES_PRI_IND 0x20 111*989cf18eSMauro Carvalho Chehab #define PCR_FLAG 0x10 112*989cf18eSMauro Carvalho Chehab #define OPCR_FLAG 0x08 113*989cf18eSMauro Carvalho Chehab #define SPLICE_FLAG 0x04 114*989cf18eSMauro Carvalho Chehab #define TRANS_PRIV 0x02 115*989cf18eSMauro Carvalho Chehab #define ADAP_EXT_FLAG 0x01 116*989cf18eSMauro Carvalho Chehab 117*989cf18eSMauro Carvalho Chehab // adaptation extension flags 118*989cf18eSMauro Carvalho Chehab #define LTW_FLAG 0x80 119*989cf18eSMauro Carvalho Chehab #define PIECE_RATE 0x40 120*989cf18eSMauro Carvalho Chehab #define SEAM_SPLICE 0x20 121*989cf18eSMauro Carvalho Chehab 122*989cf18eSMauro Carvalho Chehab 123*989cf18eSMauro Carvalho Chehab #define MAX_PLENGTH 0xFFFF 124*989cf18eSMauro Carvalho Chehab #define MMAX_PLENGTH (256*MAX_PLENGTH) 125*989cf18eSMauro Carvalho Chehab 126*989cf18eSMauro Carvalho Chehab #ifndef IPACKS 127*989cf18eSMauro Carvalho Chehab #define IPACKS 2048 128*989cf18eSMauro Carvalho Chehab #endif 129*989cf18eSMauro Carvalho Chehab 130*989cf18eSMauro Carvalho Chehab struct ipack { 131*989cf18eSMauro Carvalho Chehab int size; 132*989cf18eSMauro Carvalho Chehab int found; 133*989cf18eSMauro Carvalho Chehab u8 *buf; 134*989cf18eSMauro Carvalho Chehab u8 cid; 135*989cf18eSMauro Carvalho Chehab u32 plength; 136*989cf18eSMauro Carvalho Chehab u8 plen[2]; 137*989cf18eSMauro Carvalho Chehab u8 flag1; 138*989cf18eSMauro Carvalho Chehab u8 flag2; 139*989cf18eSMauro Carvalho Chehab u8 hlength; 140*989cf18eSMauro Carvalho Chehab u8 pts[5]; 141*989cf18eSMauro Carvalho Chehab u16 *pid; 142*989cf18eSMauro Carvalho Chehab int mpeg; 143*989cf18eSMauro Carvalho Chehab u8 check; 144*989cf18eSMauro Carvalho Chehab int which; 145*989cf18eSMauro Carvalho Chehab int done; 146*989cf18eSMauro Carvalho Chehab void *data; 147*989cf18eSMauro Carvalho Chehab void (*func)(u8 *buf, int size, void *priv); 148*989cf18eSMauro Carvalho Chehab int count; 149*989cf18eSMauro Carvalho Chehab int repack_subids; 150*989cf18eSMauro Carvalho Chehab }; 151*989cf18eSMauro Carvalho Chehab 152*989cf18eSMauro Carvalho Chehab struct dvb_video_info { 153*989cf18eSMauro Carvalho Chehab u32 horizontal_size; 154*989cf18eSMauro Carvalho Chehab u32 vertical_size; 155*989cf18eSMauro Carvalho Chehab u32 aspect_ratio; 156*989cf18eSMauro Carvalho Chehab u32 framerate; 157*989cf18eSMauro Carvalho Chehab u32 video_format; 158*989cf18eSMauro Carvalho Chehab u32 bit_rate; 159*989cf18eSMauro Carvalho Chehab u32 comp_bit_rate; 160*989cf18eSMauro Carvalho Chehab u32 vbv_buffer_size; 161*989cf18eSMauro Carvalho Chehab s16 vbv_delay; 162*989cf18eSMauro Carvalho Chehab u32 CSPF; 163*989cf18eSMauro Carvalho Chehab u32 off; 164*989cf18eSMauro Carvalho Chehab }; 165*989cf18eSMauro Carvalho Chehab 166*989cf18eSMauro Carvalho Chehab #define OFF_SIZE 4 167*989cf18eSMauro Carvalho Chehab #define FIRST_FIELD 0 168*989cf18eSMauro Carvalho Chehab #define SECOND_FIELD 1 169*989cf18eSMauro Carvalho Chehab #define VIDEO_FRAME_PICTURE 0x03 170*989cf18eSMauro Carvalho Chehab 171*989cf18eSMauro Carvalho Chehab struct mpg_picture { 172*989cf18eSMauro Carvalho Chehab int channel; 173*989cf18eSMauro Carvalho Chehab struct dvb_video_info vinfo; 174*989cf18eSMauro Carvalho Chehab u32 *sequence_gop_header; 175*989cf18eSMauro Carvalho Chehab u32 *picture_header; 176*989cf18eSMauro Carvalho Chehab s32 time_code; 177*989cf18eSMauro Carvalho Chehab int low_delay; 178*989cf18eSMauro Carvalho Chehab int closed_gop; 179*989cf18eSMauro Carvalho Chehab int broken_link; 180*989cf18eSMauro Carvalho Chehab int sequence_header_flag; 181*989cf18eSMauro Carvalho Chehab int gop_flag; 182*989cf18eSMauro Carvalho Chehab int sequence_end_flag; 183*989cf18eSMauro Carvalho Chehab 184*989cf18eSMauro Carvalho Chehab u8 profile_and_level; 185*989cf18eSMauro Carvalho Chehab s32 picture_coding_parameter; 186*989cf18eSMauro Carvalho Chehab u32 matrix[32]; 187*989cf18eSMauro Carvalho Chehab s8 matrix_change_flag; 188*989cf18eSMauro Carvalho Chehab 189*989cf18eSMauro Carvalho Chehab u8 picture_header_parameter; 190*989cf18eSMauro Carvalho Chehab /* bit 0 - 2: bwd f code 191*989cf18eSMauro Carvalho Chehab bit 3 : fpb vector 192*989cf18eSMauro Carvalho Chehab bit 4 - 6: fwd f code 193*989cf18eSMauro Carvalho Chehab bit 7 : fpf vector */ 194*989cf18eSMauro Carvalho Chehab 195*989cf18eSMauro Carvalho Chehab int mpeg1_flag; 196*989cf18eSMauro Carvalho Chehab int progressive_sequence; 197*989cf18eSMauro Carvalho Chehab int sequence_display_extension_flag; 198*989cf18eSMauro Carvalho Chehab u32 sequence_header_data; 199*989cf18eSMauro Carvalho Chehab s16 last_frame_centre_horizontal_offset; 200*989cf18eSMauro Carvalho Chehab s16 last_frame_centre_vertical_offset; 201*989cf18eSMauro Carvalho Chehab 202*989cf18eSMauro Carvalho Chehab u32 pts[2]; /* [0] 1st field, [1] 2nd field */ 203*989cf18eSMauro Carvalho Chehab int top_field_first; 204*989cf18eSMauro Carvalho Chehab int repeat_first_field; 205*989cf18eSMauro Carvalho Chehab int progressive_frame; 206*989cf18eSMauro Carvalho Chehab int bank; 207*989cf18eSMauro Carvalho Chehab int forward_bank; 208*989cf18eSMauro Carvalho Chehab int backward_bank; 209*989cf18eSMauro Carvalho Chehab int compress; 210*989cf18eSMauro Carvalho Chehab s16 frame_centre_horizontal_offset[OFF_SIZE]; 211*989cf18eSMauro Carvalho Chehab /* [0-2] 1st field, [3] 2nd field */ 212*989cf18eSMauro Carvalho Chehab s16 frame_centre_vertical_offset[OFF_SIZE]; 213*989cf18eSMauro Carvalho Chehab /* [0-2] 1st field, [3] 2nd field */ 214*989cf18eSMauro Carvalho Chehab s16 temporal_reference[2]; 215*989cf18eSMauro Carvalho Chehab /* [0] 1st field, [1] 2nd field */ 216*989cf18eSMauro Carvalho Chehab 217*989cf18eSMauro Carvalho Chehab s8 picture_coding_type[2]; 218*989cf18eSMauro Carvalho Chehab /* [0] 1st field, [1] 2nd field */ 219*989cf18eSMauro Carvalho Chehab s8 picture_structure[2]; 220*989cf18eSMauro Carvalho Chehab /* [0] 1st field, [1] 2nd field */ 221*989cf18eSMauro Carvalho Chehab s8 picture_display_extension_flag[2]; 222*989cf18eSMauro Carvalho Chehab /* [0] 1st field, [1] 2nd field */ 223*989cf18eSMauro Carvalho Chehab /* picture_display_extenion() 0:no 1:exit*/ 224*989cf18eSMauro Carvalho Chehab s8 pts_flag[2]; 225*989cf18eSMauro Carvalho Chehab /* [0] 1st field, [1] 2nd field */ 226*989cf18eSMauro Carvalho Chehab }; 227*989cf18eSMauro Carvalho Chehab 228*989cf18eSMauro Carvalho Chehab struct dvb_audio_info { 229*989cf18eSMauro Carvalho Chehab int layer; 230*989cf18eSMauro Carvalho Chehab u32 bit_rate; 231*989cf18eSMauro Carvalho Chehab u32 frequency; 232*989cf18eSMauro Carvalho Chehab u32 mode; 233*989cf18eSMauro Carvalho Chehab u32 mode_extension ; 234*989cf18eSMauro Carvalho Chehab u32 emphasis; 235*989cf18eSMauro Carvalho Chehab u32 framesize; 236*989cf18eSMauro Carvalho Chehab u32 off; 237*989cf18eSMauro Carvalho Chehab }; 238*989cf18eSMauro Carvalho Chehab 239*989cf18eSMauro Carvalho Chehab int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr); 240*989cf18eSMauro Carvalho Chehab 241*989cf18eSMauro Carvalho Chehab 242*989cf18eSMauro Carvalho Chehab #endif 243