From patchwork Fri Jul 14 18:20:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42680 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6da1:b0:131:a7d0:bc6d with SMTP id gl33csp3859650pzb; Fri, 14 Jul 2023 11:20:56 -0700 (PDT) X-Google-Smtp-Source: APBJJlFjab8C1WOg0VJa7cPLmdjQu/WC3noSE2H53iK9uIF2B/sK5kPe9sulTP07Ut3qAZzyM2TG X-Received: by 2002:a05:6512:234a:b0:4f8:7617:6445 with SMTP id p10-20020a056512234a00b004f876176445mr4357984lfu.48.1689358856498; Fri, 14 Jul 2023 11:20:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689358856; cv=none; d=google.com; s=arc-20160816; b=km/sGQTwgeuOZ/UKWS9oUWVMJdJV89SKIM5mMTZaEU6L+sjsuWVW/UYXy5HqqQVHBk cMHchmyt6SgYxW62fRTmDcLV4CQiamSi/XzY1Hd4444fg2lGFekvMlsLZncKFoXmDeFD 1xURx3aJBiJTfdK4FbG3MvzbW7Px5ScxN520VItwEvbTR12KAmZopjhoKDjwirZ3Dt6W nqN9zMUuGwvEwTWJqt5l/qTziRofLfo74nit6KTQJSm4VlLG7kC3xcalDh5GOYuAhHCD aXXyhPDqV/qoG7KdNos8OTnlPJGMa2Pzzy30x0JJcOdlCZaBPk04OxdIyF1VbfJpFm04 CEQg== 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:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=Vu6YyQVAqRAO0189xJdeOL937zR0gSz6ybeSghmhIH8=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=xW26a1/ErQNcxwhA4cB4yLgMl6KSv4tzHRagGVJjTcFeiU43xyPLI0QFdx9EwcOxE6 Oy9RWh0moT42MIIlneuwMIPbAKPtNtA25UosYRiryeTxuwil/APDfa3EYFRrgoIhbTIP RGL8FnWOShWNCkiXeGwsq25BgihQU/rhg8IyuTlJziVNu4yFEH78hL4qbsqG/o3xiT1Q VYC7dbfNpgmlTgMkPQjj30iAQbufqwoWKMS+dhdbkvChTn9OMIkPGVBgBrOqAubGI5zD woC1UkamNP+LuAdsXhmneIylhxlhB3R/7ioIkWZse58CWGNbFliMUqnU+Ww3bsG2XdVT Y8yQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=IzpsfOwA; 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 l13-20020a056402124d00b0051e2767612esi9789403edw.328.2023.07.14.11.20.56; Fri, 14 Jul 2023 11:20:56 -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=20221208 header.b=IzpsfOwA; 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 E1BFB68C633; Fri, 14 Jul 2023 21:20:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4DE6568C36A for ; Fri, 14 Jul 2023 21:20:47 +0300 (EEST) Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3a36b30aa7bso1698302b6e.3 for ; Fri, 14 Jul 2023 11:20:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689358845; x=1691950845; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=CXpMnY5TSCS5as/YuPcX5pqztg2NMjOBN2KWcJGLjzI=; b=IzpsfOwAtEWutmbEWY7yJrTTDGB3x6yfU2Lhm9k68/6RYga6Y0w13VO2db9B2f+RGV ibRyDOegXlynZaVPMWXPq78gE+nAnWwdGEK0hyFFoqR+CDRYbI8QrPgHWyL78hf9xyGd xi//C6McrkqG3UL5DkkgRnEA4TK792B2kFNl1SLQ7ClTbKwF6Ej7mlq4u0ox4e7brPmI bOdHNdOgO7oPlXDOY10BFD0cVQHkBKpxj/gM7lsSo8nhs0R3xLTZlAE26pPYZ3v3fGE8 KhH9Wu/vAzat18+iY0DxjTcwhRBYbQtE9AEQKuJ7/b7kNwsiA7JihTIg+Pvfj3fixExV up+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689358845; x=1691950845; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=CXpMnY5TSCS5as/YuPcX5pqztg2NMjOBN2KWcJGLjzI=; b=UQcZQ7np2Waw44R6dPwUHw5U5+dw787LZB3BTolN4g+feVfQAllYuRmlkBJurVUcCP z+9VILjgb9OVyNnorLcnZht2cpidBexp6k0HyhFoIP+Lz1oRJipLRX3OagJ+OufFajC1 8K6dTCMZK3cRQ2XucAG+K9aWk97hAZpAd8xdtUqR+CLGvqKkvtkyodPQtYaHkcRaOmJ/ 3kvY22n815ZAkMDYmKqXjtR+96IajomZDZyKdmdA5dIO0tw6dbEL3bYEKiiCRDfYxr/a wGSIspR3iJg8rP1RV+exSCh7NUuj7xLzcDGhP9qeE6KJgvbKnqcxHmHKWlATtOjktgZs V4bA== X-Gm-Message-State: ABy/qLZPU422mMiQCUoxVJKsCD5cECqfLutWuCj6qCkguRVeH4i5ttHM /b0WLBXSSXNxwwtKxQLKHCQTn0nMVHk= X-Received: by 2002:a05:6808:120e:b0:3a3:ffb7:1dd4 with SMTP id a14-20020a056808120e00b003a3ffb71dd4mr6132637oil.6.1689358845256; Fri, 14 Jul 2023 11:20:45 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a544702000000b003a422b6ff4csm3270310oik.49.2023.07.14.11.20.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jul 2023 11:20:44 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 14 Jul 2023 15:20:36 -0300 Message-ID: <20230714182036.32592-1-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/decode: factor out filling frame props X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: YMIWjkU2zTDt Signed-off-by: James Almer --- libavcodec/decode.c | 67 ++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 68525e47a6..51216988a6 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -545,24 +545,27 @@ static int fill_frame_props(AVCodecContext *avctx, AVFrame *frame) { int ret; + if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) + frame->color_primaries = avctx->color_primaries; + if (frame->color_trc == AVCOL_TRC_UNSPECIFIED) + frame->color_trc = avctx->color_trc; + if (frame->colorspace == AVCOL_SPC_UNSPECIFIED) + frame->colorspace = avctx->colorspace; + if (frame->color_range == AVCOL_RANGE_UNSPECIFIED) + frame->color_range = avctx->color_range; + if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED) + frame->chroma_location = avctx->chroma_sample_location; + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - //FIXME these should be under if(!avctx->has_b_frames) - /* get_buffer is supposed to set frame parameters */ - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) { if (!frame->sample_aspect_ratio.num) frame->sample_aspect_ratio = avctx->sample_aspect_ratio; - if (!frame->width) frame->width = avctx->width; - if (!frame->height) frame->height = avctx->height; if (frame->format == AV_PIX_FMT_NONE) frame->format = avctx->pix_fmt; - } } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { if (frame->format == AV_SAMPLE_FMT_NONE) frame->format = avctx->sample_fmt; if (!frame->ch_layout.nb_channels) { ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); - if (ret < 0) { - av_frame_unref(frame); + if (ret < 0) return ret; - } } #if FF_API_OLD_CHANNEL_LAYOUT FF_DISABLE_DEPRECATION_WARNINGS @@ -629,7 +632,12 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) } if (!ret) { - if (avctx->codec_type != AVMEDIA_TYPE_VIDEO) + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + if (!frame->width) + frame->width = avctx->width; + if (!frame->height) + frame->height = avctx->height; + } else frame->flags |= AV_FRAME_FLAG_KEY; ret = fill_frame_props(avctx, frame); @@ -1451,9 +1459,10 @@ FF_ENABLE_DEPRECATION_WARNINGS int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) { const AVPacket *pkt = avctx->internal->last_pkt_props; + int ret; if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { - int ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt); + ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt); if (ret < 0) return ret; #if FF_API_FRAME_PKT @@ -1468,23 +1477,12 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif - if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) - frame->color_primaries = avctx->color_primaries; - if (frame->color_trc == AVCOL_TRC_UNSPECIFIED) - frame->color_trc = avctx->color_trc; - if (frame->colorspace == AVCOL_SPC_UNSPECIFIED) - frame->colorspace = avctx->colorspace; - if (frame->color_range == AVCOL_RANGE_UNSPECIFIED) - frame->color_range = avctx->color_range; - if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED) - frame->chroma_location = avctx->chroma_sample_location; + ret = fill_frame_props(avctx, frame); + if (ret < 0) + return ret; switch (avctx->codec->type) { case AVMEDIA_TYPE_VIDEO: - frame->format = avctx->pix_fmt; - if (!frame->sample_aspect_ratio.num) - frame->sample_aspect_ratio = avctx->sample_aspect_ratio; - if (frame->width && frame->height && av_image_check_sar(frame->width, frame->height, frame->sample_aspect_ratio) < 0) { @@ -1493,25 +1491,6 @@ FF_ENABLE_DEPRECATION_WARNINGS frame->sample_aspect_ratio.den); frame->sample_aspect_ratio = (AVRational){ 0, 1 }; } - - break; - case AVMEDIA_TYPE_AUDIO: - if (!frame->sample_rate) - frame->sample_rate = avctx->sample_rate; - if (frame->format < 0) - frame->format = avctx->sample_fmt; - if (!frame->ch_layout.nb_channels) { - int ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); - if (ret < 0) - return ret; - } -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - frame->channels = frame->ch_layout.nb_channels; - frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? - frame->ch_layout.u.mask : 0; -FF_ENABLE_DEPRECATION_WARNINGS -#endif break; } return 0;