* @param buf if set, it contains the data and size information to be used
* for the attached pic; if unset, data is read from pb.
* @param size the size of the data to read if buf is unset.
+ *
+ * @return 0 on success, < 0 on error. On error, this function removes
+ * the stream it has added (if any).
*/
int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb,
AVBufferRef **buf, int size);
return 0;
}
-int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb,
+int ff_add_attached_pic(AVFormatContext *s, AVStream *st0, AVIOContext *pb,
AVBufferRef **buf, int size)
{
+ AVStream *st = st0;
AVPacket *pkt;
int ret;
} else {
ret = av_get_packet(pb, pkt, size);
if (ret < 0)
- return ret;
+ goto fail;
}
st->disposition |= AV_DISPOSITION_ATTACHED_PIC;
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
pkt->flags |= AV_PKT_FLAG_KEY;
return 0;
+fail:
+ if (!st0)
+ ff_free_stream(s, st);
+ return ret;
}
static int update_stream_avctx(AVFormatContext *s)