1
/* test_libFLAC - Unit tester for libFLAC
2
* Copyright (C) 2002,2003,2004,2005 Josh Coalson
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License
6
* as published by the Free Software Foundation; either version 2
7
* of the License, or (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
* These are not tests, just utility functions used by the metadata tests
23
#include "metadata_utils.h"
24
#include "FLAC/metadata.h"
26
#include <stdlib.h> /* for malloc() */
27
#include <string.h> /* for memcmp() */
29
FLAC__bool mutils__compare_block_data_streaminfo(const FLAC__StreamMetadata_StreamInfo *block, const FLAC__StreamMetadata_StreamInfo *blockcopy)
31
if(blockcopy->min_blocksize != block->min_blocksize) {
32
printf("FAILED, min_blocksize mismatch, expected %u, got %u\n", block->min_blocksize, blockcopy->min_blocksize);
35
if(blockcopy->max_blocksize != block->max_blocksize) {
36
printf("FAILED, max_blocksize mismatch, expected %u, got %u\n", block->max_blocksize, blockcopy->max_blocksize);
39
if(blockcopy->min_framesize != block->min_framesize) {
40
printf("FAILED, min_framesize mismatch, expected %u, got %u\n", block->min_framesize, blockcopy->min_framesize);
43
if(blockcopy->max_framesize != block->max_framesize) {
44
printf("FAILED, max_framesize mismatch, expected %u, got %u\n", block->max_framesize, blockcopy->max_framesize);
47
if(blockcopy->sample_rate != block->sample_rate) {
48
printf("FAILED, sample_rate mismatch, expected %u, got %u\n", block->sample_rate, blockcopy->sample_rate);
51
if(blockcopy->channels != block->channels) {
52
printf("FAILED, channels mismatch, expected %u, got %u\n", block->channels, blockcopy->channels);
55
if(blockcopy->bits_per_sample != block->bits_per_sample) {
56
printf("FAILED, bits_per_sample mismatch, expected %u, got %u\n", block->bits_per_sample, blockcopy->bits_per_sample);
59
if(blockcopy->total_samples != block->total_samples) {
60
printf("FAILED, total_samples mismatch, expected %llu, got %llu\n", block->total_samples, blockcopy->total_samples);
63
if(0 != memcmp(blockcopy->md5sum, block->md5sum, sizeof(block->md5sum))) {
64
printf("FAILED, md5sum mismatch, expected %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X, got %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n",
65
(unsigned)block->md5sum[0],
66
(unsigned)block->md5sum[1],
67
(unsigned)block->md5sum[2],
68
(unsigned)block->md5sum[3],
69
(unsigned)block->md5sum[4],
70
(unsigned)block->md5sum[5],
71
(unsigned)block->md5sum[6],
72
(unsigned)block->md5sum[7],
73
(unsigned)block->md5sum[8],
74
(unsigned)block->md5sum[9],
75
(unsigned)block->md5sum[10],
76
(unsigned)block->md5sum[11],
77
(unsigned)block->md5sum[12],
78
(unsigned)block->md5sum[13],
79
(unsigned)block->md5sum[14],
80
(unsigned)block->md5sum[15],
81
(unsigned)blockcopy->md5sum[0],
82
(unsigned)blockcopy->md5sum[1],
83
(unsigned)blockcopy->md5sum[2],
84
(unsigned)blockcopy->md5sum[3],
85
(unsigned)blockcopy->md5sum[4],
86
(unsigned)blockcopy->md5sum[5],
87
(unsigned)blockcopy->md5sum[6],
88
(unsigned)blockcopy->md5sum[7],
89
(unsigned)blockcopy->md5sum[8],
90
(unsigned)blockcopy->md5sum[9],
91
(unsigned)blockcopy->md5sum[10],
92
(unsigned)blockcopy->md5sum[11],
93
(unsigned)blockcopy->md5sum[12],
94
(unsigned)blockcopy->md5sum[13],
95
(unsigned)blockcopy->md5sum[14],
96
(unsigned)blockcopy->md5sum[15]
103
FLAC__bool mutils__compare_block_data_padding(const FLAC__StreamMetadata_Padding *block, const FLAC__StreamMetadata_Padding *blockcopy, unsigned block_length)
105
/* we don't compare the padding guts */
106
(void)block, (void)blockcopy, (void)block_length;
110
FLAC__bool mutils__compare_block_data_application(const FLAC__StreamMetadata_Application *block, const FLAC__StreamMetadata_Application *blockcopy, unsigned block_length)
112
if(block_length < sizeof(block->id)) {
113
printf("FAILED, bad block length = %u\n", block_length);
116
if(0 != memcmp(blockcopy->id, block->id, sizeof(block->id))) {
117
printf("FAILED, id mismatch, expected %02X%02X%02X%02X, got %02X%02X%02X%02X\n",
118
(unsigned)block->id[0],
119
(unsigned)block->id[1],
120
(unsigned)block->id[2],
121
(unsigned)block->id[3],
122
(unsigned)blockcopy->id[0],
123
(unsigned)blockcopy->id[1],
124
(unsigned)blockcopy->id[2],
125
(unsigned)blockcopy->id[3]
129
if(0 == block->data || 0 == blockcopy->data) {
130
if(block->data != blockcopy->data) {
131
printf("FAILED, data mismatch (%s's data pointer is null)\n", 0==block->data?"original":"copy");
134
else if(block_length - sizeof(block->id) > 0) {
135
printf("FAILED, data pointer is null but block length is not 0\n");
140
if(block_length - sizeof(block->id) == 0) {
141
printf("FAILED, data pointer is not null but block length is 0\n");
144
else if(0 != memcmp(blockcopy->data, block->data, block_length - sizeof(block->id))) {
145
printf("FAILED, data mismatch\n");
152
FLAC__bool mutils__compare_block_data_seektable(const FLAC__StreamMetadata_SeekTable *block, const FLAC__StreamMetadata_SeekTable *blockcopy)
155
if(blockcopy->num_points != block->num_points) {
156
printf("FAILED, num_points mismatch, expected %u, got %u\n", block->num_points, blockcopy->num_points);
159
for(i = 0; i < block->num_points; i++) {
160
if(blockcopy->points[i].sample_number != block->points[i].sample_number) {
161
printf("FAILED, points[%u].sample_number mismatch, expected %llu, got %llu\n", i, block->points[i].sample_number, blockcopy->points[i].sample_number);
164
if(blockcopy->points[i].stream_offset != block->points[i].stream_offset) {
165
printf("FAILED, points[%u].stream_offset mismatch, expected %llu, got %llu\n", i, block->points[i].stream_offset, blockcopy->points[i].stream_offset);
168
if(blockcopy->points[i].frame_samples != block->points[i].frame_samples) {
169
printf("FAILED, points[%u].frame_samples mismatch, expected %u, got %u\n", i, block->points[i].frame_samples, blockcopy->points[i].frame_samples);
176
FLAC__bool mutils__compare_block_data_vorbiscomment(const FLAC__StreamMetadata_VorbisComment *block, const FLAC__StreamMetadata_VorbisComment *blockcopy)
179
if(blockcopy->vendor_string.length != block->vendor_string.length) {
180
printf("FAILED, vendor_string.length mismatch, expected %u, got %u\n", block->vendor_string.length, blockcopy->vendor_string.length);
183
if(0 == block->vendor_string.entry || 0 == blockcopy->vendor_string.entry) {
184
if(block->vendor_string.entry != blockcopy->vendor_string.entry) {
185
printf("FAILED, vendor_string.entry mismatch\n");
189
else if(0 != memcmp(blockcopy->vendor_string.entry, block->vendor_string.entry, block->vendor_string.length)) {
190
printf("FAILED, vendor_string.entry mismatch\n");
193
if(blockcopy->num_comments != block->num_comments) {
194
printf("FAILED, num_comments mismatch, expected %u, got %u\n", block->num_comments, blockcopy->num_comments);
197
for(i = 0; i < block->num_comments; i++) {
198
if(blockcopy->comments[i].length != block->comments[i].length) {
199
printf("FAILED, comments[%u].length mismatch, expected %u, got %u\n", i, block->comments[i].length, blockcopy->comments[i].length);
202
if(0 == block->comments[i].entry || 0 == blockcopy->comments[i].entry) {
203
if(block->comments[i].entry != blockcopy->comments[i].entry) {
204
printf("FAILED, comments[%u].entry mismatch\n", i);
209
if(0 != memcmp(blockcopy->comments[i].entry, block->comments[i].entry, block->comments[i].length)) {
210
printf("FAILED, comments[%u].entry mismatch\n", i);
218
FLAC__bool mutils__compare_block_data_cuesheet(const FLAC__StreamMetadata_CueSheet *block, const FLAC__StreamMetadata_CueSheet *blockcopy)
222
if(0 != strcmp(blockcopy->media_catalog_number, block->media_catalog_number)) {
223
printf("FAILED, media_catalog_number mismatch, expected %s, got %s\n", block->media_catalog_number, blockcopy->media_catalog_number);
226
if(blockcopy->lead_in != block->lead_in) {
227
printf("FAILED, lead_in mismatch, expected %llu, got %llu\n", block->lead_in, blockcopy->lead_in);
230
if(blockcopy->is_cd != block->is_cd) {
231
printf("FAILED, is_cd mismatch, expected %u, got %u\n", (unsigned)block->is_cd, (unsigned)blockcopy->is_cd);
234
if(blockcopy->num_tracks != block->num_tracks) {
235
printf("FAILED, num_tracks mismatch, expected %u, got %u\n", block->num_tracks, blockcopy->num_tracks);
238
for(i = 0; i < block->num_tracks; i++) {
239
if(blockcopy->tracks[i].offset != block->tracks[i].offset) {
240
printf("FAILED, tracks[%u].offset mismatch, expected %llu, got %llu\n", i, block->tracks[i].offset, blockcopy->tracks[i].offset);
243
if(blockcopy->tracks[i].number != block->tracks[i].number) {
244
printf("FAILED, tracks[%u].number mismatch, expected %u, got %u\n", i, (unsigned)block->tracks[i].number, (unsigned)blockcopy->tracks[i].number);
247
if(blockcopy->tracks[i].num_indices != block->tracks[i].num_indices) {
248
printf("FAILED, tracks[%u].num_indices mismatch, expected %u, got %u\n", i, (unsigned)block->tracks[i].num_indices, (unsigned)blockcopy->tracks[i].num_indices);
251
/* num_indices == 0 means lead-out track so only the track offset and number are valid */
252
if(block->tracks[i].num_indices > 0) {
253
if(0 != strcmp(blockcopy->tracks[i].isrc, block->tracks[i].isrc)) {
254
printf("FAILED, tracks[%u].isrc mismatch, expected %s, got %s\n", i, block->tracks[i].isrc, blockcopy->tracks[i].isrc);
257
if(blockcopy->tracks[i].type != block->tracks[i].type) {
258
printf("FAILED, tracks[%u].type mismatch, expected %u, got %u\n", i, (unsigned)block->tracks[i].type, (unsigned)blockcopy->tracks[i].type);
261
if(blockcopy->tracks[i].pre_emphasis != block->tracks[i].pre_emphasis) {
262
printf("FAILED, tracks[%u].pre_emphasis mismatch, expected %u, got %u\n", i, (unsigned)block->tracks[i].pre_emphasis, (unsigned)blockcopy->tracks[i].pre_emphasis);
265
if(0 == block->tracks[i].indices || 0 == blockcopy->tracks[i].indices) {
266
if(block->tracks[i].indices != blockcopy->tracks[i].indices) {
267
printf("FAILED, tracks[%u].indices mismatch\n", i);
272
for(j = 0; j < block->tracks[i].num_indices; j++) {
273
if(blockcopy->tracks[i].indices[j].offset != block->tracks[i].indices[j].offset) {
274
printf("FAILED, tracks[%u].indices[%u].offset mismatch, expected %llu, got %llu\n", i, j, block->tracks[i].indices[j].offset, blockcopy->tracks[i].indices[j].offset);
277
if(blockcopy->tracks[i].indices[j].number != block->tracks[i].indices[j].number) {
278
printf("FAILED, tracks[%u].indices[%u].number mismatch, expected %u, got %u\n", i, j, (unsigned)block->tracks[i].indices[j].number, (unsigned)blockcopy->tracks[i].indices[j].number);
288
FLAC__bool mutils__compare_block_data_unknown(const FLAC__StreamMetadata_Unknown *block, const FLAC__StreamMetadata_Unknown *blockcopy, unsigned block_length)
290
if(0 == block->data || 0 == blockcopy->data) {
291
if(block->data != blockcopy->data) {
292
printf("FAILED, data mismatch (%s's data pointer is null)\n", 0==block->data?"original":"copy");
295
else if(block_length > 0) {
296
printf("FAILED, data pointer is null but block length is not 0\n");
301
if(block_length == 0) {
302
printf("FAILED, data pointer is not null but block length is 0\n");
305
else if(0 != memcmp(blockcopy->data, block->data, block_length)) {
306
printf("FAILED, data mismatch\n");
313
FLAC__bool mutils__compare_block(const FLAC__StreamMetadata *block, const FLAC__StreamMetadata *blockcopy)
315
if(blockcopy->type != block->type) {
316
printf("FAILED, type mismatch, expected %s, got %s\n", FLAC__MetadataTypeString[block->type], FLAC__MetadataTypeString[blockcopy->type]);
319
if(blockcopy->is_last != block->is_last) {
320
printf("FAILED, is_last mismatch, expected %u, got %u\n", (unsigned)block->is_last, (unsigned)blockcopy->is_last);
323
if(blockcopy->length != block->length) {
324
printf("FAILED, length mismatch, expected %u, got %u\n", block->length, blockcopy->length);
327
switch(block->type) {
328
case FLAC__METADATA_TYPE_STREAMINFO:
329
return mutils__compare_block_data_streaminfo(&block->data.stream_info, &blockcopy->data.stream_info);
330
case FLAC__METADATA_TYPE_PADDING:
331
return mutils__compare_block_data_padding(&block->data.padding, &blockcopy->data.padding, block->length);
332
case FLAC__METADATA_TYPE_APPLICATION:
333
return mutils__compare_block_data_application(&block->data.application, &blockcopy->data.application, block->length);
334
case FLAC__METADATA_TYPE_SEEKTABLE:
335
return mutils__compare_block_data_seektable(&block->data.seek_table, &blockcopy->data.seek_table);
336
case FLAC__METADATA_TYPE_VORBIS_COMMENT:
337
return mutils__compare_block_data_vorbiscomment(&block->data.vorbis_comment, &blockcopy->data.vorbis_comment);
338
case FLAC__METADATA_TYPE_CUESHEET:
339
return mutils__compare_block_data_cuesheet(&block->data.cue_sheet, &blockcopy->data.cue_sheet);
341
return mutils__compare_block_data_unknown(&block->data.unknown, &blockcopy->data.unknown, block->length);
344
static void *malloc_or_die_(size_t size)
346
void *x = malloc(size);
348
fprintf(stderr, "ERROR: out of memory allocating %u bytes\n", (unsigned)size);
354
static void *calloc_or_die_(size_t n, size_t size)
356
void *x = calloc(n, size);
358
fprintf(stderr, "ERROR: out of memory allocating %u bytes\n", (unsigned)n * (unsigned)size);
364
void mutils__init_metadata_blocks(
365
FLAC__StreamMetadata *streaminfo,
366
FLAC__StreamMetadata *padding,
367
FLAC__StreamMetadata *seektable,
368
FLAC__StreamMetadata *application1,
369
FLAC__StreamMetadata *application2,
370
FLAC__StreamMetadata *vorbiscomment,
371
FLAC__StreamMetadata *cuesheet,
372
FLAC__StreamMetadata *unknown
376
most of the actual numbers and data in the blocks don't matter,
377
we just want to make sure the decoder parses them correctly
379
remember, the metadata interface gets tested after the decoders,
380
so we do all the metadata manipulation here without it.
383
/* min/max_framesize and md5sum don't get written at first, so we have to leave them 0 */
384
streaminfo->is_last = false;
385
streaminfo->type = FLAC__METADATA_TYPE_STREAMINFO;
386
streaminfo->length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
387
streaminfo->data.stream_info.min_blocksize = 576;
388
streaminfo->data.stream_info.max_blocksize = 576;
389
streaminfo->data.stream_info.min_framesize = 0;
390
streaminfo->data.stream_info.max_framesize = 0;
391
streaminfo->data.stream_info.sample_rate = 44100;
392
streaminfo->data.stream_info.channels = 1;
393
streaminfo->data.stream_info.bits_per_sample = 8;
394
streaminfo->data.stream_info.total_samples = 0;
395
memset(streaminfo->data.stream_info.md5sum, 0, 16);
397
padding->is_last = false;
398
padding->type = FLAC__METADATA_TYPE_PADDING;
399
padding->length = 1234;
401
seektable->is_last = false;
402
seektable->type = FLAC__METADATA_TYPE_SEEKTABLE;
403
seektable->data.seek_table.num_points = 2;
404
seektable->length = seektable->data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
405
seektable->data.seek_table.points = (FLAC__StreamMetadata_SeekPoint*)malloc_or_die_(seektable->data.seek_table.num_points * sizeof(FLAC__StreamMetadata_SeekPoint));
406
seektable->data.seek_table.points[0].sample_number = 0;
407
seektable->data.seek_table.points[0].stream_offset = 0;
408
seektable->data.seek_table.points[0].frame_samples = streaminfo->data.stream_info.min_blocksize;
409
seektable->data.seek_table.points[1].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
410
seektable->data.seek_table.points[1].stream_offset = 1000;
411
seektable->data.seek_table.points[1].frame_samples = streaminfo->data.stream_info.min_blocksize;
413
application1->is_last = false;
414
application1->type = FLAC__METADATA_TYPE_APPLICATION;
415
application1->length = 8;
416
memcpy(application1->data.application.id, "\xfe\xdc\xba\x98", 4);
417
application1->data.application.data = (FLAC__byte*)malloc_or_die_(4);
418
memcpy(application1->data.application.data, "\xf0\xe1\xd2\xc3", 4);
420
application2->is_last = false;
421
application2->type = FLAC__METADATA_TYPE_APPLICATION;
422
application2->length = 4;
423
memcpy(application2->data.application.id, "\x76\x54\x32\x10", 4);
424
application2->data.application.data = 0;
427
const unsigned vendor_string_length = (unsigned)strlen(FLAC__VENDOR_STRING);
428
vorbiscomment->is_last = false;
429
vorbiscomment->type = FLAC__METADATA_TYPE_VORBIS_COMMENT;
430
vorbiscomment->length = (4 + vendor_string_length) + 4 + (4 + 5) + (4 + 0);
431
vorbiscomment->data.vorbis_comment.vendor_string.length = vendor_string_length;
432
vorbiscomment->data.vorbis_comment.vendor_string.entry = (FLAC__byte*)malloc_or_die_(vendor_string_length+1);
433
memcpy(vorbiscomment->data.vorbis_comment.vendor_string.entry, FLAC__VENDOR_STRING, vendor_string_length+1);
434
vorbiscomment->data.vorbis_comment.num_comments = 2;
435
vorbiscomment->data.vorbis_comment.comments = (FLAC__StreamMetadata_VorbisComment_Entry*)malloc_or_die_(vorbiscomment->data.vorbis_comment.num_comments * sizeof(FLAC__StreamMetadata_VorbisComment_Entry));
436
vorbiscomment->data.vorbis_comment.comments[0].length = 5;
437
vorbiscomment->data.vorbis_comment.comments[0].entry = (FLAC__byte*)malloc_or_die_(5+1);
438
memcpy(vorbiscomment->data.vorbis_comment.comments[0].entry, "ab=cd", 5+1);
439
vorbiscomment->data.vorbis_comment.comments[1].length = 0;
440
vorbiscomment->data.vorbis_comment.comments[1].entry = 0;
443
cuesheet->is_last = false;
444
cuesheet->type = FLAC__METADATA_TYPE_CUESHEET;
448
FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
449
FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
450
FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
451
FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
452
FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
456
FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN +
457
FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN +
458
FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN +
459
FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN +
460
FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN +
461
FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN +
462
FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN
466
FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN +
467
FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN +
468
FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN
471
memset(cuesheet->data.cue_sheet.media_catalog_number, 0, sizeof(cuesheet->data.cue_sheet.media_catalog_number));
472
cuesheet->data.cue_sheet.media_catalog_number[0] = 'j';
473
cuesheet->data.cue_sheet.media_catalog_number[1] = 'C';
474
cuesheet->data.cue_sheet.lead_in = 2 * 44100;
475
cuesheet->data.cue_sheet.is_cd = true;
476
cuesheet->data.cue_sheet.num_tracks = 3;
477
cuesheet->data.cue_sheet.tracks = (FLAC__StreamMetadata_CueSheet_Track*)calloc_or_die_(cuesheet->data.cue_sheet.num_tracks, sizeof(FLAC__StreamMetadata_CueSheet_Track));
478
cuesheet->data.cue_sheet.tracks[0].offset = 0;
479
cuesheet->data.cue_sheet.tracks[0].number = 1;
480
memcpy(cuesheet->data.cue_sheet.tracks[0].isrc, "ACBDE1234567", sizeof(cuesheet->data.cue_sheet.tracks[0].isrc));
481
cuesheet->data.cue_sheet.tracks[0].type = 0;
482
cuesheet->data.cue_sheet.tracks[0].pre_emphasis = 1;
483
cuesheet->data.cue_sheet.tracks[0].num_indices = 2;
484
cuesheet->data.cue_sheet.tracks[0].indices = (FLAC__StreamMetadata_CueSheet_Index*)malloc_or_die_(cuesheet->data.cue_sheet.tracks[0].num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index));
485
cuesheet->data.cue_sheet.tracks[0].indices[0].offset = 0;
486
cuesheet->data.cue_sheet.tracks[0].indices[0].number = 0;
487
cuesheet->data.cue_sheet.tracks[0].indices[1].offset = 123 * 588;
488
cuesheet->data.cue_sheet.tracks[0].indices[1].number = 1;
489
cuesheet->data.cue_sheet.tracks[1].offset = 1234 * 588;
490
cuesheet->data.cue_sheet.tracks[1].number = 2;
491
memcpy(cuesheet->data.cue_sheet.tracks[1].isrc, "ACBDE7654321", sizeof(cuesheet->data.cue_sheet.tracks[1].isrc));
492
cuesheet->data.cue_sheet.tracks[1].type = 1;
493
cuesheet->data.cue_sheet.tracks[1].pre_emphasis = 0;
494
cuesheet->data.cue_sheet.tracks[1].num_indices = 1;
495
cuesheet->data.cue_sheet.tracks[1].indices = (FLAC__StreamMetadata_CueSheet_Index*)malloc_or_die_(cuesheet->data.cue_sheet.tracks[1].num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index));
496
cuesheet->data.cue_sheet.tracks[1].indices[0].offset = 0;
497
cuesheet->data.cue_sheet.tracks[1].indices[0].number = 1;
498
cuesheet->data.cue_sheet.tracks[2].offset = 12345 * 588;
499
cuesheet->data.cue_sheet.tracks[2].number = 170;
500
cuesheet->data.cue_sheet.tracks[2].num_indices = 0;
502
unknown->is_last = true;
505
unknown->data.unknown.data = (FLAC__byte*)malloc_or_die_(unknown->length);
506
memcpy(unknown->data.unknown.data, "\xfe\xdc\xba\x98\xf0\xe1\xd2\xc3", unknown->length);
509
void mutils__free_metadata_blocks(
510
FLAC__StreamMetadata *streaminfo,
511
FLAC__StreamMetadata *padding,
512
FLAC__StreamMetadata *seektable,
513
FLAC__StreamMetadata *application1,
514
FLAC__StreamMetadata *application2,
515
FLAC__StreamMetadata *vorbiscomment,
516
FLAC__StreamMetadata *cuesheet,
517
FLAC__StreamMetadata *unknown
520
(void)streaminfo, (void)padding, (void)application2;
521
free(seektable->data.seek_table.points);
522
free(application1->data.application.data);
523
free(vorbiscomment->data.vorbis_comment.vendor_string.entry);
524
free(vorbiscomment->data.vorbis_comment.comments[0].entry);
525
free(vorbiscomment->data.vorbis_comment.comments);
526
free(cuesheet->data.cue_sheet.tracks[0].indices);
527
free(cuesheet->data.cue_sheet.tracks[1].indices);
528
free(cuesheet->data.cue_sheet.tracks);
529
free(unknown->data.unknown.data);