hlsdemux: Enable support for external subtitles
[platform/upstream/gstreamer.git] / ext / closedcaption / bit_slicer.h
1 /*
2  *  libzvbi -- Bit slicer
3  *
4  *  Copyright (C) 2000-2007 Michael H. Schimek
5  *
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Library General Public
8  *  License as published by the Free Software Foundation; either
9  *  version 2 of the License, or (at your option) any later version.
10  *
11  *  This library 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 GNU
14  *  Library General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Library General Public
17  *  License along with this library; if not, write to the 
18  *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
19  *  Boston, MA  02110-1301  USA.
20  */
21
22 /* $Id: bit_slicer.h,v 1.11 2008-02-24 14:18:13 mschimek Exp $ */
23
24 #ifndef __ZVBI_BIT_SLICER_H__
25 #define __ZVBI_BIT_SLICER_H__
26
27 #include "sampling_par.h"
28
29 VBI_BEGIN_DECLS
30
31 /**
32  * @addtogroup BitSlicer
33  * @{
34  */
35
36 /**
37  * @brief Modulation used for VBI data transmission.
38  */
39 typedef enum {
40         /**
41          * The data is 'non-return to zero' coded, logical '1' bits
42          * are described by high sample values, logical '0' bits by
43          * low values. The data is last significant bit first transmitted.
44          */
45         VBI3_MODULATION_NRZ_LSB,
46
47         /**
48          * 'Non-return to zero' coded, most significant bit first
49          * transmitted.
50          */
51         VBI3_MODULATION_NRZ_MSB,
52
53         /**
54          * The data is 'bi-phase' coded. Each data bit is described
55          * by two complementary signalling elements, a logical '1'
56          * by a sequence of '10' elements, a logical '0' by a '01'
57          * sequence. The data is last significant bit first transmitted.
58          */
59         VBI3_MODULATION_BIPHASE_LSB,
60
61         /** 'Bi-phase' coded, most significant bit first transmitted. */
62         VBI3_MODULATION_BIPHASE_MSB
63 } vbi3_modulation;
64
65 /**
66  * @brief Bit slicer context.
67  *
68  * The contents of this structure are private.
69  * Call vbi3_bit_slicer_new() to allocate a bit slicer context.
70  */
71 typedef struct _vbi3_bit_slicer vbi3_bit_slicer;
72
73 typedef enum {
74         VBI3_CRI_BIT = 1,
75         VBI3_FRC_BIT,
76         VBI3_PAYLOAD_BIT
77 } vbi3_bit_slicer_bit;
78
79 /**
80  * @brief Bit slicer sampling point.
81  *
82  * This structure contains information about
83  * a bit sampled by the bit slicer.
84  */
85 typedef struct {
86         /** Whether this struct refers to a CRI, FRC or payload bit. */
87         vbi3_bit_slicer_bit     kind;
88
89         /** Number of the sample times 256. */
90         unsigned int            index;
91
92         /** Signal amplitude at this sample, in range 0 to 65535. */
93         unsigned int            level;
94
95         /** 0/1 threshold at this sample, in range 0 to 65535. */
96         unsigned int            thresh;
97 } vbi3_bit_slicer_point;
98
99 extern vbi_bool
100 vbi3_bit_slicer_slice_with_points
101                                 (vbi3_bit_slicer *      bs,
102                                  uint8_t *              buffer,
103                                  unsigned int           buffer_size,
104                                  vbi3_bit_slicer_point *points,
105                                  unsigned int *         n_points,
106                                  unsigned int           max_points,
107                                  const uint8_t *        raw)
108   _vbi_nonnull ((1, 2, 4, 5, 7));
109 extern vbi_bool
110 vbi3_bit_slicer_slice           (vbi3_bit_slicer *      bs,
111                                  uint8_t *              buffer,
112                                  unsigned int           buffer_size,
113                                  const uint8_t *        raw)
114   _vbi_nonnull ((1, 2, 4));
115 extern vbi_bool
116 vbi3_bit_slicer_set_params      (vbi3_bit_slicer *      bs,
117                                  vbi_pixfmt             sample_format,
118                                  unsigned int           sampling_rate,
119                                  unsigned int           sample_offset,
120                                  unsigned int           samples_per_line,
121                                  unsigned int           cri,
122                                  unsigned int           cri_mask,
123                                  unsigned int           cri_bits,
124                                  unsigned int           cri_rate,
125                                  unsigned int           cri_end,
126                                  unsigned int           frc,
127                                  unsigned int           frc_bits,
128                                  unsigned int           payload_bits,
129                                  unsigned int           payload_rate,
130                                  vbi3_modulation        modulation)
131   _vbi_nonnull ((1));
132 extern void
133 vbi3_bit_slicer_set_log_fn      (vbi3_bit_slicer *      bs,
134                                  vbi_log_mask           mask,
135                                  vbi_log_fn *           log_fn,
136                                  void *                 user_data)
137   _vbi_nonnull ((1));
138 extern void
139 vbi3_bit_slicer_delete          (vbi3_bit_slicer *      bs);
140 extern vbi3_bit_slicer *
141 vbi3_bit_slicer_new             (void)
142   _vbi_alloc;
143
144 /* Private */
145
146 typedef vbi_bool
147 _vbi3_bit_slicer_fn             (vbi3_bit_slicer *      bs,
148                                  uint8_t *              buffer,
149                                  vbi3_bit_slicer_point *points,
150                                  unsigned int *         n_points,
151                                  const uint8_t *        raw);
152
153 /** @internal */
154 struct _vbi3_bit_slicer {
155         _vbi3_bit_slicer_fn *   func;
156
157         vbi_pixfmt              sample_format;
158         unsigned int            cri;
159         unsigned int            cri_mask;
160         unsigned int            thresh;
161         unsigned int            thresh_frac;
162         unsigned int            cri_samples;
163         unsigned int            cri_rate;
164         unsigned int            oversampling_rate;
165         unsigned int            phase_shift;
166         unsigned int            step;
167         unsigned int            frc;
168         unsigned int            frc_bits;
169         unsigned int            total_bits;
170         unsigned int            payload;
171         unsigned int            endian;
172         unsigned int            bytes_per_sample;
173         unsigned int            skip;
174         unsigned int            green_mask;
175
176         _vbi_log_hook           log;
177 };
178
179 extern void
180 _vbi3_bit_slicer_destroy        (vbi3_bit_slicer *      bs)
181   _vbi_nonnull ((1));
182 extern vbi_bool
183 _vbi3_bit_slicer_init           (vbi3_bit_slicer *      bs)
184   _vbi_nonnull ((1));
185
186 /** @} */
187
188 VBI_END_DECLS
189
190 #endif /* __ZVBI_BIT_SLICER_H__ */
191
192 /*
193 Local variables:
194 c-set-style: K&R
195 c-basic-offset: 8
196 End:
197 */