1
我想用cuda轉換(嘗試將紅色通道設置爲0)gstreamer緩衝區。有一段代碼:Gstreamer緩衝區與cuda轉換
__global__ void transform(guint8 *data, int width){
uint x = (blockIdx.x * blockDim.x) + threadIdx.x;
uint y = (blockIdx.y * blockDim.y) + threadIdx.y;
uint pixPos = (y * width + x) * 4;
data[pixPos + 2] = 0; // BGRA format
}
void simple_transform(guint8 *data, int width, int height){
guint8 *d_data;
guint8 size = width * height * 4;
checkCudaErrors(cudaMalloc((void**)&d_data, size));
// copy original buffer into device
checkCudaErrors(cudaMemcpy(d_data, data, size, cudaMemcpyHostToDevice));
dim3 threads = dim3(8, 8);
dim3 blocks = dim3(width/threads.x, height/threads.y);
// execute kernel
transform<<< blocks, threads >>>(d_data, width);
// move back converted data to original buffer
checkCudaErrors(cudaMemcpy(data, d_data, size, cudaMemcpyDeviceToHost));
cudaFree(d_data);
}
問題是視頻顯示沒有任何變化。我想看到藍綠色的圖片,但不能。我的錯誤在哪裏?
我認爲這應該是錯誤的。 'guint8 size = width * height * 4;'。不應該是'size_t size = width * height * 4;' – sgarizvi
謝謝!現在轉換器可以工作。 – greg
我已經發布解決方案作爲答案,您可以接受它,以便問題可以標記爲已解決。 – sgarizvi