Project

General

Profile

filewriter-flac.patch

James Buren, August 24, 2013 01:05

View differences:

c/src/filewriter/flac.c 2013-08-22 22:55:55.166707369 -0500
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)