mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 03:01:03 +00:00
198 lines
4.9 KiB
C
198 lines
4.9 KiB
C
|
/*
|
||
|
* 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:
|
||
|
*/
|