static void gst_vaapi_decode_h264_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstVaapiDecodeH264Private *priv; GstVaapiDecoderH264 *decoder; priv = gst_vaapi_decode_h264_get_instance_private (object); switch (prop_id) { case GST_VAAPI_DECODER_H264_PROP_FORCE_LOW_LATENCY: priv->is_low_latency = g_value_get_boolean (value); decoder = GST_VAAPI_DECODER_H264 (GST_VAAPIDECODE (object)->decoder); if (decoder) gst_vaapi_decoder_h264_set_low_latency (decoder, priv->is_low_latency); break; case GST_VAAPI_DECODER_H264_PROP_BASE_ONLY: priv->base_only = g_value_get_boolean (value); decoder = GST_VAAPI_DECODER_H264 (GST_VAAPIDECODE (object)->decoder); if (decoder) gst_vaapi_decoder_h264_set_base_only (decoder, priv->base_only); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static gboolean gst_vaapidecode_create (GstVaapiDecode * decode, GstCaps * caps) { GstVaapiDisplay *dpy; if (!gst_vaapidecode_ensure_display (decode)) return FALSE; dpy = GST_VAAPI_PLUGIN_BASE_DISPLAY (decode); switch (gst_vaapi_codec_from_caps (caps)) { case GST_VAAPI_CODEC_MPEG2: decode->decoder = gst_vaapi_decoder_mpeg2_new (dpy, caps); break; case GST_VAAPI_CODEC_MPEG4: case GST_VAAPI_CODEC_H263: decode->decoder = gst_vaapi_decoder_mpeg4_new (dpy, caps); break; case GST_VAAPI_CODEC_H264: decode->decoder = gst_vaapi_decoder_h264_new (dpy, caps); /* Set the stream buffer alignment for better optimizations */ if (decode->decoder && caps) { GstStructure *const structure = gst_caps_get_structure (caps, 0); const gchar *str = NULL; if ((str = gst_structure_get_string (structure, "alignment"))) { GstVaapiStreamAlignH264 alignment; if (g_strcmp0 (str, "au") == 0) alignment = GST_VAAPI_STREAM_ALIGN_H264_AU; else if (g_strcmp0 (str, "nal") == 0) alignment = GST_VAAPI_STREAM_ALIGN_H264_NALU; else alignment = GST_VAAPI_STREAM_ALIGN_H264_NONE; gst_vaapi_decoder_h264_set_alignment (GST_VAAPI_DECODER_H264 (decode->decoder), alignment); } } break; #if USE_H265_DECODER case GST_VAAPI_CODEC_H265: decode->decoder = gst_vaapi_decoder_h265_new (dpy, caps); /* Set the stream buffer alignment for better optimizations */ if (decode->decoder && caps) { GstStructure *const structure = gst_caps_get_structure (caps, 0); const gchar *str = NULL; if ((str = gst_structure_get_string (structure, "alignment"))) { GstVaapiStreamAlignH265 alignment; if (g_strcmp0 (str, "au") == 0) alignment = GST_VAAPI_STREAM_ALIGN_H265_AU; else if (g_strcmp0 (str, "nal") == 0) alignment = GST_VAAPI_STREAM_ALIGN_H265_NALU; else alignment = GST_VAAPI_STREAM_ALIGN_H265_NONE; gst_vaapi_decoder_h265_set_alignment (GST_VAAPI_DECODER_H265 (decode->decoder), alignment); } } break; #endif case GST_VAAPI_CODEC_WMV3: case GST_VAAPI_CODEC_VC1: decode->decoder = gst_vaapi_decoder_vc1_new (dpy, caps); break; #if USE_JPEG_DECODER case GST_VAAPI_CODEC_JPEG: decode->decoder = gst_vaapi_decoder_jpeg_new (dpy, caps); break; #endif #if USE_VP8_DECODER case GST_VAAPI_CODEC_VP8: decode->decoder = gst_vaapi_decoder_vp8_new (dpy, caps); break; #endif #if USE_VP9_DECODER case GST_VAAPI_CODEC_VP9: decode->decoder = gst_vaapi_decoder_vp9_new (dpy, caps); break; #endif default: decode->decoder = NULL; break; } if (!decode->decoder) return FALSE; gst_vaapi_decoder_set_codec_state_changed_func (decode->decoder, gst_vaapi_decoder_state_changed, decode); return TRUE; }