ffplay代码学习之thread线程

来源:互联网 发布:html windows.onload 编辑:程序博客网 时间:2024/05/16 18:52

转自:http://hi.baidu.com/ccqi0000/blog/item/baa5a3da56b88d215882ddfb.html

一:main  主线程
1>av_register_all  ,SDL_Init,创建timer(定时检查是否有解码后的frame,有就显示)
其中消息循环中
1.捕获key msg
2.捕获系统event
3.捕获event新的frame到的消息---> 需要删除老的SDL,创建新的SDL
4.捕获定时器到的消息,需要SDL显示)

二:decode_thread:分解stream的线程
SDL_CreateThread(decode_thread, is);
1.读取文件:av_open_input_file 获取head信息,av_find_stream_info获取到stream信息
stream_component_open->avcodec_find_decoder,avcodec_open找到相应的解码器,分配之并打开解码器

2.av_read_frame(is->pFormatCtx, packet)将stream中的原始数据包一个一个读出来

3.packet_queue_put(&is->q, packet)将读出来的原始音视频包分别保存到各自的队列中

三.video_thread : 解码线程
is->video_tid = SDL_CreateThread(video_thread, is);
1.
packet_queue_get//获取原始stream packet
2.
avcodec_decode_video//解码原始packet,获得解码后的frame
3.
queue_picture //将解码出来的frame再编码转化为SDL能显示的数据格式(ffmpeg下 为YUV)后,再通知主线程去显示出来了。

 


原创粉丝点击