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