sdk-world
v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Toggle main menu visibility
Loading...
Searching...
No Matches
stream.c
1
/*
2
* libmad - MPEG audio decoder library
3
* Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
*
19
* $Id: stream.c,v 1.12 2004/02/05 09:02:39 rob Exp $
20
*/
21
22
# ifdef HAVE_CONFIG_H
23
# include "config.h"
24
# endif
25
26
# include "
global.h
"
27
28
# include <stdlib.h>
29
30
# include "
bit.h
"
31
# include "
stream.h
"
32
33
/*
34
* NAME: stream->init()
35
* DESCRIPTION: initialize stream struct
36
*/
37
void
mad_stream_init(
struct
mad_stream
*stream)
38
{
39
stream->buffer = 0;
40
stream->bufend = 0;
41
stream->skiplen = 0;
42
43
stream->sync = 0;
44
stream->freerate = 0;
45
46
stream->this_frame = 0;
47
stream->next_frame = 0;
48
mad_bit_init(&stream->ptr, 0);
49
50
mad_bit_init(&stream->anc_ptr, 0);
51
stream->anc_bitlen = 0;
52
53
stream->main_data = 0;
54
stream->md_len = 0;
55
56
stream->options = 0;
57
stream->error = MAD_ERROR_NONE;
58
}
59
60
/*
61
* NAME: stream->finish()
62
* DESCRIPTION: deallocate any dynamic memory associated with stream
63
*/
64
void
mad_stream_finish(
struct
mad_stream
*stream)
65
{
66
if
(stream->main_data) {
67
free(stream->main_data);
68
stream->main_data = 0;
69
}
70
71
mad_bit_finish(&stream->anc_ptr);
72
mad_bit_finish(&stream->ptr);
73
}
74
75
/*
76
* NAME: stream->buffer()
77
* DESCRIPTION: set stream buffer pointers
78
*/
79
void
mad_stream_buffer(
struct
mad_stream
*stream,
80
unsigned
char
const
*buffer,
unsigned
long
length)
81
{
82
stream->buffer = buffer;
83
stream->bufend = buffer + length;
84
85
stream->this_frame = buffer;
86
stream->next_frame = buffer;
87
88
stream->sync = 1;
89
90
mad_bit_init(&stream->ptr, buffer);
91
}
92
93
/*
94
* NAME: stream->skip()
95
* DESCRIPTION: arrange to skip bytes before the next frame
96
*/
97
void
mad_stream_skip(
struct
mad_stream
*stream,
unsigned
long
length)
98
{
99
stream->skiplen += length;
100
}
101
102
/*
103
* NAME: stream->sync()
104
* DESCRIPTION: locate the next stream sync word
105
*/
106
int
mad_stream_sync(
struct
mad_stream
*stream)
107
{
108
register
unsigned
char
const
*ptr, *end;
109
110
ptr = mad_bit_nextbyte(&stream->ptr);
111
end = stream->bufend;
112
113
while
(ptr < end - 1 &&
114
!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
115
++ptr;
116
117
if
(end - ptr < MAD_BUFFER_GUARD)
118
return
-1;
119
120
mad_bit_init(&stream->ptr, ptr);
121
122
return
0;
123
}
124
125
/*
126
* NAME: stream->errorstr()
127
* DESCRIPTION: return a string description of the current error condition
128
*/
129
char
const
*mad_stream_errorstr(
struct
mad_stream
const
*stream)
130
{
131
switch
(stream->error) {
132
case
MAD_ERROR_NONE:
return
"no error"
;
133
134
case
MAD_ERROR_BUFLEN:
return
"input buffer too small (or EOF)"
;
135
case
MAD_ERROR_BUFPTR:
return
"invalid (null) buffer pointer"
;
136
137
case
MAD_ERROR_NOMEM:
return
"not enough memory"
;
138
139
case
MAD_ERROR_LOSTSYNC:
return
"lost synchronization"
;
140
case
MAD_ERROR_BADLAYER:
return
"reserved header layer value"
;
141
case
MAD_ERROR_BADBITRATE:
return
"forbidden bitrate value"
;
142
case
MAD_ERROR_BADSAMPLERATE:
return
"reserved sample frequency value"
;
143
case
MAD_ERROR_BADEMPHASIS:
return
"reserved emphasis value"
;
144
145
case
MAD_ERROR_BADCRC:
return
"CRC check failed"
;
146
case
MAD_ERROR_BADBITALLOC:
return
"forbidden bit allocation value"
;
147
case
MAD_ERROR_BADSCALEFACTOR:
return
"bad scalefactor index"
;
148
case
MAD_ERROR_BADMODE:
return
"bad bitrate/mode combination"
;
149
case
MAD_ERROR_BADFRAMELEN:
return
"bad frame length"
;
150
case
MAD_ERROR_BADBIGVALUES:
return
"bad big_values count"
;
151
case
MAD_ERROR_BADBLOCKTYPE:
return
"reserved block_type"
;
152
case
MAD_ERROR_BADSCFSI:
return
"bad scalefactor selection info"
;
153
case
MAD_ERROR_BADDATAPTR:
return
"bad main_data_begin pointer"
;
154
case
MAD_ERROR_BADPART3LEN:
return
"bad audio data length"
;
155
case
MAD_ERROR_BADHUFFTABLE:
return
"bad Huffman table select"
;
156
case
MAD_ERROR_BADHUFFDATA:
return
"Huffman data overrun"
;
157
case
MAD_ERROR_BADSTEREO:
return
"incompatible block_type for JS"
;
158
}
159
160
return
0;
161
}
bit.h
global.h
stream.h
mad_stream
Definition
mad.h:701
libmad
src
stream.c
Generated by
1.18.0