1// -*- c++ -*- 2 3#ifdef SEARCH_EFFORT_FUNC 4#undef SEARCH_EFFORT_FUNC 5#endif 6 7#ifdef USE_STRANGE_BOB 8#define SEARCH_EFFORT_FUNC(n) SEFUNC(n##SB) 9#else 10#define SEARCH_EFFORT_FUNC(n) SEFUNC(n) 11#endif 12 13static inline int SEARCH_EFFORT_FUNC(0) // we don't try at all ;-) 14{ 15 //see Search_Effort_Max() for comments 16#define SKIP_SEARCH 17#include "SearchLoopTop.inc" 18#include "SearchLoopBottom.inc" 19#undef SKIP_SEARCH 20} 21 22static inline int SEARCH_EFFORT_FUNC(1) 23{ 24#ifdef IS_C 25#define SKIP_SEARCH 26#include "SearchLoopTop.inc" 27#include "SearchLoopBottom.inc" 28#undef SKIP_SEARCH 29#else 30 //see Search_Effort_Max() for comments 31#include "SearchLoopTop.inc" 32 RESET_CHROMA // pretend chroma diffs was 255 each 33#include "SearchLoop0A.inc" 34#include "SearchLoopBottom.inc" 35#endif 36} 37 38static inline int SEARCH_EFFORT_FUNC(3) 39{ 40#ifdef IS_C 41#define SKIP_SEARCH 42#include "SearchLoopTop.inc" 43#include "SearchLoopBottom.inc" 44#undef SKIP_SEARCH 45#else 46 //see Search_Effort_Max() for comments 47#include "SearchLoopTop.inc" 48#include "SearchLoopOddA2.inc" 49 RESET_CHROMA // pretend chroma diffs was 255 each 50#include "SearchLoop0A.inc" 51#include "SearchLoopBottom.inc" 52#endif 53} 54 55static inline int SEARCH_EFFORT_FUNC(5) 56{ 57#ifdef IS_C 58#define SKIP_SEARCH 59#include "SearchLoopTop.inc" 60#include "SearchLoopBottom.inc" 61#undef SKIP_SEARCH 62#else 63 //see Search_Effort_Max() for comments 64#include "SearchLoopTop.inc" 65#include "SearchLoopOddA2.inc" 66#include "SearchLoopOddAH2.inc" 67 RESET_CHROMA // pretend chroma diffs was 255 each 68#include "SearchLoop0A.inc" 69#include "SearchLoopBottom.inc" 70#endif 71} 72 73// 3x3 search 74static inline int SEARCH_EFFORT_FUNC(9) 75{ 76#ifdef IS_C 77#define SKIP_SEARCH 78#include "SearchLoopTop.inc" 79#include "SearchLoopBottom.inc" 80#undef SKIP_SEARCH 81#else 82 //see SearchEffortMax() for comments 83#include "SearchLoopTop.inc" 84#include "SearchLoopOddA.inc" 85 RESET_CHROMA // pretend chroma diffs was 255 each 86#include "SearchLoopVA.inc" 87#include "SearchLoop0A.inc" 88#include "SearchLoopBottom.inc" 89#endif 90} 91 92// Search 9 with 2 H-half pels added 93static inline int SEARCH_EFFORT_FUNC(11) 94{ 95#ifdef IS_C 96#define SKIP_SEARCH 97#include "SearchLoopTop.inc" 98#include "SearchLoopBottom.inc" 99#undef SKIP_SEARCH 100#else 101 //see SearchEffortMax() for comments 102#include "SearchLoopTop.inc" 103#include "SearchLoopOddA.inc" 104#include "SearchLoopOddAH2.inc" 105 RESET_CHROMA // pretend chroma diffs was 255 each 106#include "SearchLoopVA.inc" 107#include "SearchLoop0A.inc" 108#include "SearchLoopBottom.inc" 109#endif 110} 111 112// Search 11 with 2 V-half pels added 113static inline int SEARCH_EFFORT_FUNC(13) 114{ 115#ifdef IS_C 116#define SKIP_SEARCH 117#include "SearchLoopTop.inc" 118#include "SearchLoopBottom.inc" 119#undef SKIP_SEARCH 120#else 121 //see SearchEffortMax() for comments 122#include "SearchLoopTop.inc" 123#include "SearchLoopOddA.inc" 124#include "SearchLoopOddAH2.inc" 125 RESET_CHROMA // pretend chroma diffs was 255 each 126#include "SearchLoopVAH.inc" 127#include "SearchLoopVA.inc" 128#include "SearchLoop0A.inc" 129#include "SearchLoopBottom.inc" 130#endif 131} 132 133// 5x3 134static inline int SEARCH_EFFORT_FUNC(15) 135{ 136#ifdef IS_C 137#define SKIP_SEARCH 138#include "SearchLoopTop.inc" 139#include "SearchLoopBottom.inc" 140#undef SKIP_SEARCH 141#else 142 //see SearchEffortMax() for comments 143#include "SearchLoopTop.inc" 144#include "SearchLoopOddA.inc" 145 RESET_CHROMA // pretend chroma diffs was 255 each 146#include "SearchLoopEdgeA.inc" 147#include "SearchLoopVA.inc" 148#include "SearchLoop0A.inc" 149#include "SearchLoopBottom.inc" 150#endif 151} 152 153// 5x3 + 4 half pels 154static inline int SEARCH_EFFORT_FUNC(19) 155{ 156#ifdef IS_C 157#define SKIP_SEARCH 158#include "SearchLoopTop.inc" 159#include "SearchLoopBottom.inc" 160#undef SKIP_SEARCH 161#else 162 //see SearchEffortMax() for comments 163#include "SearchLoopTop.inc" 164#include "SearchLoopOddA.inc" 165#include "SearchLoopOddAH2.inc" 166 RESET_CHROMA // pretend chroma diffs was 255 each 167#include "SearchLoopEdgeA.inc" 168#include "SearchLoopVAH.inc" 169#include "SearchLoopVA.inc" 170#include "SearchLoop0A.inc" 171#include "SearchLoopBottom.inc" 172#endif 173} 174 175// Handle one 4x1 block of pixels 176// Search a 7x3 area, no half pels 177 178static inline int SEARCH_EFFORT_FUNC(21) 179{ 180#ifdef IS_C 181#define SKIP_SEARCH 182#include "SearchLoopTop.inc" 183#include "SearchLoopBottom.inc" 184#undef SKIP_SEARCH 185#else 186 //see SearchLoopTop.inc for comments 187#include "SearchLoopTop.inc" 188 189 // odd addresses -- the pixels at odd address wouldn't generate 190 // good luma values but we will mask those off 191 192#include "SearchLoopOddA6.inc" // 4 odd v half pels, 3 to left & right 193#include "SearchLoopOddA.inc" // 6 odd pels, 1 to left & right 194 195 RESET_CHROMA // pretend chroma diffs was 255 each 196 197 // even addresses -- use both luma and chroma from these 198 // search averages of 2 pixels left and right 199#include "SearchLoopEdgeA.inc" 200 // search vertical line and averages, -1,0,+1 201#include "SearchLoopVA.inc" 202 // blend our results and loop 203#include "SearchLoop0A.inc" 204#include "SearchLoopBottom.inc" 205#endif 206} 207 208// Handle one 4x1 block of pixels 209// Search a 9x3 area, no half pels 210static inline int SEARCH_EFFORT_FUNC(Max) 211{ 212#ifdef IS_C 213#define SKIP_SEARCH 214#include "SearchLoopTop.inc" 215#include "SearchLoopBottom.inc" 216#undef SKIP_SEARCH 217#else 218 //see SearchLoopTop.inc for comments 219#include "SearchLoopTop.inc" 220 221 // odd addresses -- the pixels at odd address wouldn't generate 222 // good luma values but we will mask those off 223 224#include "SearchLoopOddA6.inc" // 4 odd v half pels, 3 to left & right 225#include "SearchLoopOddA.inc" // 6 odd pels, 1 to left & right 226 227 RESET_CHROMA // pretend chroma diffs was 255 each 228 229 // even addresses -- use both luma and chroma from these 230 // search averages of 4 pixels left and right 231#include "SearchLoopEdgeA8.inc" 232 // search averages of 2 pixels left and right 233#include "SearchLoopEdgeA.inc" 234 // search vertical line and averages, -1,0,+1 235#include "SearchLoopVA.inc" 236 // blend our results and loop 237#include "SearchLoop0A.inc" 238#include "SearchLoopBottom.inc" 239#endif 240} 241 242#undef SEARCH_EFFORT_FUNC 243 244