Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avutil/opt: also print option names on parse error (PR #20348)
@ 2025-08-26 22:32 Marton Balint via ffmpeg-devel
  0 siblings, 0 replies; only message in thread
From: Marton Balint via ffmpeg-devel @ 2025-08-26 22:32 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

PR #20348 opened by Marton Balint (cus)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20348
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20348.patch

It is more user-friendly to print which option caused the parse error.

Signed-off-by: Marton Balint <cus@passwd.hu>


>From 94431f8b33bc7ed84069ed02bc0e09bd8e9bb58f Mon Sep 17 00:00:00 2001
From: Marton Balint <cus@passwd.hu>
Date: Wed, 27 Aug 2025 00:15:31 +0200
Subject: [PATCH] avutil/opt: also print option names on parse error

It is more user-friendly to print which option caused the parse error.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavutil/opt.c    | 16 ++++++++--------
 tests/ref/fate/opt | 28 ++++++++++++++--------------
 2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/libavutil/opt.c b/libavutil/opt.c
index 7a84a18bb5..fc5834e168 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -490,7 +490,7 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con
                 res = av_expr_parse_and_eval(&d, i ? buf : val, const_names,
                                             const_values, NULL, NULL, NULL, NULL, NULL, 0, obj);
                 if (res < 0) {
-                    av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", val);
+                    av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\"\n", o->name, val);
                     return res;
                 }
             }
@@ -522,7 +522,7 @@ static int set_string_image_size(void *obj, const AVOption *o, const char *val,
     }
     ret = av_parse_video_size(dst, dst + 1, val);
     if (ret < 0)
-        av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val);
+        av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as image size\n", o->name, val);
     return ret;
 }
 
@@ -530,7 +530,7 @@ static int set_string_video_rate(void *obj, const AVOption *o, const char *val,
 {
     int ret = av_parse_video_rate(dst, val);
     if (ret < 0)
-        av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as video rate\n", val);
+        av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as video rate\n", o->name, val);
     return ret;
 }
 
@@ -543,7 +543,7 @@ static int set_string_color(void *obj, const AVOption *o, const char *val, uint8
     } else {
         ret = av_parse_color(dst, val, -1, obj);
         if (ret < 0)
-            av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as color\n", val);
+            av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as color\n", o->name, val);
         return ret;
     }
     return 0;
@@ -583,7 +583,7 @@ static int set_string_bool(void *obj, const AVOption *o, const char *val, int *d
     return 0;
 
 fail:
-    av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as boolean\n", val);
+    av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as boolean\n", o->name, val);
     return AVERROR(EINVAL);
 }
 
@@ -601,7 +601,7 @@ static int set_string_fmt(void *obj, const AVOption *o, const char *val, uint8_t
             fmt = strtol(val, &tail, 0);
             if (*tail || (unsigned)fmt >= fmt_nb) {
                 av_log(obj, AV_LOG_ERROR,
-                       "Unable to parse option value \"%s\" as %s\n", val, desc);
+                       "Unable to parse \"%s\" option value \"%s\" as %s\n", o->name, val, desc);
                 return AVERROR(EINVAL);
             }
         }
@@ -724,7 +724,7 @@ static int opt_set_elem(void *obj, void *target_obj, const AVOption *o,
             int64_t usecs = 0;
             if (val) {
                 if ((ret = av_parse_time(&usecs, val, 1)) < 0) {
-                    av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as duration\n", val);
+                    av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as duration\n", o->name, val);
                     return ret;
                 }
             }
@@ -741,7 +741,7 @@ static int opt_set_elem(void *obj, void *target_obj, const AVOption *o,
     case AV_OPT_TYPE_CHLAYOUT:
         ret = set_string_channel_layout(obj, o, val, dst);
         if (ret < 0) {
-            av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as channel layout\n", val);
+            av_log(obj, AV_LOG_ERROR, "Unable to parse \"%s\" option value \"%s\" as channel layout\n", o->name, val);
             ret = AVERROR(EINVAL);
         }
         return ret;
diff --git a/tests/ref/fate/opt b/tests/ref/fate/opt
index b8812e3eff..1f82f7e4bd 100644
--- a/tests/ref/fate/opt
+++ b/tests/ref/fate/opt
@@ -231,7 +231,7 @@ Error 'foo==val'
 Setting options string 'toggle=:'
 Setting entry with key 'toggle' to value ''
 Undefined constant or missing '(' in ''
-Unable to parse option value ""
+Unable to parse "toggle" option value ""
 Error 'toggle=:'
 Setting options string 'string=:'
 Setting entry with key 'string' to value ''
@@ -247,7 +247,7 @@ Error 'toggle=100'
 Setting options string 'toggle==1'
 Setting entry with key 'toggle' to value '=1'
 Undefined constant or missing '(' in '=1'
-Unable to parse option value "=1"
+Unable to parse "toggle" option value "=1"
 Error 'toggle==1'
 Setting options string 'flags=+mu-lame : num=42: toggle=0'
 Setting entry with key 'flags' to value '+mu-lame'
@@ -275,7 +275,7 @@ Setting entry with key 'size' to value 'pal'
 OK    'size=pal'
 Setting options string 'size=bogus'
 Setting entry with key 'size' to value 'bogus'
-Unable to parse option value "bogus" as image size
+Unable to parse "size" option value "bogus" as image size
 Error 'size=bogus'
 Setting options string 'pix_fmt=yuv420p'
 Setting entry with key 'pix_fmt' to value 'yuv420p'
@@ -285,7 +285,7 @@ Setting entry with key 'pix_fmt' to value '2'
 OK    'pix_fmt=2'
 Setting options string 'pix_fmt=bogus'
 Setting entry with key 'pix_fmt' to value 'bogus'
-Unable to parse option value "bogus" as pixel format
+Unable to parse "pix_fmt" option value "bogus" as pixel format
 Error 'pix_fmt=bogus'
 Setting options string 'sample_fmt=s16'
 Setting entry with key 'sample_fmt' to value 's16'
@@ -295,7 +295,7 @@ Setting entry with key 'sample_fmt' to value '2'
 OK    'sample_fmt=2'
 Setting options string 'sample_fmt=bogus'
 Setting entry with key 'sample_fmt' to value 'bogus'
-Unable to parse option value "bogus" as sample format
+Unable to parse "sample_fmt" option value "bogus" as sample format
 Error 'sample_fmt=bogus'
 Setting options string 'video_rate=pal'
 Setting entry with key 'video_rate' to value 'pal'
@@ -312,11 +312,11 @@ OK    'video_rate=30/1.001'
 Setting options string 'video_rate=bogus'
 Setting entry with key 'video_rate' to value 'bogus'
 Undefined constant or missing '(' in 'bogus'
-Unable to parse option value "bogus" as video rate
+Unable to parse "video_rate" option value "bogus" as video rate
 Error 'video_rate=bogus'
 Setting options string 'duration=bogus'
 Setting entry with key 'duration' to value 'bogus'
-Unable to parse option value "bogus" as duration
+Unable to parse "duration" option value "bogus" as duration
 Error 'duration=bogus'
 Setting options string 'duration=123.45'
 Setting entry with key 'duration' to value '123.45'
@@ -338,7 +338,7 @@ Setting entry with key 'cl' to value 'FL+FR'
 OK    'cl=FL+FR'
 Setting options string 'cl=foo'
 Setting entry with key 'cl' to value 'foo'
-Unable to parse option value "foo" as channel layout
+Unable to parse "cl" option value "foo" as channel layout
 Error 'cl=foo'
 Setting options string 'bin=boguss'
 Setting entry with key 'bin' to value 'boguss'
@@ -352,7 +352,7 @@ 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"
+Unable to parse "num" option value "bogus"
 Error 'num=bogus'
 Setting options string 'num=44'
 Setting entry with key 'num' to value '44'
@@ -374,7 +374,7 @@ 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"
+Unable to parse "unum" option value "bogus"
 Error 'unum=bogus'
 Setting options string 'unum=44'
 Setting entry with key 'unum' to value '44'
@@ -396,7 +396,7 @@ Error 'unum=2147483649'
 Setting options string 'num64=bogus'
 Setting entry with key 'num64' to value 'bogus'
 Undefined constant or missing '(' in 'bogus'
-Unable to parse option value "bogus"
+Unable to parse "num64" option value "bogus"
 Error 'num64=bogus'
 Setting options string 'num64=44'
 Setting entry with key 'num64' to value '44'
@@ -421,7 +421,7 @@ Error 'num64=4294967297'
 Setting options string 'flt=bogus'
 Setting entry with key 'flt' to value 'bogus'
 Undefined constant or missing '(' in 'bogus'
-Unable to parse option value "bogus"
+Unable to parse "flt" option value "bogus"
 Error 'flt=bogus'
 Setting options string 'flt=2'
 Setting entry with key 'flt' to value '2'
@@ -440,7 +440,7 @@ Error 'flt=101'
 Setting options string 'dbl=bogus'
 Setting entry with key 'dbl' to value 'bogus'
 Undefined constant or missing '(' in 'bogus'
-Unable to parse option value "bogus"
+Unable to parse "dbl" option value "bogus"
 Error 'dbl=bogus'
 Setting options string 'dbl=2'
 Setting entry with key 'dbl' to value '2'
@@ -496,7 +496,7 @@ Error '5:size=pal:hello'
 Setting options string ':'
 Setting 'num' to value ''
 Undefined constant or missing '(' in ''
-Unable to parse option value ""
+Unable to parse "num" option value ""
 Error ':'
 Setting options string '='
 Setting '' to value ''
-- 
2.49.1

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-08-26 22:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-26 22:32 [FFmpeg-devel] [PATCH] avutil/opt: also print option names on parse error (PR #20348) Marton Balint via ffmpeg-devel

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git