참고로 Packet Video(PV)라는 회사는 미국 샌디에이고에 있습니다.
멀티미디어 관련 솔루션으로는 능력도 뛰어나고 이 바닥에서는 매우 유명한 회사입니다.
PV는 CORE라는 제품을 만들었고, 이는 매우 다양한 기기들의 미디어 프레임웍으로 사용되었죠.
CORE의 성공 이후, 구글과 손잡고 Open Source 버전의 CORE를 Android에 제공했습니다.
PV도 OHA 멤버이지만, 구글의 펀딩도 상당했었으리라 짐작이 됩니다.
하여간 이 OpenCORE는 안드로이드의 미디어 서브시스템을 담당하고 있습니다.
Git상의 최근 버전은 2.03인듯합니다만, 공식 문서는 2.1 rev1 이네요. 버전 넘버링 오류같군요.
OpenCORE는 Khronos의 OpenMAX 스펙을 지원합니다. 참고로 크로노스는 OpenGL로 유명한 단체입니다.
최근 릴리즈는 디코딩과 엔코딩을 모두 구현하여 3G폰의 화상통화나 HD급 캠코더 기능도 가능하도록 개선되었습니다.
하드웨어 가속 비디오 코덱을 OpenCORE에 추가하기 위해서는 다소 복잡한 과정이 필요한것 같습니다.
우선 http://www.khronos.org/openmax/를 참고하여 OpenMAX IL (Intergration Layer API)를 알아야 합니다.
OpenCORE는 MS의 D-show filter형태나 Gstreamer의 PlugIn 코덱과 유사한 구조로 런타임시 교체가 가능한 구성입니다.
사실 Codec뿐아니라 Parser,Demuxer에서부터 AV Renderer/Mixer까지 모두 plugin 구조를 권장합니다.
기본적인 plugin 구성 규칙과 각 코덱의 상이한 API를 일반화시키는 Wrapper의 형태를 파악하는 것이 주로 해야할일 같습니다.
PV OpenCORE framework과 OpenMAX IL 1.1을 준수하는 AV 코덱들의 실제 구성은 아래 링크 PDF를 참고하세요.
http://android.git.kernel.org/?p=platform/external/opencore.git;a=blob_plain;f=doc/omx_core_integration_guide.pdf;hb=master
openmax(이하 omx) 원래 크로노스에서 스팩을 정할때 DL, IL, AL로 나눠서 만들었구요.
DL은 HW, IL은 Codec, AL은 App이정도로 이해 하시면 됩니다. 자세한건 크로노스에 가면.......
그중 가장 많이 쓰이는것이 IL입니다. (뭐 회사마다 다른 Codec Api를 하나로 통합시키는 부분이니 많이 쓰이죠)
opencore에서도 쓰는데요........ opencore는 각각 기능을 가진 노드와 그 노드들을 연결/운용하는 엔진으로 구성되어 있습니다.
그 노드중에 오디오/비디오(dec/enc)노드 만이 omx를 사용합니다.
그리고 opencore 노드와 omx의 연결을 위해서는 pv_omx_interface를 만들어야 합니다.
또한 omx IL은 omx IL component와 omx IL core(pv opencore 아님!!!!!!!), omx IL client로 구성되는데..... omx IL client는 omx IL을 사용 하는놈으로 opencore의 노드로 보면 됨......
즉 portting을 위해서는 omx IL component, omx IL core, pv_omx_interface를 개발 해야 합니다.
추가적으로 pv opencore는 omx IL v1.1을 지원 한다고는하나..... IL의 모든 스팩을 지원하는 것은 아니구요....
IL의 중요 기능은 거의 지원하지 않아서..... 조금만 수고하시면(open source 참조) omx IL component, omx IL core를 만들수 있을겁니다.