mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-08-07 09:58:31 +00:00
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:
parent
69fbef6fff
commit
6e14b6bc99
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user