From patchwork Thu Nov 1 12:55:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Valery Kot X-Patchwork-Id: 10877 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 66A3544D48C for ; Thu, 1 Nov 2018 14:56:14 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D048168A864; Thu, 1 Nov 2018 14:55:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f194.google.com (mail-oi1-f194.google.com [209.85.167.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AB93368A864 for ; Thu, 1 Nov 2018 14:55:39 +0200 (EET) Received: by mail-oi1-f194.google.com with SMTP id u130-v6so11749137oie.7 for ; Thu, 01 Nov 2018 05:56:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=PUhyg411gpKjHuTZtj1XMWPuMhoetXzcj/APLhQBV4c=; b=LtAYgu/hPcv6AaLBsvTc/sw7tTFgq/JLwGAEY6vbKyBei2klSys6a2OtbnZyyLMvC5 UDdRmg0DIg9SCVoxOamxQAh9hLtuxA1BO59x5IA5McY4fO1ts4YmKGdysIDeosXHsaeV 5Ml60nkj04Ld8immGxad3+WAAnw2SVjbl5V37it3L3lqm3DQl7b4ZMp7muUaczLDRt7T R3CcpxJwDBSkm567p/cq6M6ZG3QNyRz+yxVszEQAGt08rRbCawL27exupq/8E5wYxhWO N2HHvHn9QBwfGZZy9suF+2DIh13YYxgSPi0x+tNl73NkFGhADnTMr30GeyM/VzoKT6Di QUXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=PUhyg411gpKjHuTZtj1XMWPuMhoetXzcj/APLhQBV4c=; b=Zui9L1b71ZOR4kZAmbFGlj8jcEl2/+jwHBMTW3Owb/FjJmXN285Ox/+rTV8AZPWxSR BhlG4UYyF12QMcraZrE44qnLZls2ooB1ak4UkXMWClkOK9SF5xR4fYuoSEFOfMnlYAal rPmlEccMfpMqKr69IjnHsWAFwuiYWNAGO64sySiEWvECBQIq27zdXssRK3O5KDEawSKI nqqLLtF9Zms9ZkPt7utJAwGazfpKgVHH1mVi8rkvDfrrVpAxt+CLQzmFgZkg6b0X4K5k TX4au4IVjvprwwCwCVLWY9ue3F0rgHBZZzSVB0HdmJl5/exJT9LS+Nf0FMNllPiAe9Sq AEfg== X-Gm-Message-State: AGRZ1gIf9PdIgBQZTAvZkSrQ2Mjb1CML1/twS8PiT0KU6bxRLYdlYu4d 5BEG4MeVKhMf+TZ1kEU4hxTDUL2J3OIveLZgKId/hA== X-Google-Smtp-Source: AJdET5eoAV0EYR1bPDVIoF07j1LTIb5WrfgsmuopMqwflp82czS/H75tP2I6+sXwWb8Y4JBtpBoY9udjXj5lSljNdpk= X-Received: by 2002:aca:6b43:: with SMTP id g64-v6mr3988105oic.101.1541076970092; Thu, 01 Nov 2018 05:56:10 -0700 (PDT) MIME-Version: 1.0 References: <972a8331-53c1-71ea-3389-ef51b5bdf177@jkqxz.net> In-Reply-To: <972a8331-53c1-71ea-3389-ef51b5bdf177@jkqxz.net> From: Valery Kot Date: Thu, 1 Nov 2018 13:55:58 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH] avcodec/libopenh264enc.c: Handle sample_aspect_ratio in libopenh264 encoder 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" > I think this would look nicer (and generate less code) as a table + loop rather than an if-ladder making each fraction structure inline? > > E.g. something like . Thanks for the suggestion! Here is an updated patch. From 7af627f923530d51a51b7630919df0da92f8b71d Mon Sep 17 00:00:00 2001 From: vkot Date: Thu, 1 Nov 2018 13:32:21 +0100 Subject: [PATCH] Handle sample_aspect_ratio in libopenh264 encoder --- libavcodec/libopenh264enc.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 83c3f0ce20..c0ecdb2472 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -164,6 +164,47 @@ 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 && avctx->sample_aspect_ratio.den) { + // Table E-1. + static const AVRational sar_idc[] = { + { 0, 0 }, // Unspecified (never written here). + { 1, 1 }, { 12, 11 }, { 10, 11 }, { 16, 11 }, + { 40, 33 }, { 24, 11 }, { 20, 11 }, { 32, 11 }, + { 80, 33 }, { 18, 11 }, { 15, 11 }, { 64, 33 }, + { 160, 99 }, // Last 3 are unknown to openh264: { 4, 3 }, { 3, 2 }, { 2, 1 }, + }; + static const ESampleAspectRatio asp_idc[] = { + ASP_UNSPECIFIED, + ASP_1x1, ASP_12x11, ASP_10x11, ASP_16x11, + ASP_40x33, ASP_24x11, ASP_20x11, ASP_32x11, + ASP_80x33, ASP_18x11, ASP_15x11, ASP_64x33, + ASP_160x99, + }; + int num, den, i; + + av_reduce(&num, &den, avctx->sample_aspect_ratio.num, + avctx->sample_aspect_ratio.den, 65535); + + for (i = 1; i < FF_ARRAY_ELEMS(sar_idc); i++) { + if (num == sar_idc[i].num && + den == sar_idc[i].den) + break; + } + if (i == FF_ARRAY_ELEMS(sar_idc)) { + 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; + } else { + param.sSpatialLayers[0].eAspectRatio = asp_idc[i]; + } + param.sSpatialLayers[0].bAspectRatioPresent = true; + } + else { + param.sSpatialLayers[0].bAspectRatioPresent = false; + } +#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",