diff options
-rw-r--r-- | video/mp_image.c | 15 | ||||
-rw-r--r-- | video/mp_image.h | 1 |
2 files changed, 10 insertions, 6 deletions
diff --git a/video/mp_image.c b/video/mp_image.c index 05cac1b3ef..0910bb9abc 100644 --- a/video/mp_image.c +++ b/video/mp_image.c @@ -729,14 +729,9 @@ struct mp_image *mp_image_from_av_frame(struct AVFrame *av_frame) } // Convert the mp_image reference to a AVFrame reference. -// Warning: img is unreferenced (i.e. free'd). This is asymmetric to -// mp_image_from_av_frame(). It was done as some sort of optimization, -// but now these semantics are pointless. -// On failure, img is only unreffed. -struct AVFrame *mp_image_to_av_frame_and_unref(struct mp_image *img) +struct AVFrame *mp_image_to_av_frame(struct mp_image *img) { struct mp_image *new_ref = mp_image_new_ref(img); - talloc_free(img); AVFrame *frame = av_frame_alloc(); if (!frame || !new_ref) { talloc_free(new_ref); @@ -754,6 +749,14 @@ struct AVFrame *mp_image_to_av_frame_and_unref(struct mp_image *img) return frame; } +// Same as mp_image_to_av_frame(), but unref img. (It does so even on failure.) +struct AVFrame *mp_image_to_av_frame_and_unref(struct mp_image *img) +{ + AVFrame *frame = mp_image_to_av_frame(img); + talloc_free(img); + return frame; +} + void memcpy_pic(void *dst, const void *src, int bytesPerLine, int height, int dstStride, int srcStride) { diff --git a/video/mp_image.h b/video/mp_image.h index c96674b290..c808b5cf07 100644 --- a/video/mp_image.h +++ b/video/mp_image.h @@ -159,6 +159,7 @@ void mp_image_copy_fields_from_av_frame(struct mp_image *dst, void mp_image_copy_fields_to_av_frame(struct AVFrame *dst, struct mp_image *src); struct mp_image *mp_image_from_av_frame(struct AVFrame *av_frame); +struct AVFrame *mp_image_to_av_frame(struct mp_image *img); struct AVFrame *mp_image_to_av_frame_and_unref(struct mp_image *img); void memcpy_pic(void *dst, const void *src, int bytesPerLine, int height, |