AVFormatContext *sub_ctx;
AVPacket sub_pkt;
- uint8_t *sub_buffer;
+ AVBufferRef *sub_buffer;
int64_t seek_pos;
} AVIStream;
ast = s->streams[0]->priv_data;
st->priv_data = NULL;
ff_free_stream(s, st);
- avi->dv_demux = avpriv_dv_init_demux(s);
- if (!avi->dv_demux)
- goto fail;
+
+ avi->dv_demux = avpriv_dv_init_demux(s);
+ if (!avi->dv_demux) {
+ av_free(ast);
+ return AVERROR(ENOMEM);
+ }
s->streams[0]->priv_data = ast;
avio_skip(pb, 3 * 4);
time_base = ast->sub_ctx->streams[0]->time_base;
avpriv_set_pts_info(st, 64, time_base.num, time_base.den);
}
- ast->sub_buffer = pkt->data;
- memset(pkt, 0, sizeof(*pkt));
+ ast->sub_buffer = pkt->buf;
+ pkt->buf = NULL;
+ av_packet_unref(pkt);
return 1;
error:
av_freep(&ast->sub_ctx->pb);
avformat_close_input(&ast->sub_ctx);
}
- av_freep(&ast->sub_buffer);
+ av_buffer_unref(&ast->sub_buffer);
av_packet_unref(&ast->sub_pkt);
}
}