- commit
- bc8f8b60de00154f0fea0fe80b8d634e69d9a842
- parent
- cd9cb2e2666b8f000c551e670f088462ca3fc0d5
- author
- Dami <dami.etoile@gmail.com>
| M | src-tauri/ | 16 | ++-------------- |
| M | src-tauri/ | 23 | ++++++++++++++++++++++- |
@@ -6,7 +6,7 @@ pub use crate::media::connect::ConnectResult;
66 use crate::media::connect::{connect_client, disconnect_client};77 88 pub use crate::media::frame_channel::FramePayload;9-use crate::media::frame_channel::release_frame_channel_slot_for_generation;9+use crate::media::frame_channel::acknowledge_frame_delivery;1010 use crate::media::input_delivery::send_input;1111 1212 pub use crate::media::input_delivery::{PointerFeedbackPayload, PointerFeedbackTerminalReason};@@ -72,19 +72,7 @@ pub async fn iroh_client_ack_frame(
7272 state: State<'_, AppState>,7373 generation: u64,7474 ) -> Result<bool, String> {75- // Serialize selection of the generation-owned counter against connect and76- // disconnect. Each media task keeps its own counter, so an old callback can77- // never consume a permit reserved by a replacement session.78- let _connection_serial = state.client_connection_serial.lock().await;79- let delivery = state.frame_delivery.lock().await;80- let Some((current_generation, in_flight)) = delivery.as_ref() else {81- return Ok(false);82- };83- Ok(release_frame_channel_slot_for_generation(84- in_flight,85- *current_generation,86- generation,87- ))75+ acknowledge_frame_delivery(&state, generation).await8876 }8977 9078 @@ -4,6 +4,8 @@ use serde::Serialize;
44 use sigil_protocol::{MAX_MEDIA_PAYLOAD_LEN, MAX_VIDEO_DIMENSION, MAX_VIDEO_PIXELS};55 use tauri::{AppHandle, Emitter};66 7+use crate::commands::state::AppState;8+79 pub(crate) fn byte_to_codec(value: u8) -> &'static str {810 match value {911 1 => "h264",@@ -204,7 +206,7 @@ pub(crate) fn release_frame_channel_slot(in_flight: &AtomicUsize) {
204206 });205207 }206208 207-pub(crate) fn release_frame_channel_slot_for_generation(209+fn release_frame_channel_slot_for_generation(208210 in_flight: &AtomicUsize,209211 current_generation: u64,210212 generation: u64,@@ -216,6 +218,25 @@ pub(crate) fn release_frame_channel_slot_for_generation(
216218 true217219 }218220 221+pub(crate) async fn acknowledge_frame_delivery(222+ state: &AppState,223+ generation: u64,224+) -> Result<bool, String> {225+ // Serialize selection of the generation-owned counter against connect and226+ // disconnect. Each media task keeps its own counter, so an old callback can227+ // never consume a permit reserved by a replacement session.228+ let _connection_serial = state.client_connection_serial.lock().await;229+ let delivery = state.frame_delivery.lock().await;230+ let Some((current_generation, in_flight)) = delivery.as_ref() else {231+ return Ok(false);232+ };233+ Ok(release_frame_channel_slot_for_generation(234+ in_flight,235+ *current_generation,236+ generation,237+ ))238+}239+219240 pub(crate) fn next_media_generation(counter: &AtomicU64) -> Result<u64, String> {220241 counter221242 .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current| {