/*===========================================================================
 * FUNCTION   : enqueue
 *
 * DESCRIPTION: enqueue data into the queue
 *
 * PARAMETERS :
 *   @data    : data to be enqueued
 *
 * RETURN     : true -- success; false -- failed
 *==========================================================================*/
bool QCameraQueue::enqueue(void *data)
{
    bool rc;
    camera_q_node *node =
        (camera_q_node *)malloc(sizeof(camera_q_node));
    if (NULL == node) {
        ALOGE("%s: No memory for camera_q_node", __func__);
        return false;
    }

    memset(node, 0, sizeof(camera_q_node));
    node->data = data;

    pthread_mutex_lock(&m_lock);
    if (m_active) {
        cam_list_add_tail_node(&node->list, &m_head.list);
        m_size++;
        rc = true;
    } else {
        free(node);
        rc = false;
    }
    pthread_mutex_unlock(&m_lock);
    return rc;
}
Esempio n. 2
0
/*===========================================================================
 * FUNCTION    - add_gpu_addr_item -
 *
 * DESCRIPTION:  Add pmem buffer and matching gpu address entry into list.
 *==========================================================================*/
static void add_gpu_addr_item(int fd, uint32_t vAddr, uint32_t gpuAddr,
  uint32_t origGpuAddr)
{
  gpu_addr_list_t *entry;
  entry = (gpu_addr_list_t *)malloc(sizeof(gpu_addr_list_t));
  if (!entry) {
    CDBG_ERROR("%s: malloc error\n", __func__);
    exit(1);
  }

  entry->data.fd = fd;
  entry->data.vAddr = vAddr;
  entry->data.gpuAddr = gpuAddr;
  entry->data.origGpuAddr = origGpuAddr;

  cam_list_add_tail_node(&(entry->list), &(g_list.list));

  CDBG("%s: entry fd = %d, vAddr = 0x%x, gAddr = 0x%x\n", __func__,
    entry->data.fd, entry->data.vAddr, entry->data.gpuAddr);
} /* add_gpu_addr_item */
int32_t mm_jpeg_queue_enq(mm_jpeg_queue_t* queue, void* data)
{
    mm_jpeg_q_node_t* node = 
        (mm_jpeg_q_node_t *)malloc(sizeof(mm_jpeg_q_node_t));
    if (NULL == node) {
        CDBG_ERROR("%s: No memory for mm_jpeg_q_node_t", __func__);
        return -1;
    }

    memset(node, 0, sizeof(mm_jpeg_q_node_t));
    node->data = data;

    pthread_mutex_lock(&queue->lock);
    cam_list_add_tail_node(&node->list, &queue->head.list);
    queue->size++;
    pthread_mutex_unlock(&queue->lock);

    return 0;

}