summaryrefslogtreecommitdiff
path: root/libavformat/flacdec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/flacdec.c')
-rw-r--r--libavformat/flacdec.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c
index ecc47e6ccd..93f8f9df49 100644
--- a/libavformat/flacdec.c
+++ b/libavformat/flacdec.c
@@ -34,7 +34,8 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
{
const CodecMime *mime = ff_id3v2_mime_tags;
enum AVCodecID id = AV_CODEC_ID_NONE;
- uint8_t mimetype[64], *desc = NULL, *data = NULL;
+ AVBufferRef *data = NULL;
+ uint8_t mimetype[64], *desc = NULL;
AVIOContext *pb = NULL;
AVStream *st;
int type, width, height;
@@ -110,10 +111,10 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
ret = AVERROR_INVALIDDATA;
goto fail;
}
- if (!(data = av_malloc(len))) {
+ if (!(data = av_buffer_alloc(len))) {
RETURN_ERROR(AVERROR(ENOMEM));
}
- if (avio_read(pb, data, len) != len) {
+ if (avio_read(pb, data->data, len) != len) {
av_log(s, AV_LOG_ERROR, "Error reading attached picture data.\n");
if (s->error_recognition & AV_EF_EXPLODE)
ret = AVERROR(EIO);
@@ -126,9 +127,9 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
}
av_init_packet(&st->attached_pic);
- st->attached_pic.data = data;
+ st->attached_pic.buf = data;
+ st->attached_pic.data = data->data;
st->attached_pic.size = len;
- st->attached_pic.destruct = av_destruct_packet;
st->attached_pic.stream_index = st->index;
st->attached_pic.flags |= AV_PKT_FLAG_KEY;
@@ -146,8 +147,8 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
return 0;
fail:
+ av_buffer_unref(&data);
av_freep(&desc);
- av_freep(&data);
av_freep(&pb);
return ret;