feat: add publishing & audio to ffi (#46)

- Divide FFI protocol into multiple files
- Audio support
- AV Streams/Sources
- Create tracks
- Use Dashmap to store handles
- Add a capture test
     - Ignored by GHA atm
This commit is contained in:
Théo Monnom
2023-05-08 23:12:37 +02:00
committed by GitHub
parent a5caf12902
commit 1c12e749f2
58 changed files with 3046 additions and 1188 deletions
+2 -4
View File
@@ -156,9 +156,7 @@ impl LogoTrack {
let mut video_frame = data.video_frame.lock();
let i420_buffer = &mut video_frame.buffer;
let stride_y = i420_buffer.stride_y();
let stride_u = i420_buffer.stride_u();
let stride_v = i420_buffer.stride_v();
let (stride_y, stride_u, stride_v) = i420_buffer.strides();
let (data_y, data_u, data_v) = i420_buffer.data_mut();
framebuffer.fill(0);
@@ -177,7 +175,7 @@ impl LogoTrack {
yuv_helper::abgr_to_i420(
&framebuffer,
(FB_WIDTH * PIXEL_SIZE) as i32,
(FB_WIDTH * PIXEL_SIZE) as u32,
data_y,
stride_y,
data_u,
+3 -3
View File
@@ -116,11 +116,11 @@ impl SineTrack {
samples_10ms[i] = (val * 32768.0) as i16;
}
rtc_source.capture_frame(AudioFrame {
rtc_source.capture_frame(&AudioFrame {
data: samples_10ms.clone(),
sample_rate_hz: data.sample_rate,
sample_rate: data.sample_rate as u32,
num_channels: 1,
samples_per_channel: samples_count_10ms,
samples_per_channel: samples_count_10ms as u32,
});
}
}
+6 -5
View File
@@ -119,19 +119,20 @@ impl VideoRenderer {
let rgba_ptr = internal.rgba_data.deref_mut();
let rgba_stride = buffer.width() * 4;
let (stride_y, stride_u, stride_v) = buffer.strides();
let (data_y, data_u, data_v) = buffer.data();
yuv_helper::i420_to_abgr(
data_y,
buffer.stride_y(),
stride_y,
data_u,
buffer.stride_u(),
stride_u,
data_v,
buffer.stride_v(),
stride_v,
rgba_ptr,
rgba_stride,
buffer.width(),
buffer.height(),
buffer.width() as i32,
buffer.height() as i32,
)
.unwrap();