-use nokhwa::Camera;
-use nokhwa::utils::{RequestedFormat, CameraIndex};
-use nokhwa::pixel_format::RgbFormat;
+use image::ImageFormat;
+use nokhwa::{Camera, FormatDecoder};
+use nokhwa::utils::{
+ RequestedFormat,
+ CameraIndex,
+ CameraFormat,
+ Resolution,
+ FrameFormat,
+ RequestedFormatType
+};
+use nokhwa::pixel_format::{RgbFormat, YuyvFormat};
use rustfft::num_complex::Complex;
use npyz::NpyFile;
+use yuv::{yuyv422_to_rgb, YuvPackedImage, YuvRange, YuvStandardMatrix};
+
use std::io::BufReader;
use std::fs::File;
LUT_LENGTH,
SPECTOGRAM_AREA,
IMAGE_AREA,
+ IMAGE_WIDTH,
+ IMAGE_HEIGHT,
VOLUME_MIN,
VOLUME_REL,
AMPLITUDE_REL,
AMPLITUDE_MIN,
ANGLE_REL,
- ANGLE_MIN
+ ANGLE_MIN,
+ FPS
};
pub struct ImageArray {
let lut: [u8; LUT_LENGTH] = npy.into_vec().unwrap().try_into().unwrap();
// setup the camera
- let index = CameraIndex::Index(0);
- let requested = RequestedFormat::new::<RgbFormat>(
- nokhwa::utils::RequestedFormatType::AbsoluteHighestFrameRate
+ let index = CameraIndex::Index(2);
+ let format = CameraFormat::new(
+ Resolution { width_x: 1920, height_y: 1080 },
+ FrameFormat::YUYV,
+ FPS as u32
+ );
+ let requested = RequestedFormat::new::<YuyvFormat>(
+ RequestedFormatType::Closest(format)
);
let mut camera = Camera::new(index, requested).unwrap();
-
- camera.set_resolution(
- nokhwa::utils::Resolution { width_x: 1920, height_y: 1080}
- ).expect("Resolution problem!");
+ camera.open_stream().unwrap();
// self
Self {
pub fn read_camera (&mut self) {
let frame = self.camera.frame().unwrap();
- println!("{}", frame.resolution());
+ // some code to turn the yuyv into rgb if we need it!
+ // let stride = (IMAGE_WIDTH * 3) as u32;
+ // let vuvy = YuvPackedImage{
+ // yuy: frame.buffer(),
+ // yuy_stride: stride,
+ // width: IMAGE_WIDTH as u32,
+ // height: IMAGE_HEIGHT as u32
+ // };
+ // let mut rgb = [0u8; IMAGE_AREA];
+ // yuyv422_to_rgb(
+ // &vuvy,
+ // &mut rgb,
+ // stride,
+ // YuvRange::Full,
+ // YuvStandardMatrix::Bt601
+ // ).unwrap();
+
+ let decoder = frame.decode_image::<RgbFormat>().unwrap();
+
+ decoder.save_with_format("./image.png", ImageFormat::Png).unwrap();
+
+ self.camera_buffer = decoder.into_vec()[..].into(); // something is wrong here
- self.camera_buffer = frame.buffer()[..].into();
unsafe {
ProcessCapture (