diff --git a/avconv.c b/avconv.c
index df09b21c7891ea473c27193e36500ee838e3656c..0b703edd3c87f28c591b0ec2433a8589d39f8b85 100644
--- a/avconv.c
+++ b/avconv.c
@@ -180,11 +180,11 @@ void exit_program(int ret)
             bsfc = next;
         }
         output_streams[i]->bitstream_filters = NULL;
+        avcodec_free_frame(&output_streams[i]->filtered_frame);
 
         av_freep(&output_streams[i]->forced_keyframes);
         av_freep(&output_streams[i]->avfilter);
         av_freep(&output_streams[i]->logfile_prefix);
-        av_freep(&output_streams[i]->filtered_frame);
         av_freep(&output_streams[i]);
     }
     for (i = 0; i < nb_input_files; i++) {
@@ -192,7 +192,7 @@ void exit_program(int ret)
         av_freep(&input_files[i]);
     }
     for (i = 0; i < nb_input_streams; i++) {
-        av_freep(&input_streams[i]->decoded_frame);
+        avcodec_free_frame(&input_streams[i]->decoded_frame);
         av_dict_free(&input_streams[i]->opts);
         free_buffer_pool(&input_streams[i]->buffer_pool);
         av_freep(&input_streams[i]->filters);
diff --git a/avplay.c b/avplay.c
index a0b0e5bc5659b8517b61b2b2a1de358e200b1b9f..d47cf9439a82dc081bdd5aafd3c51073cfa25305 100644
--- a/avplay.c
+++ b/avplay.c
@@ -1704,7 +1704,7 @@ static int video_thread(void *arg)
     avfilter_graph_free(&graph);
 #endif
     av_free_packet(&pkt);
-    av_free(frame);
+    avcodec_free_frame(&frame);
     return 0;
 }
 
@@ -2191,7 +2191,7 @@ static void stream_component_close(VideoState *is, int stream_index)
             avresample_free(&is->avr);
         av_freep(&is->audio_buf1);
         is->audio_buf = NULL;
-        av_freep(&is->frame);
+        avcodec_free_frame(&is->frame);
 
         if (is->rdft) {
             av_rdft_end(is->rdft);
diff --git a/libavcodec/api-example.c b/libavcodec/api-example.c
index d0253542ddfebf24daf6b3ed3853e6a343c384c1..62750804baf5646df4a68d41d1b7d9ac178c1070 100644
--- a/libavcodec/api-example.c
+++ b/libavcodec/api-example.c
@@ -212,7 +212,7 @@ static void audio_encode_example(const char *filename)
     fclose(f);
 
     av_freep(&samples);
-    av_freep(&frame);
+    avcodec_free_frame(&frame);
     avcodec_close(c);
     av_free(c);
 }
@@ -308,7 +308,7 @@ static void audio_decode_example(const char *outfilename, const char *filename)
 
     avcodec_close(c);
     av_free(c);
-    av_free(decoded_frame);
+    avcodec_free_frame(&decoded_frame);
 }
 
 /*
@@ -432,7 +432,7 @@ static void video_encode_example(const char *filename)
     avcodec_close(c);
     av_free(c);
     av_freep(&picture->data[0]);
-    av_free(picture);
+    avcodec_free_frame(&picture);
     printf("\n");
 }
 
@@ -568,7 +568,7 @@ static void video_decode_example(const char *outfilename, const char *filename)
 
     avcodec_close(c);
     av_free(c);
-    av_free(picture);
+    avcodec_free_frame(&picture);
     printf("\n");
 }
 
diff --git a/libavfilter/vsrc_movie.c b/libavfilter/vsrc_movie.c
index aeab10235ca838fd7324e16539cc4136662cf40a..78e1642bac362ef5feaa5d5ebaf56430932d621e 100644
--- a/libavfilter/vsrc_movie.c
+++ b/libavfilter/vsrc_movie.c
@@ -197,7 +197,7 @@ static av_cold void uninit(AVFilterContext *ctx)
     if (movie->format_ctx)
         avformat_close_input(&movie->format_ctx);
     avfilter_unref_buffer(movie->picref);
-    av_freep(&movie->frame);
+    avcodec_free_frame(&movie->frame);
 }
 
 static int query_formats(AVFilterContext *ctx)
diff --git a/libavformat/output-example.c b/libavformat/output-example.c
index 27950a162b6c732dd6ad72b803c2c11d4335dbcf..1011c2c645c7926952621622c1a27a97a7eb8284 100644
--- a/libavformat/output-example.c
+++ b/libavformat/output-example.c
@@ -165,6 +165,7 @@ static void write_audio_frame(AVFormatContext *oc, AVStream *st)
         fprintf(stderr, "Error while writing audio frame\n");
         exit(1);
     }
+    avcodec_free_frame(&frame);
 }
 
 static void close_audio(AVFormatContext *oc, AVStream *st)