[Spice-devel] [spice v10 12/27] server: Add h264 support to the GStreamer video encoder

Christophe Fergeau cfergeau at redhat.com
Fri Mar 4 12:51:50 UTC 2016


Acked-by: Christophe Fergeau <cfergeau at redhat.com>

On Tue, Mar 01, 2016 at 04:53:48PM +0100, Francois Gouget wrote:
> Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
> ---
>  server/gstreamer-encoder.c | 17 ++++++++++++++++-
>  server/reds.c              |  4 +++-
>  2 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
> index 0a63758..f3fef41 100644
> --- a/server/gstreamer-encoder.c
> +++ b/server/gstreamer-encoder.c
> @@ -269,6 +269,15 @@ static gboolean create_pipeline(SpiceGstEncoder *encoder)
>          gstenc = g_strdup_printf("vp8enc end-usage=cbr min-quantizer=10 resize-allowed=true error-resilient=true lag-in-frames=0 deadline=1 cpu-used=4 threads=%d token-partitions=%d", threads, parts);
>          break;
>          }
> +    case SPICE_VIDEO_CODEC_TYPE_H264:
> +        /* - Set tune and sliced-threads to ensure a zero-frame latency
> +         * - qp-min ensures the bitrate does not get needlessly high.
> +         * - Set speed-preset to get realtime speed.
> +         * - Set intra-refresh to get more uniform compressed frame sizes,
> +         *   thus helping with streaming.
> +         */
> +        gstenc = g_strdup("x264enc byte-stream=true aud=true qp-min=15 tune=4 sliced-threads=true speed-preset=ultrafast intra-refresh=true");
> +        break;
>      default:
>          /* gstreamer_encoder_new() should have rejected this codec type */
>          spice_warning("unsupported codec type %d", encoder->base.codec_type);
> @@ -321,6 +330,11 @@ static gboolean configure_pipeline(SpiceGstEncoder *encoder,
>                       "target-bitrate", encoder->bit_rate,
>                       NULL);
>          break;
> +    case SPICE_VIDEO_CODEC_TYPE_H264:
> +        g_object_set(G_OBJECT(encoder->gstenc),
> +                     "bitrate", encoder->bit_rate / 1024,
> +                     NULL);
> +        break;
>      default:
>          /* gstreamer_encoder_new() should have rejected this codec type */
>          spice_warning("unsupported codec type %d", encoder->base.codec_type);
> @@ -703,7 +717,8 @@ VideoEncoder *gstreamer_encoder_new(SpiceVideoCodecType codec_type,
>                                      bitmap_unref_t bitmap_unref)
>  {
>      spice_return_val_if_fail(codec_type == SPICE_VIDEO_CODEC_TYPE_MJPEG ||
> -                             codec_type == SPICE_VIDEO_CODEC_TYPE_VP8, NULL);
> +                             codec_type == SPICE_VIDEO_CODEC_TYPE_VP8 ||
> +                             codec_type == SPICE_VIDEO_CODEC_TYPE_H264, NULL);
>  
>      GError *err = NULL;
>      if (!gst_init_check(NULL, NULL, &err)) {
> diff --git a/server/reds.c b/server/reds.c
> index de98509..a58d40d 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -3427,7 +3427,7 @@ err:
>  static const char default_renderer[] = "sw";
>  
>  #define RED_MAX_VIDEO_CODECS 8
> -static const char default_video_codecs[] = "spice:mjpeg;gstreamer:mjpeg;gstreamer:vp8";
> +static const char default_video_codecs[] = "spice:mjpeg;gstreamer:mjpeg;gstreamer:h264;gstreamer:vp8";
>  
>  /* new interface */
>  SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void)
> @@ -3516,12 +3516,14 @@ static new_video_encoder_t video_encoder_procs[] = {
>  static const EnumNames video_codec_names[] = {
>      {SPICE_VIDEO_CODEC_TYPE_MJPEG, "mjpeg"},
>      {SPICE_VIDEO_CODEC_TYPE_VP8, "vp8"},
> +    {SPICE_VIDEO_CODEC_TYPE_H264, "h264"},
>      {0, NULL},
>  };
>  
>  static int video_codec_caps[] = {
>      SPICE_DISPLAY_CAP_CODEC_MJPEG,
>      SPICE_DISPLAY_CAP_CODEC_VP8,
> +    SPICE_DISPLAY_CAP_CODEC_H264,
>  };
>  
>  
> -- 
> 2.7.0
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160304/12628e80/attachment.sig>


More information about the Spice-devel mailing list