bool stream_end = ctx->bit_stream_param &
                                  CODA_BIT_STREAM_END_FLAG;
                int num_metas = ctx->num_metas;
+               struct coda_buffer_meta *meta;
                unsigned int count;
 
                count = hweight32(ctx->frm_dis_flg);
 
                if (!stream_end && (num_metas + src_bufs) < 2) {
                        v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
-                                "%d: not ready: need 2 buffers available (%d, %d)\n",
+                                "%d: not ready: need 2 buffers available (queue:%d + bitstream:%d)\n",
                                 ctx->idx, num_metas, src_bufs);
                        return 0;
                }
 
-               if (!src_bufs && !stream_end &&
-                   (coda_get_bitstream_payload(ctx) < 512)) {
+               meta = list_first_entry(&ctx->buffer_meta_list,
+                                       struct coda_buffer_meta, list);
+               if (!coda_bitstream_can_fetch_past(ctx, meta->end) &&
+                   !stream_end) {
                        v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
-                                "%d: not ready: not enough bitstream data (%d).\n",
-                                ctx->idx, coda_get_bitstream_payload(ctx));
+                                "not ready: not enough bitstream data to read past %u (%u)\n",
+                                meta->end, ctx->bitstream_fifo.kfifo.in);
                        return 0;
                }
        }
 
        return kfifo_len(&ctx->bitstream_fifo);
 }
 
+/*
+ * The bitstream prefetcher needs to read at least 2 256 byte periods past
+ * the desired bitstream position for all data to reach the decoder.
+ */
+static inline bool coda_bitstream_can_fetch_past(struct coda_ctx *ctx,
+                                                unsigned int pos)
+{
+       return (int)(ctx->bitstream_fifo.kfifo.in - ALIGN(pos, 256)) > 512;
+}
+
+bool coda_bitstream_can_fetch_past(struct coda_ctx *ctx, unsigned int pos);
+
 void coda_bit_stream_end_flag(struct coda_ctx *ctx);
 
 void coda_m2m_buf_done(struct coda_ctx *ctx, struct vb2_v4l2_buffer *buf,