Example #1
0
void iomplx_init(iomplx_instance *mplx, init_func init, unsigned int threads)
{
	int set = 1;

	mplx->thread_init = init;
	mplx->threads = threads;
	mplx->active_list_size[THREAD_0] = 10;
	mplx->active_list_size[THREAD_N] = IOMPLX_MAX_ACTIVE_ITEMS/threads + (IOMPLX_MAX_ACTIVE_ITEMS%threads != 0? 1 : 0);
	uqueue_init(&mplx->accept_uqueue);
	uqueue_init(&mplx->n_uqueue);

	pipe(mplx->recycler);
	ioctl(mplx->recycler[0], FIONBIO, &set);
	mplx->recycler_item.fd = mplx->recycler[0];
	mplx->recycler_item.oneshot = 1;
	iomplx_item_filter_set(&mplx->recycler_item, IOMPLX_READ);
	iomplx_item_add(mplx, &mplx->recycler_item, 1);
	DLIST_INIT(&mplx->items_to_check);
}
Example #2
0
/** @internal @This allocates an nacl audio pipe.
 *
 * @param mgr common management structure
 * @param uprobe structure used to raise events
 * @param signature signature of the pipe allocator
 * @param args optional arguments
 * @return pointer to upipe or NULL in case of allocation error
 */
static struct upipe *upipe_nacl_audio_alloc(struct upipe_mgr *mgr,
                                            struct uprobe *uprobe,
                                            uint32_t signature, va_list args)
{
    if (signature != UPIPE_VOID_SIGNATURE)
        return NULL;
    struct upipe_nacl_audio *upipe_nacl_audio =
        malloc(sizeof(struct upipe_nacl_audio) +
               uqueue_sizeof(MAX_QUEUE_LENGTH));
    if (unlikely(upipe_nacl_audio == NULL))
        return NULL;

    if(unlikely(!uqueue_init(&upipe_nacl_audio->uqueue, MAX_QUEUE_LENGTH,
                             upipe_nacl_audio->uqueue_extra))) {
        free(upipe_nacl_audio);
        return NULL;
    }

    struct upipe *upipe = upipe_nacl_audio_to_upipe(upipe_nacl_audio);
    upipe_init(upipe, mgr, uprobe);

    upipe_nacl_audio_init_urefcount(upipe);
    upipe_nacl_audio_init_input(upipe);
    upipe_nacl_audio_init_upump_mgr(upipe);
    upipe_nacl_audio_init_upump(upipe);
    upipe_nacl_audio_init_uclock(upipe);
    upipe_nacl_audio->started = false;

    PPB_AudioConfig *audio_config_interface =
        (PPB_AudioConfig *)PSGetInterface(PPB_AUDIO_CONFIG_INTERFACE);
    upipe_nacl_audio->nb_samples =
        audio_config_interface->RecommendSampleFrameCount(PSGetInstanceId(),
                SAMPLE_RATE, NB_SAMPLES);
    upipe_nacl_audio->audio_config =
        audio_config_interface->CreateStereo16Bit(PSGetInstanceId(),
                SAMPLE_RATE, upipe_nacl_audio->nb_samples);

    upipe_nacl_audio->core_interface =
        (PPB_Core *)PSGetInterface(PPB_CORE_INTERFACE);
    upipe_nacl_audio->audio_interface =
        (PPB_Audio *)PSGetInterface(PPB_AUDIO_INTERFACE);
    upipe_nacl_audio->audio =
        upipe_nacl_audio->audio_interface->Create(PSGetInstanceId(),
                                upipe_nacl_audio->audio_config,
                                upipe_nacl_audio_worker, upipe);

    upipe_throw_ready(upipe);
    return upipe;
}
Example #3
0
/** @internal @This is the callback of upumpstart, start the QT Thread
 *
 * @param upumpstart pump that start this
 */
void start(struct upump *upumpstart){
    struct upipe *upipe = upump_get_opaque(upumpstart, struct upipe *);
    struct upipe_qt_html *upipe_qt_html = upipe_qt_html_from_upipe(upipe);
    
    upipe_qt_html->qtthreadfree = false;
    upipe_qt_html->uqueue_extra = (uint8_t*)malloc(uqueue_sizeof(MAX_QUEUE_LENGTH));
    uqueue_init(&upipe_qt_html->uqueue, MAX_QUEUE_LENGTH,
                upipe_qt_html->uqueue_extra);
    upipe_qt_html->uqueue_extra2 = (uint8_t*)malloc(uqueue_sizeof(MAX_QUEUE_LENGTH));
    uqueue_init(&upipe_qt_html->uqueue2, MAX_QUEUE_LENGTH,
                upipe_qt_html->uqueue_extra2);

    struct upump *upump =
            uqueue_upump_alloc_pop(&upipe_qt_html->uqueue,
                    upipe_qt_html->upump_mgr, upipe_qt_html_worker, upipe,
                    upipe->refcount);
    upipe_qt_html_set_upump(upipe, upump);
    upump_start(upump);

    upipe_qt_html->url = "http://upipe.org/blog/";
    pthread_create(&upipe_qt_html->thread, NULL, thread_start, (void *)upipe_qt_html);
    upipe_qt_html_clean_upumpstart(upipe);
    upipe_qt_html_set_upumpstart(upipe,NULL);
}