From patchwork Tue Feb 27 13:59:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 46569 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp2007240pzb; Tue, 27 Feb 2024 06:00:17 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVORwY00H0Zbvpf3r2a5keZxhD4h1GM7rnv9nWPlVjZtPcxmaENdMPJa4L+/0+H4c+QQ+NdMwlcqpPx6Vb+K5+NZsnhYvpybmbeMA== X-Google-Smtp-Source: AGHT+IFOKbNxC+R2dfRIzWJyjL3so4Hf+gO/vtP7z2/yMohygHsRbpcM3JF53/tjATQ9Z1TuFGN6 X-Received: by 2002:a17:906:6b8d:b0:a43:c0f7:d2c9 with SMTP id l13-20020a1709066b8d00b00a43c0f7d2c9mr1005584ejr.47.1709042417465; Tue, 27 Feb 2024 06:00:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1709042417; cv=none; d=google.com; s=arc-20160816; b=fd12LA3A0YiSMN7QgSkM1Bebh6kzpC0WFS0r5j+ebVgbEIAuVwNStFOs1ao9RsC7Ow swNqHuRYYf12PpcnmH/mhvhZLk+a700cz2JfpiTs+t7Sp28Qs3GzArnCQDaitzVzBZZg qzhKzqG5coWhCGU356i8RJxvsB6M64Kuu958wt18Pf/8J74zR7g5U3+rh9+kRHnRLkEg bBfcjxYfVteeuGz8MpLZg7PnhsKwD4oj5VjBBi6c4Da5gwV4lAvhynjOp/quPPfrj70R nDw75X8DAgfAN2LjCtFLqPlOoiFXVnCEpnZTUNT5QaIWh9PSReBbMx51x5Gq/C12Baf0 8Hrg== 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=aK4gYM3kRLy4ClkUsPKzbOQR8td1l0Q9xkuMFNxLBSM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=fUNcGb/UAfWfBzKpNpeGTZDOhEQAk+OAreBWihXpOxk0EPXyTC811XK2unH8KezR16 D/UJd0fJc1d5noI0yzIW6wEKfK4Ek0k4pZU8pqDpHDy1+Lj1kK1CiYjnmZGcnhVsvQGK 5fzbcLgjE41JuYWkQi7HfLUY12NWJenbtMddhRnA1UIZ7fbSz4C/V68FNSUA2BzE/l7Q NoA/7Hns6HfZafLZZsUNrfRCN7gEf1qxYh/uRSqceA2EYlNUaONHxY0yD5XOHvPtzgMC t+DEwlGhfGnNEajLUANT6RFZmKANsT2JbxMQUSqm0AQxicqDgZJ0gh/0dhhQ4u9v83/e MVRA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=KR6RF7Df; 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 c15-20020a170906340f00b00a42fabfde5dsi705541ejb.462.2024.02.27.06.00.17; Tue, 27 Feb 2024 06:00:17 -0800 (PST) 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=20230601 header.b=KR6RF7Df; 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 8424F68CABB; Tue, 27 Feb 2024 16:00:13 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 943A5680BEC for ; Tue, 27 Feb 2024 16:00:06 +0200 (EET) Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1dc3b4b9b62so36693505ad.1 for ; Tue, 27 Feb 2024 06:00:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709042404; x=1709647204; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=Ej9fVeStnHYibLgD72cmYY+/MYGg+b0+0lPuPGpeAWk=; b=KR6RF7DfzV3lpWqp49T6/CQCFjgGxVYrk4sLmDKZ2tLuHZNpJx0ckrwEhkJJJiXMTC 0XK/HxazmvVP9MhOQXQVsmUmRq3X+rlEu4yobrc6/MnKWYGxwCx+t4TXdOd9u7jbZccM i14TRThKEuyuqaHCnfNRYgeZFi9tEgGGD5IwqNvHZnAzydq02kGpeMTpTE//lmfZLXnk 1MlZM+1i1qCVO169gN1NvOjF2vcgCXDX7D+sWJtsnVu9WEBIsEt5Kt8JXlgs25SZdPu+ i0mq2+y7mMO6wknKYw09c54nZZlHPxtZT1clBToeUeL55s8+quiwmJQfCtvEw3ddLf5G M0BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709042404; x=1709647204; 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=Ej9fVeStnHYibLgD72cmYY+/MYGg+b0+0lPuPGpeAWk=; b=c275uHPoZbZNOJROaZCg4gdvNySb58ZvPH7Y5g60AaAg4ac+zr5REGXUPbeTwQSvmR +VAct3qeyar4RxbmW1II8Fe7KVOTqyOZD/7deNQYAdE/oYO5enwIyqZyedtAf8mbHs1U BhlX5saXPEzOp7h5zRzZZLV41vW82QvM65udgObdpUb1JNgWK5hKEkRmMstxUpUiYpi5 DoAj7wNnlpN9+atelly7Mwr4gxeQ/QDRM/Mo61P/g5u8qeGQqKL9XpB6y/R2HHlRhvJs mIMPG3L03fXIrI1CzEnitKlhf6BlnLh6espIZEfKPnJ8b2zmILzlQ/TJ3sZeCqZ44iMM YMUg== X-Gm-Message-State: AOJu0YyaSJaCfEO9COiFneyTZXevCLEpKNfnFBHbEq+PAsZFdQQuSOBB xjHtw6wohxPc/Um0mPW/sBbB/siJ+V4TZYbI65q2Lluv4vLR0RQ73rd1QngV X-Received: by 2002:a17:902:7ed7:b0:1dc:b968:780e with SMTP id p23-20020a1709027ed700b001dcb968780emr1658029plb.33.1709042403348; Tue, 27 Feb 2024 06:00:03 -0800 (PST) Received: from localhost.localdomain ([190.194.169.124]) by smtp.gmail.com with ESMTPSA id g24-20020a170902fe1800b001db3bffd1a8sm1564154plj.42.2024.02.27.06.00.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 06:00:02 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Feb 2024 10:59:46 -0300 Message-ID: <20240227135947.503-1-jamrial@gmail.com> X-Mailer: git-send-email 2.43.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avutil/tests/opt: test negative values for INT and INT64 types 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: rnf0FPwodUk+ Signed-off-by: James Almer --- libavutil/tests/opt.c | 11 +++++++++-- tests/ref/fate/opt | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/libavutil/tests/opt.c b/libavutil/tests/opt.c index e2582cc93d..a914d0359a 100644 --- a/libavutil/tests/opt.c +++ b/libavutil/tests/opt.c @@ -66,7 +66,7 @@ typedef struct TestContext { #define TEST_FLAG_MU 04 static const AVOption test_options[]= { - {"num", "set num", OFFSET(num), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 100, 1 }, + {"num", "set num", OFFSET(num), AV_OPT_TYPE_INT, { .i64 = 0 }, -1, 100, 1 }, {"toggle", "set toggle", OFFSET(toggle), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, 1 }, {"rational", "set rational", OFFSET(rational), AV_OPT_TYPE_RATIONAL, { .dbl = 1 }, 0, 10, 1 }, {"string", "set string", OFFSET(string), AV_OPT_TYPE_STRING, { .str = "default" }, CHAR_MIN, CHAR_MAX, 1 }, @@ -85,7 +85,7 @@ static const AVOption test_options[]= { {"bin", "set binary value", OFFSET(binary), AV_OPT_TYPE_BINARY, { .str="62696e00" }, 0, 0, 1 }, {"bin1", "set binary value", OFFSET(binary1), AV_OPT_TYPE_BINARY, { .str=NULL }, 0, 0, 1 }, {"bin2", "set binary value", OFFSET(binary2), AV_OPT_TYPE_BINARY, { .str="" }, 0, 0, 1 }, - {"num64", "set num 64bit", OFFSET(num64), AV_OPT_TYPE_INT64, { .i64 = 1 }, 0, 100, 1 }, + {"num64", "set num 64bit", OFFSET(num64), AV_OPT_TYPE_INT64, { .i64 = 1 }, -1, 100, 1 }, {"flt", "set float", OFFSET(flt), AV_OPT_TYPE_FLOAT, { .dbl = 1.0 / 3 }, 0, 100, 1 }, {"dbl", "set double", OFFSET(dbl), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 / 3 }, 0, 100, 1 }, {"bool1", "set boolean value", OFFSET(bool1), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, 1 }, @@ -285,10 +285,17 @@ int main(void) "bin=boguss", "bin=111", "bin=ffff", + "num=bogus", + "num=44", + "num=44.4", + "num=-1", + "num=-2", + "num=101", "num64=bogus", "num64=44", "num64=44.4", "num64=-1", + "num64=-2", "num64=101", "flt=bogus", "flt=2", diff --git a/tests/ref/fate/opt b/tests/ref/fate/opt index 832f9cc8a9..2da155aa2b 100644 --- a/tests/ref/fate/opt +++ b/tests/ref/fate/opt @@ -18,7 +18,7 @@ num64=1 flt=0.333333 dbl=0.333333 TestContext AVOptions: - -num E.......... set num (from 0 to 100) (default 0) + -num E.......... set num (from -1 to 100) (default 0) -toggle E.......... set toggle (from 0 to 1) (default 1) -rational E.......... set rational (from 0 to 10) (default 1/1) -string E.......... set string (default "default") @@ -37,7 +37,7 @@ TestContext AVOptions: -bin E.......... set binary value -bin1 E.......... set binary value -bin2 E.......... set binary value - -num64 E.......... set num 64bit (from 0 to 100) (default 1) + -num64 E.......... set num 64bit (from -1 to 100) (default 1) -flt E.......... set float (from 0 to 100) (default 0.333333) -dbl E.......... set double (from 0 to 100) (default 0.333333) -bool1 E.......... set boolean value (default auto) @@ -312,6 +312,28 @@ Error 'bin=111' Setting options string 'bin=ffff' Setting entry with key 'bin' to value 'ffff' OK 'bin=ffff' +Setting options string 'num=bogus' +Setting entry with key 'num' to value 'bogus' +Undefined constant or missing '(' in 'bogus' +Unable to parse option value "bogus" +Error 'num=bogus' +Setting options string 'num=44' +Setting entry with key 'num' to value '44' +OK 'num=44' +Setting options string 'num=44.4' +Setting entry with key 'num' to value '44.4' +OK 'num=44.4' +Setting options string 'num=-1' +Setting entry with key 'num' to value '-1' +OK 'num=-1' +Setting options string 'num=-2' +Setting entry with key 'num' to value '-2' +Value -2.000000 for parameter 'num' out of range [-1 - 100] +Error 'num=-2' +Setting options string 'num=101' +Setting entry with key 'num' to value '101' +Value 101.000000 for parameter 'num' out of range [-1 - 100] +Error 'num=101' Setting options string 'num64=bogus' Setting entry with key 'num64' to value 'bogus' Undefined constant or missing '(' in 'bogus' @@ -325,11 +347,14 @@ Setting entry with key 'num64' to value '44.4' OK 'num64=44.4' Setting options string 'num64=-1' Setting entry with key 'num64' to value '-1' -Value -1.000000 for parameter 'num64' out of range [0 - 100] -Error 'num64=-1' +OK 'num64=-1' +Setting options string 'num64=-2' +Setting entry with key 'num64' to value '-2' +Value -2.000000 for parameter 'num64' out of range [-1 - 100] +Error 'num64=-2' Setting options string 'num64=101' Setting entry with key 'num64' to value '101' -Value 101.000000 for parameter 'num64' out of range [0 - 100] +Value 101.000000 for parameter 'num64' out of range [-1 - 100] Error 'num64=101' Setting options string 'flt=bogus' Setting entry with key 'flt' to value 'bogus' From patchwork Tue Feb 27 13:59:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 46570 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp2007426pzb; Tue, 27 Feb 2024 06:00:30 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVRUwHiUVITQHyKveqMzAUCXCQ22FV73GvdMIT7snvSiJufW2XYv/Wnky/nugIyLn2Ix4qzErxS91Mo4h679VdL8oarSYRIXzxEyA== X-Google-Smtp-Source: AGHT+IG0k0LcWROqoCyo1CHQfSZria/+j6g0O9krcag7D5MGv92T+JN0EvLE1LEQUIQLNyC7jIqr X-Received: by 2002:aa7:c450:0:b0:566:aa2:e030 with SMTP id n16-20020aa7c450000000b005660aa2e030mr2918935edr.42.1709042430111; Tue, 27 Feb 2024 06:00:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1709042430; cv=none; d=google.com; s=arc-20160816; b=q9JIBfYZ9QXLoCEe38IG8Kbm5vZ82i0B8zpNs3y3i54VXbUuH7k5+iJX5f7Zf/DsxG 0X7uxMjN4cc9/7d4vvxqa/O73p8rqVv6XwMMS9N9o4TFosClRAZ+zMlJKv4cHY4sau46 +N5EkCkN+qlpeVc4UqJi9I0hxYbZm7sjcbwccw1GnoOe1SCRs9thrGOBETMetYx//2c5 2cf1e2vtOB6Wz6An3nnkF6YsPUSs8vyPSmhDMeujcqlRnXznQ2HX1MbSkQf+qI3+lOVZ hXLaDljqvfOE+oPaUnK3OEw4YzgfwhmmUMFjMNjCSJbOinDzOUMSAeHXguy9aeBsF7Ww RILg== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=UTKKuwQw+jClyxgapThylANYomj8PRkcsp/TifzTeFQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZeiBiZQNR4sYV/qE3HG+4wTK3Q1olJkXBEfaIJPuirtRB4hmE53pV0qvrgBb4zekAz 1iRKLfX02sZqj6SVC98BScpqZW/oU+ropQb9MOFbQyFNRx0B65HOqpOlHNAnvxWc5O/f nCEZVncLdJKBFIH+LrkVJMTAWLrICLT0w74lkI99RqKkbZ3vbJQzzwBwYli2PCwXu31b k4MaRwQZn4umy5L9xQbXVMLA70M3uazNgOygm7tjD08aoj5+97NY15UHcqlAo0tg9MIV hYnAcTUpoyjYdY/trvRc/tXH/xusk2hAwl5cpXg6SL6ZY1JLwM2tEfZI4Du1BvuAwFSM mp1Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=N95aE+yg; 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 cz27-20020a0564021cbb00b005641a3140b6si735220edb.299.2024.02.27.06.00.27; Tue, 27 Feb 2024 06:00:30 -0800 (PST) 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=20230601 header.b=N95aE+yg; 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 AA6A468CBC4; Tue, 27 Feb 2024 16:00:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F0611688301 for ; Tue, 27 Feb 2024 16:00:07 +0200 (EET) Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1dcab44747bso15224555ad.1 for ; Tue, 27 Feb 2024 06:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709042406; x=1709647206; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=o3p4vNs5mXJWzZKmHoe5qi6CFmBNEDQeSCvN8OAcTXU=; b=N95aE+ygOfamaGDp9R+jYNDvlkkjD9sP6WYEqN45n7+7pSqGsaDDLk0eTXdCVfh+Jc m14M5NwNHEvuygYEUJ0oNfLDBrr4BypIjizYF8+URb7z2XAGsfXfjYdbr4jcVJPekAHX 3tywITFyDlqgek2M6bGUKg+fhPbDx7t8MyU6fSDgaN1VpgWg9BwDDCnWlwjpYgNZ+2CQ hr5iKS9kkflhgC0lnmS6z645y2bGwnCrD7tjxL2484nmWPajDv9gWTeHTbQ4tRCGCxuO 9IHrfep89HJ4R3ilhzVLXAmxeZvuH8f+YrOj/0go6Vi9Yh5vkIuUvHD6gUcpOsfFK1ZG 5Sqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709042406; x=1709647206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o3p4vNs5mXJWzZKmHoe5qi6CFmBNEDQeSCvN8OAcTXU=; b=Os2JSeDmqYPtUtI8Me2kImrODCDkT2/4zDp05t+alkJsQQFZQAnEMvtFShcGvWNEJe bfeLVemZkvgu75B+m4bE5955zg/5/KhFhH8JcSE3cnNsZQGTMklOBaFAkbae3a7Ew8E9 phkme+fpSykWI0rlOyGV6FaQXNIyj7nZRLFkRXMf19DF6YA7/EUURbMnS2+CTdLoj6ud uI8yptBz2Cz3rxSR1a1tI6L2AqRm7JnuRi1OHeC8R3HlUONZrwQvM6jTjFOYUzvli4FG 5PfRMvdTzpDD2wmImyZnpypBrehJFIfSmpo5rSdBEyAPppz1b01puHtxaF9q0UqOdWk+ LfsA== X-Gm-Message-State: AOJu0Ywtclf2JhXdAqEBDLJbiGX5nmJN0B86YjoUn2OLD0Yfgqv5DqrS qjpN9Q6ucs75wQGHbg3h1mZHA9+u/eXsJlcpRHFbOi4kzBm4F3I+SIUMggxh X-Received: by 2002:a17:902:ced0:b0:1dc:a836:1e07 with SMTP id d16-20020a170902ced000b001dca8361e07mr5000925plg.0.1709042405340; Tue, 27 Feb 2024 06:00:05 -0800 (PST) Received: from localhost.localdomain ([190.194.169.124]) by smtp.gmail.com with ESMTPSA id g24-20020a170902fe1800b001db3bffd1a8sm1564154plj.42.2024.02.27.06.00.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 06:00:04 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Feb 2024 10:59:47 -0300 Message-ID: <20240227135947.503-2-jamrial@gmail.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240227135947.503-1-jamrial@gmail.com> References: <20240227135947.503-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avutil/opt: add an unsigned option type 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: NZVGY+k6t8oJ Signed-off-by: James Almer --- libavutil/opt.c | 20 ++++++++++++++++++++ libavutil/opt.h | 1 + libavutil/tests/opt.c | 9 +++++++++ tests/ref/fate/opt | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 0681b19896..45d6aa5849 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -72,6 +72,9 @@ static int read_number(const AVOption *o, const void *dst, double *num, int *den case AV_OPT_TYPE_INT: *intnum = *(int *)dst; return 0; + case AV_OPT_TYPE_UINT: + *intnum = *(unsigned *)dst; + return 0; #if FF_API_OLD_CHANNEL_LAYOUT FF_DISABLE_DEPRECATION_WARNINGS case AV_OPT_TYPE_CHANNEL_LAYOUT: @@ -130,6 +133,9 @@ static int write_number(void *obj, const AVOption *o, void *dst, double num, int case AV_OPT_TYPE_INT: *(int *)dst = llrint(num / den) * intnum; break; + case AV_OPT_TYPE_UINT: + *(unsigned *)dst = llrint(num / den) * intnum; + break; case AV_OPT_TYPE_DURATION: #if FF_API_OLD_CHANNEL_LAYOUT FF_DISABLE_DEPRECATION_WARNINGS @@ -231,6 +237,7 @@ static int set_string(void *obj, const AVOption *o, const char *val, uint8_t **d opt->type == AV_OPT_TYPE_UINT64 || \ opt->type == AV_OPT_TYPE_CONST || \ opt->type == AV_OPT_TYPE_FLAGS || \ + opt->type == AV_OPT_TYPE_UINT || \ opt->type == AV_OPT_TYPE_INT) \ ? opt->default_val.i64 \ : opt->default_val.dbl) @@ -529,6 +536,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return set_string_binary(obj, o, val, dst); case AV_OPT_TYPE_FLAGS: case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_INT64: case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_FLOAT: @@ -871,6 +879,9 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) case AV_OPT_TYPE_INT: ret = snprintf(buf, sizeof(buf), "%d", *(int *)dst); break; + case AV_OPT_TYPE_UINT: + ret = snprintf(buf, sizeof(buf), "%u", *(unsigned int *)dst); + break; case AV_OPT_TYPE_INT64: ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t *)dst); break; @@ -1276,6 +1287,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, case AV_OPT_TYPE_INT: av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); break; + case AV_OPT_TYPE_UINT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; case AV_OPT_TYPE_INT64: av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); break; @@ -1358,6 +1372,7 @@ FF_ENABLE_DEPRECATION_WARNINGS if (av_opt_query_ranges(&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0) { switch (opt->type) { case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_INT64: case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_DOUBLE: @@ -1405,6 +1420,7 @@ FF_ENABLE_DEPRECATION_WARNINGS av_log(av_log_obj, AV_LOG_INFO, "%s", buf); break; } + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_INT: case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_INT64: { @@ -1490,6 +1506,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) case AV_OPT_TYPE_BOOL: case AV_OPT_TYPE_FLAGS: case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_INT64: case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_DURATION: @@ -1858,6 +1875,7 @@ static int opt_size(enum AVOptionType type) switch(type) { case AV_OPT_TYPE_BOOL: case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_FLAGS: return sizeof(int); case AV_OPT_TYPE_DURATION: @@ -1997,6 +2015,7 @@ int av_opt_query_ranges_default(AVOptionRanges **ranges_arg, void *obj, const ch switch (field->type) { case AV_OPT_TYPE_BOOL: case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: case AV_OPT_TYPE_INT64: case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_PIXEL_FMT: @@ -2089,6 +2108,7 @@ int av_opt_is_set_to_default(void *obj, const AVOption *o) case AV_OPT_TYPE_PIXEL_FMT: case AV_OPT_TYPE_SAMPLE_FMT: case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT: #if FF_API_OLD_CHANNEL_LAYOUT FF_DISABLE_DEPRECATION_WARNINGS case AV_OPT_TYPE_CHANNEL_LAYOUT: diff --git a/libavutil/opt.h b/libavutil/opt.h index 461b5d3b6b..9fec1b0509 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -243,6 +243,7 @@ enum AVOptionType{ #endif AV_OPT_TYPE_BOOL, AV_OPT_TYPE_CHLAYOUT, + AV_OPT_TYPE_UINT, }; /** diff --git a/libavutil/tests/opt.c b/libavutil/tests/opt.c index a914d0359a..747042896f 100644 --- a/libavutil/tests/opt.c +++ b/libavutil/tests/opt.c @@ -31,6 +31,7 @@ typedef struct TestContext { const AVClass *class; int num; + unsigned unum; int toggle; char *string; int flags; @@ -67,6 +68,7 @@ typedef struct TestContext { static const AVOption test_options[]= { {"num", "set num", OFFSET(num), AV_OPT_TYPE_INT, { .i64 = 0 }, -1, 100, 1 }, + {"unum", "set unum", OFFSET(unum), AV_OPT_TYPE_UINT, { .i64 = 1 }, 0, INT_MAX + 1U, 1 }, {"toggle", "set toggle", OFFSET(toggle), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, 1 }, {"rational", "set rational", OFFSET(rational), AV_OPT_TYPE_RATIONAL, { .dbl = 1 }, 0, 10, 1 }, {"string", "set string", OFFSET(string), AV_OPT_TYPE_STRING, { .str = "default" }, CHAR_MIN, CHAR_MAX, 1 }, @@ -127,6 +129,7 @@ int main(void) av_opt_set_defaults(&test_ctx); printf("num=%d\n", test_ctx.num); + printf("unum=%u\n", test_ctx.unum); printf("toggle=%d\n", test_ctx.toggle); printf("string=%s\n", test_ctx.string); printf("escape=%s\n", test_ctx.escape); @@ -291,6 +294,12 @@ int main(void) "num=-1", "num=-2", "num=101", + "unum=bogus", + "unum=44", + "unum=44.4", + "unum=-1", + "unum=2147483648", + "unum=2147483649", "num64=bogus", "num64=44", "num64=44.4", diff --git a/tests/ref/fate/opt b/tests/ref/fate/opt index 2da155aa2b..c753142992 100644 --- a/tests/ref/fate/opt +++ b/tests/ref/fate/opt @@ -1,5 +1,6 @@ Testing default values num=0 +unum=1 toggle=1 string=default escape=\=, @@ -19,6 +20,7 @@ flt=0.333333 dbl=0.333333 TestContext AVOptions: -num E.......... set num (from -1 to 100) (default 0) + -unum E.......... set unum (from 0 to 2.14748e+09) (default 1) -toggle E.......... set toggle (from 0 to 1) (default 1) -rational E.......... set rational (from 0 to 10) (default 1/1) -string E.......... set string (default "default") @@ -48,6 +50,7 @@ TestContext AVOptions: Testing av_opt_is_set_to_default() name: num default:1 error: +name: unum default:0 error: name: toggle default:0 error: name: rational default:0 error: name: string default:0 error: @@ -75,6 +78,7 @@ name: bool3 default:1 error: name: dict1 default:1 error: name: dict2 default:0 error: name: num default:1 error: +name: unum default:1 error: name: toggle default:1 error: name: rational default:1 error: name: string default:1 error: @@ -104,6 +108,7 @@ name: dict2 default:1 error: Testing av_opt_get/av_opt_set() name: num get: 0 set: OK get: 0 OK +name: unum get: 1 set: OK get: 1 OK name: toggle get: 1 set: OK get: 1 OK name: rational get: 1/1 set: OK get: 1/1 OK name: string get: default set: OK get: default OK @@ -129,8 +134,9 @@ name: dict1 get: set: OK get: name: dict2 get: happy=\:-) set: OK get: happy=\:-) OK Test av_opt_serialize() -num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) +num=0,unum=1,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) Setting entry with key 'num' to value '0' +Setting entry with key 'unum' to value '1' Setting entry with key 'toggle' to value '1' Setting entry with key 'rational' to value '1/1' Setting entry with key 'string' to value 'default' @@ -154,7 +160,7 @@ Setting entry with key 'bool2' to value 'true' Setting entry with key 'bool3' to value 'false' Setting entry with key 'dict1' to value '' Setting entry with key 'dict2' to value 'happy=\:-)' -num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) +num=0,unum=1,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) Testing av_set_options_string() Setting options string '' @@ -334,6 +340,28 @@ Setting options string 'num=101' Setting entry with key 'num' to value '101' Value 101.000000 for parameter 'num' out of range [-1 - 100] Error 'num=101' +Setting options string 'unum=bogus' +Setting entry with key 'unum' to value 'bogus' +Undefined constant or missing '(' in 'bogus' +Unable to parse option value "bogus" +Error 'unum=bogus' +Setting options string 'unum=44' +Setting entry with key 'unum' to value '44' +OK 'unum=44' +Setting options string 'unum=44.4' +Setting entry with key 'unum' to value '44.4' +OK 'unum=44.4' +Setting options string 'unum=-1' +Setting entry with key 'unum' to value '-1' +Value -1.000000 for parameter 'unum' out of range [0 - 2.14748e+09] +Error 'unum=-1' +Setting options string 'unum=2147483648' +Setting entry with key 'unum' to value '2147483648' +OK 'unum=2147483648' +Setting options string 'unum=2147483649' +Setting entry with key 'unum' to value '2147483649' +Value 2147483649.000000 for parameter 'unum' out of range [0 - 2.14748e+09] +Error 'unum=2147483649' Setting options string 'num64=bogus' Setting entry with key 'num64' to value 'bogus' Undefined constant or missing '(' in 'bogus'