1
/* test_libFLAC++ - Unit tester for libFLAC++
2
* Copyright (C) 2002,2003 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.
21
#include "file_utils.h"
22
#include "metadata_utils.h"
24
#include "FLAC/assert.h"
25
#include "FLAC++/encoder.h"
30
static ::FLAC__StreamMetadata streaminfo_, padding_, seektable_, application1_, application2_, vorbiscomment_, cuesheet_, unknown_;
31
static ::FLAC__StreamMetadata *metadata_sequence_[] = { &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_ };
32
static const unsigned num_metadata_ = sizeof(metadata_sequence_) / sizeof(metadata_sequence_[0]);
33
static const char *flacfilename_ = "metadata.flac";
35
static void init_metadata_blocks_()
37
mutils__init_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
40
static void free_metadata_blocks_()
42
mutils__free_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
45
class StreamEncoder : public FLAC::Encoder::Stream {
47
StreamEncoder(): FLAC::Encoder::Stream() { }
50
// from FLAC::Encoder::Stream
51
::FLAC__StreamEncoderWriteStatus write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame);
52
void metadata_callback(const ::FLAC__StreamMetadata *metadata);
54
bool die(const char *msg = 0) const;
57
::FLAC__StreamEncoderWriteStatus StreamEncoder::write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame)
59
(void)buffer, (void)bytes, (void)samples, (void)current_frame;
61
return ::FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
64
void StreamEncoder::metadata_callback(const ::FLAC__StreamMetadata *metadata)
69
bool StreamEncoder::die(const char *msg) const
71
State state = get_state();
74
printf("FAILED, %s", msg);
78
printf(", state = %u (%s)\n", (unsigned)((::FLAC__StreamEncoderState)state), state.as_cstring());
79
if(state == ::FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
80
FLAC::Decoder::Stream::State dstate = get_verify_decoder_state();
81
printf(" verify decoder state = %u (%s)\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
87
static bool test_stream_encoder()
89
StreamEncoder *encoder;
90
FLAC__int32 samples[1024];
91
FLAC__int32 *samples_array[1] = { samples };
94
printf("\n+++ libFLAC++ unit test: FLAC::Encoder::Stream\n\n");
96
printf("allocating encoder instance... ");
97
encoder = new StreamEncoder();
99
printf("FAILED, new returned NULL\n");
104
printf("testing is_valid()... ");
105
if(!encoder->is_valid()) {
106
printf("FAILED, returned false\n");
111
printf("testing set_verify()... ");
112
if(!encoder->set_verify(true))
113
return encoder->die("returned false");
116
printf("testing set_streamable_subset()... ");
117
if(!encoder->set_streamable_subset(true))
118
return encoder->die("returned false");
121
printf("testing set_do_mid_side_stereo()... ");
122
if(!encoder->set_do_mid_side_stereo(false))
123
return encoder->die("returned false");
126
printf("testing set_loose_mid_side_stereo()... ");
127
if(!encoder->set_loose_mid_side_stereo(false))
128
return encoder->die("returned false");
131
printf("testing set_channels()... ");
132
if(!encoder->set_channels(streaminfo_.data.stream_info.channels))
133
return encoder->die("returned false");
136
printf("testing set_bits_per_sample()... ");
137
if(!encoder->set_bits_per_sample(streaminfo_.data.stream_info.bits_per_sample))
138
return encoder->die("returned false");
141
printf("testing set_sample_rate()... ");
142
if(!encoder->set_sample_rate(streaminfo_.data.stream_info.sample_rate))
143
return encoder->die("returned false");
146
printf("testing set_blocksize()... ");
147
if(!encoder->set_blocksize(streaminfo_.data.stream_info.min_blocksize))
148
return encoder->die("returned false");
151
printf("testing set_max_lpc_order()... ");
152
if(!encoder->set_max_lpc_order(0))
153
return encoder->die("returned false");
156
printf("testing set_qlp_coeff_precision()... ");
157
if(!encoder->set_qlp_coeff_precision(0))
158
return encoder->die("returned false");
161
printf("testing set_do_qlp_coeff_prec_search()... ");
162
if(!encoder->set_do_qlp_coeff_prec_search(false))
163
return encoder->die("returned false");
166
printf("testing set_do_escape_coding()... ");
167
if(!encoder->set_do_escape_coding(false))
168
return encoder->die("returned false");
171
printf("testing set_do_exhaustive_model_search()... ");
172
if(!encoder->set_do_exhaustive_model_search(false))
173
return encoder->die("returned false");
176
printf("testing set_min_residual_partition_order()... ");
177
if(!encoder->set_min_residual_partition_order(0))
178
return encoder->die("returned false");
181
printf("testing set_max_residual_partition_order()... ");
182
if(!encoder->set_max_residual_partition_order(0))
183
return encoder->die("returned false");
186
printf("testing set_rice_parameter_search_dist()... ");
187
if(!encoder->set_rice_parameter_search_dist(0))
188
return encoder->die("returned false");
191
printf("testing set_total_samples_estimate()... ");
192
if(!encoder->set_total_samples_estimate(streaminfo_.data.stream_info.total_samples))
193
return encoder->die("returned false");
196
printf("testing set_metadata()... ");
197
if(!encoder->set_metadata(metadata_sequence_, num_metadata_))
198
return encoder->die("returned false");
201
printf("testing init()... ");
202
if(encoder->init() != ::FLAC__STREAM_ENCODER_OK)
203
return encoder->die();
206
printf("testing get_state()... ");
207
FLAC::Encoder::Stream::State state = encoder->get_state();
208
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamEncoderState)state), state.as_cstring());
210
printf("testing get_verify_decoder_state()... ");
211
FLAC::Decoder::Stream::State dstate = encoder->get_verify_decoder_state();
212
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
215
FLAC__uint64 absolute_sample;
216
unsigned frame_number;
219
FLAC__int32 expected;
222
printf("testing get_verify_decoder_error_stats()... ");
223
encoder->get_verify_decoder_error_stats(&absolute_sample, &frame_number, &channel, &sample, &expected, &got);
227
printf("testing get_verify()... ");
228
if(encoder->get_verify() != true) {
229
printf("FAILED, expected true, got false\n");
234
printf("testing get_streamable_subset()... ");
235
if(encoder->get_streamable_subset() != true) {
236
printf("FAILED, expected true, got false\n");
241
printf("testing get_do_mid_side_stereo()... ");
242
if(encoder->get_do_mid_side_stereo() != false) {
243
printf("FAILED, expected false, got true\n");
248
printf("testing get_loose_mid_side_stereo()... ");
249
if(encoder->get_loose_mid_side_stereo() != false) {
250
printf("FAILED, expected false, got true\n");
255
printf("testing get_channels()... ");
256
if(encoder->get_channels() != streaminfo_.data.stream_info.channels) {
257
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, encoder->get_channels());
262
printf("testing get_bits_per_sample()... ");
263
if(encoder->get_bits_per_sample() != streaminfo_.data.stream_info.bits_per_sample) {
264
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, encoder->get_bits_per_sample());
269
printf("testing get_sample_rate()... ");
270
if(encoder->get_sample_rate() != streaminfo_.data.stream_info.sample_rate) {
271
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, encoder->get_sample_rate());
276
printf("testing get_blocksize()... ");
277
if(encoder->get_blocksize() != streaminfo_.data.stream_info.min_blocksize) {
278
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, encoder->get_blocksize());
283
printf("testing get_max_lpc_order()... ");
284
if(encoder->get_max_lpc_order() != 0) {
285
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_lpc_order());
290
printf("testing get_qlp_coeff_precision()... ");
291
(void)encoder->get_qlp_coeff_precision();
292
/* we asked the encoder to auto select this so we accept anything */
295
printf("testing get_do_qlp_coeff_prec_search()... ");
296
if(encoder->get_do_qlp_coeff_prec_search() != false) {
297
printf("FAILED, expected false, got true\n");
302
printf("testing get_do_escape_coding()... ");
303
if(encoder->get_do_escape_coding() != false) {
304
printf("FAILED, expected false, got true\n");
309
printf("testing get_do_exhaustive_model_search()... ");
310
if(encoder->get_do_exhaustive_model_search() != false) {
311
printf("FAILED, expected false, got true\n");
316
printf("testing get_min_residual_partition_order()... ");
317
if(encoder->get_min_residual_partition_order() != 0) {
318
printf("FAILED, expected %u, got %u\n", 0, encoder->get_min_residual_partition_order());
323
printf("testing get_max_residual_partition_order()... ");
324
if(encoder->get_max_residual_partition_order() != 0) {
325
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_residual_partition_order());
330
printf("testing get_rice_parameter_search_dist()... ");
331
if(encoder->get_rice_parameter_search_dist() != 0) {
332
printf("FAILED, expected %u, got %u\n", 0, encoder->get_rice_parameter_search_dist());
337
printf("testing get_total_samples_estimate()... ");
338
if(encoder->get_total_samples_estimate() != streaminfo_.data.stream_info.total_samples) {
339
printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, encoder->get_total_samples_estimate());
344
/* init the dummy sample buffer */
345
for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
348
printf("testing process()... ");
349
if(!encoder->process(samples_array, sizeof(samples) / sizeof(FLAC__int32)))
350
return encoder->die("returned false");
353
printf("testing process_interleaved()... ");
354
if(!encoder->process_interleaved(samples, sizeof(samples) / sizeof(FLAC__int32)))
355
return encoder->die("returned false");
358
printf("testing finish()... ");
362
printf("freeing encoder instance... ");
366
printf("\nPASSED!\n");
371
class SeekableStreamEncoder : public FLAC::Encoder::SeekableStream {
373
SeekableStreamEncoder(): FLAC::Encoder::SeekableStream() { }
374
~SeekableStreamEncoder() { }
376
// from FLAC::Encoder::SeekableStream
377
::FLAC__SeekableStreamEncoderSeekStatus seek_callback(FLAC__uint64 absolute_byte_offset);
378
::FLAC__StreamEncoderWriteStatus write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame);
380
bool die(const char *msg = 0) const;
383
::FLAC__SeekableStreamEncoderSeekStatus SeekableStreamEncoder::seek_callback(FLAC__uint64 absolute_byte_offset)
385
(void)absolute_byte_offset;
387
return ::FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK;
390
::FLAC__StreamEncoderWriteStatus SeekableStreamEncoder::write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame)
392
(void)buffer, (void)bytes, (void)samples, (void)current_frame;
394
return ::FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
397
bool SeekableStreamEncoder::die(const char *msg) const
399
State state = get_state();
402
printf("FAILED, %s", msg);
406
printf(", state = %u (%s)\n", (unsigned)((::FLAC__SeekableStreamEncoderState)state), state.as_cstring());
407
if(state == ::FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR) {
408
FLAC::Encoder::Stream::State state_ = get_stream_encoder_state();
409
printf(" stream encoder state = %u (%s)\n", (unsigned)((::FLAC__StreamEncoderState)state_), state_.as_cstring());
410
if(state_ == ::FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
411
FLAC::Decoder::Stream::State dstate = get_verify_decoder_state();
412
printf(" verify decoder state = %u (%s)\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
419
static bool test_seekable_stream_encoder()
421
SeekableStreamEncoder *encoder;
422
FLAC__int32 samples[1024];
423
FLAC__int32 *samples_array[1] = { samples };
426
printf("\n+++ libFLAC++ unit test: FLAC::Encoder::SeekableStream\n\n");
428
printf("allocating encoder instance... ");
429
encoder = new SeekableStreamEncoder();
431
printf("FAILED, new returned NULL\n");
436
printf("testing is_valid()... ");
437
if(!encoder->is_valid()) {
438
printf("FAILED, returned false\n");
443
printf("testing set_verify()... ");
444
if(!encoder->set_verify(true))
445
return encoder->die("returned false");
448
printf("testing set_streamable_subset()... ");
449
if(!encoder->set_streamable_subset(true))
450
return encoder->die("returned false");
453
printf("testing set_do_mid_side_stereo()... ");
454
if(!encoder->set_do_mid_side_stereo(false))
455
return encoder->die("returned false");
458
printf("testing set_loose_mid_side_stereo()... ");
459
if(!encoder->set_loose_mid_side_stereo(false))
460
return encoder->die("returned false");
463
printf("testing set_channels()... ");
464
if(!encoder->set_channels(streaminfo_.data.stream_info.channels))
465
return encoder->die("returned false");
468
printf("testing set_bits_per_sample()... ");
469
if(!encoder->set_bits_per_sample(streaminfo_.data.stream_info.bits_per_sample))
470
return encoder->die("returned false");
473
printf("testing set_sample_rate()... ");
474
if(!encoder->set_sample_rate(streaminfo_.data.stream_info.sample_rate))
475
return encoder->die("returned false");
478
printf("testing set_blocksize()... ");
479
if(!encoder->set_blocksize(streaminfo_.data.stream_info.min_blocksize))
480
return encoder->die("returned false");
483
printf("testing set_max_lpc_order()... ");
484
if(!encoder->set_max_lpc_order(0))
485
return encoder->die("returned false");
488
printf("testing set_qlp_coeff_precision()... ");
489
if(!encoder->set_qlp_coeff_precision(0))
490
return encoder->die("returned false");
493
printf("testing set_do_qlp_coeff_prec_search()... ");
494
if(!encoder->set_do_qlp_coeff_prec_search(false))
495
return encoder->die("returned false");
498
printf("testing set_do_escape_coding()... ");
499
if(!encoder->set_do_escape_coding(false))
500
return encoder->die("returned false");
503
printf("testing set_do_exhaustive_model_search()... ");
504
if(!encoder->set_do_exhaustive_model_search(false))
505
return encoder->die("returned false");
508
printf("testing set_min_residual_partition_order()... ");
509
if(!encoder->set_min_residual_partition_order(0))
510
return encoder->die("returned false");
513
printf("testing set_max_residual_partition_order()... ");
514
if(!encoder->set_max_residual_partition_order(0))
515
return encoder->die("returned false");
518
printf("testing set_rice_parameter_search_dist()... ");
519
if(!encoder->set_rice_parameter_search_dist(0))
520
return encoder->die("returned false");
523
printf("testing set_total_samples_estimate()... ");
524
if(!encoder->set_total_samples_estimate(streaminfo_.data.stream_info.total_samples))
525
return encoder->die("returned false");
528
printf("testing set_metadata()... ");
529
if(!encoder->set_metadata(metadata_sequence_, num_metadata_))
530
return encoder->die("returned false");
533
printf("testing init()... ");
534
if(encoder->init() != ::FLAC__SEEKABLE_STREAM_ENCODER_OK)
535
return encoder->die();
538
printf("testing get_state()... ");
539
FLAC::Encoder::SeekableStream::State state = encoder->get_state();
540
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__SeekableStreamEncoderState)state), state.as_cstring());
542
printf("testing get_stream_encoder_state()... ");
543
FLAC::Encoder::Stream::State state_ = encoder->get_stream_encoder_state();
544
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamEncoderState)state_), state_.as_cstring());
546
printf("testing get_verify_decoder_state()... ");
547
FLAC::Decoder::Stream::State dstate = encoder->get_verify_decoder_state();
548
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
551
FLAC__uint64 absolute_sample;
552
unsigned frame_number;
555
FLAC__int32 expected;
558
printf("testing get_verify_decoder_error_stats()... ");
559
encoder->get_verify_decoder_error_stats(&absolute_sample, &frame_number, &channel, &sample, &expected, &got);
563
printf("testing get_verify()... ");
564
if(encoder->get_verify() != true) {
565
printf("FAILED, expected true, got false\n");
570
printf("testing get_streamable_subset()... ");
571
if(encoder->get_streamable_subset() != true) {
572
printf("FAILED, expected true, got false\n");
577
printf("testing get_do_mid_side_stereo()... ");
578
if(encoder->get_do_mid_side_stereo() != false) {
579
printf("FAILED, expected false, got true\n");
584
printf("testing get_loose_mid_side_stereo()... ");
585
if(encoder->get_loose_mid_side_stereo() != false) {
586
printf("FAILED, expected false, got true\n");
591
printf("testing get_channels()... ");
592
if(encoder->get_channels() != streaminfo_.data.stream_info.channels) {
593
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, encoder->get_channels());
598
printf("testing get_bits_per_sample()... ");
599
if(encoder->get_bits_per_sample() != streaminfo_.data.stream_info.bits_per_sample) {
600
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, encoder->get_bits_per_sample());
605
printf("testing get_sample_rate()... ");
606
if(encoder->get_sample_rate() != streaminfo_.data.stream_info.sample_rate) {
607
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, encoder->get_sample_rate());
612
printf("testing get_blocksize()... ");
613
if(encoder->get_blocksize() != streaminfo_.data.stream_info.min_blocksize) {
614
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, encoder->get_blocksize());
619
printf("testing get_max_lpc_order()... ");
620
if(encoder->get_max_lpc_order() != 0) {
621
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_lpc_order());
626
printf("testing get_qlp_coeff_precision()... ");
627
(void)encoder->get_qlp_coeff_precision();
628
/* we asked the encoder to auto select this so we accept anything */
631
printf("testing get_do_qlp_coeff_prec_search()... ");
632
if(encoder->get_do_qlp_coeff_prec_search() != false) {
633
printf("FAILED, expected false, got true\n");
638
printf("testing get_do_escape_coding()... ");
639
if(encoder->get_do_escape_coding() != false) {
640
printf("FAILED, expected false, got true\n");
645
printf("testing get_do_exhaustive_model_search()... ");
646
if(encoder->get_do_exhaustive_model_search() != false) {
647
printf("FAILED, expected false, got true\n");
652
printf("testing get_min_residual_partition_order()... ");
653
if(encoder->get_min_residual_partition_order() != 0) {
654
printf("FAILED, expected %u, got %u\n", 0, encoder->get_min_residual_partition_order());
659
printf("testing get_max_residual_partition_order()... ");
660
if(encoder->get_max_residual_partition_order() != 0) {
661
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_residual_partition_order());
666
printf("testing get_rice_parameter_search_dist()... ");
667
if(encoder->get_rice_parameter_search_dist() != 0) {
668
printf("FAILED, expected %u, got %u\n", 0, encoder->get_rice_parameter_search_dist());
673
printf("testing get_total_samples_estimate()... ");
674
if(encoder->get_total_samples_estimate() != streaminfo_.data.stream_info.total_samples) {
675
printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, encoder->get_total_samples_estimate());
680
/* init the dummy sample buffer */
681
for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
684
printf("testing process()... ");
685
if(!encoder->process(samples_array, sizeof(samples) / sizeof(FLAC__int32)))
686
return encoder->die("returned false");
689
printf("testing process_interleaved()... ");
690
if(!encoder->process_interleaved(samples, sizeof(samples) / sizeof(FLAC__int32)))
691
return encoder->die("returned false");
694
printf("testing finish()... ");
698
printf("freeing encoder instance... ");
702
printf("\nPASSED!\n");
707
class FileEncoder : public FLAC::Encoder::File {
709
FileEncoder(): FLAC::Encoder::File() { }
712
// from FLAC::Encoder::File
713
void progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate);
715
bool die(const char *msg = 0) const;
718
void FileEncoder::progress_callback(FLAC__uint64, FLAC__uint64, unsigned, unsigned)
722
bool FileEncoder::die(const char *msg) const
724
State state = get_state();
727
printf("FAILED, %s", msg);
731
printf(", state = %u (%s)\n", (unsigned)((::FLAC__FileEncoderState)state), state.as_cstring());
732
if(state == ::FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR) {
733
FLAC::Encoder::SeekableStream::State state_ = get_seekable_stream_encoder_state();
734
printf(" seekable stream encoder state = %u (%s)\n", (unsigned)((::FLAC__SeekableStreamEncoderState)state_), state_.as_cstring());
735
if(state_ == ::FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR) {
736
FLAC::Encoder::Stream::State state__ = get_stream_encoder_state();
737
printf(" stream encoder state = %u (%s)\n", (unsigned)((::FLAC__StreamEncoderState)state__), state__.as_cstring());
738
if(state__ == ::FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
739
FLAC::Decoder::Stream::State dstate = get_verify_decoder_state();
740
printf(" verify decoder state = %u (%s)\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
748
static bool test_file_encoder()
750
FileEncoder *encoder;
751
FLAC__int32 samples[1024];
752
FLAC__int32 *samples_array[1] = { samples };
755
printf("\n+++ libFLAC++ unit test: FLAC::Encoder::File\n\n");
757
printf("allocating encoder instance... ");
758
encoder = new FileEncoder();
760
printf("FAILED, new returned NULL\n");
765
printf("testing is_valid()... ");
766
if(!encoder->is_valid()) {
767
printf("FAILED, returned false\n");
772
printf("testing set_verify()... ");
773
if(!encoder->set_verify(true))
774
return encoder->die("returned false");
777
printf("testing set_streamable_subset()... ");
778
if(!encoder->set_streamable_subset(true))
779
return encoder->die("returned false");
782
printf("testing set_do_mid_side_stereo()... ");
783
if(!encoder->set_do_mid_side_stereo(false))
784
return encoder->die("returned false");
787
printf("testing set_loose_mid_side_stereo()... ");
788
if(!encoder->set_loose_mid_side_stereo(false))
789
return encoder->die("returned false");
792
printf("testing set_channels()... ");
793
if(!encoder->set_channels(streaminfo_.data.stream_info.channels))
794
return encoder->die("returned false");
797
printf("testing set_bits_per_sample()... ");
798
if(!encoder->set_bits_per_sample(streaminfo_.data.stream_info.bits_per_sample))
799
return encoder->die("returned false");
802
printf("testing set_sample_rate()... ");
803
if(!encoder->set_sample_rate(streaminfo_.data.stream_info.sample_rate))
804
return encoder->die("returned false");
807
printf("testing set_blocksize()... ");
808
if(!encoder->set_blocksize(streaminfo_.data.stream_info.min_blocksize))
809
return encoder->die("returned false");
812
printf("testing set_max_lpc_order()... ");
813
if(!encoder->set_max_lpc_order(0))
814
return encoder->die("returned false");
817
printf("testing set_qlp_coeff_precision()... ");
818
if(!encoder->set_qlp_coeff_precision(0))
819
return encoder->die("returned false");
822
printf("testing set_do_qlp_coeff_prec_search()... ");
823
if(!encoder->set_do_qlp_coeff_prec_search(false))
824
return encoder->die("returned false");
827
printf("testing set_do_escape_coding()... ");
828
if(!encoder->set_do_escape_coding(false))
829
return encoder->die("returned false");
832
printf("testing set_do_exhaustive_model_search()... ");
833
if(!encoder->set_do_exhaustive_model_search(false))
834
return encoder->die("returned false");
837
printf("testing set_min_residual_partition_order()... ");
838
if(!encoder->set_min_residual_partition_order(0))
839
return encoder->die("returned false");
842
printf("testing set_max_residual_partition_order()... ");
843
if(!encoder->set_max_residual_partition_order(0))
844
return encoder->die("returned false");
847
printf("testing set_rice_parameter_search_dist()... ");
848
if(!encoder->set_rice_parameter_search_dist(0))
849
return encoder->die("returned false");
852
printf("testing set_total_samples_estimate()... ");
853
if(!encoder->set_total_samples_estimate(streaminfo_.data.stream_info.total_samples))
854
return encoder->die("returned false");
857
printf("testing set_metadata()... ");
858
if(!encoder->set_metadata(metadata_sequence_, num_metadata_))
859
return encoder->die("returned false");
862
printf("testing set_filename()... ");
863
if(!encoder->set_filename(flacfilename_))
864
return encoder->die("returned false");
867
printf("testing init()... ");
868
if(encoder->init() != ::FLAC__FILE_ENCODER_OK)
869
return encoder->die();
872
printf("testing get_state()... ");
873
FLAC::Encoder::File::State state = encoder->get_state();
874
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__FileEncoderState)state), state.as_cstring());
876
printf("testing get_seekable_stream_encoder_state()... ");
877
FLAC::Encoder::SeekableStream::State state_ = encoder->get_seekable_stream_encoder_state();
878
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__SeekableStreamEncoderState)state_), state_.as_cstring());
880
printf("testing get_stream_encoder_state()... ");
881
FLAC::Encoder::Stream::State state__ = encoder->get_stream_encoder_state();
882
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamEncoderState)state__), state__.as_cstring());
884
printf("testing get_verify_decoder_state()... ");
885
FLAC::Decoder::Stream::State dstate = encoder->get_verify_decoder_state();
886
printf("returned state = %u (%s)... OK\n", (unsigned)((::FLAC__StreamDecoderState)dstate), dstate.as_cstring());
889
FLAC__uint64 absolute_sample;
890
unsigned frame_number;
893
FLAC__int32 expected;
896
printf("testing get_verify_decoder_error_stats()... ");
897
encoder->get_verify_decoder_error_stats(&absolute_sample, &frame_number, &channel, &sample, &expected, &got);
901
printf("testing get_verify()... ");
902
if(encoder->get_verify() != true) {
903
printf("FAILED, expected true, got false\n");
908
printf("testing get_streamable_subset()... ");
909
if(encoder->get_streamable_subset() != true) {
910
printf("FAILED, expected true, got false\n");
915
printf("testing get_do_mid_side_stereo()... ");
916
if(encoder->get_do_mid_side_stereo() != false) {
917
printf("FAILED, expected false, got true\n");
922
printf("testing get_loose_mid_side_stereo()... ");
923
if(encoder->get_loose_mid_side_stereo() != false) {
924
printf("FAILED, expected false, got true\n");
929
printf("testing get_channels()... ");
930
if(encoder->get_channels() != streaminfo_.data.stream_info.channels) {
931
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, encoder->get_channels());
936
printf("testing get_bits_per_sample()... ");
937
if(encoder->get_bits_per_sample() != streaminfo_.data.stream_info.bits_per_sample) {
938
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, encoder->get_bits_per_sample());
943
printf("testing get_sample_rate()... ");
944
if(encoder->get_sample_rate() != streaminfo_.data.stream_info.sample_rate) {
945
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, encoder->get_sample_rate());
950
printf("testing get_blocksize()... ");
951
if(encoder->get_blocksize() != streaminfo_.data.stream_info.min_blocksize) {
952
printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, encoder->get_blocksize());
957
printf("testing get_max_lpc_order()... ");
958
if(encoder->get_max_lpc_order() != 0) {
959
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_lpc_order());
964
printf("testing get_qlp_coeff_precision()... ");
965
(void)encoder->get_qlp_coeff_precision();
966
/* we asked the encoder to auto select this so we accept anything */
969
printf("testing get_do_qlp_coeff_prec_search()... ");
970
if(encoder->get_do_qlp_coeff_prec_search() != false) {
971
printf("FAILED, expected false, got true\n");
976
printf("testing get_do_escape_coding()... ");
977
if(encoder->get_do_escape_coding() != false) {
978
printf("FAILED, expected false, got true\n");
983
printf("testing get_do_exhaustive_model_search()... ");
984
if(encoder->get_do_exhaustive_model_search() != false) {
985
printf("FAILED, expected false, got true\n");
990
printf("testing get_min_residual_partition_order()... ");
991
if(encoder->get_min_residual_partition_order() != 0) {
992
printf("FAILED, expected %u, got %u\n", 0, encoder->get_min_residual_partition_order());
997
printf("testing get_max_residual_partition_order()... ");
998
if(encoder->get_max_residual_partition_order() != 0) {
999
printf("FAILED, expected %u, got %u\n", 0, encoder->get_max_residual_partition_order());
1004
printf("testing get_rice_parameter_search_dist()... ");
1005
if(encoder->get_rice_parameter_search_dist() != 0) {
1006
printf("FAILED, expected %u, got %u\n", 0, encoder->get_rice_parameter_search_dist());
1011
printf("testing get_total_samples_estimate()... ");
1012
if(encoder->get_total_samples_estimate() != streaminfo_.data.stream_info.total_samples) {
1013
printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, encoder->get_total_samples_estimate());
1018
/* init the dummy sample buffer */
1019
for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
1022
printf("testing process()... ");
1023
if(!encoder->process(samples_array, sizeof(samples) / sizeof(FLAC__int32)))
1024
return encoder->die("returned false");
1027
printf("testing process_interleaved()... ");
1028
if(!encoder->process_interleaved(samples, sizeof(samples) / sizeof(FLAC__int32)))
1029
return encoder->die("returned false");
1032
printf("testing finish()... ");
1036
printf("freeing encoder instance... ");
1040
printf("\nPASSED!\n");
1045
bool test_encoders()
1047
init_metadata_blocks_();
1049
if(!test_stream_encoder())
1052
if(!test_seekable_stream_encoder())
1055
if(!test_file_encoder())
1058
free_metadata_blocks_();