From d04aa5ef4e12f5bee3343e833e1209774e9204d9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 15 Apr 2016 15:33:53 +0200 Subject: mp_image: add mp_image_to_av_frame() What mp_image_to_av_frame_and_unref() should have been. (The _unref variant is still useful though.) --- video/mp_image.c | 15 +++++++++------ 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, -- cgit v1.2.3