Home | History | Annotate | Download | only in mm-camera-interface

Lines Matching defs:poll_cb

68 static int32_t mm_camera_poll_sig(mm_camera_poll_thread_t *poll_cb,
79 pthread_mutex_lock(&poll_cb->mutex);
81 poll_cb->status = FALSE;
83 len = write(poll_cb->data.pfds[1], &cmd_evt, sizeof(cmd_evt));
86 //pthread_mutex_unlock(&poll_cb->mutex);
91 while (!poll_cb->status) {
97 rc = pthread_cond_timedwait(&poll_cb->cond_v, &poll_cb->mutex, &ts);
104 pthread_mutex_unlock(&poll_cb->mutex);
109 static void mm_camera_poll_sig_done(mm_camera_poll_thread_t *poll_cb)
111 pthread_mutex_lock(&poll_cb->mutex);
112 poll_cb->status = TRUE;
113 pthread_cond_signal(&poll_cb->cond_v);
115 pthread_mutex_unlock(&poll_cb->mutex);
118 static int32_t mm_camera_poll_proc_msm(mm_camera_poll_thread_t *poll_cb, struct pollfd *fds)
122 for(i = 0; i < poll_cb->data.num_fds-1; i++) {
124 if((poll_cb->data.poll_type == MM_CAMERA_POLL_TYPE_CH) &&
127 if(poll_cb->data.used) {
128 mm_camera_msm_data_notify(poll_cb->data.my_obj,
130 poll_cb->data.poll_streams[i]->stream_type);
135 if((poll_cb->data.poll_type == MM_CAMERA_POLL_TYPE_EVT) &&
138 mm_camera_msm_evt_notify(poll_cb->data.my_obj, fds[i].fd);
145 static void cm_camera_poll_set_state(mm_camera_poll_thread_t *poll_cb,
148 poll_cb->data.state = state;
151 static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb)
156 read_len = read(poll_cb->data.pfds[0], &cmd_evt, sizeof(cmd_evt));
158 __func__, poll_cb->data.pfds[0], (int)read_len, (int)sizeof(cmd_evt));
161 mm_camera_dispatch_buffered_frames(poll_cb->data.my_obj,
162 poll_cb->data.ch_type);
168 mm_camera_dispatch_app_event(poll_cb->data.my_obj, event);
172 if(poll_cb->data.poll_type == MM_CAMERA_POLL_TYPE_CH) {
174 if(poll_cb->data.poll_streams[i]) {
175 poll_cb->data.poll_fd[poll_cb->data.num_fds + i] = poll_cb->data.poll_streams[i]->fd;
179 poll_cb->data.num_fds += mm_camera_ch_util_get_num_stream(poll_cb->data.my_obj,
180 poll_cb->data.ch_type);
181 poll_cb->data.used = 1;
182 CDBG("Num fds after MM_CAMERA_PIPE_CMD_ADD_CH = %d",poll_cb->data.num_fds);
186 poll_cb->data.num_fds -= mm_camera_ch_util_get_num_stream(poll_cb->data.my_obj,
187 poll_cb->data.ch_type);
188 poll_cb->data.used = 0;
189 CDBG("Num fds after MM_CAMERA_PIPE_CMD_DEL_CH = %d",poll_cb->data.num_fds);
194 cm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_MAX);
195 mm_camera_poll_sig_done(poll_cb);
204 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
205 pthread_mutex_lock(&poll_cb->mutex);
206 used = poll_cb->data.used;
207 pthread_mutex_unlock(&poll_cb->mutex);
215 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
221 pthread_mutex_lock(&poll_cb->mutex);
222 len = write(poll_cb->data.pfds[1], &cmd, sizeof(cmd));
223 pthread_mutex_unlock(&poll_cb->mutex);
230 mm_camera_poll_thread_t *poll_cb;
240 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[MM_CAMERA_CH_MAX];
247 __func__, event->event_type, event->e.ch.ch, event->e.ch.evt, poll_cb->data.poll_type,
248 poll_cb->data.pfds[0], poll_cb->data.pfds[1]);
249 pthread_mutex_lock(&poll_cb->mutex);
250 len = write(poll_cb->data.pfds[1], &cmd, sizeof(cmd));
251 pthread_mutex_unlock(&poll_cb->mutex);
255 static void *mm_camera_poll_fn(mm_camera_poll_thread_t *poll_cb)
261 __func__, poll_cb->data.poll_type, poll_cb->data.num_fds);
263 for(i = 0; i < poll_cb->data.num_fds; i++) {
264 fds[i].fd = poll_cb->data.poll_fd[i];
267 timeoutms = poll_cb->data.timeoutms;
268 rc = poll(fds, poll_cb->data.num_fds, timeoutms);
271 mm_camera_poll_proc_pipe(poll_cb);
273 mm_camera_poll_proc_msm(poll_cb, &fds[1]);
279 } while (poll_cb->data.state == MM_CAMERA_POLL_TASK_STATE_POLL);
288 mm_camera_poll_thread_t *poll_cb = data;
290 poll_cb->data.poll_fd[poll_cb->data.num_fds++] = poll_cb->data.pfds[0];
291 switch(poll_cb->data.poll_type) {
293 poll_cb->data.poll_fd[poll_cb->data.num_fds++] =
294 ((mm_camera_obj_t *)(poll_cb->data.my_obj))->ctrl_fd;
300 mm_camera_poll_sig_done(poll_cb);
301 ret = mm_camera_poll_fn(poll_cb);
305 int mm_camera_poll_start(mm_camera_obj_t * my_obj, mm_camera_poll_thread_t *poll_cb)
307 pthread_mutex_lock(&poll_cb->mutex);
308 poll_cb->status = 0;
309 pthread_create(&poll_cb->data.pid, NULL, mm_camera_poll_thread, (void *)poll_cb);
310 while (!poll_cb->status) {
316 rc = pthread_cond_timedwait(&poll_cb->cond_v, &poll_cb->mutex, &ts);
322 pthread_mutex_unlock(&poll_cb->mutex);
326 int mm_camera_poll_stop(mm_camera_obj_t * my_obj, mm_camera_poll_thread_t *poll_cb)
329 mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_EXIT);
330 if (pthread_join(poll_cb->data.pid, NULL) != 0) {
339 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
343 if(poll_cb->data.used == 1){
349 poll_cb->data.ch_type = ch_type;
351 pthread_mutex_lock(&poll_cb->mutex);
352 len = write(poll_cb->data.pfds[1], &cmd, sizeof(cmd));
353 pthread_mutex_unlock(&poll_cb->mutex);
354 poll_cb->data.used = 1;
360 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
364 if(poll_cb->data.used == 0){
370 poll_cb->data.ch_type = (mm_camera_channel_type_t)ch_type;
372 pthread_mutex_lock(&poll_cb->mutex);
373 len = write(poll_cb->data.pfds[1], &cmd, sizeof(cmd));
374 pthread_mutex_unlock(&poll_cb->mutex);
375 poll_cb->data.used = 0;
384 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
390 poll_cb->data.ch_type = ch_type;
391 rc = pipe(poll_cb->data.pfds);
397 __func__, ch_type, poll_cb->data.poll_type,
398 poll_cb->data.pfds[0], poll_cb->data.pfds[1]);
399 poll_cb->data.my_obj = my_obj;
400 poll_cb->data.used = 0;
401 poll_cb->data.timeoutms = -1; /* Infinite seconds */
404 poll_cb->data.poll_type = MM_CAMERA_POLL_TYPE_CH;
406 &poll_cb->data.poll_streams[0],
407 &poll_cb->data.poll_streams[1]);
409 poll_cb->data.poll_type = MM_CAMERA_POLL_TYPE_EVT;
413 __func__, ch_type, poll_cb->data.poll_type,
414 poll_cb->data.pfds[0], poll_cb->data.pfds[1]);
416 rc = mm_camera_poll_start(my_obj, poll_cb);
423 mm_camera_poll_thread_t *poll_cb = &my_obj->poll_threads[ch_type];
424 if(MM_CAMERA_POLL_TASK_STATE_MAX == poll_cb->data.state) {
429 rc = mm_camera_poll_stop(my_obj, poll_cb);
431 if(poll_cb->data.pfds[0]) {
432 close(poll_cb->data.pfds[0]);
434 if(poll_cb->data.pfds[1]) {
435 close(poll_cb->data.pfds[1]);
437 memset(&poll_cb->data, 0, sizeof(poll_cb->data));
444 mm_camera_poll_thread_t *poll_cb;
447 poll_cb = &my_obj->poll_threads[i];
448 pthread_mutex_init(&poll_cb->mutex, NULL);
449 pthread_cond_init(&poll_cb->cond_v, NULL);
456 mm_camera_poll_thread_t *poll_cb;
459 poll_cb = &my_obj->poll_threads[i];
460 if(poll_cb->data.used)
461 mm_camera_poll_stop(my_obj, poll_cb);
462 pthread_mutex_destroy(&poll_cb->mutex);
463 pthread_cond_destroy(&poll_cb->cond_v);
464 memset(poll_cb, 0, sizeof(mm_camera_poll_thread_t));