2014-02-15 80 views
0

我收到錯誤的Android渲染腳本錯誤paramaeter

Fatal signal 11 (SIGSEGV) at 0x51b71000 (code=1), thread 3696 (sssist.magnitab) 

每當我將值分配給出來發回值主應用程序的參數分配給出門的時候,當我刪除分配錯誤消失了,這裏是我的代碼,(部分android代碼)

void root(const char *in, int *out, uint32_t x, uint32_t y) {\ 
    int pixelData[size]; 
    for (int i = 0; i <size ; i += 16) 
     { 
      //rsDebug("---------------:","3333"); 



      int lumOne = in[i]; 
      lumOne += 128; 
      pixelData[lumOne]=pixelData[lumOne]+1; 

      int lumTwo = in[i+2]; 
      lumTwo += 128; 
      //pixelData[lumTwo]++; 
      pixelData[lumTwo]=pixelData[lumTwo]+1; 

     } 

     out[10]=23; 


} 
RenderScript mRS; 

     mRS = RenderScript.create(activity); 
     ScriptC_mono mScript; 
     // Convert to Bitmap 

     Allocation alloc = Allocation.createSized(mRS, Element.I8(mRS), array.length, Allocation.USAGE_SCRIPT); 
     alloc.copyFrom(array); 
     int[] ret = new int[array.length]; 
     int[] ret2 = new int[array.length]; 
     Allocation alloc_out = Allocation.createSized(mRS, Element.I32(mRS), array.length, Allocation.USAGE_SCRIPT); 
     alloc_out.copyFrom(ret2); 

     mScript = new ScriptC_mono(mRS, activity.getResources(),R.raw.mono); 
     mScript.set_size(array.length); 
     mScript.forEach_root(alloc, alloc_out); 
     alloc_out.copyTo(ret2); 

     //byte [] outarray = array; 
     // mOutPixelsAllocation.copyTo(outarray); 
     mRS.finish(); 

幫我改正這個。

回答

0

你應該只寫信出去[0],而不要出[10]。 out指針自動升級,並且在輸入/輸出分配中的每個單元上運行root()。每個單獨的單元格都具有調用該函數的有效輸入/輸出指針對,該對真正映射到[y] [x],out [y] [x](或適當的情況下爲1D)。

+0

非常感謝您的回覆,即使我將其更改爲出[0] = in [0];是foreach函數調用每個單元格的根分配?這裏需要做的是讀這個大的「數組」,並創建相當小的數組來表示它。由於需要時間,我正試圖將此計算轉移到GPU,因此速度會更快。 – droidNDK

+0

您還正在閱讀上面的「在[i + 2]」中。如果沒有錯誤,你也無法做到這一點。 –

+0

有沒有什麼辦法可以傳遞一個數組,並在渲染腳本中進行calcualtion並得到結果? – droidNDK