在JM源码中不同版本的实现会有所不同,我看的是JM86版本,在这个版本中运动路径的确定并不是在我们所猜测的SetupFastFullSearch或者FastFullPelSearch这样的函数中进行的,通过单步调试源码,我们可以看到,在全搜索路径方面,搜索路径的设定是在main函数中Init_Motion_Search_Module()函数中进行;我们可以看看这中间的源码:

   
  //--- init array: search pattern ---
  
spiral_search_x[0] = spiral_search_y[0] = 0;
for (k=1, l=1; l<=max(1,search_range); l++)
{
for (i=-l+1; i< l; i++)
{
spiral_search_x[k] = i; spiral_search_y[k++] = -l;
spiral_search_x[k] = i; spiral_search_y[k++] = l;
}
for (i=-l; i<=l; i++)
{
spiral_search_x[k] = -l; spiral_search_y[k++] = i;
spiral_search_x[k] = l; spiral_search_y[k++] = i;
}
}

通过注释我们可以看见这个部分是确定搜索路径的,加上输出函数我们可以看见,这种搜索是类似于以当前位置为中心的菱形搜索机制;这是一种搜索模式的设定方式,至于其他的路径设定方式我至今还没有看到,可能还有吧

某科学的空间使 answered 11 years, 11 months ago

Your Answer