MCPcopy Create free account
hub / github.com/RustCV/RustCV / encode_frame_to_jpeg

Function encode_frame_to_jpeg

rustcv-backend-v4l2/examples/web_streaming.rs:186–201  ·  view source on GitHub ↗

辅助函数:YUYV -> JPEG 注意:这里的性能不是最优的,仅做演示。 生产环境应直接使用 libjpeg-turbo 的 C 绑定或 SIMD 优化的库。

(yuyv_data: &[u8], width: u32, height: u32)

Source from the content-addressed store, hash-verified

184/// 注意:这里的性能不是最优的,仅做演示。
185/// 生产环境应直接使用 libjpeg-turbo 的 C 绑定或 SIMD 优化的库。
186fn encode_frame_to_jpeg(yuyv_data: &[u8], width: u32, height: u32) -> Result<Vec<u8>> {
187 // 1. YUYV -> RGB (复用之前的逻辑)
188 let mut rgb_buffer = vec![0u8; (width * height * 3) as usize];
189 yuyv_to_rgb8(yuyv_data, &mut rgb_buffer);
190
191 // 2. RGB -> JPEG (使用 image crate)
192 let mut jpeg_buffer = Vec::new();
193 let img_buffer = image::RgbImage::from_raw(width, height, rgb_buffer)
194 .ok_or_else(|| anyhow::anyhow!("Failed to create image buffer"))?;
195
196 // 使用 JpegEncoder 写入内存,质量设为 75
197 let mut encoder = image::codecs::jpeg::JpegEncoder::new_with_quality(&mut jpeg_buffer, 75);
198 encoder.encode_image(&img_buffer)?;
199
200 Ok(jpeg_buffer)
201}
202
203#[cfg(target_os = "linux")]
204// 专门为 image crate 优化的 YUYV -> RGB8 (R,G,B, R,G,B...)

Callers 1

mainFunction · 0.70

Calls 1

yuyv_to_rgb8Function · 0.70

Tested by

no test coverage detected