How to create a pipeline from ready-made media profiles?

Alexander Botero alex.botero at gmail.com
Mon Sep 24 00:02:06 PDT 2012


Re-hi,
Of course, this should also work.
"capsfilter caps=" + the profile string.

gchar *profile_str = "capsfilter caps=audio/x-raw-int,rate=22050,channels=1
! wavenc name=enc";

GError *err = NULL;
GstBin *bin = gst_parse_bin_from_description(profile_str, TRUE, &err);
if (err) {
   ...
}

Alex.


On Sun, Sep 23, 2012 at 7:27 PM, Alexander Botero <alex.botero at gmail.com>wrote:

> Hello,
> The GNOME-desktop has a list of supported/installed media profiles and
> audio formats.
> I can see these in THE gconf-editor,  system -> gstreamer -> 0.10 -> audio
> -> profiles:
>
> Sample profiles:
> FLAC: "audio/x-raw-int,rate=44100,channels=2 ! flacenc name=enc"
> OGG:  "audio/x-raw-float,rate=44100,channels=2 ! vorbisenc name=enc
> quality=0.5 ! oggmux"
> MP3:  "audio/x-raw-int,rate=44100,channels=2 ! lamemp3enc name=enc
> target=0 quality=6 ! xingmux ! id3v2mux"
>
> I want to create a complete pipeline of these formats, and I want to build
> it from separate elements (not from gst_parse_launch(...)).
>
> Q: Is this right way to parse the profile string?
>
> 0) Split the string to two (2) parts. The parts are separated by first "!".
>
> F.ex let's study the OGG-profile.
>
> 1) Create GstCaps from the capabilities string (the 1.st part).
>    Create GstCapsfilter element and set "caps" on it.
>
>   GstElement *filter = gst_element_factory_make("capsfilter", NULL);
>   GstCaps *caps =
> gst_caps_from_string("audio/x-raw-float,rate=44100,channels=2");
>   g_object_set(G_OBJECT(filter), "caps", caps, NULL);
>   gst_caps_unref(caps);
>
> 2) Create a GstBin from the profile's encoder/mux part.
>   gchar *str = "vorbisenc name=enc quality=0.5 ! oggmux";
>
>   GError *err = NULL;
>   GstBin *bin = gst_parse_bin_from_description(str, TRUE, &err);
>
> 3) Create rest of the pipeline as usual.
>   gst_bin_add_many(GST_BIN(pipe), ...);
>   gst_element_link_many(source,...,audioconvert, audioresample, filter,
> bin, filesink, NULL);
>
> This approach seems to work pretty well. Have you a better approach?
> ----------------------------
>
> The gst_parse_launch(...) function seems to do this magick automatically.
>
> For example this works fine:
> const gchar *str = "pulsesrc"
>              " ! queue"
>              " ! audioconvert"
>              " ! audio/x-raw-int,rate=44100,channels=2 ! flacenc name=enc"
>              " ! filesink location=xxx");
>
> GError *err = NULL;
> GstElement *pipe = gst_parse_launch(str, &err);
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20120924/1129d607/attachment.html>


More information about the gstreamer-devel mailing list