nannou_webcam 0.20.0

The webcam API for nannou - the creative-coding framework.
Documentation
use bevy::image::Image;
use bevy::render::render_resource::{Extent3d, TextureFormat};

pub fn frame_texture_format(is_srgb: bool) -> TextureFormat {
    if is_srgb {
        TextureFormat::Rgba8UnormSrgb
    } else {
        TextureFormat::Rgba8Unorm
    }
}

pub fn write_frame_to_image(
    image: &mut Image,
    extent: Extent3d,
    pixels: Vec<u8>,
    format: TextureFormat,
) {
    if image.texture_descriptor.size != extent {
        image.resize(extent);
    }
    if image.texture_descriptor.format != format {
        image.texture_descriptor.format = format;
    }
    image.data = Some(pixels);
}

#[cfg(not(target_arch = "wasm32"))]
pub fn rgb_to_rgba(rgb: &[u8]) -> Vec<u8> {
    let mut rgba = Vec::with_capacity(rgb.len() / 3 * 4);
    for chunk in rgb.chunks_exact(3) {
        rgba.extend_from_slice(&[chunk[0], chunk[1], chunk[2], 0xff]);
    }
    rgba
}