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})
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}")
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
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)
%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}
#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);
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
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) {
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;
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);
{
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) {
handle->codec_resource = resource;
}
+#endif
int ret = mc_prepare(handle->mc_handle);
{
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);
} else {
LOGD("No codec resource to release. Probably resource release cb called\n");
}
+#endif
handle->state = MEDIACODEC_STATE_IDLE;
return MEDIACODEC_ERROR_NONE;
}
+#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)
{
mm_resource_manager_destroy(resource_manager);
g_ptr_array_unref(mediacodec_handles);
}
+#endif