Re: V4L2 subdevice query
Hi Vinay, On Mon, Dec 19, 2011 at 12:08:31PM -0800, vka...@codeaurora.org wrote: Hi I am trying to implement a video encoder v4l2 device and need your help to find answers to some of the questions. There is one hardware core which can do multiple sessions (multiple file handles) of encode simultaneously. The encode functionalty needs to be exposed to userspace as well as kernel through standard set of APIs. Userspace should be able to use this functionality through V4l2 interface and another kernel module should be able to use encoder as a subdevice. I am trying to explore the framework to achieve this and have following questions: Is there a physical link (a bus) between the device which the another kernel module drives, and the video encoder? Memory does not count. I have never seen a video encoder which would be connected to somewhere else, e.g. an ISP. Typically video encoders will have to access the image data in tiles that do not match with the linear read of the sensor's pixel array, which is the same order as the output of ISPs. This requires an intermediate buffer, at least, which is typically the system memory. Any further technical information on the encoder, its connections to the rest of the SoC and the SoC itself would be helpful. 1. I am planning to create a V4L2 device and also initializing it as a subdev in the probe function i.e the probe function of this driver will have: struct venc_device { struct v4l2_device v4l2_dev; struct v4l2_subdev sd; }; struct venc_device *vdev; v4l2_device_register(vdev-v4l2_dev); v4l2_subdev_init(vdev-sd, venc_sd_ops); How do other modules discover this subdevice. Is there an API I can use to find module by name? 2. Most of the subdevice interface functions have input parameters as struct v4l2_subdev *sd and another API specific structure. How do I distinguish between different instances (file handles) of a subdevice. Do I always need to pass file handle/instance specific information in void *arg of the ioctl subdev core ops. The subdev API, as it stands currently, is intended for configuring hardware devices which only can have a single, global configuration. If you implement your video encoder as a memory-to-memory device, I think the interface has exactly what you'll need. By default everything in memory-to-memory devices is file handle specific. 3. Controls are instance specific, eg: one encoder application might encode at bitrate of 4Mbps and another at 128kbps, so I want controls to be specific to file handles. I see that the control handler has been moved to v4l2_fh structure for this purpose. How do I do it for subdevices so that the v4l2 device using this subdevice inherits the instance specific controls defined by the subdevice. Kind regards, -- Sakari Ailus e-mail: sakari.ai...@iki.fi jabber/XMPP/Gmail: sai...@retiisi.org.uk -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: V4L2 subdevice query
Hi Vinay, On Monday 19 December 2011 21:08:31 vka...@codeaurora.org wrote: I am trying to implement a video encoder v4l2 device and need your help to find answers to some of the questions. There is one hardware core which can do multiple sessions (multiple file handles) of encode simultaneously. The encode functionalty needs to be exposed to userspace as well as kernel through standard set of APIs. Userspace should be able to use this functionality through V4l2 interface and another kernel module should be able to use encoder as a subdevice. I am trying to explore the framework to achieve this and have following questions: 1. I am planning to create a V4L2 device and also initializing it as a subdev in the probe function i.e the probe function of this driver will have: struct venc_device { struct v4l2_device v4l2_dev; struct v4l2_subdev sd; }; struct venc_device *vdev; v4l2_device_register(vdev-v4l2_dev); v4l2_subdev_init(vdev-sd, venc_sd_ops); How do other modules discover this subdevice. Is there an API I can use to find module by name? 2. Most of the subdevice interface functions have input parameters as struct v4l2_subdev *sd and another API specific structure. How do I distinguish between different instances (file handles) of a subdevice. The short answer is that you don't. If your hardware block can encode a fixed number of streams separately, one possible solution would be to create N subdevices, or to create a single subdevice with N input pads and N output pads, where N is the number of logical streams. Input and output pads could then be connected to video nodes or to other subdevices in the system. Another solution is to use the mem-to-mem framework, which allows streams multiplexing through multiple opens. However, there is no clear mapping to subdevs (that I'm aware of) at the moment. Can you share a bit more information about your hardware ? A block diagram would be useful. Do I always need to pass file handle/instance specific information in void *arg of the ioctl subdev core ops. 3. Controls are instance specific, eg: one encoder application might encode at bitrate of 4Mbps and another at 128kbps, so I want controls to be specific to file handles. I see that the control handler has been moved to v4l2_fh structure for this purpose. How do I do it for subdevices so that the v4l2 device using this subdevice inherits the instance specific controls defined by the subdevice. -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
V4L2 subdevice query
Hi I am trying to implement a video encoder v4l2 device and need your help to find answers to some of the questions. There is one hardware core which can do multiple sessions (multiple file handles) of encode simultaneously. The encode functionalty needs to be exposed to userspace as well as kernel through standard set of APIs. Userspace should be able to use this functionality through V4l2 interface and another kernel module should be able to use encoder as a subdevice. I am trying to explore the framework to achieve this and have following questions: 1. I am planning to create a V4L2 device and also initializing it as a subdev in the probe function i.e the probe function of this driver will have: struct venc_device { struct v4l2_device v4l2_dev; struct v4l2_subdev sd; }; struct venc_device *vdev; v4l2_device_register(vdev-v4l2_dev); v4l2_subdev_init(vdev-sd, venc_sd_ops); How do other modules discover this subdevice. Is there an API I can use to find module by name? 2. Most of the subdevice interface functions have input parameters as struct v4l2_subdev *sd and another API specific structure. How do I distinguish between different instances (file handles) of a subdevice. Do I always need to pass file handle/instance specific information in void *arg of the ioctl subdev core ops. 3. Controls are instance specific, eg: one encoder application might encode at bitrate of 4Mbps and another at 128kbps, so I want controls to be specific to file handles. I see that the control handler has been moved to v4l2_fh structure for this purpose. How do I do it for subdevices so that the v4l2 device using this subdevice inherits the instance specific controls defined by the subdevice. Thanks Vinay -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html