From patchwork Mon Apr 2 02:03:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 8279 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp2053847jad; Sun, 1 Apr 2018 19:05:03 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/c1sQ4Lu09blfT2vJGwFPBLq42OTXqaDevrAuBeD8iEKKN/R6H+PsIen04JX/sgRQrBuVx X-Received: by 10.28.241.12 with SMTP id p12mr8252962wmh.125.1522634703336; Sun, 01 Apr 2018 19:05:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522634703; cv=none; d=google.com; s=arc-20160816; b=Y3Js7mJ1cWwsEAC/8d84vmjQnxGo6/XUSMVOrfmtb4z4SwTlXMeb3WLZJrt802cGBx /RiJyQb08nr2eLY4LB73xbwxC0fsjHT++yXP++HO+OK7zrM5fMzJj16/AtkzAcfU269O 7VceZv2aUsAqIIvzQqkzEAupP8UixlYYKTC7rTB61SElTahDp+DH3qoaGEgAJ/8sLg46 P7DaV98wnDnnN+vUmnr7RKNADRLhkG0mrpdLkNI3Be+GlkGD1ElpiP4hkLcQySqFQxC3 Mw+xanicxDeHUtg1NY43wfm8t2hhPba/FpAHrcKPe7GS9hg9nzJ/L9lvzNLsUXOJ5xAN JEUg== 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: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=clD7146RY3UX2vUwJKwlXZlVupV47We869nZ5VyXbZw=; b=f127D2pIaCCP3ghBsx9/mzyDF6CNbBF/BB6OwxLumsLTZK1m7roQxNYJWpt2MskqQo goNcPB5Pw/84fvEOK5VGWil14MNj/j7lN1e3CEBhdOCYC2sWOVitPh9LBDV0kX0LnqjE oGUKeknS+e4qk4BH/k13oTWtUAK8OJTCFAXRwG1eAVwycWXQbsf7B67bDo1N2P1CvVFy sAyeSM9u+nAbECyvYDp4Uu/O0p+Y5CcXBMElS7bz2evBybdi4yaJGAtI35vEkHAQh/9a 9BAO/FhNSJMCaNAJSyiw1BuXEIZ4wxL2sIbPylFoae4OZ23dJF/8tEjkGXVmeIHixbYC DSkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=AmCxsw6D; 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 n126si4841190wma.1.2018.04.01.19.05.02; Sun, 01 Apr 2018 19:05: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=AmCxsw6D; 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 110A2689C83; Mon, 2 Apr 2018 05:04:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f194.google.com (mail-qt0-f194.google.com [209.85.216.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0ADC6689C4C for ; Mon, 2 Apr 2018 05:04:35 +0300 (EEST) Received: by mail-qt0-f194.google.com with SMTP id w23so6174914qtn.3 for ; Sun, 01 Apr 2018 19:04:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=2667H90bVFf3wXv/iTgHory5dqhT/Wk5tACMDpGjMOY=; b=AmCxsw6DzT9GbuMNqmw5UrXkaLk+S8PYoXkhhGo/VIWHNu2zVsbB59Nm9vkYzivQWN HWJpNtkaj1FDnz1thOEaAbMJ0LOM0BPuRrWkY4W32yHUa6phTS47vb+6+QCVsRCvdx8s lu41go0Wj7I+hkhQ6dbC8LRHrmTiM68u+7CoIIHdflf40m67AzRedUlWAQgTsUo1UEeB IRq0rc0HVIm8MBnYHnrpOsj05SVQn/FXqSCWgJnp+9oN8w9sjlkDPl2Re3F6XfxaMYrB moz4zo66KZqmWto8mB08I/rdT+apvCf9/KnvXDNlaMydAuRAQ6aMqWOcfgVcoLX9SxVz 42zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=2667H90bVFf3wXv/iTgHory5dqhT/Wk5tACMDpGjMOY=; b=j9eScGsdrtE3m4xVUmCqvRA0oP7013u82MTAk9Va21UYdE+P87ZpzzjAYTuTTTJcQY gyTPK2JK4d5sC0sKyWkJW3CkZGvechHFcRLh7++oGZ1Im1YC+/Z4MiUyKcdKig17TNN6 GABGCIDc8fMZdTDYHvnpMzpeQsvqRg49yXlqTh+V8WfQZqgHmfA/QY4LHcMP2KuwSjwG 6fd6YojairpUCDJ+3lfqdLR7zyXe/ZUd+lNhKFJLOPRITt9pKqYRJekX2qytpVAK6l93 ny0SYBnYUz0UUCF37SfBYpU65DAlTXJqHAuzwLyDjzYdeCchhA0Ax5B33j2vsb9hWwrE hWhQ== X-Gm-Message-State: ALQs6tA/0jd0XxZNZmGQJyi3GL3wt4hXL9V5vVD358CBHaSQm5IXsydC ZNltNq/tPARkjNOgKYCv87W6NQ== X-Received: by 10.200.17.23 with SMTP id c23mr11489548qtj.155.1522634693817; Sun, 01 Apr 2018 19:04:53 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id b25sm5084568qte.88.2018.04.01.19.04.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 01 Apr 2018 19:04:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 1 Apr 2018 23:03:55 -0300 Message-Id: <20180402020355.948-1-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 Subject: [FFmpeg-devel] [PATCH] avcodec/libaomenc: fix encoding of sRGB streams 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavcodec/libaomenc.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 8ebdcc20e3..fb9d60527b 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -67,6 +67,7 @@ typedef struct AOMEncoderContext { int static_thresh; int drop_threshold; int noise_sensitivity; + int is_rgb; } AOMContext; static const char *const ctlidstr[] = { @@ -221,6 +222,7 @@ static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps, *img_fmt = AOM_IMG_FMT_I422; return 0; case AV_PIX_FMT_GBRP: + ctx->is_rgb = 1; case AV_PIX_FMT_YUV444P: enccfg->g_profile = FF_PROFILE_AV1_HIGH; *img_fmt = AOM_IMG_FMT_I444; @@ -250,6 +252,7 @@ static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps, break; case AV_PIX_FMT_GBRP10: case AV_PIX_FMT_GBRP12: + ctx->is_rgb = 1; case AV_PIX_FMT_YUV444P10: case AV_PIX_FMT_YUV444P12: if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) { @@ -270,6 +273,24 @@ static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps, return AVERROR_INVALIDDATA; } +static void set_colorspace(AVCodecContext *avctx) +{ + AOMContext *ctx = avctx->priv_data; + enum aom_color_primaries aom_cp = avctx->color_primaries; + enum aom_transfer_characteristics aom_tc = avctx->color_trc; + enum aom_matrix_coefficients aom_mc = avctx->colorspace; + + if (ctx->is_rgb) { + // Forces the proper sRGB codepath in libaom. + aom_cp = AOM_CICP_CP_BT_709; + aom_tc = AOM_CICP_TC_SRGB; + aom_mc = AOM_CICP_MC_IDENTITY; + } + codecctl_int(avctx, AV1E_SET_COLOR_PRIMARIES, aom_cp); + codecctl_int(avctx, AV1E_SET_TRANSFER_CHARACTERISTICS, aom_tc); + codecctl_int(avctx, AV1E_SET_MATRIX_COEFFICIENTS, aom_mc); +} + static void set_color_range(AVCodecContext *avctx) { enum aom_color_range aom_cr; @@ -451,9 +472,7 @@ static av_cold int aom_init(AVCodecContext *avctx, if (ctx->crf >= 0) codecctl_int(avctx, AOME_SET_CQ_LEVEL, ctx->crf); - codecctl_int(avctx, AV1E_SET_COLOR_PRIMARIES, avctx->color_primaries); - codecctl_int(avctx, AV1E_SET_MATRIX_COEFFICIENTS, avctx->colorspace); - codecctl_int(avctx, AV1E_SET_TRANSFER_CHARACTERISTICS, avctx->color_trc); + set_colorspace(avctx); set_color_range(avctx); // provide dummy value to initialize wrapper, values will be updated each _encode()