//cwm at libavformat/utils.c:682 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) { int ret, size; size = RAW_PACKET_SIZE;//cwm 1024 if (av_new_packet(pkt, size) < 0) return AVERROR(ENOMEM); pkt->pos= avio_tell(s->pb);//得到当前文件的写位置 pkt->stream_index = 0; ret = ffio_read_partial(s->pb, pkt->data, size);//cwm 读文件的数据到pkt->data if (ret < 0) { av_packet_unref(pkt); return ret; } av_shrink_packet(pkt, ret);//cwm pkt->size=size,且把未使用的buffer清0 return ret; }
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) { int ret, size; size = RAW_PACKET_SIZE; if (av_new_packet(pkt, size) < 0) return AVERROR(ENOMEM); pkt->pos= avio_tell(s->pb); pkt->stream_index = 0; ret = ffio_read_partial(s->pb, pkt->data, size); if (ret < 0) { av_free_packet(pkt); return ret; } av_shrink_packet(pkt, ret); return ret; }
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) { int ret, size; size = RAW_PACKET_SIZE; if (av_new_packet(pkt, size) < 0) return AVERROR(ENOMEM); pkt->pos= avio_tell(s->pb); pkt->stream_index = 0; ret = ffio_read_partial(s->pb, pkt->data, size); if (ret < 0) { av_free_packet(pkt); return ret; } else if (ret < size) { /* initialize end of packet for partial reads to avoid reading * uninitialized data on allowed overreads */ memset(pkt->data + ret, 0, FF_INPUT_BUFFER_PADDING_SIZE); } pkt->size = ret; return ret; }