diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2017-04-12 13:17:24 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2017-04-12 13:18:18 +0300 |
commit | 244a80787d628f2fd4750b85c1513efddc0cf9f9 (patch) | |
tree | 88229bd02f4b5b9831300611f64b844d13e4ff26 /sys | |
parent | 94fe5c690e757ef986f7ba4eee1a068eded07bf4 (diff) | |
download | gstreamer-plugins-bad-244a80787d628f2fd4750b85c1513efddc0cf9f9.tar.gz |
Revert "directsoundsrc: Correctly calculate segsize and segtotal"
This reverts commit 6d256d9908e292f6c593bf45e69354f6b613cc8b.
It was configuring the period/buffer size in a way that often causes
drop-outs or complete underruns. Needs further investigation.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/directsound/gstdirectsoundsrc.c | 32 | ||||
-rw-r--r-- | sys/directsound/gstdirectsoundsrc.h | 2 |
2 files changed, 19 insertions, 15 deletions
diff --git a/sys/directsound/gstdirectsoundsrc.c b/sys/directsound/gstdirectsoundsrc.c index 3bb62fdcd..397746641 100644 --- a/sys/directsound/gstdirectsoundsrc.c +++ b/sys/directsound/gstdirectsoundsrc.c @@ -564,20 +564,22 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec) GST_WARNING ("buffer-time was less than latency"); } - spec->segsize = - gst_util_uint64_scale (spec->latency_time, wfx.nAvgBytesPerSec, 1000000); - if (spec->segsize < GST_AUDIO_INFO_BPF (&spec->info)) - spec->segsize = GST_AUDIO_INFO_BPF (&spec->info); - else if (spec->segsize % GST_AUDIO_INFO_BPF (&spec->info) != 0) - spec->segsize = - ((spec->segsize + GST_AUDIO_INFO_BPF (&spec->info) - - 1) / GST_AUDIO_INFO_BPF (&spec->info)) * - GST_AUDIO_INFO_BPF (&spec->info); - - dsoundsrc->latency_time = - gst_util_uint64_scale (spec->segsize, 1000000, - GST_AUDIO_INFO_BPF (&spec->info) * GST_AUDIO_INFO_RATE (&spec->info)); - spec->segtotal = spec->buffer_time / dsoundsrc->latency_time; + /* Save the times */ + dsoundsrc->buffer_time = spec->buffer_time; + dsoundsrc->latency_time = spec->latency_time; + + dsoundsrc->latency_size = (gint) wfx.nAvgBytesPerSec * + dsoundsrc->latency_time / 1000000.0; + + spec->segsize = (guint) (((double) spec->buffer_time / 1000000.0) * + wfx.nAvgBytesPerSec); + + /* just in case */ + if (spec->segsize < 1) + spec->segsize = 1; + + spec->segtotal = GST_AUDIO_INFO_BPF (&spec->info) * 8 * + (wfx.nAvgBytesPerSec / spec->segsize); GST_DEBUG_OBJECT (asrc, "bytes/sec: %lu, buffer size: %d, segsize: %d, segtotal: %d", @@ -816,7 +818,7 @@ gst_directsound_src_mixer_find (GstDirectSoundSrc * dsoundsrc, if (mmres != MMSYSERR_NOERROR) continue; - mmres = mixerGetDevCaps ((UINT_PTR) dsoundsrc->mixer, + mmres = mixerGetDevCaps ((UINT_PTR)dsoundsrc->mixer, mixer_caps, sizeof (MIXERCAPS)); if (mmres != MMSYSERR_NOERROR) { diff --git a/sys/directsound/gstdirectsoundsrc.h b/sys/directsound/gstdirectsoundsrc.h index 31218976d..9aa225fb3 100644 --- a/sys/directsound/gstdirectsoundsrc.h +++ b/sys/directsound/gstdirectsoundsrc.h @@ -86,8 +86,10 @@ struct _GstDirectSoundSrc DWORD notifysize; guint buffer_size; + guint latency_size; guint bytes_per_sample; + guint buffer_time; guint latency_time; HMIXER mixer; |