mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 14:06:23 +00:00
codecs: mpeg2decoder: Use tsg framerate for latency.
Latency setting relies on src pad caps, but they aren't set when the function is called, and latency is never updated. In order to fix it, this patch uses TSG framerate first, and if it's not set yet, sinkpad caps are used to get the framerate. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2514>
This commit is contained in:
parent
7d1f6459a0
commit
f51371d7b9
1 changed files with 16 additions and 10 deletions
|
@ -404,21 +404,27 @@ gst_mpeg2_decoder_set_latency (GstMpeg2Decoder * decoder)
|
|||
{
|
||||
GstCaps *caps;
|
||||
GstClockTime min, max;
|
||||
GstMpeg2DecoderPrivate *priv = decoder->priv;
|
||||
GstStructure *structure;
|
||||
gint fps_d = 1, fps_n = 0;
|
||||
|
||||
caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SRC_PAD (decoder));
|
||||
if (!caps)
|
||||
return;
|
||||
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
|
||||
if (fps_n == 0) {
|
||||
/* variable framerate: see if we have a max-framerate */
|
||||
gst_structure_get_fraction (structure, "max-framerate", &fps_n, &fps_d);
|
||||
if (priv->tsg.fps_d > 0 && priv->tsg.fps_n > 0) {
|
||||
fps_n = priv->tsg.fps_n;
|
||||
fps_d = priv->tsg.fps_d;
|
||||
} else {
|
||||
caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SINK_PAD (decoder));
|
||||
if (caps) {
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
|
||||
if (fps_n == 0) {
|
||||
/* variable framerate: see if we have a max-framerate */
|
||||
gst_structure_get_fraction (structure, "max-framerate", &fps_n,
|
||||
&fps_d);
|
||||
}
|
||||
}
|
||||
gst_caps_unref (caps);
|
||||
}
|
||||
}
|
||||
gst_caps_unref (caps);
|
||||
|
||||
/* if no fps or variable, then 25/1 */
|
||||
if (fps_n == 0) {
|
||||
|
|
Loading…
Reference in a new issue