videodev.c
来自「omap3 linux 2.6 用nocc去除了冗余代码」· C语言 代码 · 共 2,112 行 · 第 1/4 页
C
2,112 行
ret=vfd->vidioc_try_fmt_vbi_output(file, fh, f); break; case V4L2_BUF_TYPE_PRIVATE: if (vfd->vidioc_try_fmt_type_private) ret=vfd->vidioc_try_fmt_type_private(file, fh, f); break; } break; } /* FIXME: Those buf reqs could be handled here, with some changes on videobuf to allow its header to be included at videodev2.h or being merged at videodev2. */ case VIDIOC_REQBUFS: { struct v4l2_requestbuffers *p=arg; if (!vfd->vidioc_reqbufs) break; ret = check_fmt (vfd, p->type); if (ret) break; ret=vfd->vidioc_reqbufs(file, fh, p); dbgarg (cmd, "count=%d, type=%s, memory=%s\n", p->count, prt_names(p->type, v4l2_type_names), prt_names(p->memory, v4l2_memory_names)); break; } case VIDIOC_QUERYBUF: { struct v4l2_buffer *p=arg; if (!vfd->vidioc_querybuf) break; ret = check_fmt (vfd, p->type); if (ret) break; ret=vfd->vidioc_querybuf(file, fh, p); if (!ret) dbgbuf(cmd,vfd,p); break; } case VIDIOC_QBUF: { struct v4l2_buffer *p=arg; if (!vfd->vidioc_qbuf) break; ret = check_fmt (vfd, p->type); if (ret) break; ret=vfd->vidioc_qbuf(file, fh, p); if (!ret) dbgbuf(cmd,vfd,p); break; } case VIDIOC_DQBUF: { struct v4l2_buffer *p=arg; if (!vfd->vidioc_dqbuf) break; ret = check_fmt (vfd, p->type); if (ret) break; ret=vfd->vidioc_dqbuf(file, fh, p); if (!ret) dbgbuf(cmd,vfd,p); break; } case VIDIOC_OVERLAY: { int *i = arg; if (!vfd->vidioc_overlay) break; dbgarg (cmd, "value=%d\n",*i); ret=vfd->vidioc_overlay(file, fh, *i); break; } case VIDIOC_G_FBUF: { struct v4l2_framebuffer *p=arg; if (!vfd->vidioc_g_fbuf) break; ret=vfd->vidioc_g_fbuf(file, fh, arg); if (!ret) { dbgarg (cmd, "capability=%d, flags=%d, base=0x%08lx\n", p->capability,p->flags, (unsigned long)p->base); v4l_print_pix_fmt (vfd, &p->fmt); } break; } case VIDIOC_S_FBUF: { struct v4l2_framebuffer *p=arg; if (!vfd->vidioc_s_fbuf) break; dbgarg (cmd, "capability=%d, flags=%d, base=0x%08lx\n", p->capability,p->flags,(unsigned long)p->base); v4l_print_pix_fmt (vfd, &p->fmt); ret=vfd->vidioc_s_fbuf(file, fh, arg); break; } case VIDIOC_STREAMON: { enum v4l2_buf_type i = *(int *)arg; if (!vfd->vidioc_streamon) break; dbgarg(cmd, "type=%s\n", prt_names(i, v4l2_type_names)); ret=vfd->vidioc_streamon(file, fh,i); break; } case VIDIOC_STREAMOFF: { enum v4l2_buf_type i = *(int *)arg; if (!vfd->vidioc_streamoff) break; dbgarg(cmd, "type=%s\n", prt_names(i, v4l2_type_names)); ret=vfd->vidioc_streamoff(file, fh, i); break; } /* ---------- tv norms ---------- */ case VIDIOC_ENUMSTD: { struct v4l2_standard *p = arg; v4l2_std_id id = vfd->tvnorms,curr_id=0; unsigned int index = p->index,i; if (index<0) { ret=-EINVAL; break; } /* Return norm array on a canonical way */ for (i=0;i<= index && id; i++) { if ( (id & V4L2_STD_PAL) == V4L2_STD_PAL) { curr_id = V4L2_STD_PAL; } else if ( (id & V4L2_STD_PAL_BG) == V4L2_STD_PAL_BG) { curr_id = V4L2_STD_PAL_BG; } else if ( (id & V4L2_STD_PAL_DK) == V4L2_STD_PAL_DK) { curr_id = V4L2_STD_PAL_DK; } else if ( (id & V4L2_STD_PAL_B) == V4L2_STD_PAL_B) { curr_id = V4L2_STD_PAL_B; } else if ( (id & V4L2_STD_PAL_B1) == V4L2_STD_PAL_B1) { curr_id = V4L2_STD_PAL_B1; } else if ( (id & V4L2_STD_PAL_G) == V4L2_STD_PAL_G) { curr_id = V4L2_STD_PAL_G; } else if ( (id & V4L2_STD_PAL_H) == V4L2_STD_PAL_H) { curr_id = V4L2_STD_PAL_H; } else if ( (id & V4L2_STD_PAL_I) == V4L2_STD_PAL_I) { curr_id = V4L2_STD_PAL_I; } else if ( (id & V4L2_STD_PAL_D) == V4L2_STD_PAL_D) { curr_id = V4L2_STD_PAL_D; } else if ( (id & V4L2_STD_PAL_D1) == V4L2_STD_PAL_D1) { curr_id = V4L2_STD_PAL_D1; } else if ( (id & V4L2_STD_PAL_K) == V4L2_STD_PAL_K) { curr_id = V4L2_STD_PAL_K; } else if ( (id & V4L2_STD_PAL_M) == V4L2_STD_PAL_M) { curr_id = V4L2_STD_PAL_M; } else if ( (id & V4L2_STD_PAL_N) == V4L2_STD_PAL_N) { curr_id = V4L2_STD_PAL_N; } else if ( (id & V4L2_STD_PAL_Nc) == V4L2_STD_PAL_Nc) { curr_id = V4L2_STD_PAL_Nc; } else if ( (id & V4L2_STD_PAL_60) == V4L2_STD_PAL_60) { curr_id = V4L2_STD_PAL_60; } else if ( (id & V4L2_STD_NTSC) == V4L2_STD_NTSC) { curr_id = V4L2_STD_NTSC; } else if ( (id & V4L2_STD_NTSC_M) == V4L2_STD_NTSC_M) { curr_id = V4L2_STD_NTSC_M; } else if ( (id & V4L2_STD_NTSC_M_JP) == V4L2_STD_NTSC_M_JP) { curr_id = V4L2_STD_NTSC_M_JP; } else if ( (id & V4L2_STD_NTSC_443) == V4L2_STD_NTSC_443) { curr_id = V4L2_STD_NTSC_443; } else if ( (id & V4L2_STD_NTSC_M_KR) == V4L2_STD_NTSC_M_KR) { curr_id = V4L2_STD_NTSC_M_KR; } else if ( (id & V4L2_STD_SECAM) == V4L2_STD_SECAM) { curr_id = V4L2_STD_SECAM; } else if ( (id & V4L2_STD_SECAM_DK) == V4L2_STD_SECAM_DK) { curr_id = V4L2_STD_SECAM_DK; } else if ( (id & V4L2_STD_SECAM_B) == V4L2_STD_SECAM_B) { curr_id = V4L2_STD_SECAM_B; } else if ( (id & V4L2_STD_SECAM_D) == V4L2_STD_SECAM_D) { curr_id = V4L2_STD_SECAM_D; } else if ( (id & V4L2_STD_SECAM_G) == V4L2_STD_SECAM_G) { curr_id = V4L2_STD_SECAM_G; } else if ( (id & V4L2_STD_SECAM_H) == V4L2_STD_SECAM_H) { curr_id = V4L2_STD_SECAM_H; } else if ( (id & V4L2_STD_SECAM_K) == V4L2_STD_SECAM_K) { curr_id = V4L2_STD_SECAM_K; } else if ( (id & V4L2_STD_SECAM_K1) == V4L2_STD_SECAM_K1) { curr_id = V4L2_STD_SECAM_K1; } else if ( (id & V4L2_STD_SECAM_L) == V4L2_STD_SECAM_L) { curr_id = V4L2_STD_SECAM_L; } else if ( (id & V4L2_STD_SECAM_LC) == V4L2_STD_SECAM_LC) { curr_id = V4L2_STD_SECAM_LC; } else { break; } id &= ~curr_id; } if (i<=index) return -EINVAL; v4l2_video_std_construct(p, curr_id,v4l2_norm_to_name(curr_id)); p->index = index; dbgarg (cmd, "index=%d, id=%Ld, name=%s, fps=%d/%d, " "framelines=%d\n", p->index, (unsigned long long)p->id, p->name, p->frameperiod.numerator, p->frameperiod.denominator, p->framelines); ret=0; break; } case VIDIOC_G_STD: { v4l2_std_id *id = arg; *id = vfd->current_norm; dbgarg (cmd, "value=%08Lx\n", (long long unsigned) *id); ret=0; break; } case VIDIOC_S_STD: { v4l2_std_id *id = arg,norm; dbgarg (cmd, "value=%08Lx\n", (long long unsigned) *id); norm = (*id) & vfd->tvnorms; if ( vfd->tvnorms && !norm) /* Check if std is supported */ break; /* Calls the specific handler */ if (vfd->vidioc_s_std) ret=vfd->vidioc_s_std(file, fh, &norm); else ret=-EINVAL; /* Updates standard information */ if (ret>=0) vfd->current_norm=norm; break; } case VIDIOC_QUERYSTD: { v4l2_std_id *p=arg; if (!vfd->vidioc_querystd) break; ret=vfd->vidioc_querystd(file, fh, arg); if (!ret) dbgarg (cmd, "detected std=%08Lx\n", (unsigned long long)*p); break; } /* ------ input switching ---------- */ /* FIXME: Inputs can be handled inside videodev2 */ case VIDIOC_ENUMINPUT: { struct v4l2_input *p=arg; int i=p->index; if (!vfd->vidioc_enum_input) break; memset(p, 0, sizeof(*p)); p->index=i; ret=vfd->vidioc_enum_input(file, fh, p); if (!ret) dbgarg (cmd, "index=%d, name=%s, type=%d, " "audioset=%d, " "tuner=%d, std=%08Lx, status=%d\n", p->index,p->name,p->type,p->audioset, p->tuner, (unsigned long long)p->std, p->status); break; } case VIDIOC_G_INPUT: { unsigned int *i = arg; if (!vfd->vidioc_g_input) break; ret=vfd->vidioc_g_input(file, fh, i); if (!ret) dbgarg (cmd, "value=%d\n",*i); break; } case VIDIOC_S_INPUT: { unsigned int *i = arg; if (!vfd->vidioc_s_input) break; dbgarg (cmd, "value=%d\n",*i); ret=vfd->vidioc_s_input(file, fh, *i); break; } /* ------ output switching ---------- */ case VIDIOC_G_OUTPUT: { unsigned int *i = arg; if (!vfd->vidioc_g_output) break; ret=vfd->vidioc_g_output(file, fh, i); if (!ret) dbgarg (cmd, "value=%d\n",*i); break; } case VIDIOC_S_OUTPUT: { unsigned int *i = arg; if (!vfd->vidioc_s_output) break; dbgarg (cmd, "value=%d\n",*i); ret=vfd->vidioc_s_output(file, fh, *i); break; } /* --- controls ---------------------------------------------- */ case VIDIOC_QUERYCTRL: { struct v4l2_queryctrl *p=arg; if (!vfd->vidioc_queryctrl) break; ret=vfd->vidioc_queryctrl(file, fh, p); if (!ret) dbgarg (cmd, "id=%d, type=%d, name=%s, " "min/max=%d/%d," " step=%d, default=%d, flags=0x%08x\n", p->id,p->type,p->name,p->minimum, p->maximum,p->step,p->default_value, p->flags); break; } case VIDIOC_G_CTRL: { struct v4l2_control *p = arg; if (!vfd->vidioc_g_ctrl) break; dbgarg(cmd, "Enum for index=%d\n", p->id); ret=vfd->vidioc_g_ctrl(file, fh, p); if (!ret) dbgarg2 ( "id=%d, value=%d\n", p->id, p->value); break; } case VIDIOC_S_CTRL: { struct v4l2_control *p = arg; if (!vfd->vidioc_s_ctrl) break; dbgarg (cmd, "id=%d, value=%d\n", p->id, p->value); ret=vfd->vidioc_s_ctrl(file, fh, p); break; } case VIDIOC_G_EXT_CTRLS: { struct v4l2_ext_controls *p = arg; if (vfd->vidioc_g_ext_ctrls) { dbgarg(cmd, "count=%d\n", p->count); ret=vfd->vidioc_g_ext_ctrls(file, fh, p); } break; } case VIDIOC_S_EXT_CTRLS: { struct v4l2_ext_controls *p = arg; if (vfd->vidioc_s_ext_ctrls) { dbgarg(cmd, "count=%d\n", p->count); ret=vfd->vidioc_s_ext_ctrls(file, fh, p); } break; } case VIDIOC_TRY_EXT_CTRLS: { struct v4l2_ext_controls *p = arg; if (vfd->vidioc_try_ext_ctrls) { dbgarg(cmd, "count=%d\n", p->count); ret=vfd->vidioc_try_ext_ctrls(file, fh, p); } break; } case VIDIOC_QUERYMENU: { struct v4l2_querymenu *p=arg; if (!vfd->vidioc_querymenu) break; ret=vfd->vidioc_querymenu(file, fh, p); if (!ret) dbgarg (cmd, "id=%d, index=%d, name=%s\n", p->id,p->index,p->name); break; } /* --- audio ---------------------------------------------- */ case VIDIOC_ENUMAUDIO: { struct v4l2_audio *p=arg; if (!vfd->vidioc_enumaudio) break; dbgarg(cmd, "Enum for index=%d\n", p->index); ret=vfd->vidioc_enumaudio(file, fh, p); if (!ret) dbgarg2("index=%d, name=%s, capability=%d, " "mode=%d\n",p->index,p->name, p->capability, p->mode); break; } case VIDIOC_G_AUDIO: { struct v4l2_audio *p=arg; __u32 index=p->index; if (!vfd->vidioc_g_audio) break; memset(p,0,sizeof(*p)); p->index=index; dbgarg(cmd, "Get for index=%d\n", p->index); ret=vfd->vidioc_g_audio(file, fh, p); if (!ret) dbgarg2("index=%d, name=%s, capability=%d, " "mode=%d\n",p->index, p->name,p->capability, p->mode); break; } case VIDIOC_S_AUDIO: { struct v4l2_audio *p=arg; if (!vfd->vidioc_s_audio) break; dbgarg(cmd, "index=%d, name=%s, capability=%d, " "mode=%d\n", p->index, p->name, p->capability, p->mode); ret=vfd->vidioc_s_audio(file, fh, p); break; } case VIDIOC_ENUMAUDOUT: { struct v4l2_audioout *p=arg; if (!vfd->vidioc_enumaudout) break; dbgarg(cmd, "Enum for index=%d\n", p->index); ret=vfd->vidioc_enumaudout(file, fh, p); if (!ret) dbgarg2("index=%d, name=%s, capability=%d, " "mode=%d\n", p->index, p->name, p->capability,p->mode); break; } case VIDIOC_G_AUDOUT: { struct v4l2_audioout *p=arg; if (!vfd->vidioc_g_audout) break; dbgarg(cmd, "Enum for index=%d\n", p->index); ret=vfd->vidioc_g_audout(file, fh, p); if (!ret) dbgarg2("index=%d, name=%s, capability=%d, " "mode=%d\n", p->index, p->name, p->capability,p->mode); break; } case VIDIOC_S_AUDOUT: { struct v4l2_audioout *p=arg; if (!vfd->vidioc_s_audout) break; dbgarg(cmd, "index=%d, name=%s, capability=%d, " "mode=%d\n", p->index, p->name, p->capability,p->mode); ret=vfd->vidioc_s_audout(file, fh, p); break; } case VIDIOC_G_MODULATOR: { struct v4l2_modulator *p=arg; if (!vfd->vidioc_g_modulator) break; ret=vfd->vidioc_g_modulator(file, fh, p); if (!ret) dbgarg(cmd, "index=%d, name=%s, " "capability=%d, rangelow=%d," " rangehigh=%d, txsubchans=%d\n", p->index, p->name,p->capability, p->rangelow, p->rangehigh, p->txsubchans); break; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?