Commit graph

2070 commits

Author SHA1 Message Date
Jan Schmidt 4e827949ef rpicamsrc: Fix initial config setting.
Make sure to update the captsure config before starting
capture. Since the capture component now keeps a local
copy of the config, it's not updated automatically.
2020-07-10 16:44:46 +01:00
Jan Schmidt e58951cfb8 rpicamsrc: Disable bitrate, quantisation and intra-refresh dynamic changes
The firmware rejects dynamic changes of those encoder params.
2020-07-10 16:44:45 +01:00
Jan Schmidt 92aa566c43 rpicamsrc: Send vcos_log_warn via GStreamer debug messages 2020-07-10 16:44:43 +01:00
Jan Schmidt 3b85ddd90e rpicamsrc: Update properties dynamically where possible
Update camera and encoder properties at runtime
where possible

Fixes https://github.com/thaytan/gst-rpicamsrc/issues/19
and https://github.com/thaytan/gst-rpicamsrc/issues/23
2020-07-10 16:44:23 +01:00
Jan Schmidt 1610030b40 rpicamsrc: split preview config and state 2020-07-10 16:44:21 +01:00
Jan Schmidt 3771777f7f rpicamsrc: Clear intra-refresh MMAL param struct.
Use memset on the stack allocated MMAL_PARAMETER_VIDEO_INTRA_REFRESH_T
struct. Apparently mmal_port_parameter_get() doesn't retrieve all
parameters, causing random failures when we set the intra-refresh
param on the encoder.

Fixes https://github.com/thaytan/gst-rpicamsrc/issues/22 for me.
2020-07-10 16:44:13 +01:00
Jan Schmidt 4d70e1d8ee rpicamsrc: Merge changes from userland repo
Current to b69f807ce59189457662c2144a8e7e12dc776988

No integration of stereoscopic support as yet
2020-07-10 16:44:11 +01:00
Jan Schmidt edf4927704 rpicamsrc: Map intra-refresh cyclic-rows to the correct MMAL param. 2020-07-10 16:44:07 +01:00
Jan Schmidt 8fe0590c29 rpicamsrc: Use MMAL PTS and STC to calculate GStreamer timestamps
Don't apply timestamps based on output time from the encoder,
but use the MMAL STC and capture PTS to generate a GStreamer
timestamp that more accurately resembles the input (and would
preserve reordering should the encoder ever add B-frames).

Fixes https://github.com/thaytan/gst-rpicamsrc/issues/16
2020-07-10 16:43:55 +01:00
Jan Schmidt c3ad9c99a6 rpicamsrc: Defer encoder creation until after caps are negotiated
This ensures the encoder is created with the profile
negotiated with downstream
2020-07-10 16:43:53 +01:00
Jan Schmidt 3abe941e74 rpicamsrc: Read and set H.264 profile from negotiated caps 2020-07-10 16:43:51 +01:00
Jan Schmidt 2087b1e44e rpicamsrc: Add intra-refresh-type property, and set default keyframe spacing to -1 (auto)
This plus other recent commits mostly fix
bug https://github.com/thaytan/gst-rpicamsrc/issues/16
2020-07-10 16:43:31 +01:00
Jan Schmidt ed22d5cc4e rpicamsrc: Add annotation-mode and annotation-text properties 2020-07-10 16:43:30 +01:00
Jan Schmidt 39d212df57 rpicamsrc: implement sensor-mode property 2020-07-10 16:43:28 +01:00
Jan Schmidt 52ae74f9ce rpicamsrc: More conversion to GStreamer logging 2020-07-10 16:43:26 +01:00
Jan Schmidt 37028010f1 rpicamsrc: Implement drc property 2020-07-10 16:43:25 +01:00
Jan Schmidt 78b36bbb6b rpicamsrc: add awb-gain-red and awb-gain-blue properties 2020-07-10 16:43:23 +01:00
Jan Schmidt f6451323b5 rpicamsrc: Add camera-number property 2020-07-10 16:43:22 +01:00
Jan Schmidt 1ea517a692 rpicamsrc: add inline-headers and shutter-speed properties 2020-07-10 16:43:20 +01:00
Jan Schmidt 861c353873 rpicamsrc: Add quantisation-parameter property, support variable bitrate
Allow birate=0 and implement the quantisation-parameter property

Fixes https://github.com/thaytan/gst-rpicamsrc/issues/21
2020-07-10 16:43:07 +01:00
Jan Schmidt 6bd0347bf0 rpicamsrc: Incorporate raspivid changes from upstream
Merge all changes for new features from upstream
raspberrypi userland, up to commit 0de0b2
2020-07-10 16:43:02 +01:00
Jan Schmidt eb345f032c rpicamsrc: Add keyframe-interval property to the element 2020-07-10 16:43:00 +01:00
Tim-Philipp Müller 27c35a8ff3 rpicamsrc: deviceprovider: check if camera is detected and supported 2020-07-10 16:42:59 +01:00
Tim-Philipp Müller 8e9c8663f8 rpicamsrc: Add GstDeviceProvider for rpi camera module 2020-07-10 16:42:58 +01:00
Tim-Philipp Müller 4b15fa2abc rpicamsrc: avoid single-element lists in template caps 2020-07-10 16:42:56 +01:00
Vivia Nikolaidou d226968275 rpicamsrc: Add force-key-unit event support 2020-07-10 16:42:55 +01:00
Jan Schmidt 244091bb5e rpicamsrc: Move all debug output to go via GStreamer logs
Fixes https://github.com/thaytan/gst-rpicamsrc/issues/9
2020-07-10 16:42:16 +01:00
Jan Schmidt df3ceb86f7 rpicamsrc: Update maximum framerate to 90 fps 2020-07-10 16:42:15 +01:00
Jan Schmidt 1dfb41bdce rpicamsrc: Enable image effects 2020-07-10 16:42:14 +01:00
Jan Schmidt 1b9a614272 rpicamsrc: Re-flow element source code with gst-indent 2020-07-10 16:42:12 +01:00
Jan Schmidt 5f871311c1 rpicamsrc: Implement a bunch of the raspivid command-line params
Add properties for controlling various parts of the capture
2020-07-10 16:42:11 +01:00
Jan Schmidt 42729b92f0 rpicamsrc: Tell basesrc to timestamp buffers for us, for now. 2020-07-10 16:42:10 +01:00
Jan Schmidt cde8b33199 rpicamsrc: Initial caps nego and properties.
Support caps negotiation for H.264 frame size and framerate.

Add bitrate, saturation, brightness, contrast, sharpness properties.
2020-07-10 16:42:09 +01:00
Jan Schmidt 1416631df9 rpicamsrc: First version which generates buffers on the src pad
Fixed to 1920x1080 h264 regardless of caps.
2020-07-10 16:42:07 +01:00
Jan Schmidt 7ffb618b20 rpicamsrc: Checkpoint. Version which writes directly to test.out
Switch to plain basesrc for parent class
2020-07-10 16:42:06 +01:00
Jan Schmidt f4af399350 rpicamsrc: checkpoint 2020-07-10 16:42:04 +01:00
Jan Schmidt e4f74290df rpicamsrc: Initial commit
Simple modified gst-template to use BaseCameraSrc
Incorporate Broadcom mmal headers
2020-07-10 16:42:01 +01:00
Xavier Claessens c187684b78 v4l2: Do not renegotiate if only framerate changed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/602>
2020-07-03 18:10:14 +00:00
Nicolas Dufresne ca61a76987 v4l2: Fix threading issues in orphaning mechanism
The pool orphaning function was colling internal _stop() virtual function
implementation. This is not thread safe, as a private lock inside the buffer
pool is supposed to be held. Fix this by keeping delayed _stop() and orphaning
the GstV4L2Allocator instead (REQBUFS(0)).

Then, protect the orphaned boolean with the object lock for the case a buffer
is being released after we have orphaned the buffer. That would otherwise
cause a QBUF to happen while the queue is no longer owned by the buffer pool.
This boolean is otherwise used and set from the streaming lock, or after
threads have been stopped (final cleanup).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/648>
2020-06-28 15:12:07 +00:00
Nicolas Dufresne 71204f2c3b v4l2bufferpoool: Fix requeueue after seek when importing
When the buffer pool is importing buffer, it will requeue num_allocated on
streamon. As this value was not set for DMABuf import and USERPTR, no buffer
was queued  back.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/651>
2020-06-28 13:40:30 +00:00
Nicolas Dufresne 1beb497aa7 Revert "v4l2bufferpool: request the maximum number of buffers for USERPTR"
This reverts commit 6bf9f4bd77.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/651>
2020-06-28 13:40:30 +00:00
Nicolas Dufresne d4ac154824 Revert "v4l2bufferpool: request the maximum number of buffers for DMABUF"
This reverts commit 94e323c10f.

Fixes #754

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/651>
2020-06-28 13:40:30 +00:00
Nicolas Dufresne 83f60aea54 v4l2bufferpool: Only resurrect the right amount of buffers
On streamon, we need to resurrect (queue back) some buffers, as during
flushign seek we'd endup with an empty queued. We initially started with
resurrecting as many as we could without blocking, but that miss-behaved with
dynamic CREATE_BUFS, causing the pool to grow dramatically. This was limited
by the number of allocated buffers, but this still tried to resurrect too many
buffers for the first run, as activating the pool will queued buffers.

In this patch, we calculte the missing detal in the queue and only try and
resurrect that amount of buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/651>
2020-06-28 13:40:30 +00:00
Nicolas Dufresne 85b9893e96 v4l2object: Only offer inactive pools and if needed
Avoid offering a pool if it's not needed or if it's still active.
This works around the fact the we only have one pool in V4L2.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/651>
2020-06-28 13:40:30 +00:00
Nicolas Dufresne 93b202b84e v4l2allocator: Don't do REQBUFS(0) on inactive allocator
If the allocator is no longer active, it means the memory has already
been freed, calling REQBUF(0) would make no sense.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/649>
2020-06-26 19:24:21 +00:00
Nicolas Dufresne b8f1f2195e v4l2bufferpool: Avoid set_flushing warning
The gst_buffer_pool_set_flushing() warns when that function is called
on an inactive pool. Avoid the warning by checking the state, this is
similar to what we do in gst_v4l2_object_unlock().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/649>
2020-06-26 19:24:21 +00:00
Nicolas Dufresne 0344c50eaf v4l2allocator: Fix data offset / bytesused size validation
The check was too strict causing spurious warning. Now check for <= so that 0
sized buffer do not cause a warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/649>
2020-06-26 19:24:21 +00:00
Nicolas Dufresne dbdbcfe7ff v4l2videoenc: Fix negotiation caps leak
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/649>
2020-06-26 19:24:21 +00:00
Nicolas Dufresne 7bbe4653a4 v4l2videoenc: Skip negotiation of profiles/level if no codec
The codec structure is optional and not used for fwht test codec. This
was leading to a crash dereferencing NULL pointer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/650>
2020-06-26 13:37:21 -04:00
Mathieu Duponchelle ceece207e0 docs: mark more types as plugin API 2020-06-23 12:07:47 -04:00
Jordan Petridis 3e2420361a Use gst_element_class_set_metadata when passing dynamic strings
gst_element_class_set_metadata is meant to only be used with
static or inlined strings, which isn't the case for the 2 elements
here resulting in use-after-free later on.

https://gstreamer.freedesktop.org/documentation/gstreamer/gstelement.html?gi-language=c#gst_element_class_set_static_metadata

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/622>
2020-06-11 20:39:33 +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
Nicolas Dufresne 3ea71a63f6 v4l2: videodec: Fix broken template caps
The profiles and levels were applied to the common caps instead of the copy.
That had the side effect of setting profiles/level from one CODEC onto
another. Leaving to encoder not being registered or not-negotiated errors.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/599>
2020-05-22 19:11:47 +00:00
Nicolas Dufresne d93664d65d v4l2: codec: Fix GValue leak
The levels and profiles probe function returned a dynamically allocated GValue
that was leaked. Simplify this by using a stack allocated GValue and a boolean
return value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/599>
2020-05-22 19:11:47 +00:00
Nicolas Dufresne 24e08553d6 v4l2codec: Remove uneeded factorisation
There is only one user of that function and the split only increase
complexicity.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/599>
2020-05-22 19:11:47 +00:00
Nicolas Dufresne bfb1506381 v4l2src: Ignore non-increasing sequence number
With older kernel, older driver or just broken drivers, the sequence number
may not be increasing. This simply ignore the sequence in this case. This
would otherwise miss-leading large amount of lost frame being reported.

Fixes #729

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/598>
2020-05-20 21:35:06 +00:00
Nirbheek Chauhan fbd4afc64c meson: Pass native: false to add_languages()
This is needed for cross-compiling without a build machine compiler
available. The option was added in 0.54, but we only need this in
Cerbero and it doesn't break older versions so it should be ok.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/589>
2020-05-13 19:25:33 +05:30
Nicolas Dufresne 8e3184a213 v4l2videodec: Increase internal bitstream pool size
This patch will now set the maximum of buffers to 32, allowing to grow the
pool for drivers that supports that and will respect the minimum buffers
reported by the driver. This was made to fix a stall with the virtio CODEC
driver.

Fixes #672
2020-04-15 20:19:48 +00:00
Nicolas Dufresne 6bf9f4bd77 v4l2bufferpool: request the maximum number of buffers for USERPTR
This is to match what we now do for DMABuf importation.
2020-04-08 16:37:30 +00:00
Michael Olbrich 94e323c10f v4l2bufferpool: request the maximum number of buffers for DMABUF
There are often only two buffers queued in the kernel so no new buffers are
requested.

With every qbuf, the kernel receives a new DMABUF for the specified index.
This most likely differs from the last DMABUF and the old cached entry is
released. This results in a lot of map/unmap overhead if the kernel driver
needs a mapping for the buffer.

With a larger queue, it's quite likely, that both old and new DMABUFs are
also mapped for another index. So the map/unmap is skipped, because the
mapping is reference counted.

The corresponding allocated buffers don't contain any actual memory, so
allocating them is quite cheep. So the log message is updated to clarify
this.
2020-04-08 16:37:30 +00:00
Guillaume Desmottes d1501f0952 v4l2: add alternate interlace mode
When using this mode each frame is split in two fields, each one being
transferred using its own buffer.
This is implemented with the V4L2_FIELD_ALTERNATE field format in v4l2.

This mode is enabled using a caps filter such as
"v4l2src ! video/x-raw\(format:Interlaced\)"

Here are the main changes related to this feature:

- use the INTERLACED caps feature with this mode.

- in this mode both fields of a given frame have the same sequence/offset
so adjust the algorithm checking for lost field/frame accordingly.

- double pool's min number of buffers as each frame requires 2 buffers.

Fix #504
Co-authored-by: Zeeshan Ali <zeenix@collabora.co.uk>
2020-03-25 12:42:12 +01:00
Guillaume Desmottes 0834ef15ce v4l2: display field when setting or trying format
Ease debugging interlacing pipelines.
2020-03-25 12:14:41 +01:00
Guillaume Desmottes 8a69e26f16 v4l2: pass v4l2object to GST_V4L2_MIN_BUFFERS()
Will be used to double the number of buffers in alternate interlace
mode.
2020-03-25 12:14:41 +01:00
Guillaume Desmottes 00893baef9 v4l2: use GST_VIDEO_INFO_FIELD_HEIGHT()
Use GST_VIDEO_INFO_FIELD_HEIGHT() instead of GST_VIDEO_INFO_HEIGHT()
when we actually want the field height rather than the frame height.
So far both are equals but that won't longer be the case when
implementing alternate interlace mode.
2020-03-25 12:14:41 +01:00
Seungha Yang b0f4831481 v4l2bufferpool: Use unique name for v4l2bufferpool object
Assign unique sequence number to an object name for better debugging
2020-03-23 17:48:19 +00:00
Gordon Hart 05e8dd42e7 v4l2src: decrease gst_v4l2src_create log verbosity
Lower the verbosity of the 'sync' log message emitted
each buffer from gst_v4l2src_create down to LOG(6)
from INFO(4). This brings the logging behavior of
v4l2src closer to the GStreamer guidelines, which
recommend the INFO level be reserved for rare or
one-off messages.
2020-03-10 20:33:04 +00:00
Guillaume Desmottes 48a7381602 v4l2: map GST_VIDEO_FORMAT_BGR15
The GstVideoFormat to v4l2 conversion was missing for BGR15.
2020-02-05 18:22:20 +05:30
Guillaume Desmottes 0f907205de v4l2: fix crash on invalid caps
gst_v4l2_object_set_format_full() was returning FALSE without setting
an error. Caller code (gst_v4l2src_fixate()) was then derefing a
NULL pointer when trying to handle the error.
2020-02-05 18:22:20 +05:30
Stéphane Cerveau b928517f1e good: use of g_value_dup_string
Use helper method to get string from GValue.
2019-12-20 09:30:26 +00:00
Olivier Crête f66fc2a694 osxaudio: Remove deprecated GTimeVal 2019-12-18 19:48:34 +00:00
Nicolas Dufresne 3bd544418c v4l2bufferpool: Queue number of allocated buffers to capture
Before we do streamon, we queue all capture buffers by calling
resurrect. When the driver supports CREATE_BUFS, this would lead
to buffers being allocated till the maximum of 32 is reached.

Instead, we now save the number of allocated buffers and queue this
amount.
2019-11-20 11:03:19 -05:00
Nicolas Dufresne 23089e9cc3 v4l2object: Workaround bad TRY_FMT colorimetry implementation
libv4l2 reset the colorpace to 0 and does not do any request to the
driver. This yields an invalid colorspace which currently cause a
negotiation failure. This workaround by ignoring bad values during the
TRY_FMT step.
2019-11-18 18:29:48 +00:00
Niels De Graef 7cf4ab6229 Don't pass default GLib marshallers for signals
By passing `NULL` to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.

Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
2019-11-17 15:32:30 +00:00
Guillaume Desmottes e9c10713a3 v4l2object: update match_buffer_layout() debug messages
It's no longer used only to try importing buffers.
2019-11-05 14:54:40 +05:30
Guillaume Desmottes 91002389b9 v4l2object: try matching buffer layout from downstream
Ask v4l2 to produce buffers matching the buffer layout requested
downstream.
2019-11-05 14:54:40 +05:30
Guillaume Desmottes 31c753a3fb v4l2object: factor out gst_v4l2_object_match_buffer_layout()
No semantic change.
2019-11-05 14:52:22 +05:30
Guillaume Desmottes a195d5a4a6 v4l2transform: use alignments from upstream when importing on sink
Try configuring the v4l2 output with the alignments from upstream when
importing its buffers. This allows us to support importing with
non-standard strides and/or heights if supported by the driver.
2019-11-02 12:47:43 +01:00
Guillaume Desmottes a92000ebb9 v4l2object: add support for vertical padding when importing buffers
We were already supporting horizontal padding by setting bytesperline to
the buffer stride but not vertical one.

We are now updating the format height with the padded height and crop to
the actual video resolution if needed.
2019-11-02 12:47:43 +01:00
Guillaume Desmottes 07930aea73 v4l2object: fix debug message if driver rejects stride
The 'want' and 'got' strides were inversed.
2019-11-02 12:47:43 +01:00
Guillaume Desmottes 3a05ef4798 v4l2: improve logs when importing buffers
Log strides and offsets from upstream.

Also fix a typo.
2019-11-02 12:47:43 +01:00
James Cowgill 51b83d5ca1 v4l2videodec: ensure pool exists before orphaning it
In commit e2ff87732d ("v4l2videodec: support orphaning") support for
orphaning the capture buffer pool was added when the format is
renegotiated. However, the commit forgot to check that a pool existed
before doing this. This is needed because it's possible for the format
to be renegotiated before a capture pool is allocated, which would
result in trying to orphan a NULL pool and lead to a NULL pointer
dereference.

Fix this by checking a pool exists first. If the pool doesn't exist,
there are no buffers to be reclaimed, so skip the allocation query in
that case.
2019-10-29 14:46:22 +00:00
Edward Hervey 8e1c224fbc good: Avoid usage of deprecated API
GTimeval and related functions are now deprecated in glib.
Replacement APIs have been present since 2.26
2019-10-16 07:46:58 +00:00
Javier Celaya 3f21c89bb0 osxaudio: misspelled dependency
When building osxaudio, the required 'AudioToolbox' dependency is
misspelled as 'AudioToolBox', which crashes the build with error:
ld: framework not found AudioToolBox
2019-10-14 15:33:30 +00:00
Tim-Philipp Müller c9a47c0c8d Remove autotools build system 2019-10-14 11:04:18 +01:00
Tim-Philipp Müller 6e8e3910d3 v4l2videoenc: fix wrong type cast
Follow-up to commit 1b752c0f !361
2019-10-13 12:46:58 +01:00
HuQian 9dcb626e3a is a typo here? gstv4l2object.c 2019-10-12 15:26:40 +00:00
Kevin Song 9d42b2dd5d v4l2videodec: Check stop in flush() to avoid race condition.
Backward playback will drain and flush every frame. Stop playback
when backward playback have race condition between exit thread and
streaming thread flush. Add one check to avoid it.

Fixes #639
2019-10-11 12:27:12 +00:00
Fuwei Tang 1b752c0fa8 v4l2videoenc: fix type conversion errors 2019-10-11 10:45:58 +08:00
Aaron Boxer 46989dca96 documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
Philipp Zabel 5c8d8723d2 v4l2: Add MPEG-2 profile and level support
Add support for V4L2 MPEG-2 decoders reporting supported profiles and
levels.
2019-09-27 08:47:20 +02:00
Philipp Zabel 2b1658fca2 v4l2object: add support for ABGR, xBGR, RGBA, and RGBx formats
Map them to the new V4L2_PIX_FMT_{BGRA32,BGRX32,RGBA32,RGBX32} pixel
formats.
2019-09-25 10:44:13 +02:00
Philipp Zabel 06a084d70c v4l2: update kernel headers to latest from media tree
Update to the latest installed headers (output of make headers_install)
from the media tree, keeping the slight modifications to the includes.

This includes typo fixes in enum v4l2_mpeg_video_multi_slice_mode,
MPEG-2 level and profile enums, new FWHT and H.264 Qp controls, new
RGB(A) formats, and new continuous bytestream and dynamic resolution
format flags.
2019-09-25 10:44:13 +02:00
Matthew Waters b0522aa8f7 osxvideosink: call superclass in reshape
Fixes macos werror build

../sys/osxvideo/cocoawindow.m:437:1: error: method possibly missing a [super reshape] call [-Werror,-Wobjc-missing-super-calls]
}
^
2019-08-30 14:12:29 +10:00
Nicolas Dufresne 45b6514f33 v4l2: Fix type compatibility issue with glibc 2.30
From now on, we will use linux/types.h on Linux, and use typedef of the
various flavour of BSD.

Fixes #635
2019-08-10 11:01:26 +01:00
Seungha Yang dbb4849a32 v4l2: Remove misleading comments
gst_pad_template_new() does not take ownership of the caps
2019-07-09 19:51:20 +09:00
Song Bing c74a5d870d v4l2transform: set right buffer count.
Set right buffer count to avoid one buffer.
2019-07-04 17:37:30 +00:00
Song Bing f49d610ebe v4l2videodec: Fix drain() function return type
Return right type for drain() function.
2019-06-24 14:43:21 +00:00
Tim-Philipp Müller 92e4ecef4c v4l2: fix compiler warning due to c99-ism 2019-06-24 09:42:31 +00:00
Philippe Normand 4fb749d99f v4l2: Fix H.264 level 3 string representation
The string_to_level function handles "3" so the level_to_string function should
do the same, to prevent caps negotiation issues.
2019-06-05 10:23:40 +01:00
Philippe Normand 6ce195e9d1 v4l2: Profile and level probing support for encoders and decoders
There used to be some profile/level support in encoders. This code was moved to
GstV4l2Codecs and is now also used for decoders. The caps templates for the
H.264, H.265, MPEG4, VP8 and VP9 encoders and decoders should now reflect the
profiles and levels advertised by the kernel.
2019-06-05 10:23:40 +01:00
Damian Hobson-Garcia a493bcd549 v4l2object: Orphan buffer pool on object_stop if supported
Use V4L2 buffer orphaning, on recent kernels so that
the device can be restarted immediately with
a new buffer pool during renogatiation.
2019-06-03 19:09:24 +00:00
Damian Hobson-Garcia 50dfbf1c0d v4l2bufferpool: Free orphaned allocator resources when buffers are released
Allocator resources cannot be freed when a buffer pool is orphaned
while its buffers are in use. They should, however, be freed once those
buffers are no longer needed. This patch disposes of any buffers
belonging to an orphaned pool as they are released, and makes sure
that the allocator is cleaned up when the last buffer is returned.
2019-06-03 19:09:24 +00:00
Damian Hobson-Garcia 1b9a0f1c2d v4l2bufferpool: return TRUE when buffer pool orphaning succeeds
When trying to orphan a buffer pool, successfully return and unref
the pool when the pool is either successfully stopped or orphaned.
Indicate failure and leave the pool untouched otherwise.
2019-06-03 19:09:24 +00:00
Mathieu Duponchelle f554369ed5 doc: remove xml from comments 2019-05-29 22:20:40 +02:00
Tim-Philipp Müller bf14759477 dv, gtk, qt, osxaudio, osxvideo, waveform: add to plugins list
Makes sure the paths for these plugins are included in the
uninstalled plugin paths list. And also for the docs.

Fixes #604
2019-05-29 14:56:37 +00:00
Thibault Saunier 38c5ba90b3 doc: Fix some docstrings 2019-05-13 17:00:00 -04: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
Guillaume Desmottes 443c16e1e3 v4l2: fix use after free when handling events
The sink_event parent function may consume the event so we shouldn't use
it after having calling it.
2019-04-16 14:53:15 +05:30
Dan Kegel dfe1f6d803 osxvideo: fix mac os 10.14 build
lockFocusIfCanDraw is deprecated in mac os 10.14.  Apple suggests a
different way to do what that does, but for now, just suppress the deprecation.

There's no way to disable just that deprecation, so shut them all down.

OpenGL is also deprecated in mac os 10.14.  There is a gentle way to
turn off just those deprecations (GL_SILENCE_DEPRECATION), but since
this commit turns them all off, that's moot.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/577
2019-04-08 16:27:13 -07:00
Philipp Zabel 603c7a52fd v4l2: remove __user define from types-compat.h
Remove the now unused __user define.
2019-04-05 16:01:55 +00:00
Philipp Zabel 40db843efd v4l2object: use opRGB colorspace and xfer func defines
AdobeRGB defines have been renamed to opRGB in the kernel headers,
use the new names.
2019-04-05 16:01:55 +00:00
Philipp Zabel e2ff87732d v4l2videodec: support orphaning
Recent kernels allow REQBUFS(0) on a queue that still has buffers in
use (mmapped or exported via dmabuf), orphaning all buffers on the queue.
If this is supported, the v4l2videodec element does not have to send a
drain request downstream.
2019-04-05 16:01:55 +00:00
Philipp Zabel dfc20013cc v4l2bufferpool: support orphaning
Now that the v4l2allocator allows orphaning the V4L2 buffer queue, add
support for orphaning in the v4l2bufferpool. gst_v4l2_buffer_pool_orphan
can be used as a replacement for gst_v4l2_buffer_pool_stop, without
having to wait for buffers to be returned to the pool.
2019-04-05 16:01:55 +00:00
Philipp Zabel 0948ce0478 v4l2allocator: support orphaning
Recent kernels allow REQBUFS(0) on a queue that still has buffers in
use (mmapped or exported via dmabuf), orphaning all buffers on the queue.

Orphaning the allocator causes it to release all buffers with
REQBUFS(0), even if they are still in use. An orphaned allocator can
only be stopped. It can not be restarted or create new buffers.
2019-04-05 16:01:55 +00:00
Philipp Zabel 5d904530c1 v4l2: update kernel headers to latest from media tree
Update to the latest installed headers (output of make headers_install)
from the media tree, keeping the slight modifications to the includes.

This includes new HEVC controls, the AdobeRGB -> opRGB rename, a new
capabilities field for v4l2_requestbuffers and v4l2_create_buffers, new
32-bit YUV formats, and request_fd changes.
2019-04-05 16:01:55 +00:00
Guillaume Desmottes e3c4b80750 v4l2src: preserve features when fixating caps
The caps features were lost when sorting caps structures in
gst_v4l2src_fixate(). This was breaking alternate as
GST_CAPS_FEATURE_FORMAT_INTERLACED was removed from the caps.
2019-04-05 13:22:58 +00:00
Philipp Zabel 16e5b32bc1 v4l2videoenc: set GstVideoCodecFrame sync point flag
The V4L2 elements already set the delta unit buffer flag when dequeueing
the buffer, but gst_video_encoder_finish_frame overwrites it from the
passed codec frame's sync point flag. Set the flag correctly.
2019-03-21 18:05:51 +00:00
Philippe Normand 75f26bc954 v4l2: Set Hardware classifier on encoders 2019-03-18 10:51:15 +00:00
Philippe Normand 3296a4b7e2 v4l2: Set Hardware classifier on video decoders 2019-03-18 10:51:07 +00:00
Philipp Zabel cdf15e9032 v4l2transform: don't segfault if flushed without pools
The v4l2output and v4l2capture v4l2objects can have pool == NULL if they
have been stopped before.
2019-03-17 13:17:21 +00:00
Philipp Zabel 8b068fb78b v4l2sink: fix pool-less allocation query handling
This fixes a critical warning if the last-sample property is enabled:

  (gst-launch-1.0:391): GStreamer-CRITICAL **: 01:12:57.428: gst_object_unref: assertion 'object != NULL' failed

If the allocation query does not contain any allocation pools,
gst_query_parse_nth_allocation_pool will leave the local pool,
min, and max variables undefined, so check the array length first.
If pool is NULL, do not call gst_object_unref.
2019-03-08 22:01:14 +01:00
Mauro Carvalho Chehab dc7bd48326 v4l2: accept Bayer as possible input/output for V4L2 codecs
A V4L2 transform codec may input/output data on Bayer format.

Add support for that.
2019-02-26 13:59:46 +00:00
Mauro Carvalho Chehab 55c1274dba v4l2: fix a typo on a debug message at v4l2_calls
suppored -> supported
2019-02-26 13:59:46 +00:00
Matthew Waters 0acbf40060 v4l2dec: also remove the colorimetry and chroma-site fields
If a different format is chosen, then these values are incorrect.
2019-02-26 07:04:54 +00:00
Tim-Philipp Müller 64a991d7b8 meson: ximage: check for XShmAttach()
Fixes FIXME.
2019-01-22 09:52:14 +00:00
Tim-Philipp Müller e234932dc7 meson: add options for ximagesrc xshm, xfixes, xdamage checks
And rename x11 option to ximagesrc.

Fixes #553
2019-01-22 09:52:03 +00:00
Guillaume Desmottes e7b84b0f6c v4l2: mark caps from probe as MAY_BE_LEAKED 2019-01-17 15:05:45 +00:00
Guillaume Desmottes bb2063f632 v4l2transform: fix cdata caps leaks
The cdata structure was freed but not its caps.
It was already done in gst_v4l2_video_dec_subclass_init() and
gst_v4l2_video_enc_subclass_init().
2019-01-17 15:05:45 +00:00
Guillaume Desmottes dab84b14dd v4l2: Avoid code duplication
The function gst_v4l2_object_add_interlace_mode() has repeating code so
it's best use a loop instead. That will make it easy and simple to add
additional interlace modes in a following patch.
2018-12-17 15:30:47 +00:00
Zeeshan Ali 40fee8eeeb v4l2: Make use of gst_video_interlace_mode_to_string()
Instead of a custom map to translate the interlace modes to strings, let's
make use of the base API provided.
2018-12-17 15:30:47 +00:00
Nicola Murino 6525abfc63 osxcoreaudio: fix typo
kAudioFormatFlagIsSignedInteger is a format flags

Closes #394
2018-12-17 13:45:36 +01:00
Justin Kim 34233baae1 osxvideo: meson: Add dependencies by using appleframeworks
Otherwise, it fails to link.

gst-build#13
2018-12-14 12:21:58 +09:00
Maciej Wolny ec655de288 Remove duplicate declarations
This causes 'redefinition of typedef ...' errors on GCC 4.5.3
2018-12-04 11:13:02 +00:00
Jordan Petridis 515ada7e22
Run gst-indent through the files
This is required before we enabled an indent test in the CI.

https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/33
2018-11-28 05:52:16 +02:00
Nicolas Dufresne 3b22a604b5 v4l2: Properly fix Android build
The previous patch did not even compile on any possible platform or C
standard. That commit also didn't have a proper commit message.

Android ships Linux with a different signature for ioctl. They first
released an ioctl with int as request type, and later "fixed" it by
adding an override with unsign, which is still not matching Linux and
BSD implementation which uses unsigned long int.
2018-11-21 18:58:38 -05:00
Xavier Claessens 0e2d0adac5 Fix ioctl() signature on Android 2018-11-21 16:11:02 -05:00
Nicolas Dufresne dbaca549ab v4l2object: Read driver selected interlace mode
If there was no interlace-mode field in the caps. Read back the value
selected by the driver. This way, if the driver does not support
progressive, then it will automatically negotiate the returned mode
unless this mode is not supported by GStreamer.

This method was already used for colorimetry. Just like colorimetry, the
interlace mode is not longer probed by v4l2src dues to performance
issues.

Fixes #511
2018-11-07 19:29:51 -05:00
Wonchul Lee 560a6155bd v4l2bufferpool: fix typo resurect to resurrect
https://bugzilla.gnome.org/show_bug.cgi?id=797273
2018-10-24 12:03:13 +01:00
Amit Pandya 15429ee411 v4l2videoenc: Add HEVC support
Add HEVC encoder support.

https://bugzilla.gnome.org/show_bug.cgi?id=797141
2018-10-24 12:01:59 +01:00
Nicolas Dufresne f2fa61b6c5 vl42allocator: Don't dup exported dmabufs
We can now use the new GstFAllocator to ask the allocator not to close
the wrapped FD. This way the dup is no longer needed.
2018-10-24 11:55:32 +01:00
Nicolas Dufresne b25a01fab9 v4l2allocator: Don't dup imported DMABuf FD
There is no specific needs to duplicate the FD. Unlike the exportation,
we don't depend on code that will call close. This will make debugging
easyer since the traced FD will match the exporter.
2018-10-24 11:55:32 +01:00
Nicola Murino 3573f71c91 osxaudio: add support for parsing more channel layouts ...
... and fallback to gst_audio_info_set_format for not yet supported layouts.

Fix audio playback on iOS 12.
Based on patch from Byron Schiel <byron@canary.is>

https://bugzilla.gnome.org/show_bug.cgi?id=796919
2018-09-24 15:50:23 +03:00
Song Bing 1dc6881a13 v4l2videodec: Add HEVC decoder support
https://bugzilla.gnome.org/show_bug.cgi?id=771686
2018-09-13 20:48:09 -04:00
Nicolas Dufresne 2510b5937d v4l2videodec: Move capture probe after input format is set
This is to support Amlogic CODEC driver which does not provide a full
list of formats when the driver is initially opened. GStreamer does
not strictly need this full list initially, but only later, in order
to negotiate with downstream if multiple format can be selected.

With this change, we will no longer probe twice the device, since the
probed list can be directly used for negotation.
2018-09-13 20:48:09 -04:00
Ezequiel Garcia 7f42b12e8c v4l2: Add a debug message beforing waiting for codec stop
Add a debug message right before waiting for the driver.
This is useful in order to debug drivers without a properly
implemented decoder or encoder stop command.
2018-09-13 20:48:09 -04:00
Ezequiel Garcia 09f9b37b0b v4l2: Add a debug message indicating probe operation
It's useful to see the v4l2 element running the probe
operation, to confirm it's turned on and working.
2018-09-13 20:48:09 -04:00
Ezequiel Garcia 63535d9086 v4l2: Add JPEG encoding support
This commit adds the support for V4L JPEG stateful encoders.
2018-09-13 20:48:09 -04:00
Ezequiel Garcia 944debd3db v4l2: Add FWHT codec support
The recently added vicodec (virtual codec) V4L driver
uses the Fast Walsh-Hadamard Transform for encoding
and decoding.

Add support for it.
2018-09-13 20:48:09 -04:00