void g_omx_core_deinit (GOmxCore *core) { if (!core->imp) return; core_for_each_port (core, g_omx_port_free); g_ptr_array_clear (core->ports); if (core->omx_state == OMX_StateLoaded || core->omx_state == OMX_StateInvalid) { if (core->omx_handle) { #ifdef USE_STATIC core->omx_error = OMX_FreeHandle (core->omx_handle); #else core->omx_error = core->imp->sym_table.free_handle (core->omx_handle); #endif GST_DEBUG_OBJECT (core->object, "OMX_FreeHandle(%p) -> %s", core->omx_handle, g_omx_error_to_str (core->omx_error)); core->omx_handle = NULL; } } g_omx_release_imp (core->imp); core->imp = NULL; }
static void g_ptr_array_clear_r(GPtrArray *array){ int i; for(i = 0; i < array->len; i++){ if(array->pdata[i]) g_ptr_array_clear(array->pdata[i]); } g_ptr_array_free(array, TRUE); }
void g_omx_core_finish (GOmxCore *core) { change_state (core, OMX_StateIdle); wait_for_state (core, OMX_StateIdle); change_state (core, OMX_StateLoaded); { guint index; guint i; for (index = 0; index < core->ports->len; index++) { GOmxPort *port; port = g_omx_core_get_port (core, index); for (i = 0; i < port->num_buffers; i++) { OMX_BUFFERHEADERTYPE *omx_buffer; omx_buffer = port->buffers[i]; g_free (omx_buffer->pBuffer); OMX_FreeBuffer (core->omx_handle, index, omx_buffer); } } } wait_for_state (core, OMX_StateLoaded); { gint index; for (index = 0; index < core->ports->len; index++) { GOmxPort *port; port = g_omx_core_get_port (core, index); g_omx_port_free (port); } g_ptr_array_clear (core->ports); } }
void g_omx_core_unload (GOmxCore *core) { if (core->omx_state == OMX_StateIdle || core->omx_state == OMX_StateWaitForResources || core->omx_state == OMX_StateInvalid) { if (core->omx_state != OMX_StateInvalid) change_state (core, OMX_StateLoaded); core_for_each_port (core, port_free_buffers); if (core->omx_state != OMX_StateInvalid) wait_for_state (core, OMX_StateLoaded); } core_for_each_port (core, g_omx_port_free); g_ptr_array_clear (core->ports); }
static GPtrArray *create_row(PyObject *item){ assert(item); GPtrArray *row = g_ptr_array_new(); if(!row) return NULL; int i; for(i = 0; i < PySequence_Size(item); i++){ PyObject *elem = PySequence_GetItem(item, i); if(!elem) goto failed; PyObject *elem_str = PyObject_Str(elem); Py_DECREF(elem); if(!elem_str) goto failed; g_ptr_array_add(row, g_strdup(PyString_AsString(elem_str))); Py_DECREF(elem_str); } return row; failed: g_ptr_array_clear(row); return NULL; }