Víctor Manuel Jáquez Leal
426616cca7
vavpp: simplify gst_va_vpp_transform_caps()
...
The code is simplified by using GQuarks for looking for caps features, and
removing inner loops.
Also, it's used the pad template caps to compare with the incoming caps because
is cheaper at the beginning of negotiation, where the pad template caps is used.
And, since the ANY caps where removed, there's no need to check for an initial
intersection.
Finally, the completion of caps features is done through a loop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6698 >
2024-07-04 08:54:16 +00:00
He Junyan
f235e0308d
vadeinterlace: Do not append ANY caps into pad template
...
Just like the vapostproc, we delete the ANY caps in pad template to
avoid unexpected negotiation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6698 >
2024-07-04 08:54:15 +00:00
He Junyan
38a4224c8c
vapostproc: Do not append ANY caps into pad template
...
The ANY caps in pad template caps seems to mess up the DMA negotiation.
The command of:
GST_GL_API=opengl gst-launch-1.0 -vf videotestsrc ! video/x-raw,format=NV12 !
vapostproc ! "video/x-raw(memory:DMABuf)" ! glimagesink
fails to negotiate, but in fact, the vapostproc can convert the input NV12
formant into the RGBA format to render.
The ANY may help the passthough mode, but we should make the negotiate correct
first.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6698 >
2024-07-04 08:54:15 +00:00
Lim, Siew Hoon
e82eb628b1
vacompositor: Initialize the allocation related variables in decide_allocation()
...
Prevent garbage value has been pass thru and causing
pipeline fail to run later on.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7097 >
2024-07-04 06:48:46 +00:00
Lim, Siew Hoon
f498ba25da
vabasedec: Initialize the allocation related variables in decide_allocation()
...
Prevent garbage value has been pass thru and causing
pipeline fail to run.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7097 >
2024-07-04 06:48:45 +00:00
Lim, Siew Hoon
c270c5643d
vabasetranform: Initialize the allocation related variables in decide_allocation()
...
Prevent garbage value has been pass thru and causing
pipeline fail to run.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7097 >
2024-07-04 06:48:45 +00:00
He Junyan
e9801cb0a5
vah265enc: Set the trellis only when HW supports it
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6663 >
2024-07-04 05:59:07 +00:00
He Junyan
2049c7e050
vah264enc: Init missing fields in reset_state()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6663 >
2024-07-04 05:59:06 +00:00
He Junyan
5706e3566c
vah264enc: Set the trellis only when HW supports it
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6663 >
2024-07-04 05:59:06 +00:00
He Junyan
5b27aff33b
va: baseenc: Set the trellis parameter anyway
...
The driver may enable trellis by default. So we should also set the
trellis info to driver even when the trellis option is turned off.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6663 >
2024-07-04 05:59:06 +00:00
He Junyan
77f779e86a
vaav1enc: Move repeat header data to a dedicated buffer
...
When enable parallel encoding, it is possible that the unshown frame
is not output but it is already be marked as a repeated frame header.
So we need to use a dedicated buffer to hold the repeat frame header,
don't mix it with the orignal frame data.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6867 >
2024-06-27 12:48:37 +00:00
He Junyan
a3a3264f02
vah26{4,5}enc: No need to assert i>=0 in frame_setup_from_gop()
...
The value is an uint here and never be negative.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6868 >
2024-05-17 14:42:20 +08:00
Víctor Manuel Jáquez Leal
0233a2a7cf
vah26xenc: factorize the encoder frame setup
...
A simple removal of duplicated code.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6854 >
2024-05-17 02:41:18 +00:00
He Junyan
7a03813ee9
vabaseenc: Set the correct min_buffers for propose_allocation()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:40 +02:00
He Junyan
941d0c417f
va: av1enc: Set preferred_output_delay value to increase performance
...
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:40 +02:00
He Junyan
ba2b053444
va: vp9enc: Set preferred_output_delay value to increase performance
...
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:40 +02:00
He Junyan
47db542689
va: h265enc: Set preferred_output_delay value to increase performance
...
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:40 +02:00
He Junyan
fe25ed22e1
va: h264enc: Set preferred_output_delay value to increase performance
...
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:40 +02:00
He Junyan
a73474827b
va: baseenc: Add is_live field to check the live stream
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:39 +02:00
He Junyan
556a254e59
va: baseenc: Add a preferred_output_delay field for GPU parallel processing
...
The encoder can specify the a preferred_output_delay value to get better throughput
performance. The higher delay may get better HW performance, but it may increases
the encoder and pipeline latency.
When the output queue length is smaller than preferred_output_delay, the encoder
will not block to waiting for the encoding output. It will continue to prepare and
send more commands to GPU, which may improve the encoder throughput performance.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:39 +02:00
He Junyan
0694c4a1c3
va: encoder: Do not continue when push_buffer gets error
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:39 +02:00
He Junyan
933a155b1a
va: encoder: Use GstVaEncFrame as the base object for all Enc Frame
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359 >
2024-05-16 14:54:39 +02:00
He Junyan
f858179d01
vah265enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame
...
The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME
bit set should be the sync point. So we should let it be an IDR frame to begin
a new GOP, rather than just promote it to an I frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6619 >
2024-05-15 09:55:49 +00:00
He Junyan
ea015bea61
vah264enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame
...
The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME
bit set should be the sync point. So we should let it be an IDR frame to begin
a new GOP, rather than just promote it to an I frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6619 >
2024-05-15 09:55:49 +00:00
He Junyan
fc3f5a2f09
vaenc: Allow to set the max-qp and min-qp for QVBR and ICQ modes
...
In fact, these setting can work well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6841 >
2024-05-14 11:16:14 +08:00
He Junyan
7211e3fffd
vah26{4,5}enc: Set the qp_p and qp_b to qp_i value in ICQ and QVBR
...
Set the P and B frame qp to I frame value to avoid generating delta
QP between different frame types. For ICQ and QVBR modes, we can
only set the qpi value, so the qpp and qpb values should be set to
the same value as the qpi.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6841 >
2024-05-14 10:31:05 +08:00
He Junyan
07dceabdfc
vavp9enc: Do not use base class video info to calculate coded size
...
We should use our in_info which is an adjusted value to calculate
that coded size.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6826 >
2024-05-13 13:59:51 +00:00
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
ae989e8cee
vah265enc: Fix a memory leak when destroying the object
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6791 >
2024-05-03 15:58:48 +00:00
He Junyan
f340429681
vah265enc: 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
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
He Junyan
ae68d9dda5
vah265enc: Set the correct buffer flag for output
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703 >
2024-04-29 13:25:09 +00:00
He Junyan
d06b12c6f1
vah264enc: Set the correct buffer flag for output
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703 >
2024-04-29 13:25:09 +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
c013b03a19
vah265enc: Do not touch the PTS of output frame
...
1. The PTS of all frames should not be changed.
2. Just update the DTS based on the PTS. For the frame which is not
reordered, the DTS is equal to PTS. For frame which is reordered,
the DTS is equal to previous DTS. For example:
Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3]
Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2]
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703 >
2024-04-29 13:25:08 +00:00
He Junyan
4d1a48c9e9
vah264enc: Do not touch the PTS of output frame
...
1. The PTS of all frames should not be changed.
2. Just update the DTS based on the PTS. For the frame which is not
reordered, the DTS is equal to PTS. For frame which is reordered,
the DTS is equal to previous DTS. For example:
Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3]
Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2]
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703 >
2024-04-29 13:25:08 +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
8d0a1a0c56
vavp9enc: Set the correct buffer flag for output
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688 >
2024-04-28 07:49:02 +00:00
He Junyan
9bd73987f6
vaav1enc: Set the correct buffer flag for output
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688 >
2024-04-28 07:49:02 +00:00
He Junyan
b8871c87a2
vaav1enc: Do not change the PTS/DTS of output frames
...
The AV1 encoder does not reorder the frames, so there is no need
to change the timestamp related meta data of output frames, just
inheriting it from the input frames.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688 >
2024-04-28 07:49:02 +00:00
He Junyan
f68bc7f49a
vaav1enc: Change the alignment of output to "tu"
...
The current output alignment is "frame", which may cause some issues
for PTS and DTS calculation. We now change the alignment to "tu",
and this is also the alignment mode for av1enc and svtav1enc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688 >
2024-04-28 07:49:02 +00:00
Sebastian Dröge
d42ee6e48c
vavp9enc: Preserve PTS and other frame metadata
...
See also https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4150
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6680 >
2024-04-19 07:18:35 +00:00
Víctor Manuel Jáquez Leal
4b5e930bc8
va: encoders: don't assert at target percentage when QVBR
...
Instead of asserting, just get the max value between the current value and 10,
which is the minimum required by QVBR.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6465 >
2024-04-03 13:51:31 +02:00
Víctor Manuel Jáquez Leal
0d48ede4a9
va: sink reference at instantiation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398 >
2024-04-03 08:48:25 +00:00
He Junyan
cbdc22d697
va: av1enc: Change the set_property to make it atomic
...
The inside encoder may be set in other threads, so we should make
its accessing atomic.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00
He Junyan
db74da3f6f
va: vp9enc: Change the set_property to make it atomic
...
The inside encoder may be set in other threads, so we should make
its accessing atomic.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00
Víctor Manuel Jáquez Leal
8bede7937c
va{vp9,av1}enc: reconfigure when properties change
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00
He Junyan
d179fca13f
va: h265enc: Change the set_property to make it atomic
...
The inside encoder may be set in other threads, so we should make
its accessing atomic.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00