#include <tbm_type.h>
#include <stdint.h>
-#include <tizen_error.h>
-
-/* this define will be removed when the capi-common is the version 0.1.1 */
-#ifndef TIZEN_ERROR_TBM
-#define TIZEN_ERROR_TBM -0x02830000
+/* tbm error base : this error base is same as TIZEN_ERROR_TBM in tizen_error.h */
+#ifndef TBM_ERROR_BASE
+#define TBM_ERROR_BASE -0x02830000
#endif
/**
/**
* @brief Definition for the tizen buffer manager
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef struct _tbm_bufmgr * tbm_bufmgr;
/**
* @brief Definition for the tizen buffer object
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef struct _tbm_bo *tbm_bo;
/**
* @brief Definition for the key associated with the buffer object
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef uint32_t tbm_key;
/**
* @brief Definition for the file descripter of the system buffer manager
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef int32_t tbm_fd;
/**
* @brief Definition for the device type to get the default handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_DEVICE_DEFAULT 0
/**
* @brief Definition for the device type to get the virtual memory
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_DEVICE_CPU 1
/**
* @brief Definition for the device type to get the 2D memory handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_DEVICE_2D 2
/**
* @brief Definition for the device type to get the 3D memory handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_DEVICE_3D 3
/**
* @brief Definition for the device type to get the multimedia handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_DEVICE_MM 4
/**
* @brief Definition for the cache invalidate
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_CACHE_INV 0x01
/**
* @brief Definition for the cache clean
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_CACHE_CLN 0x02
/**
* @brief Definition for the access option to read
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_OPTION_READ (1 << 0)
/**
* @brief Definition for the access option to write
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_OPTION_WRITE (1 << 1)
/**
* @brief Definition for the vendor specific option that depends on the backend
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
#define TBM_OPTION_VENDOR (0xffff0000)
/**
* @brief tbm_bo_handle abstraction of the memory handle by TBM_DEVICE_TYPE
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef union _tbm_bo_handle
{
/**
* @brief Enumeration of bo memory type
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
enum TBM_BO_FLAGS
{
*/
typedef enum
{
- TBM_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */
- TBM_ERROR_BO_LOCK_FAILED = TIZEN_ERROR_TBM|0x0101, /**< tbm_bo lock failed */
- TBM_ERROR_BO_MAP_FAILED = TIZEN_ERROR_TBM|0x0102, /**< tbm_bo map failed */
+ TBM_ERROR_NONE = 0, /**< Successful */
+ TBM_BO_ERROR_GET_FD_FAILED = TBM_ERROR_BASE|0x0101, /**< failed to get fd failed */
+ TBM_BO_ERROR_HEAP_ALLOC_FAILED = TBM_ERROR_BASE|0x0102, /**< failed to allocate the heap memory */
+ TBM_BO_ERROR_LOAD_MODULE_FAILED = TBM_ERROR_BASE|0x0103, /**< failed to load module*/
+ TBM_BO_ERROR_THREAD_INIT_FAILED = TBM_ERROR_BASE|0x0104, /**< failed to initialize the pthread */
+ TBM_BO_ERROR_BO_ALLOC_FAILED = TBM_ERROR_BASE|0x0105, /**< failed to allocate tbm_bo */
+ TBM_BO_ERROR_INIT_STATE_FAILED = TBM_ERROR_BASE|0x0106, /**< failed to initialize the state of tbm_bo */
+ TBM_BO_ERROR_IMPORT_FAILED = TBM_ERROR_BASE|0x0107, /**< failed to import the handle of tbm_bo */
+ TBM_BO_ERROR_IMPORT_FD_FAILED = TBM_ERROR_BASE|0x0108, /**< failed to import fd of tbm_bo */
+ TBM_BO_ERROR_EXPORT_FAILED = TBM_ERROR_BASE|0x0109, /**< failed to export the handle of the tbm_bo */
+ TBM_BO_ERROR_EXPORT_FD_FAILED = TBM_ERROR_BASE|0x01010, /**< failed to export fd of tbm_bo */
+ TBM_BO_ERROR_GET_HANDLE_FAILED = TBM_ERROR_BASE|0x0111, /**< failed to get the tbm_bo_handle */
+ TBM_BO_ERROR_LOCK_FAILED = TBM_ERROR_BASE|0x0112, /**< failed to lock the tbm_bo */
+ TBM_BO_ERROR_MAP_FAILED = TBM_ERROR_BASE|0x0113, /**< failed to map the tbm_bo to get the tbm_bo_handle */
+ TBM_BO_ERROR_UNMAP_FAILED = TBM_ERROR_BASE|0x0114, /**< failed to unmap the tbm_bo */
+ TBM_BO_ERROR_SWAP_FAILED = TBM_ERROR_BASE|0x0115, /**< failed to swap the tbm_bos */
+ TBM_BO_ERROR_DUP_FD_FAILED = TBM_ERROR_BASE|0x0116, /**< failed to duplicate fd */
} tbm_error_e;
+/**
+ * @brief Enumeration of tbm buffer manager capability.
+ * @since_tizen 2.4
+ */
+enum TBM_BUFMGR_CAPABILITY
+{
+ TBM_BUFMGR_CAPABILITY_NONE = 0, /**< Not Support capability*/
+ TBM_BUFMGR_CAPABILITY_SHARE_KEY = (1<<0), /**< Support sharing buffer by tbm key */
+ TBM_BUFMGR_CAPABILITY_SHARE_FD = (1<<1), /**< Support sharing buffer by tbm fd */
+};
#ifdef __cplusplus
extern "C" {
* BUFMGR_MAP_CACHE default is true\n
* true : use map cache flushing\n
* false : to use map cache flushing
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] fd : file descripter of the system buffer manager
* @return a buffer manager
* @retval #tbm_bufmgr
/**
* @brief Deinitializes the buffer manager.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bufmgr : the buffer manager
* @see tbm_bufmgr_init()
* @par Example
int bufmgr_fd;
tbm_bufmgr bufmgr;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
+ if (!bufmgr)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
....
* #TBM_BO_NONCACHABLE indecates non-cachable memory\n
* #TBM_BO_WC indecates write-combine memory\n
* #TBM_BO_VENDOR indecates vendor specific memory: it depends on the tbm backend
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bufmgr : the buffer manager
* @param[in] size : the size of buffer object
* @param[in] flags : the flags of memory type
int bufmgr_fd;
tbm_bufmgr bufmgr;
tbm_bo;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
+ if (!bo)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
....
/**
* @brief Increases the reference count of bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @return a buffer object
* @retval #tbm_bo
/**
* @brief Decreases the reference count of bo
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @see tbm_bo_ref()
* @see tbm_bo_alloc()
* #TBM_OPTION_READ indecates the accss option to read.\n
* #TBM_OPTION_WRITE indecates the access option to write.\n
* #TBM_OPTION_VENDOR indecates the vendor specific option that depends on the backend.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] device : the device type to get a handle
* @param[in] opt : the option to access the buffer object
handle = tbm_bo_map (bo, TBM_DEVICE_2D, TBM_OPTION_READ|TBM_OPTION_WRITE);
if (handle.ptr == NULL)
{
- error = get_last_result ();
+ error = tbm_get_last_error ();
...
}
/**
* @brief Unmaps the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @return 1 if this function succeeds, otherwise 0.
* @see tbm_bo_map()
* #TBM_DEVICE_3D indecates the 3D memory handle.\n
* #TBM_DEVICE_CPU indecates the virtual memory handle.\n
* #TBM_DEVICE_MM indecates the multimedia handle.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] device : the device type to get a handle
* @return the handle of the buffer object
tbm_bufmgr bufmgr;
tbm_bo bo;
tbm_bo_handle handle;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
...
handle = tbm_bo_get_handle (bo, TBM_DEVICE_2D);
+ if (handle.ptr == NULL)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Exports the buffer object by key.
* @details The tbm_bo can be exported to the anther process with the unique key associated with the the tbm_bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @return key associated with the buffer object
* @retval #tbm_key
tbm_bufmgr bufmgr;
tbm_bo;
tbm_key key;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
key = tbm_bo_export (bo);
+ if (key == 0)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Exports the buffer object by fd.
* @details The tbm_bo can be exported to the anther process with the unique fd associated with the the tbm_bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You must release the fd using close().
* @param[in] bo : the buffer object
* @return fd associated with the buffer object
* @retval #tbm_fd
tbm_fd bo_fd;
tbm_bufmgr bufmgr;
tbm_bo;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
bo_fd = tbm_bo_export (bo);
+ if (bo_fd == 0)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Imports the buffer object associated with the key.
* @details The reference count of the tbm_bo is 1.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bufmgr : the buffer manager
* @param[in] key : the key associated with the buffer object
* @return a buffer object
int bo_key;
tbm_bufmgr bufmgr;
tbm_bo;
+ tbm_error_e error;
...
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo = tbm_bo_import (key);
+ if (bo == NULL)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Imports the buffer object associated with the fd.
* @details The reference count of the tbm_bo is 1.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You must release the fd using close().
* @param[in] bufmgr : the buffer manager
* @param[in] fd : the fd associated with the buffer object
* @return a buffer object
tbm_fd bo_fd;
tbm_bufmgr bufmgr;
tbm_bo bo;
+ tbm_error_e error;
...
bufmgr = tbm_bufmgr_init (bufmgr_fd);
- bo = tbm_bo_import_fd (bo_fd);
+ bo_fd = tbm_bo_import_fd (bo_fd);
+ if (bo_fd == 0)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Gets the size of a bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @return 1 if this function succeeds, otherwise 0.
* @see tbm_bo_alloc()
/**
* @brief Gets the state where the buffer object is locked.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @return 1 if this bo is locked, otherwise 0.
* @see tbm_bo_map()
/**
* @brief Swaps the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo1 : the buffer object
* @param[in] bo2 : the buffer object
* @return 1 if this function succeeds, otherwise 0.
tbm_bo bo1;
tbm_bo bo2;
int ret;
+ tbm_error_e error;
bufmgr = tbm_bufmgr_init (bufmgr_fd);
bo1 = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
...
ret = tbm_bo_swap (bo1, bo2);
+ if (ret == 0)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
...
/**
* @brief Called when the user data is deleted in buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] user_data User_data to be passed to callback function
* @pre The callback must be registered using tbm_bo_add_user_data().\n
* tbm_bo_delete_user_data() must be called to invoke this callback.
/**
* @brief Adds a user_data to the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] key : the key associated with the user_data
* @param[in] data_free_func : the function pointer to free the user_data
/**
* @brief Deletes the user_data in the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] key : the key associated with the user_date
* @return 1 if this function succeeds, otherwise 0.
/**
* @brief Sets a user_date to the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] key : the key associated with the user_date
* @param[in] data : a pointer of the user_data
/**
* @brief Gets a user_data from the buffer object with the key.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @param[in] bo : the buffer object
* @param[in] key : the key associated with the user_date
* @param[out] data : to get the user data
*/
int tbm_bo_get_user_data (tbm_bo bo, unsigned long key, void** data);
+/**
+ * @brief Gets the latest tbm_error.
+ * @since_tizen 2.4
+ * @return the latest tbm_error
+ * @par Example
+ @code
+ #include <tbm_bufmgr.h>
+
+ int bufmgr_fd;
+ tbm_bufmgr bufmgr;
+ tbm_bo bo;
+ tbm_bo_handle handle;
+ tbm_error_e error;
+
+ bufmgr = tbm_bufmgr_init (bufmgr_fd);
+ bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
+ if (!bo)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
+
+ ...
+
+ handle = tbm_bo_map (bo, TBM_DEVICE_2D, TBM_OPTION_READ|TBM_OPTION_WRITE);
+ if (handle.ptr == NULL)
+ {
+ error = tbm_get_last_error ();
+ ...
+ }
+
+ ...
+
+ tbm_bo_unmap (bo);
+ tbm_bo_unref (bo);
+ tbm_bufmgr_deinit (bufmgr);
+ @endcode
+ */
+tbm_error_e tbm_get_last_error (void);
+
+/**
+ * @brief Gets the tbm buffer capability.
+ * @since_tizen 2.4
+ * @param[in] bufmgr : the buffer manager
+ * @return the tbm bufmgr capability
+ * @par Example
+ @code
+ #include <tbm_bufmgr.h>
+
+ int bufmgr_fd;
+ tbm_bufmgr bufmgr;
+ unsigned int capability;
+
+ bufmgr = tbm_bufmgr_init (bufmgr_fd);
+
+ capability = tbm_bufmgr_get_capability (bufmgr);
+
+ tbm_bufmgr_deinit (bufmgr);
+ @endcode
+ */
+unsigned int tbm_bufmgr_get_capability (tbm_bufmgr bufmgr);
+
#ifdef __cplusplus
}
#endif