34.FFmpeg学习笔记 - ffplay源码解读2之数据结构

本文深入解析ffplay的VideoState结构体,理解管理全局播放状态的机制;探讨PacketQueue如何通过链表队列存储音视频、字幕packet;介绍FrameQueue作为环形队列在存储解码后frame的角色;并介绍了Decoder结构及其在解码过程中的作用;最后阐述了Clock在同步中的关键功能。
摘要由CSDN通过智能技术生成

本篇分析一下ffplay的数据结构。

(1)VideoState

VideoState结构体,正如名字的含义,管理了一些全局的播放状态。

typedef struct VideoState {
    SDL_Thread *read_tid;   //读文件线程id
    AVInputFormat *iformat; //输入格式
    /*
     丢弃标志,在切换音视频流和关闭流时,会置为1。
     当为1时,读文件线程和解码线程会退出循环或返回错误,以此来终止线程。
     */
    int abort_request;
    int force_refresh;  //强制刷新
    int paused; //是否暂停
    int last_paused;
    int queue_attachments_req;  //是否请求attachments(对于mp3来说,就是封面图片)
    int seek_req;   //seek(前进/后退)标志,为1时表示要seek
    int seek_flags; //按字节还是时间seek
    int64_t seek_pos;   //seek目标位置
    int64_t seek_rel;   //seek增量
    int read_pause_return;
    AVFormatContext *ic;
    int realtime;
    
    /*
     ffplay提供了三种音视频同步的方法:视频同步到音频,音频同步到视频,音视频同步到外部时钟,
     */
    Clock audclk;   //音频时钟
    Clock vidclk;   //视频时钟
    Clock extclk;   //外部时钟
    
    /*
     解码后,frame要存于队列中。
     */
    FrameQueue 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值