Q1: 1. go to your linux kernel source driver/media/video directory. 2. ls *v4l* and u can see all the v4l related kernel sources. 3. one of these is v4l2-ioctl.c which implement the interface when userspace program makes an ioctl() call. 4. all the parameters that userspace ioctl() can pass in are defined in, for eg:
/* debug help functions */ static const char *v4l2_ioctls[] = { [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP", [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED", [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT", [_IOC_NR(VIDIOC_G_FMT)] = "VIDIOC_G_FMT", [_IOC_NR(VIDIOC_S_FMT)] = "VIDIOC_S_FMT", [_IOC_NR(VIDIOC_REQBUFS)] = "VIDIOC_REQBUFS", [_IOC_NR(VIDIOC_QUERYBUF)] = "VIDIOC_QUERYBUF", [_IOC_NR(VIDIOC_G_FBUF)] = "VIDIOC_G_FBUF", [_IOC_NR(VIDIOC_S_FBUF)] = "VIDIOC_S_FBUF", [_IOC_NR(VIDIOC_OVERLAY)] = "VIDIOC_OVERLAY", [_IOC_NR(VIDIOC_QBUF)] = "VIDIOC_QBUF", [_IOC_NR(VIDIOC_DQBUF)] = "VIDIOC_DQBUF", [_IOC_NR(VIDIOC_STREAMON)] = "VIDIOC_STREAMON", [_IOC_NR(VIDIOC_STREAMOFF)] = "VIDIOC_STREAMOFF", [_IOC_NR(VIDIOC_G_PARM)] = "VIDIOC_G_PARM", [_IOC_NR(VIDIOC_S_PARM)] = "VIDIOC_S_PARM", [_IOC_NR(VIDIOC_G_STD)] = "VIDIOC_G_STD", [_IOC_NR(VIDIOC_S_STD)] = "VIDIOC_S_STD", [_IOC_NR(VIDIOC_ENUMSTD)] = "VIDIOC_ENUMSTD", [_IOC_NR(VIDIOC_ENUMINPUT)] = "VIDIOC_ENUMINPUT", [_IOC_NR(VIDIOC_G_CTRL)] = "VIDIOC_G_CTRL", [_IOC_NR(VIDIOC_S_CTRL)] = "VIDIOC_S_CTRL", [_IOC_NR(VIDIOC_G_TUNER)] = "VIDIOC_G_TUNER", [_IOC_NR(VIDIOC_S_TUNER)] = "VIDIOC_S_TUNER", [_IOC_NR(VIDIOC_G_AUDIO)] = "VIDIOC_G_AUDIO", [_IOC_NR(VIDIOC_S_AUDIO)] = "VIDIOC_S_AUDIO", etc etc. and for eg, the first item in the list - the userspace example are: http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-querycap.html (or more generally, http://linuxtv.org/downloads/v4l-dvb-apis/) and another example is the v4l libraries: libv4l-dev and the whole series of V4L2 articles (kernel) is here: http://lwn.net/Articles/203924/ (your interests in ioctl() is here: http://lwn.net/Articles/206765/) and here (kernel+userspace): http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Intro-to-V4L2/ and this (userspace): http://linuxtv.org/wiki/index.php/V4L2_Userspace_Library and your question on buffer management in the kernel: http://lwn.net/Articles/363349/ which also contains the answer to your question (NO, it is not the generic layer for ALL devices - only some radio + video + dvb devices). Q2: dont quite understand u, but definitely capture and output buffer are different, and memcpy operation can happened independently. in videobuf2-core.c are defined all the core buffer operation: EXPORT_SYMBOL(vb2_querybuf); EXPORT_SYMBOL_GPL(vb2_reqbufs); EXPORT_SYMBOL_GPL(vb2_create_bufs); EXPORT_SYMBOL_GPL(vb2_plane_vaddr); EXPORT_SYMBOL_GPL(vb2_plane_cookie); EXPORT_SYMBOL_GPL(vb2_buffer_done); EXPORT_SYMBOL_GPL(vb2_prepare_buf); EXPORT_SYMBOL_GPL(vb2_qbuf); EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers); EXPORT_SYMBOL_GPL(vb2_dqbuf); EXPORT_SYMBOL_GPL(vb2_streamon); EXPORT_SYMBOL_GPL(vb2_streamoff); EXPORT_SYMBOL_GPL(vb2_mmap); EXPORT_SYMBOL_GPL(vb2_get_unmapped_area); EXPORT_SYMBOL_GPL(vb2_poll); EXPORT_SYMBOL_GPL(vb2_queue_init); EXPORT_SYMBOL_GPL(vb2_queue_release); EXPORT_SYMBOL_GPL(vb2_read); EXPORT_SYMBOL_GPL(vb2_write); and v4l2-mem2mem.c: EXPORT_SYMBOL(v4l2_m2m_get_vq); EXPORT_SYMBOL_GPL(v4l2_m2m_next_buf); EXPORT_SYMBOL_GPL(v4l2_m2m_buf_remove); EXPORT_SYMBOL(v4l2_m2m_get_curr_priv); EXPORT_SYMBOL(v4l2_m2m_job_finish); EXPORT_SYMBOL_GPL(v4l2_m2m_reqbufs); EXPORT_SYMBOL_GPL(v4l2_m2m_querybuf); EXPORT_SYMBOL_GPL(v4l2_m2m_qbuf); EXPORT_SYMBOL_GPL(v4l2_m2m_dqbuf); EXPORT_SYMBOL_GPL(v4l2_m2m_streamon); EXPORT_SYMBOL_GPL(v4l2_m2m_streamoff); EXPORT_SYMBOL_GPL(v4l2_m2m_poll); EXPORT_SYMBOL(v4l2_m2m_mmap); EXPORT_SYMBOL_GPL(v4l2_m2m_init); EXPORT_SYMBOL_GPL(v4l2_m2m_release); EXPORT_SYMBOL_GPL(v4l2_m2m_ctx_init); EXPORT_SYMBOL_GPL(v4l2_m2m_ctx_release); EXPORT_SYMBOL_GPL(v4l2_m2m_buf_queue); memcopy operation is vb2_mmap() or v4l2_m2m_mmap() for eg. and for DMA it can be videobuf_dma_mmap() (for scatter-gather operation) etc etc. Search the same directories for how these are used by the different drivers. Q3: device to device mapping, I think will be the "mem2mem" files in the kernel source: mem2mem_testdev.c v4l2-mem2mem.c and all the APIs u can use (inside kernel drivers) are listed above (as EXPORT symbol). On Mon, Feb 18, 2013 at 12:29 PM, Kaushal Billore < kaushalbill...@hotmail.com> wrote: > I have some doubt regarding Linux kernel V4l2 API's. > When capture application calls Reqbuff ioctl to allocate n no of buffer > which would belongs to v4l2 layer and display application calls the Reqbuff > ioctl to allocate N no of buffer which would also belongs to device memory. > > Question: > 1. V4l2 maintains the generic layer for all devices in which buffers can > be allocated by any device and can be handle by any device? > > 2. If not then while capturing the data from capture device can capture > device allocated buffer gets filled and while displaying the same data > there memory copy happens between capture buffer and output buffers? > > 3. If not then I want to capture data from capture device and display onto > display device through the v4l2 framework layer. > > Awaiting for responce! > > Thanks in advance > Kaushal > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > -- Regards, Peter Teoh
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies