ijkplayer 视频播放线程

ijkplayer 读线程中提到,stream_open()会创建读线程和视频渲染线程,甚至可以说视频渲染线程要先与读线程,该线程逻辑比较简单

static int video_refresh_thread(void *arg)
{
    ...
display:
        /* display picture */
        if (!ffp->display_disable && is->force_refresh && is->show_mode == SHOW_MODE_VIDEO && is->pictq.rindex_shown)
            video_display2(ffp);
    }
    ...
}

ff_ffplay.c/video_refresh()中调用了ff_ffplay.c/video_display2(),最终调用ff_ffplay.c/video_image_display2()

static void video_image_display2(FFPlayer *ffp)
{
    ...
    vp = frame_queue_peek_last(&is->pictq);

    ...
        SDL_VoutDisplayYUVOverlay(ffp->vout, vp->bmp);
    ...
}

ff_ffplay.c/video_image_display2()先调用 frame_queue_peek_last()将解码后的视频帧取出,然后调用SDL_VoutDisplayYUVOverlay()

SDL_VoutDisplayYUVOverlay()代码如下

int SDL_VoutDisplayYUVOverlay(SDL_Vout *vout, SDL_VoutOverlay *overlay)
{
    if (vout && overlay && vout->display_overlay)
        return vout->display_overlay(vout, overlay);

    return -1;
}

里面调用了vout->display_overlay(vout, overlay),可以猜出这就是最终显示视频帧的函数,那它调用的是哪个函数?
在ijkplayer_jni.c/ijkmp_android_create()中调用了ijkplayer_android.c/SDL_VoutAndroid_CreateForAndroidSurface(),而ijkplayer_android.c/SDL_VoutAndroid_CreateForAndroidSurface()中又调用了ijksdl_vout_android_surface.c/SDL_VoutAndroid_CreateForANativeWindow(),在ijksdl_vout_android_surface.c/SDL_VoutAndroid_CreateForANativeWindow()中有一句话

vout->display_overlay = func_display_overlay;

上面vout->display_overlay中的display_overlay就是func_display_overlay,通过该函数渲染输出

到这里ijkplayer视频播放线程也就结束了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着互联网技术的飞速发展,移动端播放视频的需求如日中天,由此也催生了一批开源/闭源的播放器,但是无论这个播放器功能...
    金山视频云阅读 46,527评论 28 170
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,819评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,705评论 25 709
  • 本文参加 百人接力小说征文活动 上一章65|魂魄肉身合一 景藏日料店的灯光,总是从一些小角落打下。落在入门的石头上...
    楠楠细时语阅读 442评论 18 8
  • 阿仑和毛毛醒来时,也不知道外面是什么时候了。 毛毛小声的呼唤:“阿仑。” “嗯,在呢。” “我肚子好饿啊。”毛毛摸...
    光之工作者sunny阅读 561评论 0 0