49 const uint8_t *src_buffer,
size_t src_size)
51 FLAC__StreamDecoder *decoder = NULL;
52 FLAC__StreamDecoderInitStatus init_status = FLAC__STREAM_DECODER_INIT_STATUS_OK;
56 if(ctx == NULL)
return 0;
68 decoder = FLAC__stream_decoder_new();
76 FLAC__stream_decoder_set_md5_checking(decoder,
false);
81 if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK)
83 FLAC__stream_decoder_delete(decoder);
88 FLAC__bool ok = FLAC__stream_decoder_process_until_end_of_stream(decoder);
90 FLAC__stream_decoder_delete(decoder);
93 int had_error = ctx->
error;
97 if(!ok || had_error)
return 0;
181 uint8_t *dst_buffer,
size_t dst_size,
const uint8_t *src_buffer,
size_t src_size, uint32_t blocksize,
182 int32_t do_mid_side_stereo, int32_t loose_mid_side_stereo,
const char *apodization, uint32_t max_lpc_order,
183 uint32_t qlp_coeff_precision, int32_t do_qlp_coeff_prec_search, int32_t do_exhaustive_model_search,
184 uint32_t min_residual_partition_order, uint32_t max_residual_partition_order,
const char *application_id,
185 uint32_t application_id_len)
187 FLAC__StreamEncoder *encoder = NULL;
189 FLAC__StreamEncoderInitStatus init_status = FLAC__STREAM_ENCODER_INIT_STATUS_OK;
191 FLAC__int32 *pcm = NULL;
193 int16_t *buffer16 = (int16_t *)src_buffer;
194 FLAC__StreamMetadata *metadata[1] = {NULL};
196 if(ctx == NULL)
return 0;
208 encoder = FLAC__stream_encoder_new();
216 FLAC__bool ok =
true;
217 ok = ok && FLAC__stream_encoder_set_verify(encoder,
false);
218 ok = ok && FLAC__stream_encoder_set_streamable_subset(encoder,
false);
219 ok = ok && FLAC__stream_encoder_set_channels(encoder, 2);
220 ok = ok && FLAC__stream_encoder_set_bits_per_sample(encoder, 16);
221 ok = ok && FLAC__stream_encoder_set_sample_rate(encoder, 44100);
222 ok = ok && FLAC__stream_encoder_set_blocksize(encoder, blocksize);
223 ok = ok && FLAC__stream_encoder_set_do_mid_side_stereo(encoder, do_mid_side_stereo);
224 ok = ok && FLAC__stream_encoder_set_loose_mid_side_stereo(encoder, loose_mid_side_stereo);
225 ok = ok && FLAC__stream_encoder_set_apodization(encoder, apodization);
226 ok = ok && FLAC__stream_encoder_set_max_lpc_order(encoder, max_lpc_order);
227 ok = ok && FLAC__stream_encoder_set_qlp_coeff_precision(encoder, qlp_coeff_precision);
228 ok = ok && FLAC__stream_encoder_set_do_qlp_coeff_prec_search(encoder, do_qlp_coeff_prec_search);
229 ok = ok && FLAC__stream_encoder_set_do_exhaustive_model_search(encoder, do_exhaustive_model_search);
230 ok = ok && FLAC__stream_encoder_set_min_residual_partition_order(encoder, min_residual_partition_order);
231 ok = ok && FLAC__stream_encoder_set_max_residual_partition_order(encoder, max_residual_partition_order);
232 ok = ok && FLAC__stream_encoder_set_total_samples_estimate(encoder, src_size / 4);
236 FLAC__stream_encoder_delete(encoder);
241 if(application_id_len > 0 && application_id != NULL)
242 if((metadata[0] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_APPLICATION)) != NULL)
243 FLAC__metadata_object_application_set_data(metadata[0], (
unsigned char *)application_id, application_id_len,
246 if(metadata[0] != NULL) FLAC__stream_encoder_set_metadata(encoder, metadata, 1);
250 if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK)
252 FLAC__stream_encoder_delete(encoder);
253 if(metadata[0] != NULL) FLAC__metadata_object_delete(metadata[0]);
258 pcm = malloc((src_size / 2) *
sizeof(FLAC__int32));
262 FLAC__stream_encoder_delete(encoder);
263 if(metadata[0] != NULL) FLAC__metadata_object_delete(metadata[0]);
268 for(i = 0; i < src_size / 2; i++) pcm[i] = (FLAC__int32) * (buffer16++);
270 ok = FLAC__stream_encoder_process_interleaved(encoder, pcm, src_size / 4);
272 FLAC__stream_encoder_finish(encoder);
274 FLAC__stream_encoder_delete(encoder);
276 ret_size = ok ? ctx->
dst_pos : 0;
280 if(metadata[0] != NULL) FLAC__metadata_object_delete(metadata[0]);
size_t aaruf_flac_encode_redbook_buffer(uint8_t *dst_buffer, size_t dst_size, const uint8_t *src_buffer, size_t src_size, uint32_t blocksize, int32_t do_mid_side_stereo, int32_t loose_mid_side_stereo, const char *apodization, uint32_t max_lpc_order, uint32_t qlp_coeff_precision, int32_t do_qlp_coeff_prec_search, int32_t do_exhaustive_model_search, uint32_t min_residual_partition_order, uint32_t max_residual_partition_order, const char *application_id, uint32_t application_id_len)
Encodes a Red Book audio buffer to FLAC format.