aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter/graphparser.c
Commit message (Collapse)AuthorAgeFilesLines
* lavfi/avfilter: export AVFilter initialization stateAnton Khirnov2024-10-011-1/+2
| | | | | This will allow the AVOption code to detect setting non-runtime options after the filter has been initialized.
* lavfi: drop internal.hAnton Khirnov2024-08-191-1/+0
| | | | | | All that remains in it are things that belong in avfilter_internal.h. Move them there and remove internal.h
* lavfi/internal: move functions used by filters to filters.hAnton Khirnov2024-08-191-0/+1
| | | | | | internal.h currently mixes interfaces intended to be used by filters with those that should be limited to generic filter- or graph-level code.
* avfilter: Add a header for internal generic-layer APIsAndreas Rheinhardt2024-02-181-0/+1
| | | | | | | | | This commit moves the generic-layer stuff (that is not used by filters) to a new header of its own, similarly to 5e7b5b0090bdf68e0897fe55ee657fdccc0cbca2 for libavcodec. thread.h and link_internal.h are merged into this header. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avfilter/avfilter: Avoid allocation for AVFilterInternalAndreas Rheinhardt2024-02-181-1/+1
| | | | | | | | | | To do this, allocate AVFilterInternal jointly with AVFilterContext and rename it to FFFilterContext in the process (similarly to AVStream/FFStream). The AVFilterInternal* will be removed from AVFilterContext on the next major bump. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* lavfi/graphparser: be more verbose when filtergraph parsing failsAnton Khirnov2023-06-161-1/+35
| | | | | | | When an option could not be found, print its name and value. Note that this is not done while applying the options in avfilter_graph_segment_apply_opts() to give the caller the option of handling the missing options in some other way.
* lavfi/graphparser: use correct logging contextAnton Khirnov2023-03-101-1/+1
|
* avfilter/graphparser: fix filter instance name when an id is providedJames Almer2023-03-061-3/+4
| | | | | | | | | Restores the behavior of naming the instance filter@id, which was accidentally changed to simpy id in commit f17051eaae. Fixes ticket #10226. Signed-off-by: James Almer <jamrial@gmail.com>
* lavfi/graphparser: reimplement avfilter_graph_parse* using new APIAnton Khirnov2023-02-121-411/+126
|
* lavfi: add a new filtergraph parsing APIAnton Khirnov2023-02-121-7/+672
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Callers currently have two ways of adding filters to a graph - they can either - create, initialize, and link them manually - use one of the avfilter_graph_parse*() functions, which take a (typically end-user-written) string, split it into individual filter definitions+options, then create filters, apply options, initialize filters, and finally link them - all based on information from this string. A major problem with the second approach is that it performs many actions as a single atomic unit, leaving the caller no space to intervene in between. Such intervention would be useful e.g. to - modify filter options; - supply hardware device contexts; both of which typically must be done before the filter is initialized. Callers who need such intervention are then forced to invent their own filtergraph parsing, which is clearly suboptimal. This commit aims to address this problem by adding a new modular filtergraph parsing API. It adds a new avfilter_graph_segment_parse() function to parse a string filtergraph description into an intermediate tree-like representation (AVFilterGraphSegment and its children). This intermediate form may then be applied step by step using further new avfilter_graph_segment*() functions, with user intervention possible between each step.
* lavfi/graphparser: drop a redundant labelAnton Khirnov2023-01-101-2/+2
|
* lavfi/graphparser: improve applying graph-level sws optionsAnton Khirnov2023-01-101-12/+6
| | | | | | | | | | | | | | | | | | The current code will apply them if the options string does not contain a 'flags' substring, and will do so by appending the graph-level option string to the filter option string (with the standard ':' separator). This is flawed in at least the following ways: - naive substring matching without actually parsing the options string may lead to false positives (e.g. flags are specified by shorthand) and false negatives (e.g. the 'flags' substring is not actually the option name) - graph-level sws options are not limited to flags, but may set arbitrary sws options This commit simply applies the graph-level options with av_set_options_string() and lets them be overridden as desired by the user-specified filter options (if any). This is also shorter and avoids extra string handling.
* avfilter/graphparser: Fix memleak when linking filters failsAndreas Rheinhardt2020-08-231-5/+4
| | | | | | | | | | | | | | | | | | | | | Parsing labeled outputs involves a check for an already known match (a labeled input with the same name) to pair them together. If yes, it is attempted to create a link between the two filters; in this case the AVFilterInOuts have fulfilled their purpose and are freed. Yet if creating the link fails, these AVFilterInOuts have up until now not been freed, although they had already been removed from their respective lists (which means that they are not freed automatically). In other words: They leak. This commit fixes this. This fixes ticket #7084. Said ticket contains an example program to reproduce a leak. It can also be reproduced with ffmpeg alone, e.g. with the complex filters "[0]null[1],[2]anull[0]" or with "[0]abitscope[0]". All of these three examples involve media type mismatches which make it impossible to create the links. The bug could also be triggered by other means, e.g. failure to allocate the necessary AVFilterLink. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avfilter/graphparser: Check allocations for successAndreas Rheinhardt2020-08-231-0/+7
| | | | | | | | | parse_filter() did not check the return value of av_get_token() for success; in case name (the name of a filter) was NULL, one got a segfault in av_strlcpy() (called from create_filter()). Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avfilter/graphparser: Don't set pointer to one beyond '\0' of stringAndreas Rheinhardt2020-08-231-2/+4
| | | | | | | | | | | | | This happened in parse_link_name() if there was a '[' without matching ']'. While this is not undefined behaviour (pointer arithmetic one beyond the end of an array works fine as long as there are no accesses), it is potentially dangerous. It currently isn't (all callers of parse_link_name() treat this as an error and don't access the string any more), but making sure that this will never cause trouble in the future seems nevertheless worthwhile. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avfilter/graphparser: Fix leaks when parsing inputs failsAndreas Rheinhardt2020-08-231-1/+4
| | | | | | | | | | | | | | | | | parse_inputs() uses a temporary linked list to parse the labeled inputs of a filter; said linked list owns its elements (and their names). On success, the list of unlabeled inputs is appened to the end of the list of labeled inputs and the new list is returned; yet on failures, nothing frees the already existing elements of the temporary linked list, leading to a leak. This can be triggered by e.g. using '-vf [v][' in the FFmpeg command-line tool. This leak seems to exist since 4e781c25b7b1955d1a9a0b0771c3ce1acb0957bd. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* lavfi/graphparser: Constify a variable.Carl Eugen Hoyos2017-10-211-1/+1
| | | | | Fixes the following warning: libavfilter/graphparser.c:122:10: warning: assignment discards 'const' qualifier from pointer target type
* avfilter/graphparser: allow specifying filter@id as filter instanceMuhammad Faiz2017-05-191-5/+21
| | | | | | | | | | | | | | See http://lists.ffmpeg.org/pipermail/ffmpeg-user/2017-April/035975.html Parsed_filter_X could remain and user can override it with custom one. Example: ffplay -f lavfi "nullsrc=s=640x360, sendcmd='1 drawtext@top reinit text=Hello; 2 drawtext@bottom reinit text=World', drawtext@top=x=16:y=16:fontsize=20:fontcolor=Red:text='', drawtext@bottom=x=16:y=340:fontsize=16:fontcolor=Blue:text=''" Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
* avfilter/graphparser: remove '\n' from parse_filterMuhammad Faiz2016-06-131-2/+2
| | | | | | | | | this allow a filter to be written like this: aformat = sample_fmts = fltp|flt: sample_rates = 44100|44800 Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
* avfilter/graphparser: add '\r' as whitespaceMuhammad Faiz2016-05-061-1/+1
| | | | | | | for compatibility with platforms that treat it as newline Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
* fix some a/an typosLou Logan2016-03-281-1/+1
| | | | Signed-off-by: Lou Logan <lou@lrcd.com>
* lavfi: remove old graph parser API with different semanticsHendrik Leppkes2015-09-051-8/+0
| | | | This API hasn't been active since the last bump already.
* avfilter/graphparser: Do not ignore scale_sws_opts if args == NULLMichael Niedermayer2015-08-081-6/+9
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* Merge commit '9d3b752fceb0f2a42cac7c2a1109b0629823c99f'Michael Niedermayer2015-02-171-0/+2
|\ | | | | | | | | | | | | * commit '9d3b752fceb0f2a42cac7c2a1109b0629823c99f': graphparser: Check av_get_token() memory error Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * graphparser: Check av_get_token() memory errorVittorio Giovara2015-02-171-0/+2
| | | | | | | | | | CC: libav-stable@libav.org Bug-Id: CID 1267891
* | avfilter/graphparser: Use av_freep(), avoid leaving stale pointers in memoryMichael Niedermayer2014-11-221-6/+6
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avfilter/graphparser: zero filter_ctx in case of deallocation in create_filter()Michael Niedermayer2013-11-071-0/+1
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit 'cffecc0e7ebd642afaa1fb9f56fab1fcc283293c'Michael Niedermayer2013-11-071-0/+1
|\| | | | | | | | | | | | | | | | | | | * commit 'cffecc0e7ebd642afaa1fb9f56fab1fcc283293c': avfilter/graphparser: Directly free filter memory if initialization fails Conflicts: libavfilter/graphparser.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avfilter/graphparser: Directly free filter memory if initialization failsDiego Biurrun2013-11-061-0/+1
| |
* | Do not leave positive values undefined when negative are defined as errorMichael Niedermayer2013-10-191-2/+2
| | | | | | | | | | | | | | | | Define positive return values as non errors and leave further meaning undefined This allows future extensions to use these values Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avfilter/graphparser: fix use of deprecated symbolsMichael Niedermayer2013-08-251-1/+1
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avfilter/graphparser: remove 256 char limit from create_filter()Michael Niedermayer2013-08-041-4/+6
| | | | | | | | | | | | Fixes Ticket2803 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avfilter/graphparse: Fix build with --enable-incompatible-fork-abiMichael Niedermayer2013-07-091-1/+1
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | lavfi: create Libav-API compatibility layer for avfilter_graph_parse() at ↵Stefano Sabatini2013-07-031-13/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the next bump Add function avfilter_graph_parse_ptr() and favor it in place of avfilter_graph_parse(), which will be restored with the old/Libav signature at the next bump. If HAVE_INCOMPATIBLE_LIBAV_API is enabled it will use the Libav-compatible signature for avfilter_graph_parse(). At the next major bump the current implementation of avfilter_graph_parse() should be dropped in favor of the Libav/old implementation. Should address trac ticket #2672.
* | Merge commit 'c22263d3e813d442df8fa5f5ba8993573fe775d8'Michael Niedermayer2013-05-011-1/+4
|\| | | | | | | | | | | | | | | * commit 'c22263d3e813d442df8fa5f5ba8993573fe775d8': graphparser: only print filter arguments if they are non-NULL af_channelmap: ensure the output channel layout is valid. Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * graphparser: only print filter arguments if they are non-NULLAnton Khirnov2013-04-301-1/+4
| |
* | lavfi: fix forgotten chunk in eb0f774d.Clément Bœsch2013-04-121-2/+2
| |
* | Merge commit '48a5adab62bd2a553f5069d41fa632a0701835e5'Michael Niedermayer2013-04-121-1/+2
|\| | | | | | | | | | | | | | | | | | | | | * commit '48a5adab62bd2a553f5069d41fa632a0701835e5': lavfi: add avfilter_init_str() to replace avfilter_init_filter(). avfilter_graph_create_filter() opaque is still passed to avfilter_init_filter() which continues to pass it to init_opaque as its still used in the buffer sinks the sinks should be changed and the opaque passing removed Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavfi: add avfilter_init_str() to replace avfilter_init_filter().Anton Khirnov2013-04-111-1/+2
| | | | | | | | Drop the unused opaque parameter from its signature.
* | Merge commit '1565cbc65cbb9f95c11367314a080068895e0cf0'Michael Niedermayer2013-04-121-4/+4
|\| | | | | | | | | | | | | | | | | | | | | | | * commit '1565cbc65cbb9f95c11367314a080068895e0cf0': lavfi: make avfilter_free() remove the filter from its graph. Conflicts: libavfilter/avfilter.c libavfilter/avfiltergraph.c libavfilter/graphparser.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavfi: make avfilter_free() remove the filter from its graph.Anton Khirnov2013-04-111-4/+4
| |
* | Merge commit 'bc1a985ba030e9861d24965d42792850b43a43ea'Michael Niedermayer2013-04-121-7/+2
|\| | | | | | | | | | | | | | | | | | | | | | | * commit 'bc1a985ba030e9861d24965d42792850b43a43ea': lavfi: replace avfilter_open() with avfilter_graph_alloc_filter(). Conflicts: libavfilter/avfiltergraph.c libavfilter/internal.h libavfilter/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavfi: replace avfilter_open() with avfilter_graph_alloc_filter().Anton Khirnov2013-04-111-7/+2
| | | | | | | | | | | | | | Since we do not support "standalone" filters not attached to an AVFilterGraph, we should not have a public function to create such filters. In addition that function is horribly named, the action it does cannot be possibly described as "opening" a filter.
* | Merge commit '38f0c0781a6e099f11c0acec07f9b8be742190c4'Michael Niedermayer2013-04-111-1/+0
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '38f0c0781a6e099f11c0acec07f9b8be742190c4': lavfi: merge avfiltergraph.h into avfilter.h Conflicts: doc/APIchanges ffmpeg_filter.c libavfilter/avfilter.h libavfilter/avfiltergraph.h libavfilter/version.h tools/graph2dot.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavfi: merge avfiltergraph.h into avfilter.hAnton Khirnov2013-04-111-1/+0
| | | | | | | | | | We do not support using filters without AVFilterGraph in practice anyway, so there is no point in pretending we do.
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2013-04-031-2/+2
|\| | | | | | | | | | | | | | | | | | | | | * qatar/master: avfiltergraph: check for sws opts being non-NULL before using them. Conflicts: libavfilter/avfiltergraph.c libavfilter/graphparser.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avfiltergraph: check for sws opts being non-NULL before using them.Anton Khirnov2013-04-031-1/+2
| | | | | | | | | | | | Avoid snprintfing a NULL pointer. CC: libav-stable@libav.org
* | Merge commit '42c7c61ab25809620b8c8809b3da73e25f5bbaaf'Michael Niedermayer2013-03-161-6/+6
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '42c7c61ab25809620b8c8809b3da73e25f5bbaaf': avfiltergraph: replace AVFilterGraph.filter_count with nb_filters Conflicts: doc/APIchanges libavfilter/avfiltergraph.c libavfilter/avfiltergraph.h libavfilter/graphparser.c libavfilter/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avfiltergraph: replace AVFilterGraph.filter_count with nb_filtersAnton Khirnov2013-03-161-4/+4
| | | | | | | | This is more consistent with the naming in the rest of Libav.
| * Use the avstring.h locale-independent character type functionsReimar Döffinger2013-03-071-1/+0
| | | | | | | | | | | | Make sure the behavior does not change with the locale. Signed-off-by: Martin Storsjö <martin@martin.st>