From a7f41dcefa6660d2f0173d2a0959373061d39194 Mon Sep 17 00:00:00 2001 From: nick black Date: Sat, 5 Jun 2021 22:59:23 -0400 Subject: [PATCH] ffmpeg_resize: check for owndata before frame_unref #1718 --- src/lib/visual-details.h | 1 + src/media/ffmpeg.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/visual-details.h b/src/lib/visual-details.h index fda6efeed..219b0c030 100644 --- a/src/lib/visual-details.h +++ b/src/lib/visual-details.h @@ -30,6 +30,7 @@ typedef struct ncvisual { static inline void ncvisual_set_data(ncvisual* ncv, void* data, bool owned){ +//fprintf(stderr, "replacing %p with %p (%u -> %u)\n", ncv->data, data, ncv->owndata, owned); if(ncv->owndata){ if(data != ncv->data){ free(ncv->data); diff --git a/src/media/ffmpeg.c b/src/media/ffmpeg.c index 0e158240b..184a6c7f1 100644 --- a/src/media/ffmpeg.c +++ b/src/media/ffmpeg.c @@ -526,8 +526,9 @@ int ffmpeg_resize(ncvisual* n, int rows, int cols){ n->rowstride = sframe->linesize[0]; n->pixy = rows; n->pixx = cols; -//fprintf(stderr, "SETTING UP RESIZE %p\n", n->data); - av_frame_unref(n->details->frame); + if(n->owndata){ + av_frame_unref(n->details->frame); + } ncvisual_set_data(n, sframe->data[0], true); n->details->frame = sframe; //fprintf(stderr, "SIZE SCALED: %d %d (%u)\n", n->details->frame->height, n->details->frame->width, n->details->frame->linesize[0]);