Commit graph

94 commits

Author SHA1 Message Date
Marcin Kolny
d74b9f56fc encoding-profile: minor fix in documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/212>
2020-08-25 07:29:33 +00:00
Thibault Saunier
718122a9bf encoding: Support more topologies in profile_from_discoverer()
Previous implementation was only working when the stream was inside a
container, this refactoring allows using virtually any stream as input.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/766>
2020-07-31 00:15:58 +00:00
Thibault Saunier
1cead20777 encodebin: Fix and refactor smart encoding
It was not working properly and the implementation of the smartencoder
element was weird. This introduce a number of changes (which are all
in one single commit because they basically all work together and lead
to basically reimplementing the element):

* Make smartencoder a bin so that the reencoding chain of elements are
  inside of it instead of not having any parent. Those elements were not
  be visible when dumping the pipeline which was very confusing.
* Make encodebin create the right encoder with a capsfilter (and parser)
  to properly enforce the format specified by the user, and so that the
  encoder properties specified in the encoding profile are respected.
* Use `decodebin` to do the decoding instead of selecting a decoder
  ourself and not plug any parser etc...
* Ensure that negotiated format in the sinkpad of smart encoder is fixed
  through time when the user requested a non dynamic output
* Add a parser at the beginning of the smart encoder
* Handle errors when reencoding

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/751>
2020-07-22 16:01:25 +00:00
Thibault Saunier
9412e61150 pbutils: Do not restrict number of similar profiles in a container
We have the notion of presence, and when the user want to be in control
it is totally legitimate for him to have several occurrences of a
similar profile

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/746>
2020-07-09 21:59:54 +00:00
Thibault Saunier
fef4717770 pbutils: Add EncodingProfile serialization support 2020-04-03 11:21:14 -03:00
Thibault Saunier
d794e5389e pbutils: Support for variable framerate in the encoding serialization 2020-04-03 11:21:14 -03:00
Thibault Saunier
ae2b4f8899 encodebin: Add missing 'Since' marker 2020-01-13 18:33:29 -03:00
Thibault Saunier
a724f9ddfb encodebin: Ensure that a single segment is pushed into encoders
Following the [design document] encodebin needs to handle sources that
output multiple streams, for that purpose and to make it simpler,
we ensure that a single segment is outputted to the encoders by using
an `identity single-segment=true` at the beginning of streams chains.

Added API to enable or disable the use of that new feature.
Added support for the encoding profile parser for that new property,
keeping backward compatibility

[design document]: https://gstreamer.freedesktop.org/documentation/additional/design/encoding.html?gi-language=c#rendering-timelines
2019-11-05 18:03:09 +00:00
Thibault Saunier
909baa2360 Pass the code through codespell 2019-08-30 13:05:36 +00:00
Thibault Saunier
287897e465 doc: Fix some gtk-doc comments 2019-05-13 11:34:08 -04:00
Thibault Saunier
27ba8d24ec doc: Port to hotdoc 2019-05-13 11:34:08 -04:00
Thibault Saunier
1a2fe0e6e4 docs: Enhance GstEncodingProfile and GstEncodingTarget doc 2019-05-13 10:19:22 -04:00
Sebastian Dröge
03a85de734 libs: Fix various Since markers 2019-04-23 12:28:26 +00:00
Thiago Santos
6be312a759 encoding-profile: set_restriction should accept null as valid
It was checking for GST_IS_CAPS only and that would fail if the new
restriction caps was NULL and its documentation says it accepts NULL as
valid input.
2018-10-01 18:05:39 -07:00
Thibault Saunier
77b23ea0ac encoding-profile: Fix deserialization of a single profile
Instead of trying to guess what profile to build, just get the possible
elements to use with the specified caps and determine the
EncodingProfile from it.

https://bugzilla.gnome.org/show_bug.cgi?id=795490
2018-05-01 21:15:25 +02:00
Thibault Saunier
59eacaa966 encoding-profile: Handle escaped '\:' in caps describing profiles
Otherwise it won't be possible to specify some profiles such as

    video/x-h264,profile=(string)high-4:4:4

With this patch, we can do

    video/x-h264,profile=(string)high-4\:4\:4
2018-04-20 11:22:41 -03:00
Thiago Santos
dc527cac62 encoding-profile: fix gi annotation for gst_encoding_profile_find 2018-03-25 14:05:31 -07:00
Thiago Santos
400ea72b06 pbutils: add some missing gi annotations
For allow-none parameters
2018-02-19 11:23:40 -08:00
Thibault Saunier
6d4e17eee8 doc: Add some missing/malformed Since markers 2017-10-16 14:17:00 +02:00
Reynaldo H. Verdejo Pinochet
e81c334ca9 Use proper GtkDoc notation for NULL/FALSE/TRUE 2017-10-03 14:31:18 -07:00
Tim-Philipp Müller
4246198fb3 No need for newlines in debug log statements 2017-04-12 09:58:49 +01:00
Sebastian Dröge
e05127a510 encoding-profile: It's (transfer none), not (transfer-none) 2017-04-09 12:19:22 +03:00
Arun Raghavan
389a3c4461 encoding-profile: Mark format caps as transfer-none in profile creation 2017-03-17 16:01:57 +05:30
Thibault Saunier
099ac9faf2 docs: Convert gtkdoc comments to markdown
Modernizing the documentation, making it simpler to read an
modify and allowing us to possibly switch to hotdoc in the
future.
2017-03-10 18:19:17 -03:00
Thibault Saunier
9e86b2931d pbutils: Fix annotation in gst_encoding_profile_set_preset 2017-01-10 08:57:51 -03:00
Thibault Saunier
46b424a38b encoding-profile: Add a way to copy an encoding profile
It is often usefull to make sure that you get a full copy of a profile.
For example you want to let the user modify it in the user interface
but still keep an unchanged version for later use.

API:
  gst_encoding_profile_copy
2017-01-06 11:40:20 -03:00
Thibault Saunier
cd4253028e encoding-profile: Initialize variables to avoid build failures
encoding-profile.c: In function ‘get_profile_format_from_possible_factory_name’:
encoding-profile.c:1532:6: error: ‘fact’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
   if (fact)
      ^
encoding-profile.c: In function ‘profile_from_string’:
encoding-profile.c:1720:6: error: ‘res’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
   if (profile)
      ^
cc1: all warnings being treated as errors
2016-12-23 18:08:43 -03:00
Thibault Saunier
51cd2bd926 encoding-profile: Allow using factory names in serialization format
Instead of enforcing the user to know and understand caps to describe
the encoding format, let him use element factory names directly.
This also makes it possible to ensure that a specific encodore/muxer
is used instead of letting the ranking system do it.

It is now possible to describe an encoding format simply specifying:

  matroskamux:x264enc:vobisenc

Factor out functions in the parsing, cleaning up the whole thing.
Update documentation.
2016-12-23 17:40:23 -03:00
Thibault Saunier
998f28b65c encoding-profile: Also take into account preset name when comparing profiles 2016-12-23 17:40:23 -03:00
Thibault Saunier
636cd255ce encoding-profile: Handle path to serialized target when deserializing a profile
The synthax is path/to/encoding/profile.gep:profilename
2016-12-23 17:40:23 -03:00
Thibault Saunier
bff04a1396 pbutils: Add documentation about encoding targets 2016-12-23 17:40:23 -03:00
Thibault Saunier
d67f945177 encoding-profile: Fix documentation and port to gtk markdown
And remove some trailling whitepsaces
2016-12-16 11:27:31 -03:00
Thibault Saunier
f4ed0e1af1 base: Actually support using the default encoding target 2016-12-16 11:27:31 -03:00
Thibault Saunier
7f76713835 pbutils: Add safe guard too encoding profile API 2016-12-16 11:27:31 -03:00
Thibault Saunier
8bbf67c37d audio: Fix introspection annotation
In gst_audio_check_valid_channel_positions the mask
is an out parameter.

And minor conversion from a print to a GST_ERROR.
2016-12-16 11:27:31 -03:00
Sebastian Dröge
48324cab38 encoding-profile: Remove some more fields from the caps when creating from discoverer info
parsed, framed, stream-format and alignment are only relevant for parsers and
should not matter here. We still want to be able to use an encoder that can
only output byte-stream if the input was avc.

https://bugzilla.gnome.org/show_bug.cgi?id=768566
2016-07-08 16:44:18 +03:00
Sebastian Dröge
9e60877108 encoding-profile: Fix caps memory leak 2016-04-29 11:06:49 +03:00
Sebastian Dröge
e2bde252a6 encoding-profile: Recurse into nested container profiles and only add the final audio/video streams
If we e.g. have AVI with DV container with video/audio inside the DV
container, we can't handle this at this point with an encoding profile.
Instead of erroring out, flatten the container hierarchy.

https://bugzilla.gnome.org/show_bug.cgi?id=765708
2016-04-29 10:12:06 +03:00
Sebastian Dröge
4c2e7ae051 encoding-profile: Fail to create encoding profile from discoverer info if no streams could be added
https://bugzilla.gnome.org/show_bug.cgi?id=765708
2016-04-29 10:12:06 +03:00
Sebastian Dröge
436adc68e0 encoding-profile: Move adding of each stream to a helper function
https://bugzilla.gnome.org/show_bug.cgi?id=765708
2016-04-29 10:12:06 +03:00
Sebastian Dröge
fc99a61774 encoding-profile: Remove codec_data and streamheader fields from constraint caps
When converting discoverer output to an encoding profile, it makes sense to
omit these. It's very very unlikely that our encoder is going to produce bit
by bit the same codec_data or streamheader.

https://bugzilla.gnome.org/show_bug.cgi?id=765534
2016-04-25 16:07:50 +03:00
Lim Siew Hoon
5ae5f9055f pbutils: docs: Remove the empty lines in between <refsect2> and </refsect2>
They are converted into <para></para> by gtk-doc...

https://bugzilla.gnome.org/show_bug.cgi?id=762674
2016-02-26 14:46:44 +02:00
Sebastian Dröge
43655580e7 encoding-profile: Check for FALSE'ness directly, not by comparing with FALSE 2015-12-29 17:56:21 +02:00
Sebastian Dröge
f31240a765 encoding-profile: Don't use preset_name string after free
When we run the loop for another time and do not have a preset name, we would
try to print the preset name of a previous iteration that is already freed.

Also move some other variables into the block where they are actually used
to prevent similar mistakes in the future.

CID 1346536
2015-12-29 17:55:23 +02:00
Thibault Saunier
512ac3ea72 encodebin: Implement an encoding profile serialization format
https://bugzilla.gnome.org/show_bug.cgi?id=759356
2015-12-24 09:52:53 +01:00
Reynaldo H. Verdejo Pinochet
0c95b0a738 Remove unnecessary NULL checks before g_free()
g_free() is NULL-safe
2015-11-17 14:50:27 -08:00
Thibault Saunier
a7123ebb58 encoding-profile: Do not force user to provide an encoding profile name
And use the profile called `default` if none provided.
2015-11-02 11:35:55 +01:00
Thibault Saunier
db272cf9cb encoding-profile: Allow specifying the target category in the serialized encoding target 2015-10-28 16:07:44 +01:00
Thibault Saunier
dcfb8a83a5 encodebin: Add a way to enable/disabled a GstEncodingProfile
Summary:
So that the user can easily use the same encoding profile to render
with/without audio/video stream.

API:
  gst_encoding_profile_is_disabled
  gst_encoding_pofile_set_enabled

https://bugzilla.gnome.org/show_bug.cgi?id=749056
2015-06-01 10:22:31 +02:00
Thibault Saunier
72c05d1cbb encodebin: Add a way to disable caps renegotiation for output stream format
In some cases, the user might want the stream outputted by encodebin to
be in the exact same format during all the stream. We should let the
user specify when this is the case. This commit add some API in the
GstEncodingProfile to determine whether the format can be renegotiated
after the encoding started or not.

API:
    gst_encoding_profile_set_allow_dynamic_output
    gst_encoding_profile_get_allow_dynamic_output

https://bugzilla.gnome.org/show_bug.cgi?id=740214
2014-11-28 16:56:32 +01:00