forked from mirrors/gstreamer-rs
35 lines
1.2 KiB
Rust
35 lines
1.2 KiB
Rust
use crate::VideoFormat;
|
|
pub(super) const VBI_HD_MIN_PIXEL_WIDTH: u32 = 1280;
|
|
|
|
// rustdoc-stripper-ignore-next
|
|
/// Video Vertical Blanking Interval related Errors.
|
|
#[derive(thiserror::Error, Clone, Copy, Debug, Eq, PartialEq)]
|
|
pub enum VideoVBIError {
|
|
#[error("Format and/or pixel_width is not supported")]
|
|
Unsupported,
|
|
|
|
#[error("Not enough space left in the current line")]
|
|
NotEnoughSpace,
|
|
|
|
#[error("Not enough data left in the current line")]
|
|
NotEnoughData,
|
|
|
|
#[error("Insufficient line buffer length {found}. Expected: {expected}")]
|
|
InsufficientLineBufLen { found: usize, expected: usize },
|
|
}
|
|
|
|
// rustdoc-stripper-ignore-next
|
|
/// Returns the buffer length needed to store the line.
|
|
pub(super) fn line_buffer_len(format: VideoFormat, width: u32) -> usize {
|
|
skip_assert_initialized!();
|
|
// Taken from gst-plugins-base/gst-libs/gst/video/video-info.c:fill_planes
|
|
match format {
|
|
VideoFormat::V210 => ((width as usize + 47) / 48) * 128,
|
|
VideoFormat::Uyvy => {
|
|
// round up width to the next multiple of 4
|
|
// FIXME: {integer}::next_multiple_of was stabilised in rustc 1.73.0
|
|
((width as usize * 2) + 3) & !3
|
|
}
|
|
_ => unreachable!(),
|
|
}
|
|
}
|