diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c index b78847eed8..641827db5f 100644 --- a/libavcodec/h264_cabac.c +++ b/libavcodec/h264_cabac.c @@ -914,17 +914,16 @@ static int decode_cabac_mb_mvd( H264Context *h, int list, int n, int l ) { h->mvd_cache[list][scan8[n] - 8][l]; int ctxbase = (l == 0) ? 40 : 47; int mvd; - int ctx = (amvd>2) + (amvd>32); - if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+ctx])) + if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2) + (amvd>32)])) return 0; mvd= 1; - ctx= 3; - while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase+ctx] ) ) { + ctxbase+= 3; + while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) { + if( mvd < 4 ) + ctxbase++; mvd++; - if( ctx < 6 ) - ctx++; } if( mvd >= 9 ) {