diff --git a/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
index d5805c2bdbabfe2c1e005e9c0c91792582ea023c..5cfffe9900add59f7fe33deac2df1d386c205a7a 100644
--- a/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
+++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
@@ -223,7 +223,10 @@ void QnxAudioOutput::pullData()
     if (frames == 0 || bytesAvailable < periodSize())
         return;
 
-    const int bytesRequested = m_format.bytesForFrames(frames);
+    // The buffer is placed on the stack so no more than 64K or 1 frame
+    // whichever is larger.
+    const int maxFrames = qMax(m_format.framesForBytes(64 * 1024), 1);
+    const int bytesRequested = m_format.bytesForFrames(qMin(frames, maxFrames));
 
     char buffer[bytesRequested];
     const int bytesRead = m_source->read(buffer, bytesRequested);