static FLAC__StreamEncoderWriteStatus encoder_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) { encoder_client_struct *ecd = (encoder_client_struct*)client_data; (void)encoder, (void)samples, (void)current_frame; if(local__fwrite(buffer, 1, bytes, ecd->file) != bytes) return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; else return FLAC__STREAM_ENCODER_WRITE_STATUS_OK; }
FLAC__StreamEncoderWriteStatus write_callback_(const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) { FLAC__FileEncoder *file_encoder = (FLAC__FileEncoder*)client_data; (void)encoder, (void)samples, (void)current_frame; FLAC__ASSERT(0 != file_encoder); if(local__fwrite(buffer, sizeof(FLAC__byte), bytes, file_encoder->private_->file) == bytes) { file_encoder->private_->bytes_written += bytes; file_encoder->private_->samples_written += samples; /* we keep a high watermark on the number of frames written because * when the encoder goes back to write metadata, 'current_frame' * will drop back to 0. */ file_encoder->private_->frames_written = max(file_encoder->private_->frames_written, current_frame+1); if(0 != file_encoder->private_->progress_callback && samples > 0) file_encoder->private_->progress_callback(file_encoder, file_encoder->private_->bytes_written, file_encoder->private_->samples_written, file_encoder->private_->frames_written, file_encoder->private_->total_frames_estimate, file_encoder->private_->client_data); return FLAC__STREAM_ENCODER_WRITE_STATUS_OK; } else return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; }