[FFmpeg-cvslog] asfdec: do not assume every AVStream has a corresponding ASFStream
Anton Khirnov
git at videolan.org
Sun Feb 10 13:22:03 CET 2013
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Fri Feb 8 13:54:36 2013 +0100| [1ef0e8a6bf894974445e303c6e428aac7f0aaa75] | committer: Anton Khirnov
asfdec: do not assume every AVStream has a corresponding ASFStream
This won't be true for ID3 attached picture.
Also stop allocating now useless dummy ASFStreams for ASF native
attached pictures.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1ef0e8a6bf894974445e303c6e428aac7f0aaa75
---
libavformat/asfdec.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 0a315d4..d469431 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -22,6 +22,7 @@
//#define DEBUG
#include "libavutil/attributes.h"
+#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/bswap.h"
#include "libavutil/common.h"
@@ -193,7 +194,6 @@ static int asf_read_picture(AVFormatContext *s, int len)
enum AVCodecID id = AV_CODEC_ID_NONE;
char mimetype[64];
uint8_t *desc = NULL;
- ASFStream *ast = NULL;
AVStream *st = NULL;
int ret, type, picsize, desc_len;
@@ -248,12 +248,10 @@ static int asf_read_picture(AVFormatContext *s, int len)
goto fail;
st = avformat_new_stream(s, NULL);
- ast = av_mallocz(sizeof(*ast));
- if (!st || !ast) {
+ if (!st) {
ret = AVERROR(ENOMEM);
goto fail;
}
- st->priv_data = ast;
st->disposition |= AV_DISPOSITION_ATTACHED_PIC;
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->codec_id = id;
@@ -271,7 +269,6 @@ static int asf_read_picture(AVFormatContext *s, int len)
return 0;
fail:
- av_freep(&ast);
av_freep(&desc);
av_free_packet(&pkt);
return ret;
@@ -1107,6 +1104,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
asf->asf_st = s->streams[asf->stream_index]->priv_data;
}
asf_st = asf->asf_st;
+ av_assert0(asf_st);
if (asf->packet_replic_size == 1) {
// frag_offset is here used as the beginning timestamp
@@ -1316,6 +1314,8 @@ static void asf_reset_header(AVFormatContext *s)
for (i = 0; i < s->nb_streams; i++) {
asf_st = s->streams[i]->priv_data;
+ if (!asf_st)
+ continue;
av_free_packet(&asf_st->pkt);
asf_st->frag_offset = 0;
asf_st->seq = 0;
@@ -1364,6 +1364,7 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index,
i = pkt->stream_index;
asf_st = s->streams[i]->priv_data;
+ av_assert0(asf_st);
// assert((asf_st->packet_pos - s->data_offset) % s->packet_size == 0);
pos = asf_st->packet_pos;
More information about the ffmpeg-cvslog
mailing list