mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 20:32:22 +00:00
[media] v4l: vsp1: Supply frames to the DU continuously
When operating in DU output mode (deep pipeline to the DU through the LIF), the VSP1 needs to constantly supply frames to the display. To ensure reuse the last queued buffer instead of returning it to the user. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
daecfebcb8
commit
3299ba5c0b
@ -488,11 +488,17 @@ static bool vsp1_pipeline_ready(struct vsp1_pipeline *pipe)
|
|||||||
* This function completes the current buffer by filling its sequence number,
|
* This function completes the current buffer by filling its sequence number,
|
||||||
* time stamp and payload size, and hands it back to the videobuf core.
|
* time stamp and payload size, and hands it back to the videobuf core.
|
||||||
*
|
*
|
||||||
|
* When operating in DU output mode (deep pipeline to the DU through the LIF),
|
||||||
|
* the VSP1 needs to constantly supply frames to the display. In that case, if
|
||||||
|
* no other buffer is queued, reuse the one that has just been processed instead
|
||||||
|
* of handing it back to the videobuf core.
|
||||||
|
*
|
||||||
* Return the next queued buffer or NULL if the queue is empty.
|
* Return the next queued buffer or NULL if the queue is empty.
|
||||||
*/
|
*/
|
||||||
static struct vsp1_video_buffer *
|
static struct vsp1_video_buffer *
|
||||||
vsp1_video_complete_buffer(struct vsp1_video *video)
|
vsp1_video_complete_buffer(struct vsp1_video *video)
|
||||||
{
|
{
|
||||||
|
struct vsp1_pipeline *pipe = to_vsp1_pipeline(&video->video.entity);
|
||||||
struct vsp1_video_buffer *next = NULL;
|
struct vsp1_video_buffer *next = NULL;
|
||||||
struct vsp1_video_buffer *done;
|
struct vsp1_video_buffer *done;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@ -507,6 +513,13 @@ vsp1_video_complete_buffer(struct vsp1_video *video)
|
|||||||
|
|
||||||
done = list_first_entry(&video->irqqueue,
|
done = list_first_entry(&video->irqqueue,
|
||||||
struct vsp1_video_buffer, queue);
|
struct vsp1_video_buffer, queue);
|
||||||
|
|
||||||
|
/* In DU output mode reuse the buffer if the list is singular. */
|
||||||
|
if (pipe->lif && list_is_singular(&video->irqqueue)) {
|
||||||
|
spin_unlock_irqrestore(&video->irqlock, flags);
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
list_del(&done->queue);
|
list_del(&done->queue);
|
||||||
|
|
||||||
if (!list_empty(&video->irqqueue))
|
if (!list_empty(&video->irqqueue))
|
||||||
|
Loading…
Reference in New Issue
Block a user