smartencoder: Respect user `stream-format` when specified
[platform/upstream/gstreamer.git] / gst / encoding / gstsmartencoder.c
index b647b8c..1824597 100644 (file)
@@ -681,13 +681,14 @@ smart_encoder_sink_query (GstPad * pad, GstObject * ghostpad, GstQuery * query)
 static gboolean
 gst_smart_encoder_add_parser (GstSmartEncoder * self, GstCaps * format)
 {
+  const gchar *stream_format;
   GstPad *chainpad, *internal_chainpad, *sinkpad;
+  GstStructure *structure = gst_caps_get_structure (format, 0);
   GstElement *capsfilter = gst_element_factory_make ("capsfilter", NULL);
 
   gst_bin_add (GST_BIN (self), capsfilter);
   g_object_set (capsfilter, "caps", format, NULL);
-  if (gst_structure_has_name (gst_caps_get_structure (format, 0),
-          "video/x-h264")) {
+  if (gst_structure_has_name (structure, "video/x-h264")) {
     GstElement *parser = gst_element_factory_make ("h264parse", NULL);
     if (!parser) {
       GST_ERROR_OBJECT (self, "`h264parse` is missing, can't encode smartly");
@@ -695,7 +696,9 @@ gst_smart_encoder_add_parser (GstSmartEncoder * self, GstCaps * format)
       goto failed;
     }
 
-    g_object_set (parser, "config-interval", -1, NULL);
+    stream_format = gst_structure_get_string (structure, "stream-format");
+    if (g_strcmp0 (stream_format, "avc1"))
+      g_object_set (parser, "config-interval", -1, NULL);
 
     if (!gst_bin_add (GST_BIN (self), parser)) {
       GST_ERROR_OBJECT (self, "Could not add parser.");
@@ -719,7 +722,9 @@ gst_smart_encoder_add_parser (GstSmartEncoder * self, GstCaps * format)
       goto failed;
     }
 
-    g_object_set (parser, "config-interval", -1, NULL);
+    stream_format = gst_structure_get_string (structure, "stream-format");
+    if (g_strcmp0 (stream_format, "hvc1"))
+      g_object_set (parser, "config-interval", -1, NULL);
 
     if (!gst_bin_add (GST_BIN (self), parser)) {
       GST_ERROR_OBJECT (self, "Could not add parser.");