该函数用于帧间预测运动矢量的搜索,在x264中被多次调用,怎么知道哪些函数调用了它呢?
void x264_me_search_ref( x264_t *h, x264_me_t *m, int16_t (*mvc)[2], int i_mvc, int *p_fullpel_thresh );
#define x264_me_search( h, m, mvc, i_mvc)\
x264_me_search_ref( h, m, mvc, i_mvc, NULL )
可以故意多加一个参数,int a,这样调用函数因为参数不一致,就会报错,这样,那些调用参数就浮出水面了
void x264_me_search_ref( x264_t *h, x264_me_t *m, int16_t (*mvc)[2], int i_mvc, int *p_fullpel_thresh,int a );
修改后,保存一下,执行一次make命令,编译器提示报错如下:
chase@chase-VirtualBox:~/workspace/x264$ make
gcc -Wshadow -O3 -ffast-math -m32 -Wall -I. -I. -march=i686 -mfpmath=sse -msse -std=gnu99 -fomit-frame-pointer -fno-tree-vectorize -c -o encoder/analyse.o encoder/analyse.c
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p16x16’中:
encoder/analyse.c:1447:13: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c:1420:10: 警告: 未使用的变量‘i_MSearch_thresh’ [-Wunused-variable]
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p8x8_mixed_ref’中:
encoder/analyse.c:1558:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p8x8’中:
encoder/analyse.c:1624:9: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p16x8’中:
encoder/analyse.c:1692:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p8x16’中:
encoder/analyse.c:1757:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p4x4’中:
encoder/analyse.c:1879:9: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p8x4’中:
encoder/analyse.c:1918:9: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_p4x8’中:
encoder/analyse.c:1954:9: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_b16x16’中:
encoder/analyse.c:2108:13: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_b8x8_mixed_ref’中:
encoder/analyse.c:2401:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_b8x8’中:
encoder/analyse.c:2488:13: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_b16x8’中:
encoder/analyse.c:2567:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
encoder/analyse.c: 在函数‘x264_mb_analyse_inter_b8x16’中:
encoder/analyse.c:2661:17: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
In file included from encoder/analyse.c:4219:0:
encoder/slicetype.c: 在函数‘x264_slicetype_mb_cost’中:
encoder/slicetype.c:621:13: 错误: 提供给函数‘x264_me_search_ref’的实参太少
encoder/me.h:64:6: 附注: 在此声明
由此可知,调用x264_me_search_ref函数的包括:
x264_mb_analyse_inter_p16x16
x264_mb_analyse_inter_p8x8_mixed_ref
x264_mb_analyse_inter_p8x8
x264_mb_analyse_inter_p16x8
x264_mb_analyse_inter_p8x16
x264_mb_analyse_inter_p4x4
x264_mb_analyse_inter_p8x4
x264_mb_analyse_inter_p4x8
x264_mb_analyse_inter_b16x16
x264_mb_analyse_inter_b8x8_mixed_ref
x264_mb_analyse_inter_b8x8
x264_mb_analyse_inter_b16x8
x264_mb_analyse_inter_b8x16’
x264_slicetype_mb_cost
总共14个函数,14次调用。