mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 04:56:14 +00:00
interlace: Only half the framerate for 1:1 field pattern
Keep the framerate for 2:2 field pattern, and completely remove it from the caps for all others. Otherwise, negotiation will fail if caps on both sides of the element specify a framerate. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1349>
This commit is contained in:
parent
0c63c8d1f5
commit
ba500b816a
1 changed files with 25 additions and 5 deletions
|
@ -746,9 +746,19 @@ gst_interlace_getcaps (GstPad * pad, GstInterlace * interlace, GstCaps * filter)
|
||||||
|
|
||||||
if (filter != NULL) {
|
if (filter != NULL) {
|
||||||
clean_filter = gst_caps_copy (filter);
|
clean_filter = gst_caps_copy (filter);
|
||||||
clean_filter =
|
if (interlace->pattern == GST_INTERLACE_PATTERN_1_1) {
|
||||||
gst_interlace_caps_double_framerate (clean_filter,
|
clean_filter =
|
||||||
(pad == interlace->sinkpad));
|
gst_interlace_caps_double_framerate (clean_filter,
|
||||||
|
(pad == interlace->sinkpad));
|
||||||
|
} else if (interlace->pattern != GST_INTERLACE_PATTERN_2_2) {
|
||||||
|
GST_FIXME_OBJECT (interlace,
|
||||||
|
"Add calculations for telecine framerate conversions");
|
||||||
|
for (i = 0; i < gst_caps_get_size (clean_filter); ++i) {
|
||||||
|
GstStructure *s = gst_caps_get_structure (clean_filter, i);
|
||||||
|
|
||||||
|
gst_structure_remove_field (s, "framerate");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pad == interlace->sinkpad) {
|
if (pad == interlace->sinkpad) {
|
||||||
/* @filter may contain the different formats supported upstream.
|
/* @filter may contain the different formats supported upstream.
|
||||||
|
@ -818,8 +828,18 @@ gst_interlace_getcaps (GstPad * pad, GstInterlace * interlace, GstCaps * filter)
|
||||||
icaps = gst_caps_merge (icaps, alternate);
|
icaps = gst_caps_merge (icaps, alternate);
|
||||||
}
|
}
|
||||||
|
|
||||||
icaps =
|
if (interlace->pattern == GST_INTERLACE_PATTERN_1_1) {
|
||||||
gst_interlace_caps_double_framerate (icaps, (pad == interlace->srcpad));
|
icaps =
|
||||||
|
gst_interlace_caps_double_framerate (icaps, (pad == interlace->srcpad));
|
||||||
|
} else if (interlace->pattern != GST_INTERLACE_PATTERN_2_2) {
|
||||||
|
GST_FIXME_OBJECT (interlace,
|
||||||
|
"Add calculations for telecine framerate conversions");
|
||||||
|
for (i = 0; i < gst_caps_get_size (icaps); ++i) {
|
||||||
|
GstStructure *s = gst_caps_get_structure (icaps, i);
|
||||||
|
|
||||||
|
gst_structure_remove_field (s, "framerate");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (clean_filter)
|
if (clean_filter)
|
||||||
gst_caps_unref (clean_filter);
|
gst_caps_unref (clean_filter);
|
||||||
|
|
Loading…
Reference in a new issue