비디오의 픽셀을 임의로 뒤섞는 NV12 비디오 변환을 적용하고 있습니다. 비디오의 시작 *ARM NEON 이미지 변환을위한 최적화
//Temporary tables for the destination
for (j = 0; j < height; j++)
for (i = 0; i < width; i++) {
toY[i][j] = j * width + i;
toUV[i][j] = j/2 * width + ((int)(i/2)) * 2;
}
//Temporary tables for the source
for (j = 0; j < height; j++)
for (i = 0; i < width; i++) {
fromY[i][j] = funcY(i, j) * width + funcX(i, j);
fromUV[i][j] = funcY(i, j)/2 * width + ((int)(funcX(i, j)/2)) * 2;
}
에서 한 번만 수행
* 전처리 : 구글 넥서스 7 2013와 같은 ARM 장치에서 성능은 다음과 같은 C 코드와 1024x512 영역에 대해 초당 30 프레임에 아주 나쁜 각 프레임에서 수행
* 프로세스 *
for (j = 0; j < height; j++)
for (i = 0; i < width; i++) {
destY[ toY[i][j] ] = srcY[ fromY[i][j] ];
if ((i % 2 == 0) && (j % 2 == 0)) {
destUV[ toUV[i][j] ] = srcUV[ fromUV[i][j] ];
destUV[ toUV[i][j] + 1 ] = srcUV[ fromUV[i][j] + 1 ];
}
}
가 한 번만 계산 비록, funcX/Y는이 파를 최적화하는 것은 매우 쉬운 일이 아닙니다 그래서 꽤 복잡한 변환이 티.
각 프레임에서 계산 된 이중 루프를 주어진 "원본"테이블로 고정 할 수있는 방법이 아직 남아 있습니까?
인덱스에 테이블을 사용하지 않는 것이 좋습니다. 항상 산술을 사용하십시오. 메모리 대역폭은 CPU보다 부족합니다. 이미지를보다 명확하게 트래버스하는 방법을 알려주고 사람들이 개선 방법에 대한 더 나은 아이디어를 줄 수 있는지도 모릅니다. – auselen