summaryrefslogtreecommitdiff
path: root/fftools/cmdutils.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-08-12 17:35:37 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-08-20 12:52:33 +0200
commitd53d48c7993fe2e9ffcc4a638ebd2f4c5273c144 (patch)
tree198576c72a2f125c777cb6d197938b1c62b15993 /fftools/cmdutils.c
parentc83a7dd25fdf9636e7e5da3fad5e0d82035b9c86 (diff)
downloadffmpeg-d53d48c7993fe2e9ffcc4a638ebd2f4c5273c144.tar.gz
fftools/cmdutils: Use avfilter_pad_count() for AVFilter's number of pads
Besides being nicer code this also has the advantage of not making assumptions about the internal implementation: While it is documented that the AVFilter.inputs and AVFilter.outputs arrays are terminated by a zeroed sentinel, one is not allowed to infer that one can just check avfilter_pad_get_name(padarray, i) to see whether one has reached the sentinel: It could be that the pointer to the string is contained in a different structure than AVFilterPad that needs to be accessed first: return pad->struct->string. It could be that for small strings an internal buffer in AVFilterPad is used (to avoid a relocation) whereas for longer strings an external string is used; this is useful to avoid relocations: return pad->string_ptr ? pad->string_ptr : pad->interal_string Or it could be that the name has a default value: return pad->name ? pad->name : "default" (This actually made sense for us because the name of most of our AVFilterPads is just "default"; doing so would save lots of relocations.) The only thing one is allowed to infer from the existence of the sentinel is that one is allowed to use avfilter_pad_count() to get the number of pads. Therefore it is used. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'fftools/cmdutils.c')
-rw-r--r--fftools/cmdutils.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 6d0bcd6085..96d38803df 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -1707,12 +1707,14 @@ int show_filters(void *optctx, const char *opt, const char *arg)
while ((filter = av_filter_iterate(&opaque))) {
descr_cur = descr;
for (i = 0; i < 2; i++) {
+ unsigned nb_pads;
if (i) {
*(descr_cur++) = '-';
*(descr_cur++) = '>';
}
pad = i ? filter->outputs : filter->inputs;
- for (j = 0; pad && avfilter_pad_get_name(pad, j); j++) {
+ nb_pads = avfilter_pad_count(pad);
+ for (j = 0; j < nb_pads; j++) {
if (descr_cur >= descr + sizeof(descr) - 4)
break;
*(descr_cur++) = get_media_type_char(avfilter_pad_get_type(pad, j));