diff --git a/libavfilter/af_ashowinfo.c b/libavfilter/af_ashowinfo.c
index c8e4d31a5bfb73d97a3c4c43ee06a04f4f3c193b..0ad725242109043442f21691bf410cbf87a602c0 100644
--- a/libavfilter/af_ashowinfo.c
+++ b/libavfilter/af_ashowinfo.c
@@ -46,9 +46,10 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
     char chlayout_str[128];
     int plane;
     int linesize =
-        av_get_channel_layout_nb_channels(samplesref->audio->channel_layout) *
         samplesref->audio->nb_samples *
         av_get_bytes_per_sample(samplesref->format);
+    if (!samplesref->audio->planar) /* packed layout */
+        linesize *= av_get_channel_layout_nb_channels(samplesref->audio->channel_layout);
 
     for (plane = 0; samplesref->data[plane] && plane < 8; plane++) {
         uint8_t *data = samplesref->data[plane];