mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
wasapisink: fix a rounding error when calculating the buffer frame count
The calculation for the frame count in the non-aligned case resulted in a one too low buffer frame count. This resulted in: 1) exclusive mode not working as the frame count has to match exactly there. 2) Buffer underruns in shared mode as the current write() code doesn't handle catching up to low buffer levels (fixed in the next commit) To fix just use the wasapi API to get the buffer size which will always be correct. https://bugzilla.gnome.org/show_bug.cgi?id=796354
This commit is contained in:
parent
6184527532
commit
839cc39268
1 changed files with 5 additions and 3 deletions
|
@ -845,6 +845,7 @@ gst_wasapi_util_initialize_audioclient (GstElement * self,
|
|||
REFERENCE_TIME default_period, min_period;
|
||||
REFERENCE_TIME device_period, device_buffer_duration;
|
||||
guint rate;
|
||||
guint32 n_frames;
|
||||
HRESULT hr;
|
||||
|
||||
hr = IAudioClient_GetDevicePeriod (client, &default_period, &min_period);
|
||||
|
@ -877,8 +878,6 @@ gst_wasapi_util_initialize_audioclient (GstElement * self,
|
|||
|
||||
if (hr == AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED &&
|
||||
sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE) {
|
||||
guint32 n_frames;
|
||||
|
||||
GST_WARNING_OBJECT (self, "initialize failed due to unaligned period %i",
|
||||
(int) device_period);
|
||||
|
||||
|
@ -897,7 +896,10 @@ gst_wasapi_util_initialize_audioclient (GstElement * self,
|
|||
}
|
||||
HR_FAILED_RET (hr, IAudioClient::Initialize, FALSE);
|
||||
|
||||
*ret_devicep_frames = (rate * device_period * 100) / GST_SECOND;
|
||||
hr = IAudioClient_GetBufferSize (client, &n_frames);
|
||||
HR_FAILED_RET (hr, IAudioClient::GetBufferSize, FALSE);
|
||||
|
||||
*ret_devicep_frames = n_frames;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue