| /* | |
| * libzvbi -- Bit slicer | |
| * | |
| * Copyright (C) 2000-2007 Michael H. Schimek | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Library General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2 of the License, or (at your option) any later version. | |
| * | |
| * This library 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 | |
| * Library General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Library General Public | |
| * License along with this library; if not, write to the | |
| * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
| * Boston, MA 02110-1301 USA. | |
| */ | |
| /* $Id: bit_slicer.h,v 1.11 2008-02-24 14:18:13 mschimek Exp $ */ | |
| #ifndef __ZVBI_BIT_SLICER_H__ | |
| #define __ZVBI_BIT_SLICER_H__ | |
| #include "sampling_par.h" | |
| VBI_BEGIN_DECLS | |
| /** | |
| * @addtogroup BitSlicer | |
| * @{ | |
| */ | |
| /** | |
| * @brief Modulation used for VBI data transmission. | |
| */ | |
| typedef enum { | |
| /** | |
| * The data is 'non-return to zero' coded, logical '1' bits | |
| * are described by high sample values, logical '0' bits by | |
| * low values. The data is last significant bit first transmitted. | |
| */ | |
| VBI3_MODULATION_NRZ_LSB, | |
| /** | |
| * 'Non-return to zero' coded, most significant bit first | |
| * transmitted. | |
| */ | |
| VBI3_MODULATION_NRZ_MSB, | |
| /** | |
| * The data is 'bi-phase' coded. Each data bit is described | |
| * by two complementary signalling elements, a logical '1' | |
| * by a sequence of '10' elements, a logical '0' by a '01' | |
| * sequence. The data is last significant bit first transmitted. | |
| */ | |
| VBI3_MODULATION_BIPHASE_LSB, | |
| /** 'Bi-phase' coded, most significant bit first transmitted. */ | |
| VBI3_MODULATION_BIPHASE_MSB | |
| } vbi3_modulation; | |
| /** | |
| * @brief Bit slicer context. | |
| * | |
| * The contents of this structure are private. | |
| * Call vbi3_bit_slicer_new() to allocate a bit slicer context. | |
| */ | |
| typedef struct _vbi3_bit_slicer vbi3_bit_slicer; | |
| typedef enum { | |
| VBI3_CRI_BIT = 1, | |
| VBI3_FRC_BIT, | |
| VBI3_PAYLOAD_BIT | |
| } vbi3_bit_slicer_bit; | |
| /** | |
| * @brief Bit slicer sampling point. | |
| * | |
| * This structure contains information about | |
| * a bit sampled by the bit slicer. | |
| */ | |
| typedef struct { | |
| /** Whether this struct refers to a CRI, FRC or payload bit. */ | |
| vbi3_bit_slicer_bit kind; | |
| /** Number of the sample times 256. */ | |
| unsigned int index; | |
| /** Signal amplitude at this sample, in range 0 to 65535. */ | |
| unsigned int level; | |
| /** 0/1 threshold at this sample, in range 0 to 65535. */ | |
| unsigned int thresh; | |
| } vbi3_bit_slicer_point; | |
| extern vbi_bool | |
| vbi3_bit_slicer_slice_with_points | |
| (vbi3_bit_slicer * bs, | |
| uint8_t * buffer, | |
| unsigned int buffer_size, | |
| vbi3_bit_slicer_point *points, | |
| unsigned int * n_points, | |
| unsigned int max_points, | |
| const uint8_t * raw) | |
| _vbi_nonnull ((1, 2, 4, 5, 7)); | |
| extern vbi_bool | |
| vbi3_bit_slicer_slice (vbi3_bit_slicer * bs, | |
| uint8_t * buffer, | |
| unsigned int buffer_size, | |
| const uint8_t * raw) | |
| _vbi_nonnull ((1, 2, 4)); | |
| extern vbi_bool | |
| vbi3_bit_slicer_set_params (vbi3_bit_slicer * bs, | |
| vbi_pixfmt sample_format, | |
| unsigned int sampling_rate, | |
| unsigned int sample_offset, | |
| unsigned int samples_per_line, | |
| unsigned int cri, | |
| unsigned int cri_mask, | |
| unsigned int cri_bits, | |
| unsigned int cri_rate, | |
| unsigned int cri_end, | |
| unsigned int frc, | |
| unsigned int frc_bits, | |
| unsigned int payload_bits, | |
| unsigned int payload_rate, | |
| vbi3_modulation modulation) | |
| _vbi_nonnull ((1)); | |
| extern void | |
| vbi3_bit_slicer_set_log_fn (vbi3_bit_slicer * bs, | |
| vbi_log_mask mask, | |
| vbi_log_fn * log_fn, | |
| void * user_data) | |
| _vbi_nonnull ((1)); | |
| extern void | |
| vbi3_bit_slicer_delete (vbi3_bit_slicer * bs); | |
| extern vbi3_bit_slicer * | |
| vbi3_bit_slicer_new (void) | |
| _vbi_alloc; | |
| /* Private */ | |
| typedef vbi_bool | |
| _vbi3_bit_slicer_fn (vbi3_bit_slicer * bs, | |
| uint8_t * buffer, | |
| vbi3_bit_slicer_point *points, | |
| unsigned int * n_points, | |
| const uint8_t * raw); | |
| /** @internal */ | |
| struct _vbi3_bit_slicer { | |
| _vbi3_bit_slicer_fn * func; | |
| vbi_pixfmt sample_format; | |
| unsigned int cri; | |
| unsigned int cri_mask; | |
| unsigned int thresh; | |
| unsigned int thresh_frac; | |
| unsigned int cri_samples; | |
| unsigned int cri_rate; | |
| unsigned int oversampling_rate; | |
| unsigned int phase_shift; | |
| unsigned int step; | |
| unsigned int frc; | |
| unsigned int frc_bits; | |
| unsigned int total_bits; | |
| unsigned int payload; | |
| unsigned int endian; | |
| unsigned int bytes_per_sample; | |
| unsigned int skip; | |
| unsigned int green_mask; | |
| _vbi_log_hook log; | |
| }; | |
| extern void | |
| _vbi3_bit_slicer_destroy (vbi3_bit_slicer * bs) | |
| _vbi_nonnull ((1)); | |
| extern vbi_bool | |
| _vbi3_bit_slicer_init (vbi3_bit_slicer * bs) | |
| _vbi_nonnull ((1)); | |
| /** @} */ | |
| VBI_END_DECLS | |
| #endif /* __ZVBI_BIT_SLICER_H__ */ | |
| /* | |
| Local variables: | |
| c-set-style: K&R | |
| c-basic-offset: 8 | |
| End: | |
| */ |