• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/minidlna/flac-1.2.1/src/libFLAC/

Lines Matching defs:object

162 static void seektable_calculate_length_(FLAC__StreamMetadata *object)
164 FLAC__ASSERT(0 != object);
165 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
167 object->length = object->data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
190 static void vorbiscomment_calculate_length_(FLAC__StreamMetadata *object)
194 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
196 object->length = (FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN) / 8;
197 object->length += object->data.vorbis_comment.vendor_string.length;
198 object->length += (FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN) / 8;
199 for(i = 0; i < object->data.vorbis_comment.num_comments; i++) {
200 object->length += (FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN / 8);
201 object->length += object->data.vorbis_comment.comments[i].length;
249 static FLAC__bool vorbiscomment_set_entry_(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry *dest, const FLAC__StreamMetadata_VorbisComment_Entry *src, FLAC__bool copy)
253 FLAC__ASSERT(0 != object);
256 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
263 /* do the copy first so that if we fail we leave the dest object untouched */
291 vorbiscomment_calculate_length_(object);
295 static int vorbiscomment_find_entry_from_(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name, unsigned field_name_length)
299 FLAC__ASSERT(0 != object);
300 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
303 for(i = offset; i < object->data.vorbis_comment.num_comments; i++) {
304 if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments[i], field_name, field_name_length))
311 static void cuesheet_calculate_length_(FLAC__StreamMetadata *object)
315 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
317 object->length = (
325 object->length += object->data.cue_sheet.num_tracks * (
335 for(i = 0; i < object->data.cue_sheet.num_tracks; i++) {
336 object->length += object->data.cue_sheet.tracks[i].num_indices * (
398 static FLAC__bool cuesheet_set_track_(FLAC__StreamMetadata *object, FLAC__StreamMetadata_CueSheet_Track *dest, const FLAC__StreamMetadata_CueSheet_Track *src, FLAC__bool copy)
402 FLAC__ASSERT(0 != object);
405 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
410 /* do the copy first so that if we fail we leave the object untouched */
422 cuesheet_calculate_length_(object);
429 * Metadata object routines
435 FLAC__StreamMetadata *object;
440 object = (FLAC__StreamMetadata*)calloc(1, sizeof(FLAC__StreamMetadata));
441 if(0 != object) {
442 object->is_last = false;
443 object->type = type;
446 object->length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
450 object->length = 0;
454 object->length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8;
456 object->data.application.data = 0;
461 object->length = 0;
462 object->data.seek_table.num_points = 0;
463 object->data.seek_table.points = 0;
467 object->data.vorbis_comment.vendor_string.length = (unsigned)strlen(FLAC__VENDOR_STRING);
468 if(!copy_bytes_(&object->data.vorbis_comment.vendor_string.entry, (const FLAC__byte*)FLAC__VENDOR_STRING, object->data.vorbis_comment.vendor_string.length+1)) {
469 free(object);
472 vorbiscomment_calculate_length_(object);
475 cuesheet_calculate_length_(object);
478 object->length = (
489 object->data.picture.type = FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER;
490 object->data.picture.mime_type = 0;
491 object->data.picture.description = 0;
493 object->data.picture.width = 0;
494 object->data.picture.height = 0;
495 object->data.picture.depth = 0;
496 object->data.picture.colors = 0;
497 object->data.picture.data_length = 0;
498 object->data.picture.data = 0;
501 if(!copy_cstring_(&object->data.picture.mime_type, "")) {
502 free(object);
505 if(!copy_cstring_((char**)(&object->data.picture.description), "")) {
506 if(object->data.picture.mime_type)
507 free(object->data.picture.mime_type);
508 free(object);
514 object->length = 0;
515 object->data.unknown.data = 0;
521 return object;
524 FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_clone(const FLAC__StreamMetadata *object)
528 FLAC__ASSERT(0 != object);
530 if(0 != (to = FLAC__metadata_object_new(object->type))) {
531 to->is_last = object->is_last;
532 to->type = object->type;
533 to->length = object->length;
536 memcpy(&to->data.stream_info, &object->data.stream_info, sizeof(FLAC__StreamMetadata_StreamInfo));
545 memcpy(&to->data.application.id, &object->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8);
546 if(!copy_bytes_(&to->data.application.data, object->data.application.data, object->length - FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)) {
552 to->data.seek_table.num_points = object->data.seek_table.num_points;
557 if(!copy_bytes_((FLAC__byte**)&to->data.seek_table.points, (FLAC__byte*)object->data.seek_table.points, object->data.seek_table.num_points * sizeof(FLAC__StreamMetadata_SeekPoint))) {
567 if(!copy_vcentry_(&to->data.vorbis_comment.vendor_string, &object->data.vorbis_comment.vendor_string)) {
571 if(object->data.vorbis_comment.num_comments == 0) {
572 FLAC__ASSERT(0 == object->data.vorbis_comment.comments);
576 FLAC__ASSERT(0 != object->data.vorbis_comment.comments);
577 to->data.vorbis_comment.comments = vorbiscomment_entry_array_copy_(object->data.vorbis_comment.comments, object->data.vorbis_comment.num_comments);
583 to->data.vorbis_comment.num_comments = object->data.vorbis_comment.num_comments;
586 memcpy(&to->data.cue_sheet, &object->data.cue_sheet, sizeof(FLAC__StreamMetadata_CueSheet));
587 if(object->data.cue_sheet.num_tracks == 0) {
588 FLAC__ASSERT(0 == object->data.cue_sheet.tracks);
591 FLAC__ASSERT(0 != object->data.cue_sheet.tracks);
592 to->data.cue_sheet.tracks = cuesheet_track_array_copy_(object->data.cue_sheet.tracks, object->data.cue_sheet.num_tracks);
600 to->data.picture.type = object->data.picture.type;
601 if(!copy_cstring_(&to->data.picture.mime_type, object->data.picture.mime_type)) {
605 if(!copy_cstring_((char**)(&to->data.picture.description), (const char*)object->data.picture.description)) {
609 to->data.picture.width = object->data.picture.width;
610 to->data.picture.height = object->data.picture.height;
611 to->data.picture.depth = object->data.picture.depth;
612 to->data.picture.colors = object->data.picture.colors;
613 to->data.picture.data_length = object->data.picture.data_length;
614 if(!copy_bytes_((&to->data.picture.data), object->data.picture.data, object->data.picture.data_length)) {
620 if(!copy_bytes_(&to->data.unknown.data, object->data.unknown.data, object->length)) {
631 void FLAC__metadata_object_delete_data(FLAC__StreamMetadata *object)
633 FLAC__ASSERT(0 != object);
635 switch(object->type) {
640 if(0 != object->data.application.data) {
641 free(object->data.application.data);
642 object->data.application.data = 0;
646 if(0 != object->data.seek_table.points) {
647 free(object->data.seek_table.points);
648 object->data.seek_table.points = 0;
652 if(0 != object->data.vorbis_comment.vendor_string.entry) {
653 free(object->data.vorbis_comment.vendor_string.entry);
654 object->data.vorbis_comment.vendor_string.entry = 0;
656 if(0 != object->data.vorbis_comment.comments) {
657 FLAC__ASSERT(object->data.vorbis_comment.num_comments > 0);
658 vorbiscomment_entry_array_delete_(object->data.vorbis_comment.comments, object->data.vorbis_comment.num_comments);
662 if(0 != object->data.cue_sheet.tracks) {
663 FLAC__ASSERT(object->data.cue_sheet.num_tracks > 0);
664 cuesheet_track_array_delete_(object->data.cue_sheet.tracks, object->data.cue_sheet.num_tracks);
668 if(0 != object->data.picture.mime_type) {
669 free(object->data.picture.mime_type);
670 object->data.picture.mime_type = 0;
672 if(0 != object->data.picture.description) {
673 free(object->data.picture.description);
674 object->data.picture.description = 0;
676 if(0 != object->data.picture.data) {
677 free(object->data.picture.data);
678 object->data.picture.data = 0;
682 if(0 != object->data.unknown.data) {
683 free(object->data.unknown.data);
684 object->data.unknown.data = 0;
690 FLAC_API void FLAC__metadata_object_delete(FLAC__StreamMetadata *object)
692 FLAC__metadata_object_delete_data(object);
693 free(object);
903 FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, unsigned length, FLAC__bool copy)
907 FLAC__ASSERT(0 != object);
908 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_APPLICATION);
911 save = object->data.application.data;
913 /* do the copy first so that if we fail we leave the object untouched */
915 if(!copy_bytes_(&object->data.application.data, data, length))
919 object->data.application.data = data;
925 object->length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8 + length;
929 FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, unsigned new_num_points)
931 FLAC__ASSERT(0 != object);
932 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
934 if(0 == object->data.seek_table.points) {
935 FLAC__ASSERT(object->data.seek_table.num_points == 0);
938 else if(0 == (object->data.seek_table.points = seekpoint_array_new_(new_num_points)))
942 const size_t old_size = object->data.seek_table.num_points * sizeof(FLAC__StreamMetadata_SeekPoint);
949 FLAC__ASSERT(object->data.seek_table.num_points > 0);
952 free(object->data.seek_table.points);
953 object->data.seek_table.points = 0;
955 else if(0 == (object->data.seek_table.points = (FLAC__StreamMetadata_SeekPoint*)realloc(object->data.seek_table.points, new_size)))
961 for(i = object->data.seek_table.num_points; i < new_num_points; i++) {
962 object->data.seek_table.points[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
963 object->data.seek_table.points[i].stream_offset = 0;
964 object->data.seek_table.points[i].frame_samples = 0;
969 object->data.seek_table.num_points = new_num_points;
971 seektable_calculate_length_(object);
975 FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point)
977 FLAC__ASSERT(0 != object);
978 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
979 FLAC__ASSERT(point_num < object->data.seek_table.num_points);
981 object->data.seek_table.points[point_num] = point;
984 FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point)
988 FLAC__ASSERT(0 != object);
989 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
990 FLAC__ASSERT(point_num <= object->data.seek_table.num_points);
992 if(!FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points+1))
996 for(i = (int)object->data.seek_table.num_points-1; i > (int)point_num; i--)
997 object->data.seek_table.points[i] = object->data.seek_table.points[i-1];
999 FLAC__metadata_object_seektable_set_point(object, point_num, point);
1000 seektable_calculate_length_(object);
1004 FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, unsigned point_num)
1008 FLAC__ASSERT(0 != object);
1009 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1010 FLAC__ASSERT(point_num < object->data.seek_table.num_points);
1013 for(i = point_num; i < object->data.seek_table.num_points-1; i++)
1014 object->data.seek_table.points[i] = object->data.seek_table.points[i+1];
1016 return FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points-1);
1019 FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object)
1021 FLAC__ASSERT(0 != object);
1022 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1024 return FLAC__format_seektable_is_legal(&object->data.seek_table);
1027 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, unsigned num)
1029 FLAC__ASSERT(0 != object);
1030 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1034 return FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points + num);
1039 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number)
1043 FLAC__ASSERT(0 != object);
1044 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1046 seek_table = &object->data.seek_table;
1048 if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + 1))
1058 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], unsigned num)
1060 FLAC__ASSERT(0 != object);
1061 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1065 FLAC__StreamMetadata_SeekTable *seek_table = &object->data.seek_table;
1070 if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + num))
1083 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, unsigned num, FLAC__uint64 total_samples)
1085 FLAC__ASSERT(0 != object);
1086 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1090 FLAC__StreamMetadata_SeekTable *seek_table = &object->data.seek_table;
1095 if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + num))
1108 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(FLAC__StreamMetadata *object, unsigned samples, FLAC__uint64 total_samples)
1110 FLAC__ASSERT(0 != object);
1111 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1116 FLAC__StreamMetadata_SeekTable *seek_table = &object->data.seek_table;
1127 if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + (unsigned)num))
1141 FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact)
1145 FLAC__ASSERT(0 != object);
1146 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);
1148 unique = FLAC__format_seektable_sort(&object->data.seek_table);
1150 return !compact || FLAC__metadata_object_seektable_resize_points(object, unique);
1153 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy)
1157 return vorbiscomment_set_entry_(object, &object->data.vorbis_comment.vendor_string, &entry, copy);
1160 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, unsigned new_num_comments)
1162 FLAC__ASSERT(0 != object);
1163 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1165 if(0 == object->data.vorbis_comment.comments) {
1166 FLAC__ASSERT(object->data.vorbis_comment.num_comments == 0);
1169 else if(0 == (object->data.vorbis_comment.comments = vorbiscomment_entry_array_new_(new_num_comments)))
1173 const size_t old_size = object->data.vorbis_comment.num_comments * sizeof(FLAC__StreamMetadata_VorbisComment_Entry);
1180 FLAC__ASSERT(object->data.vorbis_comment.num_comments > 0);
1183 if(new_num_comments < object->data.vorbis_comment.num_comments) {
1185 for(i = new_num_comments; i < object->data.vorbis_comment.num_comments; i++)
1186 if(0 != object->data.vorbis_comment.comments[i].entry)
1187 free(object->data.vorbis_comment.comments[i].entry);
1191 free(object->data.vorbis_comment.comments);
1192 object->data.vorbis_comment.comments = 0;
1194 else if(0 == (object->data.vorbis_comment.comments = (FLAC__StreamMetadata_VorbisComment_Entry*)realloc(object->data.vorbis_comment.comments, new_size)))
1199 memset(object->data.vorbis_comment.comments + object->data.vorbis_comment.num_comments, 0, new_size - old_size);
1202 object->data.vorbis_comment.num_comments = new_num_comments;
1204 vorbiscomment_calculate_length_(object);
1208 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy)
1210 FLAC__ASSERT(0 != object);
1211 FLAC__ASSERT(comment_num < object->data.vorbis_comment.num_comments);
1215 return vorbiscomment_set_entry_(object, &object->data.vorbis_comment.comments[comment_num], &entry, copy);
1218 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy)
1222 FLAC__ASSERT(0 != object);
1223 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1224 FLAC__ASSERT(comment_num <= object->data.vorbis_comment.num_comments);
1229 vc = &object->data.vorbis_comment;
1231 if(!FLAC__metadata_object_vorbiscomment_resize_comments(object, vc->num_comments+1))
1239 return FLAC__metadata_object_vorbiscomment_set_comment(object, comment_num, entry, copy);
1242 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy)
1244 FLAC__ASSERT(0 != object);
1245 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1246 return FLAC__metadata_object_vorbiscomment_insert_comment(object, object->data.vorbis_comment.num_comments, entry, copy);
1249 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy)
1268 if((i = vorbiscomment_find_entry_from_(object, 0, (const char *)entry.entry, field_name_length)) >= 0) {
1270 if(!FLAC__metadata_object_vorbiscomment_set_comment(object, index, entry, copy))
1272 if(all && (index+1 < object->data.vorbis_comment.num_comments)) {
1273 for(i = vorbiscomment_find_entry_from_(object, index+1, (const char *)entry.entry, field_name_length); i >= 0; ) {
1274 if(!FLAC__metadata_object_vorbiscomment_delete_comment(object, (unsigned)i))
1276 if((unsigned)i < object->data.vorbis_comment.num_comments)
1277 i = vorbiscomment_find_entry_from_(object, (unsigned)i, (const char *)entry.entry, field_name_length);
1285 return FLAC__metadata_object_vorbiscomment_append_comment(object, entry, copy);
1289 FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, unsigned comment_num)
1293 FLAC__ASSERT(0 != object);
1294 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1295 FLAC__ASSERT(comment_num < object->data.vorbis_comment.num_comments);
1297 vc = &object->data.vorbis_comment;
1308 return FLAC__metadata_object_vorbiscomment_resize_comments(object, vc->num_comments-1);
1383 FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name)
1387 return vorbiscomment_find_entry_from_(object, offset, field_name, strlen(field_name));
1390 FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name)
1395 FLAC__ASSERT(0 != object);
1396 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1398 for(i = 0; i < object->data.vorbis_comment.num_comments; i++) {
1399 if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments[i], field_name, field_name_length)) {
1400 if(!FLAC__metadata_object_vorbiscomment_delete_comment(object, i))
1410 FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name)
1417 FLAC__ASSERT(0 != object);
1418 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);
1421 for(i = (int)object->data.vorbis_comment.num_comments - 1; ok && i >= 0; i--) {
1422 if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments[i], field_name, field_name_length)) {
1424 ok &= FLAC__metadata_object_vorbiscomment_delete_comment(object, (unsigned)i);
1436 FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object)
1440 FLAC__ASSERT(0 != object);
1443 if(!copy_track_(to, object)) {
1452 void FLAC__metadata_object_cuesheet_track_delete_data(FLAC__StreamMetadata_CueSheet_Track *object)
1454 FLAC__ASSERT(0 != object);
1456 if(0 != object->indices) {
1457 FLAC__ASSERT(object->num_indices > 0);
1458 free(object->indices);
1462 FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object)
1464 FLAC__metadata_object_cuesheet_track_delete_data(object);
1465 free(object);
1468 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, unsigned track_num, unsigned new_num_indices)
1471 FLAC__ASSERT(0 != object);
1472 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1473 FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);
1475 track = &object->data.cue_sheet.tracks[track_num];
1508 cuesheet_calculate_length_(object);
1512 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num, FLAC__StreamMetadata_CueSheet_Index index)
1516 FLAC__ASSERT(0 != object);
1517 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1518 FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);
1519 FLAC__ASSERT(index_num <= object->data.cue_sheet.tracks[track_num].num_indices);
1521 track = &object->data.cue_sheet.tracks[track_num];
1523 if(!FLAC__metadata_object_cuesheet_track_resize_indices(object, track_num, track->num_indices+1))
1530 cuesheet_calculate_length_(object);
1534 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num)
1538 return FLAC__metadata_object_cuesheet_track_insert_index(object, track_num, index_num, index);
1541 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num)
1545 FLAC__ASSERT(0 != object);
1546 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1547 FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);
1548 FLAC__ASSERT(index_num < object->data.cue_sheet.tracks[track_num].num_indices);
1550 track = &object->data.cue_sheet.tracks[track_num];
1555 FLAC__metadata_object_cuesheet_track_resize_indices(object, track_num, track->num_indices-1);
1556 cuesheet_calculate_length_(object);
1560 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, unsigned new_num_tracks)
1562 FLAC__ASSERT(0 != object);
1563 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1565 if(0 == object->data.cue_sheet.tracks) {
1566 FLAC__ASSERT(object->data.cue_sheet.num_tracks == 0);
1569 else if(0 == (object->data.cue_sheet.tracks = cuesheet_track_array_new_(new_num_tracks)))
1573 const size_t old_size = object->data.cue_sheet.num_tracks * sizeof(FLAC__StreamMetadata_CueSheet_Track);
1580 FLAC__ASSERT(object->data.cue_sheet.num_tracks > 0);
1583 if(new_num_tracks < object->data.cue_sheet.num_tracks) {
1585 for(i = new_num_tracks; i < object->data.cue_sheet.num_tracks; i++)
1586 if(0 != object->data.cue_sheet.tracks[i].indices)
1587 free(object->data.cue_sheet.tracks[i].indices);
1591 free(object->data.cue_sheet.tracks);
1592 object->data.cue_sheet.tracks = 0;
1594 else if(0 == (object->data.cue_sheet.tracks = (FLAC__StreamMetadata_CueSheet_Track*)realloc(object->data.cue_sheet.tracks, new_size)))
1599 memset(object->data.cue_sheet.tracks + object->data.cue_sheet.num_tracks, 0, new_size - old_size);
1602 object->data.cue_sheet.num_tracks = new_num_tracks;
1604 cuesheet_calculate_length_(object);
1608 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy)
1610 FLAC__ASSERT(0 != object);
1611 FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);
1613 return cuesheet_set_track_(object, object->data.cue_sheet.tracks + track_num, track, copy);
1616 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy)
1620 FLAC__ASSERT(0 != object);
1621 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1622 FLAC__ASSERT(track_num <= object->data.cue_sheet.num_tracks);
1624 cs = &object->data.cue_sheet;
1626 if(!FLAC__metadata_object_cuesheet_resize_tracks(object, cs->num_tracks+1))
1634 return FLAC__metadata_object_cuesheet_set_track(object, track_num, track, copy);
1637 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, unsigned track_num)
1641 return FLAC__metadata_object_cuesheet_insert_track(object, track_num, &track, /*copy=*/false);
1644 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, unsigned track_num)
1648 FLAC__ASSERT(0 != object);
1649 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1650 FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);
1652 cs = &object->data.cue_sheet;
1663 return FLAC__metadata_object_cuesheet_resize_tracks(object, cs->num_tracks-1);
1666 FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation)
1668 FLAC__ASSERT(0 != object);
1669 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1671 return FLAC__format_cuesheet_is_legal(&object->data.cue_sheet, check_cd_da_subset, violation);
1699 FLAC_API FLAC__uint32 FLAC__metadata_object_cuesheet_calculate_cddb_id(const FLAC__StreamMetadata *object)
1703 FLAC__ASSERT(0 != object);
1704 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);
1706 cs = &object->data.cue_sheet;
1721 FLAC_API FLAC__bool FLAC__metadata_object_picture_set_mime_type(FLAC__StreamMetadata *object, char *mime_type, FLAC__bool copy)
1726 FLAC__ASSERT(0 != object);
1727 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_PICTURE);
1730 old = object->data.picture.mime_type;
1734 /* do the copy first so that if we fail we leave the object untouched */
1738 if(!copy_bytes_((FLAC__byte**)(&object->data.picture.mime_type), (FLAC__byte*)mime_type, new_length+1))
1742 object->data.picture.mime_type = mime_type;
1748 object->length -= old_length;
1749 object->length += new_length;
1753 FLAC_API FLAC__bool FLAC__metadata_object_picture_set_description(FLAC__StreamMetadata *object, FLAC__byte *description, FLAC__bool copy)
1758 FLAC__ASSERT(0 != object);
1759 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_PICTURE);
1762 old = object->data.picture.description;
1766 /* do the copy first so that if we fail we leave the object untouched */
1770 if(!copy_bytes_(&object->data.picture.description, description, new_length+1))
1774 object->data.picture.description = description;
1780 object->length -= old_length;
1781 object->length += new_length;
1785 FLAC_API FLAC__bool FLAC__metadata_object_picture_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, FLAC__uint32 length, FLAC__bool copy)
1789 FLAC__ASSERT(0 != object);
1790 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_PICTURE);
1793 old = object->data.picture.data;
1795 /* do the copy first so that if we fail we leave the object untouched */
1797 if(!copy_bytes_(&object->data.picture.data, data, length))
1801 object->data.picture.data = data;
1807 object->length -= object->data.picture.data_length;
1808 object->data.picture.data_length = length;
1809 object->length += length;
1813 FLAC_API FLAC__bool FLAC__metadata_object_picture_is_legal(const FLAC__StreamMetadata *object, const char **violation)
1815 FLAC__ASSERT(0 != object);
1816 FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_PICTURE);
1818 return FLAC__format_picture_is_legal(&object->data.picture, violation);