Reimplement video-codes update with no GObject signals

This is in preparation to remove GObjects, as signals require them.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Frediano Ziglio 2020-03-03 11:04:05 +00:00 committed by Frediano Ziglio
parent 69fbef6fff
commit 6e14b6bc99
3 changed files with 8 additions and 9 deletions

View File

@ -38,7 +38,6 @@ enum
PROP_ZLIB_GLZ_STATE
};
static void on_display_video_codecs_update(GObject *gobject, GParamSpec *pspec, gpointer user_data);
static bool dcc_config_socket(RedChannelClient *rcc);
static void dcc_on_disconnect(RedChannelClient *rcc);
@ -102,9 +101,6 @@ display_channel_client_constructed(GObject *object)
dcc_init_stream_agents(self);
image_encoders_init(&self->priv->encoders, &DCC_TO_DC(self)->priv->encoder_shared_data);
g_signal_connect(DCC_TO_DC(self), "notify::video-codecs",
G_CALLBACK(on_display_video_codecs_update), self);
}
static void
@ -112,7 +108,6 @@ display_channel_client_finalize(GObject *object)
{
DisplayChannelClient *self = DISPLAY_CHANNEL_CLIENT(object);
g_signal_handlers_disconnect_by_func(DCC_TO_DC(self), (void*) on_display_video_codecs_update, self);
g_clear_pointer(&self->priv->preferred_video_codecs, g_array_unref);
g_clear_pointer(&self->priv->client_preferred_video_codecs, g_array_unref);
g_free(self->priv);
@ -1136,10 +1131,8 @@ static void dcc_update_preferred_video_codecs(DisplayChannelClient *dcc)
g_free(codecs_str);
}
static void on_display_video_codecs_update(GObject *gobject, GParamSpec *pspec, gpointer user_data)
void dcc_video_codecs_update(DisplayChannelClient *dcc)
{
DisplayChannelClient *dcc = DISPLAY_CHANNEL_CLIENT(user_data);
/* Only worry about video-codecs update if client has sent
* SPICE_MSGC_DISPLAY_PREFERRED_VIDEO_CODEC_TYPE */
if (dcc->priv->client_preferred_video_codecs == NULL) {

View File

@ -196,6 +196,7 @@ uint64_t dcc_get_max_stream_bit_rate(DisplayChannelClient *dcc);
void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate);
gboolean dcc_is_low_bandwidth(DisplayChannelClient *dcc);
GArray *dcc_get_preferred_video_codecs_for_encoding(DisplayChannelClient *dcc);
void dcc_video_codecs_update(DisplayChannelClient *dcc);
G_END_DECLS

View File

@ -253,7 +253,12 @@ void display_channel_set_video_codecs(DisplayChannel *display, GArray *video_cod
g_clear_pointer(&display->priv->video_codecs, g_array_unref);
display->priv->video_codecs = g_array_ref(video_codecs);
g_object_notify(G_OBJECT(display), "video-codecs");
DisplayChannelClient *dcc;
FOREACH_DCC(display, dcc) {
dcc_video_codecs_update(dcc);
}
video_stream_detach_and_stop(display);
}