diff --git a/src/lib/visual-details.h b/src/lib/visual-details.h index 95a686a69..a25314712 100644 --- a/src/lib/visual-details.h +++ b/src/lib/visual-details.h @@ -30,7 +30,9 @@ typedef struct ncvisual { static inline void ncvisual_set_data(ncvisual* ncv, void* data, bool owned){ if(ncv->owndata){ - free(ncv->data); + if(data != ncv->data){ + free(ncv->data); + } } ncv->data = (uint32_t*)data; ncv->owndata = owned; diff --git a/src/media/ffmpeg.c b/src/media/ffmpeg.c index 7a8c41be0..673c9378f 100644 --- a/src/media/ffmpeg.c +++ b/src/media/ffmpeg.c @@ -244,9 +244,12 @@ int ffmpeg_resize(ncvisual* n, int rows, int cols){ n->rowstride = sframe->linesize[0]; n->pixy = rows; n->pixx = cols; - ncvisual_set_data(n, sframe->data[0], false); - if(n->details->frame){ - av_freep(&n->details->frame); + if((uint32_t*)sframe->data[0] != n->data){ +//fprintf(stderr, "SETTING UP RESIZE %p\n", n->data); + ncvisual_set_data(n, sframe->data[0], false); + if(n->details->frame){ + av_freep(&n->details->frame); + } } n->details->frame = sframe;