mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-06-28 11:00:34 +00:00
122 lines
3.4 KiB
Rust
122 lines
3.4 KiB
Rust
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
use crate::tests::{run_test_pipeline, ExpectedBuffer, ExpectedPacket, Source};
|
|
use gst::prelude::*;
|
|
|
|
fn init() {
|
|
use std::sync::Once;
|
|
static INIT: Once = Once::new();
|
|
|
|
INIT.call_once(|| {
|
|
gst::init().unwrap();
|
|
crate::plugin_register_static().expect("rtpmp4a test");
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn mp4a_one_frame_per_packet() {
|
|
init();
|
|
|
|
let src = "audiotestsrc num-buffers=100 ! audio/x-raw,rate=48000,channels=2 ! fdkaacenc";
|
|
let pay = "rtpmp4apay2";
|
|
let depay = "rtpmp4adepay2";
|
|
|
|
let mut expected_pay = Vec::with_capacity(102);
|
|
for i in 0..102 {
|
|
let position = i * 1024;
|
|
|
|
expected_pay.push(vec![ExpectedPacket::builder()
|
|
.pts(gst::ClockTime::from_nseconds(
|
|
position
|
|
.mul_div_floor(*gst::ClockTime::SECOND, 48_000)
|
|
.unwrap(),
|
|
))
|
|
.flags(if i == 0 {
|
|
gst::BufferFlags::DISCONT | gst::BufferFlags::MARKER
|
|
} else {
|
|
gst::BufferFlags::MARKER
|
|
})
|
|
.rtp_time((position & 0xffff_ffff) as u32)
|
|
.build()]);
|
|
}
|
|
|
|
let mut expected_depay = Vec::with_capacity(101);
|
|
for i in 0..101 {
|
|
let position = (i + 1) * 1024;
|
|
|
|
expected_depay.push(vec![ExpectedBuffer::builder()
|
|
.pts(gst::ClockTime::from_nseconds(
|
|
position
|
|
.mul_div_floor(*gst::ClockTime::SECOND, 48_000)
|
|
.unwrap(),
|
|
))
|
|
.flags(if i == 0 {
|
|
gst::BufferFlags::DISCONT
|
|
} else {
|
|
gst::BufferFlags::empty()
|
|
})
|
|
.build()]);
|
|
}
|
|
|
|
run_test_pipeline(Source::Bin(src), pay, depay, expected_pay, expected_depay);
|
|
}
|
|
|
|
#[test]
|
|
fn mp4a_fragmented() {
|
|
init();
|
|
|
|
let src = "audiotestsrc num-buffers=100 ! audio/x-raw,rate=48000,channels=1 ! fdkaacenc";
|
|
let pay = "rtpmp4apay2 mtu=288";
|
|
let depay = "rtpmp4adepay2";
|
|
|
|
let mut expected_pay = Vec::with_capacity(102);
|
|
for i in 0..102 {
|
|
let position = i * 1024;
|
|
|
|
let pts = gst::ClockTime::from_nseconds(
|
|
position
|
|
.mul_div_floor(*gst::ClockTime::SECOND, 48_000)
|
|
.unwrap(),
|
|
);
|
|
let rtp_time = (position & 0xffff_ffff) as u32;
|
|
|
|
expected_pay.push(vec![
|
|
ExpectedPacket::builder()
|
|
.pts(pts)
|
|
.flags(if i == 0 {
|
|
gst::BufferFlags::DISCONT
|
|
} else {
|
|
gst::BufferFlags::empty()
|
|
})
|
|
.rtp_time(rtp_time)
|
|
.marker_bit(false)
|
|
.build(),
|
|
ExpectedPacket::builder()
|
|
.pts(pts)
|
|
.flags(gst::BufferFlags::MARKER)
|
|
.rtp_time(rtp_time)
|
|
.build(),
|
|
]);
|
|
}
|
|
|
|
let mut expected_depay = Vec::with_capacity(101);
|
|
for i in 0..101 {
|
|
let position = (i + 1) * 1024;
|
|
|
|
expected_depay.push(vec![ExpectedBuffer::builder()
|
|
.pts(gst::ClockTime::from_nseconds(
|
|
position
|
|
.mul_div_floor(*gst::ClockTime::SECOND, 48_000)
|
|
.unwrap(),
|
|
))
|
|
.flags(if i == 0 {
|
|
gst::BufferFlags::DISCONT
|
|
} else {
|
|
gst::BufferFlags::empty()
|
|
})
|
|
.build()]);
|
|
}
|
|
|
|
run_test_pipeline(Source::Bin(src), pay, depay, expected_pay, expected_depay);
|
|
}
|