ijkplayer系列13:video_refresh_thread

ffp_video_thread
在这里插入图片描述
这个线程用来处理视频解码。解码的调用流程如下:
以上可以看出,解码流程主动分为以下三部分:

  1. 初始化解码器。
  2. 开启解码器,如果配置了硬解则会尝试去创建硬解码器,没有配置硬解或者尝试创建硬解码器失败则创建软解码器。
  3. 启动解码线程,可以发现硬解和软解最终进入的方法是不同的,后面我们会针对两者分别解析。
    我们先来看下decoder_init():
static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond) {
    memset(d, 0, sizeof(Decoder));
    d->avctx = avctx;
    // 保存数据来源的队列引用,这个队列存储了从流中读取的未解码的帧数据
    d->queue = queue;
    d->empty_queue_cond = empty_queue_cond;
    d->start_pts = AV_NOPTS_VALUE;

    // 将当前时间点(系统启动至今的毫秒数)作为第一帧解码的时间点
    d->first_frame_decoded_time = SDL_GetTickHR();
    d->first_frame_decoded = 0;

    SDL_ProfilerReset(&d->decode_profiler, -1);
}

可以发现,初始化解码器做的事情比较简单,核心的工作我都备注出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值