Hou Qi
0e7a485528
v4l2: Add protection when set decoder capture fps accroding to output fps
...
Some v4l2 drivers don't have the capacity to change framerate. There is
chance to make decoder capture fps to be 0/0 if numerator and denominator
returned by G_PARM ioctl are both 0. It causes critical warning
"passed '0' as denominator for `GstFraction'".
In order to fix this, add protection when set decoder capture fps according
to output fps.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1048 >
2021-08-17 13:27:28 +00:00
Hou Qi
6858c8222c
v4l2: Keep decoder capture fps same as output fps if it's not set
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1035 >
2021-08-02 17:37:52 +08:00
Hou Qi
f4049fc292
v4l2videoenc: Set default latency if the frame duration is invalid
...
If the duration of the v4l2object is invalid, use default 25fps instead.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/996 >
2021-05-28 11:54:53 +00:00
Hou Qi
5e932395a4
v4l2object: Add interlace-mode back to caps for camera
...
skip_try_fmt_probes is set to TRUE for v4l2src to skip interlace-mode and
colorimetry when probe caps. gst_v4l2_object_set_format_full() will add
colorimetry back to caps when iterating over the negotiated caps. There is
one case that v4l2src is first in preview state then starts recording.
v4l2src caps will change with an additional interlace-mode structure after
renegotiation, then v4l2src needs to reset. But this camera driver can't
orphan buffer pool, it causes require buffer failed as streaming is still
in active state.
To fix this, also need to add interlace-mode back to caps for camera to
avoid reset.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/961 >
2021-04-27 13:47:21 -04:00
Philippe Normand
a2c16ec632
v4l2: Fix glib warning emitted when attribute query fails
...
The v4l2object is not a GstObject. Logging has to go through its dbg_obj
specially meant for this.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/959 >
2021-04-21 18:48:38 +01:00
Tim-Philipp Müller
c70b41b22b
v4l2: fix debug category initialisation again
...
Would spew warnings on the rpi4 when calling into
gst_v4l2_object_get_codec_caps() from the probe_and_register()
function since the v4l2_debug category initialisation would
only be done later as part of the element/device provider
registration.
Also log things in the probe function to the v4l2 category
instead of the default category while we're at it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/956 >
2021-04-20 06:35:01 +00:00
Tim-Philipp Müller
63c1e2ed60
v4l2src: fix spurious SOURCE_CHANGED error-level log messages
...
They're harmless, and some drivers at least return EINVAL
instead of ENOTTY for unsupported events (here: uvcvideo).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/955 >
2021-04-19 11:29:44 +01:00
Hou Qi
a75cfa522d
v4l2object: Use default colorimetry if that in caps is unknown
...
Some streams have unknown colorimetry in caps, but v4l2object sets
default values for each primaries. It will cause check colorimetry
fail when do gst_v4l2_video_colorimetry_matches().
To fix this, need to keep the unknown colorimetry in caps same as
the default value set by v4l2object.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/923 >
2021-04-01 08:50:05 +08:00
Stéphane Cerveau
31a780a061
oss4: allow per feature registration
...
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/876 >
2021-03-29 12:45:23 +02:00
Stéphane Cerveau
55490732be
oss: allow per feature registration
...
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/876 >
2021-03-29 12:45:23 +02:00
Stéphane Cerveau
b20209ce0d
v4l2: allow per feature registration
...
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/876 >
2021-03-29 12:45:23 +02:00
Hou Qi
e037391364
v4l2object: Avoid colorimetry mismatch for streams with invalid colorimetry
...
video-info sets gst colorimetry to default value when colorimetry in caps
is unparsable or invalid. Then v4l2object uses this gst colorimetry to do
mapping with v4l2 colorimetry. This may cause colorimetry mismatch when
check mapped gst colorimetry with that read from caps directly.
To fix this, need to correct gst colorimetry as that parsed from video-info
when check gst_v4l2_video_colorimetry_matches().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/917 >
2021-03-24 08:40:52 +08:00
Hou Qi
4c6ff9fb58
v4l2object: Add support for hdr10 stream playback
...
Colorimetry of hdr10 video is bt2100-pq with transfer as
GST_VIDEO_TRANSFER_SMPTE2084. So map GST_VIDEO_TRANSFER_SMPTE2084
to V4L2_XFER_FUNC_SMPTE2084 to support hdr10 stream playback.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/888 >
2021-03-22 09:15:54 +08:00
Matthew Waters
612102fdbc
gst: don't use volatile to mean atomic
...
volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead. GCC 11 has started warning about using volatile
with atomic operations.
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/911 >
2021-03-18 19:52:53 +11:00
Philipp Zabel
78dec1e403
v4l2object: handle GST_VIDEO_TRANSFER_BT601
...
V4L2 makes no difference between the BT.601 and BT.709 transfer
functions [1], but GStreamer does since 1.18 [2].
Adapt gst_v4l2_object_get_colorspace() and
gst_v4l2_object_set_format_full().
[1] https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/colorspaces-details.html#colorspace-smpte-170m-v4l2-colorspace-smpte170m
[2] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/724
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/856 >
2021-03-12 16:57:50 +00:00
Hou Qi
fc5a1e468b
v4l2videodec: Do not expose profiles/levels in vp8/vp9 template caps
...
Vp8/vp9 supported profiles/levels are listed in decoder sink caps, but
there is no parser for these two formats and the demuxers also don't have
these information. It causes negotiation fail between demuxers and decoder
when check caps "accept = gst_caps_is_subset (caps, template_caps);".
To fix this, need to remove profiles/levels for vp8/vp9 formats in decoder
sink caps.
Fix #854
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/887 >
2021-03-03 15:17:58 +00:00
Philipp Zabel
e885e0e1d7
v4l2videodec: fix src side frame rate negotiation
...
Negotiating v4l2h264dec ! v4l2h264enc transcoding pipelines fails in
case the encoder does not accept framerate=(fraction)0/1.
The acquired caps used for downstream negotiation are determined from
gst_v4l2_object_acquire_format(), which sets the GstVideoInfo::fps_n
and ::fps_d fields to 0.
To fix this, copy the frame rate from the sink side.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/882 >
2021-02-24 17:15:49 +01:00
Jordan Petridis
1257e50d49
rpicamsrc: depend on posix threads and vchiq_arm
...
Could only test on rpi 3b+
Close #839
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/875 >
2021-02-21 00:18:34 +00:00
Nicolas Dufresne
bb29b8f8d2
v4l2bufferpool: Silence traces around unsupported source change
...
Don't be too spamy about unsupported source change flags as these will be
commonly extended in the future.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
409ea3ac84
v4l2src: Move preferred resolution query before the probe
...
As we lock the DV_TIMINGS (and standards in the future), we need to probe the
caps after, otherwise, we may endup fixating to an unsupported resolution,
which would lead to a not-negotiated error.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
b530c0ef4e
v4l2src: Calculate framerate from DV timings
...
And use this framerate in our preference. Note that we also flush
the probed caps as it seems that the format enumeration may change
when a new source change event get triggered.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
25696203c3
v4l2rc: Add DV_TIMINGS query and locking
...
This adds support to DV_TIMINGS query and locking. The timing width and
height is then used as a preference.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
b750fb2d5b
v4l2src: Force renegotiation on resolution change
...
As mandated by the specification, make sure to cycle through streamoff
/ streamon regardless if the caps have changed or not.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
7b8fe18d06
v4l2object: Remove unused streaming member
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
afb412b75d
v4l2src: Refactor to use PreferredCapsInfo structure
...
Avoid passing around a bare structure for the preference, this removes
the need to copy and free that structure and simplify the code. Also
fix a type in the structure name, Prefered -> Preferred.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
c0fdaffc55
v4l2src: Stub preferred resolution support
...
This stubs the ability to use preferred resolution from digital
video timings, analog TV standards or driver reported native
resolution.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
1b21c1b15b
v4l2: Subscribe source_change for the current input
...
When we subscribe for source-change event, we need to specify for which
input. Make sure we subscribe for the current input.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
c386aa43cc
v4l2src: Add input signal status detection
...
As part of the support to select a preferred size, we can also
detect the signal status. This is a split patch so that feature
is separated to ease review.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
293abe0675
v4l2: Add helper to query input status
...
This is a wrapper around ENUM_INPUT renamed for readability.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
ba3eddebc8
v4l2: Fix input/output index sign
...
This is an unsigned integer in the kernel API.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
1094e2548e
v4l2src: Add source resolution change support
...
This patch adds support for source resolution change detection.
Resolution change is signaled by drivers when a change in the detected
signal have been detected. This is notably seen on HDMI receivers.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
bb1d9b398e
v4l2bufferpool: Handle resolution change event
...
This patch adds the detection, dequeuing and reporting of the SOURCE_CHANGE
event when the CH_RESOLUTION flag is set. The acquire function will now return
a new custom success called GST_V4L2_FLOW_RESOLUTION_CHANGE. In order to use
this new feature, elements must enable it by calling:
gst_v4l2_buffer_pool_enable_resolution_change (pool);
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
4be9bf4085
v4l2object: Add event helpers
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 16:02:02 -05:00
Nicolas Dufresne
954e38a6b9
v4l2bufferpool: use FLOW_LAST_BUFFER
...
This uses the GST_V4L2_FLOW_LAST_BUFFER alias instead of
GST_FLOW_CUSTOM_SUCCESS to make the code more readable.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870 >
2021-02-19 15:22:47 -05:00
Lucas Stach
1b1ad32b90
v4l2object: prefer NV12 over I420
...
Considering NV12 an 'odd' format is a historical artifact. This format
is now quite common, and usually preferable to I420 due to more memory
friendly access patterns.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/857 >
2021-02-19 13:12:54 -05:00
Kevin Song
c63ff9c06c
Apply 1 suggestion(s) to 1 file(s)
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/868 >
2021-02-05 00:55:49 +00:00
Kevin Song
fd6c296021
Apply 1 suggestion(s) to 1 file(s)
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/868 >
2021-02-05 00:55:49 +00:00
Bing Song
025b43e512
v4l2videoenc: support resolution change stream encode.
...
Resolution change stream transcoding will drain before send new video
frame buffer. Need encode video frame after process EOS.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/868 >
2021-02-05 00:55:49 +00:00
Bing Song
5f00810ee0
v4l2h265codec: fix HEVC profile string issue.
...
Keep HEVC profile compatible with other module.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/850 >
2021-01-27 01:22:41 +00:00
Bing Song
b87db31fbe
v4l2object: Need keep same transfer as input caps.
...
GST_VIDEO_TRANSFER_BT2020_12 and GST_VIDEO_TRANSFER_BT2020_10 will
be mapped to V4L2_XFER_FUNC_709. Need check input caps when map
V4L2_XFER_FUNC_709 back to GST_VIDEO_TRANSFER_BT2020_12 and
GST_VIDEO_TRANSFER_BT2020_10
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/816
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/841 >
2021-01-18 04:26:04 +00:00
Hou Qi
386b785e48
v4l2object: Map correct video format for RGBA
...
Map V4L2_PIX_FMT_RGBA32 pixel format to GST_VIDEO_FORMAT_RGBA instead of
GST_VIDEO_FORMAT_RGB video format to support RGBA.
Fixes #823
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/848 >
2021-01-11 09:05:05 +08:00
Hou Qi
ff1dd307f2
v4l2object: Use active resolution during fallback colorspace probe
...
For legacy drivers that don't implement ENUM_FRAMESIZE, use active
resolution to probe colorspace. This can improve the accuracy of the
result when the colorspace depends on the resolution. This fixes a
wrong colorspace issue on board with vendor bsp at resolution 2560x1440.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/830 >
2020-12-14 09:15:18 +08:00
Jose Quaresma
2a5d7b18a0
rpicamsrc: add vchostif library as it is required to build successful
...
fix: undefined reference to `vc_gencmd'
/usr/src/debug/gstreamer1.0-plugins-good/1.18.1-r0/build/../gst-plugins-good-1.18.1/sys/rpicamsrc/RaspiCamControl.c:1440: undefined reference to `vc_gencmd'
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/818 >
2020-12-01 18:24:58 +00:00
Tim Schneider
2c76f03fe2
rpicamsrc: Added "src->started = FALSE;" to gst_rpi_cam_src_stop
...
Makes the element reusable multiple times after a state change back to READY.
Fixes #105
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/823 >
2020-11-20 02:15:15 +11:00
Bing Song
8a0a7d932a
v4l2: caps negotiate wrong as interlace feature
...
gst_caps_simplify() will move interlace format before normal video
format. It will cause caps negotiate prefer interlaced caps which
isn't expected. Seperate normal caps and interlaced caps and then
merge it will keep prefer progress video format.
Add ARGB/BGRA for interlaced caps.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/802
Part-of <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/813 >
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/813 >
2020-11-16 15:12:28 +00:00
Sebastian Dröge
d885cc0f1a
v4l2codec: Garbage collect old frames if they accumulate because of codec bugs
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/778 >
2020-10-19 22:04:55 +03:00
Sebastian Dröge
bcb3428ed0
v4l2codec: Pass system frame number as timestamp and use it to retrieve back frames reliably
...
System frame numbers are supposed to be unique and correct drivers are
passing through timestamps without modification from the output/sink to the
capture/src side.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/778 >
2020-10-19 18:33:58 +03:00
Havard Graff
ed01e165b5
v4l2object: plug memory-leak
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/718 >
2020-09-10 01:29:53 +00:00
Nicolas Dufresne
6b76be620b
v4l2h264codec: Map newly defined profile/levels
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/697 >
2020-08-11 17:24:11 -04:00
Nicolas Dufresne
742d435511
v4l2: Sync headers with kernel 5.9
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/697 >
2020-08-11 17:24:03 -04:00