int exynos_gsc_free_and_close(void *handle) { Exynos_gsc_In(); struct v4l2_requestbuffers reqbuf; struct v4l2_buffer buf; struct v4l2_plane planes[NUM_OF_GSC_PLANES]; int ret = 0; CGscaler* gsc = GetGscaler(handle); if (gsc == NULL) { ALOGE("%s::handle == NULL() fail", __func__); return -1; } #ifdef USES_SCALER if (gsc->gsc_id >= HW_SCAL0) { ret = exynos_sc_free_and_close(gsc->scaler); Exynos_gsc_Out(); return ret; } #endif memset(&reqbuf, 0, sizeof(struct v4l2_requestbuffers)); reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; reqbuf.memory = V4L2_MEMORY_DMABUF; reqbuf.count = 0; if (exynos_v4l2_reqbufs(gsc->mdev.gsc_vd_entity->fd, &reqbuf) < 0) { ALOGE("%s::request buffers failed", __func__); return -1; } close(gsc->mdev.gsc_sd_entity->fd); close(gsc->mdev.gsc_vd_entity->fd); gsc->mdev.gsc_sd_entity->fd = -1; gsc->mdev.gsc_vd_entity->fd = -1; exynos_gsc_destroy(gsc); Exynos_gsc_Out(); return 0; }
CSC_ERRORCODE csc_deinit( void *handle) { CSC_ERRORCODE ret = CSC_ErrorNone; CSC_HANDLE *csc_handle; csc_handle = (CSC_HANDLE *)handle; if (csc_handle->csc_hw_handle) { switch (csc_handle->csc_hw_type) { #ifdef ENABLE_FIMC case CSC_HW_TYPE_FIMC: csc_hwconverter_close(csc_handle->csc_hw_handle); break; #endif #ifdef ENABLE_GSCALER case CSC_HW_TYPE_GSCALER: exynos_gsc_destroy(csc_handle->csc_hw_handle); break; #endif #ifdef ENABLE_G2D case CSC_HW_TYPE_G2D: { g2d_data *g2d = (g2d_data *)csc_handle->csc_hw_handle; close(g2d->fd); free(g2d); break; } #endif default: ALOGE("%s:: unsupported csc_hw_type", __func__); break; } } if (csc_handle != NULL) { free(csc_handle); ret = CSC_ErrorNone; } return ret; }