27 |
27 |
#include <stdlib.h>
|
28 |
28 |
|
29 |
29 |
static FLAC__StreamEncoder *flac_encoder;
|
|
30 |
static FLAC__StreamMetadata *flac_metadata;
|
30 |
31 |
|
31 |
32 |
static FLAC__StreamEncoderWriteStatus flac_write_cb(const FLAC__StreamEncoder *encoder,
|
32 |
33 |
const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, gpointer data)
|
... | ... | |
77 |
78 |
char * sval = tuple_get_str (tuple, field, NULL);
|
78 |
79 |
temp = g_strdup_printf ("%s=%s", name, sval);
|
79 |
80 |
str_unref (sval);
|
|
81 |
break;
|
80 |
82 |
default:
|
81 |
83 |
return;
|
82 |
84 |
}
|
... | ... | |
97 |
99 |
|
98 |
100 |
FLAC__stream_encoder_set_channels(flac_encoder, input.channels);
|
99 |
101 |
FLAC__stream_encoder_set_sample_rate(flac_encoder, input.frequency);
|
100 |
|
FLAC__stream_encoder_init_stream(flac_encoder, flac_write_cb, flac_seek_cb, flac_tell_cb,
|
101 |
|
NULL, output_file);
|
|
102 |
FLAC__stream_encoder_set_compression_level(flac_encoder, 8);
|
102 |
103 |
|
103 |
104 |
if (tuple)
|
104 |
105 |
{
|
105 |
|
FLAC__StreamMetadata *meta;
|
106 |
|
meta = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
|
|
106 |
flac_metadata = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
|
107 |
107 |
|
108 |
|
insert_vorbis_comment (meta, "title", tuple, FIELD_TITLE);
|
109 |
|
insert_vorbis_comment (meta, "artist", tuple, FIELD_ARTIST);
|
110 |
|
insert_vorbis_comment (meta, "album", tuple, FIELD_ALBUM);
|
111 |
|
insert_vorbis_comment (meta, "genre", tuple, FIELD_GENRE);
|
112 |
|
insert_vorbis_comment (meta, "comment", tuple, FIELD_COMMENT);
|
113 |
|
insert_vorbis_comment (meta, "date", tuple, FIELD_DATE);
|
114 |
|
insert_vorbis_comment (meta, "year", tuple, FIELD_YEAR);
|
115 |
|
insert_vorbis_comment (meta, "tracknumber", tuple, FIELD_TRACK_NUMBER);
|
|
108 |
insert_vorbis_comment (flac_metadata, "TITLE", tuple, FIELD_TITLE);
|
|
109 |
insert_vorbis_comment (flac_metadata, "ARTIST", tuple, FIELD_ARTIST);
|
|
110 |
insert_vorbis_comment (flac_metadata, "ALBUM", tuple, FIELD_ALBUM);
|
|
111 |
insert_vorbis_comment (flac_metadata, "GENRE", tuple, FIELD_GENRE);
|
|
112 |
insert_vorbis_comment (flac_metadata, "COMMENT", tuple, FIELD_COMMENT);
|
|
113 |
insert_vorbis_comment (flac_metadata, "DATE", tuple, FIELD_DATE);
|
|
114 |
insert_vorbis_comment (flac_metadata, "YEAR", tuple, FIELD_YEAR);
|
|
115 |
insert_vorbis_comment (flac_metadata, "TRACKNUMBER", tuple, FIELD_TRACK_NUMBER);
|
116 |
116 |
|
117 |
|
FLAC__stream_encoder_set_metadata(flac_encoder, &meta, 1);
|
|
117 |
FLAC__stream_encoder_set_metadata(flac_encoder, &flac_metadata, 1);
|
118 |
118 |
}
|
119 |
119 |
|
|
120 |
FLAC__stream_encoder_init_stream(flac_encoder, flac_write_cb, flac_seek_cb, flac_tell_cb,
|
|
121 |
NULL, output_file);
|
|
122 |
|
120 |
123 |
return 1;
|
121 |
124 |
}
|
122 |
125 |
|
... | ... | |
170 |
173 |
|
171 |
174 |
static void flac_close(void)
|
172 |
175 |
{
|
173 |
|
FLAC__stream_encoder_finish(flac_encoder);
|
174 |
|
FLAC__stream_encoder_delete(flac_encoder);
|
|
176 |
if(flac_encoder)
|
|
177 |
{
|
|
178 |
FLAC__stream_encoder_finish(flac_encoder);
|
|
179 |
FLAC__stream_encoder_delete(flac_encoder);
|
|
180 |
flac_encoder = NULL;
|
|
181 |
}
|
|
182 |
|
|
183 |
if(flac_metadata)
|
|
184 |
{
|
|
185 |
FLAC__metadata_object_delete(flac_metadata);
|
|
186 |
flac_metadata = NULL;
|
|
187 |
}
|
175 |
188 |
}
|
176 |
189 |
|
177 |
190 |
static int flac_format_required (int fmt)
|