This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8168 DSP核心中加算法 数组做差问题



DM8168平台,DVRRDK4.0    我在DSP核心中想加入自己的背景建模算法来求取前景 YUV420格式  我目前求取了背景并放置到meanY1[WIDTH*HEIGHT]中,想要通过差分法求取前景(运动目标),现有如下语句:其中meanY1[m]中存放的是已求得的背景图像且经过验证是正确的,ImageDiffY1[m]预存放前景图像(也就是做差求得的图像),但是现在遇到的问题是做差之后,当当前帧取得的数据与背景meanY1[m]中数据一致时,理论上应该显示全黑,但是实际上是一闪一闪的,闪一下黑色闪一下背景建模图像,频率很快,程序中通过注释中的test1,2,3测试,均能正常显示欲求结果。怀疑是编译器优化问题,请问该如何解决,求得正确的结果?

for(m= 0; m < WIDTH*HEIGHT; ++m)
{
ImageDiffY1[m] = abs(*((unsigned char*)(pFrame->addr[0][0]) + m) - meanY1[m]);
//ImageDiffY1[m] = 0;//test1
//ImageDiffY1[m] = abs(*((unsigned char*)(pFrame->addr[0][0]) + m) - 0); //test2
//ImageDiffY1[m] = abs(255 - meanY1[m]);//test3
}

memcpy((unsigned char*)(pFrame->addr[0][0]),ImageDiffY1,WIDTH * HEIGHT);

  • 你好,

    你如何怀疑是编译器优化的问题? 您可以编译代码选择不优化看看是否有改善?

    是否和cache有关?关闭cache问题是否还是存在?

    你的代码是每一帧都做差值么?会不是是代码逻辑的问题?

  • Chris Meng你好:

    相同的代码我再DVRRDK2.0下跑是没用问题的。

    而这两个版本的编译器不一样,所以我怀疑是编译器优化问题。

    现在我找到原因了,每次做差之后我将ImageDiff的值赋给addr[0][0]后都会交还给Iink,但是下一次做差的时候addr[0][0]里面的值并不是新的从前一个Link取来的值,而是上一次ImageDiff赋给他的值,所以造成画面闪动,也就是循环做差了。

    我不知道这是什么原因。还望指教。谢谢

    PS:请问如何关闭cache?

  • 你好,

    请问你是否有偶尝试编译代码选择不优化看看是否有改善?

    关于cache,请参考http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/p/100046/263136.aspx#263136。