Andreas Rheinhardt (12020-08-15): > by adapting the MERGE_FORMATS() so that only one instance of the > MERGE_REF() macro needs to exist in ff_merge_samplerates().
Nit: the first line of the commit message should be a short summary. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> > --- > libavfilter/formats.c | 26 ++++++++++++++------------ > 1 file changed, 14 insertions(+), 12 deletions(-) > > diff --git a/libavfilter/formats.c b/libavfilter/formats.c > index 4efbcbebfe..e8a43a434d 100644 > --- a/libavfilter/formats.c > +++ b/libavfilter/formats.c > @@ -56,12 +56,21 @@ do { > \ > > /** > * Add all formats common to a and b to a, add b's refs to a and destroy b. > + * If empty_allowed is set and one of a,b->nb is zero, the lists are > + * merged; otherwise, it is treated as error. > */ > -#define MERGE_FORMATS(a, b, fmts, nb, type, fail_statement) \ > +#define MERGE_FORMATS(a, b, fmts, nb, type, fail_statement, empty_allowed) \ > do { > \ > int i, j, k = 0; \ > void *tmp; \ > > \ > + if (empty_allowed) { \ > + if (!a->nb || !b->nb) { \ > + if (!a->nb) \ > + FFSWAP(type *, a, b); \ > + goto merge_ref; \ > + } \ > + } \ I think a big if () / else would be better than a goto. > for (i = 0; i < a->nb; i++) > \ > for (j = 0; j < b->nb; j++) > \ > if (a->fmts[i] == b->fmts[j]) { > \ > @@ -77,6 +86,7 @@ do { > if (tmp) \ > a->fmts = tmp; \ > > \ > +merge_ref: \ > MERGE_REF(a, b, fmts, type, fail_statement); \ > } while (0) > > @@ -114,7 +124,7 @@ AVFilterFormats *ff_merge_formats(AVFilterFormats *a, > AVFilterFormats *b, > if (alpha2 > alpha1 || chroma2 > chroma1) > return NULL; > > - MERGE_FORMATS(a, b, formats, nb_formats, AVFilterFormats, return NULL;); > + MERGE_FORMATS(a, b, formats, nb_formats, AVFilterFormats, return NULL;, > 0); > > return a; > } > @@ -124,16 +134,8 @@ AVFilterFormats *ff_merge_samplerates(AVFilterFormats *a, > { > if (a == b) return a; > > - if (a->nb_formats && b->nb_formats) { > - MERGE_FORMATS(a, b, formats, nb_formats, AVFilterFormats, return > NULL;); > - return a; > - } else if (a->nb_formats) { > - MERGE_REF(a, b, formats, AVFilterFormats, return NULL;); > - return a; > - } else { > - MERGE_REF(b, a, formats, AVFilterFormats, return NULL;); > - return b; > - } > + MERGE_FORMATS(a, b, formats, nb_formats, AVFilterFormats, return NULL;, > 1); > + return a; > } > > AVFilterChannelLayouts *ff_merge_channel_layouts(AVFilterChannelLayouts *a, Overall, it does not look very beneficial, but I suppose it is ok. Regards, -- Nicolas George
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".