65 static void worker_func(
void *priv,
int jobnr,
int threadnr,
int nb_jobs,
int nb_threads)
72 : c->
func2(avctx, c->
args, jobnr, threadnr);
133 static void (*mainfunc)(
void *);
156 if (thread_count <= 1) {
194 if (!entries || !field)
return;
199 while ((entries[field - 1] - entries[field]) < shift){
static av_unused void w32thread_init(void)
const struct AVCodec * codec
int ff_slice_thread_init(AVCodecContext *avctx)
static int shift(int a, int b)
static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex)
#define pthread_mutex_lock(a)
static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
Memory handling functions.
int( action_func)(AVCodecContext *c, void *arg)
static void worker_func(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift)
static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond)
int av_codec_is_encoder(const AVCodec *codec)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
struct AVSliceThread AVSliceThread
Multithreading support functions.
pthread_mutex_t * progress_mutex
static void main_function(void *priv)
static av_always_inline int pthread_cond_signal(pthread_cond_t *cond)
int active_thread_type
Which multithreading methods are in use by the codec.
simple assert() macros that are a bit more flexible than ISO C assert().
static void * av_mallocz_array(size_t nmemb, size_t size)
int ff_alloc_entries(AVCodecContext *avctx, int count)
static int thread_execute2(AVCodecContext *avctx, action_func2 *func2, void *arg, int *ret, int job_count)
void avpriv_slicethread_free(AVSliceThread **pctx)
Destroy slice threading context.
void ff_slice_thread_free(AVCodecContext *avctx)
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
pthread_cond_t * progress_cond
#define pthread_mutex_unlock(a)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
void ff_reset_entries(AVCodecContext *avctx)
Libavcodec external API header.
void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n)
int avpriv_slicethread_create(AVSliceThread **pctx, void *priv, void(*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), void(*main_func)(void *priv), int nb_threads)
Create slice threading context.
main external API structure.
void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main)
Execute slice threading.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
int( main_func)(AVCodecContext *c)
#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF
Codec initializes slice-based threading with a main function.
common internal api header.
common internal and external API header
int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, action_func2 *func2, main_func *mainfunc, void *arg, int *ret, int job_count)
static av_always_inline int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
int caps_internal
Internal codec capabilities.
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(* 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.
#define av_malloc_array(a, b)
int( action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr)
static int thread_execute(AVCodecContext *avctx, action_func *func, void *arg, int *ret, int job_count, int job_size)
int avcodec_default_execute(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)