Skip to content

Commit 6cf03ea

Browse files
committed
gstreamer: backport patch to support svt-av1 >= 3.0.0
1 parent 75a21f6 commit 6cf03ea

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed
+153
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
diff --git a/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c b/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c
2+
index 2ea84982fad2..65e940d43d98 100644
3+
--- a/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c
4+
+++ b/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c
5+
@@ -75,7 +75,11 @@ typedef struct _GstSvtAv1Enc
6+
guint maximum_buffer_size;
7+
gint intra_period_length;
8+
gint intra_refresh_type;
9+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
10+
+ gint level_of_parallelism;
11+
+#else
12+
gint logical_processors;
13+
+#endif
14+
gint target_socket;
15+
gchar *parameters_string;
16+
17+
@@ -127,9 +131,10 @@ enum
18+
PROP_MAXIMUM_BUFFER_SIZE,
19+
PROP_INTRA_PERIOD_LENGTH,
20+
PROP_INTRA_REFRESH_TYPE,
21+
- PROP_LOGICAL_PROCESSORS,
22+
+ PROP_LOGICAL_PROCESSORS, /// DEPRECATED: should be removed once the minimum version is 3.0.0
23+
PROP_TARGET_SOCKET,
24+
PROP_PARAMETERS_STRING,
25+
+ PROP_LEVEL_OF_PARALLELISM,
26+
};
27+
28+
#define PROP_PRESET_DEFAULT 10
29+
@@ -142,7 +147,8 @@ enum
30+
#define PROP_MAXIMUM_BUFFER_SIZE_DEFAULT 1000
31+
#define PROP_INTRA_PERIOD_LENGTH_DEFAULT -2
32+
#define PROP_INTRA_REFRESH_TYPE_DEFAULT SVT_AV1_KF_REFRESH
33+
-#define PROP_LOGICAL_PROCESSORS_DEFAULT 0
34+
+#define PROP_LEVEL_OF_PARALLELISM_DEFAULT 0
35+
+#define PROP_LOGICAL_PROCESSORS_DEFAULT 0 /// DEPRECATED: should be removed once the minimum version is 3.0.0
36+
#define PROP_TARGET_SOCKET_DEFAULT -1
37+
#define PROP_PARAMETERS_STRING_DEFAULT NULL
38+
39+
@@ -307,15 +313,30 @@ gst_svtav1enc_class_init (GstSvtAv1EncClass * klass)
40+
PROP_INTRA_REFRESH_TYPE_DEFAULT,
41+
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
42+
43+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
44+
+ g_object_class_install_property (gobject_class,
45+
+ PROP_LEVEL_OF_PARALLELISM,
46+
+ g_param_spec_uint ("level-of-parallelism",
47+
+ "Level of Parallelism",
48+
+ "Controls the number of threads and buffers to allocate. 0: auto",
49+
+ 0,
50+
+ 6,
51+
+ PROP_LEVEL_OF_PARALLELISM_DEFAULT,
52+
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
53+
+#endif
54+
+
55+
g_object_class_install_property (gobject_class,
56+
PROP_LOGICAL_PROCESSORS,
57+
- g_param_spec_uint ("logical-processors",
58+
- "Logical Processors",
59+
- "Number of logical CPU cores to be used. 0: auto",
60+
+ g_param_spec_uint ("logical-processors", "Logical Processors",
61+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
62+
+ "Deprecated. Use level-of-parallelism instead. 0: auto",
63+
+#else
64+
+ "Number of logical CPU cores to be used. Deprecated and replaced with level-of-parallelism in SVT-AV1 3.0.0. 0: auto",
65+
+#endif
66+
0,
67+
G_MAXUINT,
68+
PROP_LOGICAL_PROCESSORS_DEFAULT,
69+
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
70+
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED));
71+
72+
g_object_class_install_property (gobject_class,
73+
PROP_TARGET_SOCKET,
74+
@@ -352,7 +373,11 @@ gst_svtav1enc_init (GstSvtAv1Enc * svtav1enc)
75+
svtav1enc->maximum_buffer_size = PROP_MAXIMUM_BUFFER_SIZE_DEFAULT;
76+
svtav1enc->intra_period_length = PROP_INTRA_PERIOD_LENGTH_DEFAULT;
77+
svtav1enc->intra_refresh_type = PROP_INTRA_REFRESH_TYPE_DEFAULT;
78+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
79+
+ svtav1enc->level_of_parallelism = PROP_LEVEL_OF_PARALLELISM_DEFAULT;
80+
+#else
81+
svtav1enc->logical_processors = PROP_LOGICAL_PROCESSORS_DEFAULT;
82+
+#endif
83+
svtav1enc->target_socket = PROP_TARGET_SOCKET_DEFAULT;
84+
svtav1enc->parameters_string = PROP_PARAMETERS_STRING_DEFAULT;
85+
}
86+
@@ -403,8 +428,15 @@ gst_svtav1enc_set_property (GObject * object, guint property_id,
87+
case PROP_INTRA_REFRESH_TYPE:
88+
svtav1enc->intra_refresh_type = g_value_get_enum (value);
89+
break;
90+
+ case PROP_LEVEL_OF_PARALLELISM:
91+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
92+
+ svtav1enc->level_of_parallelism = g_value_get_int (value);
93+
+#endif
94+
+ break;
95+
case PROP_LOGICAL_PROCESSORS:
96+
+#if !SVT_AV1_CHECK_VERSION(3, 0, 0)
97+
svtav1enc->logical_processors = g_value_get_uint (value);
98+
+#endif
99+
break;
100+
case PROP_TARGET_SOCKET:
101+
svtav1enc->target_socket = g_value_get_int (value);
102+
@@ -459,8 +491,13 @@ gst_svtav1enc_get_property (GObject * object, guint property_id, GValue * value,
103+
case PROP_INTRA_REFRESH_TYPE:
104+
g_value_set_enum (value, svtav1enc->intra_refresh_type);
105+
break;
106+
+ case PROP_LEVEL_OF_PARALLELISM:
107+
case PROP_LOGICAL_PROCESSORS:
108+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
109+
+ g_value_set_int (value, svtav1enc->level_of_parallelism);
110+
+#else
111+
g_value_set_uint (value, svtav1enc->logical_processors);
112+
+#endif
113+
break;
114+
case PROP_TARGET_SOCKET:
115+
g_value_set_int (value, svtav1enc->target_socket);
116+
@@ -556,7 +593,11 @@ gst_svtav1enc_configure_svt (GstSvtAv1Enc * svtav1enc)
117+
}
118+
svtav1enc->svt_config->intra_period_length = svtav1enc->intra_period_length;
119+
svtav1enc->svt_config->intra_refresh_type = svtav1enc->intra_refresh_type;
120+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
121+
+ svtav1enc->svt_config->level_of_parallelism = svtav1enc->level_of_parallelism;
122+
+#else
123+
svtav1enc->svt_config->logical_processors = svtav1enc->logical_processors;
124+
+#endif
125+
svtav1enc->svt_config->target_socket = svtav1enc->target_socket;
126+
gst_svtav1enc_parse_parameters_string (svtav1enc);
127+
128+
@@ -725,11 +766,9 @@ gst_svtav1enc_configure_svt (GstSvtAv1Enc * svtav1enc)
129+
master_display_info.max_display_mastering_luminance;
130+
svtav1enc->svt_config->mastering_display.min_luma =
131+
master_display_info.min_display_mastering_luminance;
132+
- svtav1enc->svt_config->high_dynamic_range_input = TRUE;
133+
} else {
134+
memset (&svtav1enc->svt_config->mastering_display,
135+
0, sizeof (svtav1enc->svt_config->mastering_display));
136+
- svtav1enc->svt_config->high_dynamic_range_input = FALSE;
137+
}
138+
139+
GstVideoContentLightLevel content_light_level;
140+
@@ -938,8 +977,13 @@ gst_svtav1enc_open (GstVideoEncoder * encoder)
141+
142+
GST_DEBUG_OBJECT (svtav1enc, "open");
143+
144+
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
145+
+ EbErrorType res = svt_av1_enc_init_handle (&svtav1enc->svt_encoder,
146+
+ svtav1enc->svt_config);
147+
+#else
148+
EbErrorType res = svt_av1_enc_init_handle (&svtav1enc->svt_encoder, NULL,
149+
svtav1enc->svt_config);
150+
+#endif
151+
if (res != EB_ErrorNone) {
152+
GST_ELEMENT_ERROR (svtav1enc,
153+
LIBRARY,

0 commit comments

Comments
 (0)