📄 subsample.c
字号:
localDiff = macross[5]-currentBlock[10][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[10][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[10][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[10][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[10][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[10][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+12][fx]); localDiff = macross[1]-currentBlock[12][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[12][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[12][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[12][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[12][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[12][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[12][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[12][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+14][fx]); localDiff = macross[1]-currentBlock[14][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[14][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[14][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[14][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[14][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[14][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[14][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[14][15]; diff += ABS(localDiff); return diff;}/*===========================================================================* * * LumMotionErrorC * * compute the motion error for the C subsampling pattern * * RETURNS: the error, or some number greater if it is worse * * SIDE EFFECTS: none * *===========================================================================*/int32LumMotionErrorC(currentBlock, prevFrame, by, bx, my, mx, bestSoFar) LumBlock currentBlock; MpegFrame *prevFrame; int by; int bx; int my; int mx; int32 bestSoFar;{ register int32 diff = 0; /* max value of diff is 255*256 = 65280 */ register int32 localDiff; register uint8 *macross; register uint8 **prev; register int fy, fx; boolean xHalf, yHalf; xHalf = (ABS(mx) % 2 == 1); yHalf = (ABS(my) % 2 == 1); MOTION_TO_FRAME_COORD(by, bx, my/2, mx/2, fy, fx); if ( xHalf ) { if ( mx < 0 ) { fx--; } if ( yHalf ) { if ( my < 0 ) { fy--; } prev = prevFrame->halfBoth; } else { prev = prevFrame->halfX; } } else if ( yHalf ) { if ( my < 0 ) { fy--; } prev = prevFrame->halfY; } else { prev = prevFrame->ref_y; } macross = &(prev[fy+1][fx]); localDiff = macross[0]-currentBlock[1][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[1][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[1][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[1][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[1][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[1][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[1][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[1][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+3][fx]); localDiff = macross[0]-currentBlock[3][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[3][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[3][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[3][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[3][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[3][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[3][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[3][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+5][fx]); localDiff = macross[0]-currentBlock[5][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[5][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[5][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[5][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[5][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[5][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[5][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[5][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+7][fx]); localDiff = macross[0]-currentBlock[7][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[7][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[7][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[7][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[7][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[7][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[7][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[7][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+9][fx]); localDiff = macross[0]-currentBlock[9][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[9][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[9][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[9][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[9][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[9][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[9][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[9][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+11][fx]); localDiff = macross[0]-currentBlock[11][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[11][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[11][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[11][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[11][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[11][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[11][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[11][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+13][fx]); localDiff = macross[0]-currentBlock[13][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[13][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[13][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[13][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[13][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[13][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[13][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[13][14]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+15][fx]); localDiff = macross[0]-currentBlock[15][0]; diff += ABS(localDiff); localDiff = macross[2]-currentBlock[15][2]; diff += ABS(localDiff); localDiff = macross[4]-currentBlock[15][4]; diff += ABS(localDiff); localDiff = macross[6]-currentBlock[15][6]; diff += ABS(localDiff); localDiff = macross[8]-currentBlock[15][8]; diff += ABS(localDiff); localDiff = macross[10]-currentBlock[15][10]; diff += ABS(localDiff); localDiff = macross[12]-currentBlock[15][12]; diff += ABS(localDiff); localDiff = macross[14]-currentBlock[15][14]; diff += ABS(localDiff); return diff;}/*===========================================================================* * * LumMotionErrorD * * compute the motion error for the D subsampling pattern * * RETURNS: the error, or some number greater if it is worse * * SIDE EFFECTS: none * *===========================================================================*/int32LumMotionErrorD(currentBlock, prevFrame, by, bx, my, mx, bestSoFar) LumBlock currentBlock; MpegFrame *prevFrame; int by; int bx; int my; int mx; int32 bestSoFar;{ register int32 diff = 0; /* max value of diff is 255*256 = 65280 */ register int32 localDiff; register uint8 *macross; register uint8 **prev; register int fy, fx; boolean xHalf, yHalf; xHalf = (ABS(mx) % 2 == 1); yHalf = (ABS(my) % 2 == 1); MOTION_TO_FRAME_COORD(by, bx, my/2, mx/2, fy, fx); if ( xHalf ) { if ( mx < 0 ) { fx--; } if ( yHalf ) { if ( my < 0 ) { fy--; } prev = prevFrame->halfBoth; } else { prev = prevFrame->halfX; } } else if ( yHalf ) { if ( my < 0 ) { fy--; } prev = prevFrame->halfY; } else { prev = prevFrame->ref_y; } macross = &(prev[fy+1][fx]); localDiff = macross[1]-currentBlock[1][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[1][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[1][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[1][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[1][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[1][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[1][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[1][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+3][fx]); localDiff = macross[1]-currentBlock[3][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[3][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[3][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[3][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[3][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[3][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[3][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[3][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+5][fx]); localDiff = macross[1]-currentBlock[5][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[5][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[5][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[5][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[5][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[5][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[5][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[5][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+7][fx]); localDiff = macross[1]-currentBlock[7][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[7][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[7][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[7][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[7][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[7][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[7][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[7][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+9][fx]); localDiff = macross[1]-currentBlock[9][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[9][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[9][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[9][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[9][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[9][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[9][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[9][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+11][fx]); localDiff = macross[1]-currentBlock[11][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[11][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[11][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[11][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[11][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[11][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[11][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[11][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+13][fx]); localDiff = macross[1]-currentBlock[13][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[13][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[13][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[13][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[13][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[13][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[13][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[13][15]; diff += ABS(localDiff); if ( diff > bestSoFar ) { return diff; } macross = &(prev[fy+15][fx]); localDiff = macross[1]-currentBlock[15][1]; diff += ABS(localDiff); localDiff = macross[3]-currentBlock[15][3]; diff += ABS(localDiff); localDiff = macross[5]-currentBlock[15][5]; diff += ABS(localDiff); localDiff = macross[7]-currentBlock[15][7]; diff += ABS(localDiff); localDiff = macross[9]-currentBlock[15][9]; diff += ABS(localDiff); localDiff = macross[11]-currentBlock[15][11]; diff += ABS(localDiff); localDiff = macross[13]-currentBlock[15][13]; diff += ABS(localDiff); localDiff = macross[15]-currentBlock[15][15]; diff += ABS(localDiff); return diff;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -