StreamInfo *stream = st->priv_data;
int64_t pts, dts;
PacketDesc *pkt_desc;
- int preload;
+ int preload, ret;
const int is_iframe = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
(pkt->flags & AV_PKT_FLAG_KEY);
av_log(ctx, AV_LOG_TRACE, "dts:%f pts:%f flags:%d stream:%d nopts:%d\n",
dts / 90000.0, pts / 90000.0, pkt->flags,
pkt->stream_index, pts != AV_NOPTS_VALUE);
- pkt_desc = av_mallocz(sizeof(PacketDesc));
- if (!pkt_desc)
- return AVERROR(ENOMEM);
- if (!stream->predecode_packet) {
- stream->predecode_packet = pkt_desc;
- } else
- stream->last_packet->next = pkt_desc;
- stream->last_packet = pkt_desc;
- if (!stream->premux_packet)
- stream->premux_packet = pkt_desc;
- pkt_desc->pts = pts;
- pkt_desc->dts = dts;
if (st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) {
if (size < 3) {
size -= 3;
}
+ pkt_desc = av_mallocz(sizeof(PacketDesc));
+ if (!pkt_desc)
+ return AVERROR(ENOMEM);
+ if (!stream->predecode_packet) {
+ stream->predecode_packet = pkt_desc;
+ } else
+ stream->last_packet->next = pkt_desc;
+ stream->last_packet = pkt_desc;
+ if (!stream->premux_packet)
+ stream->premux_packet = pkt_desc;
+ pkt_desc->pts = pts;
+ pkt_desc->dts = dts;
pkt_desc->unwritten_size =
pkt_desc->size = size;
- if (av_fifo_realloc2(stream->fifo, av_fifo_size(stream->fifo) + size) < 0)
- return -1;
+ ret = av_fifo_realloc2(stream->fifo, av_fifo_size(stream->fifo) + size);
+ if (ret < 0)
+ return ret;
if (s->is_dvd) {
// min VOBU length 0.4 seconds (mpucoder)
StreamInfo *stream = ctx->streams[i]->priv_data;
if (!stream)
continue;
+ for (PacketDesc *pkt = stream->predecode_packet; pkt; ) {
+ PacketDesc *tmp = pkt->next;
+ av_free(pkt);
+ pkt = tmp;
+ }
av_fifo_freep(&stream->fifo);
}
}