Hi Vaibhav,

On Mon, 2009-10-05 at 23:57 +0530, Hiremath, Vaibhav wrote:
> > -----Original Message-----
> > From: Marek Szyprowski [mailto:m.szyprow...@samsung.com]
> > Sent: Monday, October 05, 2009 7:26 PM
> > To: Hiremath, Vaibhav; 'Ivan T. Ivanov'; linux-media@vger.kernel.org
> > Cc: kyungmin.p...@samsung.com; Tomasz Fujak; Pawel Osciak; Marek
> > Szyprowski
> > Subject: RE: Mem2Mem V4L2 devices [RFC]
> > 
> > Hello,
> > 
> > On Monday, October 05, 2009 7:59 AM Hiremath, Vaibhav wrote:
> > 
> > > -----Original Message-----
> > > From: linux-media-ow...@vger.kernel.org [mailto:linux-media-
> > ow...@vger.kernel.org] On Behalf Of
> > > Hiremath, Vaibhav
> > > Sent: Monday, October 05, 2009 7:59 AM
> > > To: Ivan T. Ivanov; Marek Szyprowski
> > > Cc: linux-media@vger.kernel.org; kyungmin.p...@samsung.com; Tomasz
> > Fujak; Pawel Osciak
> > > Subject: RE: Mem2Mem V4L2 devices [RFC]
> > >
> > >
> > > > -----Original Message-----
> > > > From: linux-media-ow...@vger.kernel.org [mailto:linux-media-
> > > > ow...@vger.kernel.org] On Behalf Of Ivan T. Ivanov
> > > > Sent: Friday, October 02, 2009 9:55 PM
> > > > To: Marek Szyprowski
> > > > Cc: linux-media@vger.kernel.org; kyungmin.p...@samsung.com;
> > Tomasz
> > > > Fujak; Pawel Osciak
> > > > Subject: Re: Mem2Mem V4L2 devices [RFC]
> > > >
> > > >
> > > > Hi Marek,
> > > >
> > > >
> > > > On Fri, 2009-10-02 at 13:45 +0200, Marek Szyprowski wrote:
> > > > > Hello,
> > > > >
> > > <snip>
> > >
> > > > > image format and size, while the existing v4l2 ioctls would
> > only
> > > > refer
> > > > > to the output buffer. Frankly speaking, we don't like this
> > idea.
> > > >
> > > > I think that is not unusual one video device to define that it
> > can
> > > > support at the same time input and output operation.
> > > >
> > > > Lets take as example resizer device. it is always possible that
> > it
> > > > inform user space application that
> > > >
> > > > struct v4l2_capability.capabilities ==
> > > >                 (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT)
> > > >
> > > > User can issue S_FMT ioctl supplying
> > > >
> > > > struct v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE
> > > >                   .pix  = width x height
> > > >
> > > > which will instruct this device to prepare its output for this
> > > > resolution. after that user can issue S_FMT ioctl supplying
> > > >
> > > > struct v4l2_format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT
> > > >                   .pix  = width x height
> > > >
> > > > using only these ioctls should be enough to device driver
> > > > to know down/up scale factor required.
> > > >
> > > > regarding color space struct v4l2_pix_format have field
> > > > 'pixelformat'
> > > > which can be used to define input and output buffers content.
> > > > so using only existing ioctl's user can have working resizer
> > device.
> > > >
> > > > also please note that there is VIDIOC_S_CROP which can add
> > > > additional
> > > > flexibility of adding cropping on input or output.
> > > >
> > > [Hiremath, Vaibhav] I think this makes more sense in capture
> > pipeline, for example,
> > >
> > > Sensor/decoder -> previewer -> resizer -> /dev/videoX
> > >
> > 
> > I don't get this. In strictly capture pipeline we will get one video
> > node anyway.
> > 
> > However the question is how we should support a bit more complicated
> > pipeline.
> > 
> > Just consider a resizer module and the pipeline:
> > 
> > sensor/decoder -[bus]-> previewer -> [memory] -> resizer -> [memory]
> > 
> [Hiremath, Vaibhav] For me this is not single pipeline, it has two separate 
> links - 
> 
> 1) sensor/decoder -[bus]-> previewer -> [memory]
> 
> 2) [memory] -> resizer -> [memory]
> 
> 
> > ([bus] means some kind of internal bus that is completely
> > interdependent from the system memory)
> > 
> > Mapping to video nodes is not so trivial. In fact this pipeline
> > consist of 2 independent (sub)pipelines connected by user space
> > application:
> > 
> > sensor/decoder -[bus]-> previewer -> [memory] -[user application]->
> > [memory] -> resizer -> [memory]
> > 
> > For further analysis it should be cut into 2 separate pipelines:
> > 
> > a. sensor/decoder -[bus]-> previewer -> [memory]
> > b. [memory] -> resizer -> [memory]
> > 
> [Hiremath, Vaibhav] Correct, I wouldn't call them as sub-pipeline. 
> Application is linking them, so from driver point of view they are completely 
> separate.
> 
> > Again, mapping the first subpipeline is trivial:
> > 
> > sensor/decoder -[bus]-> previewer -> /dev/video0
> > 
> [Hiremath, Vaibhav] Correct, it is separate streaming device.
> 
> > But the last, can be mapped either as:
> > 
> > /dev/video1 -> resizer -> /dev/video1
> > (one video node approach)
> > 
> [Hiremath, Vaibhav] Please go through my last response where I have mentioned 
> about buffer queuing constraints with this approach.
> 
> > or
> > 
> > /dev/video1 -> resizer -> /dev/video2
> > (2 video nodes approach).
> > 
> > 
> > So at the end the pipeline would look like this:
> > 
> > sensor/decoder -[bus]-> previewer -> /dev/video0 -[user
> > application]-> /dev/video1 -> resizer -> /dev/video2
> > 
> > or
> > 
> > sensor/decoder -[bus]-> previewer -> /dev/video0 -[user
> > application]-> /dev/video1 -> resizer -> /dev/video1
> > 
> > > > last thing which should be done is to QBUF 2 buffers and call
> > > > STREAMON.
> > > >
> > > [Hiremath, Vaibhav] IMO, this implementation is not streaming
> > model, we are trying to fit mem-to-mem
> > > forcefully to streaming.
> > 
> > Why this does not fit streaming? I see no problems with streaming
> > over mem2mem device with only one video node. You just queue input
> > and output buffers (they are distinguished by 'type' parameter) on
> > the same video node.
> > 
> [Hiremath, Vaibhav] Do we create separate queue of buffers based on type? I 
> think we don't. 
> 
> App1          App2            App3            ...             AppN
>   |            |              |               |                 |
>    -----------------------------------------------
>                               |
>                       /dev/video0
>                               |
>                       Resizer Driver

 why not? they can be per file handler input/output queue. and we
 can do time sharing use of resizer driver like Marek suggests.


> 
> Everyone will be doing streamon, and in normal use case every application 
> must be getting buffers from another module (another driver, codecs, DSP, 
> etc...) in multiple streams, 0, 1,2,3,4....N
> 
> Every application will start streaming with (mostly) fixed scaling factor 
> which mostly never changes. This one video node approach is possible only 
> with constraint that, the application will always queue only 2 buffers with 
> one CAPTURE and one with OUTPUT type. 

i don't see how 2 device node approach can help with this case.
even in "normal" video capture device you should stop streaming 
when change buffer sizes.

> He has to wait till first/second gets finished, you can't queue multiple 
> buffers (input and output) simultaneously.

actually this should be possible. 

iivanov
 
> 
> I do agree here with you that we need to investigate on whether we really 
> have such use-case. Does it make sense to put such constraint on application? 
> What is the impact? Again in case of down-scaling, application may want to 
> use same buffer as input, which is easily possible with single node approach.
> 
> Thanks,
> Vaibhav
> 
> > > We have to put some constraints -
> > >
> > >   - Driver will treat index 0 as input always, irrespective of
> > number of buffers queued.
> > >   - Or, application should not queue more that 2 buffers.
> > >   - Multi-channel use-case????
> > >
> > > I think we have to have 2 device nodes which are capable of
> > streaming multiple buffers, both are
> > > queuing the buffers.
> > 
> > In one video node approach there can be 2 buffer queues in one video
> > node, for input and output respectively.
> > 
> > > The constraint would be the buffers must be mapped one-to-one.
> > 
> > Right, each queued input buffer must have corresponding output
> > buffer.
> > 
> > Best regards
> > --
> > Marek Szyprowski
> > Samsung Poland R&D Center
> > 
> > 
> 

--
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

Reply via email to