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