From patchwork Thu Oct 17 23:18:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 15834 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 2B9D24484FA for ; Fri, 18 Oct 2019 02:19:45 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 06A6E68ABCC; Fri, 18 Oct 2019 02:19:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD85368A0FB for ; Fri, 18 Oct 2019 02:19:38 +0300 (EEST) Received: by mail-qt1-f193.google.com with SMTP id 3so6289101qta.1 for ; Thu, 17 Oct 2019 16:19:38 -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=2pmTelycpt/g3JPjFCbisnbuO4yJ+RodW6k1BsgcWFI=; b=pk12V+Ufa8Jam8uL9YAosXMkvzj5HZ1GFdQPSBl5/TbqwsTYnrkGFSk7w6Koxwap0r hT9oexFDnO9PVk7dU33OQU+Vr+wQT9E6NLc6nKMLrTa1wccO0eyocA1Hdw6IYs20vgNG 8qkBqi7nrRhWkCeYyw50JvMJe0dIP3XbTYeFG3lqcN8zB70sa5g7NxqGzQqG/PdIBRY4 IgZHm1ZKKRaHdAK44rv7qO5Vh2aAYZKc6V/wY2x1IjLvia0TNroqiCitaK6rzYUWtv3J SfjvtQtIv9dWDjhtKflryQY1b3MZCOSnK89tjz/5aG0RZDXKvnj7HUDo3zosJZFFXOBT VzSQ== 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=2pmTelycpt/g3JPjFCbisnbuO4yJ+RodW6k1BsgcWFI=; b=i/MN9fzaGECPgFTkUU+4tNskf1Ian0aAud3LIUvUkbssPk1kRrBpBAXn1pIxponWpf dEPkFYykRUdnrS8IcodXJDTIV5tYwo0Z3HqEEk0cka8YfODK3PxLaZQLw90xrGjv00vy s8RP36kZGueQedNwi756jNoAKY1odoOP6dSUlY/IUcHkZRTLeBUpYPS+pxU30JVYSK4a VV1BfeClJbO2L6xYTPd0SeobKZ1TjNUytUi3rbFngp/pttOQAzxq/q2TnkgZVlykxTNM vvFYdxEVxyuplK8E6UyELsy/GsE/P/SqmR/5EvLQxeMwqSV/3gDhZsKRpjTqAhIg2U5v V7Vw== X-Gm-Message-State: APjAAAW8v7Zb2s6+wpihs6c6qbbpASYYbDtsZyfg1Bd3rzm5mvExQ5Hm kxDM3Mt5HVm5uGGGkmOS4hiM3omq X-Google-Smtp-Source: APXvYqySPnR8GonjqZaYnovudXSMqNj//RCQf3GzVOmx1bFB5L7065qj5D+on7kv7z09JyoXWYLwAw== X-Received: by 2002:ac8:fbd:: with SMTP id b58mr6901230qtk.236.1571354377592; Thu, 17 Oct 2019 16:19:37 -0700 (PDT) Received: from localhost.localdomain ([191.83.221.234]) by smtp.gmail.com with ESMTPSA id i185sm1721555qkc.129.2019.10.17.16.19.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 16:19:37 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Oct 2019 20:18:47 -0300 Message-Id: <20191017231847.6426-1-jamrial@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191017201103.3092-1-jamrial@gmail.com> References: <20191017201103.3092-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/libdav1d: fix setting AVFrame reordered_opaque 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" Actually reorder the values. Should effectively fix ticket #8300. Signed-off-by: James Almer --- Now unconditionally propagating the field, since checking its value is not correct usage of the field. libavcodec/libdav1d.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index 8aa248e6cd..1793c9e4f0 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -164,6 +164,11 @@ static void libdav1d_data_free(const uint8_t *data, void *opaque) { av_buffer_unref(&buf); } +static void libdav1d_user_data_free(const uint8_t *data, void *opaque) { + av_assert2(data == opaque); + av_free(opaque); +} + static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) { Libdav1dContext *dav1d = c->priv_data; @@ -179,6 +184,8 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) return res; if (pkt.size) { + uint8_t *reordered_opaque; + res = dav1d_data_wrap(data, pkt.data, pkt.size, libdav1d_data_free, pkt.buf); if (res < 0) { av_packet_unref(&pkt); @@ -191,6 +198,21 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) pkt.buf = NULL; av_packet_unref(&pkt); + + reordered_opaque = av_malloc(sizeof(c->reordered_opaque)); + if (!reordered_opaque) { + dav1d_data_unref(data); + return AVERROR(ENOMEM); + } + + memcpy(reordered_opaque, &c->reordered_opaque, sizeof(c->reordered_opaque)); + res = dav1d_data_wrap_user_data(data, reordered_opaque, + libdav1d_user_data_free, reordered_opaque); + if (res < 0) { + av_free(reordered_opaque); + dav1d_data_unref(data); + return res; + } } } @@ -260,7 +282,8 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) else frame->format = c->pix_fmt = pix_fmt[p->p.layout][p->seq_hdr->hbd]; - frame->reordered_opaque = c->reordered_opaque; + av_assert0(p->m.user_data.data); + memcpy(&frame->reordered_opaque, p->m.user_data.data, sizeof(frame->reordered_opaque)); // match timestamps and packet size frame->pts = frame->best_effort_timestamp = p->m.timestamp;