#![deny(unsafe_code)]
#![warn(missing_debug_implementations)]
pub mod ac3;
pub mod disc;
pub mod error;
pub mod ifo;
pub mod iso9660;
pub mod lpcm;
pub mod nav;
pub mod source;
pub mod spu;
pub mod udf;
pub mod uops;
pub mod vm;
pub mod vob;
#[cfg(feature = "mkv-output")]
pub mod mkv_writer;
#[cfg(feature = "mkv-output")]
pub mod pipeline;
pub use ac3::{Ac3AudioCodingMode, Ac3BitstreamMode, Ac3Header, Ac3SampleRate, AC3_SYNC_WORD};
pub use disc::{DvdDisc, DvdFile, DvdFileKind};
pub use error::{Error, Result};
pub use ifo::{
menu_existence, AudioApplicationMode, AudioAttributes, AudioCodingMode, AudioLanguageType,
AudioQuantizationDrc, CellAddrEntry, CellPlaybackInfo, CellPositionInfo, DvdChapter, DvdTitle,
DvdTitleEntry, FrameRate, McExtensionEntry, MenuAttributes, MenuType, NavCommand, PaletteEntry,
Pgc, PgcCommandTable, PgcTime, Pgci, PgciLu, PgciLuSrp, PgciSrp, PgciUt, PgciUtSrp, PtlMait,
Ptt, PttTitle, SubpictureAttributes, SubpictureCodingMode, SubpictureLanguageType,
TitleAttributes, TmapEntry, TtSrpt, VideoAspectRatio, VideoAttributes, VideoCodingMode,
VideoResolution, VideoStandard, VmgIfo, VmgPtlMait, VmgVtsAtrt, VmgVtsAtrtEntry, VobuAdmap,
VtsCAdt, VtsIfo, VtsPttSrpt, VtsTmap, VtsTmapti, VtsiMat, DVD_SECTOR, VMG_MAGIC, VTS_MAGIC,
};
pub use iso9660::{
DirectoryRecord, Iso9660Entry, Iso9660Volume, PathTableEntry, PrimaryVolumeDescriptor,
VolumeDescriptorType,
};
pub use lpcm::{
peel_lpcm_payload, LpcmHeader, LpcmQuantisation, LpcmSampleFrequency,
DVD_LPCM_MAX_BITRATE_KBPS, LPCM_HEADER_LEN,
};
pub use nav::{
CallSSTarget, CmpOp, JumpSSTarget, LinkSubset, NavInstruction, Operand, Register, SetOp,
};
pub use source::{parse_dvd_uri, DvdDiscSource, DvdUri};
pub use spu::{
decode_rle_field, render_field, spdcsq_stm_to_ms, ycbcr_to_rgb, PixelRun, SpDcSq, SpuBitmap,
SpuCommand, SpuHeader, SubPictureUnit,
};
pub use udf::{
AdType, AnchorVolumeDescriptorPointer, DescriptorTag, ExtAd, Extent, FileEntry,
FileIdentifierDescriptor, FileSetDescriptor, IcbTag, LbAddr, LogicalVolumeDescriptor, LongAd,
PartitionDescriptor, ShortAd, TagId, UdfFile, UdfVolume,
};
pub use uops::{
title_type_uop_mask, UopIter, UopLevel, UopMask, UserOp, UOP_ANGLE_CHANGE,
UOP_AUDIO_STREAM_CHANGE, UOP_BACKWARD_SCAN, UOP_BIT_COUNT, UOP_BUTTON_SELECT_OR_ACTIVATE,
UOP_DEFINED_BITS, UOP_FORWARD_SCAN, UOP_GO_UP, UOP_KARAOKE_AUDIO_MIX_CHANGE,
UOP_MENU_CALL_ANGLE, UOP_MENU_CALL_AUDIO, UOP_MENU_CALL_PTT, UOP_MENU_CALL_ROOT,
UOP_MENU_CALL_SUBPICTURE, UOP_MENU_CALL_TITLE, UOP_NEXT_PG_SEARCH, UOP_PAUSE_ON,
UOP_PTT_PLAY_OR_SEARCH, UOP_RESUME, UOP_STILL_OFF, UOP_STOP, UOP_SUBPICTURE_STREAM_CHANGE,
UOP_TIME_OR_PTT_SEARCH, UOP_TIME_PLAY_OR_SEARCH, UOP_TITLE_PLAY, UOP_TOP_PG_OR_PREV_PG_SEARCH,
UOP_VIDEO_PRESENTATION_MODE_CHANGE,
};
pub use vm::{
AspectRatio, AudioCapabilities, AudioLanguageExt, AudioMixMode, AudioStreamSelector,
DisplayMode, LanguageCode, LinkAction, ParentalLevel, RegisterFile, ResumePoint,
SubpictureLanguageExt, SubpictureStreamView, VideoPreference, Vm, VmAction, GPRM_COUNT,
MAX_RSM_DEPTH, SPRM_AMXMD, SPRM_ANGLE, SPRM_AUDIO_CAPS, SPRM_AUDIO_STREAM, SPRM_CC_PLT,
SPRM_COUNT, SPRM_HL_BTNN, SPRM_MENU_LANG, SPRM_NV_PGCN, SPRM_NV_TIMER, SPRM_PARENTAL_LEVEL,
SPRM_PGCN, SPRM_PREF_AUDIO_LANG, SPRM_PREF_AUDIO_LANG_EXT, SPRM_PREF_SUBP_LANG,
SPRM_PREF_SUBP_LANG_EXT, SPRM_PTT, SPRM_REGION_MASK, SPRM_SUBPICTURE_STREAM, SPRM_TITLE,
SPRM_VIDEO_PREF, SPRM_VTS_TITLE,
};
pub use vob::{
demux_vobs, demux_vobs_path, looks_like_nav_pack, ButtonInfo, ButtonMode, CellId, DsiGi,
DsiPacket, DvdSubstream, ElementaryStream, HighlightInfo, HighlightStatus, NavPack, NsmlAgli,
NsmlAngleCell, PackHeader, PciPacket, PesPacket, SlColi, SlColiCell, SmlAgli, SmlAngleCell,
SmlAudioGap, SmlPbi, Synci, VobDemuxer, VobId, VobStreams, VobuSri,
};
#[cfg(feature = "registry")]
pub use source::register;
#[cfg(feature = "mkv-output")]
pub use mkv_writer::{pgc_time_to_ns, write_title_to_mkv};
#[cfg(feature = "mkv-output")]
pub use pipeline::{convert_dvd_to_mkv, list_titles};
#[cfg(feature = "registry")]
oxideav_core::register!("dvd", source::register);