From patchwork Thu Oct 11 13:31:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Valery Kot X-Patchwork-Id: 10641 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp2119919uaq; Thu, 11 Oct 2018 06:32:03 -0700 (PDT) X-Google-Smtp-Source: ACcGV62dvYc/aEc5iBQsP3BMiOrm6Q0Qmb44AezGlqWANZHpGfE7kVoiCSQVAiPcXM7KYX4dNJzn X-Received: by 2002:a1c:cf4e:: with SMTP id f75-v6mr1759335wmg.81.1539264723474; Thu, 11 Oct 2018 06:32:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539264723; cv=none; d=google.com; s=arc-20160816; b=icqyfPcPV3Ehj3LO4A4efGhueJACKt8TpfZBNjzGaTNGJYp5zPf8ZTpNXiVtiumtTG hbrPui4j+ry001GYZqpwbCEeOq0eMvQXQ1spEMVvYR2txbyKTfyyPADPvIJC6JRGzYEX 4mTR3JyiwMTmuX4SNwgGTQ33tC/Xl+TG2Vtu/WZO7N4zGch4SblMpnkr77q69msyZxWM IJnJJcSAOSZ+qjcuT8A7AislzphEnLAufJYPujjHKndIAUisqGaAf9hP9S+MqipzZhHB SdeHZkK6MLhQTyxFKAprhXVeQl3z0a6HnvFX1VjPn1RiuLPsZc6J0cEDZ9ilpShf8uei K4pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:to:message-id:date:from:mime-version :dkim-signature:delivered-to; bh=xtrZfCHyTLrq3wXa3oCD8it9j3w93IhORiJu5RV+qqc=; b=xGC6O2GADxLdtoyiam1s+Dqz0uHfHT+Gb3qNArs1/IZ2kk0H1lUXs46Jq7pKJRFfy9 jcyvSrst8gfy7Er+tWNuvIk3sI7uhn5aafUCi8QSVQ9jEAeuPmElbptddZ81VOIystdL Tbz0wjIlDimKGVAA8nxKOD9w+LJk+BPbFYdSwN+fjaFqQDH7d/8Vg5+jrR75aBE3HrdX +/VJ4Hd5KOmXuK/WS/7166kSLOnzuYQNiwYF8mWOnotbsN2fFry7gYrROg8nzBn+GYzZ AxfuvMLGUR54q1xnDAJj/5YCJHBQyFIbp+PABYKn2g5vHj2Hs3HWwlbtcvQqqNPMpUGL BYbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=N4UJfyzZ; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o128-v6si14970049wmo.22.2018.10.11.06.32.02; Thu, 11 Oct 2018 06:32:03 -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=@gmail.com header.s=20161025 header.b=N4UJfyzZ; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8B1368A24C; Thu, 11 Oct 2018 16:31:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EEF92689DBE for ; Thu, 11 Oct 2018 16:31:30 +0300 (EEST) Received: by mail-ot1-f49.google.com with SMTP id w67so8899249ota.7 for ; Thu, 11 Oct 2018 06:31:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=acg994Q/iioYFBvQywlyWL5xaqIF5FD/CNITCNmIHtk=; b=N4UJfyzZFxwrTVSZlYYtIYEW5SH+pVNdVNyq4RjlYXiM3f9d77HjvyUGG8ak595flu YxFwQzqw/8nllU+FySgii+G4LtvizyX4OhvmsLEPqvdsFYuDfbuFUrbi2pdEu3FI9iX5 4blXsqq1yf+cjmKQUIzVs/U2ATJ2Nc+wY9xu3U17LIB9QyQNDG9D31wsqJKlat82OXk9 Y1O5jnfWkZOFGpGQdTdgO+RcMKyFlBDifZGP9ZklSAF1CH1gYHx6BKCHB+jMowhEiJMj KZlB9X+z3hjvmO9L7gRNWkJLS6kSR/IocUqIksH1oQmVXzgQRUl6W+SWIjdRZiOyfjXR x1jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=acg994Q/iioYFBvQywlyWL5xaqIF5FD/CNITCNmIHtk=; b=uebEn3J4FxNCnjH3dOtQk0cDWiAuQakwjiy7aMOht8KQHtmR/TyScwyRQE0+Yna1sI lQH8JVc9fZhIQdKRUjS51fCfYEJ1XhBtFYlEantm4JoeVdPMxYOB6Pp3ElZ5+Uu7QRKN eMKmkfLeXCQyIEJZsjw4sHcJXsZHUfgHMDKNqH/M3giWCr/yjdSQk9DmdwE7d/dVgLzv DYELXIf6fM9rGeVCEUF6pyG4lfJ4xuG6NzwxuwMoQw0RTFNPy289/eg6xXanomKNh3GL 1ZNEVZEk0MKYsNNcDaAc+0XTjJhiA+JwB/KRTP4N9sEhBLhI3arR3XLUh7y/spHonyEW gGSA== X-Gm-Message-State: ABuFfoi9Vsk1izK62pQIlC/VJBLqWe8/sNOlb/UXQ4N+n8nkw53ZQKvy ka93cSaaYp0RKQQp+mVIr2lzg0bGN3FQdP0/rFp57yxb X-Received: by 2002:a9d:3bc7:: with SMTP id k65-v6mr967970otc.23.1539264712099; Thu, 11 Oct 2018 06:31:52 -0700 (PDT) MIME-Version: 1.0 From: Valery Kot Date: Thu, 11 Oct 2018 15:31:40 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] avcodec/libopenh264enc.c 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" When using libx264 (GPL) encoder, sample aspect ratio gets stored on both container and frame levels. For libopenh264 (LGPL), aspect ratio on codec/frame level currently is ignored, which results in weird display aspect ratio for non-square pixels on some players. Proposed patch fixes that, if FFmpeg being build against libopenh264 1.7 or newer. --- libavcodec/libopenh264enc.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) ASP_32x11; + else if (!av_cmp_q(av_make_q(80, 33), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_80x33; + else if (!av_cmp_q(av_make_q(18, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_18x11; + else if (!av_cmp_q(av_make_q(15, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_15x11; + else if (!av_cmp_q(av_make_q(64, 33), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_64x33; + else if (!av_cmp_q(av_make_q(160,99), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_160x99; + else { + param.sSpatialLayers[0].eAspectRatio = ASP_EXT_SAR; + param.sSpatialLayers[0].sAspectRatioExtWidth = avctx->sample_aspect_ratio.num; + param.sSpatialLayers[0].sAspectRatioExtHeight = avctx->sample_aspect_ratio.den; + } + } +#endif + if ((avctx->slices > 1) && (s->max_nal_size)) { av_log(avctx, AV_LOG_ERROR, "Invalid combination -slices %d and -max_nal_size %d.\n", diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 83c3f0ce20..6d4d9e6192 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -164,6 +164,32 @@ FF_ENABLE_DEPRECATION_WARNINGS param.sSpatialLayers[0].iSpatialBitrate = param.iTargetBitrate; param.sSpatialLayers[0].iMaxSpatialBitrate = param.iMaxBitrate; + #if OPENH264_VER_AT_LEAST(1, 7) + if(avctx->sample_aspect_ratio.num == 0 || avctx->sample_aspect_ratio.den == 0) + param.sSpatialLayers[0].bAspectRatioPresent = false; + else { + param.sSpatialLayers[0].bAspectRatioPresent = true; + if (!av_cmp_q(av_make_q( 1, 1), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_1x1; + else if (!av_cmp_q(av_make_q(12, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_12x11; + else if (!av_cmp_q(av_make_q(10, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_10x11; + else if (!av_cmp_q(av_make_q(16, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_16x11; + else if (!av_cmp_q(av_make_q(40, 33), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_40x33; + else if (!av_cmp_q(av_make_q(24, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_24x11; + else if (!av_cmp_q(av_make_q(20, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio = ASP_20x11; + else if (!av_cmp_q(av_make_q(32, 11), avctx->sample_aspect_ratio)) param.sSpatialLayers[0].eAspectRatio =