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

Lines Matching full:stream

43 static void mm_camera_stream_util_set_state(mm_camera_stream_t *stream,
169 void mm_camera_stream_release(mm_camera_stream_t *stream)
171 mm_camera_stream_deinit_frame(&stream->frame);
172 if(stream->fd > 0) close(stream->fd);
173 memset(stream, 0, sizeof(*stream));
174 //stream->fd = -1;
175 mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_NOTUSED);
178 int mm_camera_stream_is_active(mm_camera_stream_t *stream)
180 return (stream->state == MM_CAMERA_STREAM_STATE_ACTIVE)? TRUE : FALSE;
183 static void mm_camera_stream_util_set_state(mm_camera_stream_t *stream,
186 CDBG("%s:stream fd=%d, stream type=%d, cur_state=%d,new_state=%d\n",
187 __func__, stream->fd, stream->stream_type, stream->state, state);
188 stream->state = state;
192 mm_camera_stream_t *stream)
203 vb.length = stream->fmt.fmt.pix_mp.num_planes;
206 rc = ioctl(stream->fd, VIDIOC_DQBUF, &vb);
214 stream->frame.frame[idx].planes[i].reserved[0] =
216 stream->frame.frame[idx].planes[i].data_offset =
220 stream->frame.frame[idx].frame.frame_id = vb.sequence;
221 stream->frame.frame[idx].frame.ts.tv_sec = vb.timestamp.tv_sec;
222 stream->frame.frame[idx].frame.ts.tv_nsec = vb.timestamp.tv_usec * 1000;
227 mm_camera_stream_t *stream,
234 rc = ioctl(stream->fd, VIDIOC_G_CROP, &crop);
334 static int mm_camera_stream_util_set_ext_mode(mm_camera_stream_t *stream)
339 switch(stream->stream_type) {
360 rc = ioctl(stream->fd, VIDIOC_S_PARM, &s_parm);
361 CDBG("%s:stream fd=%d,type=%d,rc=%d,extended_mode=%d\n",
362 __func__, stream->fd, stream->stream_type, rc,
381 int mm_camera_stream_qbuf(mm_camera_obj_t * my_obj, mm_camera_stream_t *stream,
392 buffer.m.planes = &(stream->frame.frame[idx].planes[0]);
393 buffer.length = stream->frame.frame[idx].num_planes;
399 stream->fd, stream->stream_type, idx, buffer.length);
401 rc = ioctl(stream->fd, VIDIOC_QBUF, &buffer);
403 CDBG_ERROR("%s: VIDIOC_QBUF error = %d, stream type=%d\n", __func__, rc, stream->stream_type);
406 CDBG("%s: X idx: %d, stream_type:%d", __func__, idx, stream->stream_type);
412 mm_camera_stream_t *stream,
429 rc = ioctl(stream->fd, VIDIOC_REQBUFS, &bufreq);
432 __func__, stream->fd, rc);
435 ALOGV("%s: stream fd=%d, ioctl VIDIOC_REQBUFS: memtype = %d, num_frames = %d, rc=%d\n",
436 __func__, stream->fd, bufreq.memory, bufreq.count, rc);
444 mm_camera_stream_t *stream,
461 __func__, stream->fd, stream->frame.frame[i].frame.fd,
462 idx, stream->frame.frame_offset[idx]);
463 rc = mm_camera_stream_qbuf(my_obj, stream, stream->frame.frame[idx].idx);
468 stream->frame.ref_count[idx] = 0;
471 stream->frame.qbuf = 1;
477 mm_camera_stream_t *stream,
493 switch(stream->stream_type) {
509 stream->frame.frame_len = mm_camera_get_msm_frame_len(stream->cam_fmt,
511 stream->fmt.fmt.pix.width,
512 stream->fmt.fmt.pix.height,
514 if(stream->frame.frame_len == 0) {
515 CDBG_ERROR("%s:incorrect frame size = %d\n", __func__, stream->frame.frame_len);
519 stream->frame.num_frame = vbuf->num;
520 bufreq.count = stream->frame.num_frame;
524 __func__,stream->fd, bufreq.count, bufreq.type, bufreq.memory);
525 rc = ioctl(stream
528 __func__, stream->fd, rc);
531 CDBG("%s: stream fd=%d, ioctl VIDIOC_REQBUFS: memtype = %d,"
532 "num_frames = %d, rc=%d\n", __func__, stream->fd, bufreq.memory,
536 vbuf->buf.mp[i].idx = i; /* remember the index to stream frame if first time qbuf */
537 memcpy(&stream->frame.frame[i].frame, &(vbuf->buf.mp[i].frame),
539 stream->frame.frame[i].idx = i;
540 stream->frame.frame[i].num_planes = vbuf->buf.mp[i].num_planes;
542 stream->frame.frame[i].planes[j] = vbuf->buf.mp[i].planes[j];
546 stream->frame.frame_offset[i] = vbuf->buf.mp[i].frame_offset;
548 stream->frame.frame_offset[i] = 0;
551 rc = mm_camera_stream_qbuf(my_obj, stream, stream->frame.frame[i].idx);
556 stream->frame.ref_count[i] = 0;
558 __func__, stream->fd, stream->frame.frame[i].frame.fd,
559 i, stream->frame.frame_offset[i]);
561 stream->frame.qbuf = 1;
566 mm_camera_stream_t *stream)
574 rc = ioctl(stream->fd, VIDIOC_REQBUFS, &bufreq);
577 __func__, stream->fd, rc);
580 mm_stream_frame_flash_q(&stream->frame.readyq);
581 memset(stream->frame.ref_count,0,(stream->frame.num_frame * sizeof(int8_t)));
582 stream->frame.qbuf = 0;
583 CDBG("%s:fd=%d,type=%d,rc=%d\n", __func__, stream->fd,
584 stream->stream_type, rc);
589 mm_camera_stream_t *stream,
598 CDBG("%s: open dev '%s', stream type = %d\n",
600 stream->fd = open(dev_name, O_RDWR | O_NONBLOCK);
601 if(stream->fd <= 0){
602 CDBG("%s: open dev returned %d\n", __func__, stream->fd);
605 stream->stream_type = *((mm_camera_stream_type_t *)val);
606 rc = mm_camera_stream_util_set_ext_mode(stream);
607 CDBG("%s: fd=%d, stream type=%d, mm_camera_stream_util_set_ext_mode() err=%d\n",
608 __func__, stream->fd, stream->stream_type, rc);
610 mm_camera_stream_init_frame(&stream->frame);
611 mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_ACQUIRED);
612 } else if(stream->fd > 0) {
613 close(stream->fd);
614 stream->fd = 0;
619 stream->state);
626 mm_camera_stream_t *stream,
644 stream->cam_fmt = fmt->fmt;
645 stream->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
646 stream->fmt.fmt.pix_mp.width = fmt->dim.width;
647 stream->fmt.fmt.pix_mp.height= fmt->dim.height;
648 stream->fmt.fmt.pix_mp.field = V4L2_FIELD_NONE;
649 stream->fmt.fmt.pix_mp.pixelformat =
650 mm_camera_util_get_v4l2_fmt(stream->cam_fmt,
651 &(stream->fmt.fmt.pix_mp.num_planes));
652 rc = ioctl(stream->fd, VIDIOC_S_FMT, &stream->fmt);
659 __func__, stream->fd, stream->stream_type, rc);
663 mm_camera_stream_t *stream,
670 rc = mm_camera_stream_util_proc_fmt(my_obj,stream,
672 if(!rc) mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_CFG);
675 mm_camera_stream_release(stream);
678 rc = mm_camera_stream_util_proc_get_crop(my_obj,stream, val);
682 stream->state);
688 mm_camera_stream_t *stream,
694 mm_camera_stream_release(stream);
697 rc = mm_camera_stream_util_proc_fmt(my_obj,stream,
701 rc = mm_camera_stream_util_reg_buf(my_obj, stream, (mm_camera_buf_def_t *)val);
702 if(!rc) mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_REG);
705 rc = mm_camera_stream_util_proc_get_crop(my_obj,stream, val);
708 rc = mm_camera_stream_util_request_buf(my_obj, stream, ((mm_camera_buf_def_t *)val)->num);
711 rc = mm_camera_stream_util_enqueue_buf(my_obj, stream, (mm_camera_buf_def_t *)val);
712 if(!rc) mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_REG);
716 stream->state);
723 mm_camera_stream_t *stream,
727 pthread_mutex_lock(&stream->frame.mutex);
729 if(stream->frame.ref_count[frame->idx] == 0) {
730 rc = mm_camera_stream_qbuf(my_obj, stream, frame->idx);
731 CDBG_ERROR("%s: Error Trying to free second time?(idx=%d) count=%d, stream type=%d\n",
732 __func__, frame->idx, stream->frame.ref_count[frame->idx], stream->stream_type);
735 stream->frame.ref_count[frame->idx]--;
736 if(0 == stream->frame.ref_count[frame->idx]) {
737 CDBG("<DEBUG> : Buf done for buffer:%p:%d",stream,frame->idx);
738 rc = mm_camera_stream_qbuf(my_obj, stream, frame->idx);
743 CDBG("<DEBUG> : Still ref count pending count :%d",stream->frame.ref_count[frame->idx]);
744 CDBG("<DEBUG> : for buffer:%p:%d, stream type=%d",stream,frame->idx, stream->stream_type);
749 stream->frame.ref_count[frame->idx]--;
750 if(stream->frame.ref_count[frame->idx] == 0) {
752 __func__, frame->idx, stream->frame.ref_count[frame->idx],
754 rc = mm_camera_stream_qbuf(my_obj, stream, frame->idx);
758 } else if(stream->frame.ref_count[frame->idx] == 1) {
759 ALOGE("<DEBUG> : Buf done for buffer:%p:%d",stream,frame->idx);
760 rc = mm_camera_stream_qbuf(my_obj, stream, frame->idx);
766 __func__, frame->idx, stream->frame.ref_count[frame->idx]);
770 pthread_mutex_unlock(&stream->frame.mutex);
775 mm_camera_stream_t *stream,
781 rc = mm_camera_stream_util_proc_get_crop(my_obj,stream, val);
786 mm_camera_stream_release(stream);
789 rc = mm_camera_stream_util_unreg_buf(my_obj, stream);
791 mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_CFG);
798 if(stream->frame.qbuf == 0) {
799 for(i = 0; i < stream->frame.num_frame; i++) {
800 rc = mm_camera_stream_qbuf(my_obj, stream,
801 stream->frame.frame[i].idx);
803 CDBG_ERROR("%s: ioctl VIDIOC_QBUF error=%d, stream->type=%d\n",
804 __func__, rc, stream->stream_type);
807 stream->frame.ref_count[i] = 0;
809 stream->frame.qbuf = 1;
813 __func__, stream->fd, stream->stream_type);
814 rc = ioctl(stream->fd, VIDIOC_STREAMON, &buf_type);
820 mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_ACTIVE);
824 rc = mm_camera_stream_util_enqueue_buf(my_obj, stream, (mm_camera_buf_def_t *)val);
828 stream->state);
834 mm_camera_stream_t *stream,
840 rc = mm_camera_stream_util_proc_get_crop(my_obj,stream, val);
843 rc = mm_camera_stream_util_buf_done(my_obj, stream,
847 mm_camera_stream_release(stream);
853 __func__, stream->fd, stream->stream_type);
854 rc = ioctl(stream->fd, VIDIOC_STREAMOFF, &buf_type);
860 stream->frame.qbuf = 0;
861 mm_camera_stream_util_set_state(stream, MM_CAMERA_STREAM_STATE_REG);
866 rc = mm_camera_stream_util_enqueue_buf(my_obj, stream, (mm_camera_buf_def_t *)val);
870 stream->state);
877 mm_camera_stream_t *stream,
888 mm_camera_stream_t *stream,
891 CDBG("%s: stream fd=%d, type = %d, state=%d, evt\n",
892 __func__, stream->fd, stream->stream_type, stream->state, evt);
893 return mm_camera_stream_fsm_fn[stream->state] (my_obj, stream, evt, val);