1
/* test_libOggFLAC - Unit tester for libOggFLAC
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
#include "file_utils.h"
21
#include "metadata_utils.h"
22
#include "FLAC/assert.h"
23
#include "OggFLAC/file_decoder.h"
24
#include "OggFLAC/seekable_stream_decoder.h"
25
#include "OggFLAC/stream_decoder.h"
26
#include "share/grabbag.h"
34
unsigned current_metadata_number;
35
FLAC__bool ignore_errors;
36
FLAC__bool error_occurred;
37
} stream_decoder_client_data_struct;
39
typedef stream_decoder_client_data_struct seekable_stream_decoder_client_data_struct;
40
typedef stream_decoder_client_data_struct file_decoder_client_data_struct;
42
static FLAC__StreamMetadata streaminfo_, padding_, seektable_, application1_, application2_, vorbiscomment_, cuesheet_, unknown_;
43
static FLAC__StreamMetadata *expected_metadata_sequence_[8];
44
static unsigned num_expected_;
45
static const char *oggflacfilename_ = "metadata.ogg";
46
static unsigned oggflacfilesize_;
48
static FLAC__bool die_(const char *msg)
50
printf("ERROR: %s\n", msg);
54
static FLAC__bool die_s_(const char *msg, const OggFLAC__StreamDecoder *decoder)
56
OggFLAC__StreamDecoderState state = OggFLAC__stream_decoder_get_state(decoder);
59
printf("FAILED, %s", msg);
63
printf(", state = %u (%s)\n", (unsigned)state, OggFLAC__StreamDecoderStateString[state]);
64
if(state == OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR) {
65
FLAC__StreamDecoderState state_ = OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(decoder);
66
printf(" FLAC stream decoder state = %u (%s)\n", (unsigned)state_, FLAC__StreamDecoderStateString[state_]);
72
static FLAC__bool die_ss_(const char *msg, const OggFLAC__SeekableStreamDecoder *decoder)
74
OggFLAC__SeekableStreamDecoderState state = OggFLAC__seekable_stream_decoder_get_state(decoder);
77
printf("FAILED, %s", msg);
81
printf(", state = %u (%s)\n", (unsigned)state, OggFLAC__SeekableStreamDecoderStateString[state]);
82
if(state == OggFLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR) {
83
OggFLAC__StreamDecoderState state_ = OggFLAC__seekable_stream_decoder_get_stream_decoder_state(decoder);
84
printf(" stream decoder state = %u (%s)\n", (unsigned)state_, OggFLAC__StreamDecoderStateString[state_]);
85
if(state_ == OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR) {
86
FLAC__StreamDecoderState state__ = OggFLAC__seekable_stream_decoder_get_FLAC_stream_decoder_state(decoder);
87
printf(" FLAC stream decoder state = %u (%s)\n", (unsigned)state__, FLAC__StreamDecoderStateString[state__]);
94
static FLAC__bool die_f_(const char *msg, const OggFLAC__FileDecoder *decoder)
96
OggFLAC__FileDecoderState state = OggFLAC__file_decoder_get_state(decoder);
99
printf("FAILED, %s", msg);
103
printf(", state = %u (%s)\n", (unsigned)state, OggFLAC__SeekableStreamDecoderStateString[state]);
104
if(state == OggFLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR) {
105
OggFLAC__SeekableStreamDecoderState state_ = OggFLAC__file_decoder_get_seekable_stream_decoder_state(decoder);
106
printf(" seekable stream decoder state = %u (%s)\n", (unsigned)state_, OggFLAC__SeekableStreamDecoderStateString[state_]);
107
if(state_ == OggFLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR) {
108
OggFLAC__StreamDecoderState state__ = OggFLAC__file_decoder_get_stream_decoder_state(decoder);
109
printf(" stream decoder state = %u (%s)\n", (unsigned)state__, OggFLAC__StreamDecoderStateString[state__]);
110
if(state__ == OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR) {
111
FLAC__StreamDecoderState state___ = OggFLAC__file_decoder_get_FLAC_stream_decoder_state(decoder);
112
printf(" FLAC stream decoder state = %u (%s)\n", (unsigned)state___, FLAC__StreamDecoderStateString[state___]);
120
static void init_metadata_blocks_()
122
mutils__init_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
125
static void free_metadata_blocks_()
127
mutils__free_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
130
static FLAC__bool generate_file_()
132
printf("\n\ngenerating Ogg FLAC file for decoder tests...\n");
135
expected_metadata_sequence_[num_expected_++] = &padding_;
136
expected_metadata_sequence_[num_expected_++] = &seektable_;
137
expected_metadata_sequence_[num_expected_++] = &application1_;
138
expected_metadata_sequence_[num_expected_++] = &application2_;
139
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
140
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
141
expected_metadata_sequence_[num_expected_++] = &unknown_;
142
/* WATCHOUT: the encoder should move the VORBIS_COMMENT block to the front, right after STREAMINFO */
144
if(!file_utils__generate_oggflacfile(oggflacfilename_, &oggflacfilesize_, 512 * 1024, &streaminfo_, expected_metadata_sequence_, num_expected_))
145
return die_("creating the encoded file");
150
static FLAC__StreamDecoderReadStatus stream_decoder_read_callback_(const OggFLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data)
152
stream_decoder_client_data_struct *dcd = (stream_decoder_client_data_struct*)client_data;
157
printf("ERROR: client_data in read callback is NULL\n");
158
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
161
if(dcd->error_occurred)
162
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
164
if(feof(dcd->file)) {
166
return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
168
else if(*bytes > 0) {
169
*bytes = fread(buffer, 1, *bytes, dcd->file);
172
return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
174
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
177
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
181
return FLAC__STREAM_DECODER_READ_STATUS_ABORT; /* abort to avoid a deadlock */
184
static FLAC__StreamDecoderWriteStatus stream_decoder_write_callback_(const OggFLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
186
stream_decoder_client_data_struct *dcd = (stream_decoder_client_data_struct*)client_data;
188
(void)decoder, (void)buffer;
191
printf("ERROR: client_data in write callback is NULL\n");
192
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
195
if(dcd->error_occurred)
196
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
199
(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER && frame->header.number.frame_number == 0) ||
200
(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER && frame->header.number.sample_number == 0)
202
printf("content... ");
206
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
209
static void stream_decoder_metadata_callback_(const OggFLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
211
stream_decoder_client_data_struct *dcd = (stream_decoder_client_data_struct*)client_data;
216
printf("ERROR: client_data in metadata callback is NULL\n");
220
if(dcd->error_occurred)
223
printf("%d... ", dcd->current_metadata_number);
226
if(dcd->current_metadata_number >= num_expected_) {
227
(void)die_("got more metadata blocks than expected");
228
dcd->error_occurred = true;
231
if(!mutils__compare_block(expected_metadata_sequence_[dcd->current_metadata_number], metadata)) {
232
(void)die_("metadata block mismatch");
233
dcd->error_occurred = true;
236
dcd->current_metadata_number++;
239
static void stream_decoder_error_callback_(const OggFLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
241
stream_decoder_client_data_struct *dcd = (stream_decoder_client_data_struct*)client_data;
246
printf("ERROR: client_data in error callback is NULL\n");
250
if(!dcd->ignore_errors) {
251
printf("ERROR: got error callback: err = %u (%s)\n", (unsigned)status, FLAC__StreamDecoderErrorStatusString[status]);
252
dcd->error_occurred = true;
256
static FLAC__bool stream_decoder_test_respond_(OggFLAC__StreamDecoder *decoder, stream_decoder_client_data_struct *dcd)
258
if(!OggFLAC__stream_decoder_set_read_callback(decoder, stream_decoder_read_callback_))
259
return die_s_("at OggFLAC__stream_decoder_set_read_callback(), returned false", decoder);
261
if(!OggFLAC__stream_decoder_set_write_callback(decoder, stream_decoder_write_callback_))
262
return die_s_("at OggFLAC__stream_decoder_set_write_callback(), returned false", decoder);
264
if(!OggFLAC__stream_decoder_set_metadata_callback(decoder, stream_decoder_metadata_callback_))
265
return die_s_("at OggFLAC__stream_decoder_set_metadata_callback(), returned false", decoder);
267
if(!OggFLAC__stream_decoder_set_error_callback(decoder, stream_decoder_error_callback_))
268
return die_s_("at OggFLAC__stream_decoder_set_error_callback(), returned false", decoder);
270
if(!OggFLAC__stream_decoder_set_client_data(decoder, dcd))
271
return die_s_("at OggFLAC__stream_decoder_set_client_data(), returned false", decoder);
273
printf("testing OggFLAC__stream_decoder_init()... ");
274
if(OggFLAC__stream_decoder_init(decoder) != OggFLAC__STREAM_DECODER_OK)
275
return die_s_(0, decoder);
278
dcd->current_metadata_number = 0;
280
if(fseek(dcd->file, 0, SEEK_SET) < 0) {
281
printf("FAILED rewinding input, errno = %d\n", errno);
285
printf("testing OggFLAC__stream_decoder_process_until_end_of_stream()... ");
286
if(!OggFLAC__stream_decoder_process_until_end_of_stream(decoder))
287
return die_s_("returned false", decoder);
290
printf("testing OggFLAC__stream_decoder_finish()... ");
291
OggFLAC__stream_decoder_finish(decoder);
297
static FLAC__bool test_stream_decoder()
299
OggFLAC__StreamDecoder *decoder;
300
OggFLAC__StreamDecoderState state;
301
FLAC__StreamDecoderState fstate;
302
stream_decoder_client_data_struct decoder_client_data;
304
printf("\n+++ libOggFLAC unit test: OggFLAC__StreamDecoder\n\n");
306
printf("testing OggFLAC__stream_decoder_new()... ");
307
decoder = OggFLAC__stream_decoder_new();
309
printf("FAILED, returned NULL\n");
314
printf("testing OggFLAC__stream_decoder_delete()... ");
315
OggFLAC__stream_decoder_delete(decoder);
318
printf("testing OggFLAC__stream_decoder_new()... ");
319
decoder = OggFLAC__stream_decoder_new();
321
printf("FAILED, returned NULL\n");
326
printf("testing OggFLAC__stream_decoder_init()... ");
327
if(OggFLAC__stream_decoder_init(decoder) == OggFLAC__STREAM_DECODER_OK)
328
return die_s_(0, decoder);
331
printf("testing OggFLAC__stream_decoder_delete()... ");
332
OggFLAC__stream_decoder_delete(decoder);
336
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
338
printf("testing OggFLAC__stream_decoder_new()... ");
339
decoder = OggFLAC__stream_decoder_new();
341
printf("FAILED, returned NULL\n");
346
printf("testing OggFLAC__stream_decoder_set_serial_number()... ");
347
if(!OggFLAC__stream_decoder_set_serial_number(decoder, file_utils__serial_number))
348
return die_s_("returned false", decoder);
351
printf("testing OggFLAC__stream_decoder_set_read_callback()... ");
352
if(!OggFLAC__stream_decoder_set_read_callback(decoder, stream_decoder_read_callback_))
353
return die_s_("returned false", decoder);
356
printf("testing OggFLAC__stream_decoder_set_write_callback()... ");
357
if(!OggFLAC__stream_decoder_set_write_callback(decoder, stream_decoder_write_callback_))
358
return die_s_("returned false", decoder);
361
printf("testing OggFLAC__stream_decoder_set_metadata_callback()... ");
362
if(!OggFLAC__stream_decoder_set_metadata_callback(decoder, stream_decoder_metadata_callback_))
363
return die_s_("returned false", decoder);
366
printf("testing OggFLAC__stream_decoder_set_error_callback()... ");
367
if(!OggFLAC__stream_decoder_set_error_callback(decoder, stream_decoder_error_callback_))
368
return die_s_("returned false", decoder);
371
printf("testing OggFLAC__stream_decoder_set_client_data()... ");
372
if(!OggFLAC__stream_decoder_set_client_data(decoder, &decoder_client_data))
373
return die_s_("returned false", decoder);
376
printf("testing OggFLAC__stream_decoder_init()... ");
377
if(OggFLAC__stream_decoder_init(decoder) != OggFLAC__STREAM_DECODER_OK)
378
return die_s_(0, decoder);
381
printf("testing OggFLAC__stream_decoder_get_state()... ");
382
state = OggFLAC__stream_decoder_get_state(decoder);
383
printf("returned state = %u (%s)... OK\n", state, OggFLAC__StreamDecoderStateString[state]);
385
printf("testing OggFLAC__stream_decoder_get_FLAC_stream_decoder_state()... ");
386
fstate = OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(decoder);
387
printf("returned state = %u (%s)... OK\n", fstate, FLAC__StreamDecoderStateString[fstate]);
389
decoder_client_data.current_metadata_number = 0;
390
decoder_client_data.ignore_errors = false;
391
decoder_client_data.error_occurred = false;
393
printf("opening Ogg FLAC file... ");
394
decoder_client_data.file = fopen(oggflacfilename_, "rb");
395
if(0 == decoder_client_data.file) {
401
printf("testing OggFLAC__stream_decoder_process_until_end_of_metadata()... ");
402
if(!OggFLAC__stream_decoder_process_until_end_of_metadata(decoder))
403
return die_s_("returned false", decoder);
406
printf("testing OggFLAC__stream_decoder_process_single()... ");
407
if(!OggFLAC__stream_decoder_process_single(decoder))
408
return die_s_("returned false", decoder);
411
printf("testing OggFLAC__stream_decoder_flush()... ");
412
if(!OggFLAC__stream_decoder_flush(decoder))
413
return die_s_("returned false", decoder);
416
decoder_client_data.ignore_errors = true;
417
printf("testing OggFLAC__stream_decoder_process_single()... ");
418
if(!OggFLAC__stream_decoder_process_single(decoder))
419
return die_s_("returned false", decoder);
421
decoder_client_data.ignore_errors = false;
423
printf("testing OggFLAC__stream_decoder_process_until_end_of_stream()... ");
424
if(!OggFLAC__stream_decoder_process_until_end_of_stream(decoder))
425
return die_s_("returned false", decoder);
428
printf("testing OggFLAC__stream_decoder_get_channels()... ");
430
unsigned channels = OggFLAC__stream_decoder_get_channels(decoder);
431
if(channels != streaminfo_.data.stream_info.channels) {
432
printf("FAILED, returned %u, expected %u\n", channels, streaminfo_.data.stream_info.channels);
438
printf("testing OggFLAC__stream_decoder_get_bits_per_sample()... ");
440
unsigned bits_per_sample = OggFLAC__stream_decoder_get_bits_per_sample(decoder);
441
if(bits_per_sample != streaminfo_.data.stream_info.bits_per_sample) {
442
printf("FAILED, returned %u, expected %u\n", bits_per_sample, streaminfo_.data.stream_info.bits_per_sample);
448
printf("testing OggFLAC__stream_decoder_get_sample_rate()... ");
450
unsigned sample_rate = OggFLAC__stream_decoder_get_sample_rate(decoder);
451
if(sample_rate != streaminfo_.data.stream_info.sample_rate) {
452
printf("FAILED, returned %u, expected %u\n", sample_rate, streaminfo_.data.stream_info.sample_rate);
458
printf("testing OggFLAC__stream_decoder_get_blocksize()... ");
460
unsigned blocksize = OggFLAC__stream_decoder_get_blocksize(decoder);
461
/* value could be anything since we're at the last block, so accept any answer */
462
printf("returned %u... OK\n", blocksize);
465
printf("testing OggFLAC__stream_decoder_get_channel_assignment()... ");
467
FLAC__ChannelAssignment ca = OggFLAC__stream_decoder_get_channel_assignment(decoder);
468
printf("returned %u (%s)... OK\n", (unsigned)ca, FLAC__ChannelAssignmentString[ca]);
471
printf("testing OggFLAC__stream_decoder_reset()... ");
472
if(!OggFLAC__stream_decoder_reset(decoder)) {
473
state = OggFLAC__stream_decoder_get_state(decoder);
474
printf("FAILED, returned false, state = %u (%s)\n", state, FLAC__StreamDecoderStateString[state]);
479
decoder_client_data.current_metadata_number = 0;
481
printf("rewinding input... ");
482
if(fseek(decoder_client_data.file, 0, SEEK_SET) < 0) {
483
printf("FAILED, errno = %d\n", errno);
488
printf("testing OggFLAC__stream_decoder_process_until_end_of_stream()... ");
489
if(!OggFLAC__stream_decoder_process_until_end_of_stream(decoder))
490
return die_s_("returned false", decoder);
493
printf("testing OggFLAC__stream_decoder_finish()... ");
494
OggFLAC__stream_decoder_finish(decoder);
501
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
502
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
503
return die_s_("returned false", decoder);
507
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
508
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
509
expected_metadata_sequence_[num_expected_++] = &padding_;
510
expected_metadata_sequence_[num_expected_++] = &seektable_;
511
expected_metadata_sequence_[num_expected_++] = &application1_;
512
expected_metadata_sequence_[num_expected_++] = &application2_;
513
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
514
expected_metadata_sequence_[num_expected_++] = &unknown_;
516
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
523
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
524
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
525
return die_s_("returned false", decoder);
530
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
534
* respond all, ignore VORBIS_COMMENT
537
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
538
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
539
return die_s_("returned false", decoder);
542
printf("testing OggFLAC__stream_decoder_set_metadata_ignore(VORBIS_COMMENT)... ");
543
if(!OggFLAC__stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
544
return die_s_("returned false", decoder);
548
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
549
expected_metadata_sequence_[num_expected_++] = &padding_;
550
expected_metadata_sequence_[num_expected_++] = &seektable_;
551
expected_metadata_sequence_[num_expected_++] = &application1_;
552
expected_metadata_sequence_[num_expected_++] = &application2_;
553
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
554
expected_metadata_sequence_[num_expected_++] = &unknown_;
556
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
560
* respond all, ignore APPLICATION
563
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
564
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
565
return die_s_("returned false", decoder);
568
printf("testing OggFLAC__stream_decoder_set_metadata_ignore(APPLICATION)... ");
569
if(!OggFLAC__stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
570
return die_s_("returned false", decoder);
574
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
575
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
576
expected_metadata_sequence_[num_expected_++] = &padding_;
577
expected_metadata_sequence_[num_expected_++] = &seektable_;
578
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
579
expected_metadata_sequence_[num_expected_++] = &unknown_;
581
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
585
* respond all, ignore APPLICATION id of app#1
588
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
589
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
590
return die_s_("returned false", decoder);
593
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_application(of app block #1)... ");
594
if(!OggFLAC__stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
595
return die_s_("returned false", decoder);
599
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
600
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
601
expected_metadata_sequence_[num_expected_++] = &padding_;
602
expected_metadata_sequence_[num_expected_++] = &seektable_;
603
expected_metadata_sequence_[num_expected_++] = &application2_;
604
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
605
expected_metadata_sequence_[num_expected_++] = &unknown_;
607
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
611
* respond all, ignore APPLICATION id of app#1 & app#2
614
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
615
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
616
return die_s_("returned false", decoder);
619
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_application(of app block #1)... ");
620
if(!OggFLAC__stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
621
return die_s_("returned false", decoder);
624
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_application(of app block #2)... ");
625
if(!OggFLAC__stream_decoder_set_metadata_ignore_application(decoder, application2_.data.application.id))
626
return die_s_("returned false", decoder);
630
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
631
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
632
expected_metadata_sequence_[num_expected_++] = &padding_;
633
expected_metadata_sequence_[num_expected_++] = &seektable_;
634
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
635
expected_metadata_sequence_[num_expected_++] = &unknown_;
637
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
641
* ignore all, respond VORBIS_COMMENT
644
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
645
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
646
return die_s_("returned false", decoder);
649
printf("testing OggFLAC__stream_decoder_set_metadata_respond(VORBIS_COMMENT)... ");
650
if(!OggFLAC__stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
651
return die_s_("returned false", decoder);
655
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
657
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
661
* ignore all, respond APPLICATION
664
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
665
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
666
return die_s_("returned false", decoder);
669
printf("testing OggFLAC__stream_decoder_set_metadata_respond(APPLICATION)... ");
670
if(!OggFLAC__stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
671
return die_s_("returned false", decoder);
675
expected_metadata_sequence_[num_expected_++] = &application1_;
676
expected_metadata_sequence_[num_expected_++] = &application2_;
678
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
682
* ignore all, respond APPLICATION id of app#1
685
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
686
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
687
return die_s_("returned false", decoder);
690
printf("testing OggFLAC__stream_decoder_set_metadata_respond_application(of app block #1)... ");
691
if(!OggFLAC__stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
692
return die_s_("returned false", decoder);
696
expected_metadata_sequence_[num_expected_++] = &application1_;
698
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
702
* ignore all, respond APPLICATION id of app#1 & app#2
705
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
706
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
707
return die_s_("returned false", decoder);
710
printf("testing OggFLAC__stream_decoder_set_metadata_respond_application(of app block #1)... ");
711
if(!OggFLAC__stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
712
return die_s_("returned false", decoder);
715
printf("testing OggFLAC__stream_decoder_set_metadata_respond_application(of app block #2)... ");
716
if(!OggFLAC__stream_decoder_set_metadata_respond_application(decoder, application2_.data.application.id))
717
return die_s_("returned false", decoder);
721
expected_metadata_sequence_[num_expected_++] = &application1_;
722
expected_metadata_sequence_[num_expected_++] = &application2_;
724
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
728
* respond all, ignore APPLICATION, respond APPLICATION id of app#1
731
printf("testing OggFLAC__stream_decoder_set_metadata_respond_all()... ");
732
if(!OggFLAC__stream_decoder_set_metadata_respond_all(decoder))
733
return die_s_("returned false", decoder);
736
printf("testing OggFLAC__stream_decoder_set_metadata_ignore(APPLICATION)... ");
737
if(!OggFLAC__stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
738
return die_s_("returned false", decoder);
741
printf("testing OggFLAC__stream_decoder_set_metadata_respond_application(of app block #1)... ");
742
if(!OggFLAC__stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
743
return die_s_("returned false", decoder);
747
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
748
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
749
expected_metadata_sequence_[num_expected_++] = &padding_;
750
expected_metadata_sequence_[num_expected_++] = &seektable_;
751
expected_metadata_sequence_[num_expected_++] = &application1_;
752
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
753
expected_metadata_sequence_[num_expected_++] = &unknown_;
755
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
759
* ignore all, respond APPLICATION, ignore APPLICATION id of app#1
762
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_all()... ");
763
if(!OggFLAC__stream_decoder_set_metadata_ignore_all(decoder))
764
return die_s_("returned false", decoder);
767
printf("testing OggFLAC__stream_decoder_set_metadata_respond(APPLICATION)... ");
768
if(!OggFLAC__stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
769
return die_s_("returned false", decoder);
772
printf("testing OggFLAC__stream_decoder_set_metadata_ignore_application(of app block #1)... ");
773
if(!OggFLAC__stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
774
return die_s_("returned false", decoder);
778
expected_metadata_sequence_[num_expected_++] = &application2_;
780
if(!stream_decoder_test_respond_(decoder, &decoder_client_data))
783
/* done, now leave the sequence the way we found it... */
785
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
786
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
787
expected_metadata_sequence_[num_expected_++] = &padding_;
788
expected_metadata_sequence_[num_expected_++] = &seektable_;
789
expected_metadata_sequence_[num_expected_++] = &application1_;
790
expected_metadata_sequence_[num_expected_++] = &application2_;
791
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
792
expected_metadata_sequence_[num_expected_++] = &unknown_;
794
printf("testing OggFLAC__stream_decoder_delete()... ");
795
OggFLAC__stream_decoder_delete(decoder);
798
fclose(decoder_client_data.file);
800
printf("\nPASSED!\n");
805
static OggFLAC__SeekableStreamDecoderReadStatus seekable_stream_decoder_read_callback_(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data)
808
switch(stream_decoder_read_callback_(0, buffer, bytes, client_data)) {
809
case FLAC__STREAM_DECODER_READ_STATUS_CONTINUE:
810
case FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM:
811
return OggFLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK;
812
case FLAC__STREAM_DECODER_READ_STATUS_ABORT:
813
return OggFLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR;
816
return OggFLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR;
820
static OggFLAC__SeekableStreamDecoderSeekStatus seekable_stream_decoder_seek_callback_(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
822
seekable_stream_decoder_client_data_struct *dcd = (seekable_stream_decoder_client_data_struct*)client_data;
827
printf("ERROR: client_data in seek callback is NULL\n");
828
return OggFLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
831
if(dcd->error_occurred)
832
return OggFLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
834
if(fseek(dcd->file, (long)absolute_byte_offset, SEEK_SET) < 0) {
835
dcd->error_occurred = true;
836
return OggFLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
839
return OggFLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK;
842
static OggFLAC__SeekableStreamDecoderTellStatus seekable_stream_decoder_tell_callback_(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
844
seekable_stream_decoder_client_data_struct *dcd = (seekable_stream_decoder_client_data_struct*)client_data;
850
printf("ERROR: client_data in tell callback is NULL\n");
851
return OggFLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR;
854
if(dcd->error_occurred)
855
return OggFLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR;
857
offset = ftell(dcd->file);
858
*absolute_byte_offset = (FLAC__uint64)offset;
861
dcd->error_occurred = true;
862
return OggFLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR;
865
return OggFLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK;
868
static OggFLAC__SeekableStreamDecoderLengthStatus seekable_stream_decoder_length_callback_(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
870
seekable_stream_decoder_client_data_struct *dcd = (seekable_stream_decoder_client_data_struct*)client_data;
875
printf("ERROR: client_data in length callback is NULL\n");
876
return OggFLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR;
879
if(dcd->error_occurred)
880
return OggFLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR;
882
*stream_length = (FLAC__uint64)oggflacfilesize_;
883
return OggFLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK;
886
static FLAC__bool seekable_stream_decoder_eof_callback_(const OggFLAC__SeekableStreamDecoder *decoder, void *client_data)
888
seekable_stream_decoder_client_data_struct *dcd = (seekable_stream_decoder_client_data_struct*)client_data;
893
printf("ERROR: client_data in eof callback is NULL\n");
897
if(dcd->error_occurred)
900
return feof(dcd->file);
903
static FLAC__StreamDecoderWriteStatus seekable_stream_decoder_write_callback_(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
906
return stream_decoder_write_callback_(0, frame, buffer, client_data);
909
static void seekable_stream_decoder_metadata_callback_(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
912
stream_decoder_metadata_callback_(0, metadata, client_data);
915
static void seekable_stream_decoder_error_callback_(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
918
stream_decoder_error_callback_(0, status, client_data);
921
static FLAC__bool seekable_stream_decoder_test_respond_(OggFLAC__SeekableStreamDecoder *decoder, seekable_stream_decoder_client_data_struct *dcd)
923
if(!OggFLAC__seekable_stream_decoder_set_read_callback(decoder, seekable_stream_decoder_read_callback_))
924
return die_ss_("at OggFLAC__seekable_stream_decoder_set_read_callback(), returned false", decoder);
926
if(!OggFLAC__seekable_stream_decoder_set_seek_callback(decoder, seekable_stream_decoder_seek_callback_))
927
return die_ss_("at OggFLAC__seekable_stream_decoder_set_seek_callback(), returned false", decoder);
929
if(!OggFLAC__seekable_stream_decoder_set_tell_callback(decoder, seekable_stream_decoder_tell_callback_))
930
return die_ss_("at OggFLAC__seekable_stream_decoder_set_tell_callback(), returned false", decoder);
932
if(!OggFLAC__seekable_stream_decoder_set_length_callback(decoder, seekable_stream_decoder_length_callback_))
933
return die_ss_("at OggFLAC__seekable_stream_decoder_set_length_callback(), returned false", decoder);
935
if(!OggFLAC__seekable_stream_decoder_set_eof_callback(decoder, seekable_stream_decoder_eof_callback_))
936
return die_ss_("at OggFLAC__seekable_stream_decoder_set_eof_callback(), returned false", decoder);
938
if(!OggFLAC__seekable_stream_decoder_set_write_callback(decoder, seekable_stream_decoder_write_callback_))
939
return die_ss_("at OggFLAC__seekable_stream_decoder_set_write_callback(), returned false", decoder);
941
if(!OggFLAC__seekable_stream_decoder_set_metadata_callback(decoder, seekable_stream_decoder_metadata_callback_))
942
return die_ss_("at OggFLAC__seekable_stream_decoder_set_metadata_callback(), returned false", decoder);
944
if(!OggFLAC__seekable_stream_decoder_set_error_callback(decoder, seekable_stream_decoder_error_callback_))
945
return die_ss_("at OggFLAC__seekable_stream_decoder_set_error_callback(), returned false", decoder);
947
if(!OggFLAC__seekable_stream_decoder_set_client_data(decoder, dcd))
948
return die_ss_("at OggFLAC__seekable_stream_decoder_set_client_data(), returned false", decoder);
950
if(!OggFLAC__seekable_stream_decoder_set_md5_checking(decoder, true))
951
return die_ss_("at OggFLAC__seekable_stream_decoder_set_md5_checking(), returned false", decoder);
953
printf("testing OggFLAC__seekable_stream_decoder_init()... ");
954
if(OggFLAC__seekable_stream_decoder_init(decoder) != OggFLAC__SEEKABLE_STREAM_DECODER_OK)
955
return die_ss_(0, decoder);
958
dcd->current_metadata_number = 0;
960
if(fseek(dcd->file, 0, SEEK_SET) < 0) {
961
printf("FAILED rewinding input, errno = %d\n", errno);
965
printf("testing OggFLAC__seekable_stream_decoder_process_until_end_of_stream()... ");
966
if(!OggFLAC__seekable_stream_decoder_process_until_end_of_stream(decoder))
967
return die_ss_("returned false", decoder);
970
printf("testing OggFLAC__seekable_stream_decoder_finish()... ");
971
(void) OggFLAC__seekable_stream_decoder_finish(decoder);
977
static FLAC__bool test_seekable_stream_decoder()
979
OggFLAC__SeekableStreamDecoder *decoder;
980
OggFLAC__SeekableStreamDecoderState state;
981
OggFLAC__StreamDecoderState sstate;
982
FLAC__StreamDecoderState fstate;
983
seekable_stream_decoder_client_data_struct decoder_client_data;
985
printf("\n+++ libOggFLAC unit test: OggFLAC__SeekableStreamDecoder\n\n");
987
printf("testing OggFLAC__seekable_stream_decoder_new()... ");
988
decoder = OggFLAC__seekable_stream_decoder_new();
990
printf("FAILED, returned NULL\n");
995
printf("testing OggFLAC__seekable_stream_decoder_delete()... ");
996
OggFLAC__seekable_stream_decoder_delete(decoder);
999
printf("testing OggFLAC__seekable_stream_decoder_new()... ");
1000
decoder = OggFLAC__seekable_stream_decoder_new();
1002
printf("FAILED, returned NULL\n");
1007
printf("testing OggFLAC__seekable_stream_decoder_init()... ");
1008
if(OggFLAC__seekable_stream_decoder_init(decoder) == OggFLAC__SEEKABLE_STREAM_DECODER_OK)
1009
return die_ss_(0, decoder);
1012
printf("testing OggFLAC__seekable_stream_decoder_delete()... ");
1013
OggFLAC__seekable_stream_decoder_delete(decoder);
1017
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1019
printf("testing OggFLAC__seekable_stream_decoder_new()... ");
1020
decoder = OggFLAC__seekable_stream_decoder_new();
1022
printf("FAILED, returned NULL\n");
1027
printf("testing OggFLAC__seekable_stream_decoder_set_serial_number()... ");
1028
if(!OggFLAC__seekable_stream_decoder_set_serial_number(decoder, file_utils__serial_number))
1029
return die_ss_("returned false", decoder);
1032
printf("testing OggFLAC__seekable_stream_decoder_set_read_callback()... ");
1033
if(!OggFLAC__seekable_stream_decoder_set_read_callback(decoder, seekable_stream_decoder_read_callback_))
1034
return die_ss_("returned false", decoder);
1037
printf("testing OggFLAC__seekable_stream_decoder_set_seek_callback()... ");
1038
if(!OggFLAC__seekable_stream_decoder_set_seek_callback(decoder, seekable_stream_decoder_seek_callback_))
1039
return die_ss_("returned false", decoder);
1042
printf("testing OggFLAC__seekable_stream_decoder_set_tell_callback()... ");
1043
if(!OggFLAC__seekable_stream_decoder_set_tell_callback(decoder, seekable_stream_decoder_tell_callback_))
1044
return die_ss_("returned false", decoder);
1047
printf("testing OggFLAC__seekable_stream_decoder_set_length_callback()... ");
1048
if(!OggFLAC__seekable_stream_decoder_set_length_callback(decoder, seekable_stream_decoder_length_callback_))
1049
return die_ss_("returned false", decoder);
1052
printf("testing OggFLAC__seekable_stream_decoder_set_eof_callback()... ");
1053
if(!OggFLAC__seekable_stream_decoder_set_eof_callback(decoder, seekable_stream_decoder_eof_callback_))
1054
return die_ss_("returned false", decoder);
1057
printf("testing OggFLAC__seekable_stream_decoder_set_write_callback()... ");
1058
if(!OggFLAC__seekable_stream_decoder_set_write_callback(decoder, seekable_stream_decoder_write_callback_))
1059
return die_ss_("returned false", decoder);
1062
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_callback()... ");
1063
if(!OggFLAC__seekable_stream_decoder_set_metadata_callback(decoder, seekable_stream_decoder_metadata_callback_))
1064
return die_ss_("returned false", decoder);
1067
printf("testing OggFLAC__seekable_stream_decoder_set_error_callback()... ");
1068
if(!OggFLAC__seekable_stream_decoder_set_error_callback(decoder, seekable_stream_decoder_error_callback_))
1069
return die_ss_("returned false", decoder);
1072
printf("testing OggFLAC__seekable_stream_decoder_set_client_data()... ");
1073
if(!OggFLAC__seekable_stream_decoder_set_client_data(decoder, &decoder_client_data))
1074
return die_ss_("returned false", decoder);
1077
printf("testing OggFLAC__seekable_stream_decoder_set_md5_checking()... ");
1078
if(!OggFLAC__seekable_stream_decoder_set_md5_checking(decoder, true))
1079
return die_ss_("returned false", decoder);
1082
printf("testing OggFLAC__seekable_stream_decoder_init()... ");
1083
if(OggFLAC__seekable_stream_decoder_init(decoder) != OggFLAC__SEEKABLE_STREAM_DECODER_OK)
1084
return die_ss_(0, decoder);
1087
printf("testing OggFLAC__seekable_stream_decoder_get_state()... ");
1088
state = OggFLAC__seekable_stream_decoder_get_state(decoder);
1089
printf("returned state = %u (%s)... OK\n", state, OggFLAC__SeekableStreamDecoderStateString[state]);
1091
printf("testing OggFLAC__seekable_stream_decoder_get_stream_decoder_state()... ");
1092
sstate = OggFLAC__seekable_stream_decoder_get_stream_decoder_state(decoder);
1093
printf("returned state = %u (%s)... OK\n", sstate, OggFLAC__StreamDecoderStateString[sstate]);
1095
printf("testing OggFLAC__seekable_stream_decoder_get_FLAC_stream_decoder_state()... ");
1096
fstate = OggFLAC__seekable_stream_decoder_get_FLAC_stream_decoder_state(decoder);
1097
printf("returned state = %u (%s)... OK\n", fstate, FLAC__StreamDecoderStateString[fstate]);
1099
decoder_client_data.current_metadata_number = 0;
1100
decoder_client_data.ignore_errors = false;
1101
decoder_client_data.error_occurred = false;
1103
printf("opening Ogg FLAC file... ");
1104
decoder_client_data.file = fopen(oggflacfilename_, "rb");
1105
if(0 == decoder_client_data.file) {
1111
printf("testing OggFLAC__seekable_stream_decoder_get_md5_checking()... ");
1112
if(!OggFLAC__seekable_stream_decoder_get_md5_checking(decoder)) {
1113
printf("FAILED, returned false, expected true\n");
1118
printf("testing OggFLAC__seekable_stream_decoder_process_until_end_of_metadata()... ");
1119
if(!OggFLAC__seekable_stream_decoder_process_until_end_of_metadata(decoder))
1120
return die_ss_("returned false", decoder);
1123
printf("testing OggFLAC__seekable_stream_decoder_process_single()... ");
1124
if(!OggFLAC__seekable_stream_decoder_process_single(decoder))
1125
return die_ss_("returned false", decoder);
1128
printf("testing OggFLAC__seekable_stream_decoder_flush()... ");
1129
if(!OggFLAC__seekable_stream_decoder_flush(decoder))
1130
return die_ss_("returned false", decoder);
1133
decoder_client_data.ignore_errors = true;
1134
printf("testing OggFLAC__seekable_stream_decoder_process_single()... ");
1135
if(!OggFLAC__seekable_stream_decoder_process_single(decoder))
1136
return die_ss_("returned false", decoder);
1138
decoder_client_data.ignore_errors = false;
1140
printf("testing OggFLAC__seekable_stream_decoder_seek_absolute()... ");
1141
if(!OggFLAC__seekable_stream_decoder_seek_absolute(decoder, 0))
1142
return die_ss_("returned false", decoder);
1145
printf("testing OggFLAC__seekable_stream_decoder_process_until_end_of_stream()... ");
1146
if(!OggFLAC__seekable_stream_decoder_process_until_end_of_stream(decoder))
1147
return die_ss_("returned false", decoder);
1150
printf("testing OggFLAC__seekable_stream_decoder_get_channels()... ");
1152
unsigned channels = OggFLAC__seekable_stream_decoder_get_channels(decoder);
1153
if(channels != streaminfo_.data.stream_info.channels) {
1154
printf("FAILED, returned %u, expected %u\n", channels, streaminfo_.data.stream_info.channels);
1160
printf("testing OggFLAC__seekable_stream_decoder_get_bits_per_sample()... ");
1162
unsigned bits_per_sample = OggFLAC__seekable_stream_decoder_get_bits_per_sample(decoder);
1163
if(bits_per_sample != streaminfo_.data.stream_info.bits_per_sample) {
1164
printf("FAILED, returned %u, expected %u\n", bits_per_sample, streaminfo_.data.stream_info.bits_per_sample);
1170
printf("testing OggFLAC__seekable_stream_decoder_get_sample_rate()... ");
1172
unsigned sample_rate = OggFLAC__seekable_stream_decoder_get_sample_rate(decoder);
1173
if(sample_rate != streaminfo_.data.stream_info.sample_rate) {
1174
printf("FAILED, returned %u, expected %u\n", sample_rate, streaminfo_.data.stream_info.sample_rate);
1180
printf("testing OggFLAC__seekable_stream_decoder_get_blocksize()... ");
1182
unsigned blocksize = OggFLAC__seekable_stream_decoder_get_blocksize(decoder);
1183
/* value could be anything since we're at the last block, so accept any answer */
1184
printf("returned %u... OK\n", blocksize);
1187
printf("testing OggFLAC__seekable_stream_decoder_get_channel_assignment()... ");
1189
FLAC__ChannelAssignment ca = OggFLAC__seekable_stream_decoder_get_channel_assignment(decoder);
1190
printf("returned %u (%s)... OK\n", (unsigned)ca, FLAC__ChannelAssignmentString[ca]);
1193
printf("testing OggFLAC__seekable_stream_decoder_reset()... ");
1194
if(!OggFLAC__seekable_stream_decoder_reset(decoder))
1195
return die_ss_("returned false", decoder);
1198
decoder_client_data.current_metadata_number = 0;
1200
printf("rewinding input... ");
1201
if(fseek(decoder_client_data.file, 0, SEEK_SET) < 0) {
1202
printf("FAILED, errno = %d\n", errno);
1207
printf("testing OggFLAC__seekable_stream_decoder_process_until_end_of_stream()... ");
1208
if(!OggFLAC__seekable_stream_decoder_process_until_end_of_stream(decoder))
1209
return die_ss_("returned false", decoder);
1212
printf("testing OggFLAC__seekable_stream_decoder_finish()... ");
1213
(void) OggFLAC__seekable_stream_decoder_finish(decoder);
1220
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1221
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1222
return die_ss_("returned false", decoder);
1226
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1227
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1228
expected_metadata_sequence_[num_expected_++] = &padding_;
1229
expected_metadata_sequence_[num_expected_++] = &seektable_;
1230
expected_metadata_sequence_[num_expected_++] = &application1_;
1231
expected_metadata_sequence_[num_expected_++] = &application2_;
1232
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1233
expected_metadata_sequence_[num_expected_++] = &unknown_;
1235
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1242
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1243
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1244
return die_ss_("returned false", decoder);
1249
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1253
* respond all, ignore VORBIS_COMMENT
1256
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1257
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1258
return die_ss_("returned false", decoder);
1261
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore(VORBIS_COMMENT)... ");
1262
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
1263
return die_ss_("returned false", decoder);
1267
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1268
expected_metadata_sequence_[num_expected_++] = &padding_;
1269
expected_metadata_sequence_[num_expected_++] = &seektable_;
1270
expected_metadata_sequence_[num_expected_++] = &application1_;
1271
expected_metadata_sequence_[num_expected_++] = &application2_;
1272
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1273
expected_metadata_sequence_[num_expected_++] = &unknown_;
1275
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1279
* respond all, ignore APPLICATION
1282
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1283
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1284
return die_ss_("returned false", decoder);
1287
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore(APPLICATION)... ");
1288
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
1289
return die_ss_("returned false", decoder);
1293
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1294
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1295
expected_metadata_sequence_[num_expected_++] = &padding_;
1296
expected_metadata_sequence_[num_expected_++] = &seektable_;
1297
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1298
expected_metadata_sequence_[num_expected_++] = &unknown_;
1300
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1304
* respond all, ignore APPLICATION id of app#1
1307
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1308
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1309
return die_ss_("returned false", decoder);
1312
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(of app block #1)... ");
1313
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
1314
return die_ss_("returned false", decoder);
1318
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1319
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1320
expected_metadata_sequence_[num_expected_++] = &padding_;
1321
expected_metadata_sequence_[num_expected_++] = &seektable_;
1322
expected_metadata_sequence_[num_expected_++] = &application2_;
1323
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1324
expected_metadata_sequence_[num_expected_++] = &unknown_;
1326
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1330
* respond all, ignore APPLICATION id of app#1 & app#2
1333
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1334
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1335
return die_ss_("returned false", decoder);
1338
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(of app block #1)... ");
1339
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
1340
return die_ss_("returned false", decoder);
1343
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(of app block #2)... ");
1344
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(decoder, application2_.data.application.id))
1345
return die_ss_("returned false", decoder);
1349
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1350
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1351
expected_metadata_sequence_[num_expected_++] = &padding_;
1352
expected_metadata_sequence_[num_expected_++] = &seektable_;
1353
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1354
expected_metadata_sequence_[num_expected_++] = &unknown_;
1356
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1360
* ignore all, respond VORBIS_COMMENT
1363
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1364
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1365
return die_ss_("returned false", decoder);
1368
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond(VORBIS_COMMENT)... ");
1369
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
1370
return die_ss_("returned false", decoder);
1374
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1376
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1380
* ignore all, respond APPLICATION
1383
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1384
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1385
return die_ss_("returned false", decoder);
1388
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond(APPLICATION)... ");
1389
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
1390
return die_ss_("returned false", decoder);
1394
expected_metadata_sequence_[num_expected_++] = &application1_;
1395
expected_metadata_sequence_[num_expected_++] = &application2_;
1397
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1401
* ignore all, respond APPLICATION id of app#1
1404
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1405
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1406
return die_ss_("returned false", decoder);
1409
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_application(of app block #1)... ");
1410
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
1411
return die_ss_("returned false", decoder);
1415
expected_metadata_sequence_[num_expected_++] = &application1_;
1417
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1421
* ignore all, respond APPLICATION id of app#1 & app#2
1424
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1425
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1426
return die_ss_("returned false", decoder);
1429
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_application(of app block #1)... ");
1430
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
1431
return die_ss_("returned false", decoder);
1434
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_application(of app block #2)... ");
1435
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_application(decoder, application2_.data.application.id))
1436
return die_ss_("returned false", decoder);
1440
expected_metadata_sequence_[num_expected_++] = &application1_;
1441
expected_metadata_sequence_[num_expected_++] = &application2_;
1443
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1447
* respond all, ignore APPLICATION, respond APPLICATION id of app#1
1450
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_all()... ");
1451
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_all(decoder))
1452
return die_ss_("returned false", decoder);
1455
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore(APPLICATION)... ");
1456
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
1457
return die_ss_("returned false", decoder);
1460
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond_application(of app block #1)... ");
1461
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
1462
return die_ss_("returned false", decoder);
1466
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1467
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1468
expected_metadata_sequence_[num_expected_++] = &padding_;
1469
expected_metadata_sequence_[num_expected_++] = &seektable_;
1470
expected_metadata_sequence_[num_expected_++] = &application1_;
1471
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1472
expected_metadata_sequence_[num_expected_++] = &unknown_;
1474
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1478
* ignore all, respond APPLICATION, ignore APPLICATION id of app#1
1481
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_all()... ");
1482
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(decoder))
1483
return die_ss_("returned false", decoder);
1486
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_respond(APPLICATION)... ");
1487
if(!OggFLAC__seekable_stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
1488
return die_ss_("returned false", decoder);
1491
printf("testing OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(of app block #1)... ");
1492
if(!OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
1493
return die_ss_("returned false", decoder);
1497
expected_metadata_sequence_[num_expected_++] = &application2_;
1499
if(!seekable_stream_decoder_test_respond_(decoder, &decoder_client_data))
1502
/* done, now leave the sequence the way we found it... */
1504
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1505
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1506
expected_metadata_sequence_[num_expected_++] = &padding_;
1507
expected_metadata_sequence_[num_expected_++] = &seektable_;
1508
expected_metadata_sequence_[num_expected_++] = &application1_;
1509
expected_metadata_sequence_[num_expected_++] = &application2_;
1510
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1511
expected_metadata_sequence_[num_expected_++] = &unknown_;
1513
printf("testing OggFLAC__seekable_stream_decoder_delete()... ");
1514
OggFLAC__seekable_stream_decoder_delete(decoder);
1517
fclose(decoder_client_data.file);
1519
printf("\nPASSED!\n");
1524
static FLAC__StreamDecoderWriteStatus file_decoder_write_callback_(const OggFLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
1527
return stream_decoder_write_callback_(0, frame, buffer, client_data);
1530
static void file_decoder_metadata_callback_(const OggFLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
1533
stream_decoder_metadata_callback_(0, metadata, client_data);
1536
static void file_decoder_error_callback_(const OggFLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
1539
stream_decoder_error_callback_(0, status, client_data);
1542
static FLAC__bool file_decoder_test_respond_(OggFLAC__FileDecoder *decoder, file_decoder_client_data_struct *dcd)
1544
if(!OggFLAC__file_decoder_set_write_callback(decoder, file_decoder_write_callback_))
1545
return die_f_("at OggFLAC__file_decoder_set_write_callback(), returned false", decoder);
1547
if(!OggFLAC__file_decoder_set_metadata_callback(decoder, file_decoder_metadata_callback_))
1548
return die_f_("at OggFLAC__file_decoder_set_metadata_callback(), returned false", decoder);
1550
if(!OggFLAC__file_decoder_set_error_callback(decoder, file_decoder_error_callback_))
1551
return die_f_("at OggFLAC__file_decoder_set_error_callback(), returned false", decoder);
1553
if(!OggFLAC__file_decoder_set_client_data(decoder, dcd))
1554
return die_f_("at OggFLAC__file_decoder_set_client_data(), returned false", decoder);
1556
if(!OggFLAC__file_decoder_set_filename(decoder, oggflacfilename_))
1557
return die_f_("at OggFLAC__file_decoder_set_filename(), returned false", decoder);
1559
if(!OggFLAC__file_decoder_set_md5_checking(decoder, true))
1560
return die_f_("at OggFLAC__file_decoder_set_md5_checking(), returned false", decoder);
1562
printf("testing OggFLAC__file_decoder_init()... ");
1563
if(OggFLAC__file_decoder_init(decoder) != OggFLAC__FILE_DECODER_OK)
1564
return die_f_(0, decoder);
1567
dcd->current_metadata_number = 0;
1569
printf("testing OggFLAC__file_decoder_process_until_end_of_file()... ");
1570
if(!OggFLAC__file_decoder_process_until_end_of_file(decoder))
1571
return die_f_("returned false", decoder);
1574
printf("testing OggFLAC__file_decoder_finish()... ");
1575
(void) OggFLAC__file_decoder_finish(decoder);
1581
static FLAC__bool test_file_decoder()
1583
OggFLAC__FileDecoder *decoder;
1584
OggFLAC__FileDecoderState state;
1585
OggFLAC__SeekableStreamDecoderState ssstate;
1586
OggFLAC__StreamDecoderState sstate;
1587
FLAC__StreamDecoderState fstate;
1588
seekable_stream_decoder_client_data_struct decoder_client_data;
1590
printf("\n+++ libOggFLAC unit test: OggFLAC__FileDecoder\n\n");
1592
printf("testing OggFLAC__file_decoder_new()... ");
1593
decoder = OggFLAC__file_decoder_new();
1595
printf("FAILED, returned NULL\n");
1600
printf("testing OggFLAC__file_decoder_delete()... ");
1601
OggFLAC__file_decoder_delete(decoder);
1604
printf("testing OggFLAC__file_decoder_new()... ");
1605
decoder = OggFLAC__file_decoder_new();
1607
printf("FAILED, returned NULL\n");
1612
printf("testing OggFLAC__file_decoder_init()... ");
1613
if(OggFLAC__file_decoder_init(decoder) == OggFLAC__FILE_DECODER_OK)
1614
return die_f_(0, decoder);
1617
printf("testing OggFLAC__file_decoder_delete()... ");
1618
OggFLAC__file_decoder_delete(decoder);
1622
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1624
printf("testing OggFLAC__file_decoder_new()... ");
1625
decoder = OggFLAC__file_decoder_new();
1627
printf("FAILED, returned NULL\n");
1632
printf("testing OggFLAC__file_decoder_set_serial_number()... ");
1633
if(!OggFLAC__file_decoder_set_serial_number(decoder, file_utils__serial_number))
1634
return die_f_("returned false", decoder);
1637
printf("testing OggFLAC__file_decoder_set_write_callback()... ");
1638
if(!OggFLAC__file_decoder_set_write_callback(decoder, file_decoder_write_callback_))
1639
return die_f_("returned false", decoder);
1642
printf("testing OggFLAC__file_decoder_set_metadata_callback()... ");
1643
if(!OggFLAC__file_decoder_set_metadata_callback(decoder, file_decoder_metadata_callback_))
1644
return die_f_("returned false", decoder);
1647
printf("testing OggFLAC__file_decoder_set_error_callback()... ");
1648
if(!OggFLAC__file_decoder_set_error_callback(decoder, file_decoder_error_callback_))
1649
return die_f_("returned false", decoder);
1652
printf("testing OggFLAC__file_decoder_set_client_data()... ");
1653
if(!OggFLAC__file_decoder_set_client_data(decoder, &decoder_client_data))
1654
return die_f_("returned false", decoder);
1657
printf("testing OggFLAC__file_decoder_set_filename()... ");
1658
if(!OggFLAC__file_decoder_set_filename(decoder, oggflacfilename_))
1659
return die_f_("returned false", decoder);
1662
printf("testing OggFLAC__file_decoder_set_md5_checking()... ");
1663
if(!OggFLAC__file_decoder_set_md5_checking(decoder, true))
1664
return die_f_("returned false", decoder);
1667
printf("testing OggFLAC__file_decoder_init()... ");
1668
if(OggFLAC__file_decoder_init(decoder) != OggFLAC__FILE_DECODER_OK)
1669
return die_f_(0, decoder);
1672
printf("testing OggFLAC__file_decoder_get_state()... ");
1673
state = OggFLAC__file_decoder_get_state(decoder);
1674
printf("returned state = %u (%s)... OK\n", state, OggFLAC__FileDecoderStateString[state]);
1676
printf("testing OggFLAC__file_decoder_get_seekable_stream_decoder_state()... ");
1677
ssstate = OggFLAC__file_decoder_get_seekable_stream_decoder_state(decoder);
1678
printf("returned state = %u (%s)... OK\n", ssstate, OggFLAC__SeekableStreamDecoderStateString[ssstate]);
1680
printf("testing OggFLAC__file_decoder_get_stream_decoder_state()... ");
1681
sstate = OggFLAC__file_decoder_get_stream_decoder_state(decoder);
1682
printf("returned state = %u (%s)... OK\n", sstate, OggFLAC__StreamDecoderStateString[sstate]);
1684
printf("testing OggFLAC__file_decoder_get_FLAC_stream_decoder_state()... ");
1685
fstate = OggFLAC__file_decoder_get_FLAC_stream_decoder_state(decoder);
1686
printf("returned state = %u (%s)... OK\n", fstate, FLAC__StreamDecoderStateString[fstate]);
1688
decoder_client_data.current_metadata_number = 0;
1689
decoder_client_data.ignore_errors = false;
1690
decoder_client_data.error_occurred = false;
1692
printf("testing OggFLAC__file_decoder_get_md5_checking()... ");
1693
if(!OggFLAC__file_decoder_get_md5_checking(decoder)) {
1694
printf("FAILED, returned false, expected true\n");
1699
printf("testing OggFLAC__file_decoder_process_until_end_of_metadata()... ");
1700
if(!OggFLAC__file_decoder_process_until_end_of_metadata(decoder))
1701
return die_f_("returned false", decoder);
1704
printf("testing OggFLAC__file_decoder_process_single()... ");
1705
if(!OggFLAC__file_decoder_process_single(decoder))
1706
return die_f_("returned false", decoder);
1709
printf("testing OggFLAC__file_decoder_seek_absolute()... ");
1710
if(!OggFLAC__file_decoder_seek_absolute(decoder, 0))
1711
return die_f_("returned false", decoder);
1714
printf("testing OggFLAC__file_decoder_process_until_end_of_file()... ");
1715
if(!OggFLAC__file_decoder_process_until_end_of_file(decoder))
1716
return die_f_("returned false", decoder);
1719
printf("testing OggFLAC__file_decoder_get_channels()... ");
1721
unsigned channels = OggFLAC__file_decoder_get_channels(decoder);
1722
if(channels != streaminfo_.data.stream_info.channels) {
1723
printf("FAILED, returned %u, expected %u\n", channels, streaminfo_.data.stream_info.channels);
1729
printf("testing OggFLAC__file_decoder_get_bits_per_sample()... ");
1731
unsigned bits_per_sample = OggFLAC__file_decoder_get_bits_per_sample(decoder);
1732
if(bits_per_sample != streaminfo_.data.stream_info.bits_per_sample) {
1733
printf("FAILED, returned %u, expected %u\n", bits_per_sample, streaminfo_.data.stream_info.bits_per_sample);
1739
printf("testing OggFLAC__file_decoder_get_sample_rate()... ");
1741
unsigned sample_rate = OggFLAC__file_decoder_get_sample_rate(decoder);
1742
if(sample_rate != streaminfo_.data.stream_info.sample_rate) {
1743
printf("FAILED, returned %u, expected %u\n", sample_rate, streaminfo_.data.stream_info.sample_rate);
1749
printf("testing OggFLAC__file_decoder_get_blocksize()... ");
1751
unsigned blocksize = OggFLAC__file_decoder_get_blocksize(decoder);
1752
/* value could be anything since we're at the last block, so accept any answer */
1753
printf("returned %u... OK\n", blocksize);
1756
printf("testing OggFLAC__file_decoder_get_channel_assignment()... ");
1758
FLAC__ChannelAssignment ca = OggFLAC__file_decoder_get_channel_assignment(decoder);
1759
printf("returned %u (%s)... OK\n", (unsigned)ca, FLAC__ChannelAssignmentString[ca]);
1762
printf("testing OggFLAC__file_decoder_finish()... ");
1763
(void) OggFLAC__file_decoder_finish(decoder);
1770
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
1771
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
1772
return die_f_("returned false", decoder);
1776
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1777
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1778
expected_metadata_sequence_[num_expected_++] = &padding_;
1779
expected_metadata_sequence_[num_expected_++] = &seektable_;
1780
expected_metadata_sequence_[num_expected_++] = &application1_;
1781
expected_metadata_sequence_[num_expected_++] = &application2_;
1782
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1783
expected_metadata_sequence_[num_expected_++] = &unknown_;
1785
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1792
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
1793
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
1794
return die_f_("returned false", decoder);
1799
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1803
* respond all, ignore VORBIS_COMMENT
1806
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
1807
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
1808
return die_f_("returned false", decoder);
1811
printf("testing OggFLAC__file_decoder_set_metadata_ignore(VORBIS_COMMENT)... ");
1812
if(!OggFLAC__file_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
1813
return die_f_("returned false", decoder);
1817
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1818
expected_metadata_sequence_[num_expected_++] = &padding_;
1819
expected_metadata_sequence_[num_expected_++] = &seektable_;
1820
expected_metadata_sequence_[num_expected_++] = &application1_;
1821
expected_metadata_sequence_[num_expected_++] = &application2_;
1822
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1823
expected_metadata_sequence_[num_expected_++] = &unknown_;
1825
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1829
* respond all, ignore APPLICATION
1832
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
1833
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
1834
return die_f_("returned false", decoder);
1837
printf("testing OggFLAC__file_decoder_set_metadata_ignore(APPLICATION)... ");
1838
if(!OggFLAC__file_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
1839
return die_f_("returned false", decoder);
1843
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1844
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1845
expected_metadata_sequence_[num_expected_++] = &padding_;
1846
expected_metadata_sequence_[num_expected_++] = &seektable_;
1847
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1848
expected_metadata_sequence_[num_expected_++] = &unknown_;
1850
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1854
* respond all, ignore APPLICATION id of app#1
1857
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
1858
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
1859
return die_f_("returned false", decoder);
1862
printf("testing OggFLAC__file_decoder_set_metadata_ignore_application(of app block #1)... ");
1863
if(!OggFLAC__file_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
1864
return die_f_("returned false", decoder);
1868
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1869
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1870
expected_metadata_sequence_[num_expected_++] = &padding_;
1871
expected_metadata_sequence_[num_expected_++] = &seektable_;
1872
expected_metadata_sequence_[num_expected_++] = &application2_;
1873
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1874
expected_metadata_sequence_[num_expected_++] = &unknown_;
1876
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1880
* respond all, ignore APPLICATION id of app#1 & app#2
1883
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
1884
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
1885
return die_f_("returned false", decoder);
1888
printf("testing OggFLAC__file_decoder_set_metadata_ignore_application(of app block #1)... ");
1889
if(!OggFLAC__file_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
1890
return die_f_("returned false", decoder);
1893
printf("testing OggFLAC__file_decoder_set_metadata_ignore_application(of app block #2)... ");
1894
if(!OggFLAC__file_decoder_set_metadata_ignore_application(decoder, application2_.data.application.id))
1895
return die_f_("returned false", decoder);
1899
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
1900
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1901
expected_metadata_sequence_[num_expected_++] = &padding_;
1902
expected_metadata_sequence_[num_expected_++] = &seektable_;
1903
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
1904
expected_metadata_sequence_[num_expected_++] = &unknown_;
1906
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1910
* ignore all, respond VORBIS_COMMENT
1913
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
1914
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
1915
return die_f_("returned false", decoder);
1918
printf("testing OggFLAC__file_decoder_set_metadata_respond(VORBIS_COMMENT)... ");
1919
if(!OggFLAC__file_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT))
1920
return die_f_("returned false", decoder);
1924
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
1926
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1930
* ignore all, respond APPLICATION
1933
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
1934
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
1935
return die_f_("returned false", decoder);
1938
printf("testing OggFLAC__file_decoder_set_metadata_respond(APPLICATION)... ");
1939
if(!OggFLAC__file_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
1940
return die_f_("returned false", decoder);
1944
expected_metadata_sequence_[num_expected_++] = &application1_;
1945
expected_metadata_sequence_[num_expected_++] = &application2_;
1947
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1951
* ignore all, respond APPLICATION id of app#1
1954
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
1955
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
1956
return die_f_("returned false", decoder);
1959
printf("testing OggFLAC__file_decoder_set_metadata_respond_application(of app block #1)... ");
1960
if(!OggFLAC__file_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
1961
return die_f_("returned false", decoder);
1965
expected_metadata_sequence_[num_expected_++] = &application1_;
1967
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1971
* ignore all, respond APPLICATION id of app#1 & app#2
1974
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
1975
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
1976
return die_f_("returned false", decoder);
1979
printf("testing OggFLAC__file_decoder_set_metadata_respond_application(of app block #1)... ");
1980
if(!OggFLAC__file_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
1981
return die_f_("returned false", decoder);
1984
printf("testing OggFLAC__file_decoder_set_metadata_respond_application(of app block #2)... ");
1985
if(!OggFLAC__file_decoder_set_metadata_respond_application(decoder, application2_.data.application.id))
1986
return die_f_("returned false", decoder);
1990
expected_metadata_sequence_[num_expected_++] = &application1_;
1991
expected_metadata_sequence_[num_expected_++] = &application2_;
1993
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
1997
* respond all, ignore APPLICATION, respond APPLICATION id of app#1
2000
printf("testing OggFLAC__file_decoder_set_metadata_respond_all()... ");
2001
if(!OggFLAC__file_decoder_set_metadata_respond_all(decoder))
2002
return die_f_("returned false", decoder);
2005
printf("testing OggFLAC__file_decoder_set_metadata_ignore(APPLICATION)... ");
2006
if(!OggFLAC__file_decoder_set_metadata_ignore(decoder, FLAC__METADATA_TYPE_APPLICATION))
2007
return die_f_("returned false", decoder);
2010
printf("testing OggFLAC__file_decoder_set_metadata_respond_application(of app block #1)... ");
2011
if(!OggFLAC__file_decoder_set_metadata_respond_application(decoder, application1_.data.application.id))
2012
return die_f_("returned false", decoder);
2016
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
2017
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
2018
expected_metadata_sequence_[num_expected_++] = &padding_;
2019
expected_metadata_sequence_[num_expected_++] = &seektable_;
2020
expected_metadata_sequence_[num_expected_++] = &application1_;
2021
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
2022
expected_metadata_sequence_[num_expected_++] = &unknown_;
2024
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
2028
* ignore all, respond APPLICATION, ignore APPLICATION id of app#1
2031
printf("testing OggFLAC__file_decoder_set_metadata_ignore_all()... ");
2032
if(!OggFLAC__file_decoder_set_metadata_ignore_all(decoder))
2033
return die_f_("returned false", decoder);
2036
printf("testing OggFLAC__file_decoder_set_metadata_respond(APPLICATION)... ");
2037
if(!OggFLAC__file_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_APPLICATION))
2038
return die_f_("returned false", decoder);
2041
printf("testing OggFLAC__file_decoder_set_metadata_ignore_application(of app block #1)... ");
2042
if(!OggFLAC__file_decoder_set_metadata_ignore_application(decoder, application1_.data.application.id))
2043
return die_f_("returned false", decoder);
2047
expected_metadata_sequence_[num_expected_++] = &application2_;
2049
if(!file_decoder_test_respond_(decoder, &decoder_client_data))
2052
/* done, now leave the sequence the way we found it... */
2054
expected_metadata_sequence_[num_expected_++] = &streaminfo_;
2055
expected_metadata_sequence_[num_expected_++] = &vorbiscomment_;
2056
expected_metadata_sequence_[num_expected_++] = &padding_;
2057
expected_metadata_sequence_[num_expected_++] = &seektable_;
2058
expected_metadata_sequence_[num_expected_++] = &application1_;
2059
expected_metadata_sequence_[num_expected_++] = &application2_;
2060
expected_metadata_sequence_[num_expected_++] = &cuesheet_;
2061
expected_metadata_sequence_[num_expected_++] = &unknown_;
2063
printf("testing OggFLAC__file_decoder_delete()... ");
2064
OggFLAC__file_decoder_delete(decoder);
2067
printf("\nPASSED!\n");
2072
FLAC__bool test_decoders()
2074
init_metadata_blocks_();
2075
if(!generate_file_())
2078
if(!test_stream_decoder())
2081
if(!test_seekable_stream_decoder())
2084
if(!test_file_decoder())
2087
(void) grabbag__file_remove_file(oggflacfilename_);
2088
free_metadata_blocks_();