| /* |
| * 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 |