From patchwork Mon Aug 26 17:36:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 14720 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 37CC244A318 for ; Mon, 26 Aug 2019 20:37:23 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0FA2168ABCD; Mon, 26 Aug 2019 20:37:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9D05168AB99 for ; Mon, 26 Aug 2019 20:37:16 +0300 (EEST) Received: by mail-qt1-f178.google.com with SMTP id 44so18652001qtg.11 for ; Mon, 26 Aug 2019 10:37:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LXh62tphvYmHijy0+5VHnasrKySI6+m0zLUBBx46Ovo=; b=Rt26kroiUHLlvs91UrjegC0B2pDetLZKeZ0ap52l1+AXh+S8QAkELDDinUXwlnr+Ps o4rLryfFyenEvepZ2Phx9np/DbKwyDDl9BWhWQYHHWAfS0NS002Dg4VJciBNfZpq4iMy g9Cmc7kpBc8vxpSZqaBgSx3fJw6EOcpHTHMoZZpysbjsZAMJ+ehhLJDQtwBUbjl6R9dA LiLOB/3qWBa09INikjpyA2vbokKuNWl3xs/JdRcLP+SLiENAuvD0QzeXBUCvPmnSAgH7 A5SpJxu5LhX9cVymfInYY9scN/Ue7RzV7pMPRji6V1ENPJr7B2Zw6l/fGLTpXiYGVlWB isGA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=LXh62tphvYmHijy0+5VHnasrKySI6+m0zLUBBx46Ovo=; b=l4ZsBkOfBzdaI2PZ1vu7lifl31TXr9Q6pTUQ1e7f6HtBpH8ENQptL78DInq1OF2Rn/ l8RHRBVev/2qpWqNrDcnk+nBVQGcFQWto4yTkmmM+32GZDEFF7U5LOwS/+IdVi/qY1jV pKUhtWnkHqMbi1SbittBXSuOht5P0W3MrYacYdE1I4cs86gpoUdxFjqD9vjgulVJIP3O KH43ELif3shv0C/71Nb2fTvh4TbztErLMWtjFT++0cm07ZRNShQMBYaGTfRx0mJsPYZ/ obGPaX+H/IlNOWOX9DVMhPodSwe4d3RDIxwfHjbX7sOxK3ON8QmKfCTGC9D5lyiWNJqR 9Prw== X-Gm-Message-State: APjAAAVjw5yXyrSTZVmFr5y1095q/Nq2NjVCaFHCT38K1dxTYZeLD2ZO I5Eelz3f+Cy/Eo/3/kYhy19JnWpI X-Google-Smtp-Source: APXvYqyZ1k1q3YNhzx+PG59eqmZpbsLbkCZAer9Zs9Ffi94+YUrK2rfOIntc4VPr39OYNFJF2V/2OQ== X-Received: by 2002:a0c:c548:: with SMTP id y8mr16578153qvi.68.1566841034930; Mon, 26 Aug 2019 10:37:14 -0700 (PDT) Received: from localhost.localdomain ([181.23.84.150]) by smtp.gmail.com with ESMTPSA id h13sm6462349qkk.12.2019.08.26.10.37.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Aug 2019 10:37:14 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Aug 2019 14:36:56 -0300 Message-Id: <20190826173656.5302-1-jamrial@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190826161727.1255-1-jamrial@gmail.com> References: <20190826161727.1255-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/3][RFC] avcodec/qtrle: call ff_reget_buffer() only when the picture data is going to change 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" ff_reget_buffer() will attempt to create a writable copy of the frame, which is not needed when the decoder intends to return a reference to the same buffer as the previous frame. Should reduce data copy, hopefully achieving a similar speed up as a9dacdeea6168787a142209bd19fdd74aefc9dd6 without dropping frames. Signed-off-by: James Almer --- And this hopefully works around the other side of the issue. libavcodec/qtrle.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index bf3daf26e1..3255c64063 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -456,8 +456,6 @@ static int qtrle_decode_frame(AVCodecContext *avctx, int drop = 0; bytestream2_init(&s->g, avpkt->data, avpkt->size); - if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) - return ret; /* check if this frame is even supposed to change */ if (avpkt->size < 8) { @@ -492,6 +490,9 @@ static int qtrle_decode_frame(AVCodecContext *avctx, start_line = 0; height = s->avctx->height; } + if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) + return ret; + row_ptr = s->frame->linesize[0] * start_line; switch (avctx->bits_per_coded_sample) { @@ -553,6 +554,13 @@ static int qtrle_decode_frame(AVCodecContext *avctx, } done: + if (drop) { + // ff_reget_buffer() isn't needed when frames don't change, so just update + // frame props. + ret = ff_decode_frame_props(avctx, s->frame); + if (ret < 0) + return ret; + } if ((ret = av_frame_ref(data, s->frame)) < 0) return ret; if (drop)