xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/xcore/xcam_thread.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * xcam_thread.h - Thread
3  *
4  *  Copyright (c) 2014 Intel Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * Author: Wind Yuan <feng.yuan@intel.com>
19  */
20 
21 #ifndef XCAM_THREAD_H
22 #define XCAM_THREAD_H
23 
24 #include <xcam_std.h>
25 #include <xcam_mutex.h>
26 
27 namespace XCam {
28 
29 class Thread {
30 public:
31     Thread (const char *name = NULL);
32     virtual ~Thread ();
33 
34     bool start ();
35     virtual bool emit_stop ();
36     bool stop ();
37     bool is_running ();
get_name()38     const char *get_name () const {
39         return _name ? "noname" : _name;
40     }
41 
42     // set the policy/priority of scheduling before creating thread
set_policy(int policy)43     void set_policy(int policy) {
44         _policy = policy;
45     }
set_priority(int priority)46     void set_priority(int priority) {
47         _priority = priority;
48     }
49 
50 protected:
51     // return true to start loop, else the thread stopped
52     virtual bool started ();
53     virtual void stopped ();
54     // return true to continue; false to stop
55     virtual bool loop () = 0;
56 private:
57     XCAM_DEAD_COPY (Thread);
58 
59 
60 private:
61     static void* thread_func (void *user_data);
62 
63 private:
64     char           *_name;
65     pthread_t       _thread_id;
66     XCam::Mutex     _mutex;
67     XCam::Cond      _exit_cond;
68     bool            _started;
69     bool            _stopped;
70     int             _policy;
71     int             _priority;
72 };
73 
74 }
75 
76 #endif //XCAM_THREAD_H
77