|
|
|
@@ -183,13 +183,22 @@ static int decode_q_branch(SnowContext *s, int level, int x, int y){ |
|
|
|
int my_context= av_log2(2*FFABS(left->my - top->my)) + 0*av_log2(2*FFABS(tr->my - top->my)); |
|
|
|
|
|
|
|
type= get_rac(&s->c, &s->block_state[1 + left->type + top->type]) ? BLOCK_INTRA : 0; |
|
|
|
|
|
|
|
if(type){ |
|
|
|
int ld, cbd, crd; |
|
|
|
pred_mv(s, &mx, &my, 0, left, top, tr); |
|
|
|
l += get_symbol(&s->c, &s->block_state[32], 1); |
|
|
|
ld = get_symbol(&s->c, &s->block_state[32], 1); |
|
|
|
if (ld < -255 || ld > 255) { |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
l += ld; |
|
|
|
if (s->nb_planes > 2) { |
|
|
|
cb+= get_symbol(&s->c, &s->block_state[64], 1); |
|
|
|
cr+= get_symbol(&s->c, &s->block_state[96], 1); |
|
|
|
cbd = get_symbol(&s->c, &s->block_state[64], 1); |
|
|
|
crd = get_symbol(&s->c, &s->block_state[96], 1); |
|
|
|
if (cbd < -255 || cbd > 255 || crd < -255 || crd > 255) { |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
cb += cbd; |
|
|
|
cr += crd; |
|
|
|
} |
|
|
|
}else{ |
|
|
|
if(s->ref_frames > 1) |
|
|
|
|