avcodec/mpegvideo_motion: Use a field from the current frame if the last is unavailable in DMV & 16x8

Fixes null pointer dereference

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-04-19 14:46:31 +02:00
parent 30e6a02c23
commit 42bcc4082d

View File

@ -824,8 +824,8 @@ static av_always_inline void MPV_motion_internal(MpegEncContext *s,
for(i=0; i<2; i++){
uint8_t ** ref2picture;
if(s->picture_structure == s->field_select[dir][i] + 1
|| s->pict_type == AV_PICTURE_TYPE_B || s->first_field){
if((s->picture_structure == s->field_select[dir][i] + 1
|| s->pict_type == AV_PICTURE_TYPE_B || s->first_field) && ref_picture[0]){
ref2picture= ref_picture;
}else{
ref2picture = s->current_picture_ptr->f.data;
@ -854,6 +854,9 @@ static av_always_inline void MPV_motion_internal(MpegEncContext *s,
pix_op = s->hdsp.avg_pixels_tab;
}
}else{
if (!ref_picture[0]) {
ref_picture = s->current_picture_ptr->f.data;
}
for(i=0; i<2; i++){
mpeg_motion(s, dest_y, dest_cb, dest_cr,
s->picture_structure != i+1,