[media] v4l: Copy timestamp source flags to destination on m2m devices
Copy the flags containing the timestamp source from source buffer flags to the destination buffer flags on memory-to-memory devices. This is analogous to copying the timestamp field from source to destination. Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Acked-by: Kamil Debski <k.debski@samsung.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Родитель
599b08929e
Коммит
309f4d62ed
|
@ -2829,6 +2829,9 @@ static void coda_finish_encode(struct coda_ctx *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
|
dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
|
||||||
|
dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_buf->v4l2_buf.flags |=
|
||||||
|
src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
|
dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
|
||||||
|
|
||||||
v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
|
v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
|
||||||
|
|
|
@ -90,6 +90,10 @@ void gsc_m2m_job_finish(struct gsc_ctx *ctx, int vb_state)
|
||||||
if (src_vb && dst_vb) {
|
if (src_vb && dst_vb) {
|
||||||
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
||||||
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
||||||
|
dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_vb->v4l2_buf.flags |=
|
||||||
|
src_vb->v4l2_buf.flags
|
||||||
|
& V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
|
||||||
v4l2_m2m_buf_done(src_vb, vb_state);
|
v4l2_m2m_buf_done(src_vb, vb_state);
|
||||||
v4l2_m2m_buf_done(dst_vb, vb_state);
|
v4l2_m2m_buf_done(dst_vb, vb_state);
|
||||||
|
|
|
@ -134,6 +134,9 @@ static void fimc_device_run(void *priv)
|
||||||
goto dma_unlock;
|
goto dma_unlock;
|
||||||
|
|
||||||
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
||||||
|
dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_vb->v4l2_buf.flags |=
|
||||||
|
src_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
|
||||||
/* Reconfigure hardware if the context has changed. */
|
/* Reconfigure hardware if the context has changed. */
|
||||||
if (fimc->m2m.ctx != ctx) {
|
if (fimc->m2m.ctx != ctx) {
|
||||||
|
|
|
@ -208,6 +208,9 @@ static void dma_callback(void *data)
|
||||||
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
|
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
|
||||||
|
|
||||||
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
||||||
|
dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_vb->v4l2_buf.flags |=
|
||||||
|
src_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
||||||
|
|
||||||
v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_DONE);
|
v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_DONE);
|
||||||
|
|
|
@ -239,6 +239,9 @@ static int device_process(struct m2mtest_ctx *ctx,
|
||||||
memcpy(&out_vb->v4l2_buf.timestamp,
|
memcpy(&out_vb->v4l2_buf.timestamp,
|
||||||
&in_vb->v4l2_buf.timestamp,
|
&in_vb->v4l2_buf.timestamp,
|
||||||
sizeof(struct timeval));
|
sizeof(struct timeval));
|
||||||
|
out_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
out_vb->v4l2_buf.flags |=
|
||||||
|
in_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
|
||||||
switch (ctx->mode) {
|
switch (ctx->mode) {
|
||||||
case MEM2MEM_HFLIP | MEM2MEM_VFLIP:
|
case MEM2MEM_HFLIP | MEM2MEM_VFLIP:
|
||||||
|
|
|
@ -378,6 +378,11 @@ static irqreturn_t emmaprp_irq(int irq_emma, void *data)
|
||||||
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
|
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
|
||||||
|
|
||||||
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
|
||||||
|
dst_vb->v4l2_buf.flags &=
|
||||||
|
~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_vb->v4l2_buf.flags |=
|
||||||
|
src_vb->v4l2_buf.flags
|
||||||
|
& V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
|
||||||
|
|
||||||
spin_lock_irqsave(&pcdev->irqlock, flags);
|
spin_lock_irqsave(&pcdev->irqlock, flags);
|
||||||
|
|
|
@ -560,6 +560,9 @@ static irqreturn_t g2d_isr(int irq, void *prv)
|
||||||
|
|
||||||
dst->v4l2_buf.timecode = src->v4l2_buf.timecode;
|
dst->v4l2_buf.timecode = src->v4l2_buf.timecode;
|
||||||
dst->v4l2_buf.timestamp = src->v4l2_buf.timestamp;
|
dst->v4l2_buf.timestamp = src->v4l2_buf.timestamp;
|
||||||
|
dst->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst->v4l2_buf.flags |=
|
||||||
|
src->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
|
||||||
v4l2_m2m_buf_done(src, VB2_BUF_STATE_DONE);
|
v4l2_m2m_buf_done(src, VB2_BUF_STATE_DONE);
|
||||||
v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
|
v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
|
||||||
|
|
|
@ -1766,6 +1766,9 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
|
||||||
|
|
||||||
dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
|
dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
|
||||||
dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
|
dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
|
||||||
|
dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_buf->v4l2_buf.flags |=
|
||||||
|
src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
|
||||||
v4l2_m2m_buf_done(src_buf, state);
|
v4l2_m2m_buf_done(src_buf, state);
|
||||||
if (curr_ctx->mode == S5P_JPEG_ENCODE)
|
if (curr_ctx->mode == S5P_JPEG_ENCODE)
|
||||||
|
|
|
@ -232,6 +232,11 @@ static void s5p_mfc_handle_frame_copy_time(struct s5p_mfc_ctx *ctx)
|
||||||
src_buf->b->v4l2_buf.timecode;
|
src_buf->b->v4l2_buf.timecode;
|
||||||
dst_buf->b->v4l2_buf.timestamp =
|
dst_buf->b->v4l2_buf.timestamp =
|
||||||
src_buf->b->v4l2_buf.timestamp;
|
src_buf->b->v4l2_buf.timestamp;
|
||||||
|
dst_buf->b->v4l2_buf.flags &=
|
||||||
|
~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
dst_buf->b->v4l2_buf.flags |=
|
||||||
|
src_buf->b->v4l2_buf.flags
|
||||||
|
& V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
switch (frame_type) {
|
switch (frame_type) {
|
||||||
case S5P_FIMV_DECODE_FRAME_I_FRAME:
|
case S5P_FIMV_DECODE_FRAME_I_FRAME:
|
||||||
dst_buf->b->v4l2_buf.flags |=
|
dst_buf->b->v4l2_buf.flags |=
|
||||||
|
|
|
@ -1278,6 +1278,8 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
|
||||||
d_buf = &d_vb->v4l2_buf;
|
d_buf = &d_vb->v4l2_buf;
|
||||||
|
|
||||||
d_buf->timestamp = s_buf->timestamp;
|
d_buf->timestamp = s_buf->timestamp;
|
||||||
|
d_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
|
d_buf->flags |= s_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
|
||||||
if (s_buf->flags & V4L2_BUF_FLAG_TIMECODE) {
|
if (s_buf->flags & V4L2_BUF_FLAG_TIMECODE) {
|
||||||
d_buf->flags |= V4L2_BUF_FLAG_TIMECODE;
|
d_buf->flags |= V4L2_BUF_FLAG_TIMECODE;
|
||||||
d_buf->timecode = s_buf->timecode;
|
d_buf->timecode = s_buf->timecode;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче