16f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Copyright (c) 2012, The Linux Foundataion. All rights reserved. 2f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * 3f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * Redistribution and use in source and binary forms, with or without 4f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * modification, are permitted provided that the following conditions are 5f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * met: 6f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * * Redistributions of source code must retain the above copyright 7f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * notice, this list of conditions and the following disclaimer. 8f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * * Redistributions in binary form must reproduce the above 9f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * copyright notice, this list of conditions and the following 10f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * disclaimer in the documentation and/or other materials provided 11f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * with the distribution. 12b274848d051a4f2d5a9e7e3b152d26211c4b2e83Duy Truong * * Neither the name of The Linux Foundation nor the names of its 13f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * contributors may be used to endorse or promote products derived 14f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * from this software without specific prior written permission. 15f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * 16f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang * 28f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang */ 29f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#ifndef __QCAMERA_QUEUE_H__ 316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define __QCAMERA_QUEUE_H__ 32f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <pthread.h> 346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "cam_list.h" 35f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevnamespace qcamera { 37f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef void (*release_data_fn)(void* data, void *user_data); 396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef bool (*match_fn)(void *data, void *user_data); 40f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevclass QCameraQueue { 426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevpublic: 436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev QCameraQueue(); 446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev QCameraQueue(release_data_fn data_rel_fn, void *user_data); 456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev virtual ~QCameraQueue(); 466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool enqueue(void *data); 476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool enqueueWithPriority(void *data); 486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void flush(); 496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void flushNodes(match_fn match); 506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void* dequeue(bool bFromHead = true); 516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool isEmpty(); 526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevprivate: 536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev typedef struct { 546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev struct cam_list list; 556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void* data; 566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } camera_q_node; 57f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev camera_q_node m_head; // dummy head 596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int m_size; 606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_mutex_t m_lock; 616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev release_data_fn m_dataFn; 626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void * m_userData; 636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 64f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; // namespace qcamera 66f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang 676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#endif /* __QCAMERA_QUEUE_H__ */ 68