media-core 0.9.1

Define media types and provide basic media utilities
Documentation
use media_core::{audio::*, frame::*};

#[test]
fn test_sample_format() {
    assert_eq!(SampleFormat::U8.bits(), 8);
    assert_eq!(SampleFormat::S16.bits(), 16);
    assert_eq!(SampleFormat::S32.bits(), 32);
    assert_eq!(SampleFormat::F32.bits(), 32);
    assert_eq!(SampleFormat::F64.bits(), 64);

    assert_eq!(SampleFormat::U8.bytes(), 1);
    assert_eq!(SampleFormat::S16.bytes(), 2);
    assert_eq!(SampleFormat::S32.bytes(), 4);
    assert_eq!(SampleFormat::F32.bytes(), 4);
    assert_eq!(SampleFormat::F64.bytes(), 8);

    assert!(!SampleFormat::U8.is_planar());
    assert!(!SampleFormat::S16.is_planar());
    assert!(!SampleFormat::S32.is_planar());
    assert!(!SampleFormat::F32.is_planar());
    assert!(!SampleFormat::F64.is_planar());
    assert!(SampleFormat::U8P.is_planar());
    assert!(SampleFormat::S16P.is_planar());
    assert!(SampleFormat::S32P.is_planar());
    assert!(SampleFormat::F32P.is_planar());
    assert!(SampleFormat::F64P.is_planar());
}

#[test]
fn test_channel_layout_from_mask() {
    let layout = ChannelLayout::from_mask(ChannelMasks::Stereo).unwrap();
    assert_eq!(layout.channels.get(), 2);
    assert_eq!(layout.order, ChannelOrder::Native);

    let layout = ChannelLayout::from_mask(ChannelMasks::Surround_5_1).unwrap();
    assert_eq!(layout.channels.get(), 6);
    assert_eq!(layout.order, ChannelOrder::Native);
}

#[test]
fn test_channel_layout_default() {
    let mono = ChannelLayout::default_from_channels(1).unwrap();
    assert_eq!(mono.channels.get(), 1);
    assert_eq!(mono.spec, ChannelLayoutSpec::Mask(ChannelMasks::Mono));

    let stereo = ChannelLayout::default_from_channels(2).unwrap();
    assert_eq!(stereo.channels.get(), 2);
    assert_eq!(stereo.spec, ChannelLayoutSpec::Mask(ChannelMasks::Stereo));

    assert!(ChannelLayout::default_from_channels(0).is_err());
}

#[test]
fn test_audio_frame_descriptor() {
    let desc = AudioFrameDescriptor::try_new(SampleFormat::F32, 2, 1024, 44100).unwrap();

    assert_eq!(desc.format, SampleFormat::F32);
    assert_eq!(desc.channels().get(), 2);
    assert_eq!(desc.samples.get(), 1024);
    assert_eq!(desc.sample_rate.get(), 44100);
}

#[test]
fn test_audio_frame() {
    let frame = Frame::audio_creator().create(SampleFormat::S16, 2, 1024, 44100);

    assert!(frame.is_ok());

    let frame = frame.unwrap();

    let desc = frame.audio_descriptor().unwrap();
    assert_eq!(desc.format, SampleFormat::S16);
    assert_eq!(desc.channels().get(), 2);
    assert_eq!(desc.samples.get(), 1024);
    assert_eq!(desc.sample_rate.get(), 44100);
}

#[test]
fn test_audio_frame_from_buffer() {
    let sample_format = SampleFormat::F32;
    let data_size = 2 * 1024 * sample_format.bytes() as u32;
    let buffer = vec![0u8; data_size as usize];

    let frame = Frame::audio_creator().create_from_buffer(sample_format, 2, 1024, 44100, buffer.as_slice());

    assert!(frame.is_ok());

    let frame = frame.unwrap();

    let desc = frame.audio_descriptor().unwrap();
    assert_eq!(desc.format, SampleFormat::F32);
    assert_eq!(desc.channels().get(), 2);
    assert_eq!(desc.samples.get(), 1024);
    assert_eq!(desc.sample_rate.get(), 44100);
}