OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable/] [mp3/] [sw/] [mad-xess/] [libmad/] [stream.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 291 simons
/*
2
 * mad - MPEG audio decoder
3
 * Copyright (C) 2000-2001 Robert Leslie
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.3 2001-11-06 17:01:28 simons Exp $
20
 */
21
 
22
# ifdef HAVE_CONFIG_H
23
#  include "config.h"
24
# endif
25
 
26
# include "global.h"
27
 
28
# include "bit.h"
29
# include "stream.h"
30
 
31
/*
32
 * NAME:        stream->init()
33
 * DESCRIPTION: initialize stream struct
34
 */
35
inline void mad_stream_init(struct mad_stream *stream)
36
{
37
  stream->buffer     = 0;
38
  stream->bufend     = 0;
39
  stream->skiplen    = 0;
40
 
41
  stream->sync       = 0;
42
  stream->freerate   = 0;
43
 
44
  stream->this_frame = 0;
45
  stream->next_frame = 0;
46
  mad_bit_init(&stream->ptr, 0);
47
 
48
  mad_bit_init(&stream->anc_ptr, 0);
49
  stream->anc_bitlen = 0;
50
 
51
  stream->main_data  = 0;
52
  stream->md_len     = 0;
53
 
54
  stream->options    = 0;
55
  stream->error      = 0;
56
}
57
 
58
/*
59
 * NAME:        stream->finish()
60
 * DESCRIPTION: deallocate any dynamic memory associated with stream
61
 */
62
inline void mad_stream_finish(struct mad_stream *stream)
63
{
64
  mad_bit_finish(&stream->anc_ptr);
65
  mad_bit_finish(&stream->ptr);
66
}
67
 
68
/*
69
 * NAME:        stream->buffer()
70
 * DESCRIPTION: set stream buffer pointers
71
 */
72
inline void mad_stream_buffer(struct mad_stream *stream,
73
                       unsigned char const *buffer, unsigned long length)
74
{
75
  stream->buffer = buffer;
76
  stream->bufend = buffer + length;
77
 
78
  stream->this_frame = buffer;
79
  stream->next_frame = buffer;
80
 
81
  stream->sync = 1;
82
 
83
  mad_bit_init(&stream->ptr, buffer);
84
}
85
 
86
/*
87
 * NAME:        stream->skip()
88
 * DESCRIPTION: arrange to skip bytes before the next frame
89
 */
90
static void mad_stream_skip(struct mad_stream *stream, unsigned long length)
91
{
92
  stream->skiplen += length;
93
}
94
 
95
/*
96
 * NAME:        stream->sync()
97
 * DESCRIPTION: locate the next stream sync word
98
 */
99
int mad_stream_sync(struct mad_stream *stream)
100
{
101
  register unsigned char const *ptr, *end;
102
 
103
  ptr = mad_bit_nextbyte(&stream->ptr);
104
  end = stream->bufend;
105
 
106
  while (ptr < end - 1 &&
107
         !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
108
    ++ptr;
109
 
110
  if (end - ptr < MAD_BUFFER_GUARD)
111
    return -1;
112
 
113
  mad_bit_init(&stream->ptr, ptr);
114
 
115
  return 0;
116
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.