static void CloseDecoder(decoder_t *dec) { decoder_sys_t *sys = dec->p_sys; MMAL_BUFFER_HEADER_T *buffer; if (!sys) return; if (sys->component && sys->component->control->is_enabled) mmal_port_disable(sys->component->control); if (sys->input && sys->input->is_enabled) mmal_port_disable(sys->input); if (sys->output && sys->output->is_enabled) mmal_port_disable(sys->output); if (sys->component && sys->component->is_enabled) mmal_component_disable(sys->component); if (sys->input_pool) mmal_pool_destroy(sys->input_pool); if (sys->output_format) mmal_format_free(sys->output_format); /* Free pictures which are decoded but have not yet been sent * out to the core */ while ((buffer = mmal_queue_get(sys->decoded_pictures))) { picture_t *pic = (picture_t *)buffer->user_data; picture_Release(pic); if (sys->output_pool) { buffer->user_data = NULL; buffer->alloc_size = 0; buffer->data = NULL; mmal_buffer_header_release(buffer); } } if (sys->decoded_pictures) mmal_queue_destroy(sys->decoded_pictures); if (sys->output_pool) mmal_pool_destroy(sys->output_pool); if (sys->component) mmal_component_release(sys->component); vlc_mutex_destroy(&sys->mutex); vlc_sem_destroy(&sys->sem); free(sys); bcm_host_deinit(); }
static void Close(vlc_object_t *object) { vout_display_t *vd = (vout_display_t *)object; vout_display_sys_t *sys = vd->sys; char response[20]; /* answer is hvs_update_fields=%1d */ unsigned i; vc_tv_unregister_callback_full(tvservice_cb, vd); if (sys->dmx_handle) close_dmx(vd); if (sys->component && sys->component->control->is_enabled) mmal_port_disable(sys->component->control); if (sys->input && sys->input->is_enabled) mmal_port_disable(sys->input); if (sys->component && sys->component->is_enabled) mmal_component_disable(sys->component); if (sys->pool) mmal_pool_destroy(sys->pool); if (sys->component) mmal_component_release(sys->component); if (sys->picture_pool) picture_pool_Release(sys->picture_pool); else for (i = 0; i < sys->num_buffers; ++i) if (sys->pictures[i]) picture_Release(sys->pictures[i]); vlc_mutex_destroy(&sys->buffer_mutex); vlc_cond_destroy(&sys->buffer_cond); vlc_mutex_destroy(&sys->manage_mutex); if (sys->native_interlaced) { if (vc_gencmd(response, sizeof(response), "hvs_update_fields 0") < 0 || response[18] != '0') msg_Warn(vd, "Could not reset hvs field mode"); } free(sys->pictures); free(sys); bcm_host_deinit(); }
void CMMALRenderer::UnInitMMAL() { CSingleLock lock(m_sharedSection); CLog::Log(LOGDEBUG, "%s::%s pool(%p)", CLASSNAME, __func__, m_vout_input_pool); if (m_queue) { StopThread(true); mmal_queue_destroy(m_queue); m_queue = nullptr; } if (m_vout) { mmal_component_disable(m_vout); } if (m_vout_input) { mmal_port_flush(m_vout_input); mmal_port_disable(m_vout_input); } ReleaseBuffers(); if (m_vout_input_pool) { mmal_port_pool_destroy(m_vout_input, m_vout_input_pool); m_vout_input_pool = NULL; } m_vout_input = NULL; if (m_vout) { mmal_component_release(m_vout); m_vout = NULL; } m_src_rect.SetRect(0, 0, 0, 0); m_dst_rect.SetRect(0, 0, 0, 0); m_video_stereo_mode = RENDER_STEREO_MODE_OFF; m_display_stereo_mode = RENDER_STEREO_MODE_OFF; m_StereoInvert = false; m_format = RENDER_FMT_NONE; m_bConfigured = false; m_bMMALConfigured = false; }
static void Close(filter_t *filter) { filter_sys_t *sys = filter->p_sys; MMAL_BUFFER_HEADER_T *buffer; if (!sys) return; if (sys->component && sys->component->control->is_enabled) mmal_port_disable(sys->component->control); if (sys->input && sys->input->is_enabled) mmal_port_disable(sys->input); if (sys->output && sys->output->is_enabled) mmal_port_disable(sys->output); if (sys->component && sys->component->is_enabled) mmal_component_disable(sys->component); while ((buffer = mmal_queue_get(sys->filtered_pictures))) { picture_t *pic = (picture_t *)buffer->user_data; picture_Release(pic); } if (sys->filtered_pictures) mmal_queue_destroy(sys->filtered_pictures); if (sys->component) mmal_component_release(sys->component); vlc_mutex_destroy(&sys->mutex); vlc_mutex_destroy(&sys->buffer_cond_mutex); vlc_cond_destroy(&sys->buffer_cond); free(sys); bcm_host_deinit(); }