Commit b297c0a7 authored by stefang's avatar stefang

even more cbp safety


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@5627 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 46f721a2
...@@ -869,7 +869,7 @@ static inline int next_mb(AVSContext *h) { ...@@ -869,7 +869,7 @@ static inline int next_mb(AVSContext *h) {
return 1; return 1;
} }
static int decode_mb_i(AVSContext *h) { static int decode_mb_i(AVSContext *h, int cbp_code) {
GetBitContext *gb = &h->s.gb; GetBitContext *gb = &h->s.gb;
int block, pred_mode_uv; int block, pred_mode_uv;
uint8_t top[18]; uint8_t top[18];
...@@ -919,14 +919,13 @@ static int decode_mb_i(AVSContext *h) { ...@@ -919,14 +919,13 @@ static int decode_mb_i(AVSContext *h) {
} }
/* get coded block pattern */ /* get coded block pattern */
if(h->pic_type == FF_I_TYPE){ if(h->pic_type == FF_I_TYPE)
int cbp= get_ue_golomb(gb); cbp_code = get_ue_golomb(gb);
if(cbp > 63){ if(cbp_code > 63){
av_log(h->s.avctx, AV_LOG_ERROR, "illegal intra cbp\n"); av_log(h->s.avctx, AV_LOG_ERROR, "illegal intra cbp\n");
return -1; return -1;
} }
h->cbp = cbp_tab[cbp][0]; h->cbp = cbp_tab[cbp_code][0];
}
if(h->cbp && !h->qp_fixed) if(h->cbp && !h->qp_fixed)
h->qp += get_se_golomb(gb); //qp_delta h->qp += get_se_golomb(gb); //qp_delta
...@@ -1270,7 +1269,7 @@ static int decode_pic(AVSContext *h) { ...@@ -1270,7 +1269,7 @@ static int decode_pic(AVSContext *h) {
check_for_slice(h); check_for_slice(h);
if(h->pic_type == FF_I_TYPE) { if(h->pic_type == FF_I_TYPE) {
do { do {
decode_mb_i(h); decode_mb_i(h, 0);
} while(next_mb(h)); } while(next_mb(h));
} else if(h->pic_type == FF_P_TYPE) { } else if(h->pic_type == FF_P_TYPE) {
do { do {
...@@ -1285,8 +1284,7 @@ static int decode_pic(AVSContext *h) { ...@@ -1285,8 +1284,7 @@ static int decode_pic(AVSContext *h) {
} else } else
mb_type = get_ue_golomb(&s->gb) + P_SKIP; mb_type = get_ue_golomb(&s->gb) + P_SKIP;
if(mb_type > P_8X8) { if(mb_type > P_8X8) {
h->cbp = cbp_tab[mb_type - P_8X8 - 1][0]; decode_mb_i(h, mb_type - P_8X8 - 1);
decode_mb_i(h);
} else } else
decode_mb_p(h,mb_type); decode_mb_p(h,mb_type);
} while(next_mb(h)); } while(next_mb(h));
...@@ -1303,8 +1301,7 @@ static int decode_pic(AVSContext *h) { ...@@ -1303,8 +1301,7 @@ static int decode_pic(AVSContext *h) {
} else } else
mb_type = get_ue_golomb(&s->gb) + B_SKIP; mb_type = get_ue_golomb(&s->gb) + B_SKIP;
if(mb_type > B_8X8) { if(mb_type > B_8X8) {
h->cbp = cbp_tab[mb_type - B_8X8 - 1][0]; decode_mb_i(h, mb_type - B_8X8 - 1);
decode_mb_i(h);
} else } else
decode_mb_b(h,mb_type); decode_mb_b(h,mb_type);
} while(next_mb(h)); } while(next_mb(h));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment