History

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.

Andreas Rheinhardt committed 5 years ago

Commit d53d48c1 parent c83a7dd1 file · +3 −1Browse files

Unified · Split

fftools/cmdutils.c+3−1
@@ -1707,12 +1707,14 @@ int show_filters(void *optctx, const char *opt, const char *arg) · 1706 unmodified lines
1707 while ((filter = av_filter_iterate(&opaque))) {1707 while ((filter = av_filter_iterate(&opaque))) {
1708 descr_cur = descr;1708 descr_cur = descr;
1709 for (i = 0; i < 2; i++) {1709 for (i = 0; i < 2; i++) {
1710 unsigned nb_pads;
1710 if (i) {1711 if (i) {
1711 *(descr_cur++) = '-';1712 *(descr_cur++) = '-';
1712 *(descr_cur++) = '>';1713 *(descr_cur++) = '>';
1713 }1714 }
1714 pad = i ? filter->outputs : filter->inputs;1715 pad = i ? filter->outputs : filter->inputs;
1715 for (j = 0; pad && avfilter_pad_get_name(pad, j); j++) {1716 nb_pads = avfilter_pad_count(pad);
1717 for (j = 0; j < nb_pads; j++) {
1716 if (descr_cur >= descr + sizeof(descr) - 4)1718 if (descr_cur >= descr + sizeof(descr) - 4)
1717 break;1719 break;
1718 *(descr_cur++) = get_media_type_char(avfilter_pad_get_type(pad, j));1720 *(descr_cur++) = get_media_type_char(avfilter_pad_get_type(pad, j));

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t