コード例 #1
0
ファイル: vo_opengl_cb.c プロジェクト: htc550605125/mpv
static void flip_page(struct vo *vo)
{
    struct vo_priv *p = vo->priv;

    pthread_mutex_lock(&p->ctx->lock);
    while (p->ctx->queued_frames >= p->frame_queue_size) {
        switch (p->frame_drop_mode) {
        case FRAME_DROP_CLEAR:
            frame_queue_drop_all(p->ctx);
            break;
        case FRAME_DROP_POP:
            frame_queue_shrink(p->ctx, p->frame_queue_size - 1);
            break;
        case FRAME_DROP_BLOCK: ;
            struct timespec ts = mp_rel_time_to_timespec(0.2);
            if (p->ctx->frozen ||
                pthread_cond_timedwait(&p->ctx->wakeup, &p->ctx->lock, &ts))
            {
                frame_queue_drop_all(p->ctx);
                p->ctx->frozen = true;
            }
            break;
        }
    }
    frame_queue_push(p->ctx, p->ctx->waiting_frame);
    p->ctx->waiting_frame = NULL;
    update(p);
    pthread_mutex_unlock(&p->ctx->lock);
}
コード例 #2
0
ファイル: vo_opengl_cb.c プロジェクト: AppleNuts/mpv
static void flip_page(struct vo *vo)
{
    struct vo_priv *p = vo->priv;

    pthread_mutex_lock(&p->ctx->lock);
    if (p->ctx->queued_frames >= p->frame_queue_size) {
        if (p->frame_drop_mode == FRAME_DROP_CLEAR)
            frame_queue_drop_all(p->ctx);
        else // FRAME_DROP_POP mode
            frame_queue_shrink(p->ctx, p->frame_queue_size - 1);
    }
    frame_queue_push(p->ctx, p->ctx->waiting_frame);
    p->ctx->waiting_frame = NULL;
    update(p);
    pthread_mutex_unlock(&p->ctx->lock);
}