diff --git a/doc/APIchanges b/doc/APIchanges index 8eeaec2028..f2bb2d242b 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2017-10-21 API changes, most recent first: +2020-03-27 - xxxxxxxxxx - lavc 58.77.100 - avcodec.h + av_packet_ref() now guarantees to return the destination packet + in a blank state on error. + 2020-03-10 - xxxxxxxxxx - lavc 58.75.100 - avcodec.h Add AV_PKT_DATA_ICC_PROFILE. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index f918d20a61..8fc0ad92c9 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -4651,7 +4651,8 @@ void av_packet_free_side_data(AVPacket *pkt); * @param dst Destination packet. Will be completely overwritten. * @param src Source packet * - * @return 0 on success, a negative AVERROR on error. + * @return 0 on success, a negative AVERROR on error. On error, dst + * will be blank (as if returned by av_packet_alloc()). */ int av_packet_ref(AVPacket *dst, const AVPacket *src); diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 132567bc2d..c622718a45 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -610,12 +610,13 @@ int av_packet_ref(AVPacket *dst, const AVPacket *src) { int ret; + dst->buf = NULL; + ret = av_packet_copy_props(dst, src); if (ret < 0) - return ret; + goto fail; if (!src->buf) { - dst->buf = NULL; ret = packet_alloc(&dst->buf, src->size); if (ret < 0) goto fail; @@ -637,7 +638,7 @@ int av_packet_ref(AVPacket *dst, const AVPacket *src) return 0; fail: - av_packet_free_side_data(dst); + av_packet_unref(dst); return ret; } diff --git a/libavcodec/version.h b/libavcodec/version.h index 1f19b67adc..7e01d9526f 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 76 +#define LIBAVCODEC_VERSION_MINOR 77 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \