Przeglądaj źródła

try to optimize copyMacroblock by moving less data around

Maik Merten 12 lat temu
rodzic
commit
ae3cd4c81d
1 zmienionych plików z 50 dodań i 25 usunięć
  1. 50 25
      jsmpg.js

+ 50 - 25
jsmpg.js Wyświetl plik

@@ -941,16 +941,20 @@ jsmpeg.prototype.copyMacroblock = function(motionH, motionV, sY, sCr, sCb ) {
941 941
 			while( dest < last ) {
942 942
 				y21 = sY[src]; y22 = sY[src+width]; src++;
943 943
 				for( var x = 0; x < 4; x++ ) {
944
-					y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
944
+					//y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
945
+					y11 = sY[src]; y12 = sY[src+width]; src++;
945 946
 					y = (((y11 + y21 + y12 + y22 + 2) >> 2) & 0xff);
946 947
 
947
-					y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
948
+					//y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
949
+					y21 = sY[src]; y22 = sY[src+width]; src++;
948 950
 					y |= (((y11 + y21 + y12 + y22 + 2) << 6) & 0xff00);
949 951
 					
950
-					y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
952
+					//y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
953
+					y11 = sY[src]; y12 = sY[src+width]; src++;
951 954
 					y |= (((y11 + y21 + y12 + y22 + 2) << 14) & 0xff0000);
952 955
 
953
-					y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
956
+					//y11 = y21; y12 = y22; y21 = sY[src]; y22 = sY[src+width]; src++;
957
+					y21 = sY[src]; y22 = sY[src+width]; src++;
954 958
 					y |= (((y11 + y21 + y12 + y22 + 2) << 22) & 0xff000000);
955 959
 
956 960
 					dY[dest++] = y;
@@ -960,18 +964,23 @@ jsmpeg.prototype.copyMacroblock = function(motionH, motionV, sY, sCr, sCb ) {
960 964
 		}
961 965
 		else {
962 966
 			while( dest < last ) {
963
-				y21 = sY[src]; src++;
967
+				//y21 = sY[src]; src++;
968
+				y11 = sY[src++];
964 969
 				for( var x = 0; x < 4; x++ ) {
965
-					y11 = y21; y21 = sY[src]; src++;
970
+					//y11 = y21; y21 = sY[src]; src++;
971
+					y21 = sY[src++];
966 972
 					y = (((y11 + y21 + 1) >> 1) & 0xff);
967 973
 					
968
-					y11 = y21; y21 = sY[src]; src++;
974
+					//y11 = y21; y21 = sY[src]; src++;
975
+					y11 = sY[src++];
969 976
 					y |= (((y11 + y21 + 1) << 7) & 0xff00);
970 977
 					
971
-					y11 = y21; y21 = sY[src]; src++;
978
+					//y11 = y21; y21 = sY[src]; src++;
979
+					y21 = sY[src++];
972 980
 					y |= (((y11 + y21 + 1) << 15) & 0xff0000);
973 981
 					
974
-					y11 = y21; y21 = sY[src]; src++;
982
+					//y11 = y21; y21 = sY[src]; src++;
983
+					y11 = sY[src++];
975 984
 					y |= (((y11 + y21 + 1) << 23) & 0xff000000);
976 985
 
977 986
 					dY[dest++] = y;
@@ -1038,23 +1047,31 @@ jsmpeg.prototype.copyMacroblock = function(motionH, motionV, sY, sCr, sCb ) {
1038 1047
 				cb21 = sCb[src]; cb22 = sCb[src+width];
1039 1048
 				src++;
1040 1049
 				for( var x = 0; x < 2; x++ ) {
1041
-					cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1042
-					cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1050
+					//cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1051
+					cr11 = sCr[src]; cr12 = sCr[src+width];
1052
+					//cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1053
+					cb11 = sCb[src]; cb12 = sCb[src+width]; src++;
1043 1054
 					cr = (((cr11 + cr21 + cr12 + cr22 + 2) >> 2) & 0xff);
1044 1055
 					cb = (((cb11 + cb21 + cb12 + cb22 + 2) >> 2) & 0xff);
1045 1056
 
1046
-					cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1047
-					cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1057
+					//cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1058
+					cr21 = sCr[src]; cr22 = sCr[src+width];
1059
+					//cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1060
+					cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1048 1061
 					cr |= (((cr11 + cr21 + cr12 + cr22 + 2) << 6) & 0xff00);
1049 1062
 					cb |= (((cb11 + cb21 + cb12 + cb22 + 2) << 6) & 0xff00);
1050 1063
 
1051
-					cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1052
-					cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1064
+					//cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1065
+					cr11 = sCr[src]; cr12 = sCr[src+width];
1066
+					//cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1067
+					cb11 = sCb[src]; cb12 = sCb[src+width]; src++;
1053 1068
 					cr |= (((cr11 + cr21 + cr12 + cr22 + 2) << 14) & 0xff0000);
1054 1069
 					cb |= (((cb11 + cb21 + cb12 + cb22 + 2) << 14) & 0xff0000);
1055 1070
 
1056
-					cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1057
-					cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1071
+					//cr11 = cr21; cr12 = cr22; cr21 = sCr[src]; cr22 = sCr[src+width];
1072
+					cr21 = sCr[src]; cr22 = sCr[src+width];
1073
+					//cb11 = cb21; cb12 = cb22; cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1074
+					cb21 = sCb[src]; cb22 = sCb[src+width]; src++;
1058 1075
 					cr |= (((cr11 + cr21 + cr12 + cr22 + 2) << 22) & 0xff000000);
1059 1076
 					cb |= (((cb11 + cb21 + cb12 + cb22 + 2) << 22) & 0xff000000);
1060 1077
 
@@ -1071,23 +1088,31 @@ jsmpeg.prototype.copyMacroblock = function(motionH, motionV, sY, sCr, sCb ) {
1071 1088
 				cb21 = sCb[src];
1072 1089
 				src++;
1073 1090
 				for( var x = 0; x < 2; x++ ) {
1074
-					cr11 = cr21; cr21 = sCr[src];
1075
-					cb11 = cb21; cb21 = sCb[src]; src++;
1091
+					//cr11 = cr21; cr21 = sCr[src];
1092
+					cr11 = sCr[src];
1093
+					//cb11 = cb21; cb21 = sCb[src]; src++;
1094
+					cb11 = sCb[src++];
1076 1095
 					cr = (((cr11 + cr21 + 1) >> 1) & 0xff);
1077 1096
 					cb = (((cb11 + cb21 + 1) >> 1) & 0xff);
1078 1097
 
1079
-					cr11 = cr21; cr21 = sCr[src];
1080
-					cb11 = cb21; cb21 = sCb[src]; src++;
1098
+					//cr11 = cr21; cr21 = sCr[src];
1099
+					cr21 = sCr[src];
1100
+					//cb11 = cb21; cb21 = sCb[src]; src++;
1101
+					cb21 = sCb[src++];
1081 1102
 					cr |= (((cr11 + cr21 + 1) << 7) & 0xff00);
1082 1103
 					cb |= (((cb11 + cb21 + 1) << 7) & 0xff00);
1083 1104
 
1084
-					cr11 = cr21; cr21 = sCr[src];
1085
-					cb11 = cb21; cb21 = sCb[src]; src++;
1105
+					//cr11 = cr21; cr21 = sCr[src];
1106
+					cr11 = sCr[src];
1107
+					//cb11 = cb21; cb21 = sCb[src]; src++;
1108
+					cb11 = sCb[src++];
1086 1109
 					cr |= (((cr11 + cr21 + 1) << 15) & 0xff0000);
1087 1110
 					cb |= (((cb11 + cb21 + 1) << 15) & 0xff0000);
1088 1111
 
1089
-					cr11 = cr21; cr21 = sCr[src];
1090
-					cb11 = cb21; cb21 = sCb[src]; src++;
1112
+					//cr11 = cr21; cr21 = sCr[src];
1113
+					cr21 = sCr[src];
1114
+					//cb11 = cb21; cb21 = sCb[src]; src++;
1115
+					cb21 = sCb[src++];
1091 1116
 					cr |= (((cr11 + cr21 + 1) << 23) & 0xff000000);
1092 1117
 					cb |= (((cb11 + cb21 + 1) << 23) & 0xff000000);
1093 1118