您的位置:首页 > 其它

简析video_thread

2013-12-13 16:50 260 查看
static int video_thread(void *arg)
{
VideoState *is = arg;
AVPacket pkt1, *pkt = &pkt1;
int len1, got_picture;
AVFrame *frame= avcodec_alloc_frame();
double pts;

for(;;)
{
//不停的从视频PacketQueue 队列中取出视频Packet
if (packet_queue_get(&is->videoq, pkt, 1) < 0)
break;

//调用AVCodecContext下AVCodec接口的decode()函数解码视频Packet
len1 = avcodec_decode_video(is->video_st->codec,
frame, &got_picture,
pkt->data, pkt->size);

//got_picture = 0时即解码没有一帧的视频,decoder会将Packet数据累积起来,和接下来的Packet共同解码视频帧
if (got_picture)
{
//解码得到视频一帧,后做颜色空间转化并调用SDL 库显示出来
output_picture2(is, frame, pts);
}

av_free_packet(pkt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: