Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 157706
Collapse All | Expand All

(-)cuecue-0.2.2/src/libcuecue/flac.c (-1 / +49 lines)
Lines 27-32 Link Here
27
#include "cuecue.h"
27
#include "cuecue.h"
28
#include "cuecue_internal.h"
28
#include "cuecue_internal.h"
29
29
30
#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
31
#define LEGACY_FLAC
32
#else
33
#undef LEGACY_FLAC
34
#endif
35
30
typedef struct Internal
36
typedef struct Internal
31
{
37
{
32
	FILE *dst;
38
	FILE *dst;
Lines 38-44 Link Here
38
} Internal;
44
} Internal;
39
45
40
46
47
#ifdef LEGACY_FLAC
41
void error(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
48
void error(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
49
#else
50
void error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
51
#endif
42
{
52
{
43
	Internal *internal = client_data;
53
	Internal *internal = client_data;
44
	switch (status) {
54
	switch (status) {
Lines 52-62 Link Here
52
			strcpy(cuecue_error,"CRC Mismatch: FLAC file corrupted");
62
			strcpy(cuecue_error,"CRC Mismatch: FLAC file corrupted");
53
			internal->error=1;
63
			internal->error=1;
54
			break;
64
			break;
65
		case FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM:
66
			strcpy(cuecue_error,"Unparseable stream");
67
			internal->error=1;
68
			break;
55
	}
69
	}
56
}
70
}
57
71
58
72
73
#ifdef LEGACY_FLAC
59
void metadata(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
74
void metadata(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
75
#else
76
void metadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
77
#endif
60
{
78
{
61
	if(metadata->type == FLAC__METADATA_TYPE_STREAMINFO) {
79
	if(metadata->type == FLAC__METADATA_TYPE_STREAMINFO) {
62
		/* get size of the file, for progress callback */
80
		/* get size of the file, for progress callback */
Lines 66-72 Link Here
66
}
84
}
67
85
68
86
87
#ifdef LEGACY_FLAC
69
FLAC__StreamDecoderWriteStatus write(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
88
FLAC__StreamDecoderWriteStatus write(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
89
#else
90
FLAC__StreamDecoderWriteStatus write(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
91
#endif
70
{
92
{
71
	Internal *internal = client_data;
93
	Internal *internal = client_data;
72
	unsigned int samples = frame->header.blocksize;
94
	unsigned int samples = frame->header.blocksize;
Lines 126-132 Link Here
126
{
148
{
127
	FILE *dst;
149
	FILE *dst;
128
	Internal internal;
150
	Internal internal;
151
#ifdef LEGACY_FLAC
129
	FLAC__FileDecoder *decoder;
152
	FLAC__FileDecoder *decoder;
153
#else
154
	FLAC__StreamDecoder *decoder;
155
#endif
130
156
131
	dst = fopen(file_destination, "wb");
157
	dst = fopen(file_destination, "wb");
132
158
Lines 141-147 Link Here
141
	internal.error=0;
167
	internal.error=0;
142
	internal.dst=dst;
168
	internal.dst=dst;
143
169
170
#ifdef LEGACY_FLAC
144
	decoder = FLAC__file_decoder_new();
171
	decoder = FLAC__file_decoder_new();
172
#else
173
	decoder = FLAC__stream_decoder_new();
174
#endif
145
175
146
	if (decoder==NULL) {
176
	if (decoder==NULL) {
147
		snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot create FLAC decoder! memory error ?");
177
		snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot create FLAC decoder! memory error ?");
Lines 150-155 Link Here
150
180
151
	internal.buffer = malloc(BUFFER_SIZE);
181
	internal.buffer = malloc(BUFFER_SIZE);
152
182
183
#ifdef LEGACY_FLAC
153
	FLAC__file_decoder_set_md5_checking(decoder, true);
184
	FLAC__file_decoder_set_md5_checking(decoder, true);
154
	FLAC__file_decoder_set_filename(decoder, file_source);
185
	FLAC__file_decoder_set_filename(decoder, file_source);
155
186
Lines 162-169 Link Here
162
		snprintf(cuecue_error,1024,"Cannot open '%s'",file_source);
193
		snprintf(cuecue_error,1024,"Cannot open '%s'",file_source);
163
		internal.error=1;
194
		internal.error=1;
164
	}
195
	}
196
#else
197
	FLAC__stream_decoder_set_md5_checking(decoder, true);
198
	if(FLAC__stream_decoder_init_file(decoder, file_source, write, metadata, error, &internal) != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
199
		snprintf(cuecue_error,1024,"Cannot open '%s'",file_source);
200
		internal.error=1;
201
	}
202
#endif
165
203
166
	if(!FLAC__file_decoder_process_until_end_of_file(decoder)) {
204
#ifdef LEGACY_FLAC
205
	if(!FLAC__file_decoder_process_until_end_of_file(decoder))
206
#else
207
	if(!FLAC__stream_decoder_process_until_end_of_stream(decoder))
208
#endif
209
	{
167
		if (!internal.error) {
210
		if (!internal.error) {
168
			/* early error, not even the time to decode metadata :) */
211
			/* early error, not even the time to decode metadata :) */
169
			snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot open '%s'",file_source);
212
			snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot open '%s'",file_source);
Lines 171-178 Link Here
171
		internal.error=1;
214
		internal.error=1;
172
	}
215
	}
173
216
217
#ifdef LEGACY_FLAC
174
	FLAC__file_decoder_finish(decoder);
218
	FLAC__file_decoder_finish(decoder);
175
	FLAC__file_decoder_delete(decoder);
219
	FLAC__file_decoder_delete(decoder);
220
#else
221
	FLAC__stream_decoder_finish(decoder);
222
	FLAC__stream_decoder_delete(decoder);
223
#endif
176
224
177
	fclose(dst);
225
	fclose(dst);
178
	free(internal.buffer);
226
	free(internal.buffer);

Return to bug 157706