[PATCH v3 2/2] v4l: vsp1: Provide a writeback video device
Kieran Bingham
kieran.bingham+renesas at ideasonboard.com
Wed May 17 21:33:29 UTC 2017
Hi Geert,
On 16/05/17 16:30, Geert Uytterhoeven wrote:
> Hi Kieran,
>
> On Tue, May 9, 2017 at 6:39 PM, Kieran Bingham
> <kieran.bingham+renesas at ideasonboard.com> wrote:
>> When the VSP1 is used in an active display pipeline, the output of the
>> WPF can supply the LIF entity directly and simultaneously write to
>> memory.
>>
>> Support this functionality in the VSP1 driver, by extending the WPF
>> source pads, and establishing a V4L2 video device node connected to the
>> new source.
>>
>> The source will be able to perform pixel format conversion, but not
>> rescaling, and as such the output from the memory node will always be
>> of the same dimensions as the display output.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham+renesas at ideasonboard.com>
>
>> --- a/drivers/media/platform/vsp1/vsp1_video.c
>> +++ b/drivers/media/platform/vsp1/vsp1_video.c
>
>> @@ -900,6 +901,147 @@ static const struct vb2_ops vsp1_video_queue_qops = {
>> .stop_streaming = vsp1_video_stop_streaming,
>> };
>>
>> +
>> +/* -----------------------------------------------------------------------------
>> + * videobuf2 queue operations for writeback nodes
>> + */
>> +
>> +static void vsp1_video_wb_process_buffer(struct vsp1_video *video)
>> +{
>> + struct vsp1_vb2_buffer *buf;
>> + unsigned long flags;
>> +
>> + /*
>> + * Writeback uses a running stream, unlike the M2M interface which
>> + * controls a pipeline process manually though the use of
>> + * vsp1_pipeline_run().
>> + *
>> + * Instead writeback will commence at the next frame interval, and can
>> + * be marked complete at the interval following that. To handle this we
>> + * store the configured buffer as pending until the next callback.
>> + *
>> + * | | | | |
>> + * A |<-->|
>> + * B |<-->|
>> + * C |<-->| : Only at interrupt C can A be marked done
>> + */
>> +
>> + spin_lock_irqsave(&video->irqlock, flags);
>> +
>> + /* Move the pending image to the active hw queue */
>> + if (video->pending) {
>> + list_add_tail(&video->pending->queue, &video->irqqueue);
>> + video->pending = NULL;
>> + }
>> +
>> + buf = list_first_entry_or_null(&video->wbqueue, struct vsp1_vb2_buffer,
>> + queue);
>> +
>> + if (buf) {
>> + video->rwpf->mem = buf->mem;
>> +
>> + /*
>> + * Store this buffer as pending. It will commence at the next
>> + * frame start interrupt
>> + */
>> + video->pending = buf;
>> + list_del(&buf->queue);
>> + } else {
>> + /* Disable writeback with no buffer */
>> + video->rwpf->mem = (struct vsp1_rwpf_memory) { 0 };
>
> With gcc 4.9.0:
>
> drivers/media/platform/vsp1/vsp1_video.c: In function
> 'vsp1_video_wb_process_buffer':
> drivers/media/platform/vsp1/vsp1_video.c:942:30: warning: missing
> braces around initializer [-Wmissing-braces]
> video->rwpf->mem = (struct vsp1_rwpf_memory) { 0 };
>
> - video->rwpf->mem = (struct vsp1_rwpf_memory) { 0 };
> + video->rwpf->mem = (struct vsp1_rwpf_memory) { { 0, } };
>
I've updated these to use a memset(&mem, 0, sizeof(mem)) instead.
>> +static void vsp1_video_wb_stop_streaming(struct vb2_queue *vq)
>> +{
>> + struct vsp1_video *video = vb2_get_drv_priv(vq);
>> + struct vsp1_rwpf *rwpf = video->rwpf;
>> + struct vsp1_pipeline *pipe = rwpf->pipe;
>> + struct vsp1_vb2_buffer *buffer;
>> + unsigned long flags;
>> +
>> + /*
>> + * Disable the completion interrupts, and clear the WPF memory to
>> + * prevent writing out frames
>> + */
>> + spin_lock_irqsave(&video->irqlock, flags);
>> + video->frame_end = NULL;
>> + rwpf->mem = (struct vsp1_rwpf_memory) { 0 };
>
> Likewise:
>
> - rwpf->mem = (struct vsp1_rwpf_memory) { 0 };
> + rwpf->mem = (struct vsp1_rwpf_memory) { { 0, } };
>
Now memset...
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
>
More information about the dri-devel
mailing list