diff --git a/avplay.c b/avplay.c
index 242b9aec87795a8eea5a4603c2d7f29a737b214e..98fd954be5ae531104591b178dcbec9cec8dac78 100644
--- a/avplay.c
+++ b/avplay.c
@@ -1580,8 +1580,10 @@ static int video_thread(void *arg)
     AVFilterContext *filt_out = NULL, *filt_in = NULL;
     int last_w = is->video_st->codec->width;
     int last_h = is->video_st->codec->height;
-    if (!graph)
+    if (!graph) {
+        av_frame_free(&frame);
         return AVERROR(ENOMEM);
+    }
 
     if ((ret = configure_video_filters(graph, is, vfilters)) < 0)
         goto the_end;
@@ -1589,8 +1591,12 @@ static int video_thread(void *arg)
     filt_out = is->out_video_filter;
 #endif
 
-    if (!frame)
+    if (!frame) {
+#if CONFIG_AVFILTER
+        avfilter_graph_free(&graph);
+#endif
         return AVERROR(ENOMEM);
+    }
 
     for (;;) {
 #if CONFIG_AVFILTER