comparison rectangle.h @ 11276:dd948aea1c20 libavcodec

Extend fill_rectangle() support for 16bit
author michael
date Wed, 24 Feb 2010 20:37:58 +0000
parents e9d9d946f213
children bd5ea8e6f1d3
comparison
equal deleted inserted replaced
11275:63d329cd8d80 11276:dd948aea1c20
56 *(uint16_t*)(p + 1*stride)= v; 56 *(uint16_t*)(p + 1*stride)= v;
57 if(h==2) return; 57 if(h==2) return;
58 *(uint16_t*)(p + 2*stride)= v; 58 *(uint16_t*)(p + 2*stride)= v;
59 *(uint16_t*)(p + 3*stride)= v; 59 *(uint16_t*)(p + 3*stride)= v;
60 }else if(w==4){ 60 }else if(w==4){
61 const uint32_t v= size==4 ? val : val*0x01010101; 61 const uint32_t v= size==4 ? val : size==2 ? val*0x00010001 : val*0x01010101;
62 *(uint32_t*)(p + 0*stride)= v; 62 *(uint32_t*)(p + 0*stride)= v;
63 if(h==1) return; 63 if(h==1) return;
64 *(uint32_t*)(p + 1*stride)= v; 64 *(uint32_t*)(p + 1*stride)= v;
65 if(h==2) return; 65 if(h==2) return;
66 *(uint32_t*)(p + 2*stride)= v; 66 *(uint32_t*)(p + 2*stride)= v;
67 *(uint32_t*)(p + 3*stride)= v; 67 *(uint32_t*)(p + 3*stride)= v;
68 }else if(w==8){ 68 }else if(w==8){
69 //gcc can't optimize 64bit math on x86_32 69 //gcc can't optimize 64bit math on x86_32
70 #if HAVE_FAST_64BIT 70 #if HAVE_FAST_64BIT
71 const uint64_t v= val*0x0100000001ULL; 71 const uint64_t v= size==2 ? val*0x0001000100010001ULL : val*0x0100000001ULL;
72 *(uint64_t*)(p + 0*stride)= v; 72 *(uint64_t*)(p + 0*stride)= v;
73 if(h==1) return; 73 if(h==1) return;
74 *(uint64_t*)(p + 1*stride)= v; 74 *(uint64_t*)(p + 1*stride)= v;
75 if(h==2) return; 75 if(h==2) return;
76 *(uint64_t*)(p + 2*stride)= v; 76 *(uint64_t*)(p + 2*stride)= v;
85 *(uint64_t*)(p + 0+2*stride)= v; 85 *(uint64_t*)(p + 0+2*stride)= v;
86 *(uint64_t*)(p + 8+2*stride)= v; 86 *(uint64_t*)(p + 8+2*stride)= v;
87 *(uint64_t*)(p + 0+3*stride)= v; 87 *(uint64_t*)(p + 0+3*stride)= v;
88 *(uint64_t*)(p + 8+3*stride)= v; 88 *(uint64_t*)(p + 8+3*stride)= v;
89 #else 89 #else
90 *(uint32_t*)(p + 0+0*stride)= val; 90 const uint32_t v= size==2 ? val*0x00010001 : val*0x01010101;
91 *(uint32_t*)(p + 4+0*stride)= val; 91 *(uint32_t*)(p + 0+0*stride)= v;
92 *(uint32_t*)(p + 4+0*stride)= v;
92 if(h==1) return; 93 if(h==1) return;
93 *(uint32_t*)(p + 0+1*stride)= val; 94 *(uint32_t*)(p + 0+1*stride)= v;
94 *(uint32_t*)(p + 4+1*stride)= val; 95 *(uint32_t*)(p + 4+1*stride)= v;
95 if(h==2) return; 96 if(h==2) return;
96 *(uint32_t*)(p + 0+2*stride)= val; 97 *(uint32_t*)(p + 0+2*stride)= v;
97 *(uint32_t*)(p + 4+2*stride)= val; 98 *(uint32_t*)(p + 4+2*stride)= v;
98 *(uint32_t*)(p + 0+3*stride)= val; 99 *(uint32_t*)(p + 0+3*stride)= v;
99 *(uint32_t*)(p + 4+3*stride)= val; 100 *(uint32_t*)(p + 4+3*stride)= v;
100 }else if(w==16){ 101 }else if(w==16){
101 *(uint32_t*)(p + 0+0*stride)= val; 102 *(uint32_t*)(p + 0+0*stride)= v;
102 *(uint32_t*)(p + 4+0*stride)= val; 103 *(uint32_t*)(p + 4+0*stride)= v;
103 *(uint32_t*)(p + 8+0*stride)= val; 104 *(uint32_t*)(p + 8+0*stride)= v;
104 *(uint32_t*)(p +12+0*stride)= val; 105 *(uint32_t*)(p +12+0*stride)= v;
105 *(uint32_t*)(p + 0+1*stride)= val; 106 *(uint32_t*)(p + 0+1*stride)= v;
106 *(uint32_t*)(p + 4+1*stride)= val; 107 *(uint32_t*)(p + 4+1*stride)= v;
107 *(uint32_t*)(p + 8+1*stride)= val; 108 *(uint32_t*)(p + 8+1*stride)= v;
108 *(uint32_t*)(p +12+1*stride)= val; 109 *(uint32_t*)(p +12+1*stride)= v;
109 if(h==2) return; 110 if(h==2) return;
110 *(uint32_t*)(p + 0+2*stride)= val; 111 *(uint32_t*)(p + 0+2*stride)= v;
111 *(uint32_t*)(p + 4+2*stride)= val; 112 *(uint32_t*)(p + 4+2*stride)= v;
112 *(uint32_t*)(p + 8+2*stride)= val; 113 *(uint32_t*)(p + 8+2*stride)= v;
113 *(uint32_t*)(p +12+2*stride)= val; 114 *(uint32_t*)(p +12+2*stride)= v;
114 *(uint32_t*)(p + 0+3*stride)= val; 115 *(uint32_t*)(p + 0+3*stride)= v;
115 *(uint32_t*)(p + 4+3*stride)= val; 116 *(uint32_t*)(p + 4+3*stride)= v;
116 *(uint32_t*)(p + 8+3*stride)= val; 117 *(uint32_t*)(p + 8+3*stride)= v;
117 *(uint32_t*)(p +12+3*stride)= val; 118 *(uint32_t*)(p +12+3*stride)= v;
118 #endif 119 #endif
119 }else 120 }else
120 assert(0); 121 assert(0);
121 assert(h==4); 122 assert(h==4);
122 } 123 }