pub struct TimeCode {
pub hours: u8,
pub minutes: u8,
pub seconds: u8,
pub frame: u8,
pub drop_frame: bool,
pub color_frame: bool,
pub field_phase: bool,
pub binary_group_flags: [bool; 3],
pub binary_groups: [u8; 8],
}
Expand description
Contains time information for this frame within a sequence.
Also defined methods to compile this information into a
TV60
, TV50
or Film24
bit sequence, packed into u32
.
Satisfies the SMPTE standard 12M-1999. For more in-depth information, see philrees.co.uk/timecode.
Fields§
§hours: u8
Hours 0 - 23 are valid.
minutes: u8
Minutes 0 - 59 are valid.
seconds: u8
Seconds 0 - 59 are valid.
frame: u8
Frame Indices 0 - 29 are valid.
drop_frame: bool
Whether this is a drop frame.
color_frame: bool
Whether this is a color frame.
field_phase: bool
Field Phase.
binary_group_flags: [bool; 3]
Flags for TimeCode.binary_groups
.
binary_groups: [u8; 8]
The user-defined control codes.
Every entry in this array can use at most 3 bits.
This results in a maximum value of 15, including 0, for each u8
.
Implementations§
source§impl TimeCode
impl TimeCode
sourcepub fn validate(&self, strict: bool) -> UnitResult
pub fn validate(&self, strict: bool) -> UnitResult
Returns an error if this time code is considered invalid.
sourcepub fn pack_time_as_tv60_u32(&self) -> Result<u32>
pub fn pack_time_as_tv60_u32(&self) -> Result<u32>
Pack the SMPTE time code into a u32 value, according to TV60 packing. This is the encoding which is used within a binary exr file.
sourcepub fn from_tv60_time(tv60_time: u32, user_data: u32) -> Self
pub fn from_tv60_time(tv60_time: u32, user_data: u32) -> Self
Unpack a time code from one TV60 encoded u32 value and the encoded user data. This is the encoding which is used within a binary exr file.
sourcepub fn pack_time_as_tv50_u32(&self) -> Result<u32>
pub fn pack_time_as_tv50_u32(&self) -> Result<u32>
Pack the SMPTE time code into a u32 value, according to TV50 packing.
This encoding does not support the drop_frame
flag, it will be lost.
sourcepub fn from_tv50_time(tv50_time: u32, user_data: u32) -> Self
pub fn from_tv50_time(tv50_time: u32, user_data: u32) -> Self
Unpack a time code from one TV50 encoded u32 value and the encoded user data.
This encoding does not support the drop_frame
flag, it will always be false.
sourcepub fn pack_time_as_film24_u32(&self) -> Result<u32>
pub fn pack_time_as_film24_u32(&self) -> Result<u32>
Pack the SMPTE time code into a u32 value, according to FILM24 packing.
This encoding does not support the drop_frame
and color_frame
flags, they will be lost.
sourcepub fn from_film24_time(film24_time: u32, user_data: u32) -> Self
pub fn from_film24_time(film24_time: u32, user_data: u32) -> Self
Unpack a time code from one TV60 encoded u32 value and the encoded user data.
This encoding does not support the drop_frame
and color_frame
flags, they will always be false
.
fn user_data_bit_indices(group_index: usize) -> Range<usize>
sourcepub fn pack_user_data_as_u32(&self) -> u32
pub fn pack_user_data_as_u32(&self) -> u32
Pack the user data u8
array into one u32.
User data values are clamped to the valid range (maximum value is 4).
fn unpack_user_data_from_u32(user_data: u32) -> [u8; 8]
sourcepub fn write<W: Write>(&self, write: &mut W) -> UnitResult
pub fn write<W: Write>(&self, write: &mut W) -> UnitResult
Write this time code to the byte stream, encoded as TV60 integers.
Returns an Error::Invalid
if the fields are out of the allowed range.
Trait Implementations§
impl Copy for TimeCode
impl Eq for TimeCode
impl StructuralPartialEq for TimeCode
Auto Trait Implementations§
impl Freeze for TimeCode
impl RefUnwindSafe for TimeCode
impl Send for TimeCode
impl Sync for TimeCode
impl Unpin for TimeCode
impl UnwindSafe for TimeCode
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.