From patchwork Tue May 23 11:36:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wm4 X-Patchwork-Id: 3717 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp1843844vsk; Tue, 23 May 2017 04:37:10 -0700 (PDT) X-Received: by 10.28.236.205 with SMTP id h74mr1863360wmi.92.1495539430222; Tue, 23 May 2017 04:37:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495539430; cv=none; d=google.com; s=arc-20160816; b=XDbJedQrVfjEPx0jG4e+o4bmwEmGpK00u55kmgvRH5JPEET5RixPLZx5fMPWNiYzXH nku8BcFQUCgwqoAyrqQLtJuIhFcMwZedthgihH6QqrvNc7OnQOz8ChlG24g7EgIcmq97 7VJTagEHnwI4U0E/34s5keXg6RJoSaqXJ3cqdXXEeh0kJhn3YUJnlURFht3ddbyZ3chW cyeZjsW6weLGI0hiYzK7dEhRVIIO2Qp3drA7bhc8nUWHAncOxvJM3FFTaLd9Sgl4VSDG SrsHmLwDEzi14u+hVn6pXujyhe9+uqMhtgRoVz2pNNqcOsJz/78K7GEUjWfyU72y7Kii rw4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=4EdPAEGWoWryEkGpiSt8xw6hEee7x1t+sOsAXGE1YJw=; b=NSuDKOzlUsWFNPJWNEmt7T31xyXYLh89FIpQuvMNm5hhajLek0qu8eYUOc7fimOqL0 Go0v9StPsxdEjlIyygtVLq82YVAmctc5Py6kxG0nzwdY/EKq5pksO3IEu7FehSRbxXtg Nn+cYeyOxGnormVl2Kl0rgv8bOKPBroypGQw1IbzNjhwfA7w/NVPcCh5Qdrt39S+PVH2 L5CS85sFBTr8R00brqzKDlzXxPaqMDMe1zgPEZKsZ9ppvzLQxY45KegIZcs7fHXorI2o xzv3ZKhf8mDhV1Ku/D8961IZr8FSp84ZPOb0GEm07evA1ovVjSK6uZeDomasMqbkSyER 8DRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p78si2087829wmb.107.2017.05.23.04.37.09; Tue, 23 May 2017 04:37:10 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 28619689AD9; Tue, 23 May 2017 14:37:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 735456883C5 for ; Tue, 23 May 2017 14:36:58 +0300 (EEST) Received: by mail-wm0-f65.google.com with SMTP id k15so37420082wmh.3 for ; Tue, 23 May 2017 04:37:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=DPQ7kuundPbGEGjhX7t0dBBECO107zxRbTe4ErqcDY0=; b=fG3ovir06wXsxzM8s/i4IpbhCDU/2NZfUUzcEneVB8gybPyRbsh5rDCExCGBihe+xG x6nR5T+nA7wha/Q7Nqy4BWReVG0EX8/rY3x/Y9lnXb5mCNW7p2UEycl7M8hO5EJYI/6X 70lE8Seh5QawKzwRzXTea10cZwrd4MptEuBABmowI+Gf7ZGSpXcQhwJxflrhLMwTqZ9O 3LhwIm749BiKap7k3xGy8nps3pDpEN7AcIZmnFoUrV+6D5U+shIiGyqjUuPuJHg/Iazu ABIBS1X/QxCsRgIS3oVJEH7hvv2mdD29q/lzFK8fcupboXsh+c6LTlFmnvBlkwvJnjxg kReg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=DPQ7kuundPbGEGjhX7t0dBBECO107zxRbTe4ErqcDY0=; b=rszAbWLS5jEqfKawScQbCvShlpc67j5LMzGXiSqopsbNcCTcCFg8GX0LVdl3Y1PBMd /bGbOkLvlYm4Yx9FWtP3AsP50yb95QFO4L3D2PdjIpQS79nPY8unASOHAQ2Wiu7GeGeU 8HMfZll/tq5gZH9Bo5g8lv+bmwxxtA9g3nP8cSzpIJqctlvlRv0cmMrTllAShcAU+AHi kbbwbEJaxF82nYzA7uUB69Re0x+5TTV+PXXiawSsfTjd80eKu8u/JJX9UBsld/a8yekO d4XRUMOzmz+v6tzkZqq1jF69KgRsqUQM6TaAo2sFHPIQc4Z7ABplelESYw/sX4cq4HMg +tTA== X-Gm-Message-State: AODbwcCF4RmHtU3kgTKOFshOZ2FVpIGgEXT0IM7fC6XiQlPo8vpffD6j a+TI6DFyo/tV8C8m X-Received: by 10.28.45.18 with SMTP id t18mr2048112wmt.6.1495539419741; Tue, 23 May 2017 04:36:59 -0700 (PDT) Received: from localhost.localdomain (p4FF00DE2.dip0.t-ipconnect.de. [79.240.13.226]) by smtp.googlemail.com with ESMTPSA id y131sm312876wmy.34.2017.05.23.04.36.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 May 2017 04:36:58 -0700 (PDT) From: wm4 To: ffmpeg-devel@ffmpeg.org Date: Tue, 23 May 2017 13:36:51 +0200 Message-Id: <20170523113651.26514-1-nfxjfg@googlemail.com> X-Mailer: git-send-email 2.11.0 Subject: [FFmpeg-devel] [PATCH] lavf: consider codec timebase for framerate detection X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: wm4 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fixes detection of some TV sample as 24.5 FPS. With the patch applied, it's detected as 25 FPS. --- libavformat/utils.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index fbd8b58ac2..778a82aeee 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3903,6 +3903,7 @@ FF_ENABLE_DEPRECATION_WARNINGS st->info->codec_info_duration) { int best_fps = 0; double best_error = 0.01; + AVRational codec_frame_rate = av_inv_q(avctx->time_base); if (st->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2|| st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den || @@ -3924,6 +3925,27 @@ FF_ENABLE_DEPRECATION_WARNINGS best_fps = std_fps.num; } } + if (avctx->ticks_per_frame > 0) + codec_frame_rate.num /= avctx->ticks_per_frame; + for (j = 0; j < MAX_STD_TIMEBASES; j++) { + AVRational std_fps = { get_std_framerate(j), 12 * 1001 }; + double error = fabs(av_q2d(st->avg_frame_rate) / + av_q2d(std_fps) - 1); + + if (error < best_error) { + best_error = error; + best_fps = std_fps.num; + } + + if (codec_frame_rate.num > 0 && codec_frame_rate.den > 0) { + error = fabs(av_q2d(codec_frame_rate) / + av_q2d(std_fps) - 1); + if (error < best_error) { + best_error = error; + best_fps = std_fps.num; + } + } + } if (best_fps) av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den, best_fps, 12 * 1001, INT_MAX);