From patchwork Fri Mar 6 00:09:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 18066 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 0F3DE44B7AA for ; Fri, 6 Mar 2020 02:10:21 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DBA7268AD32; Fri, 6 Mar 2020 02:10:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E38D3689AA9 for ; Fri, 6 Mar 2020 02:10:14 +0200 (EET) Received: by mail-qk1-f194.google.com with SMTP id u25so714924qkk.3 for ; Thu, 05 Mar 2020 16:10:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=PZN++no0c12SG2LIHBDv3GmUEuLu7Or5lap73KY9YFo=; b=Wj5jBp12rWVOG3t8gKbH9ils9LuNIUj0MdK3f0yrp807XN5ur6vNhIHCRFCnuh6swl zIPzoUVBvUmtdEWDxxeTNh1gZQYIfQQEmdf4LIcgk5XucY+SmaLGyEMD8+AqmNCCndaZ /o03bLJXRFCe53EE179fe9Y0aY6hkInHNW+UdH6y+f3M9Rx+V42UNe3L8Hvmb3nGA4ZK LcOujxGGJNHp2k3AYIwWaceG+4kVZRHD+X/1QCMXxPw2IOSz0+Cdhzl3bXQ5HRGwbhGe YRbX8z1Gg5+nnxiMRiPhz2CkX+KzKRekx2Y6YJQvDnfcqOf3nfPto0MCFnvMn8vIzkZa 7+Qg== 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:mime-version :content-transfer-encoding; bh=PZN++no0c12SG2LIHBDv3GmUEuLu7Or5lap73KY9YFo=; b=uDqVJd2c+nX14u/ubrtBoeujKgYs2fCWM6ilc5dgbSIu3ut28IU6tGlshPX+1vXtmr dYgPpeqdvQD+GfUBCbfsI3aJl/Wu1imVWCCh8J89jX6Oy1Nc8YLtvbQd/kY3f758Im6/ NoKcw8zG6lHcuKxJejDxBoMQDchQqQAsvXDR9B+I4cpv0pkvNpmQQNi9jcGZtVEkjpG6 P29ve3UUY+3GeQ66Lk7WNEuGxxnQNwW+UaEp46kf66vMEXnMxVF5Knk3W9KAPByJuGak FKC8XUEhrEYkGhNJXlLOhBtssIZagTNz2x+YXNlQFiLLB2jUBWRbCz+7u/YbydHznAMw F6hQ== X-Gm-Message-State: ANhLgQ12cKSVKzzySzglbgLFuiwq5w2pfDSX5YSO9HcKaI98xM4fZcgN CpjiHoHm5BMCkXehq+07eYtbRq7atd4= X-Google-Smtp-Source: ADFU+vuxL6ft6Ly+3vxV4Tjej4LTlNxoxyrLrm7ZC8o5eLosENe5elDQGy8ZIfkuCIwI5drpllsGlw== X-Received: by 2002:a05:620a:12a2:: with SMTP id x2mr584278qki.276.1583453413053; Thu, 05 Mar 2020 16:10:13 -0800 (PST) Received: from localhost.localdomain ([191.83.213.103]) by smtp.gmail.com with ESMTPSA id o35sm1707421qtk.5.2020.03.05.16.10.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2020 16:10:12 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Mar 2020 21:09:39 -0300 Message-Id: <20200306000939.1823-1-jamrial@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/vp9: use a buffer pool to allocate VP9Frame extradata 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" Signed-off-by: James Almer --- libavcodec/vp9.c | 13 ++++++++++++- libavcodec/vp9dec.h | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 7aaae9b792..7ee375d4d0 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -112,10 +112,20 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) return ret; sz = 64 * s->sb_cols * s->sb_rows; - f->extradata = av_buffer_allocz(sz * (1 + sizeof(VP9mvrefPair))); + if (sz != s->frame_extradata_pool_size) { + av_buffer_pool_uninit(&s->frame_extradata_pool); + s->frame_extradata_pool = av_buffer_pool_init(sz * (1 + sizeof(VP9mvrefPair)), NULL); + if (!s->frame_extradata_pool) { + s->frame_extradata_pool_size = 0; + goto fail; + } + s->frame_extradata_pool_size = sz; + } + f->extradata = av_buffer_pool_get(s->frame_extradata_pool); if (!f->extradata) { goto fail; } + memset(f->extradata->data, 0, f->extradata->size); f->segmentation_map = f->extradata->data; f->mv = (VP9mvrefPair *) (f->extradata->data + sz); @@ -1210,6 +1220,7 @@ static av_cold int vp9_decode_free(AVCodecContext *avctx) vp9_frame_unref(avctx, &s->s.frames[i]); av_frame_free(&s->s.frames[i].tf.f); } + av_buffer_pool_uninit(&s->frame_extradata_pool); for (i = 0; i < 8; i++) { if (s->s.refs[i].f->buf[0]) ff_thread_release_buffer(avctx, &s->s.refs[i]); diff --git a/libavcodec/vp9dec.h b/libavcodec/vp9dec.h index 66573edc79..de02b146f0 100644 --- a/libavcodec/vp9dec.h +++ b/libavcodec/vp9dec.h @@ -152,6 +152,10 @@ typedef struct VP9Context { int block_alloc_using_2pass; uint16_t mvscale[3][2]; uint8_t mvstep[3][2]; + + // frame specific buffer pools + AVBufferPool *frame_extradata_pool; + int frame_extradata_pool_size; } VP9Context; struct VP9TileData {