-1
원시 비디오 YUV 파일에서 일부 컴퓨팅을 수행하고 있습니다. 아이디어는 픽셀 단위로 전체 프레임에 걸쳐 8x8 창을 이동하는 것입니다. 여기에 내 코드입니다 :파일을 읽을 때 액세스 위반 예외가 발생했습니다.
while ((frameNumber < maxFrame) &&
(fread_s(frame1, frameSize, 1, frameSize, file1)== frameSize) &&
(fread_s(frame2, frameSize, 1, frameSize, file2)) == frameSize)
{
unsigned char *p1 = frame1; //pointer to indicate start of a window
unsigned char *p2 = frame2;
unsigned char *p8_1 = NULL; //pointer used to navigate accross 8x8window
unsigned char *p8_2 = NULL;
for (int i = 0; i < countY; i += stepSize)
{
p1 += i*width; //move to next line
p2 += i*width;
for (int j = 0; j < countX; j += stepSize)
{
meanLuma1 = 0;
meanLuma2 = 0;
//8x8 window loop
for (int k = 0; k < windowSize; k++)
{
p8_1 = p1 + k*width; //move to next line of a window
p8_2 = p2 + k*width;
for (int l = 0; l < windowSize; l++)
{
meanLuma1 += *p8_1;
meanLuma2 += *p8_2; //Access violation here at i=60, others are 0
++p8_1;
++p8_2;
}
}
meanLuma1 = meanLuma1/(windowSize*windowSize);
meanLuma2 = meanLuma2/(windowSize*windowSize);
++p1;
++p2;
}
내가 p8_2
에 액세스 위반 예외가 계속 (전 = 60, J, K, L = 0). 이상하게 생각합니다. p8_1
은 성공적으로 값을 읽지 만 두 파일의 크기와 크기가 같기 때문에 p8_2
은 그렇지 않습니다. 변수 상태는 다음과 같습니다
width=352;
height=288;
stepSize=4;
windowSize=8;
그리고 다음과 같은 단계의 최대 수를 계산 해요 :
int countX = ((width - windowSize)/stepSize)+1;
int countY = ((height - windowSize)/stepSize)+1;
둘째 낯선 내가 windowSize = 16
및 stepSize = 8
을 설정하면, 성공적으로 컴파일 것입니다.
명백한 문제가 보이지 않습니까? 나는 여러 해 동안 버그를 발견하는 데 어려움을 겪고있다.