Re: V4L2 Framework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <kaushalbillore@xxxxxxxxxxx> 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@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




--
Regards,
Peter Teoh
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux