Commit graph

213 commits

Author SHA1 Message Date
Nirbheek Chauhan
552da8569b deinterlace: Enable x86 assembly with nasm on MSVC
We need to remove x86inc.asm from the list of compiled assembly files
because it is not supposed to be compiled separately. It is directly
included by yadif.asm, and it exports no symbols.

The object file was getting ignored on all platforms except on msvc
where it was causing a linker hang when building with debugging
enabled because the object file had no debug symbols (or similar).
We've seen this before in FFmpeg too, which uses nasm:
https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/merge_requests/46

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/825>
2020-11-24 22:11:50 +05:30
Tim-Philipp Müller
31ff328727 meson: add update-orc-dist target
Add target to update backup orc -dist.[ch] files.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/662>
2020-07-04 15:04:59 +01:00
Nirbheek Chauhan
c7f8c8d4ef deinterlace: Disable nasm support on x32
The assembly assumes pointers are 64-bit, so just disable it.

Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/757

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/660>
2020-07-02 07:53:14 +05:30
Nirbheek Chauhan
3fe4626e3c deinterlace: Fix build on x32
Need to pass `-f elfx32` to nasm in that case.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/757

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/657>
2020-07-01 19:43:41 +00:00
He Junyan
15fac84f63 deinterlace: Add the missing ORC_RESTRICT define.
ORC_RESTRICT may not be defined in yadif.c and cause build error.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/637>
2020-06-21 20:11:06 +08:00
Seungha Yang
9122bfdfb7 meson: deinterlace: Check host cpu type for asm build
Add host cpu type check as we would enable asm only for x86_64

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/636>
2020-06-19 20:28:14 +09:00
Vivia Nikolaidou
536ff4776f deinterlace: Add yadif ASM optimisations
Measured to be about 3.4x faster than C

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/621>
2020-06-16 12:53:25 +03:00
Vivia Nikolaidou
ef78014d15 deinterlace: Fix invalid read in yadif
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/621>
2020-06-12 13:21:02 +03:00
Mathieu Duponchelle
f63299ff2f plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
Mathieu Duponchelle
37c619f995 plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types 2020-06-03 22:44:09 -04:00
Jan Schmidt
d8f0deadc3 deinterlace: Split out NULL checks in yadif
Separate out explicit NULL checks for fields we depend on so
that coverity can hopefully verify dependencies better.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/585>
2020-05-09 03:09:03 +10:00
Jan Schmidt
1106eb16b6 deinterlace: Handle NV12/NV21 for the greedyl mode.
Don't fall back on the default interpolate_scanline function, which
blindly tries to copy from the next field, which can be NULL in
mixed progressive/interlaced streams

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/585>
2020-05-09 03:07:33 +10:00
Vivia Nikolaidou
82dc670f1f deinterlace: Support packed formats for YADIF
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/444>
2020-05-06 17:08:06 +00:00
Vivia Nikolaidou
5fce46f5ef deinterlace: Call the planar functions for the Y plane of nv12/nv21
In some algorithms (like yadif), the Y plane has to be handled different
than the UV plane. Therefore, the planar_y functions are now called for
the Y plane, and the nv12/nv21 functions are handling only the UV/VU
planes respectively.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/444>
2020-05-06 17:08:06 +00:00
Jan Schmidt
e9ee7ab0af deinterlace: Add C implementation of YADIF
Import the YADIF deinterlacer from ffmpeg and modify
it to match the simple deinterlace scanlines structure.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/444>
2020-05-06 17:08:06 +00:00
Jan Schmidt
1c1bc56a3b deinterlace: Allow for 5 fields for interpolation
Add an extra field to the simple deinterlace implementation,
so that methods can potentially use 5 fields - the current
field, and 2 before and 2 after.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/444>
2020-05-06 17:08:06 +00:00
Jan Schmidt
5468988223 deinterlace: Force renegotiation when changing mode
Switching the deinterlacing mode on-the-fly from disabled to
auto used to work, but was broken by commit #1f21747c some
years ago.

Force re-negotiation with downstream when the mode or
fields properties are changed, otherwise deinterlace
never switches out of the passthrough mode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/584>
2020-05-07 01:31:59 +10:00
Edward Hervey
518d192dc5 deinterlace: Don't leak frame in error case
CID #1455494

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/581>
2020-05-05 17:30:48 +02:00
Guillaume Desmottes
d43ad6e029 deinterlace: add alternate support
In this mode each field is carried using its own buffer.
Allow deinterlace to negotiate caps with the Interlaced feature and
adjust the algorithm fetching lines.

Fix #620
2020-03-03 17:15:00 +00:00
Guillaume Desmottes
b3d96e06c6 deinterlace: add wrapper to get field lines from history
No semantic change so far, will be used to implement alternate support.
2020-03-03 17:15:00 +00:00
Guillaume Desmottes
f0eb1419f6 deinterlace: stop checking line index boundaries
The LINE2() macro already prevents out of bound indexes using CLAMP_HI()
and CLAMP_LOW().
2020-03-03 17:15:00 +00:00
Guillaume Desmottes
cca8008779 deinterlace: fix video info on output frames
Output frames used to have their interlace mode set to the same one as
the input. This breaks their field and comp heights when deinterlacing
an alternate stream.
2020-03-03 17:15:00 +00:00
Guillaume Desmottes
6dde6038cc deinterlace: use output caps to compute buffer size
In interlace-mode=alternate the input buffers have half the size of the
output ones as each field has its own buffer.
2020-03-03 17:15:00 +00:00
Tim-Philipp Müller
c9a47c0c8d Remove autotools build system 2019-10-14 11:04:18 +01:00
Aaron Boxer
46989dca96 documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
Thibault Saunier
af01988534 doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
Thibault Saunier
0a6a62aa76 docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
Tim-Philipp Müller
cac9aab107 meson: Replace empty configuration_data() with copy keyword
Use 'copy' keyword to avoid meson warning message.
Note that 'copy' keyword in configure_file() is available
since meson 0.47.0

https://bugzilla.gnome.org/show_bug.cgi?id=797298
2018-10-17 14:15:33 +01:00
Sebastian Dröge
abf2af1a66 deinterlace: Reset frame/tc/caption pointer to NULL after moving it in the history 2018-08-31 14:26:32 +03:00
Vivia Nikolaidou
f2c2560db2 deinterlace: Closed caption pass-through
Pass through closed caption data when deinterlacing. When two
deinterlaced frames are created for the same interlaced frame (e.g.
fields=all), the second of the two frames will have no closed caption
data.

Also fixed memory leaks related to timecode meta pass-through.

https://bugzilla.gnome.org/show_bug.cgi?id=796876
2018-07-27 14:26:49 +03:00
Vivia Nikolaidou
ceac1b51b1 deinterlace: Timecode pass-through
When it is trivial to pass-through a timecode, by only removing the
"interlaced" flag, do pass-through. Otherwise, double the fps_n and
adjust the "frames" field.

https://bugzilla.gnome.org/show_bug.cgi?id=796818
2018-07-17 16:29:37 +03:00
Xavier Claessens
edd9c8f6b8 Meson: Generate pc file for all plugins in good
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:07:06 +01:00
Edward Hervey
8239c67799 Update ORC files 2018-02-09 09:00:46 +01:00
Deepak Srivastava
49ed67c4f2 deinterlace: Fixed memory leak in error code path
https://bugzilla.gnome.org/show_bug.cgi?id=788041
2017-09-22 17:25:50 +03:00
Nicolas Dufresne
b68d936ae0 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:41:19 -04:00
Sebastian Dröge
858d9f9706 deinterlace: Mark pad as needing reconfiguration again if reconfiguration failed
And consider negotiation failures on flushing pads as FLUSHING, not as
NOT_NEGOTIATED.

https://bugzilla.gnome.org/show_bug.cgi?id=774623
2016-11-18 12:04:45 +02:00
Sebastian Dröge
dba90631bc deinterlace: Fix field ordering for reverse playback
And actually calculate the field duration instead of a frame duration so
that we can properly timestamp output frames in fields=all mode.

This is probably still broken for reverse playback in telecine mode.
2016-09-12 20:09:23 +02:00
Nirbheek Chauhan
b09f478e80 Add support for Meson as alternative/parallel build system
https://github.com/mesonbuild/meson

With contributions from:

Tim-Philipp Müller <tim@centricular.com>
Jussi Pakkanen <jpakkane@gmail.com> (original port)

Highlights of the features provided are:
* Faster builds on Linux (~40-50% faster)
* The ability to build with MSVC on Windows
* Generate Visual Studio project files
* Generate XCode project files
* Much faster builds on Windows (on-par with Linux)
* Seriously fast configure and building on embedded

... and many more. For more details see:

http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html

Building with Meson should work on both Linux and Windows, but may
need a few more tweaks on other operating systems.
2016-08-20 11:21:12 +01:00
Edward Hervey
1d2db2ba4f deinterlace: Ensure DISCONT flag is properly propagated
The output of deinterlace at startup, or when receiving a new DISCONT
buffer, should have the DISCONT flag set on the first buffer.
2016-06-02 11:35:27 +03:00
Guillaume Desmottes
47a358783e deinterlace: fix caps leak
The caps returned by gst_pad_get_current_caps() was never unreffed when
not early returning.

Fix a leak with the elements/deinterlace test.

https://bugzilla.gnome.org/show_bug.cgi?id=766558
2016-05-20 09:36:09 +03:00
Tim-Philipp Müller
4ba6214d3a deinterlace: fix description of linear interlacing method 2016-04-22 15:48:08 +01:00
Sebastian Dröge
1f21747cc5 deinterlace: Drain the field history if the caps are changing
Otherwise we will use fields from the old caps with everything set up for the
new caps, causing crashes and worse.

Also don't do anything if the same caps are set twice.
2016-04-12 15:01:28 +03:00
Sebastian Dröge
0c84b1b104 deinterlace: Instead of confusing crashes later, just error out immediately if mapping a video frame fails
This probably still crashes but at least we get some hint about what goes
wrong instead of random behaviour later.
2016-04-12 15:00:31 +03:00
Vivia Nikolaidou
dc2aafb3d4 deinterlace: Added "auto" fields mode
The "auto" fields mode will detect the upstream and downstream framerates and
will decide to deinterlace all or only top fields.

https://bugzilla.gnome.org/show_bug.cgi?id=763869
2016-03-24 14:34:11 +02:00
Vineeth TM
1071309870 good: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763076
2016-03-24 14:32:20 +02:00
Vivia Nikolaidou
5d8e7598ac deinterlace: Fix typo to not change the input caps but our filtered caps
Changing the input caps and not using them anymore afterwards is useless, and
it breaks negotiation in pipelines like:

gst-launch-1.0 videotestsrc ! "video/x-raw,framerate=25/1,interlace-mode=interleaved" !
  deinterlace fields=all ! "video/x-raw,framerate=50/1,interlace-mode=progressive" !
  fakesink
2016-03-17 21:11:36 +02:00
Sebastian Dröge
49f4631909 gst: Handle gst_pad_get_current_caps() returning NULL gracefully 2016-02-23 18:27:47 +02:00
Luis de Bethencourt
3738ce8ba1 deinterlace: remove check for impossible condition
Commit bd27a1f30b added a few error handling
memory management checks. These check srccaps to see if it needs to be
unreferenced before returning, in the case of invalid_caps this goto jump
always happens before srccaps is set, so it will always be NULL in this
error label.

CID #1352035
2016-02-08 23:48:28 +00:00
Sebastian Dröge
3edf0737d6 deinterlace: Check for subset instead of non-empty intersection for ACCEPT_CAPS 2016-01-27 18:48:17 +01:00
Sebastian Dröge
c7d90c1112 deinterlace: Unset RECONFIGURE flag on srcpad whenever we configure new caps
Prevents double-negotiation during startup and in some other cases.
2016-01-27 18:44:23 +01:00