]> git.sesse.net Git - vlc/blob - src/audio_decoder/audio_decoder.h
The input-II. (more info by mail in about an hour)
[vlc] / src / audio_decoder / audio_decoder.h
1 /*****************************************************************************
2  * audio_decoder.h : audio decoder interface
3  *****************************************************************************
4  * Copyright (C) 1999, 2000 VideoLAN
5  *
6  * Authors:
7  * Michel Kaempf <maxx@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  * 
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 /**** audio decoder API - public audio decoder structures */
25
26 typedef struct audiodec_s audiodec_t;
27
28 typedef struct adec_sync_info_s {
29     int sample_rate;    /* sample rate in Hz */
30     int frame_size;     /* frame size in bytes */
31     int bit_rate;       /* nominal bit rate in kbps */
32 } adec_sync_info_t;
33
34 typedef struct adec_byte_stream_s {
35     u8 * p_byte;
36     u8 * p_end;
37     void * info;
38 } adec_byte_stream_t;
39
40 /**** audio decoder API - functions publically provided by the audio dec. ****/
41
42 int adec_init (audiodec_t * p_adec);
43 int adec_sync_frame (audiodec_t * p_adec, adec_sync_info_t * p_sync_info);
44 int adec_decode_frame (audiodec_t * p_adec, s16 * buffer);
45 static adec_byte_stream_t * adec_byte_stream (audiodec_t * p_adec);
46
47 /**** audio decoder API - user functions to be provided to the audio dec. ****/
48
49 void adec_byte_stream_next (adec_byte_stream_t * p_byte_stream);
50
51 /**** EVERYTHING AFTER THIS POINT IS PRIVATE ! DO NOT USE DIRECTLY ****/
52
53 /**** audio decoder internal structures ****/
54
55 typedef struct adec_bank_s {
56     float               v1[512];
57     float               v2[512];
58     float *             actual;
59     int                 pos;
60 } adec_bank_t;
61
62 typedef struct adec_bit_stream_s {
63     u32 buffer;
64     int i_available;
65     adec_byte_stream_t byte_stream;
66     int total_bytes_read;
67 } adec_bit_stream_t;
68
69 struct audiodec_s {
70     /*
71      * Input properties
72      */
73
74     /* The bit stream structure handles the PES stream at the bit level */
75     adec_bit_stream_t   bit_stream;
76
77     /*
78      * Decoder properties
79      */
80     u32                 header;
81     int                 frame_size;
82     adec_bank_t         bank_0;
83     adec_bank_t         bank_1;
84 };
85
86 /**** audio decoder inline functions ****/
87
88 static adec_byte_stream_t * adec_byte_stream (audiodec_t * p_adec)
89 {
90     return &(p_adec->bit_stream.byte_stream);
91 }