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
He Junyan
33bc8d75ad
va: h265enc: set the reconf flag when cpb_size updated
...
This feature can be changed dynamically in playing state, so we
need to set reconf flag to trigger reconfig.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00
He Junyan
045449e190
va: h264enc: 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
812e7efb90
va: h264enc: set the reconf flag when cpb_size updated
...
This feature can be changed dynamically in playing state, so we
need to set reconf flag to trigger reconfig.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471 >
2024-04-02 19:01:22 +00:00
He Junyan
78f1299ce4
va: av1enc: Avoid reopen encoder or renegotiate
...
If parameters remain similar enough to avoid either encoder reopening
or downstream renegotiation, avoid it.
This is going to be useful for dynamic parameters setting.
To check if the stream parameters changed, so the internal encoder has
to be closed and opened again, are required two steps:
1. If input caps, format, profile, chroma or rate control mode have changed.
2. If any of the calculated variables and element properties have changed.
Later on, only if the output caps also changed, the pipeline
is renegotiated.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6441 >
2024-04-02 09:06:07 +00:00
He Junyan
075937dc19
va: vp9enc: Avoid reopen encoder or renegotiate
...
If parameters remain similar enough to avoid either encoder reopening
or downstream renegotiation, avoid it.
This is going to be useful for dynamic parameters setting.
To check if the stream parameters changed, so the internal encoder has
to be closed and opened again, are required two steps:
1. If input caps, format, profile, chroma or rate control mode have changed.
2. If any of the calculated variables and element properties have changed.
Later on, only if the output caps also changed, the pipeline
is renegotiated.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6441 >
2024-04-02 09:06:07 +00:00
He Junyan
40629b84ee
va: av1enc: Improve the LAST reference assignment
...
The last frame which has the smallest diff should be consider as
the first choice rather than the golden frame. Especially when only
one reference available, this way can improve the BD rate about 5
percentage.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6379 >
2024-04-02 03:54:52 +00:00
He Junyan
1745a82516
va: av1enc: Fix the reference number setting bug
...
The current way will let the total reference number surplus the
reference number set by the "ref-frames" property.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6379 >
2024-04-02 03:54:52 +00:00
He Junyan
e023546162
va: encoder: Fix the unit of bitrate in debug log message
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483 >
2024-04-01 15:39:13 +00:00
He Junyan
9c3bd3950e
va: vp9enc: Adjust the coded buffer size to avoid failure
...
Some extreme case such as "videotestsrc pattern=1" can generate pure
white noise videoes, for which encoder may generate too big output
for current coded buffer size. We now consider the qindex and bitrate
to avoid that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483 >
2024-04-01 15:39:13 +00:00
He Junyan
2560f4c581
va: vp9enc: Fix the frame size not enough issue for super frame
...
The current code forgets to add the current last frame size into
the total super frame size.
Fixes : #3427
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483 >
2024-04-01 15:39:13 +00:00
He Junyan
a170fa4f46
va: {av1, vp9}enc: Use g_free() to free frames
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6466 >
2024-03-28 16:29:50 +08:00
He Junyan
7ac9d26533
va: vp9enc: Correct the flags for registering properties
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437 >
2024-03-27 10:24:12 +08:00
He Junyan
fa50571d3b
va: av1enc: Correct the flags for registering properties
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437 >
2024-03-27 10:21:08 +08:00
He Junyan
73c1c1fe7f
va: {vp9, av1}enc: Do not use g_slice_new() to create frames
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437 >
2024-03-27 10:18:04 +08:00
He Junyan
71eff7ce97
va: encoder: update the bitrate change correctly
...
We should update and notify the bitrate change at a common place,
no matter whether the bitrate is calculated or not.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
56703704a5
va: av1enc: enable ICQ and QVBR modes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
5c51abfa71
va: vp9enc: enable ICQ and QVBR modes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
d90f718b1a
va: h265enc: enable ICQ and QVBR modes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
f45f52a786
va: h264enc: enable ICQ and QVBR modes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +00:00
He Junyan
85bcea1776
va: encoder: Enable ICQ and QVBR mode in rate control map
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433 >
2024-03-26 18:15:20 +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
3b57825ca6
va: Implement the vavp9enc plugin
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3293 >
2024-03-20 08:53:11 +00:00