@ -53,14 +53,15 @@ static void FN(inter_pred)(AVCodecContext *ctx)
if ( b - > bs > BS_8x8 ) {
VP56mv uvmv ;
# if SCALED == 0
if ( b - > bs = = BS_8x4 ) {
mc_luma_dir ( s , mc [ 3 ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , 8 , 4 , w1 , h1 , 0 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , , , , , 8 , 4 , w1 , h1 , 0 ) ;
mc_luma_dir ( s , mc [ 3 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 0 ] + 4 * ls_y , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 0 ] , 8 , 4 , w1 , h1 , 0 ) ;
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 0 ] , , , , , 8 , 4 , w1 , h1 , 0 ) ;
w1 = ( w1 + s - > ss_h ) > > s - > ss_h ;
if ( s - > ss_v ) {
h1 = ( h1 + 1 ) > > 1 ;
@ -70,14 +71,14 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 2 , col < < ( 3 - s - > ss_h ) ,
& uvmv , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
& uvmv , , , , , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
} else {
mc_chroma_dir ( s , mc [ 3 + s - > ss_h ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 3 , col < < ( 3 - s - > ss_h ) ,
& b - > mv [ 0 ] [ 0 ] , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
& b - > mv [ 0 ] [ 0 ] , , , , , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
// BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index
// to get the motion vector for the bottom 4x4 block
// https://code.google.com/p/webm/issues/detail?id=993
@ -91,17 +92,17 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
( row < < 3 ) + 4 , col < < ( 3 - s - > ss_h ) ,
& uvmv , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
& uvmv , , , , , 8 > > s - > ss_h , 4 , w1 , h1 , 0 ) ;
}
if ( b - > comp ) {
mc_luma_dir ( s , mc [ 3 ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , 8 , 4 , w2 , h2 , 1 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , , , , , 8 , 4 , w2 , h2 , 1 ) ;
mc_luma_dir ( s , mc [ 3 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 0 ] + 4 * ls_y , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 1 ] , 8 , 4 , w2 , h2 , 1 ) ;
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 1 ] , , , , , 8 , 4 , w2 , h2 , 1 ) ;
w2 = ( w2 + s - > ss_h ) > > s - > ss_h ;
if ( s - > ss_v ) {
h2 = ( h2 + 1 ) > > 1 ;
@ -111,14 +112,14 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 2 , col < < ( 3 - s - > ss_h ) ,
& uvmv , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
& uvmv , , , , , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
} else {
mc_chroma_dir ( s , mc [ 3 + s - > ss_h ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 3 , col < < ( 3 - s - > ss_h ) ,
& b - > mv [ 0 ] [ 1 ] , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
& b - > mv [ 0 ] [ 1 ] , , , , , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
// BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index
// to get the motion vector for the bottom 4x4 block
// https://code.google.com/p/webm/issues/detail?id=993
@ -132,16 +133,16 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
( row < < 3 ) + 4 , col < < ( 3 - s - > ss_h ) ,
& uvmv , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
& uvmv , , , , , 8 > > s - > ss_h , 4 , w2 , h2 , 1 ) ;
}
}
} else if ( b - > bs = = BS_4x8 ) {
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , 4 , 8 , w1 , h1 , 0 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , , , , , 4 , 8 , w1 , h1 , 0 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] + 4 * bytesperpixel , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 0 ] , 4 , 8 , w1 , h1 , 0 ) ;
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 0 ] , , , , , 4 , 8 , w1 , h1 , 0 ) ;
h1 = ( h1 + s - > ss_v ) > > s - > ss_v ;
if ( s - > ss_h ) {
w1 = ( w1 + 1 ) > > 1 ;
@ -151,30 +152,30 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < ( 3 - s - > ss_v ) , col < < 2 ,
& uvmv , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
& uvmv , , , , , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
} else {
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < ( 3 - s - > ss_v ) , col < < 3 ,
& b - > mv [ 0 ] [ 0 ] , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
& b - > mv [ 0 ] [ 0 ] , , , , , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * bytesperpixel , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < ( 3 - s - > ss_v ) , ( col < < 3 ) + 4 ,
& b - > mv [ 1 ] [ 0 ] , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
& b - > mv [ 1 ] [ 0 ] , , , , , 4 , 8 > > s - > ss_v , w1 , h1 , 0 ) ;
}
if ( b - > comp ) {
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , 4 , 8 , w2 , h2 , 1 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , , , , , 4 , 8 , w2 , h2 , 1 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] + 4 * bytesperpixel , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 1 ] , 4 , 8 , w2 , h2 , 1 ) ;
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 1 ] , , , , , 4 , 8 , w2 , h2 , 1 ) ;
h2 = ( h2 + s - > ss_v ) > > s - > ss_v ;
if ( s - > ss_h ) {
w2 = ( w2 + 1 ) > > 1 ;
@ -184,42 +185,48 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < ( 3 - s - > ss_v ) , col < < 2 ,
& uvmv , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
& uvmv , , , , , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
} else {
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < ( 3 - s - > ss_v ) , col < < 3 ,
& b - > mv [ 0 ] [ 1 ] , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
& b - > mv [ 0 ] [ 1 ] , , , , , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * bytesperpixel , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < ( 3 - s - > ss_v ) , ( col < < 3 ) + 4 ,
& b - > mv [ 1 ] [ 1 ] , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
& b - > mv [ 1 ] [ 1 ] , , , , , 4 , 8 > > s - > ss_v , w2 , h2 , 1 ) ;
}
}
} else {
} else
# endif
{
av_assert2 ( b - > bs = = BS_4x4 ) ;
// FIXME if two horizontally adjacent blocks have the same MV,
// do a w8 instead of a w4 call
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] ,
0 , 0 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] + 4 * bytesperpixel , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 0 ] ,
4 , 0 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 0 ] + 4 * ls_y , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 0 ] ,
0 , 4 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 0 ] + 4 * ls_y + 4 * bytesperpixel , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
( row < < 3 ) + 4 , ( col < < 3 ) + 4 , & b - > mv [ 3 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
( row < < 3 ) + 4 , ( col < < 3 ) + 4 , & b - > mv [ 3 ] [ 0 ] ,
4 , 4 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
if ( s - > ss_v ) {
h1 = ( h1 + 1 ) > > 1 ;
if ( s - > ss_h ) {
@ -231,7 +238,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 2 , col < < 2 ,
& uvmv , 4 , 4 , w1 , h1 , 0 ) ;
& uvmv , 0 , 0 , 4 , 4 , 4 , 4 , w1 , h1 , 0 ) ;
} else {
uvmv = ROUNDED_DIV_MVx2 ( b - > mv [ 0 ] [ 0 ] , b - > mv [ 2 ] [ 0 ] ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
@ -239,7 +246,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 2 , col < < 3 ,
& uvmv , 4 , 4 , w1 , h1 , 0 ) ;
& uvmv , 0 , 0 , 8 , 4 , 4 , 4 , w1 , h1 , 0 ) ;
uvmv = ROUNDED_DIV_MVx2 ( b - > mv [ 1 ] [ 0 ] , b - > mv [ 3 ] [ 0 ] ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
@ -247,7 +254,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 2 , ( col < < 3 ) + 4 ,
& uvmv , 4 , 4 , w1 , h1 , 0 ) ;
& uvmv , 4 , 0 , 8 , 4 , 4 , 4 , w1 , h1 , 0 ) ;
}
} else {
if ( s - > ss_h ) {
@ -258,7 +265,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 3 , col < < 2 ,
& uvmv , 4 , 4 , w1 , h1 , 0 ) ;
& uvmv , 0 , 0 , 4 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
// BUG libvpx uses wrong block index for 4:2:2 bs=4x4
// bottom block
// https://code.google.com/p/webm/issues/detail?id=993
@ -268,52 +275,52 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
( row < < 3 ) + 4 , col < < 2 ,
& uvmv , 4 , 4 , w1 , h1 , 0 ) ;
& uvmv , 0 , 4 , 4 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
} else {
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 3 , col < < 3 ,
& b - > mv [ 0 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
& b - > mv [ 0 ] [ 0 ] , 0 , 0 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * bytesperpixel , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < 3 , ( col < < 3 ) + 4 ,
& b - > mv [ 1 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
& b - > mv [ 1 ] [ 0 ] , 4 , 0 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] + 4 * ls_uv , s - > dst [ 2 ] + 4 * ls_uv , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
( row < < 3 ) + 4 , col < < 3 ,
& b - > mv [ 2 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
& b - > mv [ 2 ] [ 0 ] , 0 , 4 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 0 ] ,
s - > dst [ 1 ] + 4 * ls_uv + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * ls_uv + 4 * bytesperpixel , ls_uv ,
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
( row < < 3 ) + 4 , ( col < < 3 ) + 4 ,
& b - > mv [ 3 ] [ 0 ] , 4 , 4 , w1 , h1 , 0 ) ;
& b - > mv [ 3 ] [ 0 ] , 4 , 4 , 8 , 8 , 4 , 4 , w1 , h1 , 0 ) ;
}
}
if ( b - > comp ) {
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , 0 , 0 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] + 4 * bytesperpixel , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
row < < 3 , ( col < < 3 ) + 4 , & b - > mv [ 1 ] [ 1 ] , 4 , 0 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 0 ] + 4 * ls_y , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
( row < < 3 ) + 4 , col < < 3 , & b - > mv [ 2 ] [ 1 ] , 0 , 4 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_luma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 0 ] + 4 * ls_y + 4 * bytesperpixel , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
( row < < 3 ) + 4 , ( col < < 3 ) + 4 , & b - > mv [ 3 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
( row < < 3 ) + 4 , ( col < < 3 ) + 4 , & b - > mv [ 3 ] [ 1 ] , 4 , 4 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
if ( s - > ss_v ) {
h2 = ( h2 + 1 ) > > 1 ;
if ( s - > ss_h ) {
@ -325,7 +332,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 2 , col < < 2 ,
& uvmv , 4 , 4 , w2 , h2 , 1 ) ;
& uvmv , 0 , 0 , 4 , 4 , 4 , 4 , w2 , h2 , 1 ) ;
} else {
uvmv = ROUNDED_DIV_MVx2 ( b - > mv [ 0 ] [ 1 ] , b - > mv [ 2 ] [ 1 ] ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
@ -333,7 +340,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 2 , col < < 3 ,
& uvmv , 4 , 4 , w2 , h2 , 1 ) ;
& uvmv , 0 , 0 , 8 , 4 , 4 , 4 , w2 , h2 , 1 ) ;
uvmv = ROUNDED_DIV_MVx2 ( b - > mv [ 1 ] [ 1 ] , b - > mv [ 3 ] [ 1 ] ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
@ -341,7 +348,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 2 , ( col < < 3 ) + 4 ,
& uvmv , 4 , 4 , w2 , h2 , 1 ) ;
& uvmv , 4 , 0 , 8 , 4 , 4 , 4 , w2 , h2 , 1 ) ;
}
} else {
if ( s - > ss_h ) {
@ -352,7 +359,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 3 , col < < 2 ,
& uvmv , 4 , 4 , w2 , h2 , 1 ) ;
& uvmv , 0 , 0 , 4 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
// BUG libvpx uses wrong block index for 4:2:2 bs=4x4
// bottom block
// https://code.google.com/p/webm/issues/detail?id=993
@ -362,34 +369,34 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
( row < < 3 ) + 4 , col < < 2 ,
& uvmv , 4 , 4 , w2 , h2 , 1 ) ;
& uvmv , 0 , 4 , 4 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
} else {
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] , s - > dst [ 2 ] , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 3 , col < < 3 ,
& b - > mv [ 0 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
& b - > mv [ 0 ] [ 1 ] , 0 , 0 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * bytesperpixel , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < 3 , ( col < < 3 ) + 4 ,
& b - > mv [ 1 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
& b - > mv [ 1 ] [ 1 ] , 4 , 0 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] + 4 * ls_uv , s - > dst [ 2 ] + 4 * ls_uv , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
( row < < 3 ) + 4 , col < < 3 ,
& b - > mv [ 2 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
& b - > mv [ 2 ] [ 1 ] , 0 , 4 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
mc_chroma_dir ( s , mc [ 4 ] [ b - > filter ] [ 1 ] ,
s - > dst [ 1 ] + 4 * ls_uv + 4 * bytesperpixel ,
s - > dst [ 2 ] + 4 * ls_uv + 4 * bytesperpixel , ls_uv ,
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
( row < < 3 ) + 4 , ( col < < 3 ) + 4 ,
& b - > mv [ 3 ] [ 1 ] , 4 , 4 , w2 , h2 , 1 ) ;
& b - > mv [ 3 ] [ 1 ] , 4 , 4 , 8 , 8 , 4 , 4 , w2 , h2 , 1 ) ;
}
}
}
@ -401,7 +408,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
mc_luma_dir ( s , mc [ bwl ] [ b - > filter ] [ 0 ] , s - > dst [ 0 ] , ls_y ,
ref1 - > data [ 0 ] , ref1 - > linesize [ 0 ] , tref1 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , bw , bh , w1 , h1 , 0 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 0 ] , 0 , 0 , bw , bh , bw , bh , w1 , h1 , 0 ) ;
w1 = ( w1 + s - > ss_h ) > > s - > ss_h ;
h1 = ( h1 + s - > ss_v ) > > s - > ss_v ;
mc_chroma_dir ( s , mc [ bwl + s - > ss_h ] [ b - > filter ] [ 0 ] ,
@ -409,12 +416,12 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref1 - > data [ 1 ] , ref1 - > linesize [ 1 ] ,
ref1 - > data [ 2 ] , ref1 - > linesize [ 2 ] , tref1 ,
row < < ( 3 - s - > ss_v ) , col < < ( 3 - s - > ss_h ) ,
& b - > mv [ 0 ] [ 0 ] , uvbw , uvbh , w1 , h1 , 0 ) ;
& b - > mv [ 0 ] [ 0 ] , 0 , 0 , uvbw , uvbh , uvbw , uvbh , w1 , h1 , 0 ) ;
if ( b - > comp ) {
mc_luma_dir ( s , mc [ bwl ] [ b - > filter ] [ 1 ] , s - > dst [ 0 ] , ls_y ,
ref2 - > data [ 0 ] , ref2 - > linesize [ 0 ] , tref2 ,
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , bw , bh , w2 , h2 , 1 ) ;
row < < 3 , col < < 3 , & b - > mv [ 0 ] [ 1 ] , 0 , 0 , bw , bh , bw , bh , w2 , h2 , 1 ) ;
w2 = ( w2 + s - > ss_h ) > > s - > ss_h ;
h2 = ( h2 + s - > ss_v ) > > s - > ss_v ;
mc_chroma_dir ( s , mc [ bwl + s - > ss_h ] [ b - > filter ] [ 1 ] ,
@ -422,7 +429,7 @@ static void FN(inter_pred)(AVCodecContext *ctx)
ref2 - > data [ 1 ] , ref2 - > linesize [ 1 ] ,
ref2 - > data [ 2 ] , ref2 - > linesize [ 2 ] , tref2 ,
row < < ( 3 - s - > ss_v ) , col < < ( 3 - s - > ss_h ) ,
& b - > mv [ 0 ] [ 1 ] , uvbw , uvbh , w2 , h2 , 1 ) ;
& b - > mv [ 0 ] [ 1 ] , 0 , 0 , uvbw , uvbh , uvbw , uvbh , w2 , h2 , 1 ) ;
}
}
}