mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-30 04:00:37 +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 */
|
/* fixed, non probing context */
|
||||||
if (context != NULL && context->width != -1) {
|
if (context != NULL && context->width != -1) {
|
||||||
|
gint num, denom;
|
||||||
|
|
||||||
caps = gst_caps_new_simple (mimetype,
|
caps = gst_caps_new_simple (mimetype,
|
||||||
"width", G_TYPE_INT, context->width,
|
"width", G_TYPE_INT, context->width,
|
||||||
"height", G_TYPE_INT, context->height,
|
"height", G_TYPE_INT, context->height, NULL);
|
||||||
"framerate", GST_TYPE_FRACTION,
|
|
||||||
context->time_base.den / context->ticks_per_frame,
|
num = context->time_base.den / context->ticks_per_frame;
|
||||||
context->time_base.num, NULL);
|
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 {
|
} else {
|
||||||
/* so we are after restricted caps in this case */
|
/* so we are after restricted caps in this case */
|
||||||
switch (codec_id) {
|
switch (codec_id) {
|
||||||
|
|
Loading…
Reference in a new issue