Skip to content

Commit

Permalink
wasapisrc: Don't provide a clock based on WASAPI's clock
Browse files Browse the repository at this point in the history
The clock seems to have a lot of drift (or we're using it incorrectly)
which causes buffers to be late on the sink and get dropped.

Disable till someone can investigate whether our usage of the API is
incorrect (it looked correct to me) or if something is wrong.
  • Loading branch information
nirbheek committed Apr 18, 2018
1 parent 3f90235 commit c187a09
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions sys/wasapi/gstwasapisrc.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
#define DEFAULT_EXCLUSIVE FALSE
#define DEFAULT_LOW_LATENCY FALSE
#define DEFAULT_AUDIOCLIENT3 FALSE
/* The clock provided by WASAPI is always off and causes buffers to be late
* very quickly on the sink. Disable pending further investigation. */
#define DEFAULT_PROVIDE_CLOCK FALSE

enum
{
Expand Down Expand Up @@ -86,8 +89,10 @@ static guint gst_wasapi_src_read (GstAudioSrc * asrc, gpointer data,
static guint gst_wasapi_src_delay (GstAudioSrc * asrc);
static void gst_wasapi_src_reset (GstAudioSrc * asrc);

#ifdef DEFAULT_PROVIDE_CLOCK
static GstClockTime gst_wasapi_src_get_time (GstClock * clock,
gpointer user_data);
#endif

#define gst_wasapi_src_parent_class parent_class
G_DEFINE_TYPE (GstWasapiSrc, gst_wasapi_src, GST_TYPE_AUDIO_SRC);
Expand Down Expand Up @@ -160,13 +165,15 @@ gst_wasapi_src_class_init (GstWasapiSrcClass * klass)
static void
gst_wasapi_src_init (GstWasapiSrc * self)
{
#ifdef DEFAULT_PROVIDE_CLOCK
/* override with a custom clock */
if (GST_AUDIO_BASE_SRC (self)->clock)
gst_object_unref (GST_AUDIO_BASE_SRC (self)->clock);

GST_AUDIO_BASE_SRC (self)->clock = gst_audio_clock_new ("GstWasapiSrcClock",
gst_wasapi_src_get_time, gst_object_ref (self),
(GDestroyNotify) gst_object_unref);
#endif

self->role = DEFAULT_ROLE;
self->sharemode = AUDCLNT_SHAREMODE_SHARED;
Expand Down Expand Up @@ -473,6 +480,9 @@ gst_wasapi_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec)
hr = IAudioClock_GetFrequency (self->client_clock, &self->client_clock_freq);
HR_FAILED_GOTO (hr, IAudioClock::GetFrequency, beach);

GST_INFO_OBJECT (self, "wasapi clock freq is %" G_GUINT64_FORMAT,
self->client_clock_freq);

/* Get capture source client and start it up */
if (!gst_wasapi_util_get_capture_client (GST_ELEMENT (self), self->client,
&self->capture_client)) {
Expand Down Expand Up @@ -652,6 +662,7 @@ gst_wasapi_src_reset (GstAudioSrc * asrc)
GST_OBJECT_UNLOCK (self);
}

#ifdef DEFAULT_PROVIDE_CLOCK
static GstClockTime
gst_wasapi_src_get_time (GstClock * clock, gpointer user_data)
{
Expand All @@ -678,3 +689,4 @@ gst_wasapi_src_get_time (GstClock * clock, gpointer user_data)

return result;
}
#endif

0 comments on commit c187a09

Please sign in to comment.