pub struct VideoTimestamp {
pub value: i64,
pub timescale: i32,
}Expand description
Rational media timestamp.
Fields§
§value: i64Timestamp numerator.
timescale: i32Ticks per second.
Implementations§
Source§impl VideoTimestamp
impl VideoTimestamp
Sourcepub const RTP_VIDEO_TIMESCALE: i32 = 90_000
pub const RTP_VIDEO_TIMESCALE: i32 = 90_000
RTP video clock frequency used by OpenIPC streams.
Sourcepub const fn new(value: i64, timescale: i32) -> Option<Self>
pub const fn new(value: i64, timescale: i32) -> Option<Self>
Construct a timestamp, rejecting a non-positive timescale.
Sourcepub const fn from_rtp(value: u32) -> Self
pub const fn from_rtp(value: u32) -> Self
Construct a timestamp from a 90 kHz RTP video timestamp.
Examples found in repository?
examples/decode_access_unit.rs (line 37)
2fn main() -> Result<(), Box<dyn std::error::Error>> {
3 use std::{
4 env, fs, thread,
5 time::{Duration, Instant},
6 };
7
8 use openipc_video::{
9 DecoderOptions, EncodedAccessUnit, PlatformDecoder, VideoCodec, VideoDecoder,
10 VideoTimestamp,
11 };
12
13 let mut args = env::args().skip(1);
14 let codec =
15 match args.next().as_deref() {
16 Some("h264") => VideoCodec::H264,
17 Some("h265") | Some("hevc") => VideoCodec::H265,
18 _ => return Err(
19 "usage: decode_access_unit <h264|h265> <annex-b-access-unit> [--allow-software]"
20 .into(),
21 ),
22 };
23 let path = args
24 .next()
25 .ok_or("usage: decode_access_unit <h264|h265> <annex-b-access-unit> [--allow-software]")?;
26 let allow_software = args.any(|argument| argument == "--allow-software");
27 let data = fs::read(path)?;
28 let capabilities = PlatformDecoder::probe_capabilities();
29 println!("capabilities={capabilities:?}");
30 let mut decoder = PlatformDecoder::new(DecoderOptions {
31 require_hardware: !allow_software,
32 ..DecoderOptions::default()
33 })?;
34 let outcome = decoder.submit(EncodedAccessUnit::new(
35 codec,
36 data,
37 VideoTimestamp::from_rtp(0),
38 true,
39 ))?;
40 println!("submit={outcome:?}");
41
42 let deadline = Instant::now() + Duration::from_secs(1);
43 while Instant::now() < deadline {
44 if let Some(frame) = decoder.latest_frame() {
45 let dimensions = frame.dimensions();
46 println!(
47 "decoded={}x{} pixel_format={:?}",
48 dimensions.width,
49 dimensions.height,
50 openipc_video::DecodedSurface::pixel_format(&frame.surface),
51 );
52 #[cfg(target_os = "macos")]
53 println!("iosurface={}", frame.surface.is_io_surface_backed());
54 #[cfg(target_os = "linux")]
55 println!(
56 "drm_fourcc={:#010x} pitches={:?}",
57 frame.surface.drm_fourcc(),
58 frame.surface.plane_pitches()
59 );
60 #[cfg(target_os = "windows")]
61 println!(
62 "d3d11_subresource={} texture={:?}",
63 frame.surface.subresource_index(),
64 frame.surface.texture()
65 );
66 return Ok(());
67 }
68 thread::sleep(Duration::from_millis(2));
69 }
70 Err(format!("no decoded frame; stats={:?}", decoder.stats()).into())
71}Trait Implementations§
Source§impl Clone for VideoTimestamp
impl Clone for VideoTimestamp
Source§fn clone(&self) -> VideoTimestamp
fn clone(&self) -> VideoTimestamp
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for VideoTimestamp
Source§impl Debug for VideoTimestamp
impl Debug for VideoTimestamp
Source§impl Default for VideoTimestamp
impl Default for VideoTimestamp
Source§fn default() -> VideoTimestamp
fn default() -> VideoTimestamp
Returns the “default value” for a type. Read more
impl Eq for VideoTimestamp
Source§impl Hash for VideoTimestamp
impl Hash for VideoTimestamp
Source§impl PartialEq for VideoTimestamp
impl PartialEq for VideoTimestamp
impl StructuralPartialEq for VideoTimestamp
Auto Trait Implementations§
impl Freeze for VideoTimestamp
impl RefUnwindSafe for VideoTimestamp
impl Send for VideoTimestamp
impl Sync for VideoTimestamp
impl Unpin for VideoTimestamp
impl UnsafeUnpin for VideoTimestamp
impl UnwindSafe for VideoTimestamp
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
Mutably borrows from an owned value. Read more