Commit graph

3781 commits

Author SHA1 Message Date
Tim-Philipp Müller c3ddb29cb2 Release 1.19.2 2021-09-23 01:35:54 +01:00
Zhang Yuankun bd8c0b33e7 vaapi: decoder: modify the condition to judge whether dma buffer is supported
It seems "GST_VAAPI_PLUGIN_BASE_SRC_PAD_CAN_DMABUF (decode)" will
return false even if this platform support the mem_type dma buffer.
And media-driver will return GST_VAAPI_BUFFER_MEMORY_TYPE_DMA_BUF2
on Gen12(such as TGL).
Without this patch, The command such as:
gst-launch-1.0 videotestsrc num-buffers=100 ! video/x-raw, format=I420 ! \
x264enc ! h264parse ! vaapih264dec ! video/x-raw\(memory:DMABuf\) ! fakesink
will return not-negotiated.

Signed-off-by: Zhang Yuankun <yuankunx.zhang@intel.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/437>
2021-08-26 15:06:53 +08:00
He Junyan 7809c58664 Display: Add a property to export the VA display handle.
Just like what we do in VA plugins. The display can be seen as a
generic gst object and we can add a property to get the internal
VA handle.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/435>
2021-08-25 01:47:21 +00:00
He Junyan c27c158cb2 plugins: video memory: Add a GST_MAP_VAAPI flag to peek the surface.
Just like what we do in VA plugins, the GST_MAP_VAAPI can directly
peek the surface of the VA buffers. The old flag 0 just peek the
surface proxy, which may not be convenient for the users who do not
want to include our headers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/435>
2021-08-25 01:47:21 +00:00
Víctor Manuel Jáquez Leal e0a56f3391 Revert "vaapi: Demote vaapidecodebin to rank NONE."
This reverts commit 7a25c5d4ec.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/436>
2021-07-09 11:01:14 +02:00
He Junyan 677d1e0105 plugins: encode: fix a deadlock because of _drain()
We call gst_vaapiencode_drain() in gst_vaapiencode_change_state(),
whose context does not hold the stream lock of the encoder. The
current gst_vaapiencode_drain inside unlock/lock pair adds a extra
lock count to the stream lock of encoder and causes hang later.
We just remove the gst_vaapiencode_drain() and expand its logic
correctly according to the lock/unlock context.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/433>
2021-07-01 11:57:10 +00:00
He Junyan d152ab1d37 libs: decoder: av1: Clean the film_grain_info field.
We need to clean all film_grain_info fields when the film grain
feature is not enabled. It may have random data because the picture
parameter buffer is not cleaned.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/434>
2021-07-01 11:14:15 +00:00
He Junyan 310ffc17a8 libs: encoder: mpeg2: Add highP level for 1080@50p/60p.
The MPEG2 spec has amendment 3 to introduce a new level highP, which
is used for 1080@50p/60p streams. We need to add this level to avoid
encoding failure because of the level check.

Fix: #306
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/432>
2021-06-23 06:33:40 +00:00
He Junyan 9f02c3fa4c Decoder: H264: Add the support for frame packing arrangement SEI message.
Frame packing arrangement SEI message is an alternative simple stereo 3D
manner for AVC. We need to recognize that SEI message and report the correct
3D caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/420>
2021-06-10 22:22:14 +08:00
Tim-Philipp Müller 2614333389 Use g_memdup2() where available and add fallback for older GLib versions
Alloc size is based on existing allocations and struct sizes.

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/431>
2021-06-02 12:40:14 +00:00
Tim-Philipp Müller f3dcdfbd60 Back to development 2021-06-01 15:29:16 +01:00
Tim-Philipp Müller 5e67efbf27 Release 1.19.1 2021-06-01 00:16:32 +01:00
Víctor Manuel Jáquez Leal 7a25c5d4ec vaapi: Demote vaapidecodebin to rank NONE.
One of the main reasons of vaapidecodebin was because it mitigated the
possible surface exhaustion. But that problem is currently
solved. Nowadays, vaapidecodebin brings more problems than it
solves. Thus this patch demotes vaapidecodebin to NONE rank while
bumping PRIMARY + 1 the most common decoders.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/426>
2021-05-21 09:36:26 +00:00
Víctor Manuel Jáquez Leal b3d9c5bf80 plugins: Demote rank of vaapipostproc and vaapioverlay.
Since almost all video filters have rank NONE, these both elements
should be NONE too.

This is useful for autovideoconvert and other bins, and users might
force to use these by setting the environment variable
GST_PLUGIN_FEATURE_RANK.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/429>
2021-05-20 10:35:32 +02:00
François Laignel 2080979d10 Use gst_element_request_pad_simple...
Instead of the deprecated gst_element_get_request_pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/425>
2021-05-05 06:16:44 +00:00
Zhang yuankun 722d6bb625 libs: encoder: VP9: fix > 4k encode fail issue
The VP9 spec defines the MAX_TILE_WIDTH_B64(64), which is the maximum
width of a tile in units of superblocks. So the max width of one tile
should not be larger than 64x64=4096. When the width exceeds 4k, we
need to split it into multiple tiles in columns. The current vp9 encoder
does not handle this correctly.
The command such as:
  gst-launch-1.0 videotestsrc ! video/x-raw,width=7680,height=4320 ! \
    vaapivp9enc ! fakesink
will crash.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/424>
2021-04-23 11:02:05 +08:00
Haihao Xiang 0193751ce8 libs: display: drm: don't fallback to default device if explicitly specified device can't load/init
Otherwise user will be misled that the specified device is using

This fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/305

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/422>
2021-04-08 09:38:17 +08:00
He Junyan 993d46bb2f decoder: H265: Enable cu_qp_delta_enabled_flag when ROI
If ROI is enabled, the CUs within the ROI region may have different
QP from the other part of the picture. This needs us to enable the
cu_qp_delta_enabled_flag even in the CQP mode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/419>
2021-03-22 13:43:01 +08:00
Matthew Waters d270654c48 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/gstreamer-vaapi/-/merge_requests/418>
2021-03-19 19:03:54 +11:00
Paul Goulpié e1f6c37b46 gstvaapiencoder_h264: add ENCODER_EXPOSURE on aud propertie
forgot during the following mainline commit: bc2f8fd19e#

Signed-off-by: Paul Goulpié <paul.goulpie@ubicast.eu>
2021-02-27 22:48:57 +01:00
He Junyan 18f530978b plugins: postproc: Fix a problem of propose_allocation when passthrough.
We should query the downstream element to answer a precise allocation
query when the passthrough mode is enabled.
The current way still decides the allocation by the postproc itself. The
pipeline such as:
  gst-launch-1.0 -v filesrc location=xxx.264 ! h264parse ! vaapih264dec ! \
  vaapipostproc ! fakevideosink silent=false sync=true
will lose some info such as the GST_VIDEO_META_API_TYPE.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/413>
2021-02-04 08:59:28 +00:00
Haihao Xiang 4ff4bcd725 libs: display: drm: support gst.vaapi.app.Display context for drm backend
Attributes for drm backend:
- va-display : ponter of VADisplay
- drm-device-fd : the DRM device file descriptor

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/409>
2021-01-29 14:08:42 +00:00
Haihao Xiang 85284f4aac libs: display: drm: allow user specify a drm device via an env variable
Currently the default drm device is always used on a system with
multiple drm devices. This patch allows user to specify the required
drm device via GST_VAAPI_DRM_DEVICE env variable

Example:
GST_VAAPI_DRM_DEVICE=/dev/dri/renderD129 gst-launch-1.0 videotestsrc !
vaapih264enc ! fakesink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/409>
2021-01-29 14:08:42 +00:00
Haihao Xiang 23967fc02b libs: display: drm: fix set_device_path_from_fd
drmGetBusid() (GET_UNIQUE ioctl) won't return a valid bus id when
drmSetInterfaceVersion() (SET_VERSION ioctl) hasn't been called(see[1]),
so we can't get the right device path. Running test-display will get the
error below:

** (test-display:18630): ERROR **: 10:26:00.434: could not create Gst/VA
display

Calling drmSetInterfaceVersion() before drmGetBusid() can't fix this
issue because a special permission is required for SET_VERSION ioctl.

This patch retrieves the device path from file descriptor via
g_file_read_link()

[1] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/drm_ioctl.c#L48-L104

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/412>
2021-01-28 09:48:56 +08:00
Rafał Dzięgiel c4e76d6fc5 glx: Iterate over FBConfig and select 8 bit color size
Texture upload mechanism used by gstreamer-vaapi relies on 8 bpc.
In latest mesa versions the first fbconfig might not be 8 bit, so iterate
over it to find the correct config with supported values.

This also adds 8 bit alpha size to the framebuffer configuration which is
required to get it working properly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/410>
2021-01-20 10:42:09 +01:00
Ung, Teng En a0a8b8785e vaapipostproc: fix code style.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-11 11:01:57 +00:00
Ung, Teng En a354c14e58 vaapipostproc: Remove YUV to/from RGB color primary quirk since iHD driver has fixed in
a39fe9bc05.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-11 11:01:57 +00:00
Ung, Teng En 4ccb37fe37 vaapipostproc: Added gstreamer BT2020 color standard support.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-11 11:01:57 +00:00
He Junyan 5e3fde8569 decoder: AV1: Fix a static analysis problem of update_state().
No need to check the picture pointer after we have already dereferenced it.

Fix: #298
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/408>
2021-01-09 21:01:16 +08:00
He Junyan 5523b75550 libs: decoder: Add decode_with_surface_id for AV1 film_grain.
The AV1 film_graim feature needs two surfaces the same time for
decoding. One is for recon surface which will be used as reference
later, and the other one is for display. The GstVaapiPicture should
contain the surface for display, while the vaBeginPicture() need
the recon surface as the target.
We add a gst_vaapi_picture_decode_with_surface_id API to handle this
kind of requirement.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/191>
2021-01-06 00:08:10 +08:00
He Junyan 0a34b6882e libs: decoder: AV1: Add the av1 decoder support.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/191>
2021-01-06 00:08:01 +08:00
He Junyan 46c1f3875a libs: codecobject: Add number of elements when create codec object.
One slice data may need several slice parameter buffers at one time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/191>
2020-12-14 18:43:52 +08:00
Víctor Manuel Jáquez Leal a16849b4ed vaapi: use gst_clear_object instead of g_clear_object
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/406>
2020-12-12 10:38:17 +01:00
He Junyan 5bee089331 plugins: encode: unlock the stream lock before _flush()
The current encoder will hang when EOS comes. When we call the
gst_vaapi_encoder_encode_and_queue(), we should release the stream
lock, just like what we do in gst_vaapiencode_handle_frame().

The deadlock happens when: The input thread holding the stream lock
is using gst_vaapi_encoder_create_coded_buffer() to acquire a coded
buffer, while the output thread which holding the coded buffer resource
is acquiring the stream lock in _push_frame() to push the data to
down stream element.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/404>
2020-12-11 18:02:34 +00:00
He Junyan 5997093ba1 libs: encoder: H264: Fix one assert in get_pending_reordered().
gst_vaapi_encoder_h264_get_pending_reordered() does not consider the
case for HIERARCHICAL_B mode. The pipeline:

gst-launch-1.0  videotestsrc num-buffers=48 ! vaapih264enc prediction-type=2 \
keyframe-period=32 ! fakesink

get a assert:

ERROR:../gst-libs/gst/vaapi/gstvaapiencoder_h264.c:1996:reflist1_init_hierarchical_b:
assertion failed: (count != 0)

The last few B frames are not fetched in correct order when HIERARCHICAL_B
is enabled.

We also fix a latent bug for normal mode. The g_queue_pop_tail() of B frames
make the last several frames encoded in reverse order. The NAL of last few
frames come in reverse order in the bit stream, though it can still output
the correct image.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/405>
2020-12-09 01:26:26 +08:00
He Junyan dfc730165c libs: encoder: H265: Add screen content coding extensions support.
In scc mode, the I frame can ref to itself and it needs the L0 reference
list enabled. So we should set the I frame to P_SLICE type. We do not need
to change the ref_pic_list0/1 passed to VA driver, just need to enable the
VAEncPictureParameterBufferHEVC->pps_curr_pic_ref_enabled_flag to notify
the driver consider the current frame as reference. For bits conformance,
the NumRpsCurrTempList0 should be incremented by one to include the current
picture as the reference frame. We manually do it when packing the slice header.

Command line like:
gst-launch-1.0  videotestsrc num-buffers=10 ! \
capsfilter caps=video/x-raw,format=NV12, framerate=30/1,width=640,height=360 ! \
vaapih265enc ! capsfilter caps=video/x-h265,profile="{ (string)screen-extended-main }" ! \
filesink location=out.265
Can be used to specify that the encoder should use SCC profiles.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/379>
2020-12-06 23:37:56 +08:00
He Junyan eb9be73299 plugin: encode: vp9: Implement the set_config().
We store the allowed profiles list to encoder in set_config().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan 33ef4ec817 plugin: encode: vp9: Add the profile into output caps.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan 1725e47700 libs: encoder: vp9: no need to ensure_hw_profile.
Once we decide the profile and can get the valid entrypoint for
that profile, hw must already support this profile/entrypoint pair.
No need to check it again in set_context_info().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan a639528217 libs: encoder: vp9: Improve the manner to decide the profile.
We should decide the VP9 encoder's profile based on the chroma and
depth of the input format, then make sure it is included in the
allowed list.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan ff829c660b libs: util: vpx: add get_chroma_format_idc for VP9
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan 973b879f95 libs: encoder: vp9: Add allowed_profiles.
We need the allowed_profiles to store the allowed profiles in down
stream's caps.
Command line like:
  vaapivp9enc ! capsfilter caps=video/x-vp9,profile="{ (string)1, \
    (string)3 }"
We need to store GST_VAAPI_PROFILE_VP9_1 and GST_VAAPI_PROFILE_VP9_3
in this list.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30 16:45:54 +00:00
He Junyan ba58557c14 libs: decoder: H265: Fix a typo in scc reference setting.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/402>
2020-11-30 18:00:38 +08:00
He Junyan d94b864428 libs: decoder: H265: Add MAIN_422_12 profile supporting.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27 14:29:01 +00:00
He Junyan ec68ec518b video-format: Add Y212_LE format.
It can be used as HEVC YUV_4:2:2 12bits stream's decoder output, and
also can be used as the input format for encoding HEVC YUV_4:2:2 12bits
stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27 14:29:01 +00:00
He Junyan 8af9b46748 libs: decoder: H265: Add MAIN_444_12 profile supporting.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27 14:29:01 +00:00
He Junyan 92b30ffa1a video-format: Add Y412_LE format.
It can be used as HEVC YUV_4:4:4 12bits stream's decoder output, and
also can be used as the input format for encoding HEVC YUV_4:4:4 12bits
stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27 14:29:01 +00:00
He Junyan ed9a708397 libs: decoder: h265: fill missing predictor_palette_size field.
The predictor_palette_size of VAPictureParameterBufferHEVCScc is
forgotten and need to be filled when streams have palettes.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/396>
2020-11-15 12:39:22 +00:00
He Junyan d72f818029 libs: utils: h265: Use get_profile_from_sps to get profile.
We now use gst_h265_get_profile_from_sps() to replace the old way
of gst_h265_profile_tier_level_get_profile() to get more precise
profile. The new function consider the unstandard cases and give
a more suitable profile decision.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/395>
2020-10-30 07:24:44 +00:00
Víctor Manuel Jáquez Leal 865a46b193 libs: decoder: vp9: 0xff segment pred probs if no temporal update
According to the spec (6.2.11 Segmentation params syntax)
segmentation_pred_prob[i] ast to be 0xff if not temporal_update.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/400>
2020-10-19 16:45:35 +02:00