Hello community, here is the log from the commit of package gstreamer-transcoder for openSUSE:Leap:15.2 checked in at 2020-02-09 15:03:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/gstreamer-transcoder (Old) and /work/SRC/openSUSE:Leap:15.2/.gstreamer-transcoder.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-transcoder" Sun Feb 9 15:03:11 2020 rev:22 rq:772489 version:1.16.0 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/gstreamer-transcoder/gstreamer-transcoder.changes 2020-01-15 15:09:15.978033700 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.gstreamer-transcoder.new.26092/gstreamer-transcoder.changes 2020-02-09 15:03:14.542770750 +0100 @@ -1,0 +2,25 @@ +Wed Jun 5 21:23:54 UTC 2019 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 1.16.0: + + No changes, version bump only. + +------------------------------------------------------------------- +Wed Sep 26 22:36:00 UTC 2018 - bjorn....@gmail.com + +- Update to version 1.14.1: + + transcodebin: Handle files with several tracks of a kind. This + doesn't support transcoding the various tracks yet, but there + is a FIXME about that for now. + + Force profile=high in youtube target. + +------------------------------------------------------------------- +Mon Jun 25 10:23:07 UTC 2018 - bjorn....@gmail.com + +- Update to version 1.14.0: + + Misc bug fixing compared to 1.12.2. +- Add gtk-doc BuildRequires and pass disable_doc=false and + disable_introspection=false to meson, ensure we build the + features we want. Package the now built api documentations in + devel package. + +------------------------------------------------------------------- Old: ---- gst-transcoder-1.12.2.tar.gz New: ---- gst-transcoder-1.16.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-transcoder.spec ++++++ --- /var/tmp/diff_new_pack.uu2FKC/_old 2020-02-09 15:03:14.866770933 +0100 +++ /var/tmp/diff_new_pack.uu2FKC/_new 2020-02-09 15:03:14.866770933 +0100 @@ -1,7 +1,7 @@ # # spec file for package gstreamer-transcoder # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,25 +12,27 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define _name gst-transcoder Name: gstreamer-transcoder -Version: 1.12.2 +Version: 1.16.0 Release: 0 Summary: GStreamer Transcoding API License: LGPL-2.1-only Group: Productivity/Multimedia/Other URL: https://github.com/pitivi/gst-transcoder Source: https://github.com/pitivi/%{_name}/archive/%{version}.tar.gz#/%{_name}-%{version}.tar.gz + +BuildRequires: gtk-doc BuildRequires: meson BuildRequires: pkgconfig BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gobject-2.0) BuildRequires: pkgconfig(gobject-introspection-1.0) -BuildRequires: pkgconfig(gstreamer-pbutils-1.0) +BuildRequires: pkgconfig(gstreamer-pbutils-1.0) >= 1.15.0 %description GStreamer Transcoding API. @@ -67,7 +69,10 @@ %setup -q -n %{_name}-%{version} %build -%meson +%meson \ + -Ddisable_doc=false \ + -Ddisable_introspection=false \ + %{nil} %meson_build %install @@ -77,22 +82,19 @@ %postun -n libgsttranscoder-1_0-0 -p /sbin/ldconfig %files -%defattr(-,root,root) %license LICENSE %{_bindir}/gst-transcoder-1.0 %{_libdir}/gstreamer-1.0/libgsttranscode.so %{_datadir}/gstreamer-1.0/encoding-profiles/ %files -n libgsttranscoder-1_0-0 -%defattr(-,root,root) %{_libdir}/libgsttranscoder-1.0.so.0 %files -n typelib-1_0-GstTranscoder-1_0 -%defattr(-,root,root) %{_libdir}/girepository-1.0/GstTranscoder-1.0.typelib %files devel -%defattr(-,root,root) +%doc %{_datadir}/gtk-doc/html/gstreamer-transcoder/ %{_datadir}/gir-1.0/GstTranscoder-1.0.gir %{_includedir}/gstreamer-1.0/gst/transcoder/ %{_libdir}/libgsttranscoder-1.0.so ++++++ gst-transcoder-1.12.2.tar.gz -> gst-transcoder-1.16.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/data/targets/online-service/youtube.gep new/gst-transcoder-1.16.0/data/targets/online-service/youtube.gep --- old/gst-transcoder-1.12.2/data/targets/online-service/youtube.gep 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/data/targets/online-service/youtube.gep 2018-07-23 16:41:18.000000000 +0200 @@ -19,6 +19,6 @@ [streamprofile-default-1] parent=default type=video -format=video/x-h264 +format=video/x-h264,profile=high preset=Profile YouTube pass=0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/docs/libs/meson.build new/gst-transcoder-1.16.0/docs/libs/meson.build --- old/gst-transcoder-1.12.2/docs/libs/meson.build 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/docs/libs/meson.build 2018-07-23 16:41:18.000000000 +0200 @@ -32,7 +32,7 @@ scan_args : ['--deprecated-guards=GST_DISABLE_DEPRECATED', '--ignore-decorators=GST_EXPORT', ], - scanobj_args : ['--type-init-func="gst_init(NULL,NULL)'], + scanobjs_args : ['--type-init-func="gst_init(NULL,NULL)"'], gobject_typesfile : types, dependencies : [gst_transcoder_dep, gst_dep], fixxref_args: doc_deps + ['--html-dir=' + get_option('prefix') + '/share/gtk-doc/html/'], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/gst/transcode/gsttranscodebin.c new/gst-transcoder-1.16.0/gst/transcode/gsttranscodebin.c --- old/gst-transcoder-1.12.2/gst/transcode/gsttranscodebin.c 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/gst/transcode/gsttranscodebin.c 2018-07-23 16:41:18.000000000 +0200 @@ -104,7 +104,8 @@ GstCaps * caps) { GstPad *filter_src = NULL, *filter_sink = NULL; - GstElement *filter = NULL; + GstElement* filter = NULL; + GstObject *filter_parent; if (self->video_filter && !g_strcmp0 (gst_structure_get_name (gst_caps_get_structure (caps, 0)), @@ -119,6 +120,15 @@ if (!filter) return pad; + if ((filter_parent = gst_object_get_parent (GST_OBJECT (filter)))) { + GST_WARNING_OBJECT (self, "Filter already in use (inside %" GST_PTR_FORMAT ").", + filter_parent); + GST_FIXME_OBJECT(self, "Handle transcoding several streams of a same kind."); + gst_object_unref(filter_parent); + + return pad; + } + /* We are guaranteed filters only have 1 unique sinkpad and srcpad */ GST_OBJECT_LOCK (filter); filter_sink = filter->sinkpads->data; @@ -177,24 +187,34 @@ pad = _insert_filter (self, sinkpad, pad, caps); lret = gst_pad_link (pad, sinkpad); - if (G_UNLIKELY (lret != GST_PAD_LINK_OK)) { - GstCaps *othercaps = gst_pad_query_caps (sinkpad, NULL); - caps = gst_pad_get_current_caps (pad); - - GST_ELEMENT_ERROR_WITH_DETAILS (self, CORE, PAD, - (NULL), - ("Couldn't link pads:\n %" GST_PTR_FORMAT ": %" GST_PTR_FORMAT - "\nand:\n" " %" GST_PTR_FORMAT ": %" GST_PTR_FORMAT "\n\n", - pad, caps, sinkpad, othercaps), - ("linking-error", GST_TYPE_PAD_LINK_RETURN, lret, - "source-pad", GST_TYPE_PAD, pad, - "source-caps", GST_TYPE_CAPS, caps, - "sink-pad", GST_TYPE_PAD, sinkpad, - "sink-caps", GST_TYPE_CAPS, othercaps, NULL)); - - gst_caps_unref (caps); - if (othercaps) - gst_caps_unref (othercaps); + switch (lret) { + case GST_PAD_LINK_OK: + break; + case GST_PAD_LINK_WAS_LINKED: + GST_FIXME_OBJECT(self, "Pad %" GST_PTR_FORMAT " was already linked", + sinkpad); + break; + default: + { + GstCaps* othercaps = gst_pad_query_caps(sinkpad, NULL); + caps = gst_pad_get_current_caps(pad); + + GST_ELEMENT_ERROR_WITH_DETAILS(self, CORE, PAD, + (NULL), + ("Couldn't link pads:\n %" GST_PTR_FORMAT ": %" GST_PTR_FORMAT + "\nand:\n" + " %" GST_PTR_FORMAT ": %" GST_PTR_FORMAT "\n\n", + pad, caps, sinkpad, othercaps), + ("linking-error", GST_TYPE_PAD_LINK_RETURN, lret, + "source-pad", GST_TYPE_PAD, pad, + "source-caps", GST_TYPE_CAPS, caps, + "sink-pad", GST_TYPE_PAD, sinkpad, + "sink-caps", GST_TYPE_CAPS, othercaps, NULL)); + + gst_caps_unref(caps); + if (othercaps) + gst_caps_unref(othercaps); + } } gst_object_unref (sinkpad); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/gst-libs/gst/transcoding/transcoder/gsttranscoder.c new/gst-transcoder-1.16.0/gst-libs/gst/transcoding/transcoder/gsttranscoder.c --- old/gst-transcoder-1.12.2/gst-libs/gst/transcoding/transcoder/gsttranscoder.c 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/gst-libs/gst/transcoding/transcoder/gsttranscoder.c 2018-07-23 16:41:18.000000000 +0200 @@ -653,6 +653,7 @@ "msg-error", G_TYPE_STRING, message, NULL); emit_error (self, g_error_copy (err), details); + gst_structure_free (details); g_clear_error (&err); g_free (debug); g_free (name); @@ -1032,9 +1033,6 @@ profile = create_encoding_profile (encoding_profile); - if (!profile) - return NULL; - return gst_transcoder_new_full (source_uri, dest_uri, profile, NULL); } @@ -1061,7 +1059,6 @@ g_return_val_if_fail (source_uri, NULL); g_return_val_if_fail (dest_uri, NULL); - g_return_val_if_fail (profile, NULL); return g_object_new (GST_TYPE_TRANSCODER, "src-uri", source_uri, "dest-uri", dest_uri, "profile", profile, @@ -1085,7 +1082,7 @@ g_mutex_lock (&data->m); data->done = TRUE; if (data->user_error && (*data->user_error) == NULL) - g_propagate_error (data->user_error, g_error_copy (error)); + g_propagate_error (data->user_error, error); g_cond_broadcast (&data->cond); g_mutex_unlock (&data->m); } @@ -1116,7 +1113,6 @@ g_mutex_init (&data.m); g_cond_init (&data.cond); - data.user_error = error; g_signal_connect (self, "error", G_CALLBACK (_error_cb), &data); g_signal_connect (self, "done", G_CALLBACK (_done_cb), &data); gst_transcoder_run_async (self); @@ -1127,6 +1123,12 @@ } g_mutex_unlock (&data.m); + if (data.user_error) { + g_propagate_error (error, *data.user_error); + + return FALSE; + } + return TRUE; } @@ -1146,6 +1148,13 @@ GST_DEBUG_OBJECT (self, "Play"); + if (!self->profile) { + emit_error (self, g_error_new (GST_TRANSCODER_ERROR, + GST_TRANSCODER_ERROR_FAILED, "No \"profile\" provided"), NULL); + + return; + } + self->target_state = GST_STATE_PLAYING; state_ret = gst_element_set_state (self->transcodebin, GST_STATE_PLAYING); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/meson.build new/gst-transcoder-1.16.0/meson.build --- old/gst-transcoder-1.12.2/meson.build 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/meson.build 2018-07-23 16:41:18.000000000 +0200 @@ -1,5 +1,5 @@ project('gst-transcoder', 'c', - version : '1.12.1', + version : '1.15.0.1', meson_version : '>= 0.36.0') gst_version = meson.project_version() @@ -57,21 +57,25 @@ dependencies : [gst_dep, gst_pbutils_dep], include_directories : incl) +gir = find_program('g-ir-scanner', required : false) gnome = import ('gnome') -girtargets = gnome.generate_gir(gst_transcoder, - sources : ['gst-libs/gst/transcoding/transcoder/gsttranscoder.h', - 'gst-libs/gst/transcoding/transcoder/gsttranscoder.c'], - nsversion : apiversion, - namespace : 'GstTranscoder', - identifier_prefix : 'Gst', - symbol_prefix : 'gst_', - includes : ['GObject-2.0', - 'Gst-' + apiversion, - 'GstPbutils-' + apiversion], - dependencies: [gst_dep], - install : true, - extra_args : ['--add-init-section=extern gboolean gst_init(gint *argc, gchar **argv); gst_init(NULL,NULL);'] -) +build_gir = gir.found() and not meson.is_cross_build() and not get_option('disable_introspection') +if build_gir + girtargets = gnome.generate_gir(gst_transcoder, + sources : ['gst-libs/gst/transcoding/transcoder/gsttranscoder.h', + 'gst-libs/gst/transcoding/transcoder/gsttranscoder.c'], + nsversion : apiversion, + namespace : 'GstTranscoder', + identifier_prefix : 'Gst', + symbol_prefix : 'gst_', + includes : ['GObject-2.0', + 'Gst-' + apiversion, + 'GstPbutils-' + apiversion], + dependencies: [gst_dep], + install : true, + extra_args : ['--add-init-section=extern gboolean gst_init(gint *argc, gchar **argv); gst_init(NULL,NULL);'] + ) +endif pkg_mod = import('pkgconfig') pkg_mod.generate(libraries : gst_transcoder, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/meson_options.txt new/gst-transcoder-1.16.0/meson_options.txt --- old/gst-transcoder-1.12.2/meson_options.txt 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/meson_options.txt 2018-07-23 16:41:18.000000000 +0200 @@ -1,2 +1,2 @@ -option('disable-introspection', type : 'boolean', value : false, description : 'disable introspection of the library') option('disable_doc', type : 'boolean', value : false) +option('disable_introspection', type : 'boolean', value : false, description : 'disable introspection of the library') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/tools/gst-transcoder.c new/gst-transcoder-1.16.0/tools/gst-transcoder.c --- old/gst-transcoder-1.12.2/tools/gst-transcoder.c 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/tools/gst-transcoder.c 2018-07-23 16:41:18.000000000 +0200 @@ -54,7 +54,7 @@ "\n" "Encoding targets describe well known formats which\n" "those are provided in '.gep' files. You can list\n" - "available ones using the `--list` argument.\n"; + "available ones using the `--list-targets` argument.\n"; typedef struct { @@ -62,6 +62,7 @@ gboolean list; GstEncodingProfile *profile; gchar *src_uri, *dest_uri, *encoding_format, *size; + gchar *framerate; } Settings; static void @@ -71,6 +72,7 @@ settings->rate = -1; settings->encoding_format = NULL; settings->size = NULL; + settings->framerate = NULL; } static void @@ -119,29 +121,41 @@ { GList *video_profiles, *tmp; gchar *p, *tmpstr, **vsize; - gint width, height; + gint width = 0, height = 0; + GValue framerate = G_VALUE_INIT; - if (!settings->size) + if (!settings->size && !settings->framerate) return TRUE; - p = tmpstr = g_strdup (settings->size); + if (settings->size) { + p = tmpstr = g_strdup (settings->size); - for (; *p; ++p) - *p = g_ascii_tolower (*p); + for (; *p; ++p) + *p = g_ascii_tolower (*p); - vsize = g_strsplit (tmpstr, "x", -1); - g_free (tmpstr); + vsize = g_strsplit (tmpstr, "x", -1); + g_free (tmpstr); - if (!vsize[1] || vsize[2]) { - g_strfreev (vsize); - error ("Video size should be in the form: WxH, got %s", settings->size); + if (!vsize[1] || vsize[2]) { + g_strfreev (vsize); + error ("Video size should be in the form: WxH, got %s", settings->size); + + return FALSE; + } - return FALSE; + width = g_ascii_strtoull (vsize[0], NULL, 0); + height = g_ascii_strtoull (vsize[1], NULL, 10); + g_strfreev (vsize); } - width = g_ascii_strtoull (vsize[0], NULL, 0); - height = g_ascii_strtoull (vsize[1], NULL, 10); - g_strfreev (vsize); + if (settings->framerate) { + g_value_init (&framerate, GST_TYPE_FRACTION); + if (!gst_value_deserialize (&framerate, settings->framerate)) { + error ("Video framerate should be either a fraction or an integer" + " not: %s", settings->framerate); + return FALSE; + } + } video_profiles = get_profiles_of_type (settings->profile, GST_TYPE_ENCODING_VIDEO_PROFILE); @@ -153,8 +167,12 @@ else rest = gst_caps_copy (rest); - gst_caps_set_simple (rest, "width", G_TYPE_INT, width, - "height", G_TYPE_INT, height, NULL); + if (settings->size) { + gst_caps_set_simple (rest, "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, NULL); + } + if (settings->framerate) + gst_caps_set_value (rest, "framerate", &framerate); gst_encoding_profile_set_restriction (tmp->data, rest); } @@ -286,6 +304,9 @@ "set frame size (WxH or abbreviation)", NULL}, {"audio-rate", 'r', 0, G_OPTION_ARG_INT, &settings.rate, "set audio sampling rate (in Hz)", NULL}, + {"framerate", 'f', 0, G_OPTION_ARG_STRING, &settings.framerate, + "set video framerate as a fraction (24/1 for 24fps)" + " or a single number (24 for 24fps))", NULL}, {"video-encoder", 'v', 0, G_OPTION_ARG_STRING, &settings.size, "The video encoder to use.", NULL}, {NULL} @@ -294,7 +315,7 @@ g_set_prgname ("gst-transcoder"); ctx = g_option_context_new ("<source uri> <destination uri> " - "[<encoding target name[/<encoding profile name>]]"); + "[<encoding format>[/<encoding profile name>]]"); g_option_context_set_summary (ctx, HELP_SUMMARY); g_option_context_add_main_entries (ctx, options, NULL); @@ -334,16 +355,26 @@ } settings.profile = create_encoding_profile (settings.encoding_format); + if (!settings.profile) { error ("Could not find any encoding format for %s\n", settings.encoding_format); - warn ("You can list available targets using %s --list", argv[0]); + warn ("You can list available targets using %s --list-targets", argv[0]); res = 1; goto done; } - set_video_settings (&settings); - set_audio_settings (&settings); + g_print ("Encoding to:\n\n"); + describe_encoding_profile (settings.profile); + if (!set_video_settings (&settings)) { + res = -1; + goto done; + } + + if (!set_audio_settings (&settings)) { + res = -1; + goto done; + } transcoder = gst_transcoder_new_full (settings.src_uri, settings.dest_uri, settings.profile, NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/tools/utils.c new/gst-transcoder-1.16.0/tools/utils.c --- old/gst-transcoder-1.12.2/tools/utils.c 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/tools/utils.c 2018-07-23 16:41:18.000000000 +0200 @@ -1,6 +1,7 @@ #include <string.h> #include "utils.h" +#include <gst/pbutils/descriptions.h> void print (GstDebugColorFlags c, gboolean err, gboolean nline, const gchar * format, @@ -155,3 +156,53 @@ return profile; } + +static const gchar * +get_profile_type (GstEncodingProfile * profile) +{ + if (GST_IS_ENCODING_CONTAINER_PROFILE (profile)) + return "Container"; + else if (GST_IS_ENCODING_AUDIO_PROFILE (profile)) + return "Audio"; + else if (GST_IS_ENCODING_VIDEO_PROFILE (profile)) + return "Video"; + else + return "Unkonwn"; +} + +static void +print_profile (GstEncodingProfile * profile, const gchar * prefix) +{ + const gchar *name = gst_encoding_profile_get_name (profile); + const gchar *desc = gst_encoding_profile_get_description (profile); + GstCaps *format = gst_encoding_profile_get_format (profile); + gchar *capsdesc; + + if (gst_caps_is_fixed (format)) + capsdesc = gst_pb_utils_get_codec_description (format); + else + capsdesc = gst_caps_to_string (format); + + g_print ("%s%s: %s%s%s%s%s%s\n", prefix, get_profile_type (profile), + name ? name : capsdesc, desc ? ": " : "", desc ? desc : "", + name ? " (" : "", name ? capsdesc : "", name ? ")" : ""); + + g_free (capsdesc); +} + +void +describe_encoding_profile (GstEncodingProfile * profile) +{ + g_return_if_fail (GST_IS_ENCODING_PROFILE (profile)); + + print_profile (profile, " "); + if (GST_IS_ENCODING_CONTAINER_PROFILE (profile)) { + const GList *tmp; + + for (tmp = + gst_encoding_container_profile_get_profiles + (GST_ENCODING_CONTAINER_PROFILE (profile)); tmp; tmp = tmp->next) + print_profile (tmp->data, " - "); + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-transcoder-1.12.2/tools/utils.h new/gst-transcoder-1.16.0/tools/utils.h --- old/gst-transcoder-1.12.2/tools/utils.h 2017-09-22 14:21:52.000000000 +0200 +++ new/gst-transcoder-1.16.0/tools/utils.h 2018-07-23 16:41:18.000000000 +0200 @@ -4,6 +4,7 @@ #include "utils.h" #include <gst/gst.h> #include <gst/pbutils/pbutils.h> +#include <gst/pbutils/encoding-profile.h> void print (GstDebugColorFlags c, gboolean err, gboolean nline, const gchar * format, va_list var_args); void ok (const gchar * format, ...); @@ -15,5 +16,6 @@ GList * get_usable_profiles (GstEncodingTarget * target); GstEncodingProfile * create_encoding_profile (const gchar * pname); +void describe_encoding_profile (GstEncodingProfile *profile); #endif /*__GST_TRANSCODER_UTILS_H*/