Linux 6.9-rc4
[sfrench/cifs-2.6.git] / drivers / media / pci / ttpci / dvb_filter.h
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
24 typedef int (dvb_filter_pes2ts_cb_t) (void *, unsigned char *);
25
26 struct dvb_filter_pes2ts {
27         unsigned char buf[188];
28         unsigned char cc;
29         dvb_filter_pes2ts_cb_t *cb;
30         void *priv;
31 };
32
33 void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid,
34                             dvb_filter_pes2ts_cb_t *cb, void *priv);
35
36 int 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
130 struct 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
152 struct 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
171 struct 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
228 struct 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
239 int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr);
240
241
242 #endif