+ DCTELEM *ptr = s->block[0];
+ int has_ac = rv34_decode_block(ptr, &s->gb, r->cur_vlcs,
+ fc, sc, q_dc, q_ac, q_ac);
+ if(has_ac){
+ r->rdsp.rv34_idct_add(pdst, stride, ptr);
+ }else{
+ r->rdsp.rv34_idct_dc_add(pdst, stride, ptr[0]);
+ ptr[0] = 0;
+ }
+}
+
+static void rv34_output_i16x16(RV34DecContext *r, int8_t *intra_types, int cbp)
+{
+ LOCAL_ALIGNED_16(DCTELEM, block16, [16]);
+ MpegEncContext *s = &r->s;
+ GetBitContext *gb = &s->gb;
+ int q_dc = rv34_qscale_tab[ r->luma_dc_quant_i[s->qscale] ],
+ q_ac = rv34_qscale_tab[s->qscale];
+ uint8_t *dst = s->dest[0];
+ DCTELEM *ptr = s->block[0];
+ int i, j, itype, has_ac;
+
+ memset(block16, 0, 16 * sizeof(*block16));
+
+ has_ac = rv34_decode_block(block16, gb, r->cur_vlcs, 3, 0, q_dc, q_dc, q_ac);
+ if(has_ac)
+ r->rdsp.rv34_inv_transform(block16);
+ else
+ r->rdsp.rv34_inv_transform_dc(block16);
+
+ itype = ittrans16[intra_types[0]];
+ itype = adjust_pred16(itype, r->avail_cache[6-4], r->avail_cache[6-1]);
+ r->h.pred16x16[itype](dst, s->linesize);
+
+ for(j = 0; j < 4; j++){
+ for(i = 0; i < 4; i++, cbp >>= 1){
+ int dc = block16[i + j*4];
+
+ if(cbp & 1){
+ has_ac = rv34_decode_block(ptr, gb, r->cur_vlcs, r->luma_vlc, 0, q_ac, q_ac, q_ac);
+ }else
+ has_ac = 0;
+
+ if(has_ac){
+ ptr[0] = dc;
+ r->rdsp.rv34_idct_add(dst+4*i, s->linesize, ptr);
+ }else
+ r->rdsp.rv34_idct_dc_add(dst+4*i, s->linesize, dc);
+ }
+
+ dst += 4*s->linesize;
+ }
+
+ itype = ittrans16[intra_types[0]];
+ if(itype == PLANE_PRED8x8) itype = DC_PRED8x8;
+ itype = adjust_pred16(itype, r->avail_cache[6-4], r->avail_cache[6-1]);
+
+ q_dc = rv34_qscale_tab[rv34_chroma_quant[1][s->qscale]];
+ q_ac = rv34_qscale_tab[rv34_chroma_quant[0][s->qscale]];
+
+ for(j = 1; j < 3; j++){
+ dst = s->dest[j];
+ r->h.pred8x8[itype](dst, s->uvlinesize);
+ for(i = 0; i < 4; i++, cbp >>= 1){
+ uint8_t *pdst;
+ if(!(cbp & 1)) continue;
+ pdst = dst + (i&1)*4 + (i&2)*2*s->uvlinesize;
+
+ rv34_process_block(r, pdst, s->uvlinesize,
+ r->chroma_vlc, 1, q_dc, q_ac);
+ }
+ }
+}
+
+static void rv34_output_intra(RV34DecContext *r, int8_t *intra_types, int cbp)
+{
+ MpegEncContext *s = &r->s;
+ uint8_t *dst = s->dest[0];
+ int avail[6*8] = {0};
+ int i, j, k;
+ int idx, q_ac, q_dc;