that is a convenience function for trying to get the best picture that matches a constraint. to get more than one, you should use one of the iterator interfaces:
http://flac.sourceforge.net/api/group__flac__metadata.html --- "Alex J. Ivasyuv" <[EMAIL PROTECTED]> wrote: > Hi all! > > I have a problem to get _all_ images from flac file. > I have flac file with 3 images inside ( FLAC__METADATA_TYPE_PICTURE ) > > How to get _all_ images with bool FLAC::Metadata::get_picture() func? > > This function is wrapper FLAC__bool FLAC__metadata_get_picture(). > > flac-1.2.1/src/libFLAC/metadata_iterators.c: > ... > 285 FLAC_API FLAC__bool FLAC__metadata_get_picture(const char > *filename, > FLAC__StreamMetadata **picture, FLAC__StreamMetadata_Picture_Type > type, > const char *mime_type, const FLAC__byte *description, unsigned > max_width, unsigned max_height, unsigned max_depth, unsigned > max_colors) > 286 { > 287 FLAC__Metadata_SimpleIterator *it; > 288 FLAC__uint64 max_area_seen = 0; > 289 FLAC__uint64 max_depth_seen = 0; > 290 > 291 FLAC__ASSERT(0 != filename); > 292 FLAC__ASSERT(0 != picture); > 293 > 294 *picture = 0; > 295 > 296 it = FLAC__metadata_simple_iterator_new(); > 297 if(0 == it) > 298 return false; > 299 if(!FLAC__metadata_simple_iterator_init(it, filename, > /*read_only=*/true, /*preserve_file_stats=*/true)) { > 300 FLAC__metadata_simple_iterator_delete(it); > 301 return false; > 302 } > 303 do { > 304 if(FLAC__metadata_simple_iterator_get_block_type(it) == > > FLAC__METADATA_TYPE_PICTURE) { > 305 FLAC__StreamMetadata *obj = > FLAC__metadata_simple_iterator_get_block(it); > 306 FLAC__uint64 area = > (FLAC__uint64)obj->data.picture.width * > (FLAC__uint64)obj->data.picture.height; > 307 /* check constraints */ > 308 if( > 309 (type == > (FLAC__StreamMetadata_Picture_Type)(-1) > || type == obj->data.picture.type) && > 310 (mime_type == 0 || !strcmp(mime_type, > obj->data.picture.mime_type)) && > 311 (description == 0 || !strcmp((const char > *)description, (const char *)obj->data.picture.description)) && > 312 obj->data.picture.width <= max_width && > 313 obj->data.picture.height <= max_height && > 314 obj->data.picture.depth <= max_depth && > 315 obj->data.picture.colors <= max_colors && > 316 (area > max_area_seen || (area == max_area_seen > && > obj->data.picture.depth > max_depth_seen)) > 317 ) { > 318 if(*picture) > 319 FLAC__metadata_object_delete(*picture); > 320 *picture = obj; // <------- HERE > 321 max_area_seen = area; > 322 max_depth_seen = obj->data.picture.depth; > 323 } > 324 else { > 325 FLAC__metadata_object_delete(obj); > 326 } > 327 } > 328 } while(FLAC__metadata_simple_iterator_next(it)); > 329 > 330 FLAC__metadata_simple_iterator_delete(it); > 331 > 332 return (0 != *picture); > 333 } > ... > > In line 320 picture always overwrite in do { } ... while ( ) cycle. > So it means, that every time I will get only the last image from > file. > Am I right? > > So how to get all images? > Thanks for any help. > > Bests, > > _______________________________________________ > Flac-dev mailing list > [email protected] > http://lists.xiph.org/mailman/listinfo/flac-dev _______________________________________________ Flac-dev mailing list [email protected] http://lists.xiph.org/mailman/listinfo/flac-dev
