x265enc: add accept-caps handling
authorThiago Santos <thiagoss@osg.samsung.com>
Mon, 17 Aug 2015 17:38:52 +0000 (14:38 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Mon, 17 Aug 2015 17:39:44 +0000 (14:39 -0300)
Ovewrite default handling to avoid doing a caps query. Check
the received caps against the possible formats supported by
the x265 library.

ext/x265/gstx265enc.c

index be516a2..08a4a3e 100644 (file)
@@ -297,6 +297,32 @@ gst_x265_enc_get_supported_input_caps (void)
   return caps;
 }
 
+static gboolean
+gst_x265_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
+{
+  gboolean res;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_ACCEPT_CAPS:{
+      GstCaps *acceptable, *caps;
+
+      acceptable = gst_x265_enc_get_supported_input_caps ();
+      gst_query_parse_accept_caps (query, &caps);
+
+      gst_query_set_accept_caps_result (query,
+          gst_caps_is_subset (caps, acceptable));
+      gst_caps_unref (acceptable);
+      res = TRUE;
+    }
+      break;
+    default:
+      res = GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
+      break;
+  }
+
+  return res;
+}
+
 static GstCaps *
 gst_x265_enc_sink_getcaps (GstVideoEncoder * enc, GstCaps * filter)
 {
@@ -336,6 +362,7 @@ gst_x265_enc_class_init (GstX265EncClass * klass)
   gstencoder_class->flush = GST_DEBUG_FUNCPTR (gst_x265_enc_flush);
   gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x265_enc_finish);
   gstencoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_x265_enc_sink_getcaps);
+  gstencoder_class->sink_query = GST_DEBUG_FUNCPTR (gst_x265_enc_sink_query);
   gstencoder_class->propose_allocation =
       GST_DEBUG_FUNCPTR (gst_x265_enc_propose_allocation);