Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
frame.h
00001 /* 00002 * libmad - MPEG audio decoder library 00003 * Copyright (C) 2000-2004 Underbit Technologies, Inc. 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 * 00019 * $Id: frame.h,v 1.1 2010/11/23 20:12:57 andy Exp $ 00020 */ 00021 00022 # ifndef LIBMAD_FRAME_H 00023 # define LIBMAD_FRAME_H 00024 00025 # include "fixed.h" 00026 # include "timer.h" 00027 # include "stream.h" 00028 00029 enum mad_layer { 00030 MAD_LAYER_I = 1, /* Layer I */ 00031 MAD_LAYER_II = 2, /* Layer II */ 00032 MAD_LAYER_III = 3 /* Layer III */ 00033 }; 00034 00035 enum mad_mode { 00036 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */ 00037 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */ 00038 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */ 00039 MAD_MODE_STEREO = 3 /* normal LR stereo */ 00040 }; 00041 00042 enum mad_emphasis { 00043 MAD_EMPHASIS_NONE = 0, /* no emphasis */ 00044 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */ 00045 MAD_EMPHASIS_CCITT_J_17 = 3, /* CCITT J.17 emphasis */ 00046 MAD_EMPHASIS_RESERVED = 2 /* unknown emphasis */ 00047 }; 00048 00049 struct mad_header { 00050 enum mad_layer layer; /* audio layer (1, 2, or 3) */ 00051 enum mad_mode mode; /* channel mode (see above) */ 00052 int mode_extension; /* additional mode info */ 00053 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */ 00054 00055 unsigned long bitrate; /* stream bitrate (bps) */ 00056 unsigned int samplerate; /* sampling frequency (Hz) */ 00057 00058 unsigned short crc_check; /* frame CRC accumulator */ 00059 unsigned short crc_target; /* final target CRC checksum */ 00060 00061 int flags; /* flags (see below) */ 00062 int private_bits; /* private bits (see below) */ 00063 00064 mad_timer_t duration; /* audio playing time of frame */ 00065 }; 00066 00067 struct mad_frame { 00068 struct mad_header header; /* MPEG audio header */ 00069 00070 int options; /* decoding options (from stream) */ 00071 00072 mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */ 00073 mad_fixed_t overlap[2][32][18]; /* Layer III block overlap data */ 00074 }; 00075 00076 # define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1) 00077 # define MAD_NSBSAMPLES(header) \ 00078 ((header)->layer == MAD_LAYER_I ? 12 : \ 00079 (((header)->layer == MAD_LAYER_III && \ 00080 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36)) 00081 00082 enum { 00083 MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */ 00084 MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */ 00085 00086 MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */ 00087 MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */ 00088 MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */ 00089 MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */ 00090 00091 MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */ 00092 MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */ 00093 MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */ 00094 00095 MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */ 00096 MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */ 00097 MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */ 00098 }; 00099 00100 enum { 00101 MAD_PRIVATE_HEADER = 0x0100, /* header private bit */ 00102 MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */ 00103 }; 00104 00105 void mad_header_init(struct mad_header *); 00106 00107 # define mad_header_finish(header) /* nothing */ 00108 00109 int mad_header_decode(struct mad_header *, struct mad_stream *); 00110 00111 void mad_frame_init(struct mad_frame *); 00112 void mad_frame_finish(struct mad_frame *); 00113 00114 int mad_frame_decode(struct mad_frame *, struct mad_stream *); 00115 00116 void mad_frame_mute(struct mad_frame *); 00117 00118 # endif
Generated on Tue Jul 12 2022 23:11:09 by
