pub struct Packet { /* private fields */ }Implementations§
Source§impl Packet
impl Packet
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
examples/generate_black_square_512x512.rs (line 65)
4fn main() {
5 let filename = "bk.png";
6 let width = 512;
7 let height = 512;
8
9 let mut format_ctx =
10 FormatContext::new("image2", filename, None).expect("Failed to create FormatContext");
11
12 let mut codec = CodecContext::from_encoder_id(low_level::AVCodecID_AV_CODEC_ID_PNG)
13 .expect("Failed to create CodecContext");
14
15 let mut stream =
16 Stream::new(&mut format_ctx, Some(&*codec)).expect("Failed to create a stream");
17
18 codec
19 .set_size(width, height)
20 .set_framerate(1)
21 .set_pixel_format(low_level::AVPixelFormat_AV_PIX_FMT_RGB24)
22 .set_bitrate(400_000)
23 .set_gop_size(1)
24 .set_max_b_frames(1);
25
26 if (format_ctx.get_output_format().flags & low_level::AVFMT_GLOBALHEADER as i32) != 0 {
27 let flags = codec.get_flags() | low_level::AV_CODEC_FLAG_GLOBAL_HEADER as i32;
28
29 codec.set_flags(flags);
30 }
31
32 match codec.open(None) {
33 Err(err) => panic!("Error opening codec: {}", err),
34 Ok(()) => {}
35 };
36
37 codec.fill_stream_parameters(&mut stream);
38
39 match format_ctx.open(filename, AVIO_FLAG_WRITE as i32) {
40 Err(err) => panic!("Error opening file! {err}"),
41 Ok(()) => {}
42 };
43
44 format_ctx
45 .write_header(None)
46 .expect("Failed to write a header!");
47
48 let mut frame = Frame::from_size_and_pixfmt(width, height, AVPixelFormat_AV_PIX_FMT_RGB24)
49 .expect("Failed to make a frame!");
50
51 let data = frame.data_plane_mut(0).expect("Failed to get plane!");
52
53 for y in 0usize..height as usize {
54 for x in 0usize..width as usize {
55 let coord = y * (width as usize * 3usize) + (x * 3);
56
57 data[coord + 0] = 0xff;
58 data[coord + 1] = 0xff;
59 data[coord + 2] = 0xff;
60 }
61 }
62
63 codec.send_frame(&frame);
64
65 let mut packet = Packet::new();
66
67 codec.receive_packet(&mut packet);
68
69 format_ctx.write_frame(&mut packet);
70
71 packet.clear();
72
73 format_ctx.write_trailer();
74
75 println!("Hello, world!");
76}More examples
examples/decode_frame.rs (line 50)
11fn main() {
12 let url = if let Some(url) = std::env::args().skip(1).next() {
13 url
14 } else {
15 eprintln!("No input file!");
16 std::process::exit(1);
17 };
18
19 let mut format_context = FormatContext::open_input(&url).expect("Failed to open file!");
20
21 format_context.find_stream_info();
22
23 for i in format_context.streams() {
24 println!("{i:#?}");
25 }
26
27 let video_stream = format_context
28 .streams()
29 .filter(|x| x.codec_parameters().is_video())
30 .next()
31 .expect("Failed to find a video stream");
32
33 println!("CodecParams idx: {}", video_stream.index());
34 println!(
35 "CodecParams format: {}",
36 video_stream.codec_parameters().format()
37 );
38
39 let mut codec = CodecContext::from_decoder_id(video_stream.codec_parameters().codec_id())
40 .expect("Failed to create CodecContext");
41
42 codec.fill_from_parameters(&video_stream.codec_parameters());
43
44 codec.open(None).unwrap();
45
46 println!("Pixel format: {}", codec.get_pixel_format());
47
48 format_context.seek_msec(video_stream.index(), 4 * 60 * 1000);
49
50 let mut packet = Packet::new();
51
52 while format_context.read_frame(&mut packet) >= 0 {
53 println!("{}", packet.stream_index());
54
55 if packet.stream_index() == video_stream.index() {
56 codec.send_packet(&packet);
57
58 let mut frame = Frame::empty().expect("Failed to allocate a frame");
59
60 while codec.receive_frame(&mut frame) >= 0 {
61 println!("{}", frame.format());
62 {
63 let (width, height) = video_stream.codec_parameters().size();
64 println!("{width} x {height}");
65
66 let mut new_frame =
67 Frame::from_size_and_pixfmt(width, height, AVPixelFormat_AV_PIX_FMT_RGB24)
68 .unwrap();
69
70 let sws = Sws::new(
71 width,
72 height,
73 video_stream.codec_parameters().format(),
74 width,
75 height,
76 AVPixelFormat_AV_PIX_FMT_RGB24,
77 SWS_BILINEAR as _,
78 );
79
80 println!("{:?} {:?}", frame.linesize(), new_frame.linesize());
81
82 sws.scale(&frame, &mut new_frame);
83
84 let mut file = std::fs::OpenOptions::new()
85 .create(true)
86 .truncate(true)
87 .write(true)
88 .open("data.bin")
89 .unwrap();
90
91 file.write(new_frame.data_plane(0).unwrap()).unwrap();
92 }
93 }
94
95 break;
96 }
97 }
98
99 println!("Exit!");
100}Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Examples found in repository?
examples/generate_black_square_512x512.rs (line 71)
4fn main() {
5 let filename = "bk.png";
6 let width = 512;
7 let height = 512;
8
9 let mut format_ctx =
10 FormatContext::new("image2", filename, None).expect("Failed to create FormatContext");
11
12 let mut codec = CodecContext::from_encoder_id(low_level::AVCodecID_AV_CODEC_ID_PNG)
13 .expect("Failed to create CodecContext");
14
15 let mut stream =
16 Stream::new(&mut format_ctx, Some(&*codec)).expect("Failed to create a stream");
17
18 codec
19 .set_size(width, height)
20 .set_framerate(1)
21 .set_pixel_format(low_level::AVPixelFormat_AV_PIX_FMT_RGB24)
22 .set_bitrate(400_000)
23 .set_gop_size(1)
24 .set_max_b_frames(1);
25
26 if (format_ctx.get_output_format().flags & low_level::AVFMT_GLOBALHEADER as i32) != 0 {
27 let flags = codec.get_flags() | low_level::AV_CODEC_FLAG_GLOBAL_HEADER as i32;
28
29 codec.set_flags(flags);
30 }
31
32 match codec.open(None) {
33 Err(err) => panic!("Error opening codec: {}", err),
34 Ok(()) => {}
35 };
36
37 codec.fill_stream_parameters(&mut stream);
38
39 match format_ctx.open(filename, AVIO_FLAG_WRITE as i32) {
40 Err(err) => panic!("Error opening file! {err}"),
41 Ok(()) => {}
42 };
43
44 format_ctx
45 .write_header(None)
46 .expect("Failed to write a header!");
47
48 let mut frame = Frame::from_size_and_pixfmt(width, height, AVPixelFormat_AV_PIX_FMT_RGB24)
49 .expect("Failed to make a frame!");
50
51 let data = frame.data_plane_mut(0).expect("Failed to get plane!");
52
53 for y in 0usize..height as usize {
54 for x in 0usize..width as usize {
55 let coord = y * (width as usize * 3usize) + (x * 3);
56
57 data[coord + 0] = 0xff;
58 data[coord + 1] = 0xff;
59 data[coord + 2] = 0xff;
60 }
61 }
62
63 codec.send_frame(&frame);
64
65 let mut packet = Packet::new();
66
67 codec.receive_packet(&mut packet);
68
69 format_ctx.write_frame(&mut packet);
70
71 packet.clear();
72
73 format_ctx.write_trailer();
74
75 println!("Hello, world!");
76}Sourcepub fn stream_index(&self) -> i32
pub fn stream_index(&self) -> i32
Examples found in repository?
examples/decode_frame.rs (line 53)
11fn main() {
12 let url = if let Some(url) = std::env::args().skip(1).next() {
13 url
14 } else {
15 eprintln!("No input file!");
16 std::process::exit(1);
17 };
18
19 let mut format_context = FormatContext::open_input(&url).expect("Failed to open file!");
20
21 format_context.find_stream_info();
22
23 for i in format_context.streams() {
24 println!("{i:#?}");
25 }
26
27 let video_stream = format_context
28 .streams()
29 .filter(|x| x.codec_parameters().is_video())
30 .next()
31 .expect("Failed to find a video stream");
32
33 println!("CodecParams idx: {}", video_stream.index());
34 println!(
35 "CodecParams format: {}",
36 video_stream.codec_parameters().format()
37 );
38
39 let mut codec = CodecContext::from_decoder_id(video_stream.codec_parameters().codec_id())
40 .expect("Failed to create CodecContext");
41
42 codec.fill_from_parameters(&video_stream.codec_parameters());
43
44 codec.open(None).unwrap();
45
46 println!("Pixel format: {}", codec.get_pixel_format());
47
48 format_context.seek_msec(video_stream.index(), 4 * 60 * 1000);
49
50 let mut packet = Packet::new();
51
52 while format_context.read_frame(&mut packet) >= 0 {
53 println!("{}", packet.stream_index());
54
55 if packet.stream_index() == video_stream.index() {
56 codec.send_packet(&packet);
57
58 let mut frame = Frame::empty().expect("Failed to allocate a frame");
59
60 while codec.receive_frame(&mut frame) >= 0 {
61 println!("{}", frame.format());
62 {
63 let (width, height) = video_stream.codec_parameters().size();
64 println!("{width} x {height}");
65
66 let mut new_frame =
67 Frame::from_size_and_pixfmt(width, height, AVPixelFormat_AV_PIX_FMT_RGB24)
68 .unwrap();
69
70 let sws = Sws::new(
71 width,
72 height,
73 video_stream.codec_parameters().format(),
74 width,
75 height,
76 AVPixelFormat_AV_PIX_FMT_RGB24,
77 SWS_BILINEAR as _,
78 );
79
80 println!("{:?} {:?}", frame.linesize(), new_frame.linesize());
81
82 sws.scale(&frame, &mut new_frame);
83
84 let mut file = std::fs::OpenOptions::new()
85 .create(true)
86 .truncate(true)
87 .write(true)
88 .open("data.bin")
89 .unwrap();
90
91 file.write(new_frame.data_plane(0).unwrap()).unwrap();
92 }
93 }
94
95 break;
96 }
97 }
98
99 println!("Exit!");
100}pub fn data(&self) -> &[u8] ⓘ
pub fn duration(&self) -> i64
pub fn position(&self) -> i64
pub unsafe fn raw(&self) -> *const AVPacket
pub unsafe fn raw_mut(&mut self) -> *mut AVPacket
Trait Implementations§
Auto Trait Implementations§
impl !Send for Packet
impl !Sync for Packet
impl Freeze for Packet
impl RefUnwindSafe for Packet
impl Unpin for Packet
impl UnsafeUnpin for Packet
impl UnwindSafe for Packet
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