diff --git a/libavformat/internal.h b/libavformat/internal.h index 163587f416..67c35cc3e1 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -763,7 +763,8 @@ void ff_format_set_url(AVFormatContext *s, char *url); * * @param head List head element * @param tail List tail element - * @param pkt The packet being appended + * @param pkt The packet being appended. The data described in it will + * be made reference counted if it isn't already. * @param flags Any combination of FF_PACKETLIST_FLAG_* flags * @return 0 on success, negative AVERROR value on failure. On failure, the list is unchanged diff --git a/libavformat/utils.c b/libavformat/utils.c index 19fee40eec..9f8a5bfb63 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -460,6 +460,11 @@ int ff_packet_list_put(AVPacketList **packet_buffer, return ret; } } else { + ret = av_packet_make_refcounted(pkt); + if (ret < 0) { + av_free(pktl); + return ret; + } av_packet_move_ref(&pktl->pkt, pkt); }