안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
armeabi-v7a 옵션을 사용해서 ffmpeg 프로그램을 작성하고 있ㅅ브니다.
여러 강좌를 보고 하는 거고, 그냥 armeabi-v7a를 쓰라고 해서 하고 있긴 한데, 개념을 잘 모르겠네요.
왜 armeabi-v7a라는 옵션을 사용해야 하는지...armeabi와 차이는 무엇인지..
ARM cpu를 사용하는 단말기에서 이런 ABI를 지원여부를 어떻게 확인하는지 모르겠네요.
혹시 관련해서 아시는 분 있으면 정중이 답변 부탁드립니다.
2013.01.15 15:20:34
멀티미디어 성능이라기 보단 arm 명령어 셋을 추가로 지원한다고 생각하시면 됩니다. x86에서 MMX 나 SSE 명령어를 추가로 지원하듯이, neon을 비롯한 armv7 명령어 셋을 지원하는 것이죠. java로 짠 코드 보다 c 코드 속도가 빠르고 c 코드 속도보다 어셈블리 속도가 빠르 듯이 neon 명령어를 사용하면 처리 속도가 빨라져서 데이터 처리량이 많은 멀티미디어의 처리 속도가 증가하는 겁니다.
해당 cpu가 지원하는지는 ndk의 sample쪽에 샘플 소스가 있습니다. 하지만 armeabi, armeabi-v7a 에 각각 옵션으로 빌드된 so를 넣어주시면, 알아서 로드 합니다.(물론 ffmpeg의 경우 용량이 6M 정도라.. 그러면 필요도 없는 사이즈가 증가하겠지만요..)
리눅스 커널 소스를 보면 x86버젼도 있지만 686이런식으로 좀더 최신 CPU를 명시한 버젼도 있죠. 차이는 잘 알다시피 범용적으로 두루두루 돌아가는 버젼이냐, 특정환경에 최적화 된 버젼이냐 정도일거니다. armeabi-v7a 같은 버젼은 SIMD 같이 멀티미디어 처리성능을 비약적으로 향상시키는 좀더 최신 기능들을(물론 최신 cpu에서만 지원하는..) 사용할수있는 머신코드를 생성해준다고 보면됩니다.