summaryrefslogtreecommitdiff
path: root/libavcodec/mpegvideo.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-03-05 17:48:19 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-03-05 17:48:19 +0000
commitdfb476cbe0de25f3dde7c46d0917b37ac74b0a2e (patch)
tree2fbdf68b45ec59e2374be44d647b0cb2ce0564a9 /libavcodec/mpegvideo.c
parent968ea8d9d3d8b0e944d666f5979b7085a8e66bc2 (diff)
field picture decoding support (16x16 MC blocks only as i dont have any samples which use other modes ...)
Originally committed as revision 1624 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegvideo.c')
-rw-r--r--libavcodec/mpegvideo.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 8bfc0f049d..12385c9646 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -212,6 +212,8 @@ int DCT_common_init(MpegEncContext *s)
ff_init_scantable(s, &s->intra_h_scantable, ff_alternate_horizontal_scan);
ff_init_scantable(s, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ s->picture_structure= PICT_FRAME;
+
return 0;
}
@@ -1855,8 +1857,18 @@ static inline void MPV_motion(MpegEncContext *s,
s->mv[dir][1][0], s->mv[dir][1][1], 8);
}
} else {
-
+ int offset;
+ if(s->picture_structure == s->field_select[dir][0] + 1 || s->pict_type == B_TYPE || s->first_field){
+ offset= s->field_select[dir][0] ? s->linesize/2 : 0;
+ }else{
+ ref_picture= s->current_picture.data;
+ offset= s->field_select[dir][0] ? s->linesize/2 : -s->linesize/2;
+ }
+ mpeg_motion(s, dest_y, dest_cb, dest_cr, 0,
+ ref_picture, offset,
+ 0, pix_op,
+ s->mv[dir][0][0], s->mv[dir][0][1], 16);
}
break;
}