58static int worker_func(
void *priv,
int jobnr,
int threadnr,
int nb_jobs,
int nb_threads)
64 ret =
c->func ?
c->func(avctx, (
char *)
c->args +
c->job_size * jobnr)
65 :
c->func2(avctx,
c->args, jobnr, threadnr);
91 c->job_size = job_size;
111 c->mainfunc = mainfunc;
119 int (*mainfunc)(
void *);
132 if (thread_count <= 1) {
142 mainfunc, thread_count);
143 if (thread_count <= 1) {
147 return thread_count < 0 ? thread_count : 0;
static double(*const func2[])(void *, double, double)
Libavcodec external API header.
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF
Codec initializes slice-based threading with a main function.
static av_always_inline const FFCodec * ffcodec(const AVCodec *codec)
int avcodec_default_execute(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
common internal api header.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Multithreading API for decoders.
Macro definitions for various function/variable attributes.
Utility Preprocessor macros.
Memory handling functions.
av_cold int ff_slice_thread_init(AVCodecContext *avctx)
int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, action_func2 *func2, main_func *mainfunc, void *arg, int *ret, int job_count)
static int thread_execute(AVCodecContext *avctx, action_func *func, void *arg, int *ret, int job_count, int job_size)
static int worker_func(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads)
av_cold void ff_slice_thread_free(AVCodecContext *avctx)
static int thread_execute2(AVCodecContext *avctx, action_func2 *func2, void *arg, int *ret, int job_count)
int action_func(AVCodecContext *c, void *arg)
int main_func(AVCodecContext *c)
static int main_function(void *priv)
int action_func2(AVCodecContext *c, void *arg, int jobnr, int threadnr)
void avpriv_slicethread_free(AVSliceThread **pctx)
Destroy slice threading context.
int avpriv_slicethread_execute2(AVSliceThread *ctx, int nb_jobs, int execute_main)
Execute slice threading.
int avpriv_slicethread_create2(AVSliceThread **pctx, void *priv, int(*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), int(*main_func)(void *priv), int nb_threads)
Create slice threading context.
struct AVSliceThread AVSliceThread
main external API structure.
int active_thread_type
Which multithreading methods are in use by the codec.
const struct AVCodec * codec
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things.
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
int(* execute2)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count)
The codec may call this to execute several independent things.
struct AVCodecInternal * internal
Private context used for internal data.
unsigned caps_internal
Internal codec capabilities FF_CODEC_CAP_*.