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