diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c
index d6e0256e6090418e1a0fdfe4354bac60e3151346..4cd3f65455a6b2b1a6ea56f2c6a2481a45bc7199 100644
--- a/doc/examples/muxing.c
+++ b/doc/examples/muxing.c
@@ -163,6 +163,11 @@ static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st)
         exit(1);
     }
 
+    /* compute the number of converted samples: buffering is avoided
+     * ensuring that the output buffer will contain at least all the
+     * converted input samples */
+    max_dst_nb_samples = src_nb_samples;
+
     /* create resampler context */
     if (c->sample_fmt != AV_SAMPLE_FMT_S16) {
         swr_ctx = swr_alloc();
@@ -184,17 +189,15 @@ static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st)
             fprintf(stderr, "Failed to initialize the resampling context\n");
             exit(1);
         }
-    }
 
-    /* compute the number of converted samples: buffering is avoided
-     * ensuring that the output buffer will contain at least all the
-     * converted input samples */
-    max_dst_nb_samples = src_nb_samples;
-    ret = av_samples_alloc_array_and_samples(&dst_samples_data, &dst_samples_linesize, c->channels,
-                                             max_dst_nb_samples, c->sample_fmt, 0);
-    if (ret < 0) {
-        fprintf(stderr, "Could not allocate destination samples\n");
-        exit(1);
+        ret = av_samples_alloc_array_and_samples(&dst_samples_data, &dst_samples_linesize, c->channels,
+                                                 max_dst_nb_samples, c->sample_fmt, 0);
+        if (ret < 0) {
+            fprintf(stderr, "Could not allocate destination samples\n");
+            exit(1);
+        }
+    } else {
+        dst_samples_data = src_samples_data;
     }
     dst_samples_size = av_samples_get_buffer_size(NULL, c->channels, max_dst_nb_samples,
                                                   c->sample_fmt, 0);
@@ -254,7 +257,6 @@ static void write_audio_frame(AVFormatContext *oc, AVStream *st)
             exit(1);
         }
     } else {
-        dst_samples_data[0] = src_samples_data[0];
         dst_nb_samples = src_nb_samples;
     }
 
@@ -287,8 +289,12 @@ freeframe:
 static void close_audio(AVFormatContext *oc, AVStream *st)
 {
     avcodec_close(st->codec);
+    if (dst_samples_data != src_samples_data) {
+        av_free(dst_samples_data[0]);
+        av_free(dst_samples_data);
+    }
     av_free(src_samples_data[0]);
-    av_free(dst_samples_data[0]);
+    av_free(src_samples_data);
 }
 
 /**************************************************************/