ffmpeg 크로스 컴파일 조언 부탁드립니다.

nexus26의 이미지

안녕하세요?

저는 영상전화를 포팅하는 프로젝트를 진행중인데 벽에 부딧혔다라는 느낌에 이렇게 질문을 올립니다.

휴인스의 Acumen270k 보드에서 ffmpeg의 영상 모듈을 사용하는데
ffmpeg를 크로스 컴파일한 후 실행하면 계속해서 문제가 발생합니다.
이곳에 상당히 많은 시간을 들여서 반복해서 컴파일과 테스트해본 결과
부동소수점 관련 연산에서 문제가 있는걸로 보입니다.

또, 크로스 컴파일 해본결과 Acumen CD안의 툴체인과 휴인스측에서 제공받은 arm-softfloat-linux-gnu-gcc 모두 어셈블리어 컴파일 도중 에러가 나고 PXA255-Pro3안의 툴체인만 컴파일이 성공했습니다.

이와 관련해 몇가지가 궁금한데 답변해 주시면 감사하겠습니다.

1. 사용중인 CPU armv5te가 부동소수점 연산을 지원하는지
2. ffmpeg를 크로스 컴파일 할때 필요한 옵션이 있는지
3. 보드와 맞지 않는 툴체인 사용이 문제가 된건지
4. 혹시 ffmpeg의 영상이 보드에서 사용이 가능한지
(혹시라도 알고 계시다면 정상적인 ffmpeg configure 옵션을 알려주시면 감사하겠습니다.)

정상적으로 ffmpeg를 크로스 컴파일해 단순히 ffplay라도 실행하면 문제가 해결될것으로 보이는데 지금 이때문에 모듈때문에 프로젝트 진행이 안됩니다.
스스로 해결하려 했으나 더이상 지체할수가 없어서 이렇게 질문드립니다.
부탁드립니다.

*ffmpeg configure 옵션 및 결과
----------------------------
[root@localhost ffmpeg]# ./configure --prefix=$ARM_INSTALL_TREE/usr --arch=armv4l --cross-prefix=arm-linux- --disable-mmx --enable-shared --enable-pthreads
install prefix /root/armbuild-1.7.1/usr
source path /root/hope/kuta/ffmpeg
C compiler arm-linux-gcc
make make
.align is power-of-two yes
ARCH armv4l (generic)
big-endian no
ARMv5TE enabled yes
ARMv6 enabled no
IWMMXT enabled yes
gprof enabled no
debug symbols yes
strip symbols yes
optimize yes
static yes
shared yes
postprocessing support no
software scaler enabled no
video hooking yes
Imlib2 support no
FreeType support no
network support yes
IPv6 support yes
threading support pthreads
SDL support yes
Sun medialib support no
AVISynth enabled no
liba52 support no
liba52 dlopened no
libamr-nb support no
libamr-wb support no
libfaac enabled no
libfaad enabled no
faadbin enabled no
libgsm enabled no
libmp3lame enabled no
libnut enabled no
libogg enabled no
libtheora enabled no
libvorbis enabled no
x264 enabled no
XviD enabled no
zlib enabled yes
License: LGPL
Creating config.mak and config.h...
[root@localhost ffmpeg]#
----------------------------

*실행 에러 메시지
---------------------------
[root@acumen:bin]# ./ffplay /root/armbuild-1.7.1/sample.avi
Value 0.000000 for parameter 'probesize' out of range.
Value 0.000000 for parameter 'muxrate' out of range.
Value 0.000000 for parameter 'packetsize' out of range.
Value 0.000000 for parameter 'fflags' out of range.
......................... ( 반복적인 에러 메시지 )

Value 0.000000 for parameter 'max_partition_order' out of range.
Value 0.000000 for parameter 'timecode_frame_start' out of range.
var: pixclock=63492 pcd=3
var: pixclock=27000 pcd=1
Floating point exception
---------------------------

맨 아랫줄의 Floating point exception 메시지는 여러 다른방식으로 컴파일 한경우 없어지긴 합니다만 그외의 에러메시지는 항상 동일합니다.

체스맨의 이미지

arm 프로세서는 FPU 가 없는 것으로 알고있습니다. 그래서 실수 연산은 소프트웨어적으로 수행될 겁니다.

저도 ffmpeg 을 포팅할 일이 있었고, arm 을 사용하는 휴대기기에서 정상적으로 작동하고 있습니다. 컴파일러는 장치에 gcc 및 에뮬레이터에 vc 사용했습니다.

저는 전역 변수와 64비트 정수 연산이 지원되지 않는 플렛폼인데다가 vc 에서 돌게 할 필요도 있어서, gnu extension 부분을 죽도록 수정했습니다.
( 죽는 줄 알았습니다. -_-; )

그래서 arm 프로세서에서 ffmpeg 이 일단 작동은 할 수 있습니다.
우선 의심되는 기본 테스트부터 해보세요. 실수 연산이라던가, 64비트 정수 연산이라던가... 구조체 pack 지정은 제대로 동작하고 있는지 등.

문제가 없다면 포팅이 잘 못 된 것이겠죠.

Orion Project : http://orionids.org

jachin의 이미지

확인해본 결과 PXA270 을 코어로 사용하고 있군요?

armv5te 계열 제품군에 해당한다지만, 부동소수점 연산기를 내장하고 있는지 여부는 코어를 생산한 업체에서 내부에 Co Processor 를 내장했느냐 여부에 따라 달라집니다. 인텔사 홈페이지에서 PXA270에 대한 정보를 더 얻어보시는 것이 어떨까요? 그리고 크로스 컴파일러도 새로 생성하셔서 자신의 환경에 맞는 컴파일 환경을 쓰시는 것이 좋을것 같은데요?
====
( - -)a 이제는 학생으로 가장한 백수가 아닌 진짜 백수가 되어야겠다.

nexus26의 이미지

말씀하신대로 프로세서에 FPU가 없어서 생기는 문제였습니다.
부동소수점 연산을 소프트웨어적으로 컴파일해주는 크로스 컴파일러 arm-softfloat-linux-gnu-gcc로 바꾸고
ffmpeg configure 다음과 같은 옵션으로 바꿔서 컴파일 및 실행 성공했습니다.

./configure --cross-compile --cross-prefix=arm-softfloat-linux-gnu- --disable-static --enable-shared --prefix=(설치경로) --enable-pthreads --disable-mmx --disable-armv5te --disable-iwmmxt --arch=armv4

여기에 armv4라고 존재하지 않는 architecture를 지정하는 트릭이 있습니다.
휴인스에 문의해서 얻은 답입니다. 역시 이런건 하드웨어 제조 업체에 문의하는게 빠르군요..
임베디드가 워낙 이런저런 외부적인 요인이 많으니...

답글 감사합니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.