21 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
22 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 |
* |
* |
24 |
* $Id: estimation_bvop.c,v 1.17 2004-12-05 04:53:01 syskin Exp $ |
* $Id: estimation_bvop.c,v 1.18 2004-12-08 12:43:48 syskin Exp $ |
25 |
* |
* |
26 |
****************************************************************************/ |
****************************************************************************/ |
27 |
|
|
918 |
} |
} |
919 |
} |
} |
920 |
|
|
921 |
|
static __inline void |
922 |
|
maxMotionBVOP(int * const MVmaxF, int * const MVmaxB, const MACROBLOCK * const pMB, const int qpel) |
923 |
|
{ |
924 |
|
if (pMB->mode == MODE_FORWARD || pMB->mode == MODE_INTERPOLATE) { |
925 |
|
const VECTOR * const mv = qpel ? pMB->qmvs : pMB->mvs; |
926 |
|
int max = *MVmaxF; |
927 |
|
if (mv[0].x > max) max = mv[0].x; |
928 |
|
else if (-mv[0].x - 1 > max) max = -mv[0].x - 1; |
929 |
|
if (mv[0].y > max) max = mv[0].y; |
930 |
|
else if (-mv[0].y - 1 > max) max = -mv[0].y - 1; |
931 |
|
|
932 |
|
*MVmaxF = max; |
933 |
|
} |
934 |
|
|
935 |
|
if (pMB->mode == MODE_BACKWARD || pMB->mode == MODE_INTERPOLATE) { |
936 |
|
const VECTOR * const mv = qpel ? pMB->b_qmvs : pMB->b_mvs; |
937 |
|
int max = *MVmaxB; |
938 |
|
if (mv[0].x > max) max = mv[0].x; |
939 |
|
else if (-mv[0].x - 1 > max) max = -mv[0].x - 1; |
940 |
|
if (mv[0].y > max) max = mv[0].y; |
941 |
|
else if (-mv[0].y - 1 > max) max = -mv[0].y - 1; |
942 |
|
*MVmaxB = max; |
943 |
|
} |
944 |
|
} |
945 |
|
|
946 |
|
|
947 |
void |
void |
948 |
MotionEstimationBVOP(MBParam * const pParam, |
MotionEstimationBVOP(MBParam * const pParam, |
949 |
FRAMEINFO * const frame, |
FRAMEINFO * const frame, |
971 |
|
|
972 |
VECTOR f_predMV, b_predMV; |
VECTOR f_predMV, b_predMV; |
973 |
|
|
974 |
|
int MVmaxF = 0, MVmaxB = 0; |
975 |
const int32_t TRB = time_pp - time_bp; |
const int32_t TRB = time_pp - time_bp; |
976 |
const int32_t TRD = time_pp; |
const int32_t TRD = time_pp; |
977 |
DECLARE_ALIGNED_MATRIX(dct_space, 3, 64, int16_t, CACHE_LINE); |
DECLARE_ALIGNED_MATRIX(dct_space, 3, 64, int16_t, CACHE_LINE); |
995 |
memcpy(&Data_b, &Data_d, sizeof(SearchData)); |
memcpy(&Data_b, &Data_d, sizeof(SearchData)); |
996 |
memcpy(&Data_i, &Data_d, sizeof(SearchData)); |
memcpy(&Data_i, &Data_d, sizeof(SearchData)); |
997 |
|
|
998 |
Data_f.iFcode = Data_i.iFcode = frame->fcode; |
Data_f.iFcode = Data_i.iFcode = frame->fcode = b_reference->fcode; |
999 |
Data_b.iFcode = Data_i.bFcode = frame->bcode; |
Data_b.iFcode = Data_i.bFcode = frame->bcode = b_reference->fcode; |
|
|
|
1000 |
|
|
1001 |
for (j = 0; j < pParam->mb_height; j++) { |
for (j = 0; j < pParam->mb_height; j++) { |
1002 |
|
|
1076 |
else |
else |
1077 |
ModeDecision_BVOP_SAD(&Data_d, &Data_b, &Data_f, &Data_i, pMB, b_mb, &f_predMV, &b_predMV); |
ModeDecision_BVOP_SAD(&Data_d, &Data_b, &Data_f, &Data_i, pMB, b_mb, &f_predMV, &b_predMV); |
1078 |
|
|
1079 |
|
maxMotionBVOP(&MVmaxF, &MVmaxB, pMB, Data_d.qpel); |
1080 |
|
|
1081 |
} |
} |
1082 |
} |
} |
1083 |
|
|
1084 |
|
frame->fcode = getMinFcode(MVmaxF); |
1085 |
|
frame->bcode = getMinFcode(MVmaxB); |
1086 |
} |
} |