Commit graph

635 commits

Author SHA1 Message Date
Jan Schmidt
6cada5b064 qtdemux: Add support for wvtt (WebVTT) subtitles.
WebVTT in ISO MP4 is specified in ISO 14496-30,
and needed for DASH support. It's stored in an
mp4 specific format. To handle it compatibly,
the wvtt boxes are converted back into WebVTT text
and pushed as application/x-subtitle-vtt

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182>
2021-10-19 08:56:58 +00:00
Jan Schmidt
41d6f47f2b isomp4: Split buffer process functions.
Split the different handling for closed captions, VobSub subpicture
and timed text samples into separate simplified process functions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182>
2021-10-19 08:56:58 +00:00
Jan Schmidt
c47c6b4c2b isomp4: Use a function pointer for buffer splitting.
Swap the `need_process` boolean check on qtdemux streams
for a direct function pointer to the splitting function,
so we can stop adding extra cases to the single growing
`gst_qtdemux_process_buffer()` function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182>
2021-10-19 08:56:58 +00:00
Tim-Philipp Müller
0a25f22f1b meson: bump meson requirement to >= 0.59
For monorepo build and ugly/bad, for advanced feature
option API like get_option('xyz').required(..) which
we use in combination with the 'gpl' option.

For rest of modules for consistency (people will likely
use newer features based on the top-level requirement).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1084>
2021-10-18 18:03:19 +01:00
Thibault Saunier
20f6af7e3c qtmux: Allow more fields changes renegotiating h264
And consider interlace-mode=progress as equivalent to the field not
being specified.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1062>
2021-10-18 10:10:24 -03:00
Thibault Saunier
32a88fe16f matroskamux: Ignore some fields when renegotiating
Those values are never used in the muxer so we should not fail the
negotiation if those are changing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1062>
2021-10-18 10:10:24 -03:00
Thibault Saunier
e94e60c342 lame:meson: Avoid using fallback when we could use system install
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1176>
2021-10-17 01:59:35 -03:00
Thibault Saunier
f60af61bb7 meson: Support building lame as subproject
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1068>
2021-10-16 00:43:10 +00:00
Thibault Saunier
8b7b068d53 meson: Streamline the way we detect when to build documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1093>
2021-10-15 19:28:29 -03:00
Philippe Normand
8b553d5b32 soup-stub: Gate G_URI_FLAGS_SCHEME_NORMALIZE behind glib version check
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1138>
2021-10-13 19:24:02 +00:00
Bastien Nocera
e1271c0d9c gtkglsink: Avoid assertion when applying "auto" rotation method
Guard against the orientation not coming from an inexistant tag, nor
from the application (rotation set to "auto") which caused an assertion.

When the application requests the auto rotation method, make sure it is
resolved to a rotation that's applicable.

ERROR:gstreamer/subprojects/gst-plugins-good/ext/gtk/gtkgstglwidget.c:745:gtk_gst_gl_widget_set_rotate_method: code should not be reached

Fixes: 103ceb853a
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1134>
2021-10-13 09:16:32 +00:00
Philippe Normand
c3455def2e soup: Runtime compatibility support for libsoup2 and libsoup3
The src and sink elements no longer link against libsoup. It is now loaded at
runtime. If any version is resident already, it is used. Otherwise we first try
to load libsoup3 and if it's not found we fallback to libsoup2.

For the unit-tests, we now build one version of the test unit file per libsoup
version found. So if both libsoup2 and libsoup3 are available on the host, the
CI will cover them both.

Based on initial patch by Daniel Kolesa <dkolesa@igalia.com> and
Patrick Griffis <pgriffis@igalia.com>.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1044>
2021-10-13 08:32:25 +00:00
Olivier Crête
c272d0bfcd rtopuspay: Set marker bit inside RTP packet too
At the end of a talk spurt, not only set the marker flag on the
GstBuffer, but also set the bit inside the RTP header as recommended
by the RFC.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1124>
2021-10-12 17:18:19 -04:00
Bastien Nocera
9e5b6830cd gtksink: Fetch the default "widget" value in the docs
There's really no interesting "widget" value that could be shown in the
docs, so use the GST_PARAM_DOC_SHOW_DEFAULT flag to avoid showing
another value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1088>
2021-10-12 20:27:34 +00:00
Bastien Nocera
b0d4996380 gtksink: Avoid errors fetching widget property
Avoid errors when fetching the "widget" property and GTK initialisation
fails, such as when running in a non-graphical environment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1088>
2021-10-12 20:27:34 +00:00
Olivier Crête
941c0e81dd gtksink: Return reference to GtkWidget in the acquire function
This should ensure thread safety.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1088>
2021-10-12 20:27:34 +00:00
Olivier Crête
103ceb853a gtkglsink: Add rotate-method property
This mostly just takes code out of glimagesink and applies it here.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1088>
2021-10-12 20:27:34 +00:00
Sebastian Dröge
2d4491e195 splitmuxsink: Don't assert on the input side if no GOP is available when shutting down
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1119>
2021-10-12 19:34:16 +00:00
Nirbheek Chauhan
e24e366952 libsoup: Bump to 2.74 to fix gssapi build failure on macOS
See: https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/255

We also need to disable sysprof by default because it only builds on
native Linux. If someone really wants it, they can enable the option
on the command-line by passing -Dlibsoup:sysprof=enabled

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1114>
2021-10-12 12:22:31 +05:30
Marek Vasut
e6d83d8f96 jpegdec: Support libjpeg-turbo colorspace conversion
The libjpeg-turbo has a built-in support for performing colorspace
conversion. The performance of this conversion is much better than
doing the same separately using videoconvert. Implement support for
this conversion to RGBx/xRGB/BGRx/xBGR formats. Other formats can
be easily added later.

- The decoding of various pixel formats can be tested and compared to
  non-libjpeg-turbo decoding as follows:
  for gfmt in {RGB,BGR}{,x} x{RGB,BGR} ; do
      echo "$gfmt"
      gst-launch-1.0 -q \
          videotestsrc pattern=colors ! \
          video/x-raw,format=${gfmt} ! \
          fakesink dump=true | \
	  head -n 200 | tail -n 1
      gst-launch-1.0 -q --gst-plugin-path=build/ext/jpeg/ \
          videotestsrc pattern=colors ! \
          video/x-raw,format=${gfmt} ! \
	  jpegenc ! \
	  jpegdec ! \
	  video/x-raw,format=${gfmt} ! \
	  fakesink dump=true | \
	  head -n 200 | tail -n 1
      done
  Result looks as follows, i.e. comparable:
  RGB
  00000c70 (0x7f7736fbdd10): 05 33 19 05 33 26 05 33 33 05 33 40 05 33 4c 05  .3..3&.33.3@.3L.
  00000c70 (0x7f389e8f7d10): 05 32 17 04 32 22 04 32 31 04 32 3e 04 32 4a 04  .2..2".21.2>.2J.
  RGBx
  00000c70 (0x7f79efd0ad10): cc 07 22 ff d9 07 22 ff e6 07 22 ff f3 07 22 ff  .."..."..."...".
  00000c70 (0x7fb6989f3d10): cd 06 22 00 d9 06 22 00 e6 06 22 00 f4 06 22 00  .."..."..."...".
  BGR
  00000c70 (0x7fa0a6c42d10): 05 0c 33 05 19 33 05 26 33 05 33 33 05 40 33 05  ..3..3.&3.33.@3.
  00000c70 (0x7fc74165fd10): 05 08 32 04 17 32 04 22 32 04 31 32 04 3e 32 04  ..2..2."2.12.>2.
  BGRx
  00000c70 (0x7fbf399f1d10): 22 07 cc ff 22 07 d9 ff 22 07 e6 ff 22 07 f3 ff  "..."..."..."...
  00000c70 (0x7f50e3d1cd10): 22 06 cd 00 22 06 d9 00 22 06 e6 00 22 06 f4 00  "..."..."..."...
  xRGB
  00000c70 (0x7f0b950a2d10): ff cc 07 22 ff d9 07 22 ff e6 07 22 ff f3 07 22  ..."..."..."..."
  00000c70 (0x7f4416b8dd10): 00 cd 06 22 00 d9 06 22 00 e6 06 22 00 f4 06 22  ..."..."..."..."
  xBGR
  00000c70 (0x7f237d74dd10): ff 22 07 cc ff 22 07 d9 ff 22 07 e6 ff 22 07 f3  ."..."..."..."..
  00000c70 (0x7f095547dd10): 00 22 06 cd 00 22 06 d9 00 22 06 e6 00 22 06 f4  ."..."..."..."..
                             ^^          ^^          ^^          ^^
  Notice how the alpha channel is set to arbitrary value in case of the
  libjpeg-turbo decoding into RGBx/BGRx/xRGB/xBGR pixel formats. This is
  documented in libjpeg-turbo README.md as follows:
    "
    When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
    X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
    can set that byte to whatever value it wishes.
    "

- The interlaced num_fields=2 mjpeg stream can be generated and
  tested as follows (this does require mjpegtools):
  $ gst-launch-1.0 videotestsrc num-buffers=10 ! jpegenc ! multifilesink location=in%04d.jpg
  $ jpeg2yuv -f 25 -I t -L 0 -j in%04d.jpg | yuv2lav -f avi -o result.avi
  ...
  $ gst-launch-1.0 --gst-plugin-path=build/ext/jpeg/ filesrc location=result.avi ! \
       avidemux ! jpegdec ! video/x-raw,format=RGBx ! videoconvert ! autovideosink

Signed-off-by: Marek Vasut <marex@denx.de>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1091>
2021-10-07 12:40:29 +00:00
Sebastian Dröge
4316be6571 splitmuxsink: Keep track of the pending input GOPs in a queue
This cleans up input GOP handling and makes it possible to handle more
than 2 pending GOPs, which could happen before if keyframes are arriving
with too short of a distance between them.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Sebastian Dröge
ae8ceb801c splitmuxsink: Handle frame reordering due to B frames better
Instead of assuming that the PTS of a keyframe is the lowest PTS of a
GOP, wait until the DTS has passed this PTS and take the minimum PTS up
to that point. That way the minimum PTS of a GOP can be determined, at
least for closed GOP streams. Open GOP streams still can't be handled
properly.

By knowing the minimum PTS of each GOP, keyframes can be requested at
the correct time relative to the GOP (and thus fragment) start and
fragment overflow calculations can calculate the correct durations of
the GOPs.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Sebastian Dröge
f83ed50c20 splitmuxsink: Reset timecodes when resetting the sink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Sebastian Dröge
ed6823ad67 splitmuxsink: Use GST_CLOCK_STIME_NONE instead of 0 to initialize max out running time
Otherwise streams with only DTS would misbehave while it is negative.

For outputting everything immediately at EOS, use G_MAXINT64 instead
which is bigger-or-equal to any other running time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Sebastian Dröge
eed843eea0 splitmuxsink: Only update max in/out running time if it's actually bigger
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Sebastian Dröge
68683d15c4 splitmuxsink: Only count keyframes for the reference context, consistently
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005>
2021-10-05 12:35:19 +00:00
Olivier Crête
5ec82c1c4e rtphdrext: Pass just the attributes to the subclass
Since the base class now does the parsing, there is no need
to reproduce that code in all the subclasses, just pass the attributes
which are the only relevant bit anyway.

Also, only store the direction if the subclass accepted the caps

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906>
2021-09-28 20:04:55 +00:00
Olivier Crête
2db9f42b36 rtphdrext-rfc6464: Use helper function to set caps field
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906>
2021-09-28 20:04:55 +00:00
Olivier Crête
ba328fb98d rtphdrext: Set caps without attributes as the default
Most subclasses just use the simple function, so just let the base class
do it. It makes less code in subclasses.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906>
2021-09-28 20:04:55 +00:00
Olivier Crête
498740fe57 rtphdrext: Put simple caps generation as the base class default
Instead of having a helper function that gets called by almost every
subclass, just let the base class set the caps fields automatically.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906>
2021-09-28 20:04:55 +00:00
Brad Hards
ef05946837 doc: update IRC links to OFTC
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/945>
2021-09-28 10:11:15 +10:00
Tim-Philipp Müller
f1a169f39d Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/925>
2021-09-26 01:07:02 +01:00
Nicolas Dufresne
3037fde5eb Move commit gst-indent hook to the root
This renable at meson setup time the installation of the gst-indent
commit hook. The hooks were kept from gst-devtools as this set supports
both C checks and Python checks.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/904>
2021-09-24 17:47:01 -03:00
Thibault Saunier
c6b9c81fdd ci: Remove now useless .gitlab-ci.yml files
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/891>
2021-09-24 16:21:18 -03:00
Thibault Saunier
5ff769d731 Move files from gst-plugins-good into the "subprojects/gst-plugins-good/" subdir 2021-09-24 16:13:50 -03:00