[Flac] Application Metadata

Paul elegant_dice at yahoo.com
Mon Aug 1 03:02:51 PDT 2005


Hi,

I'm sorry to say that I've found the libFLAC++ interface and 
documentation pretty slim and baffling.

What I need to do is add some application-specific metadata to a FLAC 
file (i'm using the FLAC++ fileencoder).  It is currently just a string 
of characters, which doesn't need to be null-terminated.

I've looked through the docs, i've looked through the tests, and sorry 
to say, but I just Don't Get It.

Based on some of the test code, I had assumed I would do something like:

FLAC::Metadata::Application header_flac;
FLAC__byte header_flac_id[4] = { 1, 2, 3, 4 };
header_flac.set_id(header_flac_id);
header_flac.set_data((FLAC__byte*)(header_str.begin()),header_str.size());

// set the metadata
FLAC::Metadata::Prototype *metadata_sequence[] = { &header_flac };
enc.set_metadata(metadata_sequence,sizeof(metadata_sequence)/sizeof(metadata_sequence[0]));
// and now i continue to init(), process_interleaved() and finish()



But that kept giving me segmentation faults.  So I tried the following, 
and it still gave me segmentation faults.




FLAC__byte header_flac_id[4] = { 1, 2, 3, 4 };

FLAC__byte * header_byte = new FLAC__byte[header_str.size()];
copy(header_str.begin(),header_str.end(),header_byte);

// set the metadata
FLAC::Metadata::Application * header_flac = new FLAC::Metadata::Application;
header_flac->set_id(header_flac_id);
header_flac->set_data(header_byte,header_str.size());

FLAC::Metadata::Prototype **metadata_sequence = new 
(FLAC::Metadata::Prototype*)[1];
metadata_sequence[0] = header_flac;

cnc.set_metadata(metadata_sequence,1);

// and now i continue to init(), process_interleaved() and finish()



Sorry, I'm truely lost.  Can someone please give me a pointer?

Thanks
Paul


More information about the Flac mailing list