summaryrefslogtreecommitdiff
path: root/gst-libs
AgeCommit message (Collapse)AuthorFilesLines
2021-08-25Display: Add a property to export the VA display handle.He Junyan1-0/+15
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-07-01libs: decoder: av1: Clean the film_grain_info field.He Junyan1-2/+3
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-06-23libs: encoder: mpeg2: Add highP level for 1080@50p/60p.He Junyan2-2/+8
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-10Decoder: H264: Add the support for frame packing arrangement SEI message.He Junyan1-5/+161
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-02Use g_memdup2() where available and add fallback for older GLib versionsTim-Philipp Müller1-1/+1
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-04-23libs: encoder: VP9: fix > 4k encode fail issueZhang yuankun1-0/+11
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-08libs: display: drm: don't fallback to default device if explicitly specified ↵Haihao Xiang1-6/+6
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-03-22decoder: H265: Enable cu_qp_delta_enabled_flag when ROIHe Junyan3-1/+7
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-19gst: don't use volatile to mean atomicMatthew Waters11-18/+18
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-02-27gstvaapiencoder_h264: add ENCODER_EXPOSURE on aud propertiePaul Goulpié1-1/+2
forgot during the following mainline commit: https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/commit/bc2f8fd19e924aa0e193708307326acd037691ce# Signed-off-by: Paul Goulpié <paul.goulpie@ubicast.eu>
2021-01-29libs: display: drm: support gst.vaapi.app.Display context for drm backendHaihao Xiang2-0/+37
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-29libs: display: drm: allow user specify a drm device via an env variableHaihao Xiang1-5/+17
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-28libs: display: drm: fix set_device_path_from_fdHaihao Xiang1-56/+23
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-20glx: Iterate over FBConfig and select 8 bit color sizeRafał Dzięgiel1-2/+38
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-11vaapipostproc: fix code style.Ung, Teng En1-2/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-11vaapipostproc: Remove YUV to/from RGB color primary quirk since iHD driver ↵Ung, Teng En3-25/+0
has fixed in https://github.com/intel/media-driver/commit/a39fe9bc051a8c3efa8f35122a1585981ec7f816. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-11vaapipostproc: Added gstreamer BT2020 color standard support.Ung, Teng En1-1/+3
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/407>
2021-01-09decoder: AV1: Fix a static analysis problem of update_state().He Junyan1-7/+2
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-06libs: decoder: Add decode_with_surface_id for AV1 film_grain.He Junyan3-5/+23
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-06libs: decoder: AV1: Add the av1 decoder support.He Junyan6-0/+1362
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/191>
2020-12-14libs: codecobject: Add number of elements when create codec object.He Junyan4-6/+50
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-09libs: encoder: H264: Fix one assert in get_pending_reordered().He Junyan1-21/+36
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-06libs: encoder: H265: Add screen content coding extensions support.He Junyan2-10/+274
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-11-30libs: encoder: vp9: no need to ensure_hw_profile.He Junyan1-36/+2
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-30libs: encoder: vp9: Improve the manner to decide the profile.He Junyan1-8/+56
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-30libs: util: vpx: add get_chroma_format_idc for VP9He Junyan2-0/+34
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/380>
2020-11-30libs: encoder: vp9: Add allowed_profiles.He Junyan2-0/+38
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-30libs: decoder: H265: Fix a typo in scc reference setting.He Junyan1-1/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/402>
2020-11-27libs: decoder: H265: Add MAIN_422_12 profile supporting.He Junyan5-1/+15
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27video-format: Add Y212_LE format.He Junyan3-1/+3
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-27libs: decoder: H265: Add MAIN_444_12 profile supporting.He Junyan5-1/+15
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
2020-11-27video-format: Add Y412_LE format.He Junyan3-1/+5
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-15libs: decoder: h265: fill missing predictor_palette_size field.He Junyan1-0/+4
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-10-30libs: utils: h265: Use get_profile_from_sps to get profile.He Junyan1-1/+1
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-19libs: decoder: vp9: 0xff segment pred probs if no temporal updateVíctor Manuel Jáquez Leal1-2/+8
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-19libs: decoder: vp9: avoid reference rewritingVíctor Manuel Jáquez Leal1-5/+2
The removed code set all the reference frames to the current frame it is a key one, but later, all the reference frames were rewritten with the decoded picture buffers or VA_INVALID_SURFACE if they were not available. Basically, all this time the first reference frame assignment has been ignored, and it's not described by the spec, and this patch removes that code. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/400>
2020-09-07Update for gst_video_transfer_function_*() function renamingSebastian Dröge1-1/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/391>
2020-08-22Revert "libs: decoder: h264, h265: in context at least 16 reference surfaces"Víctor Manuel Jáquez Leal2-2/+2
This reverts commit b387081a4d77d3da202da72686ab40fb9c83ee1e as discussed in https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/commit/b387081a4d77d3da202da72686ab40fb9c83ee1e
2020-08-18libs: surface: egl: guard memory typeVíctor Manuel Jáquez Leal1-0/+2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/384>
2020-08-14libs: egl: surface: export EGLImage as DMABuf if GEM not supportedVíctor Manuel Jáquez Leal4-41/+145
This code path is used when frames are rendered as textures through GstVideoGLTextureUploadMeta with EGL, mainly under Wayland. Originally the EGLImage was exported as GEM, which was handled by Intel drivers, but Gallium ones cannot create VA surfaces from GEM buffers, only DMABuf. This patch checks the memory types supported by VA driver to choose the render the EGLImages from GEM or DMABuf, because GEM is still better where supported. DMABuf is well handled either by intel-vaapi-driver and gallium. Fixes: #137 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/122>
2020-08-14libs: filter: gst_vaapi_filter_get_memory_types()Víctor Manuel Jáquez Leal2-0/+21
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/122>
2020-08-08libs: util: h265: use common parser API to get vaapi profiles.He Junyan1-171/+50
We can reuse H265 parser's API to recognize the correct profile and then just need to convert them to VAAPI profiles. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/356>
2020-08-07build: update for gl pkg-config file splitVíctor Manuel Jáquez Leal1-3/+4
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/378>
2020-08-06h264dec: mark remaining frames as unreference before ↵Xu Guangxin1-2/+2
exec_picture_refs_modification 8.2.4.2 required this. Some clips will crash if we do not fill the reference list like this. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/376>
2020-08-06libs: encoder: H265: Enable Main 12 profile support.He Junyan3-4/+31
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/375>
2020-08-06video format: Fix P012_LE's chrome type typo.He Junyan1-1/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/375>
2020-08-04gstvaapiminiobject.c: fix clang 10 warningsJordan Petridis1-1/+1
the typesystem checks in g_atomic_pointer_compare_and_exchange seem to trigger some false positives with clang 10 similar to gstreamer!584 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/377>
2020-07-31libs: window: wayland: destroy all wayland buffers during finalizeMichael Olbrich1-18/+30
Some buffers and the associated FrameState state may still be pending at that point. If the wayland connection is shared, then messages for the buffer may still arrive. However, the associated event queue is already deleted. So the result is a crash. With a private connection the associated memory is leaked instead. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/342>
2020-07-31libs: wayland: update the opaque region in set_render_rectMichael Olbrich1-15/+31
gst_vaapi_window_wayland_set_render_rect() may be called from an arbitrary thread. That thread may be responsible for making the window visible. At that point another thread will block in gst_vaapi_window_wayland_sync() because the frame callback will not be called until the window is visible. If that happens, then acquiring the display lock in gst_vaapi_window_wayland_set_render_rect() would result in a deadlock. Cache the size of the opaque rectangle separately and create the opaque region right before applying it to the surface. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/342>
2020-07-31libs: window: implements gst_vaapi_window_set_render_rectangleHyunjun Ko4-0/+43
Implements new vmethod gst_vaapi_window_set_render_rectangle, which is doing set the information of the rendered rectangle set by user. This is necessary on wayland at least to get exact information of external surface. And vaapisink calls this when gst_video_overlay_set_render_rectangle is called. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/342>