diff --git a/server/src/bin/lesavka-uvc.rs b/server/src/bin/lesavka-uvc.rs index ef42745..e1627b7 100644 --- a/server/src/bin/lesavka-uvc.rs +++ b/server/src/bin/lesavka-uvc.rs @@ -198,6 +198,8 @@ impl UvcConfig { let interval = env_u32("LESAVKA_UVC_INTERVAL", 0); let mut max_packet = env_u32("LESAVKA_UVC_MAXPACKET", 3072); if env::var("LESAVKA_UVC_BULK").is_ok() { + max_packet = max_packet.min(512); + } else { max_packet = max_packet.min(1024); } @@ -386,6 +388,7 @@ fn sanitize_streaming_control(data: &[u8], state: &UvcState) -> [u8; STREAM_CTRL let format_index = data[2]; let frame_index = data[3]; let interval = read_le32(data, 4); + let host_payload = read_le32(data, 22); if format_index == 1 { out[2] = 1; @@ -396,6 +399,10 @@ fn sanitize_streaming_control(data: &[u8], state: &UvcState) -> [u8; STREAM_CTRL if interval == state.cfg.interval { write_le32(&mut out[4..8], interval); } + if host_payload > 0 { + let payload = host_payload.min(state.cfg.max_packet); + write_le32(&mut out[22..26], payload); + } } out }