flac_bound/encoder/
callbacks.rs1#[cfg(feature = "flac")]
2use flac_sys::{FLAC__StreamEncoder, FLAC__StreamEncoderWriteStatus, FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_OK,
3 FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR};
4
5#[cfg(feature = "libflac-nobuild")]
6use libflac_sys::{FLAC__StreamEncoder, FLAC__StreamEncoderWriteStatus,
7 FLAC__STREAM_ENCODER_WRITE_STATUS_OK as FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_OK,
8 FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR as FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR};
9
10use std::os::raw::{c_uint, c_void};
11use std::io::Write;
12use std::slice;
13
14
15pub struct WriteWrapper<'out>(pub &'out mut dyn Write);
29
30
31pub unsafe extern "C" fn flac_encoder_write_write_callback(_: *const FLAC__StreamEncoder, buffer: *const u8, bytes: usize, _: c_uint, _: c_uint,
32 client_data: *mut c_void)
33 -> FLAC__StreamEncoderWriteStatus {
34 let out = &mut (*(client_data as *mut WriteWrapper<'static>)).0;
35
36 match out.write_all(slice::from_raw_parts(buffer, bytes)) {
37 Ok(_) => FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_OK,
38 Err(_) => FLAC__StreamEncoderWriteStatus_FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR,
39 }
40}