From patchwork Tue May 3 00:09:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 35548 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp145198pzb; Mon, 2 May 2022 17:09:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx1f3MkKAUhNUWLNgBrB9nXspnzCfhdonLLG5RnI0gq8PwsWSaThjNEB2f/zUH/jnwK5EIv X-Received: by 2002:a17:907:608f:b0:6f3:671d:d2f9 with SMTP id ht15-20020a170907608f00b006f3671dd2f9mr12781541ejc.675.1651536563727; Mon, 02 May 2022 17:09:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651536563; cv=none; d=google.com; s=arc-20160816; b=JSolMX8VejSdFe13TwBmNm0NcPwmP47WuQI7itF60HpIJiaISXvTpj2h9AWRfAGKs3 lBEHe1FJgE9/pWQ+xJQFBhHUNtSOiI1oruywpQ05KhSac0jg9Gy321NEGv6NGhmQBZSG ExyBzanLuNANT5ul6U9y5B0NB5cz5sW82V/Q/BBZ+3usFBw3nm+MxaDPNJa5lSAp/UKY EuV5FzkVId1YHxOY3PB95l0fCxEhkAm7rWHOHc51dXkvqKpAsJ8vp2H9QRV+0IZRCw4Y 4WM+y8UkV3QoZGOg6k+lYrDHCTOnmo8ODiM2wAZyDbIyM3XeUy/k+w2uzL0i41VPzexO GHDA== 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:from:to:content-language:user-agent:mime-version :date:message-id:dkim-signature:delivered-to; bh=5WB58Fml14lw3JnypEKiNCqnRr1XN4p390xXqu4wgZ4=; b=on2uNr93d/tq52JcLRvMOrXGHTu5mCGtkSEzZKMlNyMR0AX/iQUoHBbW3Nr6ZXg2I8 jAO5+vQRnky0LNg3gZ2RLbCfYMbgcc+PyQ6770ldkPH3u8ligWRH2NmkNU65RxZpR0ET FyFPFUdogjKTe07YsTKcy7zfVr1fRqo4NCTMeH/gXI2k+Xo0w6Ce/L5UBeD8Yv7erThX MoKh621o7ZRu/OaRQYmwn2hFnJmQWYVCuyvZg6tIz9G/bOU1zOUT0PORcTRf0orP/0l8 l0mEfOuBPrqucfJOT+4EdH/A8BrKGbT+wZlGBi4pyHpynBfCia5Eu/dZbDjEMb80mPEF 7sGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20210112.gappssmtp.com header.s=20210112 header.b=A2x0aOld; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d4-20020a170906370400b006f42f5a3d3bsi5179317ejc.849.2022.05.02.17.09.22; Mon, 02 May 2022 17:09:23 -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=@jkqxz-net.20210112.gappssmtp.com header.s=20210112 header.b=A2x0aOld; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 041A868B281; Tue, 3 May 2022 03:09:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CBACD68B109 for ; Tue, 3 May 2022 03:09:13 +0300 (EEST) Received: by mail-wr1-f51.google.com with SMTP id x18so21426845wrc.0 for ; Mon, 02 May 2022 17:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20210112.gappssmtp.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:from :subject:content-transfer-encoding; bh=wgp7D6MOAfWbvb9Z4Z8NgjtkrraSsZ42DF3wawajkmI=; b=A2x0aOldBxFa1aR6KyDv5Vl8cJGy+CbOD4SH8L/Bz2Waufa8KrmF6MMmS2uUjeSvKD SZ7yXOV3ke2NhK4wC6jXfo+nmR2OCy2jBk5inJAgu9fJSowgFpmvhFrcc7vi0shOwO25 kWbEQi5yCmSqN0qqWbZVhDSzsjgUCV5s76AC+eJ4WCIV+geS9At/TSwfj7qkjMR4br2Y lbwldqYB0tsPmJrw3P6qAeICTkpPG96D5XDkvjxqXdOliMfCugvTgIAkMRX60MyyLDae VUFecRjnwB8BQyd/sAn++WKr9gN0vhgn5B6J4DSNqwvI2FSaSHOtjDJRsx26Ne2gSnF/ QYxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:from:subject:content-transfer-encoding; bh=wgp7D6MOAfWbvb9Z4Z8NgjtkrraSsZ42DF3wawajkmI=; b=0nBnz7FSIltZolGnSJjNpyR/SuhNQ/ce7jAAoG7c+jbjf2L7autcZzzSgQDVUSqk10 3xf2NC0uiDmFgqVgWpYuc4yshdhrV8dBYxtUF9tehyDBACZmH7HsjXG9WIjMC/jxCpvf SFd3T2ltJS06dkoXjEH8Z12lAuOM3yQKrEtp1AYdwKhMnoF0tu1qtnF9KngqIRuKLbJJ dNjlZ7LG7srVJdLqhCQuow4vVCy0jV1lb/fb6jxdEoSKO37wNtBPyj3JOAtyMpLYJxEd ryuv6ha4hp0q1arXl8fU1KTmVGnTVUDQExe82XuIdwduw6ONAvDJ1i9waAm/qRWX2Big uQHA== X-Gm-Message-State: AOAM533XpNUUK0ungoVzbiipuTFYHRfE3LTLbqbxltYVOMgVzLI4BnK+ fxUl0HyfITHTOp/a47v3ffJD7x3vPSgIWl7/ X-Received: by 2002:a5d:6d88:0:b0:20c:594d:6ac7 with SMTP id l8-20020a5d6d88000000b0020c594d6ac7mr8413351wrs.622.1651536553089; Mon, 02 May 2022 17:09:13 -0700 (PDT) Received: from [192.168.0.14] (cpc91222-cmbg18-2-0-cust46.5-4.cable.virginm.net. [81.106.30.47]) by smtp.gmail.com with ESMTPSA id h15-20020a05600c350f00b003942a244f53sm477344wmq.44.2022.05.02.17.09.12 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 02 May 2022 17:09:12 -0700 (PDT) Message-ID: Date: Tue, 3 May 2022 01:09:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Content-Language: en-US To: FFmpeg development discussions and patches From: Mark Thompson Subject: [FFmpeg-devel] [PATCH] hwcontext: Skip derivation checking for an existing device if options are set 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: MEbYebKg+u1r If options are set then the user definitely intends to create a new device, so we shouldn't attempt to return an existing one. --- libavutil/hwcontext.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c index ab9ad3703e..c4e01e0e78 100644 --- a/libavutil/hwcontext.c +++ b/libavutil/hwcontext.c @@ -653,18 +653,24 @@ int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ref_ptr, AVHWDeviceContext *dst_ctx, *tmp_ctx; int ret = 0; - tmp_ref = src_ref; - while (tmp_ref) { - tmp_ctx = (AVHWDeviceContext*)tmp_ref->data; - if (tmp_ctx->type == type) { - dst_ref = av_buffer_ref(tmp_ref); - if (!dst_ref) { - ret = AVERROR(ENOMEM); - goto fail; + // If we were derived (possibly transitively) from a device of the + // target type then we want to return that original device, unless + // options are set in which case we can skip this check because it + // is definitely intended to create a new device. + if (!options) { + tmp_ref = src_ref; + while (tmp_ref) { + tmp_ctx = (AVHWDeviceContext*)tmp_ref->data; + if (tmp_ctx->type == type) { + dst_ref = av_buffer_ref(tmp_ref); + if (!dst_ref) { + ret = AVERROR(ENOMEM); + goto fail; + } + goto done; } - goto done; + tmp_ref = tmp_ctx->internal->source_device; } - tmp_ref = tmp_ctx->internal->source_device; } dst_ref = av_hwdevice_ctx_alloc(type);