1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00
Commit Graph

28 Commits

Author SHA1 Message Date
Andreas Rheinhardt
8be701d9f7 avfilter/avfilter: Add numbers of (in|out)pads directly to AVFilter
Up until now, an AVFilter's lists of input and output AVFilterPads
were terminated by a sentinel and the only way to get the length
of these lists was by using avfilter_pad_count(). This has two
drawbacks: first, sizeof(AVFilterPad) is not negligible
(i.e. 64B on 64bit systems); second, getting the size involves
a function call instead of just reading the data.

This commit therefore changes this. The sentinels are removed and new
private fields nb_inputs and nb_outputs are added to AVFilter that
contain the number of elements of the respective AVFilterPad array.

Given that AVFilter.(in|out)puts are the only arrays of zero-terminated
AVFilterPads an API user has access to (AVFilterContext.(in|out)put_pads
are not zero-terminated and they already have a size field) the argument
to avfilter_pad_count() is always one of these lists, so it just has to
find the filter the list belongs to and read said number. This is slower
than before, but a replacement function that just reads the internal numbers
that users are expected to switch to will be added soon; and furthermore,
avfilter_pad_count() is probably never called in hot loops anyway.

This saves about 49KiB from the binary; notice that these sentinels are
not in .bss despite being zeroed: they are in .data.rel.ro due to the
non-sentinels.

Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-08-20 12:53:58 +02:00
Paul B Mahol
124eec942a avfilter/vf_palettegen: fix integer overflow 2021-08-19 01:29:11 +02:00
Andreas Rheinhardt
a04ad248a0 avfilter: Constify all AVFilters
This is possible now that the next-API is gone.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2021-04-27 11:48:05 -03:00
Nicolas George
2f76476549 lavfi: regroup formats lists in a single structure.
It will allow to refernce it as a whole without clunky macros.

Most of the changes have been automatically made with sed:

sed -i '
  s/-> *in_formats/->incfg.formats/g;
  s/-> *out_formats/->outcfg.formats/g;
  s/-> *in_channel_layouts/->incfg.channel_layouts/g;
  s/-> *out_channel_layouts/->outcfg.channel_layouts/g;
  s/-> *in_samplerates/->incfg.samplerates/g;
  s/-> *out_samplerates/->outcfg.samplerates/g;
  ' src/libavfilter/*(.)
2020-09-08 14:02:40 +02:00
Paul B Mahol
d64cbd4fda remove CHAR_MIN/CHAR_MAX usage
It is not needed at all.
2020-03-17 22:46:36 +01:00
Tomas Härdin
abc5ac3cf5 palettegen: Fill with last color, not black
If we fill with black then the generated palette will have one color more
than what the user requested. This also resulted in unwanted black specks in
the output of paletteuse, especially when generating small palettes.
2019-02-19 21:29:03 +01:00
Carl Eugen Hoyos
8b43039fe1 lavfi/palettegen: Fix compilation after 1da8c4e.
Found-by: James Almer
2017-10-29 02:35:36 +02:00
Carl Eugen Hoyos
1da8c4ec85 lavfi/palettegen: Allow setting the background colour. 2017-10-29 01:45:43 +02:00
Paul B Mahol
ed93ed5ee3 avfilter: don't anonymously typedef structs
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2017-05-13 11:39:28 +02:00
Clément Bœsch
549045254c Fix all -Wformat warnings raised by DJGPP 2017-03-29 14:49:29 +02:00
Michael Niedermayer
e740e9c798 avfilter/vf_palettegen: Fix leak and simplify code
Fixes CID1270818

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-01-21 22:40:14 +01:00
Paul B Mahol
93ae68d62a avfilter/vf_palettegen: add mode for generating palette for each input frame
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2016-09-07 15:56:13 +02:00
Ganesh Ajjanagadde
92e483f8ed all: use FFDIFFSIGN to resolve possible undefined behavior in comparators
FFDIFFSIGN was created explicitly for this purpose, since the common
return a - b idiom is unsafe regarding overflow on signed integers. It
optimizes to branchless code on common compilers.

FFDIFFSIGN also has the subjective benefit of being easier to read due
to lack of ternary operators.

Tested with FATE.

Things not covered by this are unsigned integers, for which overflows
are well defined, and also places where overflow is clearly impossible,
e.g an instance where the a - b was being done on 24 bit values.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Reviewed-by: Clément Bœsch <u@pkh.me>
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
2015-11-03 16:28:30 -05:00
Ganesh Ajjanagadde
6aaac24d72 avfilter/all: propagate errors of functions from avfilter/formats
Many of the functions from avfilter/formats can return errors, usually AVERROR(ENOMEM).
This propagates the return values.

All of these were found by using av_warn_unused_result, demonstrating its utility.

Tested with FATE. I am least sure of the changes to avfilter/filtergraph,
since I don't know what/how reduce_format is intended to behave and how it should
react to errors.

Fixes: CID 1325680, 1325679, 1325678.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Previous version Reviewed-by: Nicolas George <george@nsup.org>
Previous version Reviewed-by: Clément Bœsch <u@pkh.me>
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
2015-10-14 10:04:01 -04:00
Nicolas George
44f660e7e7 lavfi: remove FF_LINK_FLAG_REQUEST_LOOP.
It has no longer any effect.
2015-09-20 19:02:33 +02:00
Clément Bœsch
81e52c6df9 avfilter/palettegen: use AV_OPT_TYPE_BOOL for reserve_transparent option 2015-09-09 00:34:56 +02:00
Ronald S. Bultje
229843aa35 Replace av_dlog with ff_dlog.
ff_dlog checks compilability, and is non-public. av_dlog is deprecated
and no longer exists if FF_API_DLOG=0.
2015-08-18 10:24:01 -04:00
Clément Bœsch
84da9339c2 avfilter/palettegen: make sure at least one frame was sent to the filter
Fix FPE.
2015-03-15 19:09:20 +01:00
Clément Bœsch
3e0ae19f86 avfilter/palettegen: fix frame mem leak 2015-02-27 14:18:53 +01:00
Clément Bœsch
321de03492 avfilter/palettegen: use AV_QSORT()
This makes the sorting of the colors along an axis (r, g or b)
predictible, and thus testable under FATE. The performance is not really
an issue here since the function is called only once at the end and will
need to sort very small number of entries, so an alternative would be to
make the sorting functions (see DECLARE_CMP_FUNC()) fallback on another
axis in case of equality. This approach was actually simpler.

I don't know if there is any advantage in using a multidimensional sort,
but it will affect the final palette one way or another.
2015-02-26 14:20:02 +01:00
Clément Bœsch
30f4e9d3d9 avfilter/palettegen: consistently use the same frame for dimensions 2015-02-26 14:20:02 +01:00
Clément Bœsch
4216968f85 avfilter/palettegen: use a logging context for the dupped color warning 2015-02-26 14:20:02 +01:00
Clément Bœsch
ab093bdeef avfilter/palettegen: export color quantization ratio 2015-02-26 14:20:02 +01:00
Clément Bœsch
5c11f5b4a2 avfilter/palettegen: move longest variable to a local scope
Also drop initialization since it is initialized later on before any
usage.
2015-02-25 17:25:27 +01:00
Clément Bœsch
c3d40e305c avfilter/palette{gen,use}: add Copyright 2015-02-23 14:00:13 +01:00
Clément Bœsch
2280552057 avfilter/palettegen: raise cache size from 64k to 512k
(or 32k to 256k in 32-bit)

This is similar to a00bab3475
2015-02-19 11:17:45 +01:00
Clément Bœsch
80f44eafaa avfilter/palettegen: fix leak in case of error 2015-02-18 14:04:10 +01:00
Clément Bœsch
9b964690e3 avfilter: add palettegen filter 2015-02-14 20:48:50 +01:00