diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2007-03-18 18:07:27 +0000 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2007-03-18 18:07:27 +0000 |
commit | 9a44385e1a640693a7f636ffa44b53152433e8e7 (patch) | |
tree | dc5c8cab81d8e860dbf8b51df2cd5cdc65bf480a /libavcodec/vc1.c | |
parent | edf97a75f98896965f78a13010f318b234bed9fa (diff) | |
download | ffmpeg-streaming-9a44385e1a640693a7f636ffa44b53152433e8e7.zip ffmpeg-streaming-9a44385e1a640693a7f636ffa44b53152433e8e7.tar.gz |
Zero MV vectors for P frame intra blocks
Originally committed as revision 8440 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vc1.c')
-rw-r--r-- | libavcodec/vc1.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 240ddae..eac9236 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -1068,8 +1068,11 @@ static void vc1_mc_4mv_chroma(VC1Context *v) for(i= t1+1; i<4; i++)if(!intra[i]) {t2 = i; break;} tx = (mvx[t1] + mvx[t2]) / 2; ty = (mvy[t1] + mvy[t2]) / 2; - } else + } else { + s->current_picture.motion_val[1][s->block_index[0]][0] = 0; + s->current_picture.motion_val[1][s->block_index[0]][1] = 0; return; //no need to do MC for inter blocks + } s->current_picture.motion_val[1][s->block_index[0]][0] = tx; s->current_picture.motion_val[1][s->block_index[0]][1] = ty; @@ -2004,6 +2007,8 @@ static inline void vc1_pred_mv(MpegEncContext *s, int n, int dmv_x, int dmv_y, i if(s->mb_intra){ s->mv[0][n][0] = s->current_picture.motion_val[0][xy][0] = 0; s->mv[0][n][1] = s->current_picture.motion_val[0][xy][1] = 0; + s->current_picture.motion_val[1][xy][0] = 0; + s->current_picture.motion_val[1][xy][1] = 0; if(mv1) { /* duplicate motion data for 1-MV block */ s->current_picture.motion_val[0][xy + 1][0] = 0; s->current_picture.motion_val[0][xy + 1][1] = 0; @@ -2011,6 +2016,12 @@ static inline void vc1_pred_mv(MpegEncContext *s, int n, int dmv_x, int dmv_y, i s->current_picture.motion_val[0][xy + wrap][1] = 0; s->current_picture.motion_val[0][xy + wrap + 1][0] = 0; s->current_picture.motion_val[0][xy + wrap + 1][1] = 0; + s->current_picture.motion_val[1][xy + 1][0] = 0; + s->current_picture.motion_val[1][xy + 1][1] = 0; + s->current_picture.motion_val[1][xy + wrap][0] = 0; + s->current_picture.motion_val[1][xy + wrap][1] = 0; + s->current_picture.motion_val[1][xy + wrap + 1][0] = 0; + s->current_picture.motion_val[1][xy + wrap + 1][1] = 0; } return; } |