ffplay源码分析(二)stream_open

本文详细介绍了FFplay中的stream_open函数,其主要负责初始化播放器上下文、队列和线程,包括VideoState结构的创建、帧缓存、包缓存队列设置,以及关键组件的初始化过程。

stream_open主要流程

在这里插入图片描述
stream_open 流程主要负责播放器运行过程中相关上下文和队列的初始化,以及码流读取线程的创建。
也就是从这个函数开始,播放器就真正开始运行起来了。
本次主要还是介绍这个过程中使用到的结构体。
比较重要的后面单独解析。

stream_open源码

static VideoState *stream_open(const char *filename,
                               const AVInputFormat *iformat)
{
   
   
    //创建VideoState结构体,这个结构体是ffplay的核心上下文,贯穿整个播放流程
    VideoState *is;
    is = av_mallocz(sizeof(VideoState));
    if (!is)
        return NULL;
    //初始化is,保存filename和iformat
    is->last_video_stream = is->video_stream = -1;
    is->last_audio_stream = is->audio_stream = -1;
    is->last_subtitle_stream = is->subtitle_stream = -1;
    is->filename = av_strdup(filename);
    if (!is->filename)
        goto fail;
    is->iformat = iformat;
    is->ytop    = 0;
    is->xleft   = 0;

    /*初始化帧缓存队列,视频初始化,大小如下
      VIDEO_PICTURE_QUEUE_SIZE 3
      SUBPICTURE_QUEUE_SIZE 16
      SAMPLE_QUEUE_SIZE 9 */
    if (frame_queue_init(&is->pictq, &is->videoq, VIDEO_PICTURE_QUEUE_SIZE, 1) < 0)
        goto fail;
    if (frame_queue_init(&is->subpq, &is->subtitleq, SUBPICTURE_QUEUE_SIZE, 0) < 0)
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值