1.
av_read_frame返回后可以保证读到的是一个完整帧
av_read_frame(is->pFormatCtx, is->packet);
-
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
-
{
-
1. 先判断AVPacketList中是否有数据,若有数据直接从AVPacketList中返回一帧
-
2. 若AVPacketList中没有数据,则:
-
ret = read_frame_internal(s, pkt); ;;读取一帧
-
add_to_pktbuf(); ;;将packet加入s->raw_packet_buffer中
-
av_packet_unref();
-
}
av_read_frame
-->read_frame_internal
-
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
-
{
-
av_init_packet(pkt); //pkt中的变量设为0,buf设为NULL
-
ff_read_packet();
-
}
av_read_frame
-->read_frame_internal
--> ff_read_packet
ff_read_packet()
{
1. 检查raw_packet_buffer中是否有buf,有的话直接probe_codec然后返回
2. 若没有buf,则:
av_init_packet(pkt);
ret = s->iformat->read_packet(s, pkt); //调用具体container的read_packet
pts dts 的有关操作
force_codec_ids(s, st);
add_to_pktbuf
probe_codec
}
下面就进入到具体的container的read函数中
av_read_frame
-->read_frame_internal
--> ff_read_packet
--> mov_read_packet
mov_read_packet()
{
}
阅读(4333) | 评论(0) | 转发(0) |