[media] coda: pad input stream for JPEG decoder
authorPhilipp Zabel <p.zabel@pengutronix.de>
Thu, 2 Oct 2014 17:08:33 +0000 (14:08 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 28 Oct 2014 17:38:37 +0000 (15:38 -0200)
Before starting a PIC_RUN, pad the bitstream with 0xff until 256 bytes
past the next multiple of 256 bytes, if the buffer to be decoded is the
last buffer in the bitstream.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/coda/coda-bit.c

index d1ecda5..27e0764 100644 (file)
@@ -1625,6 +1625,26 @@ static int coda_prepare_decode(struct coda_ctx *ctx)
                coda_write(dev, ctx->iram_info.axi_sram_use,
                                CODA7_REG_BIT_AXI_SRAM_USE);
 
+       if (ctx->codec->src_fourcc == V4L2_PIX_FMT_JPEG) {
+               struct coda_buffer_meta *meta;
+
+               /* If this is the last buffer in the bitstream, add padding */
+               meta = list_first_entry(&ctx->buffer_meta_list,
+                                     struct coda_buffer_meta, list);
+               if (meta->end == (ctx->bitstream_fifo.kfifo.in &
+                                 ctx->bitstream_fifo.kfifo.mask)) {
+                       static unsigned char buf[512];
+                       unsigned int pad;
+
+                       /* Pad to multiple of 256 and then add 256 more */
+                       pad = ((0 - meta->end) & 0xff) + 256;
+
+                       memset(buf, 0xff, sizeof(buf));
+
+                       kfifo_in(&ctx->bitstream_fifo, buf, pad);
+               }
+       }
+
        coda_kfifo_sync_to_device_full(ctx);
 
        coda_command_async(ctx, CODA_COMMAND_PIC_RUN);