input_flac.h

Go to the documentation of this file.
00001 #ifndef INPUT_FLAC_H
00002 #define INPUT_FLAC_H
00003 
00004 
00005 #include <FLAC/seekable_stream_decoder.h>
00006 #include "audiere.h"
00007 #include "basic_source.h"
00008 #include "utility.h"
00009 
00010 
00011 namespace audiere {
00012 
00013   class FLACInputStream : public BasicSource {
00014   public:
00015     FLACInputStream();
00016     ~FLACInputStream();
00017 
00018     bool initialize(FilePtr file);
00019 
00020     void ADR_CALL getFormat(
00021       int& channel_count, 
00022       int& sample_rate, 
00023       SampleFormat& sampleformat);
00024     int doRead(int frame_count, void* samples);
00025     void ADR_CALL reset();
00026 
00027     bool ADR_CALL isSeekable();
00028     int  ADR_CALL getLength();
00029     void ADR_CALL setPosition(int position);
00030     int  ADR_CALL getPosition();
00031 
00032   private:
00033     FLAC__StreamDecoderWriteStatus write(
00034       const FLAC__Frame* frame,
00035       const FLAC__int32* const buffer[]);
00036 
00037     static FLAC__SeekableStreamDecoderReadStatus read_callback(
00038       const FLAC__SeekableStreamDecoder* decoder,
00039       FLAC__byte buffer[],
00040       unsigned* bytes,
00041       void* client_data);
00042     static FLAC__SeekableStreamDecoderSeekStatus seek_callback(
00043       const FLAC__SeekableStreamDecoder* decoder,
00044       FLAC__uint64 absolute_byte_offset,
00045       void* client_data);
00046     static FLAC__SeekableStreamDecoderTellStatus tell_callback(
00047       const FLAC__SeekableStreamDecoder* decoder,
00048       FLAC__uint64* absolute_byte_offset,
00049       void* client_data);
00050     static FLAC__SeekableStreamDecoderLengthStatus length_callback(
00051       const FLAC__SeekableStreamDecoder* decoder,
00052       FLAC__uint64* stream_length,
00053       void* client_data);
00054     static FLAC__bool eof_callback(
00055       const FLAC__SeekableStreamDecoder* decoder,
00056       void* client_data);
00057     static FLAC__StreamDecoderWriteStatus write_callback(
00058       const FLAC__SeekableStreamDecoder* decoder,
00059       const FLAC__Frame* frame,
00060       const FLAC__int32* const buffer[],
00061       void* client_data);
00062     static void metadata_callback(
00063       const FLAC__SeekableStreamDecoder* decoder,
00064       const FLAC__StreamMetadata* metadata,
00065       void* client_data);
00066     static void error_callback(
00067       const FLAC__SeekableStreamDecoder* decoder,
00068       FLAC__StreamDecoderErrorStatus status,
00069       void* client_data);
00070 
00071     static FLACInputStream* getStream(void* client_data);
00072     static File* getFile(void* client_data);
00073 
00074 
00075     FilePtr m_file;
00076 
00077     FLAC__SeekableStreamDecoder* m_decoder;
00078 
00084     SizedBuffer m_multiplexer;
00085 
00090     QueueBuffer m_buffer;
00091 
00092     int m_channel_count;
00093     int m_sample_rate;
00094     SampleFormat m_sample_format;
00095 
00096     int m_length;
00097     int m_position;
00098   };
00099 
00100 }
00101 
00102 
00103 #endif

Generated on Mon Feb 13 23:07:46 2006 for audiere by  doxygen 1.4.6