mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 23:36:38 +00:00
ffcodecmap: avoid setting large framerates
When the framerate is bigger than 1000/1, set it to 0/1 instead. This avoids letting the videosink do QoS on these very small frame durations.
This commit is contained in:
parent
c330cdcc5d
commit
4aa9b97d3f
1 changed files with 15 additions and 4 deletions
|
@ -195,12 +195,23 @@ gst_ff_vid_caps_new (AVCodecContext * context, enum CodecID codec_id,
|
|||
|
||||
/* fixed, non probing context */
|
||||
if (context != NULL && context->width != -1) {
|
||||
gint num, denom;
|
||||
|
||||
caps = gst_caps_new_simple (mimetype,
|
||||
"width", G_TYPE_INT, context->width,
|
||||
"height", G_TYPE_INT, context->height,
|
||||
"framerate", GST_TYPE_FRACTION,
|
||||
context->time_base.den / context->ticks_per_frame,
|
||||
context->time_base.num, NULL);
|
||||
"height", G_TYPE_INT, context->height, NULL);
|
||||
|
||||
num = context->time_base.den / context->ticks_per_frame;
|
||||
denom = context->time_base.num;
|
||||
|
||||
if (gst_util_fraction_compare (num, denom, 1000, 1) > 0) {
|
||||
GST_LOG ("excessive framerate: %d/%d, -> 0/1", num, denom);
|
||||
num = 0;
|
||||
denom = 1;
|
||||
}
|
||||
GST_LOG ("setting framerate: %d/%d", num, denom);
|
||||
gst_caps_set_simple (caps,
|
||||
"framerate", GST_TYPE_FRACTION, num, denom, NULL);
|
||||
} else {
|
||||
/* so we are after restricted caps in this case */
|
||||
switch (codec_id) {
|
||||
|
|
Loading…
Reference in a new issue