mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-03 15:06:34 +00:00
qtmux: Allow more fields changes renegotiating h264
And consider interlace-mode=progress as equivalent to the field not being specified. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1062>
This commit is contained in:
parent
32a88fe16f
commit
20f6af7e3c
1 changed files with 35 additions and 23 deletions
|
@ -5704,6 +5704,27 @@ gst_qt_mux_aggregate (GstAggregator * agg, gboolean timeout)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
field_is_in (GQuark field_id, const gchar * fieldname, ...)
|
||||||
|
{
|
||||||
|
va_list varargs;
|
||||||
|
gchar *name = (gchar *) fieldname;
|
||||||
|
|
||||||
|
va_start (varargs, fieldname);
|
||||||
|
while (name) {
|
||||||
|
if (field_id == g_quark_from_static_string (name)) {
|
||||||
|
va_end (varargs);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
name = va_arg (varargs, char *);
|
||||||
|
}
|
||||||
|
va_end (varargs);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
check_field (GQuark field_id, const GValue * value, gpointer user_data)
|
check_field (GQuark field_id, const GValue * value, gpointer user_data)
|
||||||
{
|
{
|
||||||
|
@ -5723,34 +5744,25 @@ check_field (GQuark field_id, const GValue * value, gpointer user_data)
|
||||||
* will contain updated tier / level / profiles, which means we do
|
* will contain updated tier / level / profiles, which means we do
|
||||||
* not need to fail renegotiation when those change.
|
* not need to fail renegotiation when those change.
|
||||||
*/
|
*/
|
||||||
if (g_strcmp0 (g_quark_to_string (field_id), "codec_data") == 0) {
|
if (field_is_in (field_id,
|
||||||
return TRUE;
|
"codec_data", "tier", "level", "profile",
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "tier") == 0) {
|
"chroma-site", "chroma-format", "bit-depth-luma", "colorimetry",
|
||||||
return TRUE;
|
/* TODO: this may require a separate track but gst, vlc, ffmpeg and
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "level") == 0) {
|
* browsers work with this so... */
|
||||||
return TRUE;
|
"width", "height", NULL)) {
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "profile") == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "chroma-format") == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "bit-depth-luma") == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id),
|
|
||||||
"bit-depth-chroma") == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "colorimetry") == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "width") == 0) {
|
|
||||||
/* TODO: this may require a separate track but gst, vlc, ffmpeg and
|
|
||||||
* browsers work with this so... */
|
|
||||||
return TRUE;
|
|
||||||
} else if (g_strcmp0 (g_quark_to_string (field_id), "height") == 0) {
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (other == NULL)
|
if (other == NULL) {
|
||||||
|
if (field_is_in (field_id, "interlace-mode", NULL) &&
|
||||||
|
!g_strcmp0 (g_value_get_string (value), "progressive")) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
return gst_value_compare (value, other) == GST_VALUE_EQUAL;
|
return gst_value_compare (value, other) == GST_VALUE_EQUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue