HANDLE pin_handle = INVALID_HANDLE_VALUE;
KSPIN_CONNECT *pin_conn = NULL;
DWORD ret;
+ guint retry_count;
GUID *propsets = NULL;
gulong propsets_len;
*/
pin_conn = ks_video_create_pin_conn_from_media_type (media_type);
- GST_DEBUG ("calling KsCreatePin with pin_id = %d", media_type->pin_id);
+ for (retry_count = 0; retry_count != 5; retry_count++) {
+
+ GST_DEBUG ("calling KsCreatePin with pin_id = %d", media_type->pin_id);
+
+ ret = KsCreatePin (priv->filter_handle, pin_conn, GENERIC_READ,
+ &pin_handle);
+ if (ret != ERROR_NOT_READY)
+ break;
+
+ /* wait and retry, like the reference implementation does */
+ if (WaitForSingleObject (priv->cancel_event, 1000) == WAIT_OBJECT_0)
+ goto cancelled;
+ }
- ret = KsCreatePin (priv->filter_handle, pin_conn, GENERIC_READ, &pin_handle);
if (ret != ERROR_SUCCESS)
goto error_create_pin;
}
g_free (framing);
+ framing = NULL;
g_free (framing_ex);
+ framing_ex = NULL;
/*
* TODO: We also need to respect alignment, but for now we just assume
goto beach;
}
+cancelled:
beach:
{
g_free (framing);
+ g_free (framing_ex);
if (ks_is_valid_handle (pin_handle))
CloseHandle (pin_handle);
g_free (pin_conn);