--- src/flac.c 2006-08-31 11:22:19.000000000 +0200 +++ src/flac.c 2007-07-10 21:16:47.000000000 +0200 @@ -353,6 +353,22 @@ } /* sf_flac_write_callback */ static void +sf_flac_meta_getvorbiscomment (SF_PRIVATE *psf, int str_type, const FLAC__StreamMetadata *metadata, const char *tag) +{ + int i; + const char *value, *s; + + i = FLAC__metadata_object_vorbiscomment_find_entry_from(metadata, 0, tag); + if (i >= 0) { + value = metadata->data.vorbis_comment.comments[i].entry; + if ((s = strchr(value, '=')) != NULL) + value = s + 1; + + psf_store_string (psf, str_type, value); + } +} + +static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; @@ -378,6 +394,10 @@ } ; break ; + case FLAC__METADATA_TYPE_VORBIS_COMMENT : + sf_flac_meta_getvorbiscomment (psf, SF_STR_ARTIST, metadata, "artist"); + sf_flac_meta_getvorbiscomment (psf, SF_STR_TITLE, metadata, "title"); + break; default : psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ; break ; @@ -603,6 +623,7 @@ FLAC__seekable_stream_decoder_set_eof_callback (pflac->fsd, sf_flac_eof_callback) ; FLAC__seekable_stream_decoder_set_write_callback (pflac->fsd, sf_flac_write_callback) ; FLAC__seekable_stream_decoder_set_metadata_callback (pflac->fsd, sf_flac_meta_callback) ; + FLAC__seekable_stream_decoder_set_metadata_respond(pflac->fsd, FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC__seekable_stream_decoder_set_error_callback (pflac->fsd, sf_flac_error_callback) ; FLAC__seekable_stream_decoder_set_client_data (pflac->fsd, psf) ;