향후 정리가 끝나면 포스팅할 예정이지만 대략적인 절차에
대해서만 기술해 둔다~ 현재는 opencore node 쪽을 살펴보느라 진도가
나가질 않는다...쩝
베이스 코드는 /external/opencore/codecs_v2/omx/omx_testapp
오픈코어에 포함된 omx il 은 패킷 비디오 오픈맥스 관련 인터페이스로
래핑되어 있다.
따라서, 실제 사용하는 omx_core 함수들과 약간 차이가 있고,
추가적인 구조체 등을 정의해 사용하는 경우도 있다.
OMX_Master~ 류로 시작되는 메쏘드들은 OMX_Core.h가 아닌 pv_omxcore.h 에 정의된
메쏘드 들이다. 하지만 결국 하는일은 openmax il 규격의 omx_core 관련 메쏘드를
호출하게 된다.
일단 전체 내용은 추후 기술하고, 필요한 함수명, enum, struct 등만 기술해 둔다.
Component 얻기
OMX_MasterGetComponentsOfRole( role name, comp count, comp names )
mp3의 경우 role name 은 "audio_decoder.mp3" 이며, 각 벤더마다 해당 네임을
제공하게 된다.
Config 정보
OMX_MasterConfigParser()
struct OMXConfigParserInputs
struct AudioOMXConfigParserOutputs
struct VideoOMXConfigParserOutputs
롤 이름과 위에서 얻은 컴포넌트 이름으로 컴포넌트에 기본 설정된 입출력 정보를
얻는다.
핸들 얻기
OMX_MasterGetHandle()
OMX_HandleType
컴포넌트의 핸들을 얻는다.
Parameter 설정 시퀀스
init 을 제외한 모든 설정은 OMX_GetParameter() / OMX_SetParameter() 의
쌍으로 구성된다. 파라미터 설정을 변경할 때도 OMX_GetParameter() 이후에 OMX_SetParameter()를
진행해야 한다.
audio init
OMX_GetParameter()
OMX_PORT_PARAM_TYPE , OMX_IndexParamAudioInit
port definition
buffer수, buffer 사이즈 등 정보 획득
OMX_GetParameter()
OMX_PARAM_PORTDEFINITIONTYPE , OMX_IndexParamPortDefinition (input)
OMX_PARAM_PORTDEFINITIONTYPE , OMX_IndexParamPortDefinition (output)
Codec specifition
코덱 정보
OMX_GetParameter()
OMX_AUDIO_PARAM_MP3TYPE , OMX_IndexParamAudioMp3 (input port)
OMX_AUDIO_PARAM_PCMMODETYPE , OMX_IndexParamAudioPcm (output port)
input format
OMX_GetParameter()
OMX_AUDIO_PARAM_PORTFORMATTYPE , OMX_IndexParamAudioPortFormat
allocate memory
port definition 의 버퍼수 , 버퍼 사이즈를 참고로 버퍼 할당
OMX_BUFFERHEADERTYPE , malloc ( input buffer )
OMX_BUFFERHEADERTYPE , malloc ( output buffer )
change state
OMX_SendCommand() , OMX_CommandStateSet, OMX_StateIdle
idle state
OMX_FillThisBuffer() , handle, outputBuffer
OMX_SendCommand(), OMX_CommandStateSet, OMX_StateExecuting
executing state
OMX_FillThisBuffer() , handle, outputBuffer
OMX_EmptyThisBuffer(), handle, inputBuffer
요렇게 input buffer에 압축된 스트림을 넣고, output buffer에 디코딩된 raw 데이터를
받아 처리하면 된다.
위는 오픈코어를 플랫폼을 사용해 openmax 를 연동하는 방법에 대해서 다루었다.
다음 포스트에서는 opencore 를 제외한 순수 openmax il 만을 사용해 코덱을 연동하는 내용을
포스팅할 예정이다.
샘플 프로젝트도 작성해야 하는데~ 쩝..시간이 읍따~ T_T
'프로그래밍 > Android' 카테고리의 다른 글
AppWidget 여러 개의 위젯을 가진 앱위젯 (0) | 2010.07.09 |
---|---|
OpenGL 사용하기 (0) | 2010.06.27 |
소켓통신 기본사항 (0) | 2010.06.11 |
OpenCore Codec 연동 (0) | 2010.03.27 |
GDB 기본환경 (0) | 2010.03.22 |
오픈코어~오픈맥스 디코더 추가 (0) | 2010.02.23 |
안드로이드 플랫폼 포팅~holloworld 샘플 2 (0) | 2010.02.19 |
안드로이드 플랫폼 동적 링크 설정 (0) | 2010.02.19 |
안드로이드 플랫폼 HelloWorld (0) | 2010.02.18 |
Android system 폴더에 쓰기 (0) | 2010.02.08 |