streo mp3 player see: http://mbed.org/users/okini3939/notebook/I2S_AUDIO

Dependencies:   FatFileSystemCpp I2SSlave TLV320 mbed

Fork of madplayer by Andreas Grün

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers frame.h Source File

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