4997 lines
231 KiB
Rust
4997 lines
231 KiB
Rust
/* automatically generated by rust-bindgen 0.72.1 */
|
|
|
|
#[repr(C)]
|
|
#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
|
pub struct __BindgenBitfieldUnit<Storage> {
|
|
storage: Storage,
|
|
}
|
|
impl<Storage> __BindgenBitfieldUnit<Storage> {
|
|
#[inline]
|
|
pub const fn new(storage: Storage) -> Self {
|
|
Self { storage }
|
|
}
|
|
}
|
|
impl<Storage> __BindgenBitfieldUnit<Storage>
|
|
where
|
|
Storage: AsRef<[u8]> + AsMut<[u8]>,
|
|
{
|
|
#[inline]
|
|
fn extract_bit(byte: u8, index: usize) -> bool {
|
|
let bit_index = if cfg!(target_endian = "big") {
|
|
7 - (index % 8)
|
|
} else {
|
|
index % 8
|
|
};
|
|
let mask = 1 << bit_index;
|
|
byte & mask == mask
|
|
}
|
|
#[inline]
|
|
pub fn get_bit(&self, index: usize) -> bool {
|
|
debug_assert!(index / 8 < self.storage.as_ref().len());
|
|
let byte_index = index / 8;
|
|
let byte = self.storage.as_ref()[byte_index];
|
|
Self::extract_bit(byte, index)
|
|
}
|
|
#[inline]
|
|
pub unsafe fn raw_get_bit(this: *const Self, index: usize) -> bool {
|
|
debug_assert!(index / 8 < core::mem::size_of::<Storage>());
|
|
let byte_index = index / 8;
|
|
let byte = unsafe {
|
|
*(core::ptr::addr_of!((*this).storage) as *const u8).offset(byte_index as isize)
|
|
};
|
|
Self::extract_bit(byte, index)
|
|
}
|
|
#[inline]
|
|
fn change_bit(byte: u8, index: usize, val: bool) -> u8 {
|
|
let bit_index = if cfg!(target_endian = "big") {
|
|
7 - (index % 8)
|
|
} else {
|
|
index % 8
|
|
};
|
|
let mask = 1 << bit_index;
|
|
if val { byte | mask } else { byte & !mask }
|
|
}
|
|
#[inline]
|
|
pub fn set_bit(&mut self, index: usize, val: bool) {
|
|
debug_assert!(index / 8 < self.storage.as_ref().len());
|
|
let byte_index = index / 8;
|
|
let byte = &mut self.storage.as_mut()[byte_index];
|
|
*byte = Self::change_bit(*byte, index, val);
|
|
}
|
|
#[inline]
|
|
pub unsafe fn raw_set_bit(this: *mut Self, index: usize, val: bool) {
|
|
debug_assert!(index / 8 < core::mem::size_of::<Storage>());
|
|
let byte_index = index / 8;
|
|
let byte = unsafe {
|
|
(core::ptr::addr_of_mut!((*this).storage) as *mut u8).offset(byte_index as isize)
|
|
};
|
|
unsafe { *byte = Self::change_bit(*byte, index, val) };
|
|
}
|
|
#[inline]
|
|
pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
|
|
debug_assert!(bit_width <= 64);
|
|
debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
|
|
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
|
|
let mut val = 0;
|
|
for i in 0..(bit_width as usize) {
|
|
if self.get_bit(i + bit_offset) {
|
|
let index = if cfg!(target_endian = "big") {
|
|
bit_width as usize - 1 - i
|
|
} else {
|
|
i
|
|
};
|
|
val |= 1 << index;
|
|
}
|
|
}
|
|
val
|
|
}
|
|
#[inline]
|
|
pub unsafe fn raw_get(this: *const Self, bit_offset: usize, bit_width: u8) -> u64 {
|
|
debug_assert!(bit_width <= 64);
|
|
debug_assert!(bit_offset / 8 < core::mem::size_of::<Storage>());
|
|
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= core::mem::size_of::<Storage>());
|
|
let mut val = 0;
|
|
for i in 0..(bit_width as usize) {
|
|
if unsafe { Self::raw_get_bit(this, i + bit_offset) } {
|
|
let index = if cfg!(target_endian = "big") {
|
|
bit_width as usize - 1 - i
|
|
} else {
|
|
i
|
|
};
|
|
val |= 1 << index;
|
|
}
|
|
}
|
|
val
|
|
}
|
|
#[inline]
|
|
pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
|
|
debug_assert!(bit_width <= 64);
|
|
debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
|
|
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
|
|
for i in 0..(bit_width as usize) {
|
|
let mask = 1 << i;
|
|
let val_bit_is_set = val & mask == mask;
|
|
let index = if cfg!(target_endian = "big") {
|
|
bit_width as usize - 1 - i
|
|
} else {
|
|
i
|
|
};
|
|
self.set_bit(index + bit_offset, val_bit_is_set);
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn raw_set(this: *mut Self, bit_offset: usize, bit_width: u8, val: u64) {
|
|
debug_assert!(bit_width <= 64);
|
|
debug_assert!(bit_offset / 8 < core::mem::size_of::<Storage>());
|
|
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= core::mem::size_of::<Storage>());
|
|
for i in 0..(bit_width as usize) {
|
|
let mask = 1 << i;
|
|
let val_bit_is_set = val & mask == mask;
|
|
let index = if cfg!(target_endian = "big") {
|
|
bit_width as usize - 1 - i
|
|
} else {
|
|
i
|
|
};
|
|
unsafe { Self::raw_set_bit(this, index + bit_offset, val_bit_is_set) };
|
|
}
|
|
}
|
|
}
|
|
pub const BURN_CDROM: u32 = 0;
|
|
pub const BURN_CDI: u32 = 16;
|
|
pub const BURN_CDXA: u32 = 32;
|
|
pub const BURN_POS_END: u32 = 100;
|
|
pub const BURN_MODE_BITS: u32 = 127;
|
|
pub const BURN_MODE0: u32 = 1;
|
|
pub const BURN_MODE_RAW: u32 = 2;
|
|
pub const BURN_MODE1: u32 = 4;
|
|
pub const BURN_MODE2: u32 = 8;
|
|
pub const BURN_FORM1: u32 = 16;
|
|
pub const BURN_FORM2: u32 = 32;
|
|
pub const BURN_AUDIO: u32 = 64;
|
|
pub const BURN_4CH: u32 = 128;
|
|
pub const BURN_COPY: u32 = 256;
|
|
pub const BURN_PREEMPHASIS: u32 = 512;
|
|
pub const BURN_SUBCODE_P16: u32 = 1024;
|
|
pub const BURN_SUBCODE_P96: u32 = 2048;
|
|
pub const BURN_SUBCODE_R96: u32 = 4096;
|
|
pub const BURN_SCMS: u32 = 8192;
|
|
pub const BURN_DRIVE_WHITELIST_LEN: u32 = 255;
|
|
pub const BURN_DRIVE_ADR_LEN: u32 = 1024;
|
|
pub const BURN_FORMAT_IS_UNFORMATTED: u32 = 1;
|
|
pub const BURN_FORMAT_IS_FORMATTED: u32 = 2;
|
|
pub const BURN_FORMAT_IS_UNKNOWN: u32 = 3;
|
|
pub const BURN_REASONS_LEN: u32 = 4096;
|
|
pub const BURN_CDTEXT_NUM_GENRES: u32 = 28;
|
|
pub const BURN_HEADER_VERSION_MAJOR: u32 = 1;
|
|
pub const BURN_HEADER_VERSION_MINOR: u32 = 5;
|
|
pub const BURN_HEADER_VERSION_MICRO: u32 = 6;
|
|
pub const BURN_MSGS_MESSAGE_LEN: u32 = 4096;
|
|
pub const LIBDAX_AUDIOXTR_STRLEN: u32 = 4096;
|
|
pub type __off_t = ::std::os::raw::c_long;
|
|
pub type __time_t = ::std::os::raw::c_long;
|
|
pub type __suseconds_t = ::std::os::raw::c_long;
|
|
pub type off_t = __off_t;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct timeval {
|
|
pub tv_sec: __time_t,
|
|
pub tv_usec: __suseconds_t,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of timeval"][::std::mem::size_of::<timeval>() - 16usize];
|
|
["Alignment of timeval"][::std::mem::align_of::<timeval>() - 8usize];
|
|
["Offset of field: timeval::tv_sec"][::std::mem::offset_of!(timeval, tv_sec) - 0usize];
|
|
["Offset of field: timeval::tv_usec"][::std::mem::offset_of!(timeval, tv_usec) - 8usize];
|
|
};
|
|
/// References a physical drive in the system
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_drive {
|
|
_unused: [u8; 0],
|
|
}
|
|
/// References a whole disc
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_disc {
|
|
_unused: [u8; 0],
|
|
}
|
|
/// References a single session on a disc
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_session {
|
|
_unused: [u8; 0],
|
|
}
|
|
/// References a single track on a disc
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_track {
|
|
_unused: [u8; 0],
|
|
}
|
|
/// References a set of write parameters
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_write_opts {
|
|
_unused: [u8; 0],
|
|
}
|
|
/// Packet writing.
|
|
/// currently unsupported, (for DVD Incremental Streaming use TAO)
|
|
pub const burn_write_types_BURN_WRITE_PACKET: burn_write_types = 0;
|
|
/// With CD: Track At Once recording
|
|
/// 2s gaps between tracks, no fonky lead-ins
|
|
///
|
|
/// With sequential DVD-R[W]: Incremental Streaming
|
|
/// With DVD+R and BD-R: Track of open size
|
|
/// With DVD-RAM, DVD+RW, BD-RE: Random Writeable (used sequentially)
|
|
/// With overwritable DVD-RW: Rigid Restricted Overwrite
|
|
pub const burn_write_types_BURN_WRITE_TAO: burn_write_types = 1;
|
|
/// With CD: Session At Once
|
|
/// Block type MUST be BURN_BLOCK_SAO
|
|
/// ts A70122: Currently not capable of mixing data and audio tracks.
|
|
///
|
|
/// With sequential DVD-R[W]: Disc-at-once, DAO
|
|
/// Single session, single track, fixed size mandatory, (-dvd-compat)
|
|
/// With other DVD or BD media: same as BURN_WRITE_TAO but may demand
|
|
/// that track size is known in advance.
|
|
pub const burn_write_types_BURN_WRITE_SAO: burn_write_types = 2;
|
|
/// With CD: Raw disc at once recording.
|
|
/// all subcodes must be provided by lib or user
|
|
/// only raw block types are supported
|
|
/// With DVD and BD media: not supported.
|
|
///
|
|
/// ts A90901: This had been disabled because its implementation
|
|
/// relied on code from cdrdao which is not understood
|
|
/// currently.
|
|
/// A burn run will abort with \"FATAL\" error message
|
|
/// if this mode is attempted.
|
|
/// @since 0.7.2
|
|
/// ts A91016: Re-implemented according to ECMA-130 Annex A and B.
|
|
/// Now understood, explained and not stemming from cdrdao.
|
|
/// @since 0.7.4
|
|
pub const burn_write_types_BURN_WRITE_RAW: burn_write_types = 3;
|
|
/// In replies this indicates that not any writing will work.
|
|
/// As parameter for inquiries it indicates that no particular write
|
|
/// mode shall is specified.
|
|
/// Do not use for setting a write mode for burning. It will not work.
|
|
pub const burn_write_types_BURN_WRITE_NONE: burn_write_types = 4;
|
|
/// Possible disc writing style/modes
|
|
pub type burn_write_types = ::std::os::raw::c_uint;
|
|
/// sync, headers, edc/ecc provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_RAW0: burn_block_types = 1;
|
|
/// sync, headers, edc/ecc and p/q subs provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_RAW16: burn_block_types = 2;
|
|
/// sync, headers, edc/ecc and packed p-w subs provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_RAW96P: burn_block_types = 4;
|
|
/// sync, headers, edc/ecc and raw p-w subs provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_RAW96R: burn_block_types = 8;
|
|
/// only 2048 bytes of user data provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_MODE1: burn_block_types = 256;
|
|
/// 2336 bytes of user data provided by lib/user
|
|
pub const burn_block_types_BURN_BLOCK_MODE2R: burn_block_types = 512;
|
|
/// 2048 bytes of user data provided by lib/user
|
|
/// subheader provided in write parameters
|
|
/// are we ever going to support this shit? I vote no.
|
|
/// (supposed to be supported on all drives...)
|
|
pub const burn_block_types_BURN_BLOCK_MODE2_PATHETIC: burn_block_types = 1024;
|
|
/// 2048 bytes of data + 8 byte subheader provided by lib/user
|
|
/// hey, this is also dumb
|
|
pub const burn_block_types_BURN_BLOCK_MODE2_LAME: burn_block_types = 2048;
|
|
/// 2324 bytes of data provided by lib/user
|
|
/// subheader provided in write parameters
|
|
/// no sir, I don't like it.
|
|
pub const burn_block_types_BURN_BLOCK_MODE2_OBSCURE: burn_block_types = 4096;
|
|
/// 2332 bytes of data supplied by lib/user
|
|
/// 8 bytes sub header provided in write parameters
|
|
/// this is the second least suck mode2, and is mandatory for
|
|
/// all drives to support.
|
|
pub const burn_block_types_BURN_BLOCK_MODE2_OK: burn_block_types = 8192;
|
|
/// SAO block sizes are based on cue sheet, so use this.
|
|
pub const burn_block_types_BURN_BLOCK_SAO: burn_block_types = 16384;
|
|
/// Data format to send to the drive
|
|
pub type burn_block_types = ::std::os::raw::c_uint;
|
|
/// The current status is not yet known
|
|
pub const burn_disc_status_BURN_DISC_UNREADY: burn_disc_status = 0;
|
|
/// The drive holds a blank disc. It is ready for writing from scratch.
|
|
/// Unused multi-session media:
|
|
/// CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
|
|
/// Blanked multi-session media (i.e. treated by burn_disc_erase())
|
|
/// CD-RW, DVD-RW
|
|
/// Overwritable media with or without valid data
|
|
/// DVD-RAM, DVD+RW, formatted DVD-RW, BD-RE
|
|
pub const burn_disc_status_BURN_DISC_BLANK: burn_disc_status = 1;
|
|
/// There is no disc at all in the drive
|
|
pub const burn_disc_status_BURN_DISC_EMPTY: burn_disc_status = 2;
|
|
/// There is an incomplete disc in the drive. It is ready for appending
|
|
/// another session.
|
|
/// Written but not yet closed multi-session media
|
|
/// CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
|
|
pub const burn_disc_status_BURN_DISC_APPENDABLE: burn_disc_status = 3;
|
|
/// There is a disc with data on it in the drive. It is usable only for
|
|
/// reading.
|
|
/// Written and closed multi-session media
|
|
/// CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
|
|
/// Read-Only media
|
|
/// CD-ROM, DVD-ROM, BD-ROM
|
|
/// Note that many DVD-ROM drives report any written media
|
|
/// as Read-Only media and not by their real media types.
|
|
pub const burn_disc_status_BURN_DISC_FULL: burn_disc_status = 4;
|
|
/// The drive was not grabbed when the status was inquired
|
|
pub const burn_disc_status_BURN_DISC_UNGRABBED: burn_disc_status = 5;
|
|
/// The media seems to be unsuitable for reading and for writing
|
|
pub const burn_disc_status_BURN_DISC_UNSUITABLE: burn_disc_status = 6;
|
|
/// Possible status of the drive in regard to the disc in it.
|
|
pub type burn_disc_status = ::std::os::raw::c_uint;
|
|
/// The source is ok
|
|
pub const burn_source_status_BURN_SOURCE_OK: burn_source_status = 0;
|
|
/// The source is at end of file
|
|
pub const burn_source_status_BURN_SOURCE_EOF: burn_source_status = 1;
|
|
/// The source is unusable
|
|
pub const burn_source_status_BURN_SOURCE_FAILED: burn_source_status = 2;
|
|
/// Possible data source return values
|
|
pub type burn_source_status = ::std::os::raw::c_uint;
|
|
/// The drive is not in an operation
|
|
pub const burn_drive_status_BURN_DRIVE_IDLE: burn_drive_status = 0;
|
|
/// The library is spawning the processes to handle a pending
|
|
/// operation (A read/write/etc is about to start but hasn't quite
|
|
/// yet)
|
|
pub const burn_drive_status_BURN_DRIVE_SPAWNING: burn_drive_status = 1;
|
|
/// The drive is reading data from a disc
|
|
pub const burn_drive_status_BURN_DRIVE_READING: burn_drive_status = 2;
|
|
/// The drive is writing data to a disc
|
|
pub const burn_drive_status_BURN_DRIVE_WRITING: burn_drive_status = 3;
|
|
/// The drive is writing Lead-In
|
|
pub const burn_drive_status_BURN_DRIVE_WRITING_LEADIN: burn_drive_status = 4;
|
|
/// The drive is writing Lead-Out
|
|
pub const burn_drive_status_BURN_DRIVE_WRITING_LEADOUT: burn_drive_status = 5;
|
|
/// The drive is erasing a disc
|
|
pub const burn_drive_status_BURN_DRIVE_ERASING: burn_drive_status = 6;
|
|
/// The drive is being grabbed
|
|
pub const burn_drive_status_BURN_DRIVE_GRABBING: burn_drive_status = 7;
|
|
/// The drive gets written zeroes before the track payload data
|
|
pub const burn_drive_status_BURN_DRIVE_WRITING_PREGAP: burn_drive_status = 8;
|
|
/// The drive is told to close a track (TAO only)
|
|
pub const burn_drive_status_BURN_DRIVE_CLOSING_TRACK: burn_drive_status = 9;
|
|
/// The drive is told to close a session (TAO only)
|
|
pub const burn_drive_status_BURN_DRIVE_CLOSING_SESSION: burn_drive_status = 10;
|
|
/// The drive is formatting media
|
|
pub const burn_drive_status_BURN_DRIVE_FORMATTING: burn_drive_status = 11;
|
|
/// The drive is busy in synchronous read (if you see this then it
|
|
/// has been interrupted)
|
|
pub const burn_drive_status_BURN_DRIVE_READING_SYNC: burn_drive_status = 12;
|
|
/// The drive is busy in synchronous write (if you see this then it
|
|
/// has been interrupted)
|
|
pub const burn_drive_status_BURN_DRIVE_WRITING_SYNC: burn_drive_status = 13;
|
|
/// Possible busy states for a drive
|
|
pub type burn_drive_status = ::std::os::raw::c_uint;
|
|
/// Information about a track on a disc - this is from the q sub channel of the
|
|
/// lead-in area of a disc. The documentation here is very terse.
|
|
/// See a document such as mmc3 for proper information.
|
|
///
|
|
/// CAUTION : This structure is prone to future extension !
|
|
///
|
|
/// Do not restrict your application to unsigned char with any counter like
|
|
/// \"session\", \"point\", \"pmin\", ...
|
|
/// Do not rely on the current size of a burn_toc_entry.
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_toc_entry {
|
|
/// Session the track is in
|
|
pub session: ::std::os::raw::c_uchar,
|
|
/// Type of data. for this struct to be valid, it must be 1
|
|
pub adr: ::std::os::raw::c_uchar,
|
|
/// Type of data in the track
|
|
pub control: ::std::os::raw::c_uchar,
|
|
/// Zero. Always. Really.
|
|
pub tno: ::std::os::raw::c_uchar,
|
|
/// Track number or special information
|
|
pub point: ::std::os::raw::c_uchar,
|
|
pub min: ::std::os::raw::c_uchar,
|
|
pub sec: ::std::os::raw::c_uchar,
|
|
pub frame: ::std::os::raw::c_uchar,
|
|
pub zero: ::std::os::raw::c_uchar,
|
|
/// Track start time minutes for normal tracks
|
|
pub pmin: ::std::os::raw::c_uchar,
|
|
/// Track start time seconds for normal tracks
|
|
pub psec: ::std::os::raw::c_uchar,
|
|
/// Track start time frames for normal tracks
|
|
pub pframe: ::std::os::raw::c_uchar,
|
|
pub extensions_valid: ::std::os::raw::c_uchar,
|
|
pub session_msb: ::std::os::raw::c_uchar,
|
|
pub point_msb: ::std::os::raw::c_uchar,
|
|
pub start_lba: ::std::os::raw::c_int,
|
|
pub track_blocks: ::std::os::raw::c_int,
|
|
pub last_recorded_address: ::std::os::raw::c_int,
|
|
pub track_status_bits: ::std::os::raw::c_int,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_toc_entry"][::std::mem::size_of::<burn_toc_entry>() - 32usize];
|
|
["Alignment of burn_toc_entry"][::std::mem::align_of::<burn_toc_entry>() - 4usize];
|
|
["Offset of field: burn_toc_entry::session"]
|
|
[::std::mem::offset_of!(burn_toc_entry, session) - 0usize];
|
|
["Offset of field: burn_toc_entry::adr"][::std::mem::offset_of!(burn_toc_entry, adr) - 1usize];
|
|
["Offset of field: burn_toc_entry::control"]
|
|
[::std::mem::offset_of!(burn_toc_entry, control) - 2usize];
|
|
["Offset of field: burn_toc_entry::tno"][::std::mem::offset_of!(burn_toc_entry, tno) - 3usize];
|
|
["Offset of field: burn_toc_entry::point"]
|
|
[::std::mem::offset_of!(burn_toc_entry, point) - 4usize];
|
|
["Offset of field: burn_toc_entry::min"][::std::mem::offset_of!(burn_toc_entry, min) - 5usize];
|
|
["Offset of field: burn_toc_entry::sec"][::std::mem::offset_of!(burn_toc_entry, sec) - 6usize];
|
|
["Offset of field: burn_toc_entry::frame"]
|
|
[::std::mem::offset_of!(burn_toc_entry, frame) - 7usize];
|
|
["Offset of field: burn_toc_entry::zero"]
|
|
[::std::mem::offset_of!(burn_toc_entry, zero) - 8usize];
|
|
["Offset of field: burn_toc_entry::pmin"]
|
|
[::std::mem::offset_of!(burn_toc_entry, pmin) - 9usize];
|
|
["Offset of field: burn_toc_entry::psec"]
|
|
[::std::mem::offset_of!(burn_toc_entry, psec) - 10usize];
|
|
["Offset of field: burn_toc_entry::pframe"]
|
|
[::std::mem::offset_of!(burn_toc_entry, pframe) - 11usize];
|
|
["Offset of field: burn_toc_entry::extensions_valid"]
|
|
[::std::mem::offset_of!(burn_toc_entry, extensions_valid) - 12usize];
|
|
["Offset of field: burn_toc_entry::session_msb"]
|
|
[::std::mem::offset_of!(burn_toc_entry, session_msb) - 13usize];
|
|
["Offset of field: burn_toc_entry::point_msb"]
|
|
[::std::mem::offset_of!(burn_toc_entry, point_msb) - 14usize];
|
|
["Offset of field: burn_toc_entry::start_lba"]
|
|
[::std::mem::offset_of!(burn_toc_entry, start_lba) - 16usize];
|
|
["Offset of field: burn_toc_entry::track_blocks"]
|
|
[::std::mem::offset_of!(burn_toc_entry, track_blocks) - 20usize];
|
|
["Offset of field: burn_toc_entry::last_recorded_address"]
|
|
[::std::mem::offset_of!(burn_toc_entry, last_recorded_address) - 24usize];
|
|
["Offset of field: burn_toc_entry::track_status_bits"]
|
|
[::std::mem::offset_of!(burn_toc_entry, track_status_bits) - 28usize];
|
|
};
|
|
/// Data source interface for tracks.
|
|
/// This allows you to use arbitrary program code as provider of track input
|
|
/// data.
|
|
///
|
|
/// Objects compliant to this interface are either provided by the application
|
|
/// or by API calls of libburn: burn_fd_source_new() , burn_file_source_new(),
|
|
/// and burn_fifo_source_new().
|
|
///
|
|
/// The API calls may use any file object as data source. Consider to feed
|
|
/// an eventual custom data stream asynchronously into a pipe(2) and to let
|
|
/// libburn handle the rest.
|
|
/// In this case the following rule applies:
|
|
/// Call burn_source_free() exactly once for every source obtained from
|
|
/// libburn API. You MUST NOT otherwise use or manipulate its components.
|
|
///
|
|
/// In general, burn_source objects can be freed as soon as they are attached
|
|
/// to track objects. The track objects will keep them alive and dispose them
|
|
/// when they are no longer needed. With a fifo burn_source it makes sense to
|
|
/// keep the own reference for inquiring its state while burning is in
|
|
/// progress.
|
|
///
|
|
/// ---
|
|
///
|
|
/// The following description of burn_source applies only to application
|
|
/// implemented burn_source objects. You need not to know it for API provided
|
|
/// ones.
|
|
///
|
|
/// If you really implement an own passive data producer by this interface,
|
|
/// then beware: it can do anything and it can spoil everything.
|
|
///
|
|
/// In this case the functions (*read), (*get_size), (*set_size), (*free_data)
|
|
/// MUST be implemented by the application and attached to the object at
|
|
/// creation time.
|
|
/// Function (*read_sub) is allowed to be NULL or it MUST be implemented and
|
|
/// attached.
|
|
///
|
|
/// burn_source.refcount MUST be handled properly: If not exactly as many
|
|
/// references are freed as have been obtained, then either memory leaks or
|
|
/// corrupted memory are the consequence.
|
|
/// All objects which are referred to by *data must be kept existent until
|
|
/// (*free_data) is called via burn_source_free() by the last referer.
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_source {
|
|
/// Reference count for the data source. MUST be 1 when a new source
|
|
/// is created and thus the first reference is handed out. Increment
|
|
/// it to take more references for yourself. Use burn_source_free()
|
|
/// to destroy your references to it.
|
|
pub refcount: ::std::os::raw::c_int,
|
|
/// Read data from the source. Semantics like with read(2), but MUST
|
|
/// either deliver the full buffer as defined by size or MUST deliver
|
|
/// EOF (return 0) or failure (return -1) at this call or at the
|
|
/// next following call. I.e. the only incomplete buffer may be the
|
|
/// last one from that source.
|
|
/// libburn will read a single sector by each call to (*read).
|
|
/// The size of a sector depends on BURN_MODE_*. The known range is
|
|
/// 2048 to 2352.
|
|
///
|
|
/// If this call is reading from a pipe then it will learn
|
|
/// about the end of data only when that pipe gets closed on the
|
|
/// feeder side. So if the track size is not fixed or if the pipe
|
|
/// delivers less than the predicted amount or if the size is not
|
|
/// block aligned, then burning will halt until the input process
|
|
/// closes the pipe.
|
|
///
|
|
/// IMPORTANT:
|
|
/// If this function pointer is NULL, then the struct burn_source is of
|
|
/// version >= 1 and the job of .(*read)() is done by .(*read_xt)().
|
|
/// See below, member .version.
|
|
pub read: ::std::option::Option<
|
|
unsafe extern "C" fn(
|
|
arg1: *mut burn_source,
|
|
buffer: *mut ::std::os::raw::c_uchar,
|
|
size: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int,
|
|
>,
|
|
/// Read subchannel data from the source (NULL if lib generated)
|
|
/// WARNING: This is an obscure feature with CD raw write modes.
|
|
/// Unless you checked the libburn code for correctness in that aspect
|
|
/// you should not rely on raw writing with own subchannels.
|
|
/// ADVICE: Set this pointer to NULL.
|
|
pub read_sub: ::std::option::Option<
|
|
unsafe extern "C" fn(
|
|
arg1: *mut burn_source,
|
|
buffer: *mut ::std::os::raw::c_uchar,
|
|
size: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int,
|
|
>,
|
|
/// Get the size of the source's data. Return 0 means unpredictable
|
|
/// size. If application provided (*get_size) might return 0, then
|
|
/// the application MUST provide a fully functional (*set_size).
|
|
pub get_size: ::std::option::Option<unsafe extern "C" fn(arg1: *mut burn_source) -> off_t>,
|
|
/// Program the reply of (*get_size) to a fixed value. It is advised
|
|
/// to implement this by a attribute off_t fixed_size; in *data .
|
|
/// The read() function does not have to take into respect this fake
|
|
/// setting. It is rather a note of libburn to itself. Eventually
|
|
/// necessary truncation or padding is done in libburn. Truncation
|
|
/// is usually considered a misburn. Padding is considered ok.
|
|
///
|
|
/// libburn is supposed to work even if (*get_size) ignores the
|
|
/// setting by (*set_size). But your application will not be able to
|
|
/// enforce fixed track sizes by burn_track_set_size() and possibly
|
|
/// even padding might be left out.
|
|
pub set_size: ::std::option::Option<
|
|
unsafe extern "C" fn(source: *mut burn_source, size: off_t) -> ::std::os::raw::c_int,
|
|
>,
|
|
/// Clean up the source specific data. This function will be called
|
|
/// once by burn_source_free() when the last referer disposes the
|
|
/// source.
|
|
pub free_data: ::std::option::Option<unsafe extern "C" fn(arg1: *mut burn_source)>,
|
|
/// Next source, for when a source runs dry and padding is disabled
|
|
/// WARNING: This is an obscure feature. Set to NULL at creation and
|
|
/// from then on leave untouched and uninterpreted.
|
|
pub next: *mut burn_source,
|
|
/// Source specific data. Here the various source classes express their
|
|
/// specific properties and the instance objects store their individual
|
|
/// management data.
|
|
/// E.g. data could point to a struct like this:
|
|
/// struct app_burn_source
|
|
/// {
|
|
/// struct my_app *app_handle;
|
|
/// ... other individual source parameters ...
|
|
/// off_t fixed_size;
|
|
/// };
|
|
///
|
|
/// Function (*free_data) has to be prepared to clean up and free
|
|
/// the struct.
|
|
pub data: *mut ::std::os::raw::c_void,
|
|
/// Valid only if above member .(*read)() is NULL. This indicates a
|
|
/// version of struct burn_source younger than 0.
|
|
/// From then on, member .version tells which further members exist
|
|
/// in the memory layout of struct burn_source. libburn will only touch
|
|
/// those announced extensions.
|
|
///
|
|
/// Versions:
|
|
/// 0 has .(*read)() != NULL, not even .version is present.
|
|
/// 1 has .version, .(*read_xt)(), .(*cancel)()
|
|
pub version: ::std::os::raw::c_int,
|
|
/// This substitutes for (*read)() in versions above 0.
|
|
pub read_xt: ::std::option::Option<
|
|
unsafe extern "C" fn(
|
|
arg1: *mut burn_source,
|
|
buffer: *mut ::std::os::raw::c_uchar,
|
|
size: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int,
|
|
>,
|
|
/// Informs the burn_source that the consumer of data prematurely
|
|
/// ended reading. This call may or may not be issued by libburn
|
|
/// before (*free_data)() is called.
|
|
pub cancel: ::std::option::Option<
|
|
unsafe extern "C" fn(source: *mut burn_source) -> ::std::os::raw::c_int,
|
|
>,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_source"][::std::mem::size_of::<burn_source>() - 88usize];
|
|
["Alignment of burn_source"][::std::mem::align_of::<burn_source>() - 8usize];
|
|
["Offset of field: burn_source::refcount"]
|
|
[::std::mem::offset_of!(burn_source, refcount) - 0usize];
|
|
["Offset of field: burn_source::read"][::std::mem::offset_of!(burn_source, read) - 8usize];
|
|
["Offset of field: burn_source::read_sub"]
|
|
[::std::mem::offset_of!(burn_source, read_sub) - 16usize];
|
|
["Offset of field: burn_source::get_size"]
|
|
[::std::mem::offset_of!(burn_source, get_size) - 24usize];
|
|
["Offset of field: burn_source::set_size"]
|
|
[::std::mem::offset_of!(burn_source, set_size) - 32usize];
|
|
["Offset of field: burn_source::free_data"]
|
|
[::std::mem::offset_of!(burn_source, free_data) - 40usize];
|
|
["Offset of field: burn_source::next"][::std::mem::offset_of!(burn_source, next) - 48usize];
|
|
["Offset of field: burn_source::data"][::std::mem::offset_of!(burn_source, data) - 56usize];
|
|
["Offset of field: burn_source::version"]
|
|
[::std::mem::offset_of!(burn_source, version) - 64usize];
|
|
["Offset of field: burn_source::read_xt"]
|
|
[::std::mem::offset_of!(burn_source, read_xt) - 72usize];
|
|
["Offset of field: burn_source::cancel"][::std::mem::offset_of!(burn_source, cancel) - 80usize];
|
|
};
|
|
/// Information on a drive in the system
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_drive_info {
|
|
/// Name of the vendor of the drive
|
|
pub vendor: [::std::os::raw::c_char; 9usize],
|
|
/// Name of the drive
|
|
pub product: [::std::os::raw::c_char; 17usize],
|
|
/// Revision of the drive
|
|
pub revision: [::std::os::raw::c_char; 5usize],
|
|
/// Invalid: Was: \"Location of the drive in the filesystem.\" */
|
|
/// /** This string has no meaning any more. Once it stored the drive
|
|
/// device file address. Now always use function burn_drive_d_get_adr()
|
|
/// to inquire a device file address. ^^^^^ ALWAYS ^^^^^^^
|
|
pub location: [::std::os::raw::c_char; 17usize],
|
|
pub _bitfield_align_1: [u8; 0],
|
|
pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
|
|
/// DEPRECATED: The size of the drive's buffer (in kilobytes)
|
|
pub buffer_size: ::std::os::raw::c_int,
|
|
/// The supported block types in tao mode.
|
|
/// They should be tested with the desired block type.
|
|
/// See also burn_block_types.
|
|
pub tao_block_types: ::std::os::raw::c_int,
|
|
/// The supported block types in sao mode.
|
|
/// They should be tested with the desired block type.
|
|
/// See also burn_block_types.
|
|
pub sao_block_types: ::std::os::raw::c_int,
|
|
/// The supported block types in raw mode.
|
|
/// They should be tested with the desired block type.
|
|
/// See also burn_block_types.
|
|
pub raw_block_types: ::std::os::raw::c_int,
|
|
/// The supported block types in packet mode.
|
|
/// They should be tested with the desired block type.
|
|
/// See also burn_block_types.
|
|
pub packet_block_types: ::std::os::raw::c_int,
|
|
/// The value by which this drive can be indexed when using functions
|
|
/// in the library. This is the value to pass to all libbburn functions
|
|
/// that operate on a drive.
|
|
pub drive: *mut burn_drive,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_drive_info"][::std::mem::size_of::<burn_drive_info>() - 80usize];
|
|
["Alignment of burn_drive_info"][::std::mem::align_of::<burn_drive_info>() - 8usize];
|
|
["Offset of field: burn_drive_info::vendor"]
|
|
[::std::mem::offset_of!(burn_drive_info, vendor) - 0usize];
|
|
["Offset of field: burn_drive_info::product"]
|
|
[::std::mem::offset_of!(burn_drive_info, product) - 9usize];
|
|
["Offset of field: burn_drive_info::revision"]
|
|
[::std::mem::offset_of!(burn_drive_info, revision) - 26usize];
|
|
["Offset of field: burn_drive_info::location"]
|
|
[::std::mem::offset_of!(burn_drive_info, location) - 31usize];
|
|
["Offset of field: burn_drive_info::buffer_size"]
|
|
[::std::mem::offset_of!(burn_drive_info, buffer_size) - 52usize];
|
|
["Offset of field: burn_drive_info::tao_block_types"]
|
|
[::std::mem::offset_of!(burn_drive_info, tao_block_types) - 56usize];
|
|
["Offset of field: burn_drive_info::sao_block_types"]
|
|
[::std::mem::offset_of!(burn_drive_info, sao_block_types) - 60usize];
|
|
["Offset of field: burn_drive_info::raw_block_types"]
|
|
[::std::mem::offset_of!(burn_drive_info, raw_block_types) - 64usize];
|
|
["Offset of field: burn_drive_info::packet_block_types"]
|
|
[::std::mem::offset_of!(burn_drive_info, packet_block_types) - 68usize];
|
|
["Offset of field: burn_drive_info::drive"]
|
|
[::std::mem::offset_of!(burn_drive_info, drive) - 72usize];
|
|
};
|
|
impl burn_drive_info {
|
|
#[inline]
|
|
pub fn read_dvdram(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_read_dvdram(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(0usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn read_dvdram_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
0usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_read_dvdram_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
0usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn read_dvdr(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_read_dvdr(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(1usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn read_dvdr_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
1usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_read_dvdr_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
1usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn read_dvdrom(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_read_dvdrom(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(2usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn read_dvdrom_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
2usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_read_dvdrom_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
2usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn read_cdr(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_read_cdr(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(3usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn read_cdr_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
3usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_read_cdr_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
3usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn read_cdrw(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_read_cdrw(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(4usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn read_cdrw_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
4usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_read_cdrw_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
4usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn write_dvdram(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(5usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_write_dvdram(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(5usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn write_dvdram_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
5usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_write_dvdram_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
5usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn write_dvdr(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(6usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_write_dvdr(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(6usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn write_dvdr_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
6usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_write_dvdr_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
6usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn write_cdr(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_write_cdr(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(7usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn write_cdr_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
7usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_write_cdr_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
7usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn write_cdrw(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_write_cdrw(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(8usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn write_cdrw_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
8usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_write_cdrw_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
8usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn write_simulate(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(9usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_write_simulate(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(9usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn write_simulate_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
9usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_write_simulate_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
9usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn c2_errors(&self) -> ::std::os::raw::c_uint {
|
|
unsafe { ::std::mem::transmute(self._bitfield_1.get(10usize, 1u8) as u32) }
|
|
}
|
|
#[inline]
|
|
pub fn set_c2_errors(&mut self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
self._bitfield_1.set(10usize, 1u8, val as u64)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn c2_errors_raw(this: *const Self) -> ::std::os::raw::c_uint {
|
|
unsafe {
|
|
::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_get(
|
|
::std::ptr::addr_of!((*this)._bitfield_1),
|
|
10usize,
|
|
1u8,
|
|
) as u32)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub unsafe fn set_c2_errors_raw(this: *mut Self, val: ::std::os::raw::c_uint) {
|
|
unsafe {
|
|
let val: u32 = ::std::mem::transmute(val);
|
|
<__BindgenBitfieldUnit<[u8; 2usize]>>::raw_set(
|
|
::std::ptr::addr_of_mut!((*this)._bitfield_1),
|
|
10usize,
|
|
1u8,
|
|
val as u64,
|
|
)
|
|
}
|
|
}
|
|
#[inline]
|
|
pub fn new_bitfield_1(
|
|
read_dvdram: ::std::os::raw::c_uint,
|
|
read_dvdr: ::std::os::raw::c_uint,
|
|
read_dvdrom: ::std::os::raw::c_uint,
|
|
read_cdr: ::std::os::raw::c_uint,
|
|
read_cdrw: ::std::os::raw::c_uint,
|
|
write_dvdram: ::std::os::raw::c_uint,
|
|
write_dvdr: ::std::os::raw::c_uint,
|
|
write_cdr: ::std::os::raw::c_uint,
|
|
write_cdrw: ::std::os::raw::c_uint,
|
|
write_simulate: ::std::os::raw::c_uint,
|
|
c2_errors: ::std::os::raw::c_uint,
|
|
) -> __BindgenBitfieldUnit<[u8; 2usize]> {
|
|
let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
|
|
__bindgen_bitfield_unit.set(0usize, 1u8, {
|
|
let read_dvdram: u32 = unsafe { ::std::mem::transmute(read_dvdram) };
|
|
read_dvdram as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(1usize, 1u8, {
|
|
let read_dvdr: u32 = unsafe { ::std::mem::transmute(read_dvdr) };
|
|
read_dvdr as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(2usize, 1u8, {
|
|
let read_dvdrom: u32 = unsafe { ::std::mem::transmute(read_dvdrom) };
|
|
read_dvdrom as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(3usize, 1u8, {
|
|
let read_cdr: u32 = unsafe { ::std::mem::transmute(read_cdr) };
|
|
read_cdr as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(4usize, 1u8, {
|
|
let read_cdrw: u32 = unsafe { ::std::mem::transmute(read_cdrw) };
|
|
read_cdrw as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(5usize, 1u8, {
|
|
let write_dvdram: u32 = unsafe { ::std::mem::transmute(write_dvdram) };
|
|
write_dvdram as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(6usize, 1u8, {
|
|
let write_dvdr: u32 = unsafe { ::std::mem::transmute(write_dvdr) };
|
|
write_dvdr as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(7usize, 1u8, {
|
|
let write_cdr: u32 = unsafe { ::std::mem::transmute(write_cdr) };
|
|
write_cdr as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(8usize, 1u8, {
|
|
let write_cdrw: u32 = unsafe { ::std::mem::transmute(write_cdrw) };
|
|
write_cdrw as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(9usize, 1u8, {
|
|
let write_simulate: u32 = unsafe { ::std::mem::transmute(write_simulate) };
|
|
write_simulate as u64
|
|
});
|
|
__bindgen_bitfield_unit.set(10usize, 1u8, {
|
|
let c2_errors: u32 = unsafe { ::std::mem::transmute(c2_errors) };
|
|
c2_errors as u64
|
|
});
|
|
__bindgen_bitfield_unit
|
|
}
|
|
}
|
|
/// Operation progress report. All values are 0 based indices.
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_progress {
|
|
/// The total number of sessions
|
|
pub sessions: ::std::os::raw::c_int,
|
|
/// Current session.
|
|
pub session: ::std::os::raw::c_int,
|
|
/// The total number of tracks
|
|
pub tracks: ::std::os::raw::c_int,
|
|
/// Current track.
|
|
pub track: ::std::os::raw::c_int,
|
|
/// The total number of indices
|
|
pub indices: ::std::os::raw::c_int,
|
|
/// Current index.
|
|
pub index: ::std::os::raw::c_int,
|
|
/// The starting logical block address
|
|
pub start_sector: ::std::os::raw::c_int,
|
|
/// On write: The number of sectors.
|
|
/// On blank: 0x10000 as upper limit for relative progress steps
|
|
pub sectors: ::std::os::raw::c_int,
|
|
/// On write: The current sector being processed.
|
|
/// On blank: Relative progress steps 0 to 0x10000
|
|
pub sector: ::std::os::raw::c_int,
|
|
/// The capacity of the drive buffer
|
|
pub buffer_capacity: ::std::os::raw::c_uint,
|
|
/// The free space in the drive buffer (might be slightly outdated)
|
|
pub buffer_available: ::std::os::raw::c_uint,
|
|
/// The number of bytes sent to the drive buffer
|
|
pub buffered_bytes: off_t,
|
|
/// The minimum number of bytes stored in buffer during write.
|
|
/// (Caution: Before surely one buffer size of bytes was processed,
|
|
/// this value is 0xffffffff.)
|
|
pub buffer_min_fill: ::std::os::raw::c_uint,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_progress"][::std::mem::size_of::<burn_progress>() - 64usize];
|
|
["Alignment of burn_progress"][::std::mem::align_of::<burn_progress>() - 8usize];
|
|
["Offset of field: burn_progress::sessions"]
|
|
[::std::mem::offset_of!(burn_progress, sessions) - 0usize];
|
|
["Offset of field: burn_progress::session"]
|
|
[::std::mem::offset_of!(burn_progress, session) - 4usize];
|
|
["Offset of field: burn_progress::tracks"]
|
|
[::std::mem::offset_of!(burn_progress, tracks) - 8usize];
|
|
["Offset of field: burn_progress::track"]
|
|
[::std::mem::offset_of!(burn_progress, track) - 12usize];
|
|
["Offset of field: burn_progress::indices"]
|
|
[::std::mem::offset_of!(burn_progress, indices) - 16usize];
|
|
["Offset of field: burn_progress::index"]
|
|
[::std::mem::offset_of!(burn_progress, index) - 20usize];
|
|
["Offset of field: burn_progress::start_sector"]
|
|
[::std::mem::offset_of!(burn_progress, start_sector) - 24usize];
|
|
["Offset of field: burn_progress::sectors"]
|
|
[::std::mem::offset_of!(burn_progress, sectors) - 28usize];
|
|
["Offset of field: burn_progress::sector"]
|
|
[::std::mem::offset_of!(burn_progress, sector) - 32usize];
|
|
["Offset of field: burn_progress::buffer_capacity"]
|
|
[::std::mem::offset_of!(burn_progress, buffer_capacity) - 36usize];
|
|
["Offset of field: burn_progress::buffer_available"]
|
|
[::std::mem::offset_of!(burn_progress, buffer_available) - 40usize];
|
|
["Offset of field: burn_progress::buffered_bytes"]
|
|
[::std::mem::offset_of!(burn_progress, buffered_bytes) - 48usize];
|
|
["Offset of field: burn_progress::buffer_min_fill"]
|
|
[::std::mem::offset_of!(burn_progress, buffer_min_fill) - 56usize];
|
|
};
|
|
/// Description of a speed capability as reported by the drive in conjunction
|
|
/// with eventually loaded media. There can be more than one such object per
|
|
/// drive. So they are chained via .next and .prev , where NULL marks the end
|
|
/// of the chain. This list is set up by burn_drive_scan() and gets updated
|
|
/// by burn_drive_grab().
|
|
/// A copy may be obtained by burn_drive_get_speedlist() and disposed by
|
|
/// burn_drive_free_speedlist().
|
|
/// For technical background info see SCSI specs MMC and SPC:
|
|
/// mode page 2Ah (from SPC 5Ah MODE SENSE) , mmc3r10g.pdf , 6.3.11 Table 364
|
|
/// ACh GET PERFORMANCE, Type 03h , mmc5r03c.pdf , 6.8.5.3 Table 312
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_speed_descriptor {
|
|
/// Where this info comes from :
|
|
/// 0 = misc
|
|
/// 1 = mode page 2Ah
|
|
/// 2 = ACh GET PERFORMANCE Type 03h
|
|
/// 3 = ACh GET PERFORMANCE Type 00h Data Type 10h (read speed)
|
|
pub source: ::std::os::raw::c_int,
|
|
/// The media type that was current at the time of report
|
|
/// -2 = state unknown, -1 = no media was loaded , else see
|
|
/// burn_disc_get_profile()
|
|
pub profile_loaded: ::std::os::raw::c_int,
|
|
pub profile_name: [::std::os::raw::c_char; 80usize],
|
|
/// The attributed capacity of appropriate media in logical block units
|
|
/// i.e. 2352 raw bytes or 2048 data bytes. -1 = capacity unknown.
|
|
pub end_lba: ::std::os::raw::c_int,
|
|
/// Speed is given in 1000 bytes/s , 0 = invalid. The numbers
|
|
/// are supposed to be usable with burn_drive_set_speed()
|
|
pub write_speed: ::std::os::raw::c_int,
|
|
pub read_speed: ::std::os::raw::c_int,
|
|
/// Expert info from ACh GET PERFORMANCE and/or mode page 2Ah.
|
|
/// Expect values other than 0 or 1 to get a meaning in future.
|
|
pub wrc: ::std::os::raw::c_int,
|
|
pub exact: ::std::os::raw::c_int,
|
|
pub mrw: ::std::os::raw::c_int,
|
|
/// List chaining. Use .next until NULL to iterate over the list
|
|
pub prev: *mut burn_speed_descriptor,
|
|
pub next: *mut burn_speed_descriptor,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_speed_descriptor"][::std::mem::size_of::<burn_speed_descriptor>() - 128usize];
|
|
["Alignment of burn_speed_descriptor"]
|
|
[::std::mem::align_of::<burn_speed_descriptor>() - 8usize];
|
|
["Offset of field: burn_speed_descriptor::source"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, source) - 0usize];
|
|
["Offset of field: burn_speed_descriptor::profile_loaded"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, profile_loaded) - 4usize];
|
|
["Offset of field: burn_speed_descriptor::profile_name"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, profile_name) - 8usize];
|
|
["Offset of field: burn_speed_descriptor::end_lba"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, end_lba) - 88usize];
|
|
["Offset of field: burn_speed_descriptor::write_speed"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, write_speed) - 92usize];
|
|
["Offset of field: burn_speed_descriptor::read_speed"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, read_speed) - 96usize];
|
|
["Offset of field: burn_speed_descriptor::wrc"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, wrc) - 100usize];
|
|
["Offset of field: burn_speed_descriptor::exact"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, exact) - 104usize];
|
|
["Offset of field: burn_speed_descriptor::mrw"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, mrw) - 108usize];
|
|
["Offset of field: burn_speed_descriptor::prev"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, prev) - 112usize];
|
|
["Offset of field: burn_speed_descriptor::next"]
|
|
[::std::mem::offset_of!(burn_speed_descriptor, next) - 120usize];
|
|
};
|
|
unsafe extern "C" {
|
|
/// Initialize the library.
|
|
/// This must be called before using any other functions in the library. It
|
|
/// may be called more than once with no effect.
|
|
/// It is possible to 'restart' the library by shutting it down and
|
|
/// re-initializing it. Once this was necessary if you follow the older and
|
|
/// more general way of accessing a drive via burn_drive_scan() and
|
|
/// burn_drive_grab(). See burn_drive_scan_and_grab() with its strong
|
|
/// urges and its explanations.
|
|
/// @return Nonzero if the library was able to initialize; zero if
|
|
/// initialization failed.
|
|
pub fn burn_initialize() -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Shutdown the library.
|
|
/// This should be called before exiting your application. Make sure that all
|
|
/// drives you have grabbed are released <i>before</i> calling this.
|
|
pub fn burn_finish();
|
|
}
|
|
unsafe extern "C" {
|
|
/// Abort any running drive operation and eventually call burn_finish().
|
|
///
|
|
/// You MUST shut down the busy drives if an aborting event occurs during a
|
|
/// burn run. For that you may call this function either from your own signal
|
|
/// handling code or indirectly by activating the built-in signal handling:
|
|
/// burn_set_signal_handling(\"my_app_name : \", NULL, 0);
|
|
/// Else you may eventually call burn_drive_cancel() on the active drives and
|
|
/// wait for them to assume state BURN_DRIVE_IDLE.
|
|
/// @param patience Maximum number of seconds to wait for drives to
|
|
/// finish.
|
|
/// @since 0.7.8 :
|
|
/// If this is -1, then only the cancel operations will
|
|
/// be performed and no burn_finish() will happen.
|
|
/// @param pacifier_func If not NULL: a function to produce appeasing messages.
|
|
/// See burn_abort_pacifier() for an example.
|
|
/// @param handle Opaque handle to be used with pacifier_func
|
|
/// @return 1 ok, all went well
|
|
/// 0 had to leave a drive in unclean state
|
|
/// <0 severe error, do no use libburn again
|
|
/// @since 0.2.6
|
|
pub fn burn_abort(
|
|
patience: ::std::os::raw::c_int,
|
|
pacifier_func: ::std::option::Option<
|
|
unsafe extern "C" fn(
|
|
handle: *mut ::std::os::raw::c_void,
|
|
patience: ::std::os::raw::c_int,
|
|
elapsed: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int,
|
|
>,
|
|
handle: *mut ::std::os::raw::c_void,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// A pacifier function suitable for burn_abort.
|
|
/// @param handle If not NULL, a pointer to a text suitable for printf(\"%s\")
|
|
/// @param patience Maximum number of seconds to wait
|
|
/// @param elapsed Elapsed number of seconds
|
|
pub fn burn_abort_pacifier(
|
|
handle: *mut ::std::os::raw::c_void,
|
|
patience: ::std::os::raw::c_int,
|
|
elapsed: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// ts A61006 : This is for development only. Not suitable for applications.
|
|
/// Set the verbosity level of the library. The default value is 0, which means
|
|
/// that nothing is output on stderr. The more you increase this, the more
|
|
/// debug output should be displayed on stderr for you.
|
|
/// @param level The verbosity level desired. 0 for nothing, higher positive
|
|
/// values for more information output.
|
|
pub fn burn_set_verbosity(level: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Enable or disable logging of SCSI commands.
|
|
/// This call can be made at any time - even before burn_initialize().
|
|
/// It is in effect for all active drives and currently not very thread
|
|
/// safe for multiple drives.
|
|
/// @param flag Bitfield for control purposes. The default is 0.
|
|
/// bit0= log to file /tmp/libburn_sg_command_log
|
|
/// bit1= log to stderr
|
|
/// bit2= flush output after each line
|
|
/// @since 0.7.4
|
|
pub fn burn_set_scsi_logging(flag: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set parameters for behavior on opening device files. To be called early
|
|
/// after burn_initialize() and before any bus scan. But not mandatory at all.
|
|
/// Parameter value 1 enables a feature, 0 disables.
|
|
/// Default is (1,0,0). Have a good reason before you change it.
|
|
/// @param exclusive
|
|
/// 0 = no attempt to make drive access exclusive.
|
|
/// 1 = Try to open only devices which are not marked as busy
|
|
/// and try to mark them busy if opened successfully. (O_EXCL
|
|
/// on GNU/Linux , flock(LOCK_EX) on FreeBSD.)
|
|
/// 2 = in case of a SCSI device, also try to open exclusively
|
|
/// the matching /dev/sr, /dev/scd and /dev/st .
|
|
/// One may select a device SCSI file family by adding
|
|
/// 0 = default family
|
|
/// 4 = /dev/sr%d
|
|
/// 8 = /dev/scd%d
|
|
/// 16 = /dev/sg%d
|
|
/// Do not use other values !
|
|
/// Add 32 to demand on GNU/Linux an exclusive lock by
|
|
/// fcntl(,F_SETLK,) after open() has succeeded.
|
|
/// @param blocking Try to wait for drives which do not open immediately but
|
|
/// also do not return an error as well. (O_NONBLOCK)
|
|
/// This might stall indefinitely with /dev/hdX hard disks.
|
|
/// @param abort_on_busy Unconditionally abort process when a non blocking
|
|
/// exclusive opening attempt indicates a busy drive.
|
|
/// Use this only after thorough tests with your app.
|
|
/// @since 0.2.2
|
|
pub fn burn_preset_device_open(
|
|
exclusive: ::std::os::raw::c_int,
|
|
blocking: ::std::os::raw::c_int,
|
|
abort_on_busy: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Allows the use of media types which are implemented in libburn but not yet
|
|
/// tested. The list of those untested profiles is subject to change.
|
|
/// - Currently no media types are under test reservation -
|
|
/// If you really test such media, then please report the outcome on
|
|
/// libburn-hackers@pykix.org
|
|
/// If ever then this call should be done soon after burn_initialize() before
|
|
/// any drive scanning.
|
|
/// @param yes 1=allow all implemented profiles, 0=only tested media (default)
|
|
/// @since 0.3.4
|
|
pub fn burn_allow_untested_profiles(yes: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Acquire a drive with known device file address.
|
|
///
|
|
/// This is the sysadmin friendly way to open one drive and to leave all
|
|
/// others untouched. It bundles the following API calls to form a
|
|
/// non-obtrusive way to use libburn:
|
|
/// burn_drive_add_whitelist() , burn_drive_scan() , burn_drive_grab()
|
|
/// You are *strongly urged* to use this call whenever you know the drive
|
|
/// address in advance.
|
|
///
|
|
/// If not, then you have to use directly above calls. In that case, you are
|
|
/// strongly urged* to drop any unintended drive which will be exclusively
|
|
/// occupied and not closed by burn_drive_scan().
|
|
/// This can be done by shutting down the library including a call to
|
|
/// burn_finish(). You may later start a new libburn session and should then
|
|
/// use the function described here with an address obtained after
|
|
/// burn_drive_scan() via burn_drive_d_get_adr(drive_infos[driveno].drive,adr).
|
|
/// Another way is to drop the unwanted drives by burn_drive_info_forget().
|
|
///
|
|
/// Operating on multiple drives:
|
|
///
|
|
/// Different than with burn_drive_scan() it is allowed to call
|
|
/// burn_drive_scan_and_grab() without giving up any other scanned drives. So
|
|
/// this call can be used to get a collection of more than one acquired drives.
|
|
/// The attempt to acquire the same drive twice will fail, though.
|
|
///
|
|
/// Pseudo-drives:
|
|
///
|
|
/// burn_drive_scan_and_grab() is able to acquire virtual drives which will
|
|
/// accept options much like a MMC burner drive. Many of those options will not
|
|
/// cause any effect, though. The address of a pseudo-drive begins with
|
|
/// prefix \"stdio:\" followed by a path.
|
|
/// Examples: \"stdio:/tmp/pseudo_drive\" , \"stdio:/dev/null\" , \"stdio:-\"
|
|
///
|
|
/// If the path is empty, the result is a null-drive = drive role 0.
|
|
/// It pretends to have loaded no media and supports no reading or writing.
|
|
///
|
|
/// If the path leads to an existing regular file, or to a not yet existing
|
|
/// file, or to an existing block device, then the result is a random access
|
|
/// stdio-drive capable of reading and writing = drive role 2.
|
|
///
|
|
/// If the path leads to an existing file of any type other than directory,
|
|
/// then the result is a sequential write-only stdio-drive = drive role 3.
|
|
///
|
|
/// The special address form \"stdio:/dev/fd/{number}\" is interpreted literally
|
|
/// as reference to open file descriptor {number}. This address form coincides
|
|
/// with real files on some systems, but it is in fact hardcoded in libburn.
|
|
/// Special address \"stdio:-\" means stdout = \"stdio:/dev/fd/1\".
|
|
/// The role of such a drive is determined by the file type obtained via
|
|
/// fstat({number}).
|
|
///
|
|
/// Roles 2 and 3 perform all their eventual data transfer activities on a file
|
|
/// via standard i/o functions open(2), lseek(2), read(2), write(2), close(2).
|
|
/// The media profile is reported as 0xffff. Write space information from those
|
|
/// media is not necessarily realistic.
|
|
///
|
|
/// The capabilities of role 2 resemble DVD-RAM but it can simulate writing.
|
|
/// If the path does not exist in the filesystem yet, it is attempted to create
|
|
/// it as a regular file as soon as write operations are started.
|
|
///
|
|
/// The capabilities of role 3 resemble a blank DVD-R. Nevertheless each
|
|
/// burn_disc_write() run may only write a single track.
|
|
///
|
|
/// One may distinguish pseudo-drives from MMC drives by call
|
|
/// burn_drive_get_drive_role().
|
|
///
|
|
/// @param drive_infos On success returns a one element array with the drive
|
|
/// (cdrom/burner). Thus use with driveno 0 only. On failure
|
|
/// the array has no valid elements at all.
|
|
/// The returned array should be freed via burn_drive_info_free()
|
|
/// when it is no longer needed.
|
|
/// This is a result from call burn_drive_scan(). See there.
|
|
/// Use with driveno 0 only.
|
|
/// @param adr The device file address of the desired drive. Either once
|
|
/// obtained by burn_drive_d_get_adr() or composed skillfully by
|
|
/// application or its user. E.g. \"/dev/sr0\".
|
|
/// Consider to preprocess it by burn_drive_convert_fs_adr().
|
|
/// @param load Nonzero to make the drive attempt to load a disc (close its
|
|
/// tray door, etc).
|
|
/// @return 1 = success , 0 = drive not found , -1 = other error
|
|
/// @since 0.2.2
|
|
pub fn burn_drive_scan_and_grab(
|
|
drive_infos: *mut *mut burn_drive_info,
|
|
adr: *mut ::std::os::raw::c_char,
|
|
load: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Add a device to the list of permissible drives. As soon as some entry is in
|
|
/// the whitelist all non-listed drives are banned from scanning.
|
|
/// @return 1 success, <=0 failure
|
|
/// @since 0.2.2
|
|
pub fn burn_drive_add_whitelist(
|
|
device_address: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove all drives from whitelist. This enables all possible drives.
|
|
pub fn burn_drive_clear_whitelist();
|
|
}
|
|
unsafe extern "C" {
|
|
/// Scan for drives. This function MUST be called until it returns nonzero.
|
|
/// In case of re-scanning:
|
|
/// All pointers to struct burn_drive and all struct burn_drive_info arrays
|
|
/// are invalidated by using this function. Do NOT store drive pointers across
|
|
/// calls to this function !
|
|
/// To avoid invalid pointers one MUST free all burn_drive_info arrays
|
|
/// by burn_drive_info_free() before calling burn_drive_scan() a second time.
|
|
/// If there are drives left, then burn_drive_scan() will refuse to work.
|
|
///
|
|
/// After this call all drives depicted by the returned array are subject
|
|
/// to eventual (O_EXCL) locking. See burn_preset_device_open(). This state
|
|
/// ends either with burn_drive_info_forget() or with burn_drive_release().
|
|
/// It is unfriendly to other processes on the system to hold drives locked
|
|
/// which one does not definitely plan to use soon.
|
|
/// @param drive_infos Returns an array of drive info items (cdroms/burners).
|
|
/// The returned array must be freed by burn_drive_info_free()
|
|
/// before burn_finish(), and also before calling this function
|
|
/// burn_drive_scan() again.
|
|
/// @param n_drives Returns the number of drive items in drive_infos.
|
|
/// @return 0 while scanning is not complete
|
|
/// >0 when it is finished successfully,
|
|
/// <0 when finished but failed.
|
|
pub fn burn_drive_scan(
|
|
drive_infos: *mut *mut burn_drive_info,
|
|
n_drives: *mut ::std::os::raw::c_uint,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Release memory about a single drive and any exclusive lock on it.
|
|
/// Become unable to inquire or grab it. Expect FATAL consequences if you try.
|
|
/// @param drive_info pointer to a single element out of the array
|
|
/// obtained from burn_drive_scan() : &(drive_infos[driveno])
|
|
/// @param force controls degree of permissible drive usage at the moment this
|
|
/// function is called, and the amount of automatically provided
|
|
/// drive shutdown :
|
|
/// 0= drive must be ungrabbed and BURN_DRIVE_IDLE
|
|
/// 1= try to release drive even if in state BURN_DRIVE_GRABBING
|
|
/// Use these two only. Further values are to be defined.
|
|
/// @return 1 on success, 2 if drive was already forgotten,
|
|
/// 0 if not permissible, <0 on other failures,
|
|
/// @since 0.2.2
|
|
pub fn burn_drive_info_forget(
|
|
drive_info: *mut burn_drive_info,
|
|
force: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// When no longer needed, free a whole burn_drive_info array which was
|
|
/// returned by burn_drive_scan().
|
|
/// For freeing single drive array elements use burn_drive_info_forget().
|
|
pub fn burn_drive_info_free(drive_infos: *mut burn_drive_info);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the device file address of the given drive.
|
|
/// @param drive The drive to inquire.
|
|
/// @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
|
/// characters size. The device file address gets copied to it.
|
|
/// @return >0 success , <=0 error (due to libburn internal problem)
|
|
/// @since 0.4.0
|
|
pub fn burn_drive_d_get_adr(
|
|
drive: *mut burn_drive,
|
|
adr: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the device file address of a drive via a given drive_info object.
|
|
/// (Note: This is a legacy call.)
|
|
/// @param drive_info The drive to inquire.Usually some &(drive_infos[driveno])
|
|
/// @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
|
/// characters size. The device file address gets copied to it.
|
|
/// @return >0 success , <=0 error (due to libburn internal problem)
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_get_adr(
|
|
drive_info: *mut burn_drive_info,
|
|
adr: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Evaluate whether the given address would be a drive device file address
|
|
/// which could be listed by a run of burn_drive_scan(). No check is made
|
|
/// whether a device file with this address exists or whether it leads
|
|
/// to a usable MMC drive.
|
|
/// @return 1 means yes, 0 means no
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_is_enumerable_adr(adr: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to convert a given existing filesystem address into a drive device file
|
|
/// address. This succeeds with symbolic links or if a hint about the drive's
|
|
/// system address can be read from the filesystem object and a matching drive
|
|
/// is found.
|
|
/// @param path The address of an existing file system object
|
|
/// @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
|
/// characters size. The device file address gets copied to it.
|
|
/// @return 1 = success , 0 = failure , -1 = severe error
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_convert_fs_adr(
|
|
path: *mut ::std::os::raw::c_char,
|
|
adr: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to convert a given SCSI address of bus,host,channel,target,lun into
|
|
/// a drive device file address. If a SCSI address component parameter is < 0
|
|
/// then it is not decisive and the first enumerated address which matches
|
|
/// the >= 0 parameters is taken as result.
|
|
/// Note: bus and (host,channel) are supposed to be redundant.
|
|
/// @param bus_no \"Bus Number\" (something like a virtual controller)
|
|
/// @param host_no \"Host Number\" (something like half a virtual controller)
|
|
/// @param channel_no \"Channel Number\" (other half of \"Host Number\")
|
|
/// @param target_no \"Target Number\" or \"SCSI Id\" (a device)
|
|
/// @param lun_no \"Logical Unit Number\" (a sub device)
|
|
/// @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
|
/// characters size. The device file address gets copied to it.
|
|
/// @return 1 = success , 0 = failure , -1 = severe error
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_convert_scsi_adr(
|
|
bus_no: ::std::os::raw::c_int,
|
|
host_no: ::std::os::raw::c_int,
|
|
channel_no: ::std::os::raw::c_int,
|
|
target_no: ::std::os::raw::c_int,
|
|
lun_no: ::std::os::raw::c_int,
|
|
adr: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to convert a given drive device file address into the address of a
|
|
/// symbolic link that points to this drive address.
|
|
/// Modern GNU/Linux systems may shuffle drive addresses from boot to boot.
|
|
/// The udev daemon is supposed to create links which always point to the
|
|
/// same drive, regardless of its system address.
|
|
/// This call tries to find such links.
|
|
/// @param dev_adr Should contain a drive address as returned by
|
|
/// burn_drive_scan().
|
|
/// @param link_adr An application provided array of at least
|
|
/// BURN_DRIVE_ADR_LEN characters size. The found link
|
|
/// address gets copied to it.
|
|
/// @param dir_adr The address of the directory where to look for links.
|
|
/// Normally: \"/dev\"
|
|
/// @param templ An array of pointers to name templates, which
|
|
/// links have to match. A symbolic link in dir_adr matches
|
|
/// a name template if it begins by that text. E.g.
|
|
/// link address \"/dev/dvdrw1\" matches template \"dvdrw\".
|
|
/// If templ is NULL, then the default array gets used:
|
|
/// {\"dvdrw\", \"cdrw\", \"dvd\", \"cdrom\", \"cd\"}
|
|
/// If several links would match, then a link will win,
|
|
/// which matches the template with the lowest array index.
|
|
/// Among these candidates, the one with the lowest strcmp()
|
|
/// rank will be chosen as link_adr.
|
|
/// @param num_templ Number of array elements in templ.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return <0 severe error, 0 failed to search, 2 nothing found
|
|
/// 1 success, link_adr is valid
|
|
/// @since 1.1.4
|
|
pub fn burn_lookup_device_link(
|
|
dev_adr: *mut ::std::os::raw::c_char,
|
|
link_adr: *mut ::std::os::raw::c_char,
|
|
dir_adr: *mut ::std::os::raw::c_char,
|
|
templ: *mut *mut ::std::os::raw::c_char,
|
|
num_templ: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to obtain bus,host,channel,target,lun from path. If there is an SCSI
|
|
/// address at all, then this call should succeed with a drive device file
|
|
/// address obtained via burn_drive_d_get_adr(). It is also supposed to
|
|
/// succeed with any device file of a (possibly emulated) SCSI device.
|
|
/// @return 1 = success , 0 = failure , -1 = severe error
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_obtain_scsi_adr(
|
|
path: *mut ::std::os::raw::c_char,
|
|
bus_no: *mut ::std::os::raw::c_int,
|
|
host_no: *mut ::std::os::raw::c_int,
|
|
channel_no: *mut ::std::os::raw::c_int,
|
|
target_no: *mut ::std::os::raw::c_int,
|
|
lun_no: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Grab a drive. This must be done before the drive can be used (for reading,
|
|
/// writing, etc).
|
|
/// @param drive The drive to grab. This is found in a returned
|
|
/// burn_drive_info struct.
|
|
/// @param load Nonzero to make the drive attempt to load a disc (close its
|
|
/// tray door, etc).
|
|
/// @return 1 if it was possible to grab the drive, else 0
|
|
pub fn burn_drive_grab(
|
|
drive: *mut burn_drive,
|
|
load: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_drive_probe_cd_write_modes(
|
|
drive_info: *mut burn_drive_info,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Calm down or alert a drive. Some drives stay alert after reading for
|
|
/// quite some time. This saves time with the startup for the next read
|
|
/// operation but also causes noise and consumes extra energy. It makes
|
|
/// sense to calm down the drive if no read operation is expected for the
|
|
/// next few seconds. The drive will get alert automatically if operations
|
|
/// are required.
|
|
/// @param d The drive to influence.
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= become alert (else start snoozing)
|
|
/// This is not mandatory for further drive operations
|
|
/// @return 1= success , 0= drive role not suitable for calming
|
|
/// @since 0.7.0
|
|
pub fn burn_drive_snooze(
|
|
d: *mut burn_drive,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Re-assess drive and media status. This should be done after a drive
|
|
/// underwent a status change and shall be further used without intermediate
|
|
/// burn_drive_release(), burn_drive_grab(). E.g. after blanking or burning.
|
|
/// @param d The already grabbed drive to re-assess.
|
|
/// @param flag Unused yet. Submit 0.
|
|
/// @return 1 success , <= 0 could not determine drive and media state
|
|
/// @since 1.1.8
|
|
pub fn burn_drive_re_assess(
|
|
d: *mut burn_drive,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Release a drive. This should not be done until the drive is no longer
|
|
/// busy (see burn_drive_get_status).
|
|
/// @param drive The drive to release.
|
|
/// @param eject Nonzero to make the drive eject the disc in it.
|
|
pub fn burn_drive_release(drive: *mut burn_drive, eject: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Like burn_drive_release() but keeping the drive tray closed and its
|
|
/// eject button disabled. This physically locked drive state will last until
|
|
/// the drive is grabbed again and released via burn_drive_release().
|
|
/// Programs like eject, cdrecord, growisofs will break that ban too.
|
|
/// @param d The drive to release and leave locked.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 means success, <=0 means failure
|
|
/// @since 0.4.0
|
|
pub fn burn_drive_leave_locked(
|
|
d: *mut burn_drive,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns what kind of disc a drive is holding. This function may need to be
|
|
/// called more than once to get a proper status from it. See burn_disc_status
|
|
/// for details.
|
|
/// @param drive The drive to query for a disc.
|
|
/// @return The status of the drive, or what kind of disc is in it.
|
|
/// Note: BURN_DISC_UNGRABBED indicates wrong API usage
|
|
pub fn burn_disc_get_status(drive: *mut burn_drive) -> burn_disc_status;
|
|
}
|
|
unsafe extern "C" {
|
|
/// WARNING: This revives an old bug-like behavior that might be dangerous.
|
|
/// Sets the drive status to BURN_DISC_BLANK if it is BURN_DISC_UNREADY
|
|
/// or BURN_DISC_UNSUITABLE. Thus marking media as writable which actually
|
|
/// failed to declare themselves either blank or (partially) filled.
|
|
/// @return 1 drive status has been set , 0 = unsuitable drive status
|
|
/// @since 0.2.6
|
|
pub fn burn_disc_pretend_blank(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// WARNING: This overrides the safety measures against unsuitable media.
|
|
/// Sets the drive status to BURN_DISC_FULL if it is BURN_DISC_UNREADY
|
|
/// or BURN_DISC_UNSUITABLE. Thus marking media as blankable which actually
|
|
/// failed to declare themselves either blank or (partially) filled.
|
|
/// @since 0.2.6
|
|
pub fn burn_disc_pretend_full(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// WARNING: This overrides the safety measures against unsuitable media.
|
|
/// Sets the drive status to BURN_DISC_FULL unconditionally.
|
|
/// @since 1.3.4
|
|
pub fn burn_disc_pretend_full_uncond(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns the Drive Serial Number as of MMC feature 108h.
|
|
/// @param d The drive to inquire.
|
|
/// @param sno Returns the bytes of the serial number. A trailing 0-byte
|
|
/// is appended for convenience. MMC specifies ASCII 0x20 to
|
|
/// 0x7h as possible byte values. But given drive firmware
|
|
/// habits there is no warranty that *sno contains no other
|
|
/// byte values.
|
|
/// Submit *sno as NULL or pointing to free()-able memory.
|
|
/// Apply free() to *sno when no longer needed.
|
|
/// @param sno_len Returns the number of valid bytes in returned *sno,
|
|
/// not counting the appended trailing 0.
|
|
/// @return 1= success (but maybe *sno_len is 0), <= 0 severe failure
|
|
/// @since 1.4.2
|
|
pub fn burn_drive_get_serial_no(
|
|
d: *mut burn_drive,
|
|
sno: *mut *mut ::std::os::raw::c_char,
|
|
sno_len: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns the Media Serial Number as of MMC feature 109h and command ABh
|
|
/// READ MEDIA SERIAL NUMBER.
|
|
///
|
|
/// Note: This call will return an empty result unless the macro
|
|
/// Libburn_enable_scsi_cmd_ABh
|
|
/// is defined at compile time.
|
|
/// This is because the command READ MEDIA SERIAL NUMBER demands
|
|
/// superuser authority on Linux, because no medium with serial number
|
|
/// could be tested yet, and because this command made one of the test
|
|
/// drives unusable until power cycle when it was executed despite
|
|
/// feature 109h was not announced as \"current\".
|
|
///
|
|
/// @param d The drive to inquire.
|
|
/// @param sno Returns the bytes of the serial number. A trailing 0-byte
|
|
/// is appended for convenience. There is no warranty that
|
|
/// sno contains only non-zero printable bytes.
|
|
/// Submit *sno as NULL or pointing to free()-able memory.
|
|
/// Apply free() to *sno when no longer needed.
|
|
/// @param sno_len Returns the number of valid bytes in returned *sno,
|
|
/// not counting the appended trailing 0.
|
|
/// @return 1= success (but maybe *sno_len is 0), <= 0 severe failure
|
|
/// @since 1.4.2
|
|
pub fn burn_drive_get_media_sno(
|
|
d: *mut burn_drive,
|
|
sno: *mut *mut ::std::os::raw::c_char,
|
|
sno_len: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Reads ATIP information from inserted media. To be obtained via
|
|
/// burn_drive_get_write_speed(), burn_drive_get_min_write_speed(),
|
|
/// burn_drive_get_start_end_lba(). The drive must be grabbed for this call.
|
|
/// @param drive The drive to query.
|
|
/// @return 1=success, 0=no valid ATIP info read, -1 severe error
|
|
/// @since 0.2.6
|
|
pub fn burn_disc_read_atip(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells whether a BD-R medium with Pseudo Overwrite (POW) formatting is in
|
|
/// the drive. Such a formatting may have been applied by dvd+rw-tools. It
|
|
/// prevents sequential multi-session.
|
|
/// libburn will refuse to write to such a medium.
|
|
/// @param drive The drive to query.
|
|
/// @return 1 if BD-R Pseudo Overwrite , 0 if not BD-R or not POW
|
|
/// @since 1.4.8
|
|
pub fn burn_drive_get_bd_r_pow(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns start and end lba of the media which is currently inserted
|
|
/// in the given drive. The drive has to be grabbed to have hope for reply.
|
|
/// Shortcoming (not a feature): unless burn_disc_read_atip() was called
|
|
/// only blank media will return valid info.
|
|
/// @param drive The drive to query.
|
|
/// @param start_lba Returns the start lba value
|
|
/// @param end_lba Returns the end lba value
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 if lba values are valid , 0 if invalid
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_get_start_end_lba(
|
|
drive: *mut burn_drive,
|
|
start_lba: *mut ::std::os::raw::c_int,
|
|
end_lba: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Guess the manufacturer name of CD media from the ATIP addresses of lead-in
|
|
/// and lead-out. (Currently only lead-in is interpreted. Lead-out may in
|
|
/// future be used to identify the media type in more detail.)
|
|
/// The parameters of this call should be obtained by burn_disc_read_atip(d),
|
|
/// burn_drive_get_start_end_lba(d, &start_lba, &end_lba, 0),
|
|
/// burn_lba_to_msf(start_lba, &m_li, &s_li, &f_li) and
|
|
/// burn_lba_to_msf(end_lba, &m_lo, &s_lo, &f_lo).
|
|
/// @param m_li \"minute\" part of ATIP lead-in or start_lba
|
|
/// @param s_li \"second\" of lead-in or start_lba
|
|
/// @param f_li \"frame\" of lead-in
|
|
/// @param m_lo \"minute\" part of ATIP lead-out
|
|
/// @param s_lo \"second\" of lead-out
|
|
/// @param f_lo \"frame\" of lead-out
|
|
/// @param flag Bitfield for control purposes,
|
|
/// bit0= append a text \"(aka ...)\" to reply if other brands or
|
|
/// vendor names are known.
|
|
/// @return Printable text or NULL on memory shortage.
|
|
/// Dispose by free() when no longer needed.
|
|
/// @since 0.7.2
|
|
pub fn burn_guess_cd_manufacturer(
|
|
m_li: ::std::os::raw::c_int,
|
|
s_li: ::std::os::raw::c_int,
|
|
f_li: ::std::os::raw::c_int,
|
|
m_lo: ::std::os::raw::c_int,
|
|
s_lo: ::std::os::raw::c_int,
|
|
f_lo: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> *mut ::std::os::raw::c_char;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Retrieve some media information which is mainly specific to CD. For other
|
|
/// media only the bits in reply parameter valid are supposed to be meaningful.
|
|
/// @param d The drive to query.
|
|
/// @param disc_type A string saying either \"CD-DA or CD-ROM\", or \"CD-I\",
|
|
/// or \"\"CD-ROM XA\", or \"undefined\".
|
|
/// @param disc_id A 32 bit number read from the media. (Meaning unclear yet)
|
|
/// @param bar_code 8 hex digits from a barcode on media read by the drive
|
|
/// (if the drive has a bar code reader built in).
|
|
/// @param app_code The Host Application Code which must be set in the Write
|
|
/// Parameters Page if the media is not unrestricted (URU==0).
|
|
/// @param valid Replies bits which indicate the validity of other reply
|
|
/// parameters or the state of certain CD info bits:
|
|
/// bit0= disc_type is valid
|
|
/// bit1= disc_id is valid
|
|
/// bit2= bar_code is valid
|
|
/// bit3= disc_app_code is valid
|
|
/// bit4= Disc is unrestricted (URU bit, 51h READ DISC INFO)
|
|
/// This seems to be broken with my drives. The bit is
|
|
/// 0 and the validity bit for disc_app_code is 0 too.
|
|
/// bit5= Disc is nominally erasable (Erasable bit)
|
|
/// This will be set with overwritable media which
|
|
/// libburn normally considers to be unerasable blank.
|
|
/// @return 1 success, <= 0 an error occurred
|
|
/// @since 0.7.2
|
|
pub fn burn_disc_get_cd_info(
|
|
d: *mut burn_drive,
|
|
disc_type: *mut ::std::os::raw::c_char,
|
|
disc_id: *mut ::std::os::raw::c_uint,
|
|
bar_code: *mut ::std::os::raw::c_char,
|
|
app_code: *mut ::std::os::raw::c_int,
|
|
valid: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read the array of CD-TEXT packs from the Lead-in of an audio CD.
|
|
/// Each pack consists of 18 bytes, of which 4 are header. 12 bytes are pieces
|
|
/// of 0-terminated texts or binary data. 2 bytes hold a CRC.
|
|
/// For a description of the format of the array, see file doc/cdtext.txt.
|
|
/// @param d The drive to query.
|
|
/// @param text_packs Will point to an allocated memory buffer with CD-TEXT.
|
|
/// It will only contain text packs, and not be prepended
|
|
/// by the TOC header of four bytes, which gets stored with
|
|
/// file cdtext.dat by cdrecord -vv -toc. (The first two of
|
|
/// these bytes are supposed to hold the number of CD-TEXT
|
|
/// bytes + 2. The other two bytes are supposed to be 0.)
|
|
/// Dispose this buffer by free(), when no longer needed.
|
|
/// @param num_packs Will tell the number of text packs, i.e. the number of
|
|
/// bytes in text_packs divided by 18.
|
|
/// @param flag Bitfield for control purposes,
|
|
/// Unused yet. Submit 0.
|
|
/// @return 1 success, 0= no CD-TEXT found, < 0 an error occurred
|
|
/// @since 1.2.0
|
|
pub fn burn_disc_get_leadin_text(
|
|
d: *mut burn_drive,
|
|
text_packs: *mut *mut ::std::os::raw::c_uchar,
|
|
num_packs: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read the current usage of the eventual BD Spare Area. This area gets
|
|
/// reserved on BD media during formatting. During writing it is used to
|
|
/// host replacements of blocks which failed the checkread immediately after
|
|
/// writing.
|
|
/// This call applies only to recordable BD media. I.e. profiles 0x41 to 0x43.
|
|
/// @param d The drive to query.
|
|
/// @param alloc_blocks Returns the number of blocks reserved as Spare Area
|
|
/// @param free_blocks Returns the number of yet unused blocks in that area
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 = reply prarameters are valid,
|
|
/// <=0 = reply is invalid (e.g. because no BD profile)
|
|
/// @since 0.8.8
|
|
pub fn burn_disc_get_bd_spare_info(
|
|
d: *mut burn_drive,
|
|
alloc_blocks: *mut ::std::os::raw::c_int,
|
|
free_blocks: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Retrieve some media information which is mainly specific to media of
|
|
/// the DVD-R family: DVD-R , DVD-RW , DVD-R DL , HD DVD-R
|
|
/// Currently the information cannot be retrieved from other media types.
|
|
/// @param d The drive to query.
|
|
/// @param disk_category returns DVD Book to which the media complies
|
|
/// @param book_name returns a pointer to the book name of disk_category.
|
|
/// This memory is static. Do not alter or free it !
|
|
/// @param part_version returns the Media Version in the DVD Book
|
|
/// @param num_layers returns the number of media layers
|
|
/// @param num_blocks returns the number of blocks between pysical start
|
|
/// and physical end of the media
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 = reply prarameters are valid,
|
|
/// <=0 = reply is invalid (e.g. because no DVD-R)
|
|
/// @since 1.1.4
|
|
pub fn burn_disc_get_phys_format_info(
|
|
d: *mut burn_drive,
|
|
disk_category: *mut ::std::os::raw::c_int,
|
|
book_name: *mut *mut ::std::os::raw::c_char,
|
|
part_version: *mut ::std::os::raw::c_int,
|
|
num_layers: *mut ::std::os::raw::c_int,
|
|
num_blocks: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read start lba and Next Writeable Address of a track from media.
|
|
/// Usually a track lba is obtained from the result of burn_track_get_entry().
|
|
/// This call retrieves an updated lba, eventual nwa, and can address the
|
|
/// invisible track to come.
|
|
/// The drive must be grabbed for this call. One may not issue this call
|
|
/// during ongoing burn_disc_write() or burn_disc_erase().
|
|
/// @param d The drive to query.
|
|
/// @param o If not NULL: write parameters to be set on drive before query
|
|
/// @param trackno 0=next track to come, >0 number of existing track
|
|
/// The first existing track on a CD may have a number higher
|
|
/// than 1. Use burn_session_get_start_tno() to inquire this
|
|
/// start number.
|
|
/// @param lba return value: start lba
|
|
/// @param nwa return value: Next Writeable Address
|
|
/// @return 1=nwa is valid , 0=nwa is not valid , -1=error
|
|
/// @since 0.2.6
|
|
pub fn burn_disc_track_lba_nwa(
|
|
d: *mut burn_drive,
|
|
o: *mut burn_write_opts,
|
|
trackno: ::std::os::raw::c_int,
|
|
lba: *mut ::std::os::raw::c_int,
|
|
nwa: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells whether a previous attempt to determine the Next Writeable Address
|
|
/// of the upcoming track reveiled that the READ TRACK INFORMATION Damage Bit
|
|
/// is set for this track and that no valid writable address is available.
|
|
/// See MMC-5 6.27.3.7 Damage Bit, 6.27.3.11 NWA_V (NWA valid)
|
|
/// @param d The drive to query.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 0= Looks ok: Damage Bit is not set, NWA_V is set
|
|
/// 1= Damaged and theoretically writable (NWA_V is set)
|
|
/// 2= Not writable: NWA_V is not set
|
|
/// 3= Damaged and not writable (NWA_V is not set),
|
|
/// @since 1.1.0
|
|
pub fn burn_disc_next_track_is_damaged(
|
|
d: *mut burn_drive,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to close the last track and session of media which have bit0 set in
|
|
/// the return value of call burn_disc_next_track_is_damaged().
|
|
/// Whether it helps depends much on the reason why the media is reported
|
|
/// as damaged by the drive.
|
|
/// This call works only for profiles 0x09 CD-R, 0x0a CD-RW, 0x11 DVD-R,
|
|
/// 0x14 DVD-RW sequential, 0x1b DVD+R, 0x2b DVD+R DL, 0x41 BD-R sequential.
|
|
/// Note: After writing it is advised to give up the drive and to grab it again
|
|
/// in order to learn about its view on the new media state.
|
|
/// @param o Write options created by burn_write_opts_new() and
|
|
/// manipulated by burn_write_opts_set_multi().
|
|
/// burn_write_opts_set_write_type() should be set to
|
|
/// BURN_WRITE_TAO, burn_write_opts_set_simulate() should be
|
|
/// set to 0.
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= force close, even if no damage was seen
|
|
/// @return <=0 media not marked as damaged, or media type not suitable,
|
|
/// or closing attempted but failed
|
|
/// 1= attempt finished without error indication
|
|
/// @since 1.1.0
|
|
pub fn burn_disc_close_damaged(
|
|
o: *mut burn_write_opts,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read start lba of the first track in the last complete session.
|
|
/// This is the first parameter of mkisofs option -C. The second parameter
|
|
/// is nwa as obtained by burn_disc_track_lba_nwa() with trackno 0.
|
|
/// @param d The drive to query.
|
|
/// @param start_lba returns the start address of that track
|
|
/// @return <= 0 : failure, 1 = ok
|
|
/// @since 0.3.2
|
|
pub fn burn_disc_get_msc1(
|
|
d: *mut burn_drive,
|
|
start_lba: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Return the best possible estimation of the currently available capacity of
|
|
/// the media. This might depend on particular write option settings. For
|
|
/// inquiring the space with such a set of options, the drive has to be
|
|
/// grabbed and BURN_DRIVE_IDLE. If not, then one will only get a canned value
|
|
/// from the most recent automatic inquiry (e.g. during last drive grabbing).
|
|
/// An eventual start address from burn_write_opts_set_start_byte() will be
|
|
/// taken into respect with the capacity estimation. Negative results get
|
|
/// defaulted to 0.
|
|
/// If the drive is actually a file in a large filesystem or a large block
|
|
/// device, then the capacity is curbed to a maximum of 0x7ffffff0 blocks
|
|
/// = 4 TB - 32 KB.
|
|
/// @param d The drive to query.
|
|
/// @param o If not NULL: write parameters to be set on drive before query
|
|
/// @return number of most probably available free bytes
|
|
/// @since 0.3.4
|
|
pub fn burn_disc_available_space(d: *mut burn_drive, o: *mut burn_write_opts) -> off_t;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells the MMC Profile identifier of the loaded media. The drive must be
|
|
/// grabbed in order to get a non-zero result.
|
|
/// libburn currently writes only to profiles
|
|
/// 0x09 \"CD-R\"
|
|
/// 0x0a \"CD-RW\"
|
|
/// 0x11 \"DVD-R sequential recording\"
|
|
/// 0x12 \"DVD-RAM\"
|
|
/// 0x13 \"DVD-RW restricted overwrite\"
|
|
/// 0x14 \"DVD-RW sequential recording\",
|
|
/// 0x15 \"DVD-R/DL sequential recording\",
|
|
/// 0x1a \"DVD+RW\"
|
|
/// 0x1b \"DVD+R\",
|
|
/// 0x2b \"DVD+R/DL\",
|
|
/// 0x41 \"BD-R sequential recording\",
|
|
/// 0x43 \"BD-RE\",
|
|
/// 0xffff \"stdio file\"
|
|
/// Note: 0xffff is not a MMC profile but a libburn invention.
|
|
/// Read-only are the profiles
|
|
/// 0x08 \"CD-ROM\",
|
|
/// 0x10 \"DVD-ROM\",
|
|
/// 0x40 \"BD-ROM\",
|
|
/// Read-only for now is this BD-R profile (testers wanted)
|
|
/// 0x42 \"BD-R random recording\"
|
|
/// Empty drives are supposed to report
|
|
/// 0x00 \"\"
|
|
/// @param d The drive where the media is inserted.
|
|
/// @param pno Profile Number. See also mmc5r03c.pdf, table 89
|
|
/// @param name Profile Name (see above list, unknown profiles have empty name)
|
|
/// @return 1 profile is valid, 0 no profile info available
|
|
/// @since 0.3.0
|
|
pub fn burn_disc_get_profile(
|
|
d: *mut burn_drive,
|
|
pno: *mut ::std::os::raw::c_int,
|
|
name: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain product id and standards defined media codes.
|
|
/// The product id is a printable string which is supposed to be the same
|
|
/// for identical media but should vary with non-identical media. Some media
|
|
/// cannot provide such an id at all.
|
|
/// The pair (profile_number, product_id) should be the best id to identify
|
|
/// media with identical product specifications.
|
|
/// The reply parameters media_code1 and media_code2 can be used with
|
|
/// burn_guess_manufacturer()
|
|
/// The reply parameters have to be disposed by free() when no longer needed.
|
|
/// @param d The drive where the media is inserted.
|
|
/// @param product_id Reply: Printable text depicting manufacturer and
|
|
/// eventually media id.
|
|
/// @param media_code1 Reply: The eventual manufacturer identification as read
|
|
/// from DVD/BD media or a text \"XXmYYsZZf\" from CD media
|
|
/// ATIP lead-in.
|
|
/// @param media_code2 The eventual media id as read from DVD+/BD media or a
|
|
/// text \"XXmYYsZZf\" from CD ATIP lead-out.
|
|
/// @param book_type Book type text for DVD and BD.
|
|
/// Caution: is NULL with CD, even if return value says ok.
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= do not escape \" _/\" (not suitable for
|
|
/// burn_guess_manufacturer())
|
|
/// @return 1= ok, product_id and media codes are valid,
|
|
/// 0= no product id_available, reply parameters are NULL
|
|
/// <0= error
|
|
/// @since 0.7.2
|
|
pub fn burn_disc_get_media_id(
|
|
d: *mut burn_drive,
|
|
product_id: *mut *mut ::std::os::raw::c_char,
|
|
media_code1: *mut *mut ::std::os::raw::c_char,
|
|
media_code2: *mut *mut ::std::os::raw::c_char,
|
|
book_type: *mut *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Guess the name of a manufacturer by profile number, manufacturer code
|
|
/// and media code. The profile number can be obtained by
|
|
/// burn_disc_get_profile(), the other two parameters can be obtained as
|
|
/// media_code1 and media_code2 by burn_disc_get_media_id().
|
|
/// @param profile_no Profile number (submit -1 if not known)
|
|
/// @param manuf_code Manufacturer code from media (e.g. \"RICOHJPN\")
|
|
/// @param media_code Media ID code from media (e.g. \"W11\")
|
|
/// @param flag Bitfield for control purposes, submit 0
|
|
/// @return Printable text or NULL on memory shortage.
|
|
/// If the text begins with \"Unknown \" then no item of the
|
|
/// manufacturer list matched the codes.
|
|
/// Dispose by free() when no longer needed.
|
|
/// @since 0.7.2
|
|
pub fn burn_guess_manufacturer(
|
|
profile_no: ::std::os::raw::c_int,
|
|
manuf_code: *mut ::std::os::raw::c_char,
|
|
media_code: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> *mut ::std::os::raw::c_char;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells whether a disc can be erased or not
|
|
/// @param d The drive to inquire.
|
|
/// @return Non-zero means erasable
|
|
pub fn burn_disc_erasable(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns the progress and status of a drive.
|
|
/// @param drive The drive to query busy state for.
|
|
/// @param p Returns the progress of the operation, NULL if you don't care
|
|
/// @return the current status of the drive. See also burn_drive_status.
|
|
pub fn burn_drive_get_status(
|
|
drive: *mut burn_drive,
|
|
p: *mut burn_progress,
|
|
) -> burn_drive_status;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates a write_opts struct for burning to the specified drive.
|
|
/// The returned object must later be freed with burn_write_opts_free().
|
|
/// @param drive The drive to write with
|
|
/// @return The write_opts, NULL on error
|
|
pub fn burn_write_opts_new(drive: *mut burn_drive) -> *mut burn_write_opts;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquires the drive associated with a burn_write_opts object.
|
|
/// @param opts object to inquire
|
|
/// @return pointer to drive
|
|
/// @since 0.4.0
|
|
pub fn burn_write_opts_get_drive(opts: *mut burn_write_opts) -> *mut burn_drive;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Frees a write_opts struct created with burn_write_opts_new
|
|
/// @param opts write_opts to free
|
|
pub fn burn_write_opts_free(opts: *mut burn_write_opts);
|
|
}
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_read_opts {
|
|
_unused: [u8; 0],
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates a read_opts struct for reading from the specified drive
|
|
/// must be freed with burn_read_opts_free
|
|
/// @param drive The drive to read from
|
|
/// @return The read_opts
|
|
pub fn burn_read_opts_new(drive: *mut burn_drive) -> *mut burn_read_opts;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Frees a read_opts struct created with burn_read_opts_new
|
|
/// @param opts write_opts to free
|
|
pub fn burn_read_opts_free(opts: *mut burn_read_opts);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Erase a disc in the drive. The drive must be grabbed successfully BEFORE
|
|
/// calling this functions. Always ensure that the drive reports a status of
|
|
/// BURN_DISC_FULL before calling this function. An erase operation is not
|
|
/// cancellable, as control of the operation is passed wholly to the drive and
|
|
/// there is no way to interrupt it safely.
|
|
/// @param drive The drive with which to erase a disc.
|
|
/// Only drive roles 1 (MMC) and 5 (stdio random write-only)
|
|
/// support erasing.
|
|
/// @param fast Nonzero to do a fast erase, where only the disc's headers are
|
|
/// erased; zero to erase the entire disc.
|
|
/// With DVD-RW, fast blanking yields media capable only of DAO.
|
|
pub fn burn_disc_erase(drive: *mut burn_drive, fast: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Format media for use with libburn. This currently applies to DVD-RW
|
|
/// in state \"Sequential Recording\" (profile 0014h) which get formatted to
|
|
/// state \"Restricted Overwrite\" (profile 0013h). DVD+RW can be \"de-iced\"
|
|
/// by setting bit4 of flag. DVD-RAM and BD-RE may get formatted initially
|
|
/// or re-formatted to adjust their Defect Management.
|
|
/// This function usually returns while the drive is still in the process
|
|
/// of formatting. The formatting is done, when burn_drive_get_status()
|
|
/// returns BURN_DRIVE_IDLE. This may be immediately after return or may
|
|
/// need several thousand seconds to occur.
|
|
/// @param drive The drive with the disc to format.
|
|
/// @param size The size in bytes to be used with the format command. It should
|
|
/// be divisible by 32*1024. The effect of this parameter may
|
|
/// depend on the media profile and on parameter flag.
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= after formatting, write the given number of zero-bytes
|
|
/// to the media and eventually perform preliminary closing.
|
|
/// bit1+2: size mode
|
|
/// 0 = use parameter size as far as it makes sense
|
|
/// 1 = insist in size 0 even if there is a better default known
|
|
/// (on DVD-RAM or BD-R identical to size mode 0,
|
|
/// i.e. they never get formatted with payload size 0)
|
|
/// 2 = without bit7: format to maximum available size
|
|
/// with bit7 : take size from indexed format descriptor
|
|
/// 3 = without bit7: format to default size
|
|
/// with bit7 : take size from indexed format descriptor
|
|
/// bit3= -reserved-
|
|
/// bit4= enforce re-format of (partly) formatted media
|
|
/// bit5= try to disable eventual defect management
|
|
/// bit6= try to avoid lengthy media certification
|
|
/// bit7, bit8 to bit15 =
|
|
/// bit7 enables MMC expert application mode (else libburn
|
|
/// tries to choose a suitable format type):
|
|
/// If it is set then bit8 to bit15 contain the index of
|
|
/// the format to use. See burn_disc_get_formats(),
|
|
/// burn_disc_get_format_descr().
|
|
/// Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
|
|
/// 0x15, 0x26, 0x30, 0x31, 0x32.
|
|
/// If bit7 is set, then bit4 is set automatically.
|
|
/// bit16= enable POW on blank BD-R
|
|
/// @since 0.3.0
|
|
pub fn burn_disc_format(drive: *mut burn_drive, size: off_t, flag: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the formatting status, the associated sizes and the number of
|
|
/// available formats. The info is media specific and stems from MMC command
|
|
/// 23h READ FORMAT CAPACITY. See mmc5r03c.pdf 6.24 for background details.
|
|
/// Media type can be determined via burn_disc_get_profile().
|
|
/// @param drive The drive with the disc to format.
|
|
/// @param status The current formatting status of the inserted media.
|
|
/// See BURN_FORMAT_IS_* macros. Note: \"unknown\" is the
|
|
/// legal status for quick formatted, yet unwritten DVD-RW.
|
|
/// @param size The size in bytes associated with status.
|
|
/// unformatted: the maximum achievable size of the media
|
|
/// formatted: the currently formatted capacity
|
|
/// unknown: maximum capacity of drive or of media
|
|
/// @param bl_sas Additional info \"Block Length/Spare Area Size\".
|
|
/// Expected to be constantly 2048 for non-BD media.
|
|
/// @param num_formats The number of available formats. To be used with
|
|
/// burn_disc_get_format_descr() to obtain such a format
|
|
/// and eventually with burn_disc_format() to select one.
|
|
/// @return 1 reply is valid , <=0 failure
|
|
/// @since 0.3.0
|
|
pub fn burn_disc_get_formats(
|
|
drive: *mut burn_drive,
|
|
status: *mut ::std::os::raw::c_int,
|
|
size: *mut off_t,
|
|
bl_sas: *mut ::std::os::raw::c_uint,
|
|
num_formats: *mut ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire parameters of an available media format.
|
|
/// @param drive The drive with the disc to format.
|
|
/// @param index The index of the format item. Beginning with 0 up to reply
|
|
/// parameter from burn_disc_get_formats() : num_formats - 1
|
|
/// @param type The format type. See mmc5r03c.pdf, 6.5, 04h FORMAT UNIT.
|
|
/// 0x00=full, 0x10=CD-RW/DVD-RW full, 0x11=CD-RW/DVD-RW grow,
|
|
/// 0x15=DVD-RW quick, 0x13=DVD-RW quick grow,
|
|
/// 0x26=DVD+RW background, 0x30=BD-RE with spare areas,
|
|
/// 0x31=BD-RE without spare areas
|
|
/// @param size The maximum size in bytes achievable with this format.
|
|
/// @param tdp Type Dependent Parameter. See mmc5r03c.pdf.
|
|
/// @return 1 reply is valid , <=0 failure
|
|
/// @since 0.3.0
|
|
pub fn burn_disc_get_format_descr(
|
|
drive: *mut burn_drive,
|
|
index: ::std::os::raw::c_int,
|
|
type_: *mut ::std::os::raw::c_int,
|
|
size: *mut off_t,
|
|
tdp: *mut ::std::os::raw::c_uint,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read a disc from the drive and write it to an fd pair. The drive must be
|
|
/// grabbed successfully BEFORE calling this function. Always ensure that the
|
|
/// drive reports a status of BURN_DISC_FULL before calling this function.
|
|
/// @param drive The drive from which to read a disc.
|
|
/// @param o The options for the read operation.
|
|
pub fn burn_disc_read(drive: *mut burn_drive, o: *const burn_read_opts);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Examines a completed setup for burn_disc_write() whether it is permissible
|
|
/// with drive and media. This function is called by burn_disc_write() but
|
|
/// an application might be interested in this check in advance.
|
|
/// @param o The options for the writing operation.
|
|
/// @param disc The description of the disc to be created
|
|
/// @param reasons Eventually returns a list of rejection reason statements
|
|
/// @param silent 1= do not issue error messages , 0= report problems
|
|
/// @return 1 ok, -1= no recordable media detected, 0= other failure
|
|
/// @since 0.3.4
|
|
pub fn burn_precheck_write(
|
|
o: *mut burn_write_opts,
|
|
disc: *mut burn_disc,
|
|
reasons: *mut ::std::os::raw::c_char,
|
|
silent: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Write a disc in the drive. The drive must be grabbed successfully before
|
|
/// calling this function. Always ensure that the drive reports a status of
|
|
/// BURN_DISC_BLANK ot BURN_DISC_APPENDABLE before calling this function.
|
|
/// Note: write_type BURN_WRITE_SAO is currently not capable of writing a mix
|
|
/// of data and audio tracks. You must use BURN_WRITE_TAO for such sessions.
|
|
/// To be set by burn_write_opts_set_write_type().
|
|
/// Note: This function is not suitable for overwriting data in the middle of
|
|
/// a valid data area because it is allowed to append trailing data.
|
|
/// For exact random access overwriting use burn_random_access_write().
|
|
/// Note: After writing it is advised to give up the drive and to grab it again
|
|
/// in order to learn about its view on the new media state.
|
|
/// Note: Before mounting the written media it might be necessary to eject
|
|
/// and reload in order to allow the operating system to notice the new
|
|
/// media state.
|
|
/// @param o The options for the writing operation.
|
|
/// @param disc The struct burn_disc * that described the disc to be created
|
|
pub fn burn_disc_write(o: *mut burn_write_opts, disc: *mut burn_disc);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Control stream recording during the write run and eventually set the start
|
|
/// LBA for stream recording.
|
|
/// Stream recording is set from struct burn_write_opts when the write run
|
|
/// gets started. See burn_write_opts_set_stream_recording().
|
|
/// The call described here can be used later to override this setting and
|
|
/// to program automatic switching at a given LBA. It also affects subsequent
|
|
/// calls to burn_random_access_write().
|
|
/// @param drive The drive which performs the write operation.
|
|
/// @param recmode -1= disable stream recording
|
|
/// 0= leave setting as is
|
|
/// 1= enable stream recording
|
|
/// @param start The LBA where actual stream recording shall start.
|
|
/// (0 means unconditional stream recording)
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0).
|
|
/// @return 1=success , <=0 failure
|
|
/// @since 0.6.4
|
|
pub fn burn_drive_set_stream_recording(
|
|
drive: *mut burn_drive,
|
|
recmode: ::std::os::raw::c_int,
|
|
start: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Enable or disable use of the Immed bit with long running SCSI commands.
|
|
/// If the Immed bit is used, then those SCSI commands end early and leave
|
|
/// the drive in not-ready state. libburn then tries periodically whether
|
|
/// the drive became ready again. Only then it assumes the command to be
|
|
/// completely done.
|
|
/// The default setting may depend on the operating system on which libburn
|
|
/// was compiled.
|
|
/// @param drive The drive which will be affected.
|
|
/// @param enable 1= use Immed bit.
|
|
/// 0= use no Immed bit. Affected commands can last very long.
|
|
/// @return 1=success , <=0 failure
|
|
/// @since 1.4.6
|
|
pub fn burn_drive_set_immed(
|
|
drive: *mut burn_drive,
|
|
enable: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the current setting of usage of the Immed bit. Either the still set
|
|
/// system dependent default or the value set by call burn_drive_set_immed().
|
|
/// @return The current value.
|
|
/// @since 1.4.6
|
|
pub fn burn_drive_get_immed(drive: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Cancel an operation on a drive.
|
|
/// This will only work when the drive's busy state is BURN_DRIVE_READING or
|
|
/// BURN_DRIVE_WRITING.
|
|
/// @param drive The drive on which to cancel the current operation.
|
|
pub fn burn_drive_cancel(drive: *mut burn_drive);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire whether the most recent asynchronous media job was successful.
|
|
/// This applies to burn_disc_erase(), burn_disc_format(), burn_disc_write().
|
|
/// Reasons for non-success may be: rejection of burn parameters, abort due to
|
|
/// fatal errors during write, blank or format, a call to burn_drive_cancel()
|
|
/// by the application thread.
|
|
/// @param d The drive to inquire.
|
|
/// @return 1=burn seems to have went well, 0=burn failed
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_wrote_well(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire whether a write error occurred which is suspected to have happened
|
|
/// due to a false report about DVD-RW capability to be written in write type
|
|
/// BURN_WRITE_TAO.
|
|
/// @param d The drive to inquire.
|
|
/// @return 1= it seems that BURN_WRITE_TAO on DVD-RW caused error,
|
|
/// 0= it does not seem so
|
|
/// @since 1.3.4
|
|
pub fn burn_drive_was_feat21_failure(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert a minute-second-frame (MSF) value to sector count
|
|
/// @param m Minute component
|
|
/// @param s Second component
|
|
/// @param f Frame component
|
|
/// @return The sector count
|
|
pub fn burn_msf_to_sectors(
|
|
m: ::std::os::raw::c_int,
|
|
s: ::std::os::raw::c_int,
|
|
f: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert a sector count to minute-second-frame (MSF)
|
|
/// @param sectors The sector count
|
|
/// @param m Returns the minute component
|
|
/// @param s Returns the second component
|
|
/// @param f Returns the frame component
|
|
pub fn burn_sectors_to_msf(
|
|
sectors: ::std::os::raw::c_int,
|
|
m: *mut ::std::os::raw::c_int,
|
|
s: *mut ::std::os::raw::c_int,
|
|
f: *mut ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert a minute-second-frame (MSF) value to an lba
|
|
/// @param m Minute component
|
|
/// @param s Second component
|
|
/// @param f Frame component
|
|
/// @return The lba
|
|
pub fn burn_msf_to_lba(
|
|
m: ::std::os::raw::c_int,
|
|
s: ::std::os::raw::c_int,
|
|
f: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert an lba to minute-second-frame (MSF)
|
|
/// @param lba The lba
|
|
/// @param m Returns the minute component
|
|
/// @param s Returns the second component
|
|
/// @param f Returns the frame component
|
|
pub fn burn_lba_to_msf(
|
|
lba: ::std::os::raw::c_int,
|
|
m: *mut ::std::os::raw::c_int,
|
|
s: *mut ::std::os::raw::c_int,
|
|
f: *mut ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Create a new disc
|
|
/// @return Pointer to a burn_disc object or NULL on failure.
|
|
pub fn burn_disc_create() -> *mut burn_disc;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Delete disc and decrease the reference count on all its sessions
|
|
/// @param d The disc to be freed
|
|
pub fn burn_disc_free(d: *mut burn_disc);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Create a new session
|
|
/// @return Pointer to a burn_session object or NULL on failure.
|
|
pub fn burn_session_create() -> *mut burn_session;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Free a session (and decrease reference count on all tracks inside)
|
|
/// @param s Session to be freed
|
|
pub fn burn_session_free(s: *mut burn_session);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Add a session to a disc at a specific position, increasing the
|
|
/// sessions's reference count.
|
|
/// @param d Disc to add the session to
|
|
/// @param s Session to add to the disc
|
|
/// @param pos position to add at (BURN_POS_END is \"at the end\")
|
|
/// @return 0 for failure, 1 for success
|
|
pub fn burn_disc_add_session(
|
|
d: *mut burn_disc,
|
|
s: *mut burn_session,
|
|
pos: ::std::os::raw::c_uint,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove a session from a disc
|
|
/// @param d Disc to remove session from
|
|
/// @param s Session pointer to find and remove
|
|
pub fn burn_disc_remove_session(
|
|
d: *mut burn_disc,
|
|
s: *mut burn_session,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read a CDRWIN cue sheet file and equip the session object by tracks and
|
|
/// CD-TEXT according to the content of the file.
|
|
/// For a description of CDRWIN file format see
|
|
/// http://digitalx.org/cue-sheet/syntax/
|
|
/// Fully supported commands are:
|
|
/// CATALOG , CDTEXTFILE , FLAGS , INDEX , ISRC , PERFORMER ,
|
|
/// POSTGAP , PREGAP , REM , SONGWRITER , TITLE
|
|
/// Further supported commands introduced by cdrecord (usage like PERFORMER):
|
|
/// ARRANGER , COMPOSER , MESSAGE
|
|
/// Partly supported commands are:
|
|
/// FILE which supports only types BINARY , MOTOROLA , WAVE
|
|
/// TRACK which supports only datatypes AUDIO , MODE1/2048
|
|
/// Unsupported types of FILE or TRACK lead to failure of the call.
|
|
/// libburn does not yet support mixing of AUDIO and MODE1/2048. So this call
|
|
/// will fail if such a mix is found.
|
|
/// CD-TEXT information is allowed only if all tracks are of datatype AUDIO.
|
|
/// Empty lines and lines which start by '#' are ignored.
|
|
/// @param session Session where to attach tracks. It must not yet have
|
|
/// tracks or else this call will fail.
|
|
/// @param path Filesystem address of the CDRWIN cue sheet file.
|
|
/// Normally with suffix .cue
|
|
/// @param fifo_size Number of bytes in fifo. This will be rounded up by
|
|
/// the block size of the track mode. <= 0 means no fifo.
|
|
/// @param fifo Returns a reference to the burn_source object that
|
|
/// was installed as fifo between FILE and the track
|
|
/// burn sources. One may use this to inquire the fifo
|
|
/// state. Dispose it by burn_source_free() when no longer
|
|
/// needed. It is permissible to pass this parameter to
|
|
/// libburn as NULL, in order to immediately drop ownership
|
|
/// on the fifo.
|
|
/// @param text_packs Returns pre-formatted CD-TEXT packs resulting from
|
|
/// cue sheet command CDTEXTFILE. To be used with call
|
|
/// burn_write_opts_set_leadin_text().
|
|
/// It is permissible to pass this parameter to libburn
|
|
/// as NULL, in order to disable CDTEXTFILE.
|
|
/// @param num_packs Returns the number of 18 byte records in text_packs.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= Do not attach CD-TEXT information to session and
|
|
/// tracks. Do not load text_packs.
|
|
/// bit1= Do not use media catalog string of session or ISRC
|
|
/// strings of tracks for writing to Q sub-channel.
|
|
/// @return > 0 indicates success, <= 0 indicates failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_by_cue_file(
|
|
session: *mut burn_session,
|
|
path: *mut ::std::os::raw::c_char,
|
|
fifo_size: ::std::os::raw::c_int,
|
|
fifo: *mut *mut burn_source,
|
|
text_packs: *mut *mut ::std::os::raw::c_uchar,
|
|
num_packs: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Create a track
|
|
pub fn burn_track_create() -> *mut burn_track;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Free a track
|
|
/// @param t Track to free
|
|
pub fn burn_track_free(t: *mut burn_track);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Add a track to a session at specified position
|
|
/// @param s Session to add to
|
|
/// @param t Track to insert in session
|
|
/// @param pos position to add at (BURN_POS_END is \"at the end\")
|
|
/// @return 0 for failure, 1 for success
|
|
pub fn burn_session_add_track(
|
|
s: *mut burn_session,
|
|
t: *mut burn_track,
|
|
pos: ::std::os::raw::c_uint,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove a track from a session
|
|
/// @param s Session to remove track from
|
|
/// @param t Track pointer to find and remove
|
|
/// @return 0 for failure, 1 for success
|
|
pub fn burn_session_remove_track(
|
|
s: *mut burn_session,
|
|
t: *mut burn_track,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the number which shall be written as CD track number with the first
|
|
/// track of the session. The following tracks will then get written with
|
|
/// consecutive CD track numbers. The resulting number of the last track
|
|
/// must not exceed 99. The lowest possible start number is 1, which is also
|
|
/// the default. This setting applies only to CD SAO writing.
|
|
/// @param session The session to be manipulated
|
|
/// @param tno A number between 1 and 99
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 indicates failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_set_start_tno(
|
|
session: *mut burn_session,
|
|
tno: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the CD track start number, as set by default or by
|
|
/// burn_session_set_start_tno().
|
|
/// @param session The session to be inquired
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 is the currently set CD track start number
|
|
/// <= 0 indicates failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_get_start_tno(
|
|
session: *mut burn_session,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the Character Codes, the Copyright bytes, and the Language Codes
|
|
/// for CD-TEXT blocks 0 to 7. They will be used in the block summaries
|
|
/// of text packs which get generated from text or binary data submitted
|
|
/// by burn_session_set_cdtext() and burn_track_set_cdtext().
|
|
/// Character Code value can be
|
|
/// 0x00 = ISO-8859-1
|
|
/// 0x01 = 7 bit ASCII
|
|
/// 0x80 = MS-JIS (japanesei Kanji, double byte characters)
|
|
/// Copyright byte value can be
|
|
/// 0x00 = not copyrighted
|
|
/// 0x03 = copyrighted
|
|
/// Language Code value will typically be 0x09 = English or 0x69 = Japanese.
|
|
/// See below macros BURN_CDTEXT_LANGUAGES_0X00 and BURN_CDTEXT_LANGUAGES_0X45,
|
|
/// but be aware that many of these codes have never been seen on CD, and that
|
|
/// many of them do not have a character representation among the above
|
|
/// Character Codes.
|
|
/// Default is 0x09 = English for block 0 and 0x00 = Unknown for block 1 to 7.
|
|
/// Copyright and Character Code are 0x00 for all blocks by default.
|
|
/// See also file doc/cdtext.txt, \"Format of a CD-TEXT packs array\",
|
|
/// \"Pack type 0x8f\".
|
|
///
|
|
/// Parameter value -1 leaves the current setting of the session parameter
|
|
/// unchanged.
|
|
/// @param s Session where to change settings
|
|
/// @param char_codes Character Codes for block 0 to 7
|
|
/// @param copyrights Copyright bytes for block 0 to 7
|
|
/// @param languages Language Codes for block 0 to 7
|
|
/// @param flag Bitfiled for control purposes. Unused yet. Submit 0.
|
|
/// @return <=0 failure, > 0 success
|
|
/// @since 1.2.0
|
|
pub fn burn_session_set_cdtext_par(
|
|
s: *mut burn_session,
|
|
char_codes: *mut ::std::os::raw::c_int,
|
|
copyrights: *mut ::std::os::raw::c_int,
|
|
languages: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain the current settings as of burn_session_set_cdtext_par()
|
|
/// @param s Session which to inquire
|
|
/// @param char_codes Will return Character Codes for block 0 to 7
|
|
/// @param copyrights Will return Copyright bytes for block 0 to 7
|
|
/// @param block_languages Will return Language Codes for block 0 to 7
|
|
/// @param flag Bitfiled for control purposes. Unused yet. Submit 0.
|
|
/// @return <=0 failure, reply invalid, > 0 success, reply valid
|
|
/// @since 1.2.0
|
|
pub fn burn_session_get_cdtext_par(
|
|
s: *mut burn_session,
|
|
char_codes: *mut ::std::os::raw::c_int,
|
|
copyrights: *mut ::std::os::raw::c_int,
|
|
block_languages: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Attach text or binary data as CD-TEXT attributes to a session.
|
|
/// They can be used to generate CD-TEXT packs by burn_cdtext_from_session()
|
|
/// or to write CD-TEXT packs into the lead-in of a CD SAO session.
|
|
/// The latter happens only if no array of CD-TEXT packs is attached to
|
|
/// the write options by burn_write_opts_set_leadin_text().
|
|
/// For details of the CD-TEXT format and of the payload content, see file
|
|
/// doc/cdtext.txt .
|
|
/// @param s Session where to attach CD-TEXT attribute
|
|
/// @param block Number of the language block in which the attribute
|
|
/// shall appear. Possible values: 0 to 7.
|
|
/// @param pack_type Pack type number. 0x80 to 0x8e. Used if pack_type_name
|
|
/// is NULL or empty text. Else submit 0 and a name.
|
|
/// Pack type 0x8f is generated automatically and may not
|
|
/// be set by applications.
|
|
/// @param pack_type_name The pack type by name. Defined names are:
|
|
/// 0x80 = \"TITLE\" 0x81 = \"PERFORMER\"
|
|
/// 0x82 = \"SONGWRITER\" 0x83 = \"COMPOSER\"
|
|
/// 0x84 = \"ARRANGER\" 0x85 = \"MESSAGE\"
|
|
/// 0x86 = \"DISCID\" 0x87 = \"GENRE\"
|
|
/// 0x88 = \"TOC\" 0x89 = \"TOC2\"
|
|
/// 0x8d = \"CLOSED\" 0x8e = \"UPC_ISRC\"
|
|
/// Names are recognized uppercase and lowercase.
|
|
/// @param payload Text or binary bytes. The data will be copied to
|
|
/// session-internal memory.
|
|
/// Pack types 0x80 to 0x85 contain 0-terminated cleartext
|
|
/// encoded according to the block's Character Code.
|
|
/// If double byte characters are used, then two 0-bytes
|
|
/// terminate the cleartext.
|
|
/// Pack type 0x86 is 0-terminated ASCII cleartext.
|
|
/// Pack type 0x87 consists of two byte big-endian
|
|
/// Genre code (see below BURN_CDTEXT_GENRE_LIST), and
|
|
/// 0-terminated ASCII cleartext of genre description.
|
|
/// Pack type 0x88 mirrors the session table-of-content.
|
|
/// Pack type 0x89 is not understood yet.
|
|
/// Pack types 0x8a to 0x8c are reserved.
|
|
/// Pack type 0x8d contains ISO-8859-1 cleartext which is
|
|
/// not to be shown by commercial audio CD players.
|
|
/// Pack type 0x8e is ASCII cleartext with UPC/EAN code.
|
|
/// @param length Number of bytes in payload. Including terminating
|
|
/// 0-bytes.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= payload contains double byte characters
|
|
/// (with character code 0x80 MS-JIS japanese Kanji)
|
|
/// @return > 0 indicates success , <= 0 is failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_set_cdtext(
|
|
s: *mut burn_session,
|
|
block: ::std::os::raw::c_int,
|
|
pack_type: ::std::os::raw::c_int,
|
|
pack_type_name: *mut ::std::os::raw::c_char,
|
|
payload: *mut ::std::os::raw::c_uchar,
|
|
length: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain a CD-TEXT attribute that was set by burn_session_set_cdtext()
|
|
/// @param s Session to inquire
|
|
/// @param block Number of the language block to inquire.
|
|
/// @param pack_type Pack type number to inquire. Used if pack_type_name
|
|
/// is NULL or empty text. Else submit 0 and a name.
|
|
/// Pack type 0x8f is generated automatically and may not
|
|
/// be inquire in advance. Use burn_cdtext_from_session()
|
|
/// to generate all packs including type 0x8f packs.
|
|
/// @param pack_type_name The pack type by name.
|
|
/// See above burn_session_set_cdtext().
|
|
/// @param payload Will return a pointer to text or binary bytes.
|
|
/// Not a copy of data. Do not free() this address.
|
|
/// If no text attribute is attached for pack type and
|
|
/// block, then payload is returned as NULL. The return
|
|
/// value will not indicate error in this case.
|
|
/// @param length Will return the number of bytes pointed to by payload.
|
|
/// Including terminating 0-bytes.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return 1 single byte char, 2 double byte char, <=0 error
|
|
/// @since 1.2.0
|
|
pub fn burn_session_get_cdtext(
|
|
s: *mut burn_session,
|
|
block: ::std::os::raw::c_int,
|
|
pack_type: ::std::os::raw::c_int,
|
|
pack_type_name: *mut ::std::os::raw::c_char,
|
|
payload: *mut *mut ::std::os::raw::c_uchar,
|
|
length: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read a Sony CD-TEXT Input Sheet Version 0.7T file and attach its text
|
|
/// attributes to the given session and its tracks for the given CD-TEXT
|
|
/// block number. This overrides previous settings made by
|
|
/// burn_session_set_cdtext(), burn_track_set_cdtext(), burn_track_set_isrc(),
|
|
/// burn_session_set_start_tno(). It can later be overridden by said function
|
|
/// calls.
|
|
/// The media catalog number from purpose specifier \"UPC / EAN\" gets into
|
|
/// effect only if burn_write_opts_set_has_mediacatalog() is set to 0.
|
|
/// The format of a v07t sheet file is documented in doc/cdtext.txt.
|
|
/// @param session Session where to attach CD-TEXT attributes
|
|
/// @param path Local filesystem address of the sheet file which
|
|
/// shall be read and interpreted.
|
|
/// @param block Number of the language block in which the attributes
|
|
/// shall appear. Possible values: 0 to 7.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= Permission to read multiple blocks from the
|
|
/// given sheet file. Each block is supposed to begin
|
|
/// by a line \"Input Sheet Version = 0.7T\". Therefore
|
|
/// this permission is only valid if the input file
|
|
/// begins by such a line.
|
|
/// @since 1.3.2
|
|
/// bit1= Do not use media catalog string of session or ISRC
|
|
/// strings of tracks for writing to Q sub-channel.
|
|
/// @since 1.2.0
|
|
/// @return > 0 indicates success and the number of interpreted
|
|
/// blocks (1 if not flag bit0 is set).
|
|
/// <= 0 indicates failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_input_sheet_v07t(
|
|
session: *mut burn_session,
|
|
path: *mut ::std::os::raw::c_char,
|
|
block: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Produce an array of CD-TEXT packs that could be submitted to
|
|
/// burn_write_opts_set_leadin_text(), or stored as *.cdt file,
|
|
/// or submitted to burn_make_input_sheet_v07t().
|
|
/// For a description of the format of the array, see file doc/cdtext.txt.
|
|
/// The input data stem from burn_session_set_cdtext_par(),
|
|
/// burn_session_set_cdtext(), and burn_track_set_cdtext().
|
|
/// @param s Session from which to produce CD-TEXT packs.
|
|
/// @param text_packs Will return the buffer with the CD-TEXT packs.
|
|
/// Dispose by free() when no longer needed.
|
|
/// @param num_packs Will return the number of 18 byte text packs.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= do not return generated CD-TEXT packs,
|
|
/// but check whether production would work and
|
|
/// indicate the number of packs by the call return
|
|
/// value. This happens also if
|
|
/// (text_packs == NULL || num_packs == NULL).
|
|
/// @return Without flag bit0: > 0 is success, <= 0 failure
|
|
/// With flag bit0: > 0 is number of packs,
|
|
/// 0 means no packs will be generated,
|
|
/// < 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_cdtext_from_session(
|
|
s: *mut burn_session,
|
|
text_packs: *mut *mut ::std::os::raw::c_uchar,
|
|
num_packs: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert an array of CD-TEXT packs into the text format of
|
|
/// Sony CD-TEXT Input Sheet Version 0.7T .
|
|
///
|
|
/// @param text_packs Array of bytes which form CD-TEXT packs of 18 bytes
|
|
/// each. For a description of the format of the array,
|
|
/// see file doc/cdtext.txt.
|
|
/// No header of 4 bytes must be prepended which would
|
|
/// tell the number of pack bytes + 2.
|
|
/// This parameter may be NULL if the currently attached
|
|
/// array of packs shall be removed.
|
|
/// @param num_packs The number of 18 byte packs in text_packs.
|
|
/// @param start_tno The start number of track counting, if known from
|
|
/// CD table-of-content or other sources.
|
|
/// Submit 0 to enable the attempt to read it and the
|
|
/// track_count from pack type 0x8f.
|
|
/// @param track_count The number of tracks, if known from CD table-of-content
|
|
/// or orther sources.
|
|
/// @param result Will return the buffer with Sheet text.
|
|
/// Dispose by free() when no longer needed.
|
|
/// It will be filled by the text for the v07t sheet file
|
|
/// plus a trailing 0-byte. (Be aware that double-byte
|
|
/// characters might contain 0-bytes, too.)
|
|
/// Each CD-TEXT language block starts by the line
|
|
/// \"Input Sheet Version = 0.7T\"
|
|
/// and a \"Remarks\" line that tells the block number.
|
|
/// @param char_code Returns the character code of the pack array:
|
|
/// 0x00 = ISO-8859-1
|
|
/// 0x01 = 7 bit ASCII
|
|
/// 0x80 = MS-JIS (japanese Kanji, double byte characters)
|
|
/// The presence of a code value that is not in this list
|
|
/// will cause this function to fail.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 tells the number of valid text bytes in result.
|
|
/// This does not include the trailing 0-byte.
|
|
/// <= 0 indicates failure.
|
|
/// @since 1.3.2
|
|
pub fn burn_make_input_sheet_v07t(
|
|
text_packs: *mut ::std::os::raw::c_uchar,
|
|
num_packs: ::std::os::raw::c_int,
|
|
start_tno: ::std::os::raw::c_int,
|
|
track_count: ::std::os::raw::c_int,
|
|
result: *mut *mut ::std::os::raw::c_char,
|
|
char_code: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove all CD-TEXT attributes of the given block from the session.
|
|
/// They were attached by burn_session_set_cdtext().
|
|
/// @param s Session where to remove the CD-TEXT attribute
|
|
/// @param block Number of the language block in which the attribute
|
|
/// shall appear. Possible values: 0 to 7.
|
|
/// -1 causes text packs of all blocks to be removed.
|
|
/// @return > 0 is success, <= 0 failure
|
|
/// @since 1.2.0
|
|
pub fn burn_session_dispose_cdtext(
|
|
s: *mut burn_session,
|
|
block: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read an array of CD-TEXT packs from a file. This array should be suitable
|
|
/// for burn_write_opts_set_leadin_text().
|
|
/// The function tolerates and removes 4-byte headers as produced by
|
|
/// cdrecord -vv -toc, if this header tells the correct number of bytes which
|
|
/// matches the file size. If no 4-byte header is present, then the function
|
|
/// tolerates and removes a trailing 0-byte as of Sony specs.
|
|
/// @param path Filesystem address of the CD-TEXT pack file.
|
|
/// Normally with suffix .cdt or .dat
|
|
/// @param text_packs Will return the buffer with the CD-TEXT packs.
|
|
/// Dispose by free() when no longer needed.
|
|
/// @param num_packs Will return the number of 18 byte text packs.
|
|
/// @param flag Bitfield for control purposes. Unused yet.Submit 0.
|
|
/// @return 0 is success, <= 0 failure
|
|
/// @since 1.2.0
|
|
pub fn burn_cdtext_from_packfile(
|
|
path: *mut ::std::os::raw::c_char,
|
|
text_packs: *mut *mut ::std::os::raw::c_uchar,
|
|
num_packs: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Define the data in a track
|
|
/// @param t the track to define
|
|
/// @param offset The lib will write this many 0s before start of data
|
|
/// @param tail The number of extra 0s to write after data
|
|
/// @param pad 1 means the lib should pad the last sector with 0s if the
|
|
/// track isn't exactly sector sized. (otherwise the lib will
|
|
/// begin reading from the next track)
|
|
/// @param mode data format (bitfield)
|
|
pub fn burn_track_define_data(
|
|
t: *mut burn_track,
|
|
offset: ::std::os::raw::c_int,
|
|
tail: ::std::os::raw::c_int,
|
|
pad: ::std::os::raw::c_int,
|
|
mode: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Attach text or binary data as CD-TEXT attributes to a track.
|
|
/// The payload will be used to generate CD-TEXT packs by
|
|
/// burn_cdtext_from_session() or to write CD-TEXT packs into the lead-in
|
|
/// of a CD SAO session. This happens if the CD-TEXT attribute of the session
|
|
/// gets generated, which has the same block number and pack type. In this
|
|
/// case, each track should have such a CD-TEXT attribute, too.
|
|
/// See burn_session_set_cdtext().
|
|
/// Be cautious not to exceed the maximum number of 253 payload packs per
|
|
/// language block. Use burn_cdtext_from_session() to learn whether a valid
|
|
/// array of CD-TEXT packs can be generated from your attributes.
|
|
/// @param t Track where to attach CD-TEXT attribute.
|
|
/// @param block Number of the language block in which the attribute
|
|
/// shall appear. Possible values: 0 to 7.
|
|
/// @param pack_type Pack type number. 0x80 to 0x85 or 0x8e. Used if
|
|
/// pack_type_name is NULL or empty text. Else submit 0
|
|
/// and a name.
|
|
/// @param pack_type_name The pack type by name. Applicable names are:
|
|
/// 0x80 = \"TITLE\" 0x81 = \"PERFORMER\"
|
|
/// 0x82 = \"SONGWRITER\" 0x83 = \"COMPOSER\"
|
|
/// 0x84 = \"ARRANGER\" 0x85 = \"MESSAGE\"
|
|
/// 0x8e = \"UPC_ISRC\"
|
|
/// @param payload 0-terminated cleartext. If double byte characters
|
|
/// are used, then two 0-bytes terminate the cleartext.
|
|
/// @param length Number of bytes in payload. Including terminating
|
|
/// 0-bytes.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= payload contains double byte characters
|
|
/// (with character code 0x80 MS-JIS japanese Kanji)
|
|
/// @return > 0 indicates success , <= 0 is failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_set_cdtext(
|
|
t: *mut burn_track,
|
|
block: ::std::os::raw::c_int,
|
|
pack_type: ::std::os::raw::c_int,
|
|
pack_type_name: *mut ::std::os::raw::c_char,
|
|
payload: *mut ::std::os::raw::c_uchar,
|
|
length: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain a CD-TEXT attribute that was set by burn_track_set_cdtext().
|
|
/// @param t Track to inquire
|
|
/// @param block Number of the language block to inquire.
|
|
/// @param pack_type Pack type number to inquire. Used if pack_type_name
|
|
/// is NULL or empty text. Else submit 0 and a name.
|
|
/// @param pack_type_name The pack type by name.
|
|
/// See above burn_track_set_cdtext().
|
|
/// @param payload Will return a pointer to text bytes.
|
|
/// Not a copy of data. Do not free() this address.
|
|
/// If no text attribute is attached for pack type and
|
|
/// block, then payload is returned as NULL. The return
|
|
/// value will not indicate error in this case.
|
|
/// @param length Will return the number of bytes pointed to by payload.
|
|
/// Including terminating 0-bytes.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return 1=single byte char , 2= double byte char , <=0 error
|
|
/// @since 1.2.0
|
|
pub fn burn_track_get_cdtext(
|
|
t: *mut burn_track,
|
|
block: ::std::os::raw::c_int,
|
|
pack_type: ::std::os::raw::c_int,
|
|
pack_type_name: *mut ::std::os::raw::c_char,
|
|
payload: *mut *mut ::std::os::raw::c_uchar,
|
|
length: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove all CD-TEXT attributes of the given block from the track.
|
|
/// They were attached by burn_track_set_cdtext().
|
|
/// @param t Track where to remove the CD-TEXT attribute.
|
|
/// @param block Number of the language block in which the attribute
|
|
/// shall appear. Possible values: 0 to 7.
|
|
/// -1 causes text packs of all blocks to be removed.
|
|
/// @return > 0 is success, <= 0 failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_dispose_cdtext(
|
|
t: *mut burn_track,
|
|
block: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Activates CD XA compatibility modes.
|
|
/// libburn currently writes data only in CD mode 1. Some programs insist in
|
|
/// sending data with additional management bytes. These bytes have to be
|
|
/// stripped in order to make the input suitable for BURN_MODE1.
|
|
/// @param t The track to manipulate
|
|
/// @param value 0= no conversion
|
|
/// 1= strip 8 byte sector headers of CD-ROM XA mode 2 form 1
|
|
/// see MMC-5 4.2.3.8.5.3 Block Format for Mode 2 form 1 Data
|
|
/// all other values are reserved
|
|
/// @return 1=success , 0=unacceptable value
|
|
/// @since 0.7.2
|
|
pub fn burn_track_set_cdxa_conv(
|
|
t: *mut burn_track,
|
|
value: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the ISRC details for a track. When writing to CD media, ISRC will get
|
|
/// written into the Q sub-channel.
|
|
/// @param t The track to change
|
|
/// @param country the 2 char country code. Each character must be
|
|
/// only numbers or letters.
|
|
/// @param owner 3 char owner code. Each character must be only numbers
|
|
/// or letters.
|
|
/// @param year 2 digit year. A number in 0-99 (Yep, not Y2K friendly).
|
|
/// @param serial 5 digit serial number. A number in 0-99999.
|
|
pub fn burn_track_set_isrc(
|
|
t: *mut burn_track,
|
|
country: *mut ::std::os::raw::c_char,
|
|
owner: *mut ::std::os::raw::c_char,
|
|
year: ::std::os::raw::c_uchar,
|
|
serial: ::std::os::raw::c_uint,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the composed ISRC string for a track. This is an alternative to
|
|
/// burn_track_set_isrc().
|
|
/// @param t The track to be manipulated
|
|
/// @param isrc 12 characters which are composed from ISRC details.
|
|
/// Format is CCOOOYYSSSSS, terminated by a 0-byte:
|
|
/// Country, Owner, Year(decimal digits), Serial(decimal digits).
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_set_isrc_string(
|
|
t: *mut burn_track,
|
|
isrc: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Disable ISRC parameters for a track
|
|
/// @param t The track to change
|
|
pub fn burn_track_clear_isrc(t: *mut burn_track);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Define an index start address within a track. The index numbers inside a
|
|
/// track have to form sequence starting at 0 or 1 with no gaps up to the
|
|
/// highest number used. They affect only writing of CD SAO sessions.
|
|
/// The first index start address of a track must be 0.
|
|
/// Blocks between index 0 and index 1 are considered to be located before the
|
|
/// track start as of the table-of-content.
|
|
/// @param t The track to be manipulated
|
|
/// @param index_number A number between 0 and 99
|
|
/// @param relative_lba The start address relative to the start of the
|
|
/// burn_source of the track. It will get mapped to the
|
|
/// appropriate absolute block address.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_set_index(
|
|
t: *mut burn_track,
|
|
index_number: ::std::os::raw::c_int,
|
|
relative_lba: ::std::os::raw::c_uint,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Remove all index start addresses and reset to the default indexing of
|
|
/// CD SAO sessions. This means index 0 of track 1 reaches from LBA -150
|
|
/// to LBA -1. Index 1 of track 1 reaches from LBA 0 to track end. Index 1
|
|
/// of track 2 follows immediately. The same happens for all further tracks
|
|
/// after the end of their predecessor.
|
|
/// @param t The track to be manipulated
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_clear_indice(
|
|
t: *mut burn_track,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Define whether a pre-gap shall be written before the track and how many
|
|
/// sectors this pre-gap shall have. A pre-gap is written in the range of track
|
|
/// index 0 and contains zeros (audio silence). No bytes from the track source
|
|
/// will be read for writing the pre-gap.
|
|
/// This setting affects only CD SAO write runs.
|
|
/// The first track automatically gets a pre-gap of at least 150 sectors. Its
|
|
/// size may be enlarged by this call. Further pre-gaps are demanded by MMC
|
|
/// for tracks which follow tracks of a different mode. (But Mode mixing in
|
|
/// CD SAO sessions is currently not supported by libburn.)
|
|
/// @param t The track to change
|
|
/// @param size Number of sectors in the pre-gap.
|
|
/// -1 disables pre-gap, except for the first track.
|
|
/// libburn allows 0, but MMC does not propose this.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_set_pregap_size(
|
|
t: *mut burn_track,
|
|
size: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Define whether a post-gap shall be written at the end of the track and
|
|
/// how many sectors this gap shall have. A post-gap occupies the range of
|
|
/// an additional index of the track. It contains zeros. No bytes from the
|
|
/// track source will be read for writing the post-gap.
|
|
/// This setting affects only CD SAO write runs.
|
|
/// MMC prescribes to add a post-gap to a data track which is followed by
|
|
/// a non-data track. (But libburn does not yet support mixed mode CD SAO
|
|
/// sessions.)
|
|
/// @param t The track to change
|
|
/// @param size Number of sectors in the post-gap.
|
|
/// -1 disables post-gap.
|
|
/// libburn allows 0, but MMC does not propose this.
|
|
/// @param flag Bitfield for control purposes. Unused yet. Submit 0.
|
|
/// @return > 0 indicates success, <= 0 means failure
|
|
/// @since 1.2.0
|
|
pub fn burn_track_set_postgap_size(
|
|
t: *mut burn_track,
|
|
size: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Define whether a track shall swap bytes of its input stream.
|
|
/// @param t The track to change
|
|
/// @param swap_source_bytes 0=do not swap, 1=swap byte pairs
|
|
/// @return 1=success , 0=unacceptable value
|
|
/// @since 0.2.6
|
|
pub fn burn_track_set_byte_swap(
|
|
t: *mut burn_track,
|
|
swap_source_bytes: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Hide the first track in the \"pre gap\" of the disc
|
|
/// @param s session to change
|
|
/// @param onoff 1 to enable hiding, 0 to disable
|
|
pub fn burn_session_hide_first_track(s: *mut burn_session, onoff: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Get the drive's disc struct - free when done
|
|
/// @param d drive to query
|
|
/// @return the disc struct or NULL on failure
|
|
pub fn burn_drive_get_disc(d: *mut burn_drive) -> *mut burn_disc;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the track's data source
|
|
/// @param t The track to set the data source for
|
|
/// @param s The data source to use for the contents of the track
|
|
/// @return An error code stating if the source is ready for use for
|
|
/// writing the track, or if an error occurred
|
|
pub fn burn_track_set_source(t: *mut burn_track, s: *mut burn_source) -> burn_source_status;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set a default track size to be used only if the track turns out to be of
|
|
/// unpredictable length and if the effective write type demands a fixed size.
|
|
/// This can be useful to enable write types CD SAO or DVD DAO together with
|
|
/// a track source like stdin. If the track source delivers fewer bytes than
|
|
/// announced then the track will be padded up with zeros.
|
|
/// @param t The track to change
|
|
/// @param size The size to set
|
|
/// @return 0=failure 1=success
|
|
/// @since 0.3.4
|
|
pub fn burn_track_set_default_size(t: *mut burn_track, size: off_t) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Free a burn_source (decrease its refcount and maybe free it)
|
|
/// @param s Source to free
|
|
pub fn burn_source_free(s: *mut burn_source);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates a data source for an image file (and maybe subcode file)
|
|
/// @param path The file address for the main channel payload.
|
|
/// @param subpath Eventual address for subchannel data. Only used in exotic
|
|
/// raw write modes. Submit NULL for normal tasks.
|
|
/// @return Pointer to a burn_source object, NULL indicates failure
|
|
pub fn burn_file_source_new(
|
|
path: *const ::std::os::raw::c_char,
|
|
subpath: *const ::std::os::raw::c_char,
|
|
) -> *mut burn_source;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Opens a file with eventual acceleration preparations which may depend
|
|
/// on the operating system and on compile time options of libburn.
|
|
/// You may use this call instead of open(2) for opening file descriptors
|
|
/// which shall be handed to burn_fd_source_new().
|
|
/// This should only be done for tracks with BURN_BLOCK_MODE1 (2048 bytes
|
|
/// per block).
|
|
///
|
|
/// If you use this call then you MUST allocate the buffers which you use
|
|
/// with read(2) by call burn_os_alloc_buffer(). Read sizes MUST be a multiple
|
|
/// of a safe buffer amount. Else you risk that track data get altered during
|
|
/// transmission.
|
|
/// burn_disk_write() will allocate a suitable read/write buffer for its own
|
|
/// operations. A fifo created by burn_fifo_source_new() will allocate
|
|
/// suitable memory for its buffer if called with flag bit0 and a multiple
|
|
/// of a safe buffer amount.
|
|
/// @param path The file address to open
|
|
/// @param open_flags The flags as of man 2 open. Normally just O_RDONLY.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0).
|
|
/// @return A file descriptor as of open(2). Finally to be disposed
|
|
/// by close(2).
|
|
/// -1 indicates failure.
|
|
/// @since 0.7.4
|
|
pub fn burn_os_open_track_src(
|
|
path: *mut ::std::os::raw::c_char,
|
|
open_flags: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Allocate a memory area that is suitable for reading with a file descriptor
|
|
/// opened by burn_os_open_track_src().
|
|
/// @param amount Number of bytes to allocate. This should be a multiple
|
|
/// of the operating system's i/o block size. 32 KB is
|
|
/// guaranteed by libburn to be safe.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0).
|
|
/// @return The address of the allocated memory, or NULL on failure.
|
|
/// A non-NULL return value has finally to be disposed via
|
|
/// burn_os_free_buffer().
|
|
/// @since 0.7.4
|
|
pub fn burn_os_alloc_buffer(
|
|
amount: usize,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> *mut ::std::os::raw::c_void;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Dispose a memory area which was obtained by burn_os_alloc_buffer(),
|
|
/// @param buffer Memory address to be freed.
|
|
/// @param amount The number of bytes which was allocated at that
|
|
/// address.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0).
|
|
/// @return 1 success , <=0 failure
|
|
/// @since 0.7.4
|
|
pub fn burn_os_free_buffer(
|
|
buffer: *mut ::std::os::raw::c_void,
|
|
amount: usize,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates a data source for an image file (a track) from an open
|
|
/// readable filedescriptor, an eventually open readable subcodes file
|
|
/// descriptor and eventually a fixed size in bytes.
|
|
/// @param datafd The source of data.
|
|
/// @param subfd The eventual source of subchannel data. Only used in exotic
|
|
/// raw write modes. Submit -1 for normal tasks.
|
|
/// @param size The eventual fixed size of eventually both fds.
|
|
/// If this value is 0, the size will be determined from datafd.
|
|
/// @return Pointer to a burn_source object, NULL indicates failure
|
|
pub fn burn_fd_source_new(
|
|
datafd: ::std::os::raw::c_int,
|
|
subfd: ::std::os::raw::c_int,
|
|
size: off_t,
|
|
) -> *mut burn_source;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates an offset source which shall provide a byte interval of a stream
|
|
/// to its consumer. It is supposed to be chain-linked with other offset
|
|
/// sources which serve neighboring consumers. The chronological sequence
|
|
/// of consumers and the sequence of offset sources must match. The intervals
|
|
/// of the sources must not overlap.
|
|
///
|
|
/// A chain of these burn_source objects may be used to feed multiple tracks
|
|
/// from one single stream of input bytes.
|
|
/// Each of the offset sources will skip the bytes up to its start address and
|
|
/// provide the prescribed number of bytes to the track. Skipping takes into
|
|
/// respect the bytes which have been processed by eventual predecessors in the
|
|
/// chain.
|
|
/// Important: It is not allowed to free an offset source before its successor
|
|
/// has ended its work. Best is to keep them all until all tracks
|
|
/// are done.
|
|
///
|
|
/// @param inp The burn_source object from which to read stream data.
|
|
/// E.g. created by burn_file_source_new().
|
|
/// @param prev The eventual offset source object which shall read data from
|
|
/// inp before the new offset source will begin its own work.
|
|
/// This must either be a result of burn_offst_source_new() or
|
|
/// it must be NULL.
|
|
/// @param start The byte address where to start reading bytes for the
|
|
/// consumer. inp bytes may get skipped to reach this address.
|
|
/// @param size The number of bytes to be delivered to the consumer.
|
|
/// If size is <= 0 then it may be set later by a call of method
|
|
/// set_size(). If it is >= 0, then it can only be changed if
|
|
/// flag bit0 was set with burn_offst_source_new().
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0 = Prevent set_size() from overriding interval sizes > 0.
|
|
/// If such a size is already set, then the new one will
|
|
/// only affect the reply of get_size().
|
|
/// See also above struct burn_source.
|
|
/// @since 1.2.0
|
|
/// @return Pointer to a burn_source object, later to be freed by
|
|
/// burn_source_free(). NULL indicates failure.
|
|
/// @since 0.8.8
|
|
pub fn burn_offst_source_new(
|
|
inp: *mut burn_source,
|
|
prev: *mut burn_source,
|
|
start: off_t,
|
|
size: off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> *mut burn_source;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Creates a fifo which acts as proxy for an already existing data source.
|
|
/// The fifo provides a ring buffer which shall smoothen the data stream
|
|
/// between burn_source and writer thread. Each fifo serves only for one
|
|
/// data source. It may be attached to one track as its only data source
|
|
/// by burn_track_set_source(), or it may be used as input for other burn
|
|
/// sources.
|
|
/// A fifo starts its life in \"standby\" mode with no buffer space allocated.
|
|
/// As soon as its consumer requires bytes, the fifo establishes a worker
|
|
/// thread and allocates its buffer. After input has ended and all buffer
|
|
/// content is consumed, the buffer space gets freed and the worker thread
|
|
/// ends. This happens asynchronously. So expect two buffers and worker threads
|
|
/// to exist for a short time between tracks. Be modest in your size demands if
|
|
/// multiple tracks are to be expected.
|
|
/// @param inp The burn_source for which the fifo shall act as proxy.
|
|
/// It can be disposed by burn_source_free() immediately
|
|
/// after this call.
|
|
/// @param chunksize The size in bytes of a chunk.
|
|
/// Use 2048 for sources suitable for BURN_BLOCK_MODE1,
|
|
/// 2352 for sources which deliver for BURN_BLOCK_AUDIO,
|
|
/// 2056 for sources which shall get treated by
|
|
/// burn_track_set_cdxa_conv(track, 1).
|
|
/// Some variations of burn_source might work only with
|
|
/// a particular chunksize. E.g. libisofs demands 2048.
|
|
/// @param chunks The number of chunks to be allocated in ring buffer.
|
|
/// This value must be >= 2.
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= The read method of inp is capable of delivering
|
|
/// arbitrary amounts of data per call. Not only one
|
|
/// sector.
|
|
/// Suitable for inp from burn_file_source_new()
|
|
/// and burn_fd_source_new() if not the fd has
|
|
/// exotic limitations on read size.
|
|
/// You MUST use this on inp which uses an fd opened
|
|
/// with burn_os_open_track_src().
|
|
/// Better do not use with other inp types.
|
|
/// @since 0.7.4
|
|
/// @return A pointer to the newly created burn_source.
|
|
/// Later both burn_sources, inp and the returned fifo, have
|
|
/// to be disposed by calling burn_source_free() for each.
|
|
/// inp can be freed immediately, the returned fifo may be
|
|
/// kept as handle for burn_fifo_inquire_status().
|
|
/// @since 0.4.0
|
|
pub fn burn_fifo_source_new(
|
|
inp: *mut burn_source,
|
|
chunksize: ::std::os::raw::c_int,
|
|
chunks: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> *mut burn_source;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquires state and fill parameters of a fifo burn_source which was created
|
|
/// by burn_fifo_source_new() . Do not use with other burn_source variants.
|
|
/// @param fifo The fifo object to inquire
|
|
/// @param size The total size of the fifo
|
|
/// @param free_bytes The current free capacity of the fifo
|
|
/// @param status_text Returns a pointer to a constant text, see below
|
|
/// @return <0 reply invalid, >=0 fifo status code:
|
|
/// bit0+1=input status, bit2=consumption status, i.e:
|
|
/// 0=\"standby\" : data processing not started yet
|
|
/// 1=\"active\" : input and consumption are active
|
|
/// 2=\"ending\" : input has ended without error
|
|
/// 3=\"failing\" : input had error and ended,
|
|
/// 4=\"unused\" : ( consumption has ended before processing start )
|
|
/// 5=\"abandoned\" : consumption has ended prematurely
|
|
/// 6=\"ended\" : consumption has ended without input error
|
|
/// 7=\"aborted\" : consumption has ended after input error
|
|
/// @since 0.4.0
|
|
pub fn burn_fifo_inquire_status(
|
|
fifo: *mut burn_source,
|
|
size: *mut ::std::os::raw::c_int,
|
|
free_bytes: *mut ::std::os::raw::c_int,
|
|
status_text: *mut *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire various counters which reflect the fifo operation.
|
|
/// @param fifo The fifo object to inquire
|
|
/// @param total_min_fill The minimum number of bytes in the fifo. Beginning
|
|
/// from the moment when fifo consumption is enabled.
|
|
/// @param interval_min_fill The minimum byte number beginning from the moment
|
|
/// when fifo consumption is enabled or from the
|
|
/// most recent moment when burn_fifo_next_interval()
|
|
/// was called.
|
|
/// @param put_counter The number of data transactions into the fifo.
|
|
/// @param get_counter The number of data transactions out of the fifo.
|
|
/// @param empty_counter The number of times the fifo was empty.
|
|
/// @param full_counter The number of times the fifo was full.
|
|
/// @since 0.7.4
|
|
pub fn burn_fifo_get_statistics(
|
|
fifo: *mut burn_source,
|
|
total_min_fill: *mut ::std::os::raw::c_int,
|
|
interval_min_fill: *mut ::std::os::raw::c_int,
|
|
put_counter: *mut ::std::os::raw::c_int,
|
|
get_counter: *mut ::std::os::raw::c_int,
|
|
empty_counter: *mut ::std::os::raw::c_int,
|
|
full_counter: *mut ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the fifo minimum fill counter for intervals and reset that counter.
|
|
/// @param fifo The fifo object to inquire
|
|
/// @param interval_min_fill The minimum number of bytes in the fifo. Beginning
|
|
/// from the moment when fifo consumption is enabled
|
|
/// or from the most recent moment when
|
|
/// burn_fifo_next_interval() was called.
|
|
/// @since 0.7.4
|
|
pub fn burn_fifo_next_interval(
|
|
fifo: *mut burn_source,
|
|
interval_min_fill: *mut ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain a preview of the first input data of a fifo which was created
|
|
/// by burn_fifo_source_new(). The data will later be delivered normally to
|
|
/// the consumer track of the fifo.
|
|
/// bufsize may not be larger than the fifo size (chunk_size * chunks) - 32k.
|
|
/// This call will succeed only if data consumption by the track has not
|
|
/// started yet, i.e. best before the call to burn_disc_write().
|
|
/// It will start the worker thread of the fifo with the expectable side
|
|
/// effects on the external data source. Then it waits either until enough
|
|
/// data have arrived or until it becomes clear that this will not happen.
|
|
/// The call may be repeated with increased bufsize. It will always yield
|
|
/// the bytes beginning from the first one in the fifo.
|
|
/// @param fifo The fifo object to start and to inquire
|
|
/// @param buf Pointer to memory of at least bufsize bytes where to
|
|
/// deliver the peeked data.
|
|
/// @param bufsize Number of bytes to peek from the start of the fifo data
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0).
|
|
/// @return <0 on severe error, 0 if not enough data, 1 if bufsize bytes read
|
|
/// @since 0.5.0
|
|
pub fn burn_fifo_peek_data(
|
|
fifo: *mut burn_source,
|
|
buf: *mut ::std::os::raw::c_char,
|
|
bufsize: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Start the fifo worker thread and wait either until the requested number
|
|
/// of bytes have arrived or until it becomes clear that this will not happen.
|
|
/// Filling will go on asynchronously after burn_fifo_fill() returned.
|
|
/// This call and burn_fifo_peek_data() do not disturb each other.
|
|
/// @param fifo The fifo object to start
|
|
/// @param fill Number of bytes desired. Expect to get return 1 if
|
|
/// at least fifo size - 32k were read.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= fill fifo to maximum size
|
|
/// @return <0 on severe error, 0 if not enough data,
|
|
/// 1 if desired amount or fifo full
|
|
/// @since 0.7.4
|
|
pub fn burn_fifo_fill(
|
|
fifo: *mut burn_source,
|
|
fill: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets a fixed track size after the data source object has already been
|
|
/// created.
|
|
/// @param t The track to operate on
|
|
/// @param size the number of bytes to use as track size
|
|
/// @return <=0 indicates failure , >0 success
|
|
/// @since 0.3.6
|
|
pub fn burn_track_set_size(t: *mut burn_track, size: off_t) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells how many sectors a track will have on disc, or already has on
|
|
/// disc. This includes offset, payload, tail, and post-gap, but not pre-gap.
|
|
/// The result is NOT RELIABLE with tracks of undefined length
|
|
pub fn burn_track_get_sectors(arg1: *mut burn_track) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Tells how many source bytes have been read and how many data bytes have
|
|
/// been written by the track during burn.
|
|
/// @param t The track to inquire
|
|
/// @param read_bytes Number of bytes read from the track source
|
|
/// @param written_bytes Number of bytes written to track
|
|
/// @since 0.2.6
|
|
pub fn burn_track_get_counters(
|
|
t: *mut burn_track,
|
|
read_bytes: *mut off_t,
|
|
written_bytes: *mut off_t,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets drive read and write speed.
|
|
/// Note: \"k\" is 1000, not 1024.
|
|
/// 1xCD = 176.4 k/s, 1xDVD = 1385 k/s, 1xBD = 4496 k/s.
|
|
/// Fractional speeds should be rounded up. Like 4xCD = 706.
|
|
/// @param d The drive to set speed for
|
|
/// @param read Read speed in k/s (0 is max, -1 is min).
|
|
/// @param write Write speed in k/s (0 is max, -1 is min).
|
|
pub fn burn_drive_set_speed(
|
|
d: *mut burn_drive,
|
|
read: ::std::os::raw::c_int,
|
|
write: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets drive read and write speed using the \"Exact\" bit of SCSI command
|
|
/// SET STREAMING. This command will be used even if a CD medium is present.
|
|
/// MMC specifies that with the Exact bit the desired speed settings shall
|
|
/// either be obeyed by the drive exactly, or that the drive shall indicate
|
|
/// failure and not accept the settings.
|
|
/// But many drives reply no error and nevertheless adjust their read speed
|
|
/// only coarsly or ignore the setting after a few MB of fast read attempts.
|
|
///
|
|
/// The call parameters have the same meaning as with burn_drive_set_speed().
|
|
/// @param d The drive to set speed for. It must be a role 1 drive.
|
|
/// @param read Read speed in k/s (0 is max, -1 is min).
|
|
/// @param write Write speed in k/s (0 is max, -1 is min).
|
|
/// @return 1=success , 0=failure
|
|
/// @since 1.5.4
|
|
pub fn burn_drive_set_speed_exact(
|
|
d: *mut burn_drive,
|
|
read: ::std::os::raw::c_int,
|
|
write: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Waits until the time has elapsed since the given previous time to transmit
|
|
/// the given byte count with the given speed in KB/second (KB = 1000 bytes).
|
|
/// This call may be used between random access read operations like
|
|
/// burn_read_data() in order to force a slower speed than the drive is
|
|
/// willing to use if it gets read requests as fast as it delivers data.
|
|
///
|
|
/// The parameter us_corr carries microseconds of time deviations from one
|
|
/// call to the next one. Such deviations may happen because of small
|
|
/// inexactnesses of the sleeper function and because of temporary delays
|
|
/// in the data supply so that sleeping for a negative time span would have
|
|
/// been necessary. The next call will reduce or enlarge its own sleeping
|
|
/// period by this value.
|
|
///
|
|
/// @param kb_per_second the desired speed in 1000 bytes per second.
|
|
/// Supplied by the caller.
|
|
/// @max_corr the maximum backlog in microseconds which shall
|
|
/// be compensated by the next call. Supplied by the
|
|
/// caller. Not more than 1 billion = 1000 seconds.
|
|
/// @param prev_time time keeper updated by burn_nominal_slowdown().
|
|
/// The caller provides the memory and elsewise should
|
|
/// carry it unchanged from call to call.
|
|
/// @param us_corr updated by burn_nominal_slowdown(). See above.
|
|
/// The caller provides the memory and elsewise should
|
|
/// carry it unchanged from call to call.
|
|
/// @param b_since_prev byte count since the previous call. This number
|
|
/// has to be counted and supplied by the caller.
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= initialize *prev_time and *us_corr,
|
|
/// ignore other parameters, do not wait
|
|
/// @return 2=no wait because no usable kb_per_second , 1=success , 0=failure
|
|
/// @since 1.5.4
|
|
pub fn burn_nominal_slowdown(
|
|
kb_per_second: ::std::os::raw::c_int,
|
|
max_corr: ::std::os::raw::c_int,
|
|
prev_time: *mut timeval,
|
|
us_corr: *mut ::std::os::raw::c_int,
|
|
b_since_prev: off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Controls the behavior with writing when the drive buffer is suspected to
|
|
/// be full. To check and wait for enough free buffer space before writing
|
|
/// will move the task of waiting from the operating system's device driver
|
|
/// to libburn. While writing is going on and waiting is enabled, any write
|
|
/// operation will be checked whether it will fill the drive buffer up to
|
|
/// more than max_percent. If so, then waiting will happen until the buffer
|
|
/// fill is predicted with at most min_percent.
|
|
/// Thus: if min_percent < max_percent then transfer rate will oscillate.
|
|
/// This may allow the driver to operate on other devices, e.g. a disk from
|
|
/// which to read the input for writing. On the other hand, this checking might
|
|
/// reduce maximum throughput to the drive or even get misled by faulty buffer
|
|
/// fill replies from the drive.
|
|
/// If a setting parameter is < 0, then this setting will stay unchanged
|
|
/// by the call.
|
|
/// Known burner or media specific pitfalls:
|
|
/// To have max_percent larger than the burner's best reported buffer fill has
|
|
/// the same effect as min_percent==max_percent. Some burners do not report
|
|
/// their full buffer with all media types. Some are not suitable because
|
|
/// they report their buffer fill with delay. Some do not go to full speed
|
|
/// unless their buffer is full.
|
|
///
|
|
/// @param d The drive to control
|
|
/// @param enable 0= disable , 1= enable waiting , (-1 = do not change setting)
|
|
/// @param min_usec Shortest possible sleeping period (given in micro seconds)
|
|
/// @param max_usec Longest possible sleeping period (given in micro seconds)
|
|
/// @param timeout_sec If a single write has to wait longer than this number
|
|
/// of seconds, then waiting gets disabled and mindless
|
|
/// writing starts. A value of 0 disables this timeout.
|
|
/// @param min_percent Minimum of desired buffer oscillation: 25 to 100
|
|
/// @param max_percent Maximum of desired buffer oscillation: 25 to 100
|
|
/// @return 1=success , 0=failure
|
|
/// @since 0.3.8
|
|
pub fn burn_drive_set_buffer_waiting(
|
|
d: *mut burn_drive,
|
|
enable: ::std::os::raw::c_int,
|
|
min_usec: ::std::os::raw::c_int,
|
|
max_usec: ::std::os::raw::c_int,
|
|
timeout_sec: ::std::os::raw::c_int,
|
|
min_percent: ::std::os::raw::c_int,
|
|
max_percent: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Control the write simulation mode before or after burn_write_opts get
|
|
/// into effect.
|
|
/// Beginning with version 1.4.8 a burn run by burn_disc_write() brings the
|
|
/// burn_drive object in the simulation state as set to the burn_write_opts
|
|
/// by burn_write_opts_set_simulate(). This state is respected by call
|
|
/// burn_random_access_write() until a new call of burn_disc_write() happens
|
|
/// or until burn_drive_reset_simulate() is called.
|
|
/// This call may only be made when burn_drive_get_status() returns
|
|
/// BURN_DRIVE_IDLE.
|
|
///
|
|
/// @param d The drive to control
|
|
/// @param simulate 1 enables simulation, 0 enables real writing
|
|
/// @return 1=success , 0=failure
|
|
/// @since 1.4.8
|
|
pub fn burn_drive_reset_simulate(
|
|
d: *mut burn_drive,
|
|
simulate: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_structure_print_disc(d: *mut burn_disc);
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_structure_print_session(s: *mut burn_session);
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_structure_print_track(t: *mut burn_track);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the write type for the write_opts struct.
|
|
/// Note: write_type BURN_WRITE_SAO is currently not capable of writing a mix
|
|
/// of data and audio tracks. You must use BURN_WRITE_TAO for such sessions.
|
|
/// @param opts The write opts to change
|
|
/// @param write_type The write type to use
|
|
/// @param block_type The block type to use
|
|
/// @return Returns 1 on success and 0 on failure.
|
|
pub fn burn_write_opts_set_write_type(
|
|
opts: *mut burn_write_opts,
|
|
write_type: burn_write_types,
|
|
block_type: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// As an alternative to burn_write_opts_set_write_type() this function tries
|
|
/// to find a suitable write type and block type for a given write job
|
|
/// described by opts and disc. To be used after all other setups have been
|
|
/// made, i.e. immediately before burn_disc_write().
|
|
/// @param opts The nearly complete write opts to change
|
|
/// @param disc The already composed session and track model
|
|
/// @param reasons This text string collects reasons for decision or failure
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= do not choose type but check the one that is already set
|
|
/// bit1= do not issue error messages via burn_msgs queue
|
|
/// (is automatically set with bit0)
|
|
/// @return Chosen write type. BURN_WRITE_NONE on failure.
|
|
/// @since 0.3.2
|
|
pub fn burn_write_opts_auto_write_type(
|
|
opts: *mut burn_write_opts,
|
|
disc: *mut burn_disc,
|
|
reasons: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> burn_write_types;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Supplies toc entries for writing - not normally required for cd mastering
|
|
/// @param opts The write opts to change
|
|
/// @param count The number of entries
|
|
/// @param toc_entries
|
|
pub fn burn_write_opts_set_toc_entries(
|
|
opts: *mut burn_write_opts,
|
|
count: ::std::os::raw::c_int,
|
|
toc_entries: *mut burn_toc_entry,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the session format for a disc
|
|
/// @param opts The write opts to change
|
|
/// @param format The session format to set
|
|
pub fn burn_write_opts_set_format(opts: *mut burn_write_opts, format: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the simulate value for the write_opts struct .
|
|
/// This corresponds to the Test Write bit in MMC mode page 05h. Several media
|
|
/// types do not support this. See struct burn_multi_caps.might_simulate for
|
|
/// actual availability of this feature.
|
|
/// If the media is suitable, the drive will perform burn_disc_write() as a
|
|
/// simulation instead of effective write operations. This means that the
|
|
/// media content and burn_disc_get_status() stay unchanged.
|
|
/// Note: With stdio-drives, the target file gets eventually created, opened,
|
|
/// lseeked, and closed, but not written. So there are effects on it.
|
|
/// Note: Up to version 1.4.6 the call burn_random_access_write() after
|
|
/// burn_disc_write() did not simulate because it does not get any
|
|
/// burn_write_opts and the drive did not memorize the simulation state.
|
|
/// This has changed now. burn_random_access_write() will not write after
|
|
/// a simulated burn run.
|
|
/// Use burn_drive_reset_simulate(drive, 0) if you really want to end
|
|
/// simulation before you call burn_disc_write() with new write options.
|
|
/// @param opts The write opts to change
|
|
/// @param sim Non-zero enables simulation, 0 enables real writing
|
|
/// @return Returns 1 on success and 0 on failure.
|
|
pub fn burn_write_opts_set_simulate(
|
|
opts: *mut burn_write_opts,
|
|
sim: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Controls buffer underrun prevention. This is only needed with CD media
|
|
/// and possibly with old DVD-R drives. All other media types are not
|
|
/// vulnerable to burn failure due to buffer underrun.
|
|
/// @param opts The write opts to change
|
|
/// @param underrun_proof if non-zero, buffer underrun protection is enabled
|
|
/// @return Returns 1 if the drive announces to be capable of underrun
|
|
/// prevention,
|
|
/// Returns 0 if not.
|
|
pub fn burn_write_opts_set_underrun_proof(
|
|
opts: *mut burn_write_opts,
|
|
underrun_proof: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to use opc or not with the write_opts struct
|
|
/// @param opts The write opts to change
|
|
/// @param opc If non-zero, optical power calibration will be performed at
|
|
/// start of burn
|
|
pub fn burn_write_opts_set_perform_opc(opts: *mut burn_write_opts, opc: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// The Q sub-channel of a CD may contain a Media Catalog Number of 13 decimal
|
|
/// digits. This call sets the string of digits, but does not yet activate it
|
|
/// for writing.
|
|
/// @param opts The write opts to change
|
|
/// @param mediacatalog The 13 decimal digits as ASCII bytes. I.e. '0' = 0x30.
|
|
pub fn burn_write_opts_set_mediacatalog(
|
|
opts: *mut burn_write_opts,
|
|
mediacatalog: *mut ::std::os::raw::c_uchar,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// This call activates the Media Catalog Number for writing. The digits of
|
|
/// that number have to be set by call burn_write_opts_set_mediacatalog().
|
|
/// @param opts The write opts to change
|
|
/// @param has_mediacatalog 1= activate writing of catalog to Q sub-channel
|
|
/// 0= deactivate it
|
|
pub fn burn_write_opts_set_has_mediacatalog(
|
|
opts: *mut burn_write_opts,
|
|
has_mediacatalog: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the multi flag which eventually marks the emerging session as not
|
|
/// being the last one and thus creating a BURN_DISC_APPENDABLE media.
|
|
/// Note: DVD-R[W] in write mode BURN_WRITE_SAO are not capable of this.
|
|
/// DVD-R DL are not capable of this at all.
|
|
/// libburn will refuse to write if burn_write_opts_set_multi() is
|
|
/// enabled under such conditions.
|
|
/// @param opts The option object to be manipulated
|
|
/// @param multi 1=media will be appendable, 0=media will be closed (default)
|
|
/// @since 0.2.6
|
|
pub fn burn_write_opts_set_multi(opts: *mut burn_write_opts, multi: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Set the severity to be used with write error messages which are potentially
|
|
/// caused by not using write type BURN_WRITE_SAO on fast blanked DVD-RW.
|
|
///
|
|
/// Normally the call burn_write_opts_auto_write_type() can prevent such
|
|
/// errors by looking for MMC feature 21h \"Incremental Streaming Writable\"
|
|
/// which anounnces the capability for BURN_WRITE_TAO and multi session.
|
|
/// Regrettable many drives announce feature 21h even if they only can do
|
|
/// BURN_WRITE_SAO. This mistake becomes obvious by an early write error.
|
|
///
|
|
/// If you plan to call burn_drive_was_feat21_failure() and to repeat the
|
|
/// burn attempt with BURN_WRITE_SAO, then set the severity of the error
|
|
/// message low enough, so that the application does not see reason to abort.
|
|
///
|
|
/// @param opts The option object to be manipulated
|
|
/// @param severity Severity as with burn_msgs_set_severities().
|
|
/// \"ALL\" or empty text means the default severity that
|
|
/// is attributed to other kinds of write errors.
|
|
pub fn burn_write_opts_set_fail21h_sev(
|
|
opts: *mut burn_write_opts,
|
|
severity: *mut ::std::os::raw::c_char,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Submit an array of CD-TEXT packs which shall be written to the Lead-in
|
|
/// of a SAO write run on CD.
|
|
/// @param opts The option object to be manipulated
|
|
/// @param text_packs Array of bytes which form CD-TEXT packs of 18 bytes
|
|
/// each. For a description of the format of the array,
|
|
/// see file doc/cdtext.txt.
|
|
/// No header of 4 bytes must be prepended which would
|
|
/// tell the number of pack bytes + 2.
|
|
/// This parameter may be NULL if the currently attached
|
|
/// array of packs shall be removed.
|
|
/// @param num_packs The number of 18 byte packs in text_packs.
|
|
/// This parameter may be 0 if the currently attached
|
|
/// array of packs shall be removed.
|
|
/// @param flag Bitfield for control purposes.
|
|
/// bit0= do not verify checksums
|
|
/// bit1= repair mismatching checksums
|
|
/// bit2= repair checksums if they are 00 00 with each pack
|
|
/// @return 1 on success, <= 0 on failure
|
|
/// @since 1.2.0
|
|
pub fn burn_write_opts_set_leadin_text(
|
|
opts: *mut burn_write_opts,
|
|
text_packs: *mut ::std::os::raw::c_uchar,
|
|
num_packs: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets a start address for writing to media and write modes which are able
|
|
/// to choose this address at all (for now: DVD+RW, DVD-RAM, formatted DVD-RW).
|
|
/// now). The address is given in bytes. If it is not -1 then a write run
|
|
/// will fail if choice of start address is not supported or if the block
|
|
/// alignment of the address is not suitable for media and write mode.
|
|
/// Alignment to 32 kB blocks is supposed to be safe with DVD media.
|
|
/// Call burn_disc_get_multi_caps() can obtain the necessary media info. See
|
|
/// resulting struct burn_multi_caps elements .start_adr , .start_alignment ,
|
|
/// .start_range_low , .start_range_high .
|
|
/// @param opts The write opts to change
|
|
/// @param value The address in bytes (-1 = start at default address)
|
|
/// @since 0.3.0
|
|
pub fn burn_write_opts_set_start_byte(opts: *mut burn_write_opts, value: off_t);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Caution: still immature and likely to change. Problems arose with
|
|
/// sequential DVD-RW on one drive.
|
|
///
|
|
/// Controls whether the whole available space of the media shall be filled up
|
|
/// by the last track of the last session.
|
|
/// @param opts The write opts to change
|
|
/// @param fill_up_media If 1 : fill up by last track, if 0 = do not fill up
|
|
/// @since 0.3.4
|
|
pub fn burn_write_opts_set_fillup(
|
|
opts: *mut burn_write_opts,
|
|
fill_up_media: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Lets libburn ignore the failure of some conformance checks:
|
|
/// - the check whether CD write+block type is supported by the drive
|
|
/// - the check whether the media profile supports simulated burning
|
|
/// - @since 1.5.6
|
|
/// The check whether a write operation exceeds the size of the medium
|
|
/// as announced by the drive. This is known as \"overburn\" and may work
|
|
/// for a few thousand additional blocks on CD media with write type SAO.
|
|
/// @param opts The write opts to change
|
|
/// @param use_force 1=ignore above checks, 0=refuse work on failed check
|
|
/// @since 0.3.4
|
|
pub fn burn_write_opts_set_force(opts: *mut burn_write_opts, use_force: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Eventually makes use of the more modern write command AAh WRITE12 and
|
|
/// sets the Streaming bit. With DVD-RAM and BD this can override the
|
|
/// traditional slowdown to half nominal speed. But if it speeds up writing
|
|
/// then it also disables error management and correction. Weigh your
|
|
/// priorities. This affects the write operations of burn_disc_write()
|
|
/// and subsequent calls of burn_random_access_write().
|
|
/// @param opts The write opts to change
|
|
/// @param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
|
|
/// @since 0.6.4:
|
|
/// >=16 use WRITE12 but not before the LBA given by value
|
|
/// @since 0.4.6
|
|
pub fn burn_write_opts_set_stream_recording(
|
|
opts: *mut burn_write_opts,
|
|
value: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Overrides the write chunk size for DVD and BD media which is normally
|
|
/// determined according to media type and setting of stream recording.
|
|
/// A chunk size of 64 KB may improve throughput with bus systems which show
|
|
/// latency problems.
|
|
/// @param opts The write opts to change
|
|
/// @param obs Number of bytes which shall be sent by a single write command.
|
|
/// 0 means automatic size, 32768 and 65336 are the only other
|
|
/// accepted sizes for now.
|
|
/// @since 0.7.4
|
|
pub fn burn_write_opts_set_dvd_obs(opts: *mut burn_write_opts, obs: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Overrides the automatic decision whether to pad up the last write chunk to
|
|
/// its full size. This applies to DVD, BD and stdio: pseudo-drives.
|
|
/// Note: This override may get enabled fixely already at compile time by
|
|
/// defining macro Libburn_dvd_always_obs_paD .
|
|
/// @param opts The write opts to change
|
|
/// @param pad 1 means to pad up in any case, 0 means automatic decision.
|
|
/// @since 1.2.4
|
|
pub fn burn_write_opts_set_obs_pad(opts: *mut burn_write_opts, pad: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Exempts BD-R media from the elsewise unavoidable automatic padding of the
|
|
/// last write chunk to its full size.
|
|
/// Even if this exempt is granted it gets into effect only if stream recording
|
|
/// is disabled and burn_write_opts_set_obs_pad() is set to 0.
|
|
/// @param opts The write opts to change
|
|
/// @param value 1= possibly exempt BD-R from end chunk padding.
|
|
/// 0= always act on BD-R as if
|
|
/// burn_write_opts_set_obs_pad(opts, 1) is in effect.
|
|
/// @since 1.5.6
|
|
pub fn burn_write_opts_set_bdr_obs_exempt(
|
|
opts: *mut burn_write_opts,
|
|
value: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the rhythm by which stdio pseudo drives force their output data to
|
|
/// be consumed by the receiving storage device. This forcing keeps the memory
|
|
/// from being clogged with lots of pending data for slow devices.
|
|
/// @param opts The write opts to change
|
|
/// @param rhythm Number of 2KB output blocks after which fsync(2) is
|
|
/// performed.
|
|
/// -1 means no fsync()
|
|
/// 0 means default
|
|
/// 1 means fsync() only at end, @since 1.3.8 (noop before 1.3.8)
|
|
/// elsewise the value must be >= 32.
|
|
/// Default is currently 8192 = 16 MB.
|
|
/// @since 0.7.4
|
|
pub fn burn_write_opts_set_stdio_fsync(
|
|
opts: *mut burn_write_opts,
|
|
rhythm: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to read in raw mode or not
|
|
/// @param opts The read opts to change
|
|
/// @param raw_mode If non-zero, reading will be done in raw mode, so that everything in the data tracks on the
|
|
/// disc is read, including headers.
|
|
pub fn burn_read_opts_set_raw(opts: *mut burn_read_opts, raw_mode: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to report c2 errors or not
|
|
/// @param opts The read opts to change
|
|
/// @param c2errors If non-zero, report c2 errors.
|
|
pub fn burn_read_opts_set_c2errors(opts: *mut burn_read_opts, c2errors: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to read subcodes from audio tracks or not
|
|
/// @param opts The read opts to change
|
|
/// @param subcodes_audio If non-zero, read subcodes from audio tracks on the disc.
|
|
pub fn burn_read_opts_read_subcodes_audio(
|
|
opts: *mut burn_read_opts,
|
|
subcodes_audio: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to read subcodes from data tracks or not
|
|
/// @param opts The read opts to change
|
|
/// @param subcodes_data If non-zero, read subcodes from data tracks on the disc.
|
|
pub fn burn_read_opts_read_subcodes_data(
|
|
opts: *mut burn_read_opts,
|
|
subcodes_data: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to recover errors if possible
|
|
/// @param opts The read opts to change
|
|
/// @param hardware_error_recovery If non-zero, attempt to recover errors if possible.
|
|
pub fn burn_read_opts_set_hardware_error_recovery(
|
|
opts: *mut burn_read_opts,
|
|
hardware_error_recovery: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether to report recovered errors or not
|
|
/// @param opts The read opts to change
|
|
/// @param report_recovered_errors If non-zero, recovered errors will be reported.
|
|
pub fn burn_read_opts_report_recovered_errors(
|
|
opts: *mut burn_read_opts,
|
|
report_recovered_errors: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets whether blocks with unrecoverable errors should be read or not
|
|
/// @param opts The read opts to change
|
|
/// @param transfer_damaged_blocks If non-zero, blocks with unrecoverable errors will still be read.
|
|
pub fn burn_read_opts_transfer_damaged_blocks(
|
|
opts: *mut burn_read_opts,
|
|
transfer_damaged_blocks: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Sets the number of retries to attempt when trying to correct an error
|
|
/// @param opts The read opts to change
|
|
/// @param hardware_error_retries The number of retries to attempt when correcting an error.
|
|
pub fn burn_read_opts_set_hardware_error_retries(
|
|
opts: *mut burn_read_opts,
|
|
hardware_error_retries: ::std::os::raw::c_uchar,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets the list of profile codes supported by the drive.
|
|
/// Profiles depict the feature sets which constitute media types. For
|
|
/// known profile codes and names see burn_disc_get_profile().
|
|
/// @param d is the drive to query
|
|
/// @param num_profiles returns the number of supported profiles
|
|
/// @param profiles returns the profile codes
|
|
/// @param is_current returns the status of the corresponding profile code:
|
|
/// 1= current, i.e. the matching media is loaded
|
|
/// 0= not current, i.e. the matching media is not loaded
|
|
/// @return always 1 for now
|
|
/// @since 0.7.0
|
|
pub fn burn_drive_get_all_profiles(
|
|
d: *mut burn_drive,
|
|
num_profiles: *mut ::std::os::raw::c_int,
|
|
profiles: *mut ::std::os::raw::c_int,
|
|
is_current: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtains the profile name associated with a profile code.
|
|
/// @param profile_code the profile code to be translated
|
|
/// @param name returns the profile name (e.g. \"DVD+RW\")
|
|
/// @return 1= known profile code , 0= unknown profile code
|
|
/// @since 0.7.0
|
|
pub fn burn_obtain_profile_name(
|
|
profile_code: ::std::os::raw::c_int,
|
|
name: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtains the list of SCSI Feature Codes from feature descriptors which
|
|
/// were obtained from the drive when it was most recently acquired or
|
|
/// re-assessed.
|
|
/// @param d Drive to query
|
|
/// @param count Returns the number of allocated elements in feature_codes
|
|
/// @param feature_codes Returns the allocated array of feature codes.
|
|
/// If returned *feature_codes is not NULL, dispose it
|
|
/// by free() when it is no longer needed.
|
|
/// @since 1.5.2
|
|
pub fn burn_drive_get_feature_codes(
|
|
d: *mut burn_drive,
|
|
count: *mut ::std::os::raw::c_int,
|
|
feature_codes: *mut *mut ::std::os::raw::c_uint,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtains the fields and data of a particular feature which were obtained
|
|
/// from the drive when it was last acquired or re-assessed. See MMC specs
|
|
/// for full detail.
|
|
/// @param d Drive to query
|
|
/// @param feature_code A number as learned by burn_drive_get_feature_codes()
|
|
/// @param flags Returns byte 2 of the feature descriptor:
|
|
/// bit0= Current
|
|
/// bit1= Persistent
|
|
/// bit2-5= Version
|
|
/// @param additional_length Returns byte 3 of descriptor.
|
|
/// This is the size of feature_data.
|
|
/// @param feature_data Returns further bytes of descriptor.
|
|
/// If returned *feature_data is not NULL, dispose it
|
|
/// by free() when it is no longer needed.
|
|
/// @param feature_text Returns text representation of the feature descriptor:
|
|
/// Code +/- : Name : Version,P/N : Hex bytes : Parsed info
|
|
/// Current features are marked by \"+\", others by \"-\".
|
|
/// Persistent features are marked by \"P\", others by \"N\".
|
|
/// feature_text may be submitted as NULL. In this case
|
|
/// no text is generated and returned.
|
|
/// If returned *feature_text is not NULL, dispose it
|
|
/// by free() when it is no longer needed.
|
|
/// @return 0 feature descriptor is not present
|
|
/// -1 out of memory
|
|
/// >0 success
|
|
/// @since 1.5.2
|
|
pub fn burn_drive_get_feature(
|
|
d: *mut burn_drive,
|
|
feature_code: ::std::os::raw::c_uint,
|
|
flags: *mut ::std::os::raw::c_uchar,
|
|
additional_length: *mut ::std::os::raw::c_uchar,
|
|
feature_data: *mut *mut ::std::os::raw::c_uchar,
|
|
feature_text: *mut *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets the maximum write speed for a drive and eventually loaded media.
|
|
/// The return value might change by the media type of already loaded media,
|
|
/// again by call burn_drive_grab() and again by call burn_disc_read_atip().
|
|
/// @param d Drive to query
|
|
/// @return Maximum write speed in K/s
|
|
pub fn burn_drive_get_write_speed(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets the minimum write speed for a drive and eventually loaded media.
|
|
/// The return value might change by the media type of already loaded media,
|
|
/// again by call burn_drive_grab() and again by call burn_disc_read_atip().
|
|
/// @param d Drive to query
|
|
/// @return Minimum write speed in K/s
|
|
/// @since 0.2.6
|
|
pub fn burn_drive_get_min_write_speed(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets the maximum read speed for a drive
|
|
/// @param d Drive to query
|
|
/// @return Maximum read speed in K/s
|
|
pub fn burn_drive_get_read_speed(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain a copy of the current speed descriptor list. The drive's list gets
|
|
/// updated on various occasions such as burn_drive_grab() but the copy
|
|
/// obtained here stays untouched. It has to be disposed via
|
|
/// burn_drive_free_speedlist() when it is not longer needed. Speeds
|
|
/// may appear several times in the list. The list content depends much on
|
|
/// drive and media type. It seems that .source == 1 applies mostly to CD media
|
|
/// whereas .source == 2 applies to any media.
|
|
/// @param d Drive to query
|
|
/// @param speed_list The copy. If empty, *speed_list gets returned as NULL.
|
|
/// @return 1=success , 0=list empty , <0 severe error
|
|
/// @since 0.3.0
|
|
pub fn burn_drive_get_speedlist(
|
|
d: *mut burn_drive,
|
|
speed_list: *mut *mut burn_speed_descriptor,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Look up the fastest speed descriptor which is not faster than the given
|
|
/// speed_goal. If it is 0, then the fastest one is chosen among the
|
|
/// descriptors with the highest end_lba. If it is -1 then the slowest speed
|
|
/// descriptor is chosen regardless of end_lba. Parameter flag decides whether
|
|
/// the speed goal means write speed or read speed.
|
|
/// @param d Drive to query
|
|
/// @param speed_goal Upper limit for speed,
|
|
/// 0=search for maximum speed , -1 search for minimum speed
|
|
/// @param best_descr Result of the search, NULL if no match
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= look for best read speed rather than write speed
|
|
/// bit1= look for any source type (else look for source==2 first
|
|
/// and for any other source type only with CD media)
|
|
/// @return >0 indicates a valid best_descr, 0 = no valid best_descr
|
|
/// @since 0.3.8
|
|
pub fn burn_drive_get_best_speed(
|
|
d: *mut burn_drive,
|
|
speed_goal: ::std::os::raw::c_int,
|
|
best_descr: *mut *mut burn_speed_descriptor,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Dispose a speed descriptor list copy which was obtained by
|
|
/// burn_drive_get_speedlist().
|
|
/// @param speed_list The list copy. *speed_list gets set to NULL.
|
|
/// @return 1=list disposed , 0= *speedlist was already NULL
|
|
/// @since 0.3.0
|
|
pub fn burn_drive_free_speedlist(
|
|
speed_list: *mut *mut burn_speed_descriptor,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
/// The reply structure for burn_disc_get_multi_caps()
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct burn_multi_caps {
|
|
pub multi_session: ::std::os::raw::c_int,
|
|
pub multi_track: ::std::os::raw::c_int,
|
|
pub start_adr: ::std::os::raw::c_int,
|
|
/// The alignment for start addresses.
|
|
/// ( start_address % start_alignment ) must be 0.
|
|
pub start_alignment: off_t,
|
|
/// The lowest permissible start address.
|
|
pub start_range_low: off_t,
|
|
/// The highest addressable start address.
|
|
pub start_range_high: off_t,
|
|
/// Potential availability of write modes
|
|
/// 4= needs no size prediction, not to be chosen automatically
|
|
/// 3= needs size prediction, not to be chosen automatically
|
|
/// 2= available, no size prediction necessary
|
|
/// 1= available, needs exact size prediction
|
|
/// 0= not available
|
|
/// With CD media (profiles 0x09 and 0x0a) check also the elements
|
|
/// _block_types of the according write mode.
|
|
pub might_do_tao: ::std::os::raw::c_int,
|
|
pub might_do_sao: ::std::os::raw::c_int,
|
|
pub might_do_raw: ::std::os::raw::c_int,
|
|
/// Generally advised write mode.
|
|
/// Not necessarily the one chosen by burn_write_opts_auto_write_type()
|
|
/// because the burn_disc structure might impose particular demands.
|
|
pub advised_write_mode: burn_write_types,
|
|
/// Write mode as given by parameter wt of burn_disc_get_multi_caps().
|
|
pub selected_write_mode: burn_write_types,
|
|
/// Profile number which was current when the reply was generated
|
|
pub current_profile: ::std::os::raw::c_int,
|
|
/// Whether the current profile indicates CD media. 1=yes, 0=no
|
|
pub current_is_cd_profile: ::std::os::raw::c_int,
|
|
/// Whether the current profile is able to perform simulated write
|
|
pub might_simulate: ::std::os::raw::c_int,
|
|
}
|
|
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
|
|
const _: () = {
|
|
["Size of burn_multi_caps"][::std::mem::size_of::<burn_multi_caps>() - 72usize];
|
|
["Alignment of burn_multi_caps"][::std::mem::align_of::<burn_multi_caps>() - 8usize];
|
|
["Offset of field: burn_multi_caps::multi_session"]
|
|
[::std::mem::offset_of!(burn_multi_caps, multi_session) - 0usize];
|
|
["Offset of field: burn_multi_caps::multi_track"]
|
|
[::std::mem::offset_of!(burn_multi_caps, multi_track) - 4usize];
|
|
["Offset of field: burn_multi_caps::start_adr"]
|
|
[::std::mem::offset_of!(burn_multi_caps, start_adr) - 8usize];
|
|
["Offset of field: burn_multi_caps::start_alignment"]
|
|
[::std::mem::offset_of!(burn_multi_caps, start_alignment) - 16usize];
|
|
["Offset of field: burn_multi_caps::start_range_low"]
|
|
[::std::mem::offset_of!(burn_multi_caps, start_range_low) - 24usize];
|
|
["Offset of field: burn_multi_caps::start_range_high"]
|
|
[::std::mem::offset_of!(burn_multi_caps, start_range_high) - 32usize];
|
|
["Offset of field: burn_multi_caps::might_do_tao"]
|
|
[::std::mem::offset_of!(burn_multi_caps, might_do_tao) - 40usize];
|
|
["Offset of field: burn_multi_caps::might_do_sao"]
|
|
[::std::mem::offset_of!(burn_multi_caps, might_do_sao) - 44usize];
|
|
["Offset of field: burn_multi_caps::might_do_raw"]
|
|
[::std::mem::offset_of!(burn_multi_caps, might_do_raw) - 48usize];
|
|
["Offset of field: burn_multi_caps::advised_write_mode"]
|
|
[::std::mem::offset_of!(burn_multi_caps, advised_write_mode) - 52usize];
|
|
["Offset of field: burn_multi_caps::selected_write_mode"]
|
|
[::std::mem::offset_of!(burn_multi_caps, selected_write_mode) - 56usize];
|
|
["Offset of field: burn_multi_caps::current_profile"]
|
|
[::std::mem::offset_of!(burn_multi_caps, current_profile) - 60usize];
|
|
["Offset of field: burn_multi_caps::current_is_cd_profile"]
|
|
[::std::mem::offset_of!(burn_multi_caps, current_is_cd_profile) - 64usize];
|
|
["Offset of field: burn_multi_caps::might_simulate"]
|
|
[::std::mem::offset_of!(burn_multi_caps, might_simulate) - 68usize];
|
|
};
|
|
unsafe extern "C" {
|
|
/// Allocates a struct burn_multi_caps (see above) and fills it with values
|
|
/// which are appropriate for the drive and the loaded media. The drive
|
|
/// must be grabbed for this call. The returned structure has to be disposed
|
|
/// via burn_disc_free_multi_caps() when no longer needed.
|
|
/// @param d The drive to inquire
|
|
/// @param wt With BURN_WRITE_NONE the best capabilities of all write modes
|
|
/// get returned. If set to a write mode like BURN_WRITE_SAO the
|
|
/// capabilities with that particular mode are returned and the
|
|
/// return value is 0 if the desired mode is not possible.
|
|
/// @param caps returns the info structure
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return < 0 : error , 0 : writing seems impossible , 1 : writing possible
|
|
/// @since 0.3.2
|
|
pub fn burn_disc_get_multi_caps(
|
|
d: *mut burn_drive,
|
|
wt: burn_write_types,
|
|
caps: *mut *mut burn_multi_caps,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Removes from memory a multi session info structure which was returned by
|
|
/// burn_disc_get_multi_caps(). The pointer *caps gets set to NULL.
|
|
/// @param caps the info structure to dispose (note: pointer to pointer)
|
|
/// @return 0 : *caps was already NULL, 1 : memory object was disposed
|
|
/// @since 0.3.2
|
|
pub fn burn_disc_free_multi_caps(caps: *mut *mut burn_multi_caps) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets a copy of the toc_entry structure associated with a track
|
|
/// @param t Track to get the entry from
|
|
/// @param entry Struct for the library to fill out
|
|
pub fn burn_track_get_entry(t: *mut burn_track, entry: *mut burn_toc_entry);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets a copy of the toc_entry structure associated with a session's lead out
|
|
/// @param s Session to get the entry from
|
|
/// @param entry Struct for the library to fill out
|
|
pub fn burn_session_get_leadout_entry(s: *mut burn_session, entry: *mut burn_toc_entry);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets an array of all complete sessions for the disc
|
|
/// THIS IS NO LONGER VALID AFTER YOU ADD OR REMOVE A SESSION
|
|
/// The result array contains *num + burn_disc_get_incomplete_sessions()
|
|
/// elements. All above *num are incomplete sessions.
|
|
/// Typically there is at most one incomplete session with one empty track.
|
|
/// DVD+R and BD-R seem support more than one track with even readable data.
|
|
/// @param d Disc to get session array for
|
|
/// @param num Returns the number of sessions in the array
|
|
/// @return array of sessions
|
|
pub fn burn_disc_get_sessions(
|
|
d: *mut burn_disc,
|
|
num: *mut ::std::os::raw::c_int,
|
|
) -> *mut *mut burn_session;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtains the number of incomplete sessions which are recorded in the
|
|
/// result array of burn_disc_get_sessions() after the complete sessions.
|
|
/// See above.
|
|
/// @param d Disc object to inquire
|
|
/// @return Number of incomplete sessions
|
|
pub fn burn_disc_get_incomplete_sessions(d: *mut burn_disc) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_disc_get_sectors(d: *mut burn_disc) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets an array of all the tracks for a session
|
|
/// THIS IS NO LONGER VALID AFTER YOU ADD OR REMOVE A TRACK
|
|
/// @param s session to get track array for
|
|
/// @param num Returns the number of tracks in the array
|
|
/// @return array of tracks
|
|
pub fn burn_session_get_tracks(
|
|
s: *mut burn_session,
|
|
num: *mut ::std::os::raw::c_int,
|
|
) -> *mut *mut burn_track;
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_session_get_sectors(s: *mut burn_session) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Gets the mode of a track
|
|
/// @param track the track to query
|
|
/// @return the track's mode
|
|
pub fn burn_track_get_mode(track: *mut burn_track) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns whether the first track of a session is hidden in the pregap
|
|
/// @param session the session to query
|
|
/// @return non-zero means the first track is hidden
|
|
pub fn burn_session_get_hidefirst(session: *mut burn_session) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Returns the library's version in its parts.
|
|
/// This is the runtime counterpart of the three build time macros
|
|
/// burn_header_version_* below.
|
|
/// @param major The major version number
|
|
/// @param minor The minor version number
|
|
/// @param micro The micro version number
|
|
pub fn burn_version(
|
|
major: *mut ::std::os::raw::c_int,
|
|
minor: *mut ::std::os::raw::c_int,
|
|
micro: *mut ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain the id string of the SCSI transport interface.
|
|
/// This interface may be a system specific adapter module of libburn or
|
|
/// an adapter to a supporting library like libcdio.
|
|
/// @param flag Bitfield for control puposes, submit 0 for now
|
|
/// @return A pointer to the id string. Do not alter the string content.
|
|
/// @since 0.7.6
|
|
pub fn burn_scsi_transport_id(flag: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Control queueing and stderr printing of messages from libburn.
|
|
/// Severity may be one of \"NEVER\", \"ABORT\", \"FATAL\", \"FAILURE\", \"SORRY\",
|
|
/// \"WARNING\", \"HINT\", \"NOTE\", \"UPDATE\", \"DEBUG\", \"ALL\".
|
|
/// @param queue_severity Gives the minimum limit for messages to be queued.
|
|
/// Default: \"NEVER\". If you queue messages then you
|
|
/// must consume them by burn_msgs_obtain().
|
|
/// @param print_severity Does the same for messages to be printed directly
|
|
/// to stderr. Default: \"FATAL\".
|
|
/// @param print_id A text prefix to be printed before the message.
|
|
/// @return >0 for success, <=0 for error
|
|
/// @since 0.2.6
|
|
pub fn burn_msgs_set_severities(
|
|
queue_severity: *mut ::std::os::raw::c_char,
|
|
print_severity: *mut ::std::os::raw::c_char,
|
|
print_id: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain the oldest pending libburn message from the queue which has at
|
|
/// least the given minimum_severity. This message and any older message of
|
|
/// lower severity will get discarded from the queue and is then lost forever.
|
|
/// @param minimum_severity may be one of \"NEVER\", \"ABORT\", \"FATAL\",
|
|
/// \"FAILURE\", \"SORRY\", \"WARNING\", \"HINT\", \"NOTE\", \"UPDATE\",
|
|
/// \"DEBUG\", \"ALL\".
|
|
/// To call with minimum_severity \"NEVER\" will discard the
|
|
/// whole queue.
|
|
/// @param error_code Will become a unique error code as listed in
|
|
/// libburn/libdax_msgs.h
|
|
/// @param msg_text Must provide at least BURN_MSGS_MESSAGE_LEN bytes.
|
|
/// @param os_errno Will become the eventual errno related to the message
|
|
/// @param severity Will become the severity related to the message and
|
|
/// should provide at least 80 bytes.
|
|
/// @return 1 if a matching item was found, 0 if not, <0 for severe errors
|
|
/// @since 0.2.6
|
|
pub fn burn_msgs_obtain(
|
|
minimum_severity: *mut ::std::os::raw::c_char,
|
|
error_code: *mut ::std::os::raw::c_int,
|
|
msg_text: *mut ::std::os::raw::c_char,
|
|
os_errno: *mut ::std::os::raw::c_int,
|
|
severity: *mut ::std::os::raw::c_char,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Submit a message to the libburn queueing system. It will be queued or
|
|
/// printed as if it was generated by libburn itself.
|
|
/// @param error_code The unique error code of your message.
|
|
/// Submit 0 if you do not have reserved error codes within
|
|
/// the libburnia project.
|
|
/// @param msg_text Not more than BURN_MSGS_MESSAGE_LEN characters of
|
|
/// message text.
|
|
/// @param os_errno Eventual errno related to the message. Submit 0 if
|
|
/// the message is not related to a operating system error.
|
|
/// @param severity One of \"ABORT\", \"FATAL\", \"FAILURE\", \"SORRY\", \"WARNING\",
|
|
/// \"HINT\", \"NOTE\", \"UPDATE\", \"DEBUG\". Defaults to \"FATAL\".
|
|
/// @param d An eventual drive to which the message shall be related.
|
|
/// Submit NULL if the message is not specific to a
|
|
/// particular drive object.
|
|
/// @return 1 if message was delivered, <=0 if failure
|
|
/// @since 0.4.0
|
|
pub fn burn_msgs_submit(
|
|
error_code: ::std::os::raw::c_int,
|
|
msg_text: *mut ::std::os::raw::c_char,
|
|
os_errno: ::std::os::raw::c_int,
|
|
severity: *mut ::std::os::raw::c_char,
|
|
d: *mut burn_drive,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert a severity name into a severity number, which gives the severity
|
|
/// rank of the name.
|
|
/// @param severity_name A name as with burn_msgs_submit(), e.g. \"SORRY\".
|
|
/// @param severity_number The rank number: the higher, the more severe.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return >0 success, <=0 failure
|
|
/// @since 0.4.0
|
|
pub fn burn_text_to_sev(
|
|
severity_name: *mut ::std::os::raw::c_char,
|
|
severity_number: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Convert a severity number into a severity name
|
|
/// @param severity_number The rank number: the higher, the more severe.
|
|
/// @param severity_name A name as with burn_msgs_submit(), e.g. \"SORRY\".
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return >0 success, <=0 failure
|
|
/// @since 0.4.4
|
|
pub fn burn_sev_to_text(
|
|
severity_number: ::std::os::raw::c_int,
|
|
severity_name: *mut *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Return a blank separated list of severity names. Sorted from low
|
|
/// to high severity.
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return A constant string with the severity names
|
|
/// @since 1.2.6
|
|
pub fn burn_list_sev_texts(flag: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Replace the messenger object handle of libburn by a compatible handle
|
|
/// obtained from a related library.
|
|
/// See also: libisofs, API function iso_get_messenger().
|
|
/// @param messenger The foreign but compatible message handle.
|
|
/// @return 1 : success, <=0 : failure
|
|
/// @since 0.4.0
|
|
pub fn burn_set_messenger(messenger: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int;
|
|
}
|
|
/// The prototype of a handler function suitable for burn_set_signal_handling()
|
|
/// Such a function has to return -2 if it does not want the process to
|
|
/// exit with value 1.
|
|
pub type burn_abort_handler_t = ::std::option::Option<
|
|
unsafe extern "C" fn(
|
|
handle: *mut ::std::os::raw::c_void,
|
|
signum: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int,
|
|
>;
|
|
unsafe extern "C" {
|
|
/// Control built-in signal handling. Either by setting an own handler or
|
|
/// by activating the built-in signal handler.
|
|
///
|
|
/// A function parameter handle of NULL activates the built-in abort handler.
|
|
/// Depending on mode it may cancel all drive operations, wait for all drives
|
|
/// to become idle, exit(1). It may also prepare function
|
|
/// burn_drive_get_status() for waiting and performing exit(1).
|
|
/// Parameter handle may be NULL or a text that shall be used as prefix for
|
|
/// pacifier messages of burn_abort_pacifier(). Other than with an application
|
|
/// provided handler, the prefix char array does not have to be kept existing
|
|
/// until the eventual signal event.
|
|
/// Before version 0.7.8 only action 0 was available. I.e. the built-in handler
|
|
/// waited for the drives to become idle and then performed exit(1) directly.
|
|
/// But during burn_disc_write() onto real CD or DVD, FreeBSD 8.0 pauses the
|
|
/// other threads until the signal handler returns.
|
|
/// The new actions try to avoid this deadlock. It is advised to use action 3
|
|
/// at least during burn_disc_write(), burn_disc_erase(), burn_disc_format():
|
|
/// burn_set_signal_handling(text, NULL, 0x30);
|
|
/// and to call burn_is_aborting(0) when the drive is BURN_DRIVE_IDLE.
|
|
/// If burn_is_aborting(0) returns 1, then call burn_abort() and exit(1).
|
|
///
|
|
/// @param handle Opaque handle eventually pointing to an application
|
|
/// provided memory object
|
|
/// @param handler A function to be called on signals, if the handling bits
|
|
/// in parameter mode are set 0.
|
|
/// It will get parameter handle as argument. flag will be 0.
|
|
/// It should finally call burn_abort(). See there.
|
|
/// If the handler function returns 2 or -2, then the wrapping
|
|
/// signal handler of libburn will return and let the program
|
|
/// continue its operations. Any other return value causes
|
|
/// exit(1).
|
|
/// @param mode : bit0 - bit3: Handling of received signals:
|
|
/// 0 Install libburn wrapping signal handler, which will call
|
|
/// handler(handle, signum, 0) on nearly all signals
|
|
/// 1 Enable system default reaction on all signals
|
|
/// 2 Try to ignore nearly all signals
|
|
/// 10 like mode 2 but handle SIGABRT like with mode 0
|
|
/// bit4 - bit7: With handler == NULL :
|
|
/// Action of built-in handler. \"control thread\" is the one
|
|
/// which called burn_set_signal_handling().
|
|
/// All actions activate receive mode 2 to ignore further
|
|
/// signals.
|
|
/// 0 Same as 1 (for pre-0.7.8 backward compatibility)
|
|
/// @since 0.7.8
|
|
/// 1 Catch the control thread in abort handler, call
|
|
/// burn_abort() with a patience value > 0 and
|
|
/// finally exit(1). Does not always work with FreeBSD.
|
|
/// 2 Call burn_abort() with patience -1 and return from
|
|
/// handler. When the control thread calls
|
|
/// burn_drive_get_status(), then call burn_abort()
|
|
/// with patience 1 instead, and finally exit(1).
|
|
/// Does not always work with FreeBSD.
|
|
/// 3 Call burn_abort() with patience -1, return from handler.
|
|
/// It is duty of the application to detect a pending abort
|
|
/// condition by calling burn_is_aborting() and to wait for
|
|
/// all drives to become idle. E.g. by calling burn_abort()
|
|
/// with patience >0.
|
|
/// 4 Like 3, but without calling burn_abort() with -1. Only
|
|
/// the indicator of burn_is_aborting() gets set.
|
|
/// bit8: @since 1.3.2
|
|
/// try to ignore SIGPIPE (regardless of bit0 - bit3)
|
|
///
|
|
/// @since 0.2.6
|
|
pub fn burn_set_signal_handling(
|
|
handle: *mut ::std::os::raw::c_void,
|
|
handler: burn_abort_handler_t,
|
|
mode: ::std::os::raw::c_int,
|
|
);
|
|
}
|
|
unsafe extern "C" {
|
|
pub fn burn_is_aborting(flag: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Write data in random access mode.
|
|
/// The drive must be grabbed successfully before calling this function which
|
|
/// circumvents usual libburn session processing and rather writes data without
|
|
/// preparations or finalizing. This will work only with overwritable media
|
|
/// which are also suitable for burn_write_opts_set_start_byte(). The same
|
|
/// address alignment restrictions as with this function apply. I.e. for DVD
|
|
/// it is best to align to 32 KiB blocks (= 16 LBA units). The amount of data
|
|
/// to be written is subject to the same media dependent alignment rules.
|
|
/// Again, 32 KiB is most safe.
|
|
/// Call burn_disc_get_multi_caps() can obtain the necessary media info. See
|
|
/// resulting struct burn_multi_caps elements .start_adr , .start_alignment ,
|
|
/// .start_range_low , .start_range_high .
|
|
/// Other than burn_disc_write() this is a synchronous call which returns
|
|
/// only after the write transaction has ended (successfully or not). So it is
|
|
/// wise not to transfer giant amounts of data in a single call.
|
|
/// Important: Data have to fit into the already formatted area of the media.
|
|
///
|
|
/// If the burn_drive object is in simulation mode, then no actual write
|
|
/// operation or synchronization of the drive buffer will happen.
|
|
/// See burn_drive_reset_simulate().
|
|
///
|
|
/// @param d The drive to which to write
|
|
/// @param byte_address The start address of the write in byte
|
|
/// (1 LBA unit = 2048 bytes) (do respect media alignment)
|
|
/// @param data The bytes to be written
|
|
/// @param data_count The number of those bytes (do respect media alignment)
|
|
/// data_count == 0 is permitted (e.g. to flush the
|
|
/// drive buffer without further data transfer).
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0 = flush the drive buffer after eventual writing
|
|
/// @return 1=successful , <=0 : number of transferred bytes * -1
|
|
/// @since 0.4.0
|
|
pub fn burn_random_access_write(
|
|
d: *mut burn_drive,
|
|
byte_address: off_t,
|
|
data: *mut ::std::os::raw::c_char,
|
|
data_count: off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire the maximum amount of readable data.
|
|
/// On DVD and BD it is supposed that all LBAs in the range from 0 to
|
|
/// capacity - 1 can be read via burn_read_data() although some of them may
|
|
/// never have been recorded. With multi-session CD there have to be
|
|
/// expected unreadable TAO Run-out blocks.
|
|
/// If tracks are recognizable then it is better to only read LBAs which
|
|
/// are part of some track and on CD to be cautious about the last two blocks
|
|
/// of each track which might be TAO Run-out blocks.
|
|
/// If the drive is actually a large file or block device, then the capacity
|
|
/// is curbed to a maximum of 0x7ffffff0 blocks = 4 TB - 32 KB.
|
|
/// @param d The drive from which to read
|
|
/// @param capacity Will return the result if valid
|
|
/// @param flag Bitfield for control purposes: Unused yet, submit 0.
|
|
/// @return 1=successful , <=0 an error occurred
|
|
/// @since 0.6.0
|
|
pub fn burn_get_read_capacity(
|
|
d: *mut burn_drive,
|
|
capacity: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read data in random access mode.
|
|
/// The drive must be grabbed successfully before calling this function.
|
|
/// With all currently supported drives and media the byte_address has to
|
|
/// be aligned to 2048 bytes. Only data tracks with 2048 bytes per sector
|
|
/// can be read this way. I.e. not CD-audio, not CD-video-stream ...
|
|
/// This is a synchronous call which returns only after the full read job
|
|
/// has ended (successfully or not). So it is wise not to read giant amounts
|
|
/// of data in a single call.
|
|
/// @param d The drive from which to read
|
|
/// @param byte_address The start address of the read in byte (aligned to 2048)
|
|
/// @param data A memory buffer capable of taking data_size bytes
|
|
/// @param data_size The amount of data to be read. This does not have to
|
|
/// be aligned to any block size.
|
|
/// @param data_count The amount of data actually read (interesting on error)
|
|
/// The counted bytes are supposed to be valid.
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= - reserved -
|
|
/// bit1= do not submit error message if read error
|
|
/// bit2= on error do not try to read a second time
|
|
/// with single block steps.
|
|
/// @since 0.5.2
|
|
/// bit3= return -2 on permission denied error rather than
|
|
/// issuing a warning message.
|
|
/// @since 1.0.6
|
|
/// bit4= return -3 on SCSI error
|
|
/// 5 64 00 ILLEGAL MODE FOR THIS TRACK
|
|
/// and prevent this error from being reported as
|
|
/// event message. Do not retry reading in this case.
|
|
/// (Useful to try the last two blocks of a CD
|
|
/// track which might be non-data because of TAO.)
|
|
/// @since 1.2.6
|
|
/// bit5= issue messages with severity DEBUG if they would
|
|
/// be suppressed by bit1.
|
|
/// @since 1.4.0
|
|
/// @return 1=successful , <=0 an error occurred
|
|
/// with bit3: -2= permission denied error
|
|
/// @since 0.4.0
|
|
pub fn burn_read_data(
|
|
d: *mut burn_drive,
|
|
byte_address: off_t,
|
|
data: *mut ::std::os::raw::c_char,
|
|
data_size: off_t,
|
|
data_count: *mut off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Read CD audio sectors in random access mode.
|
|
/// The drive must be grabbed successfully before calling this function.
|
|
/// Only CD audio tracks with 2352 bytes per sector can be read this way.
|
|
/// I.e. not data tracks, not CD-video-stream, ...
|
|
///
|
|
/// Note that audio data do not have exact block addressing. If you read a
|
|
/// sequence of successive blocks then you will get a seamless stream
|
|
/// of data. But the actual start and end position of this audio stream
|
|
/// will differ by a few dozens of milliseconds, depending on individual
|
|
/// CD and individual drive.
|
|
/// Expect leading and trailing zeros, as well as slight truncation.
|
|
///
|
|
/// @param d The drive from which to read.
|
|
/// It must be a real MMC drive (i.e. not a stdio file)
|
|
/// and it must have a CD loaded (i.e. not DVD or BD).
|
|
/// @param sector_no The sector number (Logical Block Address)
|
|
/// It may be slightly below 0, depending on drive and
|
|
/// medium. -150 is a lower limit.
|
|
/// @param data A memory buffer capable of taking data_size bytes
|
|
/// @param data_size The amount of data to be read. This must be aligned
|
|
/// to full multiples of 2352.
|
|
/// @param data_count The amount of data actually read (interesting on error)
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= - reserved -
|
|
/// bit1= do not submit error message if read error
|
|
/// bit2= on error do not try to read a second time
|
|
/// with single block steps.
|
|
/// bit3= Enable DAP : \"flaw obscuring mechanisms like
|
|
/// audio data mute and interpolate\"
|
|
/// bit4= return -3 on SCSI error
|
|
/// 5 64 00 ILLEGAL MODE FOR THIS TRACK
|
|
/// and prevent this error from being reported as
|
|
/// event message. Do not retry reading in this case.
|
|
/// (Useful to try the last two blocks of a CD
|
|
/// track which might be non-audio because of TAO.)
|
|
/// bit5= issue messages with severity DEBUG if they would
|
|
/// be suppressed by bit1.
|
|
/// @since 1.4.0
|
|
/// @return 1=successful , <=0 an error occurred
|
|
/// with bit3: -2= permission denied error
|
|
/// @since 1.2.6
|
|
pub fn burn_read_audio(
|
|
d: *mut burn_drive,
|
|
sector_no: ::std::os::raw::c_int,
|
|
data: *mut ::std::os::raw::c_char,
|
|
data_size: off_t,
|
|
data_count: *mut off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Extract an interval of audio sectors from CD and store it as a WAVE
|
|
/// audio file on hard disk.
|
|
///
|
|
/// @param drive The drive from which to read.
|
|
/// @param start_sector The logical block address of the first audio sector
|
|
/// which shall be read.
|
|
/// @param sector_count The number of audio sectors to be read.
|
|
/// Each sector consists of 2352 bytes.
|
|
/// @param target_path The address of the file where to store the extracted
|
|
/// audio data. Will be opened O_WRONLY | O_CREAT.
|
|
/// The file name should have suffix \".wav\".
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= Report about progress by UPDATE messages
|
|
/// bit3= Enable DAP : \"flaw obscuring mechanisms like
|
|
/// audio data mute and interpolate\"
|
|
/// @since 1.3.2
|
|
pub fn burn_drive_extract_audio(
|
|
drive: *mut burn_drive,
|
|
start_sector: ::std::os::raw::c_int,
|
|
sector_count: ::std::os::raw::c_int,
|
|
target_path: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Extract all audio sectors of a track from CD and store them as a WAVE
|
|
/// audio file on hard disk.
|
|
///
|
|
/// @param drive The drive from which to read.
|
|
/// @param track The track which shall be extracted.
|
|
/// @param target_path The address of the file where to store the extracted
|
|
/// audio data. Will be opened O_WRONLY | O_CREAT.
|
|
/// The file name should have suffix \".wav\".
|
|
/// @param flag Bitfield for control purposes:
|
|
/// bit0= Report about progress by UPDATE messages
|
|
/// bit3= Enable DAP : \"flaw obscuring mechanisms like
|
|
/// audio data mute and interpolate\"
|
|
/// @since 1.3.2
|
|
pub fn burn_drive_extract_audio_track(
|
|
drive: *mut burn_drive,
|
|
track: *mut burn_track,
|
|
target_path: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Inquire whether the drive object is a real MMC drive or a pseudo-drive
|
|
/// created by a stdio: address.
|
|
/// @param d The drive to inquire
|
|
/// @return 0= null-drive
|
|
/// 1= real MMC drive
|
|
/// 2= stdio-drive, random access, read-write
|
|
/// 3= stdio-drive, sequential, write-only
|
|
/// 4= stdio-drive, random access, read-only
|
|
/// (only if enabled by burn_allow_drive_role_4())
|
|
/// 5= stdio-drive, random access, write-only
|
|
/// (only if enabled by burn_allow_drive_role_4())
|
|
/// @since 0.4.0
|
|
pub fn burn_drive_get_drive_role(d: *mut burn_drive) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Allow drive role 4 \"random access read-only\"
|
|
/// and drive role 5 \"random access write-only\".
|
|
/// By default a random access file assumes drive role 2 \"read-write\"
|
|
/// regardless whether it is actually readable or writeable.
|
|
/// If enabled, random-access file objects which recognizably permit no
|
|
/// writing will be classified as role 4 and those which permit no reading
|
|
/// will get role 5.
|
|
/// Candidates are drive addresses of the form stdio:/dev/fd/# , where # is
|
|
/// the integer number of an open file descriptor. If this descriptor was
|
|
/// opened read-only or write-only, then it gets role 4 or role 5,
|
|
/// respectively.
|
|
/// Other paths may get tested by an attempt to open them for read-write
|
|
/// (role 2) or read-only (role 4) or write-only (role 5). See bit1.
|
|
/// @param allowed Bitfield for control purposes:
|
|
/// bit0= Enable roles 4 and 5 for drives which get
|
|
/// acquired after this call
|
|
/// bit1= with bit0:
|
|
/// Test whether the file can be opened for
|
|
/// read-write, read-only, or write-only.
|
|
/// Classify as roles 2, 4, 5.
|
|
/// bit2= with bit0 and bit1:
|
|
/// Classify files which cannot be opened at all
|
|
/// as role 0 : useless dummy.
|
|
/// Else classify as role 2.
|
|
/// bit3= Classify non-empty role 5 drives as
|
|
/// BURN_DISC_APPENDABLE with Next Writeable Address
|
|
/// after the end of the file. It is nevertheless
|
|
/// possible to change this address by call
|
|
/// burn_write_opts_set_start_byte().
|
|
/// @since 1.0.6
|
|
pub fn burn_allow_drive_role_4(allowed: ::std::os::raw::c_int);
|
|
}
|
|
unsafe extern "C" {
|
|
/// Find out whether a given address string would lead to the given drive
|
|
/// object. This should be done in advance for track source addresses
|
|
/// with parameter drive_role set to 2.
|
|
/// Although a real MMC drive should hardly exist as two drive objects at
|
|
/// the same time, this can easily happen with stdio-drives. So if more than
|
|
/// one drive is used by the application, then this gesture is advised:
|
|
/// burn_drive_d_get_adr(d2, adr2);
|
|
/// if (burn_drive_equals_adr(d1, adr2, burn_drive_get_drive_role(d2)))
|
|
/// ... Both drive objects point to the same storage facility ...
|
|
///
|
|
/// @param d1 Existing drive object
|
|
/// @param adr2 Address string to be tested. Prefix \"stdio:\" overrides
|
|
/// parameter drive_role2 by either 0 or 2 as appropriate.
|
|
/// The string must be shorter than BURN_DRIVE_ADR_LEN.
|
|
/// @param drive_role2 Role as burn_drive_get_drive_role() would attribute
|
|
/// to adr2 if it was a drive. Use value 2 for checking track
|
|
/// sources or pseudo-drive addresses without \"stdio:\".
|
|
/// Use 1 for checking drive addresses including those with
|
|
/// prefix \"stdio:\".
|
|
/// @return 1= adr2 leads to d1 , 0= adr2 seems not to lead to d1,
|
|
/// -1 = adr2 is bad
|
|
/// @since 0.4.0
|
|
pub fn burn_drive_equals_adr(
|
|
d1: *mut burn_drive,
|
|
adr2: *mut ::std::os::raw::c_char,
|
|
drive_role2: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
/// Extractor object encapsulating intermediate states of extraction.
|
|
/// The clients of libdax_audioxtr shall only allocate pointers to this
|
|
/// struct and get a storage object via libdax_audioxtr_new().
|
|
/// Appropriate initial value for the pointer is NULL.
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct libdax_audioxtr {
|
|
_unused: [u8; 0],
|
|
}
|
|
unsafe extern "C" {
|
|
/// Open an audio file, check whether suitable, create extractor object.
|
|
/// @param xtr Opaque handle to extractor. Gets attached extractor object.
|
|
/// @param path Address of the audio file to extract. \"-\" is stdin (but might
|
|
/// be not suitable for all futurely supported formats).
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return >0 success
|
|
/// 0 unsuitable format
|
|
/// -1 severe error
|
|
/// -2 path not found
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_new(
|
|
xtr: *mut *mut libdax_audioxtr,
|
|
path: *mut ::std::os::raw::c_char,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain identification parameters of opened audio source.
|
|
/// @param xtr Opaque handle to extractor
|
|
/// @param fmt Gets pointed to the audio file format id text: \".wav\" , \".au\"
|
|
/// @param fmt_info Gets pointed to a format info text telling parameters
|
|
/// @param num_channels e.g. 1=mono, 2=stereo, etc
|
|
/// @param sample_rate e.g. 11025, 44100
|
|
/// @param bits_per_sample e.g. 8= 8 bits per sample, 16= 16 bits ...
|
|
/// @param msb_first Byte order of samples: 0= Intel = Little Endian
|
|
/// 1= Motorola = Big Endian
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return >0 success, <=0 failure
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_get_id(
|
|
xtr: *mut libdax_audioxtr,
|
|
fmt: *mut *mut ::std::os::raw::c_char,
|
|
fmt_info: *mut *mut ::std::os::raw::c_char,
|
|
num_channels: *mut ::std::os::raw::c_int,
|
|
sample_rate: *mut ::std::os::raw::c_int,
|
|
bits_per_sample: *mut ::std::os::raw::c_int,
|
|
msb_first: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain a prediction about the extracted size based on internal information
|
|
/// of the formatted file.
|
|
/// @param o Opaque handle to extractor
|
|
/// @param size Gets filled with the predicted size
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 prediction was possible , 0 no prediction could be made
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_get_size(
|
|
o: *mut libdax_audioxtr,
|
|
size: *mut off_t,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Obtain next buffer full of extracted data in desired format (only raw audio
|
|
/// for now).
|
|
/// @param xtr Opaque handle to extractor
|
|
/// @param buffer Gets filled with extracted data
|
|
/// @param buffer_size Maximum number of bytes to be filled into buffer
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= do not stop at predicted end of data
|
|
/// @return >0 number of valid buffer bytes,
|
|
/// 0 End of file
|
|
/// -1 operating system reports error
|
|
/// -2 usage error by application
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_read(
|
|
xtr: *mut libdax_audioxtr,
|
|
buffer: *mut ::std::os::raw::c_char,
|
|
buffer_size: ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Try to obtain a file descriptor which will deliver extracted data
|
|
/// to normal calls of read(2). This may fail because the format is
|
|
/// unsuitable for that, but WAVE (.wav) is ok. If this call succeeds the xtr
|
|
/// object will have forgotten its file descriptor and libdax_audioxtr_read()
|
|
/// will return a usage error. One may use *fd after libdax_audioxtr_destroy()
|
|
/// and will have to close it via close(2) when done with it.
|
|
/// @param o Opaque handle to extractor
|
|
/// @param fd Returns the file descriptor number
|
|
/// @param flag Bitfield for control purposes
|
|
/// bit0= do not dup(2) and close(2) but hand out original fd
|
|
/// @return 1 success, 0 cannot hand out fd , -1 severe error
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_detach_fd(
|
|
o: *mut libdax_audioxtr,
|
|
fd: *mut ::std::os::raw::c_int,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|
|
unsafe extern "C" {
|
|
/// Clean up after extraction and destroy extractor object.
|
|
/// @param xtr Opaque handle to extractor, *xtr is allowed to be NULL,
|
|
/// xtr is set to NULL by this function
|
|
/// @param flag Bitfield for control purposes (unused yet, submit 0)
|
|
/// @return 1 = destroyed object, 0 = was already destroyed
|
|
/// @since 0.2.4
|
|
pub fn libdax_audioxtr_destroy(
|
|
xtr: *mut *mut libdax_audioxtr,
|
|
flag: ::std::os::raw::c_int,
|
|
) -> ::std::os::raw::c_int;
|
|
}
|