[FFmpeg-devel] [PATCH 1/4] avutil/frame: Add private_ref to AVFrame
Timo Rothenpieler
timo at rothenpieler.org
Fri Nov 10 18:03:14 EET 2017
From: Michael Niedermayer <michael at niedermayer.cc>
This gives FFmpeg libs a field that they can freely and safely use.
Avoiding the need of wrapping of a users opaque_ref field and its issues.
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
libavutil/frame.c | 8 +++++++-
libavutil/frame.h | 13 +++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/libavutil/frame.c b/libavutil/frame.c
index 982fbb5c81..662a7e5ab5 100644
--- a/libavutil/frame.c
+++ b/libavutil/frame.c
@@ -383,12 +383,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
#endif
av_buffer_unref(&dst->opaque_ref);
+ av_buffer_unref(&dst->private_ref);
if (src->opaque_ref) {
dst->opaque_ref = av_buffer_ref(src->opaque_ref);
if (!dst->opaque_ref)
return AVERROR(ENOMEM);
}
-
+ if (src->private_ref) {
+ dst->private_ref = av_buffer_ref(src->private_ref);
+ if (!dst->private_ref)
+ return AVERROR(ENOMEM);
+ }
return 0;
}
@@ -524,6 +529,7 @@ void av_frame_unref(AVFrame *frame)
av_buffer_unref(&frame->hw_frames_ctx);
av_buffer_unref(&frame->opaque_ref);
+ av_buffer_unref(&frame->private_ref);
get_frame_defaults(frame);
}
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 0c6aab1c02..d54bd9a354 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -563,6 +563,19 @@ typedef struct AVFrame {
/**
* @}
*/
+
+ /**
+ * AVBufferRef for internal use by a single libav* library.
+ * Must not be used to transfer data between libraries.
+ * Has to be NULL when ownership of the frame leaves the respective library.
+ *
+ * Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
+ *
+ * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
+ * av_frame_copy_props() calls create a new reference with av_buffer_ref()
+ * for the target frame's private_ref field.
+ */
+ AVBufferRef *private_ref;
} AVFrame;
#if FF_API_FRAME_GET_SET
--
2.15.0
More information about the ffmpeg-devel
mailing list