FFmpeg解析:ffplay中的视频显示控制函数 refresh_loop_wait_event

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 09:09   33   0
/**
 * 显示视频
 * 
 * 循环检测并优先处理用户输入事件
 * 内置刷新率控制,约10ms刷新一次
 */
static void refresh_loop_wait_event(VideoState *is, SDL_Event *event) {
    double remaining_time = 0.0;
    /* 从输入设备收集事件并放到事件队列中 */
    SDL_PumpEvents();
    /**
     * SDL_PeepEvents
     * 从事件队列中提取事件,由于这里使用的是SDL_GETEVENT, 所以获取事件时会从队列中移除
     * 如果有事件发生,返回事件数量,则while循环不执行。
     * 如果出错,返回负数的错误码,则while循环不执行。
     * 如果当前没有事件发生,且没有出错,返回0,进入while循环。
     */
    while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) {
        /* 隐藏鼠标指针, CURSOR_HIDE_DELAY = 1s */
        if (!cursor_hidden && av_gettime_relative() - cursor_last_shown > CURSOR_HIDE_DELAY) {
            SDL_ShowCursor(0);
            cursor_hidden = 1;
        }
        /* 默认屏幕刷新率控制,REFRESH_RATE = 10ms */
        if (remaining_time > 0.0)
            av_usleep((int64_t)(remaining_time * 1000000.0));
        remaining_time = REFRESH_RATE;
        /* 显示视频 */
        if (is->show_mode != SHOW_MODE_NONE && (!is->paused || is->force_refresh))
            video_refresh(is, &remaining_time);
        /* 再次检测输入事件 */
        SDL_PumpEvents();
    }
}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP