1
1
/* libFLAC++ - Free Lossless Audio Codec library
2
* Copyright (C) 2002,2003,2004,2005 Josh Coalson
2
* Copyright (C) 2002,2003,2004,2005,2006,2007 Josh Coalson
4
4
* Redistribution and use in source and binary forms, with or without
5
5
* modification, are permitted provided that the following conditions
57
63
return 0 != decoder_;
66
bool Stream::set_ogg_serial_number(long value)
68
FLAC__ASSERT(is_valid());
69
return (bool)::FLAC__stream_decoder_set_ogg_serial_number(decoder_, value);
72
bool Stream::set_md5_checking(bool value)
74
FLAC__ASSERT(is_valid());
75
return (bool)::FLAC__stream_decoder_set_md5_checking(decoder_, value);
60
78
bool Stream::set_metadata_respond(::FLAC__MetadataType type)
62
80
FLAC__ASSERT(is_valid());
99
117
return State(::FLAC__stream_decoder_get_state(decoder_));
120
bool Stream::get_md5_checking() const
122
FLAC__ASSERT(is_valid());
123
return (bool)::FLAC__stream_decoder_get_md5_checking(decoder_);
126
FLAC__uint64 Stream::get_total_samples() const
128
FLAC__ASSERT(is_valid());
129
return ::FLAC__stream_decoder_get_total_samples(decoder_);
102
132
unsigned Stream::get_channels() const
104
134
FLAC__ASSERT(is_valid());
129
159
return ::FLAC__stream_decoder_get_blocksize(decoder_);
132
Stream::State Stream::init()
134
FLAC__ASSERT(is_valid());
135
::FLAC__stream_decoder_set_read_callback(decoder_, read_callback_);
136
::FLAC__stream_decoder_set_write_callback(decoder_, write_callback_);
137
::FLAC__stream_decoder_set_metadata_callback(decoder_, metadata_callback_);
138
::FLAC__stream_decoder_set_error_callback(decoder_, error_callback_);
139
::FLAC__stream_decoder_set_client_data(decoder_, (void*)this);
140
return State(::FLAC__stream_decoder_init(decoder_));
143
void Stream::finish()
145
FLAC__ASSERT(is_valid());
146
::FLAC__stream_decoder_finish(decoder_);
162
::FLAC__StreamDecoderInitStatus Stream::init()
164
FLAC__ASSERT(is_valid());
165
return ::FLAC__stream_decoder_init_stream(decoder_, read_callback_, seek_callback_, tell_callback_, length_callback_, eof_callback_, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
168
::FLAC__StreamDecoderInitStatus Stream::init_ogg()
170
FLAC__ASSERT(is_valid());
171
return ::FLAC__stream_decoder_init_ogg_stream(decoder_, read_callback_, seek_callback_, tell_callback_, length_callback_, eof_callback_, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
174
bool Stream::finish()
176
FLAC__ASSERT(is_valid());
177
return (bool)::FLAC__stream_decoder_finish(decoder_);
149
180
bool Stream::flush()
182
213
return (bool)::FLAC__stream_decoder_skip_single_frame(decoder_);
185
::FLAC__StreamDecoderReadStatus Stream::read_callback_(const ::FLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data)
216
bool Stream::seek_absolute(FLAC__uint64 sample)
218
FLAC__ASSERT(is_valid());
219
return (bool)::FLAC__stream_decoder_seek_absolute(decoder_, sample);
222
::FLAC__StreamDecoderSeekStatus Stream::seek_callback(FLAC__uint64 absolute_byte_offset)
224
(void)absolute_byte_offset;
225
return ::FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED;
228
::FLAC__StreamDecoderTellStatus Stream::tell_callback(FLAC__uint64 *absolute_byte_offset)
230
(void)absolute_byte_offset;
231
return ::FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED;
234
::FLAC__StreamDecoderLengthStatus Stream::length_callback(FLAC__uint64 *stream_length)
237
return ::FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED;
240
bool Stream::eof_callback()
245
void Stream::metadata_callback(const ::FLAC__StreamMetadata *metadata)
250
::FLAC__StreamDecoderReadStatus Stream::read_callback_(const ::FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
188
253
FLAC__ASSERT(0 != client_data);
191
256
return instance->read_callback(buffer, bytes);
259
::FLAC__StreamDecoderSeekStatus Stream::seek_callback_(const ::FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
262
FLAC__ASSERT(0 != client_data);
263
Stream *instance = reinterpret_cast<Stream *>(client_data);
264
FLAC__ASSERT(0 != instance);
265
return instance->seek_callback(absolute_byte_offset);
268
::FLAC__StreamDecoderTellStatus Stream::tell_callback_(const ::FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
271
FLAC__ASSERT(0 != client_data);
272
Stream *instance = reinterpret_cast<Stream *>(client_data);
273
FLAC__ASSERT(0 != instance);
274
return instance->tell_callback(absolute_byte_offset);
277
::FLAC__StreamDecoderLengthStatus Stream::length_callback_(const ::FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
280
FLAC__ASSERT(0 != client_data);
281
Stream *instance = reinterpret_cast<Stream *>(client_data);
282
FLAC__ASSERT(0 != instance);
283
return instance->length_callback(stream_length);
286
FLAC__bool Stream::eof_callback_(const ::FLAC__StreamDecoder *decoder, void *client_data)
289
FLAC__ASSERT(0 != client_data);
290
Stream *instance = reinterpret_cast<Stream *>(client_data);
291
FLAC__ASSERT(0 != instance);
292
return instance->eof_callback();
194
295
::FLAC__StreamDecoderWriteStatus Stream::write_callback_(const ::FLAC__StreamDecoder *decoder, const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
218
319
instance->error_callback(status);
322
// ------------------------------------------------------------
326
// ------------------------------------------------------------
336
::FLAC__StreamDecoderInitStatus File::init(FILE *file)
338
FLAC__ASSERT(0 != decoder_);
339
return ::FLAC__stream_decoder_init_FILE(decoder_, file, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
342
::FLAC__StreamDecoderInitStatus File::init(const char *filename)
344
FLAC__ASSERT(0 != decoder_);
345
return ::FLAC__stream_decoder_init_file(decoder_, filename, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
348
::FLAC__StreamDecoderInitStatus File::init(const std::string &filename)
350
return init(filename.c_str());
353
::FLAC__StreamDecoderInitStatus File::init_ogg(FILE *file)
355
FLAC__ASSERT(0 != decoder_);
356
return ::FLAC__stream_decoder_init_ogg_FILE(decoder_, file, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
359
::FLAC__StreamDecoderInitStatus File::init_ogg(const char *filename)
361
FLAC__ASSERT(0 != decoder_);
362
return ::FLAC__stream_decoder_init_ogg_file(decoder_, filename, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
365
::FLAC__StreamDecoderInitStatus File::init_ogg(const std::string &filename)
367
return init_ogg(filename.c_str());
370
// This is a dummy to satisfy the pure virtual from Stream; the
371
// read callback will never be called since we are initializing
372
// with FLAC__stream_decoder_init_FILE() or
373
// FLAC__stream_decoder_init_file() and those supply the read
374
// callback internally.
375
::FLAC__StreamDecoderReadStatus File::read_callback(FLAC__byte buffer[], size_t *bytes)
377
(void)buffer, (void)bytes;
379
return ::FLAC__STREAM_DECODER_READ_STATUS_ABORT; // double protection