1use libav_sys_ng::{av_packet_alloc, av_packet_free, av_packet_unref, AVPacket};
2
3pub struct Packet {
4 pub(crate) inner: *mut AVPacket,
5}
6
7impl Default for Packet {
8 fn default() -> Self {
9 Self::new()
10 }
11}
12
13impl Packet {
14 pub fn new() -> Self {
15 Self {
16 inner: unsafe { av_packet_alloc() },
17 }
18 }
19
20 pub fn clear(&mut self) {
21 unsafe {
22 av_packet_unref(self.inner);
23 }
24 }
25
26 pub fn stream_index(&self) -> i32 {
27 unsafe { (*self.inner).stream_index }
28 }
29
30 pub fn data(&self) -> &[u8] {
31 unsafe { core::slice::from_raw_parts((*self.inner).data, (*self.inner).size as _) }
32 }
33
34 pub fn duration(&self) -> i64 {
35 unsafe { (*self.inner).duration }
36 }
37
38 pub fn position(&self) -> i64 {
39 unsafe { (*self.inner).pos }
40 }
41
42 pub unsafe fn raw(&self) -> *const AVPacket {
43 self.inner.cast()
44 }
45
46 pub unsafe fn raw_mut(&mut self) -> *mut AVPacket {
47 self.inner
48 }
49}
50
51impl Drop for Packet {
52 fn drop(&mut self) {
53 unsafe { av_packet_free(&mut self.inner) };
54 }
55}