mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
segfault fix for b-frame encoding with height%16!=0
Originally committed as revision 445 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
413dec620d
commit
e71a4f7425
@ -366,8 +366,17 @@ void mpeg4_encode_mb(MpegEncContext * s,
|
||||
why didnt they just compress the skip-mb bits instead of reusing them ?! */
|
||||
if(s->max_b_frames>0){
|
||||
int i;
|
||||
const int offset= (s->mb_x + s->mb_y*s->linesize)*16;
|
||||
uint8_t *p_pic= s->new_picture[0] + offset;
|
||||
int x,y, offset;
|
||||
uint8_t *p_pic;
|
||||
|
||||
x= s->mb_x*16;
|
||||
y= s->mb_y*16;
|
||||
if(x+16 > s->width) x= s->width-16;
|
||||
if(y+16 > s->height) y= s->height-16;
|
||||
|
||||
offset= x + y*s->linesize;
|
||||
p_pic= s->new_picture[0] + offset;
|
||||
|
||||
s->mb_skiped=1;
|
||||
for(i=0; i<s->max_b_frames; i++){
|
||||
uint8_t *b_pic;
|
||||
@ -377,7 +386,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
|
||||
|
||||
b_pic= s->coded_order[i+1].picture[0] + offset;
|
||||
diff= pix_abs16x16(p_pic, b_pic, s->linesize);
|
||||
if(diff>s->qscale*70){
|
||||
if(diff>s->qscale*70){ //FIXME check that 70 is optimal
|
||||
s->mb_skiped=0;
|
||||
break;
|
||||
}
|
||||
@ -394,6 +403,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
put_bits(&s->pb, 1, 0); /* mb coded */
|
||||
if(s->mv_type==MV_TYPE_16X16){
|
||||
cbpc = cbp & 3;
|
||||
@ -2040,7 +2050,9 @@ int h263_decode_mb(MpegEncContext *s,
|
||||
s->last_mv[0][0][1]= s->mv[0][0][1] = my;
|
||||
PRINT_MB_TYPE("F");
|
||||
break;
|
||||
default: return -1;
|
||||
default:
|
||||
printf("illegal MB_type\n");
|
||||
return -1;
|
||||
}
|
||||
} else { /* I-Frame */
|
||||
cbpc = get_vlc(&s->gb, &intra_MCBPC_vlc);
|
||||
|
Loading…
Reference in New Issue
Block a user