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.
20 #include "file_utils.h"
21 #include "metadata_utils.h"
22 #include "FLAC/assert.h"
23 #include "FLAC/file_encoder.h"
24 #include "FLAC/seekable_stream_encoder.h"
25 #include "FLAC/stream_encoder.h"
26 #include "share/grabbag.h"
31 static FLAC__StreamMetadata streaminfo_, padding_, seektable_, application1_, application2_, vorbiscomment_, cuesheet_, unknown_;
32 static FLAC__StreamMetadata *metadata_sequence_[] = { &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_ };
33 static const unsigned num_metadata_ = sizeof(metadata_sequence_) / sizeof(metadata_sequence_[0]);
34 static const char *flacfilename_ = "metadata.flac";
36 static FLAC__bool die_s_(const char *msg, const FLAC__StreamEncoder *encoder)
38 FLAC__StreamEncoderState state = FLAC__stream_encoder_get_state(encoder);
41 printf("FAILED, %s", msg);
45 printf(", state = %u (%s)\n", (unsigned)state, FLAC__StreamEncoderStateString[state]);
46 if(state == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
47 FLAC__StreamDecoderState dstate = FLAC__stream_encoder_get_verify_decoder_state(encoder);
48 printf(" verify decoder state = %u (%s)\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
54 static FLAC__bool die_ss_(const char *msg, const FLAC__SeekableStreamEncoder *encoder)
56 FLAC__SeekableStreamEncoderState state = FLAC__seekable_stream_encoder_get_state(encoder);
59 printf("FAILED, %s", msg);
63 printf(", state = %u (%s)\n", (unsigned)state, FLAC__SeekableStreamEncoderStateString[state]);
64 if(state == FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR) {
65 FLAC__StreamEncoderState state_ = FLAC__seekable_stream_encoder_get_stream_encoder_state(encoder);
66 printf(" stream encoder state = %u (%s)\n", (unsigned)state_, FLAC__StreamEncoderStateString[state_]);
67 if(state_ == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
68 FLAC__StreamDecoderState dstate = FLAC__seekable_stream_encoder_get_verify_decoder_state(encoder);
69 printf(" verify decoder state = %u (%s)\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
76 static FLAC__bool die_f_(const char *msg, const FLAC__FileEncoder *encoder)
78 FLAC__FileEncoderState state = FLAC__file_encoder_get_state(encoder);
81 printf("FAILED, %s", msg);
85 printf(", state = %u (%s)\n", (unsigned)state, FLAC__FileEncoderStateString[state]);
86 if(state == FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR) {
87 FLAC__SeekableStreamEncoderState state_ = FLAC__file_encoder_get_seekable_stream_encoder_state(encoder);
88 printf(" seekable stream encoder state = %u (%s)\n", (unsigned)state_, FLAC__SeekableStreamEncoderStateString[state_]);
89 if(state_ == FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR) {
90 FLAC__StreamEncoderState state__ = FLAC__file_encoder_get_stream_encoder_state(encoder);
91 printf(" stream encoder state = %u (%s)\n", (unsigned)state__, FLAC__StreamEncoderStateString[state__]);
92 if(state__ == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) {
93 FLAC__StreamDecoderState dstate = FLAC__file_encoder_get_verify_decoder_state(encoder);
94 printf(" verify decoder state = %u (%s)\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
102 static void init_metadata_blocks_()
104 mutils__init_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
107 static void free_metadata_blocks_()
109 mutils__free_metadata_blocks(&streaminfo_, &padding_, &seektable_, &application1_, &application2_, &vorbiscomment_, &cuesheet_, &unknown_);
112 static FLAC__StreamEncoderWriteStatus stream_encoder_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data)
114 (void)encoder, (void)buffer, (void)bytes, (void)samples, (void)current_frame, (void)client_data;
115 return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
118 static void stream_encoder_metadata_callback_(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data)
120 (void)encoder, (void)metadata, (void)client_data;
123 static FLAC__bool test_stream_encoder()
125 FLAC__StreamEncoder *encoder;
126 FLAC__StreamEncoderState state;
127 FLAC__StreamDecoderState dstate;
128 FLAC__int32 samples[1024];
129 FLAC__int32 *samples_array[1];
132 samples_array[0] = samples;
134 printf("\n+++ libFLAC unit test: FLAC__StreamEncoder\n\n");
136 printf("testing FLAC__stream_encoder_new()... ");
137 encoder = FLAC__stream_encoder_new();
139 printf("FAILED, returned NULL\n");
144 printf("testing FLAC__stream_encoder_set_verify()... ");
145 if(!FLAC__stream_encoder_set_verify(encoder, true))
146 return die_s_("returned false", encoder);
149 printf("testing FLAC__stream_encoder_set_streamable_subset()... ");
150 if(!FLAC__stream_encoder_set_streamable_subset(encoder, true))
151 return die_s_("returned false", encoder);
154 printf("testing FLAC__stream_encoder_set_do_mid_side_stereo()... ");
155 if(!FLAC__stream_encoder_set_do_mid_side_stereo(encoder, false))
156 return die_s_("returned false", encoder);
159 printf("testing FLAC__stream_encoder_set_loose_mid_side_stereo()... ");
160 if(!FLAC__stream_encoder_set_loose_mid_side_stereo(encoder, false))
161 return die_s_("returned false", encoder);
164 printf("testing FLAC__stream_encoder_set_channels()... ");
165 if(!FLAC__stream_encoder_set_channels(encoder, streaminfo_.data.stream_info.channels))
166 return die_s_("returned false", encoder);
169 printf("testing FLAC__stream_encoder_set_bits_per_sample()... ");
170 if(!FLAC__stream_encoder_set_bits_per_sample(encoder, streaminfo_.data.stream_info.bits_per_sample))
171 return die_s_("returned false", encoder);
174 printf("testing FLAC__stream_encoder_set_sample_rate()... ");
175 if(!FLAC__stream_encoder_set_sample_rate(encoder, streaminfo_.data.stream_info.sample_rate))
176 return die_s_("returned false", encoder);
179 printf("testing FLAC__stream_encoder_set_blocksize()... ");
180 if(!FLAC__stream_encoder_set_blocksize(encoder, streaminfo_.data.stream_info.min_blocksize))
181 return die_s_("returned false", encoder);
184 printf("testing FLAC__stream_encoder_set_max_lpc_order()... ");
185 if(!FLAC__stream_encoder_set_max_lpc_order(encoder, 0))
186 return die_s_("returned false", encoder);
189 printf("testing FLAC__stream_encoder_set_qlp_coeff_precision()... ");
190 if(!FLAC__stream_encoder_set_qlp_coeff_precision(encoder, 0))
191 return die_s_("returned false", encoder);
194 printf("testing FLAC__stream_encoder_set_do_qlp_coeff_prec_search()... ");
195 if(!FLAC__stream_encoder_set_do_qlp_coeff_prec_search(encoder, false))
196 return die_s_("returned false", encoder);
199 printf("testing FLAC__stream_encoder_set_do_escape_coding()... ");
200 if(!FLAC__stream_encoder_set_do_escape_coding(encoder, false))
201 return die_s_("returned false", encoder);
204 printf("testing FLAC__stream_encoder_set_do_exhaustive_model_search()... ");
205 if(!FLAC__stream_encoder_set_do_exhaustive_model_search(encoder, false))
206 return die_s_("returned false", encoder);
209 printf("testing FLAC__stream_encoder_set_min_residual_partition_order()... ");
210 if(!FLAC__stream_encoder_set_min_residual_partition_order(encoder, 0))
211 return die_s_("returned false", encoder);
214 printf("testing FLAC__stream_encoder_set_max_residual_partition_order()... ");
215 if(!FLAC__stream_encoder_set_max_residual_partition_order(encoder, 0))
216 return die_s_("returned false", encoder);
219 printf("testing FLAC__stream_encoder_set_rice_parameter_search_dist()... ");
220 if(!FLAC__stream_encoder_set_rice_parameter_search_dist(encoder, 0))
221 return die_s_("returned false", encoder);
224 printf("testing FLAC__stream_encoder_set_total_samples_estimate()... ");
225 if(!FLAC__stream_encoder_set_total_samples_estimate(encoder, streaminfo_.data.stream_info.total_samples))
226 return die_s_("returned false", encoder);
229 printf("testing FLAC__stream_encoder_set_metadata()... ");
230 if(!FLAC__stream_encoder_set_metadata(encoder, metadata_sequence_, num_metadata_))
231 return die_s_("returned false", encoder);
234 printf("testing FLAC__stream_encoder_set_write_callback()... ");
235 if(!FLAC__stream_encoder_set_write_callback(encoder, stream_encoder_write_callback_))
236 return die_s_("returned false", encoder);
239 printf("testing FLAC__stream_encoder_set_metadata_callback()... ");
240 if(!FLAC__stream_encoder_set_metadata_callback(encoder, stream_encoder_metadata_callback_))
241 return die_s_("returned false", encoder);
244 printf("testing FLAC__stream_encoder_set_client_data()... ");
245 if(!FLAC__stream_encoder_set_client_data(encoder, 0))
246 return die_s_("returned false", encoder);
249 printf("testing FLAC__stream_encoder_init()... ");
250 if(FLAC__stream_encoder_init(encoder) != FLAC__STREAM_ENCODER_OK)
251 return die_s_(0, encoder);
254 printf("testing FLAC__stream_encoder_get_state()... ");
255 state = FLAC__stream_encoder_get_state(encoder);
256 printf("returned state = %u (%s)... OK\n", (unsigned)state, FLAC__StreamEncoderStateString[state]);
258 printf("testing FLAC__stream_encoder_get_verify_decoder_state()... ");
259 dstate = FLAC__stream_encoder_get_verify_decoder_state(encoder);
260 printf("returned state = %u (%s)... OK\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
263 FLAC__uint64 absolute_sample;
264 unsigned frame_number;
267 FLAC__int32 expected;
270 printf("testing FLAC__stream_encoder_get_verify_decoder_error_stats()... ");
271 FLAC__stream_encoder_get_verify_decoder_error_stats(encoder, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
275 printf("testing FLAC__stream_encoder_get_verify()... ");
276 if(FLAC__stream_encoder_get_verify(encoder) != true) {
277 printf("FAILED, expected true, got false\n");
282 printf("testing FLAC__stream_encoder_get_streamable_subset()... ");
283 if(FLAC__stream_encoder_get_streamable_subset(encoder) != true) {
284 printf("FAILED, expected true, got false\n");
289 printf("testing FLAC__stream_encoder_get_do_mid_side_stereo()... ");
290 if(FLAC__stream_encoder_get_do_mid_side_stereo(encoder) != false) {
291 printf("FAILED, expected false, got true\n");
296 printf("testing FLAC__stream_encoder_get_loose_mid_side_stereo()... ");
297 if(FLAC__stream_encoder_get_loose_mid_side_stereo(encoder) != false) {
298 printf("FAILED, expected false, got true\n");
303 printf("testing FLAC__stream_encoder_get_channels()... ");
304 if(FLAC__stream_encoder_get_channels(encoder) != streaminfo_.data.stream_info.channels) {
305 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, FLAC__stream_encoder_get_channels(encoder));
310 printf("testing FLAC__stream_encoder_get_bits_per_sample()... ");
311 if(FLAC__stream_encoder_get_bits_per_sample(encoder) != streaminfo_.data.stream_info.bits_per_sample) {
312 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, FLAC__stream_encoder_get_bits_per_sample(encoder));
317 printf("testing FLAC__stream_encoder_get_sample_rate()... ");
318 if(FLAC__stream_encoder_get_sample_rate(encoder) != streaminfo_.data.stream_info.sample_rate) {
319 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, FLAC__stream_encoder_get_sample_rate(encoder));
324 printf("testing FLAC__stream_encoder_get_blocksize()... ");
325 if(FLAC__stream_encoder_get_blocksize(encoder) != streaminfo_.data.stream_info.min_blocksize) {
326 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, FLAC__stream_encoder_get_blocksize(encoder));
331 printf("testing FLAC__stream_encoder_get_max_lpc_order()... ");
332 if(FLAC__stream_encoder_get_max_lpc_order(encoder) != 0) {
333 printf("FAILED, expected %u, got %u\n", 0, FLAC__stream_encoder_get_max_lpc_order(encoder));
338 printf("testing FLAC__stream_encoder_get_qlp_coeff_precision()... ");
339 (void)FLAC__stream_encoder_get_qlp_coeff_precision(encoder);
340 /* we asked the encoder to auto select this so we accept anything */
343 printf("testing FLAC__stream_encoder_get_do_qlp_coeff_prec_search()... ");
344 if(FLAC__stream_encoder_get_do_qlp_coeff_prec_search(encoder) != false) {
345 printf("FAILED, expected false, got true\n");
350 printf("testing FLAC__stream_encoder_get_do_escape_coding()... ");
351 if(FLAC__stream_encoder_get_do_escape_coding(encoder) != false) {
352 printf("FAILED, expected false, got true\n");
357 printf("testing FLAC__stream_encoder_get_do_exhaustive_model_search()... ");
358 if(FLAC__stream_encoder_get_do_exhaustive_model_search(encoder) != false) {
359 printf("FAILED, expected false, got true\n");
364 printf("testing FLAC__stream_encoder_get_min_residual_partition_order()... ");
365 if(FLAC__stream_encoder_get_min_residual_partition_order(encoder) != 0) {
366 printf("FAILED, expected %u, got %u\n", 0, FLAC__stream_encoder_get_min_residual_partition_order(encoder));
371 printf("testing FLAC__stream_encoder_get_max_residual_partition_order()... ");
372 if(FLAC__stream_encoder_get_max_residual_partition_order(encoder) != 0) {
373 printf("FAILED, expected %u, got %u\n", 0, FLAC__stream_encoder_get_max_residual_partition_order(encoder));
378 printf("testing FLAC__stream_encoder_get_rice_parameter_search_dist()... ");
379 if(FLAC__stream_encoder_get_rice_parameter_search_dist(encoder) != 0) {
380 printf("FAILED, expected %u, got %u\n", 0, FLAC__stream_encoder_get_rice_parameter_search_dist(encoder));
385 printf("testing FLAC__stream_encoder_get_total_samples_estimate()... ");
386 if(FLAC__stream_encoder_get_total_samples_estimate(encoder) != streaminfo_.data.stream_info.total_samples) {
387 printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, FLAC__stream_encoder_get_total_samples_estimate(encoder));
392 /* init the dummy sample buffer */
393 for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
396 printf("testing FLAC__stream_encoder_process()... ");
397 if(!FLAC__stream_encoder_process(encoder, (const FLAC__int32 * const *)samples_array, sizeof(samples) / sizeof(FLAC__int32)))
398 return die_s_("returned false", encoder);
401 printf("testing FLAC__stream_encoder_process_interleaved()... ");
402 if(!FLAC__stream_encoder_process_interleaved(encoder, samples, sizeof(samples) / sizeof(FLAC__int32)))
403 return die_s_("returned false", encoder);
406 printf("testing FLAC__stream_encoder_finish()... ");
407 FLAC__stream_encoder_finish(encoder);
410 printf("testing FLAC__stream_encoder_delete()... ");
411 FLAC__stream_encoder_delete(encoder);
414 printf("\nPASSED!\n");
419 FLAC__SeekableStreamEncoderSeekStatus seekable_stream_encoder_seek_callback_(const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data)
421 (void)encoder, (void)absolute_byte_offset, (void)client_data;
422 return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK;
425 FLAC__StreamEncoderWriteStatus seekable_stream_encoder_write_callback_(const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data)
427 (void)encoder, (void)buffer, (void)bytes, (void)samples, (void)current_frame, (void)client_data;
428 return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
431 static FLAC__bool test_seekable_stream_encoder()
433 FLAC__SeekableStreamEncoder *encoder;
434 FLAC__SeekableStreamEncoderState state;
435 FLAC__StreamEncoderState state_;
436 FLAC__StreamDecoderState dstate;
437 FLAC__int32 samples[1024];
438 FLAC__int32 *samples_array[1];
441 samples_array[0] = samples;
443 printf("\n+++ libFLAC unit test: FLAC__SeekableStreamEncoder\n\n");
445 printf("testing FLAC__seekable_stream_encoder_new()... ");
446 encoder = FLAC__seekable_stream_encoder_new();
448 printf("FAILED, returned NULL\n");
453 printf("testing FLAC__seekable_stream_encoder_set_verify()... ");
454 if(!FLAC__seekable_stream_encoder_set_verify(encoder, true))
455 return die_ss_("returned false", encoder);
458 printf("testing FLAC__seekable_stream_encoder_set_streamable_subset()... ");
459 if(!FLAC__seekable_stream_encoder_set_streamable_subset(encoder, true))
460 return die_ss_("returned false", encoder);
463 printf("testing FLAC__seekable_stream_encoder_set_do_mid_side_stereo()... ");
464 if(!FLAC__seekable_stream_encoder_set_do_mid_side_stereo(encoder, false))
465 return die_ss_("returned false", encoder);
468 printf("testing FLAC__seekable_stream_encoder_set_loose_mid_side_stereo()... ");
469 if(!FLAC__seekable_stream_encoder_set_loose_mid_side_stereo(encoder, false))
470 return die_ss_("returned false", encoder);
473 printf("testing FLAC__seekable_stream_encoder_set_channels()... ");
474 if(!FLAC__seekable_stream_encoder_set_channels(encoder, streaminfo_.data.stream_info.channels))
475 return die_ss_("returned false", encoder);
478 printf("testing FLAC__seekable_stream_encoder_set_bits_per_sample()... ");
479 if(!FLAC__seekable_stream_encoder_set_bits_per_sample(encoder, streaminfo_.data.stream_info.bits_per_sample))
480 return die_ss_("returned false", encoder);
483 printf("testing FLAC__seekable_stream_encoder_set_sample_rate()... ");
484 if(!FLAC__seekable_stream_encoder_set_sample_rate(encoder, streaminfo_.data.stream_info.sample_rate))
485 return die_ss_("returned false", encoder);
488 printf("testing FLAC__seekable_stream_encoder_set_blocksize()... ");
489 if(!FLAC__seekable_stream_encoder_set_blocksize(encoder, streaminfo_.data.stream_info.min_blocksize))
490 return die_ss_("returned false", encoder);
493 printf("testing FLAC__seekable_stream_encoder_set_max_lpc_order()... ");
494 if(!FLAC__seekable_stream_encoder_set_max_lpc_order(encoder, 0))
495 return die_ss_("returned false", encoder);
498 printf("testing FLAC__seekable_stream_encoder_set_qlp_coeff_precision()... ");
499 if(!FLAC__seekable_stream_encoder_set_qlp_coeff_precision(encoder, 0))
500 return die_ss_("returned false", encoder);
503 printf("testing FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search()... ");
504 if(!FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search(encoder, false))
505 return die_ss_("returned false", encoder);
508 printf("testing FLAC__seekable_stream_encoder_set_do_escape_coding()... ");
509 if(!FLAC__seekable_stream_encoder_set_do_escape_coding(encoder, false))
510 return die_ss_("returned false", encoder);
513 printf("testing FLAC__seekable_stream_encoder_set_do_exhaustive_model_search()... ");
514 if(!FLAC__seekable_stream_encoder_set_do_exhaustive_model_search(encoder, false))
515 return die_ss_("returned false", encoder);
518 printf("testing FLAC__seekable_stream_encoder_set_min_residual_partition_order()... ");
519 if(!FLAC__seekable_stream_encoder_set_min_residual_partition_order(encoder, 0))
520 return die_ss_("returned false", encoder);
523 printf("testing FLAC__seekable_stream_encoder_set_max_residual_partition_order()... ");
524 if(!FLAC__seekable_stream_encoder_set_max_residual_partition_order(encoder, 0))
525 return die_ss_("returned false", encoder);
528 printf("testing FLAC__seekable_stream_encoder_set_rice_parameter_search_dist()... ");
529 if(!FLAC__seekable_stream_encoder_set_rice_parameter_search_dist(encoder, 0))
530 return die_ss_("returned false", encoder);
533 printf("testing FLAC__seekable_stream_encoder_set_total_samples_estimate()... ");
534 if(!FLAC__seekable_stream_encoder_set_total_samples_estimate(encoder, streaminfo_.data.stream_info.total_samples))
535 return die_ss_("returned false", encoder);
538 printf("testing FLAC__seekable_stream_encoder_set_metadata()... ");
539 if(!FLAC__seekable_stream_encoder_set_metadata(encoder, metadata_sequence_, num_metadata_))
540 return die_ss_("returned false", encoder);
543 printf("testing FLAC__seekable_stream_encoder_set_seek_callback()... ");
544 if(!FLAC__seekable_stream_encoder_set_seek_callback(encoder, seekable_stream_encoder_seek_callback_))
545 return die_ss_("returned false", encoder);
548 printf("testing FLAC__seekable_stream_encoder_set_write_callback()... ");
549 if(!FLAC__seekable_stream_encoder_set_write_callback(encoder, seekable_stream_encoder_write_callback_))
550 return die_ss_("returned false", encoder);
553 printf("testing FLAC__seekable_stream_encoder_set_client_data()... ");
554 if(!FLAC__seekable_stream_encoder_set_client_data(encoder, 0))
555 return die_ss_("returned false", encoder);
558 printf("testing FLAC__seekable_stream_encoder_init()... ");
559 if(FLAC__seekable_stream_encoder_init(encoder) != FLAC__SEEKABLE_STREAM_ENCODER_OK)
560 return die_ss_(0, encoder);
563 printf("testing FLAC__seekable_stream_encoder_get_state()... ");
564 state = FLAC__seekable_stream_encoder_get_state(encoder);
565 printf("returned state = %u (%s)... OK\n", (unsigned)state, FLAC__SeekableStreamEncoderStateString[state]);
567 printf("testing FLAC__seekable_stream_encoder_get_stream_encoder_state()... ");
568 state_ = FLAC__seekable_stream_encoder_get_stream_encoder_state(encoder);
569 printf("returned state = %u (%s)... OK\n", (unsigned)state_, FLAC__StreamEncoderStateString[state_]);
571 printf("testing FLAC__seekable_stream_encoder_get_verify_decoder_state()... ");
572 dstate = FLAC__seekable_stream_encoder_get_verify_decoder_state(encoder);
573 printf("returned state = %u (%s)... OK\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
576 FLAC__uint64 absolute_sample;
577 unsigned frame_number;
580 FLAC__int32 expected;
583 printf("testing FLAC__seekable_stream_encoder_get_verify_decoder_error_stats()... ");
584 FLAC__seekable_stream_encoder_get_verify_decoder_error_stats(encoder, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
588 printf("testing FLAC__seekable_stream_encoder_get_verify()... ");
589 if(FLAC__seekable_stream_encoder_get_verify(encoder) != true) {
590 printf("FAILED, expected true, got false\n");
595 printf("testing FLAC__seekable_stream_encoder_get_streamable_subset()... ");
596 if(FLAC__seekable_stream_encoder_get_streamable_subset(encoder) != true) {
597 printf("FAILED, expected true, got false\n");
602 printf("testing FLAC__seekable_stream_encoder_get_do_mid_side_stereo()... ");
603 if(FLAC__seekable_stream_encoder_get_do_mid_side_stereo(encoder) != false) {
604 printf("FAILED, expected false, got true\n");
609 printf("testing FLAC__seekable_stream_encoder_get_loose_mid_side_stereo()... ");
610 if(FLAC__seekable_stream_encoder_get_loose_mid_side_stereo(encoder) != false) {
611 printf("FAILED, expected false, got true\n");
616 printf("testing FLAC__seekable_stream_encoder_get_channels()... ");
617 if(FLAC__seekable_stream_encoder_get_channels(encoder) != streaminfo_.data.stream_info.channels) {
618 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, FLAC__seekable_stream_encoder_get_channels(encoder));
623 printf("testing FLAC__seekable_stream_encoder_get_bits_per_sample()... ");
624 if(FLAC__seekable_stream_encoder_get_bits_per_sample(encoder) != streaminfo_.data.stream_info.bits_per_sample) {
625 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, FLAC__seekable_stream_encoder_get_bits_per_sample(encoder));
630 printf("testing FLAC__seekable_stream_encoder_get_sample_rate()... ");
631 if(FLAC__seekable_stream_encoder_get_sample_rate(encoder) != streaminfo_.data.stream_info.sample_rate) {
632 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, FLAC__seekable_stream_encoder_get_sample_rate(encoder));
637 printf("testing FLAC__seekable_stream_encoder_get_blocksize()... ");
638 if(FLAC__seekable_stream_encoder_get_blocksize(encoder) != streaminfo_.data.stream_info.min_blocksize) {
639 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, FLAC__seekable_stream_encoder_get_blocksize(encoder));
644 printf("testing FLAC__seekable_stream_encoder_get_max_lpc_order()... ");
645 if(FLAC__seekable_stream_encoder_get_max_lpc_order(encoder) != 0) {
646 printf("FAILED, expected %u, got %u\n", 0, FLAC__seekable_stream_encoder_get_max_lpc_order(encoder));
651 printf("testing FLAC__seekable_stream_encoder_get_qlp_coeff_precision()... ");
652 (void)FLAC__seekable_stream_encoder_get_qlp_coeff_precision(encoder);
653 /* we asked the encoder to auto select this so we accept anything */
656 printf("testing FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search()... ");
657 if(FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search(encoder) != false) {
658 printf("FAILED, expected false, got true\n");
663 printf("testing FLAC__seekable_stream_encoder_get_do_escape_coding()... ");
664 if(FLAC__seekable_stream_encoder_get_do_escape_coding(encoder) != false) {
665 printf("FAILED, expected false, got true\n");
670 printf("testing FLAC__seekable_stream_encoder_get_do_exhaustive_model_search()... ");
671 if(FLAC__seekable_stream_encoder_get_do_exhaustive_model_search(encoder) != false) {
672 printf("FAILED, expected false, got true\n");
677 printf("testing FLAC__seekable_stream_encoder_get_min_residual_partition_order()... ");
678 if(FLAC__seekable_stream_encoder_get_min_residual_partition_order(encoder) != 0) {
679 printf("FAILED, expected %u, got %u\n", 0, FLAC__seekable_stream_encoder_get_min_residual_partition_order(encoder));
684 printf("testing FLAC__seekable_stream_encoder_get_max_residual_partition_order()... ");
685 if(FLAC__seekable_stream_encoder_get_max_residual_partition_order(encoder) != 0) {
686 printf("FAILED, expected %u, got %u\n", 0, FLAC__seekable_stream_encoder_get_max_residual_partition_order(encoder));
691 printf("testing FLAC__seekable_stream_encoder_get_rice_parameter_search_dist()... ");
692 if(FLAC__seekable_stream_encoder_get_rice_parameter_search_dist(encoder) != 0) {
693 printf("FAILED, expected %u, got %u\n", 0, FLAC__seekable_stream_encoder_get_rice_parameter_search_dist(encoder));
698 printf("testing FLAC__seekable_stream_encoder_get_total_samples_estimate()... ");
699 if(FLAC__seekable_stream_encoder_get_total_samples_estimate(encoder) != streaminfo_.data.stream_info.total_samples) {
700 printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, FLAC__seekable_stream_encoder_get_total_samples_estimate(encoder));
705 /* init the dummy sample buffer */
706 for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
709 printf("testing FLAC__seekable_stream_encoder_process()... ");
710 if(!FLAC__seekable_stream_encoder_process(encoder, (const FLAC__int32 * const *)samples_array, sizeof(samples) / sizeof(FLAC__int32)))
711 return die_ss_("returned false", encoder);
714 printf("testing FLAC__seekable_stream_encoder_process_interleaved()... ");
715 if(!FLAC__seekable_stream_encoder_process_interleaved(encoder, samples, sizeof(samples) / sizeof(FLAC__int32)))
716 return die_ss_("returned false", encoder);
719 printf("testing FLAC__seekable_stream_encoder_finish()... ");
720 FLAC__seekable_stream_encoder_finish(encoder);
723 printf("testing FLAC__seekable_stream_encoder_delete()... ");
724 FLAC__seekable_stream_encoder_delete(encoder);
727 printf("\nPASSED!\n");
732 static void file_encoder_progress_callback_(const FLAC__FileEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data)
734 (void)encoder, (void)bytes_written, (void)samples_written, (void)frames_written, (void)total_frames_estimate, (void)client_data;
737 static FLAC__bool test_file_encoder()
739 FLAC__FileEncoder *encoder;
740 FLAC__FileEncoderState state;
741 FLAC__SeekableStreamEncoderState state_;
742 FLAC__StreamEncoderState state__;
743 FLAC__StreamDecoderState dstate;
744 FLAC__int32 samples[1024];
745 FLAC__int32 *samples_array[1];
748 samples_array[0] = samples;
750 printf("\n+++ libFLAC unit test: FLAC__FileEncoder\n\n");
752 printf("testing FLAC__file_encoder_new()... ");
753 encoder = FLAC__file_encoder_new();
755 printf("FAILED, returned NULL\n");
760 printf("testing FLAC__file_encoder_set_verify()... ");
761 if(!FLAC__file_encoder_set_verify(encoder, true))
762 return die_f_("returned false", encoder);
765 printf("testing FLAC__file_encoder_set_streamable_subset()... ");
766 if(!FLAC__file_encoder_set_streamable_subset(encoder, true))
767 return die_f_("returned false", encoder);
770 printf("testing FLAC__file_encoder_set_do_mid_side_stereo()... ");
771 if(!FLAC__file_encoder_set_do_mid_side_stereo(encoder, false))
772 return die_f_("returned false", encoder);
775 printf("testing FLAC__file_encoder_set_loose_mid_side_stereo()... ");
776 if(!FLAC__file_encoder_set_loose_mid_side_stereo(encoder, false))
777 return die_f_("returned false", encoder);
780 printf("testing FLAC__file_encoder_set_channels()... ");
781 if(!FLAC__file_encoder_set_channels(encoder, streaminfo_.data.stream_info.channels))
782 return die_f_("returned false", encoder);
785 printf("testing FLAC__file_encoder_set_bits_per_sample()... ");
786 if(!FLAC__file_encoder_set_bits_per_sample(encoder, streaminfo_.data.stream_info.bits_per_sample))
787 return die_f_("returned false", encoder);
790 printf("testing FLAC__file_encoder_set_sample_rate()... ");
791 if(!FLAC__file_encoder_set_sample_rate(encoder, streaminfo_.data.stream_info.sample_rate))
792 return die_f_("returned false", encoder);
795 printf("testing FLAC__file_encoder_set_blocksize()... ");
796 if(!FLAC__file_encoder_set_blocksize(encoder, streaminfo_.data.stream_info.min_blocksize))
797 return die_f_("returned false", encoder);
800 printf("testing FLAC__file_encoder_set_max_lpc_order()... ");
801 if(!FLAC__file_encoder_set_max_lpc_order(encoder, 0))
802 return die_f_("returned false", encoder);
805 printf("testing FLAC__file_encoder_set_qlp_coeff_precision()... ");
806 if(!FLAC__file_encoder_set_qlp_coeff_precision(encoder, 0))
807 return die_f_("returned false", encoder);
810 printf("testing FLAC__file_encoder_set_do_qlp_coeff_prec_search()... ");
811 if(!FLAC__file_encoder_set_do_qlp_coeff_prec_search(encoder, false))
812 return die_f_("returned false", encoder);
815 printf("testing FLAC__file_encoder_set_do_escape_coding()... ");
816 if(!FLAC__file_encoder_set_do_escape_coding(encoder, false))
817 return die_f_("returned false", encoder);
820 printf("testing FLAC__file_encoder_set_do_exhaustive_model_search()... ");
821 if(!FLAC__file_encoder_set_do_exhaustive_model_search(encoder, false))
822 return die_f_("returned false", encoder);
825 printf("testing FLAC__file_encoder_set_min_residual_partition_order()... ");
826 if(!FLAC__file_encoder_set_min_residual_partition_order(encoder, 0))
827 return die_f_("returned false", encoder);
830 printf("testing FLAC__file_encoder_set_max_residual_partition_order()... ");
831 if(!FLAC__file_encoder_set_max_residual_partition_order(encoder, 0))
832 return die_f_("returned false", encoder);
835 printf("testing FLAC__file_encoder_set_rice_parameter_search_dist()... ");
836 if(!FLAC__file_encoder_set_rice_parameter_search_dist(encoder, 0))
837 return die_f_("returned false", encoder);
840 printf("testing FLAC__file_encoder_set_total_samples_estimate()... ");
841 if(!FLAC__file_encoder_set_total_samples_estimate(encoder, streaminfo_.data.stream_info.total_samples))
842 return die_f_("returned false", encoder);
845 printf("testing FLAC__file_encoder_set_metadata()... ");
846 if(!FLAC__file_encoder_set_metadata(encoder, metadata_sequence_, num_metadata_))
847 return die_f_("returned false", encoder);
850 printf("testing FLAC__file_encoder_set_filename()... ");
851 if(!FLAC__file_encoder_set_filename(encoder, flacfilename_))
852 return die_f_("returned false", encoder);
855 printf("testing FLAC__file_encoder_set_progress_callback()... ");
856 if(!FLAC__file_encoder_set_progress_callback(encoder, file_encoder_progress_callback_))
857 return die_f_("returned false", encoder);
860 printf("testing FLAC__file_encoder_set_client_data()... ");
861 if(!FLAC__file_encoder_set_client_data(encoder, 0))
862 return die_f_("returned false", encoder);
865 printf("testing FLAC__file_encoder_init()... ");
866 if(FLAC__file_encoder_init(encoder) != FLAC__FILE_ENCODER_OK)
867 return die_f_(0, encoder);
870 printf("testing FLAC__file_encoder_get_state()... ");
871 state = FLAC__file_encoder_get_state(encoder);
872 printf("returned state = %u (%s)... OK\n", (unsigned)state, FLAC__FileEncoderStateString[state]);
874 printf("testing FLAC__file_encoder_get_seekable_stream_encoder_state()... ");
875 state_ = FLAC__file_encoder_get_seekable_stream_encoder_state(encoder);
876 printf("returned state = %u (%s)... OK\n", (unsigned)state_, FLAC__SeekableStreamEncoderStateString[state_]);
878 printf("testing FLAC__file_encoder_get_stream_encoder_state()... ");
879 state__ = FLAC__file_encoder_get_stream_encoder_state(encoder);
880 printf("returned state = %u (%s)... OK\n", (unsigned)state__, FLAC__StreamEncoderStateString[state__]);
882 printf("testing FLAC__file_encoder_get_verify_decoder_state()... ");
883 dstate = FLAC__file_encoder_get_verify_decoder_state(encoder);
884 printf("returned state = %u (%s)... OK\n", (unsigned)dstate, FLAC__StreamDecoderStateString[dstate]);
887 FLAC__uint64 absolute_sample;
888 unsigned frame_number;
891 FLAC__int32 expected;
894 printf("testing FLAC__file_encoder_get_verify_decoder_error_stats()... ");
895 FLAC__file_encoder_get_verify_decoder_error_stats(encoder, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
899 printf("testing FLAC__file_encoder_get_verify()... ");
900 if(FLAC__file_encoder_get_verify(encoder) != true) {
901 printf("FAILED, expected true, got false\n");
906 printf("testing FLAC__file_encoder_get_streamable_subset()... ");
907 if(FLAC__file_encoder_get_streamable_subset(encoder) != true) {
908 printf("FAILED, expected true, got false\n");
913 printf("testing FLAC__file_encoder_get_do_mid_side_stereo()... ");
914 if(FLAC__file_encoder_get_do_mid_side_stereo(encoder) != false) {
915 printf("FAILED, expected false, got true\n");
920 printf("testing FLAC__file_encoder_get_loose_mid_side_stereo()... ");
921 if(FLAC__file_encoder_get_loose_mid_side_stereo(encoder) != false) {
922 printf("FAILED, expected false, got true\n");
927 printf("testing FLAC__file_encoder_get_channels()... ");
928 if(FLAC__file_encoder_get_channels(encoder) != streaminfo_.data.stream_info.channels) {
929 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.channels, FLAC__file_encoder_get_channels(encoder));
934 printf("testing FLAC__file_encoder_get_bits_per_sample()... ");
935 if(FLAC__file_encoder_get_bits_per_sample(encoder) != streaminfo_.data.stream_info.bits_per_sample) {
936 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.bits_per_sample, FLAC__file_encoder_get_bits_per_sample(encoder));
941 printf("testing FLAC__file_encoder_get_sample_rate()... ");
942 if(FLAC__file_encoder_get_sample_rate(encoder) != streaminfo_.data.stream_info.sample_rate) {
943 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.sample_rate, FLAC__file_encoder_get_sample_rate(encoder));
948 printf("testing FLAC__file_encoder_get_blocksize()... ");
949 if(FLAC__file_encoder_get_blocksize(encoder) != streaminfo_.data.stream_info.min_blocksize) {
950 printf("FAILED, expected %u, got %u\n", streaminfo_.data.stream_info.min_blocksize, FLAC__file_encoder_get_blocksize(encoder));
955 printf("testing FLAC__file_encoder_get_max_lpc_order()... ");
956 if(FLAC__file_encoder_get_max_lpc_order(encoder) != 0) {
957 printf("FAILED, expected %u, got %u\n", 0, FLAC__file_encoder_get_max_lpc_order(encoder));
962 printf("testing FLAC__file_encoder_get_qlp_coeff_precision()... ");
963 (void)FLAC__file_encoder_get_qlp_coeff_precision(encoder);
964 /* we asked the encoder to auto select this so we accept anything */
967 printf("testing FLAC__file_encoder_get_do_qlp_coeff_prec_search()... ");
968 if(FLAC__file_encoder_get_do_qlp_coeff_prec_search(encoder) != false) {
969 printf("FAILED, expected false, got true\n");
974 printf("testing FLAC__file_encoder_get_do_escape_coding()... ");
975 if(FLAC__file_encoder_get_do_escape_coding(encoder) != false) {
976 printf("FAILED, expected false, got true\n");
981 printf("testing FLAC__file_encoder_get_do_exhaustive_model_search()... ");
982 if(FLAC__file_encoder_get_do_exhaustive_model_search(encoder) != false) {
983 printf("FAILED, expected false, got true\n");
988 printf("testing FLAC__file_encoder_get_min_residual_partition_order()... ");
989 if(FLAC__file_encoder_get_min_residual_partition_order(encoder) != 0) {
990 printf("FAILED, expected %u, got %u\n", 0, FLAC__file_encoder_get_min_residual_partition_order(encoder));
995 printf("testing FLAC__file_encoder_get_max_residual_partition_order()... ");
996 if(FLAC__file_encoder_get_max_residual_partition_order(encoder) != 0) {
997 printf("FAILED, expected %u, got %u\n", 0, FLAC__file_encoder_get_max_residual_partition_order(encoder));
1002 printf("testing FLAC__file_encoder_get_rice_parameter_search_dist()... ");
1003 if(FLAC__file_encoder_get_rice_parameter_search_dist(encoder) != 0) {
1004 printf("FAILED, expected %u, got %u\n", 0, FLAC__file_encoder_get_rice_parameter_search_dist(encoder));
1009 printf("testing FLAC__file_encoder_get_total_samples_estimate()... ");
1010 if(FLAC__file_encoder_get_total_samples_estimate(encoder) != streaminfo_.data.stream_info.total_samples) {
1011 printf("FAILED, expected %llu, got %llu\n", streaminfo_.data.stream_info.total_samples, FLAC__file_encoder_get_total_samples_estimate(encoder));
1016 /* init the dummy sample buffer */
1017 for(i = 0; i < sizeof(samples) / sizeof(FLAC__int32); i++)
1020 printf("testing FLAC__file_encoder_process()... ");
1021 if(!FLAC__file_encoder_process(encoder, (const FLAC__int32 * const *)samples_array, sizeof(samples) / sizeof(FLAC__int32)))
1022 return die_f_("returned false", encoder);
1025 printf("testing FLAC__file_encoder_process_interleaved()... ");
1026 if(!FLAC__file_encoder_process_interleaved(encoder, samples, sizeof(samples) / sizeof(FLAC__int32)))
1027 return die_f_("returned false", encoder);
1030 printf("testing FLAC__file_encoder_finish()... ");
1031 FLAC__file_encoder_finish(encoder);
1034 printf("testing FLAC__file_encoder_delete()... ");
1035 FLAC__file_encoder_delete(encoder);
1038 printf("\nPASSED!\n");
1043 FLAC__bool test_encoders()
1045 init_metadata_blocks_();
1047 if(!test_stream_encoder())
1050 if(!test_seekable_stream_encoder())
1053 if(!test_file_encoder())
1056 (void) grabbag__file_remove_file(flacfilename_);
1057 free_metadata_blocks_();