diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-09-28 11:02:01 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-09-28 11:02:01 +0200 |
commit | 7381d31f2267489ed5e939707b7e77a20adc168d (patch) | |
tree | 0e5811bf6eadc8742a1ee88634e9533d29eed927 /libavfilter/avfilter.h | |
parent | 945c7e399af230d9fde6df641f13a11dfc5d4954 (diff) | |
parent | 0767bfd1994c4bf22e167ffadb8f823a950aad18 (diff) | |
download | ffmpeg-7381d31f2267489ed5e939707b7e77a20adc168d.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
lavfi: allow user-provided execute() callbacks
Conflicts:
libavfilter/avfilter.h
libavfilter/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/avfilter.h')
-rw-r--r-- | libavfilter/avfilter.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index b8d7cc39fd..a1687f16b0 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -1126,6 +1126,35 @@ const AVClass *avfilter_get_class(void); typedef struct AVFilterGraphInternal AVFilterGraphInternal; +/** + * A function pointer passed to the @ref AVFilterGraph.execute callback to be + * executed multiple times, possibly in parallel. + * + * @param ctx the filter context the job belongs to + * @param arg an opaque parameter passed through from @ref + * AVFilterGraph.execute + * @param jobnr the index of the job being executed + * @param nb_jobs the total number of jobs + * + * @return 0 on success, a negative AVERROR on error + */ +typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); + +/** + * A function executing multiple jobs, possibly in parallel. + * + * @param ctx the filter context to which the jobs belong + * @param func the function to be called multiple times + * @param arg the argument to be passed to func + * @param ret a nb_jobs-sized array to be filled with return values from each + * invocation of func + * @param nb_jobs the number of jobs to execute + * + * @return 0 on success, a negative AVERROR on error + */ +typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, + void *arg, int *ret, int nb_jobs); + typedef struct AVFilterGraph { const AVClass *av_class; #if FF_API_FOO_COUNT @@ -1169,6 +1198,27 @@ typedef struct AVFilterGraph { */ AVFilterGraphInternal *internal; + /** + * Opaque user data. May be set by the caller to an arbitrary value, e.g. to + * be used from callbacks like @ref AVFilterGraph.execute. + * Libavfilter will not touch this field in any way. + */ + void *opaque; + + /** + * This callback may be set by the caller immediately after allocating the + * graph and before adding any filters to it, to provide a custom + * multithreading implementation. + * + * If set, filters with slice threading capability will call this callback + * to execute multiple jobs in parallel. + * + * If this field is left unset, libavfilter will use its internal + * implementation, which may or may not be multithreaded depending on the + * platform and build options. + */ + avfilter_execute_func *execute; + char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions /** |