mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
video-converter: Set up matrix tables only once.
When configuring a multi-thread converter, only allocate the shared colour conversion matrices once for the first thread, to avoid allocating multiple times and leaking memory. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1216>
This commit is contained in:
parent
ef324fa068
commit
8c04f4bdae
1 changed files with 9 additions and 5 deletions
|
@ -1577,7 +1577,8 @@ chain_convert_to_RGB (GstVideoConverter * convert, GstLineCache * prev,
|
|||
if (do_gamma) {
|
||||
gint scale;
|
||||
|
||||
if (!convert->unpack_rgb) {
|
||||
/* Set up conversion matrices if needed, but only for the first thread */
|
||||
if (idx == 0 && !convert->unpack_rgb) {
|
||||
color_matrix_set_identity (&convert->to_RGB_matrix);
|
||||
compute_matrix_to_RGB (convert, &convert->to_RGB_matrix);
|
||||
|
||||
|
@ -1831,8 +1832,10 @@ chain_convert (GstVideoConverter * convert, GstLineCache * prev, gint idx)
|
|||
convert->current_bits = MAX (convert->in_bits, convert->out_bits);
|
||||
|
||||
do_conversion = TRUE;
|
||||
if (!same_matrix || !same_primaries)
|
||||
prepare_matrix (convert, &convert->convert_matrix);
|
||||
if (!same_matrix || !same_primaries) {
|
||||
if (idx == 0)
|
||||
prepare_matrix (convert, &convert->convert_matrix);
|
||||
}
|
||||
if (convert->in_bits == convert->out_bits)
|
||||
pass_alloc = TRUE;
|
||||
} else
|
||||
|
@ -1846,7 +1849,8 @@ chain_convert (GstVideoConverter * convert, GstLineCache * prev, gint idx)
|
|||
if (same_primaries) {
|
||||
do_conversion = FALSE;
|
||||
} else {
|
||||
prepare_matrix (convert, &convert->convert_matrix);
|
||||
if (idx == 0)
|
||||
prepare_matrix (convert, &convert->convert_matrix);
|
||||
convert->in_bits = convert->out_bits = 16;
|
||||
pass_alloc = TRUE;
|
||||
do_conversion = TRUE;
|
||||
|
@ -1968,7 +1972,7 @@ chain_convert_to_YUV (GstVideoConverter * convert, GstLineCache * prev,
|
|||
convert->current_bits = convert->pack_bits;
|
||||
convert->current_pstride = convert->current_bits >> 1;
|
||||
|
||||
if (!convert->pack_rgb) {
|
||||
if (idx == 0 && !convert->pack_rgb) {
|
||||
color_matrix_set_identity (&convert->to_YUV_matrix);
|
||||
compute_matrix_to_YUV (convert, &convert->to_YUV_matrix, FALSE);
|
||||
|
||||
|
|
Loading…
Reference in a new issue