Lines 29-34
Link Here
|
29 |
#include <FLAC++/metadata.h> |
29 |
#include <FLAC++/metadata.h> |
30 |
#include <FLAC++/decoder.h> |
30 |
#include <FLAC++/decoder.h> |
31 |
|
31 |
|
|
|
32 |
#if !defined FLACPP_API_VERSION_CURRENT || FLACPP_API_VERSION_CURRENT < 6 |
33 |
#define LEGACY_FLAC |
34 |
#else |
35 |
#undef LEGACY_FLAC |
36 |
#endif |
37 |
|
32 |
#include <config.h> |
38 |
#include <config.h> |
33 |
|
39 |
|
34 |
#ifdef HAVE_TAGLIB |
40 |
#ifdef HAVE_TAGLIB |
Lines 40-46
Link Here
|
40 |
|
46 |
|
41 |
|
47 |
|
42 |
class K3bFLACDecoder::Private |
48 |
class K3bFLACDecoder::Private |
|
|
49 |
#ifdef LEGACY_FLAC |
43 |
: public FLAC::Decoder::SeekableStream |
50 |
: public FLAC::Decoder::SeekableStream |
|
|
51 |
#else |
52 |
: public FLAC::Decoder::Stream |
53 |
#endif |
44 |
{ |
54 |
{ |
45 |
public: |
55 |
public: |
46 |
void open(QFile* f) { |
56 |
void open(QFile* f) { |
Lines 64-70
Link Here
|
64 |
} |
74 |
} |
65 |
|
75 |
|
66 |
Private(QFile* f) |
76 |
Private(QFile* f) |
|
|
77 |
#ifdef LEGACY_FLAC |
67 |
: FLAC::Decoder::SeekableStream(), |
78 |
: FLAC::Decoder::SeekableStream(), |
|
|
79 |
#else |
80 |
: FLAC::Decoder::Stream(), |
81 |
#endif |
68 |
comments(0) { |
82 |
comments(0) { |
69 |
internalBuffer = new QBuffer(); |
83 |
internalBuffer = new QBuffer(); |
70 |
internalBuffer->open(IO_ReadWrite); |
84 |
internalBuffer->open(IO_ReadWrite); |
Lines 93-102
Link Here
|
93 |
FLAC__uint64 samples; |
107 |
FLAC__uint64 samples; |
94 |
|
108 |
|
95 |
protected: |
109 |
protected: |
|
|
110 |
#ifdef LEGACY_FLAC |
96 |
virtual FLAC__SeekableStreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes); |
111 |
virtual FLAC__SeekableStreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes); |
97 |
virtual FLAC__SeekableStreamDecoderSeekStatus seek_callback(FLAC__uint64 absolute_byte_offset); |
112 |
virtual FLAC__SeekableStreamDecoderSeekStatus seek_callback(FLAC__uint64 absolute_byte_offset); |
98 |
virtual FLAC__SeekableStreamDecoderTellStatus tell_callback(FLAC__uint64 *absolute_byte_offset); |
113 |
virtual FLAC__SeekableStreamDecoderTellStatus tell_callback(FLAC__uint64 *absolute_byte_offset); |
99 |
virtual FLAC__SeekableStreamDecoderLengthStatus length_callback(FLAC__uint64 *stream_length); |
114 |
virtual FLAC__SeekableStreamDecoderLengthStatus length_callback(FLAC__uint64 *stream_length); |
|
|
115 |
#else |
116 |
virtual FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], size_t *bytes); |
117 |
virtual FLAC__StreamDecoderSeekStatus seek_callback(FLAC__uint64 absolute_byte_offset); |
118 |
virtual FLAC__StreamDecoderTellStatus tell_callback(FLAC__uint64 *absolute_byte_offset); |
119 |
virtual FLAC__StreamDecoderLengthStatus length_callback(FLAC__uint64 *stream_length); |
120 |
#endif |
100 |
virtual bool eof_callback(); |
121 |
virtual bool eof_callback(); |
101 |
virtual void error_callback(FLAC__StreamDecoderErrorStatus){}; |
122 |
virtual void error_callback(FLAC__StreamDecoderErrorStatus){}; |
102 |
virtual void metadata_callback(const ::FLAC__StreamMetadata *metadata); |
123 |
virtual void metadata_callback(const ::FLAC__StreamMetadata *metadata); |
Lines 112-117
Link Here
|
112 |
return file->atEnd(); |
133 |
return file->atEnd(); |
113 |
} |
134 |
} |
114 |
|
135 |
|
|
|
136 |
#ifdef LEGACY_FLAC |
115 |
FLAC__SeekableStreamDecoderReadStatus K3bFLACDecoder::Private::read_callback(FLAC__byte buffer[], unsigned *bytes) { |
137 |
FLAC__SeekableStreamDecoderReadStatus K3bFLACDecoder::Private::read_callback(FLAC__byte buffer[], unsigned *bytes) { |
116 |
long retval = file->readBlock((char *)buffer, (*bytes)); |
138 |
long retval = file->readBlock((char *)buffer, (*bytes)); |
117 |
if(-1 == retval) { |
139 |
if(-1 == retval) { |
Lines 119-145
Link Here
|
119 |
} else { |
141 |
} else { |
120 |
(*bytes) = retval; |
142 |
(*bytes) = retval; |
121 |
return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK; |
143 |
return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK; |
|
|
144 |
#else |
145 |
FLAC__StreamDecoderReadStatus K3bFLACDecoder::Private::read_callback(FLAC__byte buffer[], size_t *bytes) { |
146 |
long retval = file->readBlock((char *)buffer, (*bytes)); |
147 |
if(-1 == retval) return FLAC__STREAM_DECODER_READ_STATUS_ABORT; |
148 |
else { |
149 |
(*bytes) = retval; |
150 |
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; |
151 |
#endif |
122 |
} |
152 |
} |
123 |
} |
153 |
} |
124 |
|
154 |
|
|
|
155 |
#ifdef LEGACY_FLAC |
125 |
FLAC__SeekableStreamDecoderSeekStatus |
156 |
FLAC__SeekableStreamDecoderSeekStatus |
126 |
K3bFLACDecoder::Private::seek_callback(FLAC__uint64 absolute_byte_offset) { |
157 |
K3bFLACDecoder::Private::seek_callback(FLAC__uint64 absolute_byte_offset) { |
127 |
if(file->at(absolute_byte_offset) == FALSE) |
158 |
if(file->at(absolute_byte_offset) == FALSE) |
128 |
return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR; |
159 |
return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR; |
129 |
else |
160 |
else |
130 |
return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK; |
161 |
return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK; |
|
|
162 |
#else |
163 |
FLAC__StreamDecoderSeekStatus K3bFLACDecoder::Private::seek_callback(FLAC__uint64 absolute_byte_offset) { |
164 |
if(file->at(absolute_byte_offset) == FALSE) return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; |
165 |
else return FLAC__STREAM_DECODER_SEEK_STATUS_OK; |
166 |
#endif |
131 |
} |
167 |
} |
132 |
|
168 |
|
|
|
169 |
#ifdef LEGACY_FLAC |
133 |
FLAC__SeekableStreamDecoderTellStatus |
170 |
FLAC__SeekableStreamDecoderTellStatus |
134 |
K3bFLACDecoder::Private::tell_callback(FLAC__uint64 *absolute_byte_offset) { |
171 |
K3bFLACDecoder::Private::tell_callback(FLAC__uint64 *absolute_byte_offset) { |
135 |
(*absolute_byte_offset) = file->at(); |
172 |
(*absolute_byte_offset) = file->at(); |
136 |
return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK; |
173 |
return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK; |
|
|
174 |
#else |
175 |
FLAC__StreamDecoderTellStatus K3bFLACDecoder::Private::tell_callback(FLAC__uint64 *absolute_byte_offset) { |
176 |
(*absolute_byte_offset) = file->at(); |
177 |
return FLAC__STREAM_DECODER_TELL_STATUS_OK; |
178 |
#endif |
137 |
} |
179 |
} |
138 |
|
180 |
|
|
|
181 |
#ifdef LEGACY_FLAC |
139 |
FLAC__SeekableStreamDecoderLengthStatus |
182 |
FLAC__SeekableStreamDecoderLengthStatus |
140 |
K3bFLACDecoder::Private::length_callback(FLAC__uint64 *stream_length) { |
183 |
K3bFLACDecoder::Private::length_callback(FLAC__uint64 *stream_length) { |
141 |
(*stream_length) = file->size(); |
184 |
(*stream_length) = file->size(); |
142 |
return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK; |
185 |
return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK; |
|
|
186 |
#else |
187 |
FLAC__StreamDecoderLengthStatus K3bFLACDecoder::Private::length_callback(FLAC__uint64 *stream_length) { |
188 |
(*stream_length) = file->size(); |
189 |
return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; |
190 |
#endif |
143 |
} |
191 |
} |
144 |
|
192 |
|
145 |
|
193 |
|
Lines 262-267
Link Here
|
262 |
|
310 |
|
263 |
if(d->internalBuffer->size() == 0) { |
311 |
if(d->internalBuffer->size() == 0) { |
264 |
// want more data |
312 |
// want more data |
|
|
313 |
#ifdef LEGACY_FLAC |
265 |
switch(d->get_state()) { |
314 |
switch(d->get_state()) { |
266 |
case FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM: |
315 |
case FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM: |
267 |
d->finish(); |
316 |
d->finish(); |
Lines 273-278
Link Here
|
273 |
default: |
322 |
default: |
274 |
return -1; |
323 |
return -1; |
275 |
} |
324 |
} |
|
|
325 |
#else |
326 |
if(d->get_state() == FLAC__STREAM_DECODER_END_OF_STREAM) d->finish(); |
327 |
else if(d->get_state() < FLAC__STREAM_DECODER_END_OF_STREAM) { |
328 |
if(! d->process_single()) |
329 |
return -1; |
330 |
} |
331 |
else return -1; |
332 |
#endif |
276 |
} |
333 |
} |
277 |
|
334 |
|
278 |
bytesAvailable = d->internalBuffer->size() - d->internalBuffer->at(); |
335 |
bytesAvailable = d->internalBuffer->size() - d->internalBuffer->at(); |