24#ifndef _XINE_A52_PARSER_H
25#define _XINE_A52_PARSER_H
35 return (a52_flags &
A52_LFE) ?
"A/52 5.1" :
"A/52 5.0";
38 return (a52_flags &
A52_LFE) ?
"A/52 4.1" :
"A/52 4.0";
43 return "A/52 2.0 (stereo)";
45 return "A/52 2.0 (dolby)";
59static void do_swab(uint8_t *p, uint8_t *end) {
60 lprintf (
"byte-swapping dnet\n");
82 uint8_t frame_buffer[3840];
92 const uint8_t *
const end = data + size;
93 const uint8_t *current = data;
94 const uint8_t *sync_start = current + 1;
98 while (current < end) {
99 switch (this->sync_state) {
101 this->syncword = (this->syncword << 8) | *current++;
102 if (this->syncword == 0x0b77) {
104 this->frame_buffer[0] = 0x0b;
105 this->frame_buffer[1] = 0x77;
107 this->sync_state = 1;
108 this->frame_ptr = this->frame_buffer+2;
113 sync_start = current - 1;
114 *this->frame_ptr++ = *current++;
115 if ((this->frame_ptr - this->frame_buffer) > 16) {
116 int a52_flags_old = this->a52_flags;
117 int a52_sample_rate_old = this->a52_sample_rate;
118 int a52_bit_rate_old = this->a52_bit_rate;
122 &this->a52_sample_rate,
123 &this->a52_bit_rate);
125 if (this->frame_length < 80) {
127 current = sync_start;
128 this->sync_state = 0;
132 lprintf(
"Frame length = %d\n",this->frame_length);
134 this->frame_todo = this->frame_length - 17;
135 this->sync_state = 2;
136 if (a52_flags_old != this->a52_flags ||
137 a52_sample_rate_old != this->a52_sample_rate ||
138 a52_bit_rate_old != this->a52_bit_rate) {
139 a52_meta_info_set(stream, this->a52_flags, this->a52_bit_rate, this->a52_sample_rate);
145 *this->frame_ptr++ = *current++;
147 if (this->frame_todo > 0)
151 this->sync_state = 0;
152 if (
xine_crc16_ansi (0, &this->frame_buffer[2], this->frame_length - 2) != 0) {
154 current = sync_start;
158 return (current - data);
void _x_stream_info_set(xine_stream_t *s, int info, int value)
Definition: info_helper.c:79
void _x_meta_info_set_utf8(xine_stream_t *s, int info, const char *str)
Definition: info_helper.c:341
Definition: xine_a52_parser.h:69
uint8_t * frame_ptr
Definition: xine_a52_parser.h:81
int a52_sample_rate
Definition: xine_a52_parser.h:75
uint8_t sync_state
Definition: xine_a52_parser.h:71
uint8_t got_frame
Definition: xine_a52_parser.h:70
int a52_flags
Definition: xine_a52_parser.h:73
int frame_length
Definition: xine_a52_parser.h:77
uint16_t syncword
Definition: xine_a52_parser.h:79
int a52_bit_rate
Definition: xine_a52_parser.h:74
Definition: xine_internal.h:123
xine_t * xine
Definition: xine_internal.h:126
uint32_t xine_crc16_ansi(uint32_t crc, const uint8_t *data, size_t len)
Definition: utils.c:1071
#define XINE_STREAM_INFO_AUDIO_BITRATE
Definition: xine.h:1019
#define XINE_META_INFO_AUDIOCODEC
Definition: xine.h:1069
#define XINE_VERBOSITY_DEBUG
Definition: xine.h:426
#define XINE_STREAM_INFO_AUDIO_SAMPLERATE
Definition: xine.h:1018
static void xine_a52_parser_reset(xine_a52_parser_t *this)
Definition: xine_a52_parser.h:85
static void do_swab(uint8_t *p, uint8_t *end)
Definition: xine_a52_parser.h:59
static void a52_meta_info_set(xine_stream_t *stream, int a52_flags, int bit_rate, int sample_rate)
Definition: xine_a52_parser.h:53
static size_t xine_a52_parse_data(xine_a52_parser_t *this, xine_stream_t *stream, const uint8_t *data, size_t size)
Definition: xine_a52_parser.h:90
static const char * a52_channel_info(int a52_flags)
Definition: xine_a52_parser.h:32
#define A52_3F1R
Definition: xine_a52_spdif.c:55
#define A52_MONO
Definition: xine_a52_spdif.c:51
#define A52_3F
Definition: xine_a52_spdif.c:53
#define A52_3F2R
Definition: xine_a52_spdif.c:57
#define A52_CHANNEL_MASK
Definition: xine_a52_spdif.c:59
#define A52_DOLBY
Definition: xine_a52_spdif.c:58
#define A52_2F1R
Definition: xine_a52_spdif.c:54
#define A52_2F2R
Definition: xine_a52_spdif.c:56
#define A52_STEREO
Definition: xine_a52_spdif.c:52
#define A52_LFE
Definition: xine_a52_spdif.c:60
static int a52_syncinfo(uint8_t *buf, int *flags, int *sample_rate, int *bit_rate)
Definition: xine_a52_spdif.c:110
#define xprintf(xine, verbose,...)
Definition: xineutils.h:673
#define lprintf(...)
Definition: xineutils.h:629