diff options
authorwm4 <wm4@nowhere>2016-04-15 15:33:53 +0200
committerwm4 <wm4@nowhere>2016-04-15 15:33:53 +0200
commitd04aa5ef4e12f5bee3343e833e1209774e9204d9 (patch)
parente6cdfdfa7446dca9b6737650e912ccd6122050b6 (diff)
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.)
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) {
@@ -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,