[Spice-devel] [PATCH spice-gtk v5 5/9] spicy: implement preferred video codec type
Pavel Grunt
pgrunt at redhat.com
Wed Jan 18 10:29:45 UTC 2017
On Fri, 2017-01-06 at 09:18 +0100, Victor Toso wrote:
> From: Victor Toso <me at victortoso.com>
>
> Similar to preferred video compression, a radio button showing
> mjpeg,
> vp8 and h264 in case server has the proper [0] capability
>
> [0] SPICE_DISPLAY_CAP_PREF_VIDEO_CODEC_TYPE
>
> Signed-off-by: Victor Toso <victortoso at redhat.com>
> ---
> src/spicy.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/src/spicy.c b/src/spicy.c
> index c502428..c8d29dd 100644
> --- a/src/spicy.c
> +++ b/src/spicy.c
> @@ -651,6 +651,9 @@ static const GtkActionEntry entries[] = {
> .name = "CompressionMenu",
> .label = "_Preferred image compression",
> },{
> + .name = "VideoCodecTypeMenu",
> + .label = "_Preferred video codec type",
> + },{
> .name = "HelpMenu",
> .label = "_Help",
> },{
> @@ -816,6 +819,22 @@ static const GtkRadioActionEntry
> compression_entries[] = {
> }
> };
>
> +static const GtkRadioActionEntry video_codec_type_entries[] = {
> + {
> + .name = "mjpeg",
> + .label = "mjpeg",
> + .value = SPICE_VIDEO_CODEC_TYPE_MJPEG,
> + },{
> + .name = "vp8",
> + .label = "vp8",
> + .value = SPICE_VIDEO_CODEC_TYPE_VP8,
> + },{
> + .name = "h264",
> + .label = "h264",
> + .value = SPICE_VIDEO_CODEC_TYPE_H264,
> + }
> +};
> +
> static char ui_xml[] =
> "<ui>\n"
> " <menubar action='MainMenu'>\n"
> @@ -864,6 +883,11 @@ static char ui_xml[] =
> #endif
> " <menuitem action='off'/>\n"
> " </menu>\n"
> +" <menu action='VideoCodecTypeMenu'>\n"
> +" <menuitem action='mjpeg'/>\n"
> +" <menuitem action='vp8'/>\n"
> +" <menuitem action='h264'/>\n"
> +" </menu>\n"
> " </menu>\n"
> " <menu action='HelpMenu'>\n"
> " <menuitem action='About'/>\n"
> @@ -916,6 +940,14 @@ static void compression_cb(GtkRadioAction
> *action G_GNUC_UNUSED,
> gtk_radio_action_get
> _current_value(current));
> }
>
> +static void video_codec_type_cb(GtkRadioAction *action
> G_GNUC_UNUSED,
> + GtkRadioAction *current,
> + gpointer user_data)
> +{
> + spice_display_change_preferred_video_codec_type(SPICE_CHANNEL(u
> ser_data),
> + gtk_radio_actio
> n_get_current_value(current));
> +}
> +
> static void
> spice_window_class_init (SpiceWindowClass *klass)
> {
> @@ -970,6 +1002,15 @@ static SpiceWindow
> *create_spice_window(spice_connection *conn, SpiceChannel *ch
> GtkAction *compression_menu_action =
> gtk_action_group_get_action(win->ag, "CompressionMenu");
> gtk_action_set_sensitive(compression_menu_action, FALSE);
> }
> + gtk_action_group_add_radio_actions(win->ag,
> video_codec_type_entries,
> + G_N_ELEMENTS(video_codec_typ
> e_entries), -1,
> + G_CALLBACK(video_codec_type_
> cb), win->display_channel);
> + if (!spice_channel_test_capability(win->display_channel,
> + SPICE_DISPLAY_CAP_PREF_VIDEO
> _CODEC_TYPE)) {
> + GtkAction *video_codec_type_menu_action =
> + gtk_action_group_get_action(win->ag,
> "VideoCodecTypeMenu");
> + gtk_action_set_sensitive(video_codec_type_menu_action,
> FALSE);
> + }
you can also disable unavailable codecs at this point.
Pavel
> gtk_ui_manager_insert_action_group(win->ui, win->ag, 0);
> gtk_window_add_accel_group(GTK_WINDOW(win->toplevel),
> gtk_ui_manager_get_accel_group(win-
> >ui));
More information about the Spice-devel
mailing list