Commit graph

68 commits

Author SHA1 Message Date
Jan Schmidt
ebad39b865 videoconvert: Only prefer upstream chroma-site with same subsampling.
If converting YUV formats with different chroma-subsampling, there's
probably no good reason to prefer the upstream chroma-siting so just use
the default for the output format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1033>
2021-02-19 09:45:07 +00:00
Jan Schmidt
eabb2c1802 videoconvert: Implement more sophisticated colorimetry caps transfer
Implement a more sophisticated transfer of colorimetry and
chroma-site fields to output caps when fixating.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1033>
2021-02-19 09:45:07 +00:00
Jan Schmidt
98bdc76fa5 videoconvert: Forward colorimetry and chroma-site from upstream.
If downstream has expressed no preference for particular colorimetry
and chroma-site configuration, transfer them from the input caps.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/614

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1033>
2021-02-19 09:45:07 +00:00
Vivia Nikolaidou
ca4240bd03 videoconvert: Support for alternate-field interlacing
Treat the data just like normal data with half the height. Also treat it
as progressive when converting from/to I420 because it requires
different handling for chroma subsampling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1027>
2021-02-04 18:22:07 +02:00
Seungha Yang
cea2bccfc6 videoconvert: Enhance debug message to be more human readable
Numerical representation of GstVideoFormat is not debugging
friendly

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/822>
2020-10-14 19:12:51 +00:00
Sebastian Dröge
91ec4e06d7 video: Rename gst_video_color_transfer_*() to gst_video_transfer_function_*() in new API
The type is called GstVideoTransferFunction so the function names should
match, otherwise gobject-introspection is keeping the functions as
global functions instead of methods on the type.

The same mistake was also made in lots of other APIs over the years, but
here we can at least fix it for 1.18 still.

Thanks to Marijn Suijten for noticing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/807>
2020-09-07 13:04:20 +03:00
Vivia Nikolaidou
ad55d3ce9d video-converter: Make fast path work for equivalent transfer functions
For example, BT709, BT601, and BT2020_10 all have theoretically
different transfer functions, but the same function in practice. In
these cases, we should use the fast path for negotiating. Also,
BT2020_12 is essentially the same as the other three, just with one more
decimal point, so it gives the same result for fewer bits. This is now
also aliased to the former three.

Also make videoconvert do passthrough if the caps have equivalent
transfer functions but are otherwise matching.

As of the previous commit, we write the correct transfer function for
BT601, instead of the (functionally identical but different ISO code)
transfer function for BT709. Files created using GStreamer prior to that
commit write the wrong transfer function for BT601 and are, strictly
speaking, 2:4:5:4 instead. However, this commit takes care of
negotiation, so that conversions from/to the same transfer function are
done using the fast path.

Fixes #783

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/724>
2020-07-03 11:57:49 +03:00
Niels De Graef
f57be9dcc3 videoconvert: Use G_DECLARE_FINAL_TYPE 2020-03-16 15:47:58 +00:00
Thibault Saunier
909baa2360 Pass the code through codespell 2019-08-30 13:05:36 +00:00
Nicolas Dufresne
5affe09c48 videoconvert: Filter-out crop meta
To passthrough crop-meta, the converter would need to allocate and
convert buffers of the size of the originating buffer. This is currently
made difficult by GstBaseTransform since we cannot alter the caps passed
though the allocation query. We would also need to wait for the first
input buffer to be received in order to make the decision around that
size.

So the short and safe solution is just to stop pretending we can
passthrought that meta.

https://bugzilla.gnome.org/show_bug.cgi?id=791412
2017-12-17 15:50:00 -05:00
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
Sebastian Dröge
49ac382b47 video-converter: Implement multi-threaded scaling/conversion
This adds a property to select the maximum number of threads to use for
conversion and scaling. During processing, each plane is split into
an equal number of consecutive lines that are then processed by each
thread.

During tests, this gave up to 1.8x speedup with 2 threads and up to 3.2x
speedup with 4 threads when converting e.g. 1080p to 4k in v210.

https://bugzilla.gnome.org/show_bug.cgi?id=778974
2017-02-23 21:55:29 +02:00
Vineeth TM
44b70ca3a1 base: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763075
2016-03-24 14:25:41 +02:00
Tim-Philipp Müller
a62c7bd54c Fix use of undeclared core debug category symbols
libgstreamer currently exports some debug category
symbols GST_CAT_*, but those are not declared in any
public headers.

Some plugins and libgstvideo just use GST_DEBUG_CATEGORY_EXTERN()
to declare and use those, but that's just not right at
all, and it won't work on Windows with MSVC. Instead look
up the categories via the API.
2016-02-20 11:31:43 +00:00
Tim-Philipp Müller
6020b0cf2b Update mailing list address from sourceforge to freedesktop 2015-07-16 17:17:16 +01:00
Tim-Philipp Müller
ec5c93f169 docs: update element example pipelines
- gst-launch -> gst-launch-1.0
- use autoaudiosink and audiovideosink more often
- review pipeline examples and descriptions
2015-05-10 11:38:19 +01:00
Vivia Nikolaidou
327efa9805 videoconvert: Expose some properties from the videoconverter API
Expose chroma resampler, alpha mode, alpha value, chroma mode, matrix mode,
gamma mode and primaries mode from the videoconverter API.

https://bugzilla.gnome.org/show_bug.cgi?id=749105
2015-05-08 15:17:06 +02:00
Matthieu Bouron
9dfe40d740 videoconvert: Keep colorimetry and chroma-site fields if passthrough
https://bugzilla.gnome.org/show_bug.cgi?id=748141
2015-04-27 11:20:36 +02:00
Wim Taymans
991a81bd5d videoconvert: add dither-bits option
Fix the dither option.
Add a new option to set the quantizer
2014-12-02 15:23:00 +01:00
Wim Taymans
71efeaaa6f video-convert: swap src and dest
It is more natural and consistent with other uses.
2014-10-29 16:26:10 +01:00
Wim Taymans
98c42dc5e4 video: convertor -> converter 2014-09-24 16:19:30 +02:00
Wim Taymans
b2fd20c416 video: move videoconvert code to video library
Move the conversion code used in videoconvert to the video library
and expose a simple but generic API to do arbitrary conversion. It can
currently do colorspace conversion but the plan is to add videoscale to
it as well.

See https://bugzilla.gnome.org/show_bug.cgi?id=732415
2014-09-24 15:59:39 +02:00
Wim Taymans
4c8e211e57 videoconvert: tweak the scoring algorithm
Make a little table of conversions and manually score them. Use this
info to define better weights for the scoring algorithm.
give separate scores for doing changes and the impact of the change,
This allows us to avoid conversion when we can but still allow fairly
lossless changes.
The old code did not penalize GRAY conversions, PAL conversions were
punished too low and depth conversions too high.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=722656
2014-01-24 12:19:43 +01:00
Sebastian Dröge
d0133a2d11 videoconvert: Allow passthrough for ANY caps features 2013-04-08 08:30:38 +02:00
Wim Taymans
33a54ba4f3 videoconvert: be smarter when selecting a conversion
Try to select the conversion that would result in the minimal amount of quality
loss. Quality loss is calculated rather arbitrarily but it avoids doing
something really stupid in most cases.
2013-03-28 18:15:24 +01:00
Wim Taymans
a092cbee5e videoconvert: avoid double free
Set variable to NULL after free so that we don't free twice.
2013-03-24 00:38:22 +01:00
Wim Taymans
b1950b6409 Revert "videoconvert: prevent bad interlaced conversions"
This reverts commit adc9694ed7.

No need to restrict the conversion, we can handle interlace correctly. We
basically unpack each field, then convert each field to the target colorspace
and pack and interleave each field to the target format. We also disable any
fast path that can't deal with interlaced formats.
2013-03-24 00:21:36 +01:00
David Schleef
adc9694ed7 videoconvert: prevent bad interlaced conversions
Don't allow conversion that changes vertical subsampling if video
is interlaced.
2013-03-22 17:24:43 -07:00
Tim-Philipp Müller
5f59b4f7ee Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-03 23:05:09 +00:00
Sebastian Dröge
a3878f8bb8 videoconvert: Set correct plugin metadata 2012-09-25 13:16:45 +02:00
Tim-Philipp Müller
9f1856a7a5 videoconvert: fix up dither method enum GType name for consistency 2012-09-09 15:12:14 +01:00
Sreerenj Balachandran
fe08923628 videoconvert: fix example pipeline in docs
There is no more 'fourcc' typecast for format.

https://bugzilla.gnome.org/show_bug.cgi?id=681436
2012-08-08 11:21:51 +01:00
Wim Taymans
53fc1f3fca update for query api changes 2012-07-06 11:50:44 +02:00
Wim Taymans
bc5ba349b7 update for allocation query changes 2012-07-06 11:05:09 +02:00
Wim Taymans
443b0a3c78 videoconvert: use video helper library more
Use VideoInfo to setup the conversion.
Use the color matrix from the video info.
2012-06-01 12:09:44 +02:00
Wim Taymans
7f134c1441 video: fix paletted format
RGB8_PALETTED -> RGB8P
Fix the definition of paletted formats, store the palette in the second
plane.
Make sure we copy the palette correctly in gst_video_frame_copy()
Don't do alignment on the palette in videopool
2012-05-31 13:44:43 +02:00
Sebastian Dröge
c84108de3c video: Update for libgstvideo API changes 2012-04-19 12:30:57 +02:00
Tim-Philipp Müller
3c6a3ad629 Use new gst_element_class_set_static_metadata() 2012-04-10 00:45:16 +01:00
Sebastian Dröge
ad42b16375 gst: Update for GST_PLUGIN_DEFINE() API change 2012-04-05 15:11:05 +02:00
Mark Nauwelaerts
6656affdfa videoconvert: plug caps leak 2012-04-02 17:03:48 +02:00
Wim Taymans
25137962ad fix for caps API changes 2012-03-11 19:04:41 +01:00
Wim Taymans
abca785f0f videoconvert: use base class new vmethods
Use the base class filter_meta to proxy all metadata upstream.
Use the base class transform_meta to let it copy all non-colorspace dependent
metadata.
2012-03-02 17:35:40 +01:00
Wim Taymans
5595c0a7df videoconvert: remove old metadata code
The subclass can help us better
2012-03-02 17:12:25 +01:00
Wim Taymans
df004b586e videoconvert: update for copy data changes 2012-03-02 13:11:36 +01:00
Wim Taymans
dcd277b916 videoconvert: proxy allocation meta when we can
Proxy all the metadata APIs in the allocation query.
Remove all metadata that is dependent on the colorspace, copy others.
2012-03-01 17:36:08 +01:00
Wim Taymans
7d58b0aa0b videoconvert: improve fixation
Use the fixed upstream caps to fixate the output caps by taking the
intersection.
2012-02-22 15:31:12 +01:00
Wim Taymans
9212619549 update for new fixate_caps function 2012-02-22 12:32:44 +01:00
Wim Taymans
6678c531e0 videoconvert: try to preserver colorimetry and chroma-site
Try to preserve the original chroma-site and colorimetry when nothing else was
negotiated.
2012-02-20 12:36:02 +01:00
Wim Taymans
6e1288bd00 videoconvert: avoid using _CATEGORY_GET 2012-02-09 16:00:59 +01:00
Wim Taymans
f31d5d7505 debug: add some performance debug 2012-02-09 15:28:54 +01:00