mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
av1parse: check the error return when parse_alignment_from_caps()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1837>
This commit is contained in:
parent
81bae87079
commit
9c4adf5a64
1 changed files with 28 additions and 11 deletions
|
@ -739,7 +739,7 @@ static void
|
||||||
gst_av1_parse_negotiate (GstAV1Parse * self, GstCaps * in_caps)
|
gst_av1_parse_negotiate (GstAV1Parse * self, GstCaps * in_caps)
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GstAV1ParseAligment align = GST_AV1_PARSE_ALIGN_NONE;
|
GstAV1ParseAligment align;
|
||||||
|
|
||||||
caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (self));
|
caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (self));
|
||||||
GST_DEBUG_OBJECT (self, "allowed caps: %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (self, "allowed caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
@ -754,7 +754,7 @@ gst_av1_parse_negotiate (GstAV1Parse * self, GstCaps * in_caps)
|
||||||
/* prefer TU as default */
|
/* prefer TU as default */
|
||||||
if (gst_av1_parse_caps_has_alignment (caps,
|
if (gst_av1_parse_caps_has_alignment (caps,
|
||||||
GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT)) {
|
GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT)) {
|
||||||
align = GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT;
|
self->align = GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -766,28 +766,33 @@ gst_av1_parse_negotiate (GstAV1Parse * self, GstCaps * in_caps)
|
||||||
common_caps = gst_caps_intersect (in_caps, caps);
|
common_caps = gst_caps_intersect (in_caps, caps);
|
||||||
align = gst_av1_parse_alignment_from_caps (common_caps);
|
align = gst_av1_parse_alignment_from_caps (common_caps);
|
||||||
gst_clear_caps (&common_caps);
|
gst_clear_caps (&common_caps);
|
||||||
|
|
||||||
|
if (align != GST_AV1_PARSE_ALIGN_NONE
|
||||||
|
&& align != GST_AV1_PARSE_ALIGN_ERROR) {
|
||||||
|
self->align = align;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (align != GST_AV1_PARSE_ALIGN_NONE)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
/* Select first one of downstream support */
|
/* Select first one of downstream support */
|
||||||
if (caps && !gst_caps_is_empty (caps)) {
|
if (caps && !gst_caps_is_empty (caps)) {
|
||||||
/* fixate to avoid ambiguity with lists when parsing */
|
/* fixate to avoid ambiguity with lists when parsing */
|
||||||
caps = gst_caps_fixate (caps);
|
caps = gst_caps_fixate (caps);
|
||||||
align = gst_av1_parse_alignment_from_caps (caps);
|
align = gst_av1_parse_alignment_from_caps (caps);
|
||||||
|
|
||||||
|
if (align != GST_AV1_PARSE_ALIGN_NONE && align != GST_AV1_PARSE_ALIGN_ERROR) {
|
||||||
|
self->align = align;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (align != GST_AV1_PARSE_ALIGN_NONE)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
/* default */
|
/* default */
|
||||||
if (align == GST_AV1_PARSE_ALIGN_NONE)
|
self->align = GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT;
|
||||||
align = GST_AV1_PARSE_ALIGN_TEMPORAL_UNIT;
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
self->align = align;
|
|
||||||
GST_INFO_OBJECT (self, "selected alignment %s",
|
GST_INFO_OBJECT (self, "selected alignment %s",
|
||||||
gst_av1_parse_alignment_to_string (align));
|
gst_av1_parse_alignment_to_string (self->align));
|
||||||
|
|
||||||
gst_clear_caps (&caps);
|
gst_clear_caps (&caps);
|
||||||
}
|
}
|
||||||
|
@ -1924,10 +1929,22 @@ gst_av1_parse_handle_frame (GstBaseParse * parse,
|
||||||
if (upstream_caps) {
|
if (upstream_caps) {
|
||||||
if (!gst_caps_is_empty (upstream_caps)
|
if (!gst_caps_is_empty (upstream_caps)
|
||||||
&& !gst_caps_is_any (upstream_caps)) {
|
&& !gst_caps_is_any (upstream_caps)) {
|
||||||
|
GstAV1ParseAligment align;
|
||||||
|
|
||||||
GST_LOG_OBJECT (self, "upstream caps: %" GST_PTR_FORMAT, upstream_caps);
|
GST_LOG_OBJECT (self, "upstream caps: %" GST_PTR_FORMAT, upstream_caps);
|
||||||
|
|
||||||
/* fixate to avoid ambiguity with lists when parsing */
|
/* fixate to avoid ambiguity with lists when parsing */
|
||||||
upstream_caps = gst_caps_fixate (upstream_caps);
|
upstream_caps = gst_caps_fixate (upstream_caps);
|
||||||
self->in_align = gst_av1_parse_alignment_from_caps (upstream_caps);
|
align = gst_av1_parse_alignment_from_caps (upstream_caps);
|
||||||
|
if (align == GST_AV1_PARSE_ALIGN_ERROR) {
|
||||||
|
GST_ERROR_OBJECT (self, "upstream caps %" GST_PTR_FORMAT
|
||||||
|
" set stream-format and alignment conflict.", upstream_caps);
|
||||||
|
|
||||||
|
gst_caps_unref (upstream_caps);
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
self->in_align = align;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_caps_unref (upstream_caps);
|
gst_caps_unref (upstream_caps);
|
||||||
|
|
Loading…
Reference in a new issue