Re: [FFmpeg-devel] [PATCH] avcodec/libdav1d: use a reference to the allocated buffer instead of wrapping the Dav1dPicture

2019-03-19 Thread James Almer
On 3/18/2019 10:38 AM, James Almer wrote:
> Removes an av_malloc() per frame.
> 
> Signed-off-by: James Almer 
> ---
>  libavcodec/libdav1d.c | 20 
>  1 file changed, 4 insertions(+), 16 deletions(-)

Pushed.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] avcodec/libdav1d: use a reference to the allocated buffer instead of wrapping the Dav1dPicture

2019-03-18 Thread James Almer
Removes an av_malloc() per frame.

Signed-off-by: James Almer 
---
 libavcodec/libdav1d.c | 20 
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index d9079cbbef..30c6eccfef 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -149,18 +149,11 @@ static void libdav1d_data_free(const uint8_t *data, void 
*opaque) {
 av_buffer_unref(&buf);
 }
 
-static void libdav1d_frame_free(void *opaque, uint8_t *data) {
-Dav1dPicture *p = opaque;
-
-dav1d_picture_unref(p);
-av_free(p);
-}
-
 static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame)
 {
 Libdav1dContext *dav1d = c->priv_data;
 Dav1dData *data = &dav1d->data;
-Dav1dPicture *p;
+Dav1dPicture pic = { 0 }, *p = &pic;
 int res;
 
 if (!data->sz) {
@@ -194,10 +187,6 @@ static int libdav1d_receive_frame(AVCodecContext *c, 
AVFrame *frame)
 return res;
 }
 
-p = av_mallocz(sizeof(*p));
-if (!p)
-return AVERROR(ENOMEM);
-
 res = dav1d_get_picture(dav1d->c, p);
 if (res < 0) {
 if (res == AVERROR(EINVAL))
@@ -205,17 +194,15 @@ static int libdav1d_receive_frame(AVCodecContext *c, 
AVFrame *frame)
 else if (res == AVERROR(EAGAIN) && c->internal->draining)
 res = AVERROR_EOF;
 
-av_free(p);
 return res;
 }
 
 av_assert0(p->data[0] != NULL);
 
-frame->buf[0] = av_buffer_create(NULL, 0, libdav1d_frame_free,
- p, AV_BUFFER_FLAG_READONLY);
+// This requires the custom allocator above
+frame->buf[0] = av_buffer_ref(p->allocator_data);
 if (!frame->buf[0]) {
 dav1d_picture_unref(p);
-av_free(p);
 return AVERROR(ENOMEM);
 }
 
@@ -310,6 +297,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
 res = 0;
 fail:
+dav1d_picture_unref(p);
 if (res < 0)
 av_frame_unref(frame);
 return res;
-- 
2.21.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel