static int thread_init(AVCodecContext *avctx)

{

    int i;

    ThreadContext *c;

    int thread_count = avctx->thread_count;



    if (!thread_count) {

        int nb_cpus = get_logical_cpus(avctx);

        // use number of cores + 1 as thread count if there is motre than one

        if (nb_cpus > 1)

            thread_count = avctx->thread_count = nb_cpus + 1;

    }



    if (thread_count <= 1) {

        avctx->active_thread_type = 0;

        return 0;

    }



    c = av_mallocz(sizeof(ThreadContext));

    if (!c)

        return -1;



    c->workers = av_mallocz(sizeof(pthread_t)*thread_count);

    if (!c->workers) {

        av_free(c);

        return -1;

    }



    avctx->thread_opaque = c;

    c->current_job = 0;

    c->job_count = 0;

    c->job_size = 0;

    c->done = 0;

    pthread_cond_init(&c->current_job_cond, NULL);

    pthread_cond_init(&c->last_job_cond, NULL);

    pthread_mutex_init(&c->current_job_lock, NULL);

    pthread_mutex_lock(&c->current_job_lock);

    for (i=0; i<thread_count; i++) {

        if(pthread_create(&c->workers[i], NULL, worker, avctx)) {

           avctx->thread_count = i;

           pthread_mutex_unlock(&c->current_job_lock);

           ff_thread_free(avctx);

           return -1;

        }

    }



    avcodec_thread_park_workers(c, thread_count);



    avctx->execute = avcodec_thread_execute;

    avctx->execute2 = avcodec_thread_execute2;

    return 0;

}

static int thread_init(AVCodecContext *avctx)

{

    int i;

    ThreadContext *c;

    int thread_count = avctx->thread_count;



    if (!thread_count) {

        int nb_cpus = get_logical_cpus(avctx);

        

        if (nb_cpus > 1)

            thread_count = avctx->thread_count = nb_cpus + 1;

    }



    if (thread_count <= 1) {

        avctx->active_thread_type = 0;

        return 0;

    }



    c = av_mallocz(sizeof(ThreadContext));

    if (!c)

        return -1;



    c->workers = av_mallocz(sizeof(pthread_t)*thread_count);

    if (!c->workers) {

        av_free(c);

        return -1;

    }



    avctx->thread_opaque = c;

    c->current_job = 0;

    c->job_count = 0;

    c->job_size = 0;

    c->done = 0;

    pthread_cond_init(&c->current_job_cond, NULL);

    pthread_cond_init(&c->last_job_cond, NULL);

    pthread_mutex_init(&c->current_job_lock, NULL);

    pthread_mutex_lock(&c->current_job_lock);

    for (i=0; i<thread_count; i++) {

        if(pthread_create(&c->workers[i], NULL, worker, avctx)) {

           avctx->thread_count = i;

           pthread_mutex_unlock(&c->current_job_lock);

           ff_thread_free(avctx);

           return -1;

        }

    }



    avcodec_thread_park_workers(c, thread_count);



    avctx->execute = avcodec_thread_execute;

    avctx->execute2 = avcodec_thread_execute2;

    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0)

{

    int VAR_1;

    ThreadContext *c;

    int VAR_2 = VAR_0->VAR_2;



    if (!VAR_2) {

        int VAR_3 = get_logical_cpus(VAR_0);

        

        if (VAR_3 > 1)

            VAR_2 = VAR_0->VAR_2 = VAR_3 + 1;

    }



    if (VAR_2 <= 1) {

        VAR_0->active_thread_type = 0;

        return 0;

    }



    c = av_mallocz(sizeof(ThreadContext));

    if (!c)

        return -1;



    c->workers = av_mallocz(sizeof(pthread_t)*VAR_2);

    if (!c->workers) {

        av_free(c);

        return -1;

    }



    VAR_0->thread_opaque = c;

    c->current_job = 0;

    c->job_count = 0;

    c->job_size = 0;

    c->done = 0;

    pthread_cond_init(&c->current_job_cond, NULL);

    pthread_cond_init(&c->last_job_cond, NULL);

    pthread_mutex_init(&c->current_job_lock, NULL);

    pthread_mutex_lock(&c->current_job_lock);

    for (VAR_1=0; VAR_1<VAR_2; VAR_1++) {

        if(pthread_create(&c->workers[VAR_1], NULL, worker, VAR_0)) {

           VAR_0->VAR_2 = VAR_1;

           pthread_mutex_unlock(&c->current_job_lock);

           ff_thread_free(VAR_0);

           return -1;

        }

    }



    avcodec_thread_park_workers(c, VAR_2);



    VAR_0->execute = avcodec_thread_execute;

    VAR_0->execute2 = avcodec_thread_execute2;

    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0)
{ int VAR_1; ThreadContext *c; int VAR_2 = VAR_0->VAR_2; if (!VAR_2) { int VAR_3 = get_logical_cpus(VAR_0); if (VAR_3 > 1)
VAR_2 = VAR_0->VAR_2 = VAR_3 + 1; } if (VAR_2 <= 1) { VAR_0->active_thread_type = 0; return 0; } c = av_mallocz(sizeof(ThreadContext)); if (!c)
return -1; c->workers = av_mallocz(sizeof(pthread_t)*VAR_2); if (!c->workers) { av_free(c); return -1; } VAR_0->thread_opaque = c; c->current_job = 0; c->job_count = 0; c->job_size = 0; c->done = 0; pthread_cond_init(&c->current_job_cond, NULL); pthread_cond_init(&c->last_job_cond, NULL); pthread_mutex_init(&c->current_job_lock, NULL); pthread_mutex_lock(&c->current_job_lock); for (VAR_1=0; VAR_1<VAR_2; VAR_1++) { if(pthread_create(&c->workers[VAR_1], NULL, worker, VAR_0)) { VAR_0->VAR_2 = VAR_1; pthread_mutex_unlock(&c->current_job_lock); ff_thread_free(VAR_0); return -1; } } avcodec_thread_park_workers(c, VAR_2); VAR_0->execute = avcodec_thread_execute; VAR_0->execute2 = avcodec_thread_execute2; return 0; }