From: Hyuntae Kim Date: Tue, 22 Oct 2019 04:26:46 +0000 (+0900) Subject: [mediacodec] disable mm-resource-manager when tv profile X-Git-Tag: submit/tizen_5.5/20191118.104043^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cb529a4c40b7cc5746448c63d60b4b82799d29e0;p=platform%2Fcore%2Fapi%2Fmediacodec.git [mediacodec] disable mm-resource-manager when tv profile Change-Id: Iec9caf6101ff01c2247f2caf4bfe6289e5453bd3 --- diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100755 new mode 100644 index 217ee07..b073bc8 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,11 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(INC_DIR include) INCLUDE_DIRECTORIES(${INC_DIR}) -SET(dependents "dlog glib-2.0 mm-common libtbm capi-media-tool iniparser gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0 capi-system-info mm-resource-manager gstreamer-allocators-1.0" ) -SET(pc_dependents "capi-base-common capi-media-tool gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0 mm-resource-manager gstreamer-allocators-1.0" ) +SET(dependents "dlog glib-2.0 mm-common libtbm capi-media-tool iniparser gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0 capi-system-info gstreamer-allocators-1.0" ) +SET(pc_dependents "capi-base-common capi-media-tool gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0 gstreamer-allocators-1.0" ) +IF(TIZEN_FEATURE_MM_RESOURCE_MANAGER) +SET(dependents "${dependents} mm-resource-manager") +ENDIF(TIZEN_FEATURE_MM_RESOURCE_MANAGER) INCLUDE(FindPkgConfig) pkg_check_modules(${fw_name} REQUIRED ${dependents}) @@ -28,6 +31,9 @@ ENDIF("${ARCH}" STREQUAL "arm") ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") ADD_DEFINITIONS("-DTIZEN_DEBUG") +IF(TIZEN_FEATURE_MM_RESOURCE_MANAGER) +ADD_DEFINITIONS("-DUSE_MM_RESOURCE_MANAGER") +ENDIF(TIZEN_FEATURE_MM_RESOURCE_MANAGER) SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}") diff --git a/include/media_codec_private.h b/include/media_codec_private.h index 0057fa0..bc196ec 100644 --- a/include/media_codec_private.h +++ b/include/media_codec_private.h @@ -24,7 +24,9 @@ #include #include +#ifdef USE_MM_RESOURCE_MANAGER #include +#endif #ifdef __cplusplus extern "C" { @@ -101,7 +103,9 @@ typedef struct _mediacodec_s { int state; bool is_omx; char *m_mime; +#ifdef USE_MM_RESOURCE_MANAGER mm_resource_manager_res_h codec_resource; +#endif mediacodec_input_buffer_used_cb empty_buffer_cb; void* empty_buffer_cb_userdata; diff --git a/packaging/capi-media-codec.spec b/packaging/capi-media-codec.spec old mode 100755 new mode 100644 index cc14806..311c106 --- a/packaging/capi-media-codec.spec +++ b/packaging/capi-media-codec.spec @@ -4,7 +4,7 @@ Name: capi-media-codec Summary: A Media Codec library in Tizen Native API -Version: 0.6.3 +Version: 0.6.4 Release: 0 Group: Multimedia/API License: Apache-2.0 @@ -21,7 +21,9 @@ BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) BuildRequires: pkgconfig(gstreamer-app-1.0) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(iniparser) +%if "%{tizen_profile_name}" != "tv" BuildRequires: pkgconfig(mm-resource-manager) +%endif #BuildRequires: pkgconfig(capi-media-camera) #BuildRequires: pkgconfig(capi-mediademuxer) #BuildRequires: pkgconfig(capi-mediamuxer) @@ -63,8 +65,12 @@ export LDFLAGS+=" -lgcov" %endif MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` -%cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER} - +%cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER} \ +%if "%{tizen_profile_name}" == "tv" + -DTIZEN_FEATURE_MM_RESOURCE_MANAGER=NO +%else + -DTIZEN_FEATURE_MM_RESOURCE_MANAGER=YES +%endif make %{?jobs:-j%jobs} diff --git a/src/media_codec.c b/src/media_codec.c index b76269a..88e12d8 100644 --- a/src/media_codec.c +++ b/src/media_codec.c @@ -26,9 +26,11 @@ #define MC_PREALLOCATED_HANDLE_ARRAY_SIZE 16 +#ifdef USE_MM_RESOURCE_MANAGER static mm_resource_manager_h resource_manager; static GPtrArray *mediacodec_handles; static GMutex mediacodec_handles_lock; +#endif static gboolean __mediacodec_empty_buffer_cb(media_packet_h pkt, void *user_data); static gboolean __mediacodec_fill_buffer_cb(media_packet_h pkt, void *user_data); @@ -36,10 +38,12 @@ static gboolean __mediacodec_error_cb(mediacodec_error_e error, void *user_data) static gboolean __mediacodec_eos_cb(void *user_data); static gboolean __mediacodec_supported_codec_cb(mediacodec_codec_type_e codec_type, void *user_data); static gboolean __mediacodec_buffer_status_cb(mediacodec_status_e status, void *user_data); +#ifdef USE_MM_RESOURCE_MANAGER static void __mediacodec_init_lib() __attribute__((constructor)); static void __mediacodec_deinit_lib() __attribute__((destructor)); static int __mediacodec_resource_release_cb(mm_resource_manager_h rm, mm_resource_manager_res_h resource_h, void *user_data); +#endif /* * Internal Implementation @@ -131,8 +135,10 @@ int mediacodec_create(mediacodec_h *mediacodec) LOGD("mediacodec_create.."); +#ifdef USE_MM_RESOURCE_MANAGER if (resource_manager == NULL) return MEDIACODEC_ERROR_INTERNAL; +#endif handle = (mediacodec_s *)malloc(sizeof(mediacodec_s)); if (handle != NULL) { @@ -164,9 +170,11 @@ int mediacodec_create(mediacodec_h *mediacodec) mc_set_buffer_status_cb(handle->mc_handle, (mediacodec_buffer_status_cb)__mediacodec_buffer_status_cb, handle); mc_set_supported_codec_cb(handle->mc_handle, (mediacodec_supported_codec_cb)__mediacodec_supported_codec_cb, handle); +#ifdef USE_MM_RESOURCE_MANAGER g_mutex_lock(&mediacodec_handles_lock); g_ptr_array_insert(mediacodec_handles, -1, *mediacodec); g_mutex_unlock(&mediacodec_handles_lock); +#endif return MEDIACODEC_ERROR_NONE; @@ -183,9 +191,11 @@ int mediacodec_destroy(mediacodec_h mediacodec) LOGD("MEDIACODEC_ERROR_INVALID_OPERATION(0x%08x)", MEDIACODEC_ERROR_INVALID_OPERATION); return MEDIACODEC_ERROR_INVALID_OPERATION; } else { +#ifdef USE_MM_RESOURCE_MANAGER g_mutex_lock(&mediacodec_handles_lock); g_ptr_array_remove_fast(mediacodec_handles, mediacodec); g_mutex_unlock(&mediacodec_handles_lock); +#endif handle->state = MEDIACODEC_STATE_NONE; free(handle); @@ -294,11 +304,14 @@ int mediacodec_prepare(mediacodec_h mediacodec) { MEDIACODEC_INSTANCE_CHECK(mediacodec); mediacodec_s *handle = (mediacodec_s *)mediacodec; +#ifdef USE_MM_RESOURCE_MANAGER mc_handle_t *mc_handle = (mc_handle_t *) handle->mc_handle; int rm_ret = MM_RESOURCE_MANAGER_ERROR_NONE; mm_resource_manager_res_h resource; +#endif MEDIACODEC_STATE_CHECK(handle, MEDIACODEC_STATE_IDLE); +#ifdef USE_MM_RESOURCE_MANAGER if (mc_handle->is_hw && mc_handle->is_video) { if (handle->codec_resource) { @@ -345,6 +358,7 @@ int mediacodec_prepare(mediacodec_h mediacodec) handle->codec_resource = resource; } +#endif int ret = mc_prepare(handle->mc_handle); @@ -360,13 +374,16 @@ int mediacodec_unprepare(mediacodec_h mediacodec) { MEDIACODEC_INSTANCE_CHECK(mediacodec); mediacodec_s *handle = (mediacodec_s *)mediacodec; +#ifdef USE_MM_RESOURCE_MANAGER int rm_ret = MM_RESOURCE_MANAGER_ERROR_NONE; +#endif int ret = mc_unprepare(handle->mc_handle); if (ret != MEDIACODEC_ERROR_NONE) { return __convert_error_code(ret, (char *)__FUNCTION__); } else { +#ifdef USE_MM_RESOURCE_MANAGER if (handle->codec_resource != NULL) { mm_resource_manager_mark_for_release(resource_manager, handle->codec_resource); @@ -384,6 +401,7 @@ int mediacodec_unprepare(mediacodec_h mediacodec) } else { LOGD("No codec resource to release. Probably resource release cb called\n"); } +#endif handle->state = MEDIACODEC_STATE_IDLE; return MEDIACODEC_ERROR_NONE; @@ -689,6 +707,7 @@ static gboolean __mediacodec_buffer_status_cb(mediacodec_status_e status, void * } +#ifdef USE_MM_RESOURCE_MANAGER static int __mediacodec_resource_release_cb(mm_resource_manager_h rm, mm_resource_manager_res_h resource_h, void *user_data) { @@ -734,3 +753,4 @@ static void __mediacodec_deinit_lib() mm_resource_manager_destroy(resource_manager); g_ptr_array_unref(mediacodec_handles); } +#endif