static void *v4l_thread(void *ptr){ V4lState *s=(V4lState*)ptr; int err=-1; ms_message("v4l_thread starting"); if (s->v4lv2){ #ifdef HAVE_LINUX_VIDEODEV2_H err=v4lv2_do_mmap(s); #endif }else{ err=v4l_do_mmap(s); } if (err<0){ ms_thread_exit(NULL); } while(s->run){ mblk_t *m; #ifdef HAVE_LINUX_VIDEODEV2_H if (s->v4lv2) m=v4lv2_grab_image(s); else #endif m=v4l_grab_image_mmap(s); if (m) { ms_mutex_lock(&s->mutex); putq(&s->rq,dupmsg(m)); ms_mutex_unlock(&s->mutex); } } v4l_do_munmap(s); ms_message("v4l_thread exited."); ms_thread_exit(NULL); }
static void *v4l_thread(void *ptr){ V4lState *s=(V4lState*)ptr; int err=-1; ms_message("v4l_thread starting"); if (s->v4lv2){ #ifdef HAVE_LINUX_VIDEODEV2_H err=v4lv2_do_mmap(s); #endif }else{ err=v4l_do_mmap(s); } if (err<0){ ms_thread_exit(NULL); } while(s->run){ mblk_t *m; #ifdef HAVE_LINUX_VIDEODEV2_H if (s->v4lv2) m=v4lv2_grab_image(s); else #endif m=v4l_grab_image_mmap(s); if (s->vsize.width!=s->got_vsize.width){ if (m){ /* mblock was allocated by crop or pad! */ ms_mutex_lock(&s->mutex); putq(&s->rq,m); ms_mutex_unlock(&s->mutex); }else{ ms_error("grabbing failed !"); } } else if (m!=NULL) { mblk_t *dm=dupmsg(m); ms_mutex_lock(&s->mutex); putq(&s->rq,dm); ms_mutex_unlock(&s->mutex); } } v4l_do_munmap(s); ms_message("v4l_thread exited."); ms_thread_exit(NULL); return NULL; }