+static av_always_inline void put_block_8x4(int16_t *block, uint8_t *av_restrict p, int stride)
+{
+ int i, j;
+
+ for (i = 0; i < 4; i++) {
+ for (j = 0; j < 8; j++)
+ p[j] = av_clip_uint8(block[j]);
+ block += 8;
+ p += stride;
+ }
+}
+
+static void dv100_idct_put_last_row_field_chroma(DVVideoContext *s, uint8_t *data,
+ int stride, int16_t *blocks)
+{
+ s->idsp.idct(blocks + 0*64);
+ s->idsp.idct(blocks + 1*64);
+
+ put_block_8x4(blocks+0*64, data, stride<<1);
+ put_block_8x4(blocks+0*64 + 4*8, data + 8, stride<<1);
+ put_block_8x4(blocks+1*64, data + stride, stride<<1);
+ put_block_8x4(blocks+1*64 + 4*8, data + 8 + stride, stride<<1);
+}
+
+static void dv100_idct_put_last_row_field_luma(DVVideoContext *s, uint8_t *data,
+ int stride, int16_t *blocks)
+{
+ s->idsp.idct(blocks + 0*64);
+ s->idsp.idct(blocks + 1*64);
+ s->idsp.idct(blocks + 2*64);
+ s->idsp.idct(blocks + 3*64);
+
+ put_block_8x4(blocks+0*64, data, stride<<1);
+ put_block_8x4(blocks+0*64 + 4*8, data + 16, stride<<1);
+ put_block_8x4(blocks+1*64, data + 8, stride<<1);
+ put_block_8x4(blocks+1*64 + 4*8, data + 24, stride<<1);
+ put_block_8x4(blocks+2*64, data + stride, stride<<1);
+ put_block_8x4(blocks+2*64 + 4*8, data + 16 + stride, stride<<1);
+ put_block_8x4(blocks+3*64, data + 8 + stride, stride<<1);
+ put_block_8x4(blocks+3*64 + 4*8, data + 24 + stride, stride<<1);
+}
+