mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-11 02:24:13 +00:00
rfbsrc: Add a internal method to disconnect
This also removes the disconnected boolean hack.
This commit is contained in:
parent
ff5dc55c8a
commit
ba93b86011
3 changed files with 28 additions and 18 deletions
|
@ -516,10 +516,7 @@ gst_rfb_src_stop (GstBaseSrc * bsrc)
|
|||
{
|
||||
GstRfbSrc *src = GST_RFB_SRC (bsrc);
|
||||
|
||||
if (src->decoder->connection) {
|
||||
g_object_unref (src->decoder->connection);
|
||||
src->decoder->connection = NULL;
|
||||
}
|
||||
rfb_decoder_disconnect (src->decoder);
|
||||
|
||||
if (src->decoder->frame) {
|
||||
g_free (src->decoder->frame);
|
||||
|
|
|
@ -64,7 +64,6 @@ rfb_decoder_new (void)
|
|||
decoder->rect_width = 0;
|
||||
decoder->rect_height = 0;
|
||||
decoder->shared_flag = TRUE;
|
||||
decoder->disconnected = FALSE;
|
||||
decoder->data = NULL;
|
||||
decoder->data_len = 0;
|
||||
decoder->error = NULL;
|
||||
|
@ -79,16 +78,10 @@ rfb_decoder_free (RfbDecoder * decoder)
|
|||
{
|
||||
g_return_if_fail (decoder != NULL);
|
||||
|
||||
if (decoder->cancellable) {
|
||||
g_cancellable_cancel (decoder->cancellable);
|
||||
g_object_unref (decoder->cancellable);
|
||||
decoder->cancellable = NULL;
|
||||
}
|
||||
rfb_decoder_disconnect (decoder);
|
||||
|
||||
g_clear_object (&decoder->connection);
|
||||
g_clear_object (&decoder->socket_client);
|
||||
g_clear_error (&decoder->error);
|
||||
g_free (decoder->data);
|
||||
g_clear_object (&decoder->cancellable);
|
||||
g_mutex_clear (&decoder->write_lock);
|
||||
g_free (decoder);
|
||||
}
|
||||
|
@ -105,6 +98,8 @@ rfb_decoder_connect_tcp (RfbDecoder * decoder, gchar * host, guint port)
|
|||
g_return_val_if_fail (decoder->connection == NULL, FALSE);
|
||||
g_return_val_if_fail (host != NULL, FALSE);
|
||||
|
||||
g_cancellable_reset (decoder->cancellable);
|
||||
|
||||
connection =
|
||||
g_socket_client_connect_to_host (decoder->socket_client, host, port,
|
||||
decoder->cancellable, &err);
|
||||
|
@ -113,7 +108,6 @@ rfb_decoder_connect_tcp (RfbDecoder * decoder, gchar * host, guint port)
|
|||
goto connect_failed;
|
||||
|
||||
decoder->connection = connection;
|
||||
decoder->disconnected = FALSE;
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
@ -134,6 +128,27 @@ connect_failed:
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
rfb_decoder_disconnect (RfbDecoder * decoder)
|
||||
{
|
||||
GST_DEBUG ("Disconnecting from the rfb server");
|
||||
|
||||
g_return_if_fail (decoder);
|
||||
g_return_if_fail (decoder->cancellable);
|
||||
|
||||
g_cancellable_cancel (decoder->cancellable);
|
||||
|
||||
/* Make sure threaded write a done first, this avoids race condition,
|
||||
* specially when the decoder is freed */
|
||||
g_mutex_lock (&decoder->write_lock);
|
||||
|
||||
g_clear_object (&decoder->connection);
|
||||
g_clear_error (&decoder->error);
|
||||
g_clear_pointer (&decoder->data, g_free);
|
||||
|
||||
g_mutex_unlock (&decoder->write_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* rfb_decoder_iterate:
|
||||
* @decoder: The rfb context
|
||||
|
@ -205,7 +220,6 @@ recv_error:
|
|||
}
|
||||
}
|
||||
g_clear_error (&err);
|
||||
decoder->disconnected = TRUE;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -761,7 +775,6 @@ rfb_decoder_state_framebuffer_update_rectangle (RfbDecoder * decoder)
|
|||
if (((w * h) + (x * y)) > (decoder->width * decoder->height)) {
|
||||
GST_ERROR ("Desktop resize is unsupported.");
|
||||
decoder->state = NULL;
|
||||
decoder->disconnected = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -786,7 +799,7 @@ rfb_decoder_state_framebuffer_update_rectangle (RfbDecoder * decoder)
|
|||
break;
|
||||
}
|
||||
decoder->n_rects--;
|
||||
if (decoder->n_rects == 0 || decoder->disconnected) {
|
||||
if (decoder->n_rects == 0) {
|
||||
decoder->state = NULL;
|
||||
} else {
|
||||
decoder->state = rfb_decoder_state_framebuffer_update_rectangle;
|
||||
|
|
|
@ -56,7 +56,6 @@ struct _RfbDecoder
|
|||
|
||||
/* settable properties */
|
||||
gboolean shared_flag;
|
||||
gboolean disconnected;
|
||||
|
||||
/* readable properties */
|
||||
gboolean inited;
|
||||
|
@ -103,6 +102,7 @@ RfbDecoder *rfb_decoder_new (void);
|
|||
void rfb_decoder_free (RfbDecoder * decoder);
|
||||
gboolean rfb_decoder_connect_tcp (RfbDecoder * decoder,
|
||||
gchar * host, guint port);
|
||||
void rfb_decoder_disconnect (RfbDecoder * decoder);
|
||||
gboolean rfb_decoder_iterate (RfbDecoder * decoder);
|
||||
void rfb_decoder_send_update_request (RfbDecoder * decoder,
|
||||
gboolean incremental, gint x, gint y, gint width, gint height);
|
||||
|
|
Loading…
Reference in a new issue