chansrv: sound, handle skips in audio acks
This commit is contained in:
parent
4023aa7f1c
commit
8ac35d7ed1
@ -61,6 +61,7 @@ static int g_cBlockNo = 0;
|
||||
static int g_bytes_in_stream = 0;
|
||||
static FIFO g_in_fifo;
|
||||
static int g_bytes_in_fifo = 0;
|
||||
static int g_unacked_frames = 0;
|
||||
|
||||
static struct stream *g_stream_inp = NULL;
|
||||
static struct stream *g_stream_incoming_packet = NULL;
|
||||
@ -660,6 +661,7 @@ sound_send_wave_data_chunk(char *data, int data_bytes)
|
||||
out_uint16_le(s, time);
|
||||
out_uint16_le(s, format_index); /* wFormatNo */
|
||||
g_cBlockNo++;
|
||||
g_unacked_frames++;
|
||||
out_uint8(s, g_cBlockNo);
|
||||
g_sent_time[g_cBlockNo & 0xff] = time;
|
||||
g_sent_flag[g_cBlockNo & 0xff] = 1;
|
||||
@ -799,19 +801,42 @@ sound_process_wave_confirm(struct stream *s, int size)
|
||||
{
|
||||
int wTimeStamp;
|
||||
int cConfirmedBlockNo;
|
||||
int cleared_count;
|
||||
int time;
|
||||
int time_diff;
|
||||
int block_no;
|
||||
int block_no_clamped;
|
||||
int found;
|
||||
int index;
|
||||
|
||||
time = g_time2();
|
||||
in_uint16_le(s, wTimeStamp);
|
||||
in_uint8(s, cConfirmedBlockNo);
|
||||
time_diff = time - g_sent_time[cConfirmedBlockNo & 0xff];
|
||||
g_sent_flag[cConfirmedBlockNo & 0xff] &= ~1;
|
||||
|
||||
cleared_count = 0;
|
||||
found = 0;
|
||||
block_no = g_cBlockNo;
|
||||
for (index = 0; index < g_unacked_frames; index++)
|
||||
{
|
||||
block_no_clamped = block_no & 0xff;
|
||||
if ((cConfirmedBlockNo == block_no_clamped) || found)
|
||||
{
|
||||
found = 1;
|
||||
if (g_sent_flag[block_no_clamped] & 1)
|
||||
{
|
||||
LOG(10, ("sound_process_wave_confirm: clearing %d",
|
||||
block_no_clamped));
|
||||
g_sent_flag[block_no_clamped] &= ~1;
|
||||
cleared_count++;
|
||||
}
|
||||
}
|
||||
block_no--;
|
||||
}
|
||||
LOG(10, ("sound_process_wave_confirm: wTimeStamp %d, "
|
||||
"cConfirmedBlockNo %d time diff %d",
|
||||
wTimeStamp, cConfirmedBlockNo, time_diff));
|
||||
|
||||
"cConfirmedBlockNo %d time diff %d cleared_count %d "
|
||||
"g_unacked_frames %d", wTimeStamp, cConfirmedBlockNo, time_diff,
|
||||
cleared_count, g_unacked_frames));
|
||||
g_unacked_frames -= cleared_count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user