Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_unix/sys/src/games/mp3dec/frame.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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: frame.h,v 1.20 2004/01/23 09:41:32 rob Exp $
20
 */
21
 
22
# ifndef LIBMAD_FRAME_H
23
# define LIBMAD_FRAME_H
24
 
25
# include "fixed.h"
26
# include "stream.h"
27
 
28
enum mad_layer {
29
  MAD_LAYER_I   = 1,			/* Layer I */
30
  MAD_LAYER_II  = 2,			/* Layer II */
31
  MAD_LAYER_III = 3			/* Layer III */
32
};
33
 
34
enum mad_mode {
35
  MAD_MODE_SINGLE_CHANNEL = 0,		/* single channel */
36
  MAD_MODE_DUAL_CHANNEL	  = 1,		/* dual channel */
37
  MAD_MODE_JOINT_STEREO	  = 2,		/* joint (MS/intensity) stereo */
38
  MAD_MODE_STEREO	  = 3		/* normal LR stereo */
39
};
40
 
41
enum mad_emphasis {
42
  MAD_EMPHASIS_NONE	  = 0,		/* no emphasis */
43
  MAD_EMPHASIS_50_15_US	  = 1,		/* 50/15 microseconds emphasis */
44
  MAD_EMPHASIS_CCITT_J_17 = 3,		/* CCITT J.17 emphasis */
45
  MAD_EMPHASIS_RESERVED   = 2		/* unknown emphasis */
46
};
47
 
48
struct mad_header {
49
  enum mad_layer layer;			/* audio layer (1, 2, or 3) */
50
  enum mad_mode mode;			/* channel mode (see above) */
51
  int mode_extension;			/* additional mode info */
52
  enum mad_emphasis emphasis;		/* de-emphasis to use (see above) */
53
 
54
  unsigned long bitrate;		/* stream bitrate (bps) */
55
  unsigned int samplerate;		/* sampling frequency (Hz) */
56
 
57
  unsigned short crc_check;		/* frame CRC accumulator */
58
  unsigned short crc_target;		/* final target CRC checksum */
59
 
60
  int flags;				/* flags (see below) */
61
  int private_bits;			/* private bits (see below) */
62
};
63
 
64
struct mad_frame {
65
  struct mad_header header;		/* MPEG audio header */
66
 
67
  int options;				/* decoding options (from stream) */
68
 
69
  mad_fixed_t sbsample[2][36][32];	/* synthesis subband filter samples */
70
  mad_fixed_t (*overlap)[2][32][18];	/* Layer III block overlap data */
71
};
72
 
73
# define MAD_NCHANNELS(header)		((header)->mode ? 2 : 1)
74
# define MAD_NSBSAMPLES(header)  \
75
  ((header)->layer == MAD_LAYER_I ? 12 :  \
76
   (((header)->layer == MAD_LAYER_III &&  \
77
     ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
78
 
79
enum {
80
  MAD_FLAG_NPRIVATE_III	= 0x0007,	/* number of Layer III private bits */
81
  MAD_FLAG_INCOMPLETE	= 0x0008,	/* header but not data is decoded */
82
 
83
  MAD_FLAG_PROTECTION	= 0x0010,	/* frame has CRC protection */
84
  MAD_FLAG_COPYRIGHT	= 0x0020,	/* frame is copyright */
85
  MAD_FLAG_ORIGINAL	= 0x0040,	/* frame is original (else copy) */
86
  MAD_FLAG_PADDING	= 0x0080,	/* frame has additional slot */
87
 
88
  MAD_FLAG_I_STEREO	= 0x0100,	/* uses intensity joint stereo */
89
  MAD_FLAG_MS_STEREO	= 0x0200,	/* uses middle/side joint stereo */
90
  MAD_FLAG_FREEFORMAT	= 0x0400,	/* uses free format bitrate */
91
 
92
  MAD_FLAG_LSF_EXT	= 0x1000,	/* lower sampling freq. extension */
93
  MAD_FLAG_MC_EXT	= 0x2000,	/* multichannel audio extension */
94
  MAD_FLAG_MPEG_2_5_EXT	= 0x4000	/* MPEG 2.5 (unofficial) extension */
95
};
96
 
97
enum {
98
  MAD_PRIVATE_HEADER	= 0x0100,	/* header private bit */
99
  MAD_PRIVATE_III	= 0x001f	/* Layer III private bits (up to 5) */
100
};
101
 
102
void mad_header_init(struct mad_header *);
103
 
104
# define mad_header_finish(header)  /* nothing */
105
 
106
int mad_header_decode(struct mad_header *, struct mad_stream *);
107
 
108
void mad_frame_init(struct mad_frame *);
109
void mad_frame_finish(struct mad_frame *);
110
 
111
int mad_frame_decode(struct mad_frame *, struct mad_stream *);
112
 
113
void mad_frame_mute(struct mad_frame *);
114
 
115
# endif