• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

libavcodec/flac.h

Go to the documentation of this file.
00001 /*
00002  * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions
00003  * Copyright (c) 2008 Justin Ruggles
00004  *
00005  * This file is part of FFmpeg.
00006  *
00007  * FFmpeg is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * FFmpeg is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with FFmpeg; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00020  */
00021 
00027 #ifndef AVCODEC_FLAC_H
00028 #define AVCODEC_FLAC_H
00029 
00030 #include "avcodec.h"
00031 #include "get_bits.h"
00032 
00033 #define FLAC_STREAMINFO_SIZE   34
00034 #define FLAC_MAX_CHANNELS       8
00035 #define FLAC_MIN_BLOCKSIZE     16
00036 #define FLAC_MAX_BLOCKSIZE  65535
00037 #define FLAC_MIN_FRAME_SIZE    11
00038 
00039 enum {
00040     FLAC_CHMODE_INDEPENDENT =  0,
00041     FLAC_CHMODE_LEFT_SIDE   =  8,
00042     FLAC_CHMODE_RIGHT_SIDE  =  9,
00043     FLAC_CHMODE_MID_SIDE    = 10,
00044 };
00045 
00046 enum {
00047     FLAC_METADATA_TYPE_STREAMINFO = 0,
00048     FLAC_METADATA_TYPE_PADDING,
00049     FLAC_METADATA_TYPE_APPLICATION,
00050     FLAC_METADATA_TYPE_SEEKTABLE,
00051     FLAC_METADATA_TYPE_VORBIS_COMMENT,
00052     FLAC_METADATA_TYPE_CUESHEET,
00053     FLAC_METADATA_TYPE_PICTURE,
00054     FLAC_METADATA_TYPE_INVALID = 127
00055 };
00056 
00057 enum FLACExtradataFormat {
00058     FLAC_EXTRADATA_FORMAT_STREAMINFO  = 0,
00059     FLAC_EXTRADATA_FORMAT_FULL_HEADER = 1
00060 };
00061 
00062 #define FLACCOMMONINFO \
00063     int samplerate;         \
00064     int channels;           \
00065     int bps;                \
00066 
00067 
00071 #define FLACSTREAMINFO \
00072     FLACCOMMONINFO \
00073     int max_blocksize;      \
00074     int max_framesize;      \
00075     int64_t samples;        \
00076 
00077 typedef struct FLACStreaminfo {
00078     FLACSTREAMINFO
00079 } FLACStreaminfo;
00080 
00081 typedef struct FLACFrameInfo {
00082     FLACCOMMONINFO
00083     int blocksize;          
00084     int ch_mode;            
00085     int64_t frame_or_sample_num;    
00086     int is_var_size;                
00090 } FLACFrameInfo;
00091 
00098 void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
00099                               const uint8_t *buffer);
00100 
00108 int ff_flac_is_extradata_valid(AVCodecContext *avctx,
00109                                enum FLACExtradataFormat *format,
00110                                uint8_t **streaminfo_start);
00111 
00119 void ff_flac_parse_block_header(const uint8_t *block_header,
00120                                 int *last, int *type, int *size);
00121 
00128 int ff_flac_get_max_frame_size(int blocksize, int ch, int bps);
00129 
00138 int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
00139                                 FLACFrameInfo *fi, int log_level_offset);
00140 #endif /* AVCODEC_FLAC_H */

Generated on Wed Apr 11 2012 07:31:33 for FFmpeg by  doxygen 1.7.1