int32_t mm_jpeg_queue_init(mm_jpeg_queue_t* queue) { pthread_mutex_init(&queue->lock, NULL); cam_list_init(&queue->head.list); queue->size = 0; return 0; }
/*=========================================================================== * FUNCTION : QCameraQueue * * DESCRIPTION: constructor of QCameraQueue * * PARAMETERS : * @data_rel_fn : function ptr to release node data internal resource * @user_data : user data ptr * * RETURN : None *==========================================================================*/ QCameraQueue::QCameraQueue(release_data_fn data_rel_fn, void *user_data) { pthread_mutex_init(&m_lock, NULL); cam_list_init(&m_head.list); m_size = 0; m_dataFn = data_rel_fn; m_userData = user_data; }
/*=========================================================================== * FUNCTION : QCameraQueue * * DESCRIPTION: default constructor of QCameraQueue * * PARAMETERS : None * * RETURN : None *==========================================================================*/ QCameraQueue::QCameraQueue() { pthread_mutex_init(&m_lock, NULL); cam_list_init(&m_head.list); m_size = 0; m_dataFn = NULL; m_userData = NULL; }
/*=========================================================================== * FUNCTION - init_c2d_buffer - * * DESCRIPTION: allocate and register C2D buffer with kernel. *==========================================================================*/ static int init_c2d_buffer(config_ctrl_t *ctrl, struct msm_pmem_info *info, stereo_frame_t* pStereoFrame, int bufPath) { static int prevBufPath = -1; uint32_t frame_w = 0, frame_h = 0; uint32_t stride = 0; uint8_t pad_2K_bool = (ctrl->vfeCtrl.vfeMode == VFE_MODE_SNAPSHOT) ? FALSE : TRUE; if (prevBufPath == bufPath) { CDBG("%s: No need to create new C2D buffer\n", __func__); return TRUE; } else if (prevBufPath != -1) { CDBG("%s: Create new C2D buffer for bufPath = %d\n", __func__, bufPath); if (!release_c2d_buffer(ctrl, info)) CDBG_HIGH("%s: release_c2d_buffer failed\n", __func__); } if (pStereoFrame->non_zoom_upscale) { frame_w = pStereoFrame->right_pack_dim.orig_w; frame_h = pStereoFrame->right_pack_dim.orig_h; } else { frame_w = pStereoFrame->right_pack_dim.modified_w; frame_h = pStereoFrame->right_pack_dim.modified_h; } info->vaddr = (void *)do_mmap(PAD_2_2K(frame_w * frame_h, pad_2K_bool) * 3/2, &(info->fd)); if (!info->vaddr) { CDBG_ERROR("%s: mmap failed\n", __func__); return FALSE; } info->type = MSM_PMEM_C2D; info->y_off = 0; info->offset = 0; info->active = 0; info->cbcr_off = PAD_2_2K(frame_w * frame_h, pad_2K_bool); info->len = PAD_2_2K(frame_w * frame_h, pad_2K_bool); if (ioctl(ctrl->camfd, MSM_CAM_IOCTL_REGISTER_PMEM, info) < 0) { CDBG_ERROR("%s: ioctl MSM_CAM_IOCTL_REGISTER_PMEM is failed..\n", __func__); return FALSE; } if (!init_kgsl()) { CDBG_ERROR("%s: init_kgsl failed\n", __func__); return FALSE; } stride = frame_w; c2d_obj.dst_addr.vAddr0 = (uint32_t)info->vaddr; c2d_obj.dst_addr.gAddr0 = get_gpu_addr(info->fd, PAD_2_2K(frame_w * frame_h, pad_2K_bool) * 3/2, info->offset, (uint32_t)info->vaddr); c2d_obj.dst_addr.vAddr1 = c2d_obj.dst_addr.vAddr0 + PAD_2_2K(frame_w * frame_h, pad_2K_bool); c2d_obj.dst_addr.gAddr1 = c2d_obj.dst_addr.gAddr0 + PAD_2_2K(frame_w * frame_h, pad_2K_bool); cam_list_init(&(g_list.list)); add_gpu_addr_item(info->fd, c2d_obj.dst_addr.vAddr0, c2d_obj.dst_addr.gAddr0, c2d_obj.dst_addr.gAddr0); create_default_C2D_surface(&(c2d_obj.srcSurfaceDef), &(c2d_obj.src_id), C2D_SOURCE); create_default_C2D_surface(&(c2d_obj.dstSurfaceDef), &(c2d_obj.dst_id), C2D_TARGET); /* C2D destination surface values will not change. */ update_C2D_surface(&(c2d_obj.dstSurfaceDef), frame_w, frame_h, c2d_obj.dst_id, &(c2d_obj.dst_addr), stride, C2D_TARGET, c2d_format); prevBufPath = bufPath; return TRUE; } /* init_c2d_buffer */