aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/cavs.c
diff options
context:
space:
mode:
authorStefan Gehrer <stefan.gehrer@gmx.de>2006-07-05 17:11:55 +0000
committerStefan Gehrer <stefan.gehrer@gmx.de>2006-07-05 17:11:55 +0000
commit2e0141c351c3f4e0b66c449911681121d0317a5f (patch)
treee4bfe4f996821a5870bdc6a1a10080181ba1c2b7 /libavcodec/cavs.c
parent0e9b7305d076bf46cb2458be315d907292c9d381 (diff)
downloadffmpeg-2e0141c351c3f4e0b66c449911681121d0317a5f.tar.gz
even more cbp safety
Originally committed as revision 5627 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/cavs.c')
-rw-r--r--libavcodec/cavs.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c
index aa8cd149f2..0ed1522176 100644
--- a/libavcodec/cavs.c
+++ b/libavcodec/cavs.c
@@ -869,7 +869,7 @@ static inline int next_mb(AVSContext *h) {
return 1;
}
-static int decode_mb_i(AVSContext *h) {
+static int decode_mb_i(AVSContext *h, int cbp_code) {
GetBitContext *gb = &h->s.gb;
int block, pred_mode_uv;
uint8_t top[18];
@@ -919,14 +919,13 @@ static int decode_mb_i(AVSContext *h) {
}
/* get coded block pattern */
- if(h->pic_type == FF_I_TYPE){
- int cbp= get_ue_golomb(gb);
- if(cbp > 63){
- av_log(h->s.avctx, AV_LOG_ERROR, "illegal intra cbp\n");
- return -1;
- }
- h->cbp = cbp_tab[cbp][0];
+ if(h->pic_type == FF_I_TYPE)
+ cbp_code = get_ue_golomb(gb);
+ if(cbp_code > 63){
+ av_log(h->s.avctx, AV_LOG_ERROR, "illegal intra cbp\n");
+ return -1;
}
+ h->cbp = cbp_tab[cbp_code][0];
if(h->cbp && !h->qp_fixed)
h->qp += get_se_golomb(gb); //qp_delta
@@ -1270,7 +1269,7 @@ static int decode_pic(AVSContext *h) {
check_for_slice(h);
if(h->pic_type == FF_I_TYPE) {
do {
- decode_mb_i(h);
+ decode_mb_i(h, 0);
} while(next_mb(h));
} else if(h->pic_type == FF_P_TYPE) {
do {
@@ -1285,8 +1284,7 @@ static int decode_pic(AVSContext *h) {
} else
mb_type = get_ue_golomb(&s->gb) + P_SKIP;
if(mb_type > P_8X8) {
- h->cbp = cbp_tab[mb_type - P_8X8 - 1][0];
- decode_mb_i(h);
+ decode_mb_i(h, mb_type - P_8X8 - 1);
} else
decode_mb_p(h,mb_type);
} while(next_mb(h));
@@ -1303,8 +1301,7 @@ static int decode_pic(AVSContext *h) {
} else
mb_type = get_ue_golomb(&s->gb) + B_SKIP;
if(mb_type > B_8X8) {
- h->cbp = cbp_tab[mb_type - B_8X8 - 1][0];
- decode_mb_i(h);
+ decode_mb_i(h, mb_type - B_8X8 - 1);
} else
decode_mb_b(h,mb_type);
} while(next_mb(h));