Sebastian Dröge
0ef396359c
gst: Move GstQueueArray as GstVecDeque to core
...
And change lengths and indices from guint to gsize for a more correct type.
Also deprecate GstQueueArray and implement it in terms of GstVecDeque.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6779 >
2024-05-06 18:25:42 +00:00
He Junyan
20ebf6bbb9
vah264enc: Use a FIFO queue to generate DTS
...
The base parse will infer the DTS by itself, so we need to make DTS
offset before PTS in order to avoid DTS bigger than PTS. We now use
a FIFO queue to store all PTS and assign it to DTS by an offset.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6791 >
2024-05-03 15:58:48 +00:00
He Junyan
0c81d1a1e7
vabaseenc: delete the useless frame counter fields
...
They are used to calculate the PTS and DTS before, no usage now.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6773 >
2024-04-30 07:51:13 +00:00
He Junyan
477fea97b4
vabaseenc: Do not set the min_pts
...
Because all the va encoders improved their PTS/DTS algorithm, now
it is impossible to generate minus DTS. So no underflow will happen
and we do not need to set a 1000 hour offset now.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6773 >
2024-04-30 07:51:13 +00:00
Seungha Yang
b66834787c
vabaseenc: Fix frame leak on error path
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703 >
2024-04-29 13:25:09 +00:00
He Junyan
ae5361b7fa
vabaseenc: No need to call _finish_subframe()
...
After vaav1enc is aligned to TU, there is no case that generates
multi output for one input.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688 >
2024-04-28 07:49:02 +00:00
He Junyan
3f1ce4460a
va: encoder: Set the quality_factor parameter in rate control
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
637d253e9f
va: baseenc: Fix the wrong parameter order to call va_map_buffer()
...
The current gst_va_base_enc_copy_output_data() uses wrong parameter
order to call va_map_buffer().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6020 >
2024-01-30 15:50:23 +00:00
He Junyan
f4779f1fab
va: baseenc: Extend the create_output_buffer() to accept prefix data
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3015 >
2024-01-30 08:24:25 +00:00
He Junyan
726cc895d8
va: encoder: Add copy_output_data() helper function
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3015 >
2024-01-30 08:24:25 +00:00
He Junyan
39144f612e
va: encoder: extend prepare_output() virtual function
...
The output of VP9 and AV1 encoder is a little different from the H264
and H265 encoder, it may contain repeat frames and so the output frame
number may be more than the input. We need to call finish_subframe()
when some frame will be repeated later. So we need to extend the
current prepare_output() virtual function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3015 >
2024-01-30 08:24:25 +00:00
Víctor Manuel Jáquez Leal
4a22cc8fb3
va: no need to provide a buffer size for VA pool
...
VA drivers allocate surfaces given their properties, so there's no need to
provide a buffer size to the VA pool.
Though, the buffer size is provided by the driver, or the canonical size
is used for single planed surfaces.
This patch removes the need to provide a size for the function
gst_va_pool_new_with_config() and adds a helper method to retrieve the surface
size, gst_va_pool_get_buffer_size(). Also change the callers accordingly.
Changes for custom VA pool creation will be addressed in the following commits.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5805 >
2023-12-14 12:50:32 +00:00
Víctor Manuel Jáquez Leal
9f5b2c4e25
va: use GstVideoInfoDmaDrm when importing buffers
...
In the case of encoders and filters when importing a DMABuf, use
GstVideoInfoDmaDrm to get the drm fourcc and modifier.
In both cases, instead of keeping the original GstVideoInfoDmaDrm from caps, the
GstVideoInfo part of the structure is converted as canonical one, given the
format from the fourcc. It's kept in the way to handle V4L2 linear DMABufs and
to avoid too many changes in the current code.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5264 >
2023-11-09 17:36:06 +00:00
David Rosca
8aac08506a
va: Use vaMapBuffer2
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5467 >
2023-10-23 19:40:16 +00:00
He Junyan
6b23f2c4be
va: baseenc: use in_info rather than input_state->info
...
The in_info is correct video info which already considers the
DMA kind caps case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5289 >
2023-09-06 15:40:03 +08:00
Víctor Manuel Jáquez Leal
52971faf14
va: refactor caps convertion to va caps
...
To avoid code duplication in code related with buffer importation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5257 >
2023-08-31 12:41:48 +00:00
Víctor Manuel Jáquez Leal
89b0a6fa23
va: refactor buffer import
...
This patch removes the code duplication of input buffer importation, in all the
va elements that import video frames. It defines a synthetic object whose
members are required to create a new input buffer and do the importation of the
upstream buffer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5257 >
2023-08-31 12:41:48 +00:00
He Junyan
e81a40cb72
va: baseenc: Add the DMA buffer input support
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5189 >
2023-08-29 15:31:09 +00:00
He Junyan
5e6c91579f
va: encoder: Add in_info field to base encoder
...
When we consider the DMA kind caps as input, the input_state->info
only contains the video format of GST_VIDEO_FORMAT_DMA_DRM, which
is not enough for va plugins. The new info in base encoder contains
the correct video info after the DMA caps parsing.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5189 >
2023-08-29 15:31:09 +00:00
He Junyan
1b43baf3c8
va: baseenc: Use va_get_surface_usage_hint() to get the usage hint
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5210 >
2023-08-24 11:03:59 +00:00
Seungha Yang
3bbfab1cf3
va: Return default device from device-path property getter
...
Otherwise application would not be able to know matching element
for wanted device. Typical use case of the read-only device path
(DXGI Adapter LUID, CUDA device index, etc) property is that
application enumerates physical devices and then selects matching
GStreamer element (in null state) via device path property.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4220 >
2023-03-19 17:50:43 +00:00
Seungha Yang
7624871b00
va: Update "device-path" property description for Windows
...
DRM does not make sense on Windows
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4114 >
2023-03-10 13:57:47 +00:00
Seungha Yang
c1946c0209
va: Add support for Win32 backend
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4114 >
2023-03-10 13:57:47 +00:00
Mengkejiergeli Ba
735b6af5b9
va: Fix some code defects
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3919 >
2023-02-20 16:02:38 +00:00
He Junyan
765adf5325
va: Fix the caps memory leak by gst_va_pool_new_with_config().
...
The gst_va_pool_new_with_config() will ref the caps, and so we need
to unref after that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3503 >
2022-12-01 17:31:16 +00:00
Víctor Manuel Jáquez Leal
b2bfb066ec
vabaseenc: Reduce logging noise if finish_frame fails.
...
Fixes : #1579
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3423 >
2022-11-17 05:25:18 +00:00
Víctor Manuel Jáquez Leal
4994487b8f
vabaseenc: Log out the flow error name.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2466 >
2022-11-09 06:15:23 +01:00
Víctor Manuel Jáquez Leal
bd3c50e50f
vabaseenc: Enable encoder reconfiguration.
...
Adds an internal function reset() which drains the internal queues and
calls the reconfig() vmethod.
This reset() method is called inconditionally at set_format() and in
handle_frame() if the instance's reconf flag is enabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2466 >
2022-11-09 06:13:26 +01:00
Victor Manuel Jaquez Leal
c60504bd9e
va: Document device-path property.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3361 >
2022-11-08 21:49:05 +00:00
He Junyan
1881d1826a
va: baseenc: Do not import the VA surface from other display.
...
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1167
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3322 >
2022-11-05 13:39:34 +08:00
Víctor Manuel Jáquez Leal
79c47fbdb8
vabaseenc: Scope error bail out.
...
Though this is not enforced by the GStreamer code style, it's clearer
to add a nested scope for error handling using label/goto.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3063 >
2022-10-26 08:19:32 +00:00
Víctor Manuel Jáquez Leal
d608872ba3
vabaseenc: Use class entrypoint.
...
Add a macro to access to class entrypoint and use it instead of move
it to a variable.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3063 >
2022-10-26 08:19:32 +00:00
Víctor Manuel Jáquez Leal
f9371ccc38
vabaseenc: Move out encoder validation from assertion.
...
Assertion can be disabled at compilation time. Still it's important to
validate it the encoder object was opened by the subclass. This patch
removes the assertion and returns if the encoder is open.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3051 >
2022-09-20 18:59:18 +00:00
Víctor Manuel Jáquez Leal
f4260ecdc5
va: baseenc: Fix gobject style for chained method.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3035 >
2022-09-16 19:10:12 +00:00
Víctor Manuel Jáquez Leal
67ce55f33e
vah264enc: Lock properties read/write.
...
This is a first step for changing properties at runtime.
And add missing bitrate upate and notification.
Fixes : #1258
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2836 >
2022-08-04 14:26:00 +00:00
He Junyan
8e2bbfed13
va: baseenc: Do not use codec frame structure again after finish_frame().
...
In _push_out_one_buffer(), we use codec frame structure again for error handling
after we already call finish_frame(), which is a latent segment fault.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2739 >
2022-07-11 10:12:29 +00:00
He Junyan
27c33f0161
va: baseenc: Do not clear the codec frame twice when error.
...
The current manner will clear the input codec frame twice if we fail
to push the output data, which will trigger an assert.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2739 >
2022-07-11 10:12:29 +00:00
Víctor Manuel Jáquez Leal
261714e25d
vah264enc: Support default and none rate control.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2522 >
2022-06-07 12:02:21 +00:00
Víctor Manuel Jáquez Leal
be948816d3
va: Register base classes as abstract.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2521 >
2022-05-29 16:03:46 +00:00
He Junyan
2042c2d4f0
va: H264enc: Add encoder for VAEntrypointEncSliceLP.
...
We name vah264lpenc to support H264's VAEntrypointEncSliceLP encoder.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2472 >
2022-05-25 20:40:48 +00:00
He Junyan
d47416d3a2
va: encoder: Do not reset the frame count when reconfig().
...
We should not reset the input/output_frame_count when some configure
changes. For example, the if resolution changes, the current way just
resets the frame count and make the PTS of the output buffer restart
from the original PTS of the first frame. That causes a lot of QOS
event and drop all the new frames.
We should only reset them when encoder start().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2489 >
2022-05-25 18:56:34 +00:00
He Junyan
994f2c56e2
va: encoder: change reset_state() to a virtual function of base class.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2489 >
2022-05-25 18:56:34 +00:00
He Junyan
fc75e38496
va: baseenc: No need to check the frame pointer in handle_frame().
...
No need to check the NULL pointer of "frame" in error handling, it
is assured non-NULL by base class and we already use it everywhere
in this function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2471 >
2022-05-23 15:03:03 +08:00
He Junyan
de5952bc83
va: baseenc: include the "vacompat.h" for old version glib.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2463 >
2022-05-22 15:03:54 +08:00
He Junyan
21a9ba7e7e
va: Add the GstVaBaseEnc common object for all va encoders.
...
Just like the GstVaBaseDec and GstVaBaseTransform, this base encoder
will handle all common logic for all va encoders.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2330 >
2022-05-20 22:58:58 +02:00