Example #1
0
void toxav_thread(void *args) {
    ToxAV *av = args;

    toxav_thread_init = 1;

    debug("Toxav thread init\n");
    while (1) {
        if(toxav_thread_msg) {
            TOX_MSG *msg = &toxav_msg;
            if(msg->msg == UTOXAV_KILL) {
                break;
            }

            switch(msg->msg) {
                case UTOXAV_START_CALL: {
                    FRIEND *f = &friend[msg->param1];
                    toxaudio_postmessage(AUDIO_STOP_RINGTONE, msg->param1, 0, NULL);
                    toxaudio_postmessage(AUDIO_START, msg->param1, 0, NULL);
                    f->call_state_self = ( TOXAV_FRIEND_CALL_STATE_SENDING_A | TOXAV_FRIEND_CALL_STATE_ACCEPTING_A );
                    if (msg->param2) {
                        toxvideo_postmessage(VIDEO_RECORD_START, msg->param1, 0, NULL);
                        f->call_state_self |= (TOXAV_FRIEND_CALL_STATE_SENDING_V | TOXAV_FRIEND_CALL_STATE_ACCEPTING_V);
                    }
                    break;
                }
                case UTOXAV_END_CALL: {
                    FRIEND *f = &friend[msg->param1];
                    toxaudio_postmessage(AUDIO_STOP_RINGTONE, msg->param1, 0, NULL);
                    toxaudio_postmessage(AUDIO_END, msg->param1, 0, NULL);
                    if ((f->call_state_self | TOXAV_FRIEND_CALL_STATE_SENDING_V | TOXAV_FRIEND_CALL_STATE_ACCEPTING_V)){
                        toxvideo_postmessage(VIDEO_RECORD_STOP, msg->param1, 0, NULL);
                    }
                    break;
                }
                case UTOXAV_START_PREVIEW: {
                    toxvideo_postmessage(VIDEO_PREVIEW_START, 0, 0, NULL);
                    break;
                }
                case UTOXAV_END_PREVIEW: {
                    toxvideo_postmessage(VIDEO_PREVIEW_STOP, 0, 0, NULL);
                    break;
                }
            }
        }

        toxav_thread_msg = 0;
        toxav_iterate(av);
        yieldcpu(toxav_iteration_interval(av));
    }

    toxav_thread_msg = 0;
    toxav_thread_init = 0;
    debug("UTOXAV:\tClean thread exit!\n");
    return;
}
Example #2
0
void *thread_av(void *data)
{
    ToxAV *av = (ToxAV *) data;

    while (true) {
        pthread_mutex_lock(&Winthread.lock);
        toxav_iterate(av);
        pthread_mutex_unlock(&Winthread.lock);

        usleep(toxav_iteration_interval(av) * 1000);
    }
}
Example #3
0
void CoreAV::process()
{
    toxav_iterate(toxav);
    iterateTimer->start(toxav_iteration_interval(toxav));
}