오픈코어에서 OpenMax 관련 오브젝트가 등록되는 흐름을 대략 살펴본다.
이미 포함되어 있는 mp3 코덱에 대해 어떤 모습으로 프로젝트가 구성되어 있는지
확인하면 좋을듯 싶다~ 단순히 openmax
1. UUID 만들기
ANDROID_PATH/exernal/opencore/codecs_v2/omx/omx_common/include/pv_omxcore.h
파일을 열어 uuid를 등록한다.
파일에 #if USE_DYNAMIC_LOAD_OMX_COMPONENTS 부분에 보면
가 uuid 를 define 하고 있는데, 여기에 등록할 새 코덱의 uuid 를 등록해 준다.
2. 디코더 라이브러리 추가 및 인터페이스 헤더 추가
ANDROID_PATH/external/opencore/codecs_v2/ 폴더아래 폴더를 만들고 코덱 파일들을
복사한다.
3. Android.mk 작성
디코더 관련 make파일을 작성한다.
* 샘플( mp3 디코더)의 Android.mk 참조
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
src/pvmp3_normalize.cpp \
src/pvmp3_alias_reduction.cpp \
src/pvmp3_crc.cpp \
src/pvmp3_decode_header.cpp \
src/pvmp3_decode_huff_cw.cpp \
src/pvmp3_decoder.cpp \
src/pvmp3_getbits.cpp \
src/pvmp3_dequantize_sample.cpp \
src/pvmp3_framedecoder.cpp \
src/pvmp3_get_main_data_size.cpp \
src/pvmp3_get_side_info.cpp \
src/pvmp3_get_scale_factors.cpp \
src/pvmp3_mpeg2_get_scale_data.cpp \
src/pvmp3_mpeg2_get_scale_factors.cpp \
src/pvmp3_mpeg2_stereo_proc.cpp \
src/pvmp3_huffman_decoding.cpp \
src/pvmp3_huffman_parsing.cpp \
src/pvmp3_tables.cpp \
src/pvmp3_imdct_synth.cpp \
src/pvmp3_mdct_6.cpp \
src/pvmp3_dct_6.cpp \
src/pvmp3_poly_phase_synthesis.cpp \
src/pvmp3_equalizer.cpp \
src/pvmp3_seek_synch.cpp \
src/pvmp3_stereo_proc.cpp \
src/pvmp3_reorder.cpp \
src/pvmp3_polyphase_filter_window.cpp \
src/pvmp3_mdct_18.cpp \
src/pvmp3_dct_9.cpp \
src/pvmp3_dct_16.cpp
ifeq ($(TARGET_ARCH),arm)
LOCAL_SRC_FILES += \
src/asm/pvmp3_polyphase_filter_window_gcc.s \
src/asm/pvmp3_mdct_18_gcc.s \
src/asm/pvmp3_dct_9_gcc.s \
src/asm/pvmp3_dct_16_gcc.s
endif
LOCAL_MODULE := libpvmp3
LOCAL_CFLAGS := $(PV_CFLAGS)
LOCAL_ARM_MODE := arm
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_C_INCLUDES := \
$(PV_TOP)/codecs_v2/audio/mp3/dec/src \
$(PV_TOP)/codecs_v2/audio/mp3/dec/include \
$(PV_INCLUDES)
LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
LOCAL_COPY_HEADERS := \
include/pvmp3_decoder.h \
include/pvmp3decoder_api.h \
include/pvmp3_audio_type_defs.h
include $(BUILD_STATIC_LIBRARY)
4. 오픈맥스 인터페이스 생성
코덱(디코더)은 구성했으니 이젠 오픈맥스 인터페이스와 연결해야 한다.
ANDROID_PATH/external/opencore/codecs_v2/omx/your_codec 폴더를 만든다.
디코더 라이브러리 연동을 위한 클래스와
오픈맥스 인터페이스 클래스를 만든다.
오픈코어에서 공유 라이브러리를 접근하기 위해 공통적인 export 템플릿을 제공하고 있다.
ANDROID_PATH/external/opencore/codecs_v2/omx/omx_sharedlibrary/interface/src/pv_omx_interface.cpp
ANDROID_PATH/external/opencore/codecs_v2/omx/omx_core_plugins/template/src/pv_omx_interface.cpp
를 참조하면 라이브러리를 어떻게 사용하는지 알 수 있다.
반대로 구현측에서는 저러한 인터페이스를 만들어 주어야 한다는 소리이다~
기본 인터페이스는 PVGetInterface() / PVReleaseInterface() 이다.
즉, 오픈코어의 shared library는 위 메쏘드가 export 되어 있다는 소리다.
* MP3의 경우 mp3_dec.cpp / mp3_dec.h , omx_mp3_component.cpp / omx_mp3_component.h
로 구성하는데, mp3_dec 의 경우 디코더를 연동하기 위한 클래스이고,
Omx component는 OmxComponentAudio 혹은 OmxComponentVideo 클래스를 상속받은
OpenMax 연동 클래스가 된다.
* 디코더와 오픈맥스 컴포넌트는 모두 스택틱 빌드로 구성된다.
* ANDROID_PATH/external/opencore/codecs_v2/omx/omx_mp3/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
src/mp3_dec.cpp \
src/omx_mp3_component.cpp \
src/mp3_timestamp.cpp
LOCAL_MODULE := libomx_mp3_component_lib
LOCAL_CFLAGS := $(PV_CFLAGS)
LOCAL_ARM_MODE := arm
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_C_INCLUDES := \
$(PV_TOP)/codecs_v2/omx/omx_mp3/src \
$(PV_TOP)/codecs_v2/omx/omx_mp3/include \
$(PV_TOP)/extern_libs_v2/khronos/openmax/include \
$(PV_TOP)/codecs_v2/omx/omx_baseclass/include \
$(PV_TOP)/codecs_v2/audio/mp3/dec/src \
$(PV_TOP)/codecs_v2/audio/mp3/dec/include \
$(PV_INCLUDES)
LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
LOCAL_COPY_HEADERS := \
include/mp3_dec.h \
include/omx_mp3_component.h \
include/mp3_timestamp.h
include $(BUILD_STATIC_LIBRARY)
5. 위 두 라이브러리를 하나의 공유 라이브러리로 합친다.
안드로이드 공유라이브러리 설정 make 파일 작성.
ANDROID_PATH/external/opencore/build_config/opencore_dynamic/your_omx_decoder_sharedlibrary.mk
이곳에서 위에서 생성한 static 라이브러리를 합쳐 빌드하게 된다.
* mp3 의 경우를 살펴보면 각 라이브러리를 LOCAL_WHOLE_STATIC_LIBRARIES 에 추가하고,
별도의 shared library 를 만들고 있다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_WHOLE_STATIC_LIBRARIES := \
libomx_mp3_component_lib \
libpvmp3
LOCAL_MODULE := libomx_mp3dec_sharedlibrary
-include $(PV_TOP)/Android_platform_extras.mk
-include $(PV_TOP)/Android_system_extras.mk
LOCAL_SHARED_LIBRARIES += libomx_sharedlibrary libopencore_common
include $(BUILD_SHARED_LIBRARY)
include $(PV_TOP)/codecs_v2/omx/omx_mp3/Android.mk
include $(PV_TOP)/codecs_v2/audio/mp3/dec/Android.mk
6. 공유 라이브러리 등록
ANDROID_PATH/external/opencore/codecs_v2/omx/omx_common/src/pv_omxregistry.cpp
파일에 다른 코덱들을 참조해 등록 함수를 작성한다.
음....일단은 이렇다 -_-;;;
'프로그래밍 > Android' 카테고리의 다른 글
OpenGL 사용하기 (0) | 2010.06.27 |
---|---|
소켓통신 기본사항 (0) | 2010.06.11 |
OpenCore Codec 연동 (0) | 2010.03.27 |
GDB 기본환경 (0) | 2010.03.22 |
오픈코어 코덱 연동 시퀀스 (0) | 2010.03.18 |
안드로이드 플랫폼 포팅~holloworld 샘플 2 (0) | 2010.02.19 |
안드로이드 플랫폼 동적 링크 설정 (0) | 2010.02.19 |
안드로이드 플랫폼 HelloWorld (0) | 2010.02.18 |
Android system 폴더에 쓰기 (0) | 2010.02.08 |
에뮬레이터에서 data,system 디렉토리 가져오기 (0) | 2010.02.04 |