2009년 9월 1일 화요일

비주얼 2005에서 x264 빌드 시 오류 해결 방안

사용버전 : x264-snapshot-20080414-2245.zip
다운로드 : ftp.videolan.org (아이디, 비번 필요없음)

문제1> NASM 문제..
 x264의 build 폴더 안에는 nasm.exe 가 존재 하지 않는다.
 아래의 사이트에서 nasm-2.02-win32.zip을 다운받는다.
 다운로드 사이트 : http://sourceforge.net/project/showfiles.php?group_id=6208
 다운로드 파일을 열어보면,
 +nasm-2.02 (nasm.exe, ndisasm.exe, COPYING) 이 존재
 +rdoff 존재
 여기서, 빌드를 하기 위해 nasm.exe 파일을
 x264-snapshot-20080414-2245\build\win32\
 폴더 안에 복사해준다.
 그런 후 빌드(현재프로젝트만)를 해보면 잘 되다가
 sad-a.asm 파일의 28번째 라인에서 에러가 발생하게 된다.
 28:  sw_64: dq 64
 라고 되어 있는 것을
 28:  sw_64: dq 64.
 이라고 고쳐준다. 이렇게 안고쳐도 잘 되는 경우가 있다.

문제2> 빌드를 하다 보면 ratecontrol.c 파일의 x264_adaptive_quant함수에서 에러를 동반하게 된다.
        qp_adj = 1.5 * logf(result) - h->rc->aq_threshold;
 이 부분에서 에러가 뜨게 되는데, 아무래도 logf의 문제 인것 같아서
 아래와 같이 바꾸어 주었다.
 먼저 logresult라는 변수를 하나 추가해주어 변경했다.
 float result, qp_adj, logresult;
 x264_cpu_restore(h->param.cpu);
 result = energy;
 logresult = logf(result);
 qp_adj = 1.5 * ((logresult) - (h->rc->aq_threshold));
 
 같은 문제로 같은 파일의 x264_autosense_aq(x264_t *h) 함수에서
 if(energy)
 {
  x264_cpu_restore(h->param.cpu);
  total += logf(energy) * satd;
  n += satd;
 }
 이 부분에서 똑같은 에러가 뜨게 되는데, 마찬가지로 위에서 했던 방법으로 하면된다.
 if(energy)
 {
  x264_cpu_restore(h->param.cpu);
  logen = logf(energy); // 이부분의 logen을 energy에 선언한 옆에 선언해 준다.
  total += logen * satd;
  n += satd;
 }
위와 같이 하면 에러는 발생하지 않고 성공적으로 bin폴더 아래에 라이브러리 파일(libx264.lib)을 출력하게 된다.

라이브러리 파일이 생성이 되었다면, x264프로젝트를 컴파일하여 실행해본다.
실행할때는 command창을 열어서, 그 폴더로 찾아가
인코더 실행명령어를 해본다.
실행 예) x264 -q 28 -o foreman.264 FOREMAN.yuv 352x288
그럼 파일 생성(foreman.264)

또한, 컴파일러에 따른 warning문제가 발생하게 되는데, 상관없으니 신경은 쓰지 않아도 된다.
하지만, 이 부분에 대해 보기가 싫다면
프로젝트 속성-구성속성-C/C++-고급-특정경고사용안함에 warning 번호를 추가 하면 된다.

마지막으로, 자꾸 command 창에서 입력하기가 귀찮으니깐
x264 프로젝트 속성에서 아예 지정하면된다.
프로젝트속성-구성속성-디버깅-명령인수 란에
-q 28 -o foreman.264 FOREMAN.yuv 352x288
이라고 입력하고 확인 버튼을 누른 후 컴파일을 해본다.

댓글 없음:

댓글 쓰기