[media] media: videobuf2: Move timestamp to vb2_buffer

Move timestamp from struct vb2_v4l2_buffer to struct vb2_buffer
for common use, and change its type to u64 in order to handling
y2038 problem. This patch also includes all device drivers' changes related to
this restructuring.

Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Junghak Sung 2015-11-03 08:16:37 -02:00 committed by Mauro Carvalho Chehab
parent 9057bc2b35
commit d6dd645eae
71 changed files with 108 additions and 106 deletions

View File

@ -444,7 +444,7 @@ static void sur40_process_video(struct sur40_state *sur40)
goto err_poll; goto err_poll;
/* mark as finished */ /* mark as finished */
v4l2_get_timestamp(&new_buf->vb.timestamp); new_buf->vb.vb2_buf.timestamp = ktime_get_ns();
new_buf->vb.sequence = sur40->sequence++; new_buf->vb.sequence = sur40->sequence++;
new_buf->vb.field = V4L2_FIELD_NONE; new_buf->vb.field = V4L2_FIELD_NONE;
vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -310,7 +310,7 @@ static void rtl2832_sdr_urb_complete(struct urb *urb)
len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer, len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer,
urb->actual_length); urb->actual_length);
vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len); vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
v4l2_get_timestamp(&fbuf->vb.timestamp); fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
fbuf->vb.sequence = dev->sequence++; fbuf->vb.sequence = dev->sequence++;
vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -134,7 +134,7 @@ done:
skip = true; skip = true;
s->skip_first_frames--; s->skip_first_frames--;
} }
v4l2_get_timestamp(&cb->vb.timestamp); cb->vb.vb2_buf.timestamp = ktime_get_ns();
/* TODO: the sequence number should be read from the FPGA so we /* TODO: the sequence number should be read from the FPGA so we
also know about dropped frames. */ also know about dropped frames. */
cb->vb.sequence = s->sequence++; cb->vb.sequence = s->sequence++;

View File

@ -427,7 +427,7 @@ static void cx23885_wakeup(struct cx23885_tsport *port,
buf = list_entry(q->active.next, buf = list_entry(q->active.next,
struct cx23885_buffer, queue); struct cx23885_buffer, queue);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.sequence = q->count++; buf->vb.sequence = q->count++;
dprintk(1, "[%p/%d] wakeup reg=%d buf=%d\n", buf, dprintk(1, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
buf->vb.vb2_buf.index, buf->vb.vb2_buf.index,

View File

@ -105,7 +105,7 @@ void cx23885_video_wakeup(struct cx23885_dev *dev,
struct cx23885_buffer, queue); struct cx23885_buffer, queue);
buf->vb.sequence = q->count++; buf->vb.sequence = q->count++;
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf, dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
buf->vb.vb2_buf.index, count, q->count); buf->vb.vb2_buf.index, count, q->count);
list_del(&buf->queue); list_del(&buf->queue);

View File

@ -130,7 +130,7 @@ int cx25821_video_irq(struct cx25821_dev *dev, int chan_num, u32 status)
buf = list_entry(dmaq->active.next, buf = list_entry(dmaq->active.next,
struct cx25821_buffer, queue); struct cx25821_buffer, queue);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.sequence = dmaq->count++; buf->vb.sequence = dmaq->count++;
list_del(&buf->queue); list_del(&buf->queue);
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -518,7 +518,7 @@ void cx88_wakeup(struct cx88_core *core,
buf = list_entry(q->active.next, buf = list_entry(q->active.next,
struct cx88_buffer, list); struct cx88_buffer, list);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.field = core->field; buf->vb.field = core->field;
buf->vb.sequence = q->count++; buf->vb.sequence = q->count++;
list_del(&buf->list); list_del(&buf->list);

View File

@ -270,7 +270,7 @@ static irqreturn_t dt3155_irq_handler_even(int irq, void *dev_id)
spin_lock(&ipd->lock); spin_lock(&ipd->lock);
if (ipd->curr_buf && !list_empty(&ipd->dmaq)) { if (ipd->curr_buf && !list_empty(&ipd->dmaq)) {
v4l2_get_timestamp(&ipd->curr_buf->timestamp); ipd->curr_buf->vb2_buf.timestamp = ktime_get_ns();
ipd->curr_buf->sequence = ipd->sequence++; ipd->curr_buf->sequence = ipd->sequence++;
ipd->curr_buf->field = V4L2_FIELD_NONE; ipd->curr_buf->field = V4L2_FIELD_NONE;
vb2_buffer_done(&ipd->curr_buf->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&ipd->curr_buf->vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -579,7 +579,7 @@ static void netup_unidvb_dma_worker(struct work_struct *work)
dev_dbg(&ndev->pci_dev->dev, dev_dbg(&ndev->pci_dev->dev,
"%s(): buffer %p done, size %d\n", "%s(): buffer %p done, size %d\n",
__func__, buf, buf->size); __func__, buf, buf->size);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->size); vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->size);
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -309,7 +309,7 @@ void saa7134_buffer_finish(struct saa7134_dev *dev,
core_dbg("buffer_finish %p\n", q->curr); core_dbg("buffer_finish %p\n", q->curr);
/* finish current buffer */ /* finish current buffer */
v4l2_get_timestamp(&q->curr->vb2.timestamp); q->curr->vb2.vb2_buf.timestamp = ktime_get_ns();
q->curr->vb2.sequence = q->seq_nr++; q->curr->vb2.sequence = q->seq_nr++;
vb2_buffer_done(&q->curr->vb2.vb2_buf, state); vb2_buffer_done(&q->curr->vb2.vb2_buf, state);
q->curr = NULL; q->curr = NULL;

View File

@ -531,7 +531,7 @@ static int solo_enc_fillbuf(struct solo_enc_dev *solo_enc,
if (!ret) { if (!ret) {
vbuf->sequence = solo_enc->sequence++; vbuf->sequence = solo_enc->sequence++;
v4l2_get_timestamp(&vbuf->timestamp); vb->timestamp = ktime_get_ns();
/* Check for motion flags */ /* Check for motion flags */
if (solo_is_motion_on(solo_enc) && enc_buf->motion) { if (solo_is_motion_on(solo_enc) && enc_buf->motion) {

View File

@ -225,7 +225,7 @@ finish_buf:
vb2_set_plane_payload(vb, 0, vb2_set_plane_payload(vb, 0,
solo_vlines(solo_dev) * solo_bytesperline(solo_dev)); solo_vlines(solo_dev) * solo_bytesperline(solo_dev));
vbuf->sequence = solo_dev->sequence++; vbuf->sequence = solo_dev->sequence++;
v4l2_get_timestamp(&vbuf->timestamp); vb->timestamp = ktime_get_ns();
} }
vb2_buffer_done(vb, error ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); vb2_buffer_done(vb, error ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);

View File

@ -817,7 +817,7 @@ static irqreturn_t vip_irq(int irq, struct sta2x11_vip *vip)
/* Disable acquisition */ /* Disable acquisition */
reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) & ~DVP_CTL_ENA); reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) & ~DVP_CTL_ENA);
/* Remove the active buffer from the list */ /* Remove the active buffer from the list */
v4l2_get_timestamp(&vip->active->vb.timestamp); vip->active->vb.vb2_buf.timestamp = ktime_get_ns();
vip->active->vb.sequence = vip->sequence++; vip->active->vb.sequence = vip->sequence++;
vb2_buffer_done(&vip->active->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vip->active->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -1016,7 +1016,7 @@ void tw68_irq_video_done(struct tw68_dev *dev, unsigned long status)
buf = list_entry(dev->active.next, struct tw68_buf, list); buf = list_entry(dev->active.next, struct tw68_buf, list);
list_del(&buf->list); list_del(&buf->list);
spin_unlock(&dev->slock); spin_unlock(&dev->slock);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.field = dev->field; buf->vb.field = dev->field;
buf->vb.sequence = dev->seqnr++; buf->vb.sequence = dev->seqnr++;
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -1281,7 +1281,7 @@ static inline void vpfe_schedule_bottom_field(struct vpfe_device *vpfe)
*/ */
static inline void vpfe_process_buffer_complete(struct vpfe_device *vpfe) static inline void vpfe_process_buffer_complete(struct vpfe_device *vpfe)
{ {
v4l2_get_timestamp(&vpfe->cur_frm->vb.timestamp); vpfe->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
vpfe->cur_frm->vb.field = vpfe->fmt.fmt.pix.field; vpfe->cur_frm->vb.field = vpfe->fmt.fmt.pix.field;
vpfe->cur_frm->vb.sequence = vpfe->sequence++; vpfe->cur_frm->vb.sequence = vpfe->sequence++;
vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -404,7 +404,7 @@ static irqreturn_t bcap_isr(int irq, void *dev_id)
spin_lock(&bcap_dev->lock); spin_lock(&bcap_dev->lock);
if (!list_empty(&bcap_dev->dma_queue)) { if (!list_empty(&bcap_dev->dma_queue)) {
v4l2_get_timestamp(&vbuf->timestamp); vb->timestamp = ktime_get_ns();
if (ppi->err) { if (ppi->err) {
vb2_buffer_done(vb, VB2_BUF_STATE_ERROR); vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
ppi->err = false; ppi->err = false;

View File

@ -279,7 +279,7 @@ void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming)
if (meta) { if (meta) {
meta->sequence = src_buf->sequence; meta->sequence = src_buf->sequence;
meta->timecode = src_buf->timecode; meta->timecode = src_buf->timecode;
meta->timestamp = src_buf->timestamp; meta->timestamp = src_buf->vb2_buf.timestamp;
meta->start = start; meta->start = start;
meta->end = ctx->bitstream_fifo.kfifo.in & meta->end = ctx->bitstream_fifo.kfifo.in &
ctx->bitstream_fifo.kfifo.mask; ctx->bitstream_fifo.kfifo.mask;
@ -1364,7 +1364,7 @@ static void coda_finish_encode(struct coda_ctx *ctx)
dst_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME; dst_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME;
} }
dst_buf->timestamp = src_buf->timestamp; dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_buf->flags |= dst_buf->flags |=
src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
@ -2040,7 +2040,7 @@ static void coda_finish_decode(struct coda_ctx *ctx)
dst_buf->flags |= ctx->frame_types[ctx->display_idx]; dst_buf->flags |= ctx->frame_types[ctx->display_idx];
meta = &ctx->frame_metas[ctx->display_idx]; meta = &ctx->frame_metas[ctx->display_idx];
dst_buf->timecode = meta->timecode; dst_buf->timecode = meta->timecode;
dst_buf->timestamp = meta->timestamp; dst_buf->vb2_buf.timestamp = meta->timestamp;
trace_coda_dec_rot_done(ctx, dst_buf, meta); trace_coda_dec_rot_done(ctx, dst_buf, meta);

View File

@ -138,7 +138,7 @@ struct coda_buffer_meta {
struct list_head list; struct list_head list;
u32 sequence; u32 sequence;
struct v4l2_timecode timecode; struct v4l2_timecode timecode;
struct timeval timestamp; u64 timestamp;
u32 start; u32 start;
u32 end; u32 end;
}; };

View File

@ -74,7 +74,7 @@ static void vpbe_isr_even_field(struct vpbe_display *disp_obj,
if (layer->cur_frm == layer->next_frm) if (layer->cur_frm == layer->next_frm)
return; return;
v4l2_get_timestamp(&layer->cur_frm->vb.timestamp); layer->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&layer->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&layer->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
/* Make cur_frm pointing to next_frm */ /* Make cur_frm pointing to next_frm */
layer->cur_frm = layer->next_frm; layer->cur_frm = layer->next_frm;

View File

@ -330,7 +330,7 @@ static struct vb2_ops video_qops = {
*/ */
static void vpif_process_buffer_complete(struct common_obj *common) static void vpif_process_buffer_complete(struct common_obj *common)
{ {
v4l2_get_timestamp(&common->cur_frm->vb.timestamp); common->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&common->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&common->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
/* Make curFrm pointing to nextFrm */ /* Make curFrm pointing to nextFrm */
common->cur_frm = common->next_frm; common->cur_frm = common->next_frm;

View File

@ -331,7 +331,7 @@ static void process_interlaced_mode(int fid, struct common_obj *common)
/* one frame is displayed If next frame is /* one frame is displayed If next frame is
* available, release cur_frm and move on */ * available, release cur_frm and move on */
/* Copy frame display time */ /* Copy frame display time */
v4l2_get_timestamp(&common->cur_frm->vb.timestamp); common->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
/* Change status of the cur_frm */ /* Change status of the cur_frm */
vb2_buffer_done(&common->cur_frm->vb.vb2_buf, vb2_buffer_done(&common->cur_frm->vb.vb2_buf,
VB2_BUF_STATE_DONE); VB2_BUF_STATE_DONE);
@ -387,8 +387,8 @@ static irqreturn_t vpif_channel_isr(int irq, void *dev_id)
if (!channel_first_int[i][channel_id]) { if (!channel_first_int[i][channel_id]) {
/* Mark status of the cur_frm to /* Mark status of the cur_frm to
* done and unlock semaphore on it */ * done and unlock semaphore on it */
v4l2_get_timestamp( common->cur_frm->vb.vb2_buf.timestamp =
&common->cur_frm->vb.timestamp); ktime_get_ns();
vb2_buffer_done(&common->cur_frm->vb.vb2_buf, vb2_buffer_done(&common->cur_frm->vb.vb2_buf,
VB2_BUF_STATE_DONE); VB2_BUF_STATE_DONE);
/* Make cur_frm pointing to next_frm */ /* Make cur_frm pointing to next_frm */

View File

@ -86,7 +86,7 @@ void gsc_m2m_job_finish(struct gsc_ctx *ctx, int vb_state)
dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
if (src_vb && dst_vb) { if (src_vb && dst_vb) {
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
dst_vb->timecode = src_vb->timecode; dst_vb->timecode = src_vb->timecode;
dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_vb->flags |= dst_vb->flags |=
@ -125,7 +125,7 @@ static int gsc_get_bufs(struct gsc_ctx *ctx)
if (ret) if (ret)
return ret; return ret;
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
return 0; return 0;
} }

View File

@ -193,7 +193,7 @@ void fimc_capture_irq_handler(struct fimc_dev *fimc, int deq_buf)
test_bit(ST_CAPT_RUN, &fimc->state) && deq_buf) { test_bit(ST_CAPT_RUN, &fimc->state) && deq_buf) {
v_buf = fimc_active_queue_pop(cap); v_buf = fimc_active_queue_pop(cap);
v4l2_get_timestamp(&v_buf->vb.timestamp); v_buf->vb.vb2_buf.timestamp = ktime_get_ns();
v_buf->vb.sequence = cap->frame_count++; v_buf->vb.sequence = cap->frame_count++;
vb2_buffer_done(&v_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&v_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -251,7 +251,7 @@ void fimc_isp_video_irq_handler(struct fimc_is *is)
buf_index = (is->i2h_cmd.args[1] - 1) % video->buf_count; buf_index = (is->i2h_cmd.args[1] - 1) % video->buf_count;
vbuf = &video->buffers[buf_index]->vb; vbuf = &video->buffers[buf_index]->vb;
v4l2_get_timestamp(&vbuf->timestamp); vbuf->vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
video->buf_mask &= ~BIT(buf_index); video->buf_mask &= ~BIT(buf_index);

View File

@ -292,7 +292,7 @@ static irqreturn_t flite_irq_handler(int irq, void *priv)
test_bit(ST_FLITE_RUN, &fimc->state) && test_bit(ST_FLITE_RUN, &fimc->state) &&
!list_empty(&fimc->active_buf_q)) { !list_empty(&fimc->active_buf_q)) {
vbuf = fimc_lite_active_queue_pop(fimc); vbuf = fimc_lite_active_queue_pop(fimc);
v4l2_get_timestamp(&vbuf->vb.timestamp); vbuf->vb.vb2_buf.timestamp = ktime_get_ns();
vbuf->vb.sequence = fimc->frame_count++; vbuf->vb.sequence = fimc->frame_count++;
flite_hw_mask_dma_buffer(fimc, vbuf->index); flite_hw_mask_dma_buffer(fimc, vbuf->index);
vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -132,7 +132,7 @@ static void fimc_device_run(void *priv)
if (ret) if (ret)
goto dma_unlock; goto dma_unlock;
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_vb->flags |= dst_vb->flags |=
src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;

View File

@ -207,7 +207,7 @@ static void dma_callback(void *data)
src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx); src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx);
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_vb->flags |= dst_vb->flags |=
src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;

View File

@ -226,7 +226,7 @@ static void mcam_buffer_done(struct mcam_camera *cam, int frame,
vbuf->vb2_buf.planes[0].bytesused = cam->pix_format.sizeimage; vbuf->vb2_buf.planes[0].bytesused = cam->pix_format.sizeimage;
vbuf->sequence = cam->buf_seq[frame]; vbuf->sequence = cam->buf_seq[frame];
vbuf->field = V4L2_FIELD_NONE; vbuf->field = V4L2_FIELD_NONE;
v4l2_get_timestamp(&vbuf->timestamp); vbuf->vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&vbuf->vb2_buf, 0, cam->pix_format.sizeimage); vb2_set_plane_payload(&vbuf->vb2_buf, 0, cam->pix_format.sizeimage);
vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -375,7 +375,7 @@ static irqreturn_t emmaprp_irq(int irq_emma, void *data)
src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx); src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx);
dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
dst_vb->flags &= dst_vb->flags &=
~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_vb->flags |= dst_vb->flags |=

View File

@ -466,7 +466,7 @@ struct isp_buffer *omap3isp_video_buffer_next(struct isp_video *video)
list_del(&buf->irqlist); list_del(&buf->irqlist);
spin_unlock_irqrestore(&video->irqlock, flags); spin_unlock_irqrestore(&video->irqlock, flags);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
/* Do frame number propagation only if this is the output video node. /* Do frame number propagation only if this is the output video node.
* Frame number either comes from the CSI receivers or it gets * Frame number either comes from the CSI receivers or it gets

View File

@ -1565,7 +1565,7 @@ static irqreturn_t jpu_irq_handler(int irq, void *dev_id)
} }
dst_buf->field = src_buf->field; dst_buf->field = src_buf->field;
dst_buf->timestamp = src_buf->timestamp; dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
if (src_buf->flags & V4L2_BUF_FLAG_TIMECODE) if (src_buf->flags & V4L2_BUF_FLAG_TIMECODE)
dst_buf->timecode = src_buf->timecode; dst_buf->timecode = src_buf->timecode;
dst_buf->flags = src_buf->flags & dst_buf->flags = src_buf->flags &

View File

@ -338,7 +338,7 @@ irqreturn_t s3c_camif_irq_handler(int irq, void *priv)
if (!WARN_ON(vbuf == NULL)) { if (!WARN_ON(vbuf == NULL)) {
/* Dequeue a filled buffer */ /* Dequeue a filled buffer */
v4l2_get_timestamp(&vbuf->vb.timestamp); vbuf->vb.vb2_buf.timestamp = ktime_get_ns();
vbuf->vb.sequence = vp->frame_sequence++; vbuf->vb.sequence = vp->frame_sequence++;
vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -552,7 +552,7 @@ static irqreturn_t g2d_isr(int irq, void *prv)
BUG_ON(dst == NULL); BUG_ON(dst == NULL);
dst->timecode = src->timecode; dst->timecode = src->timecode;
dst->timestamp = src->timestamp; dst->vb2_buf.timestamp = src->vb2_buf.timestamp;
dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst->flags |= dst->flags |=
src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;

View File

@ -2620,7 +2620,7 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
} }
dst_buf->timecode = src_buf->timecode; dst_buf->timecode = src_buf->timecode;
dst_buf->timestamp = src_buf->timestamp; dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_buf->flags |= dst_buf->flags |=
src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
@ -2751,7 +2751,7 @@ static irqreturn_t exynos3250_jpeg_irq(int irq, void *dev_id)
dst_buf = v4l2_m2m_dst_buf_remove(curr_ctx->fh.m2m_ctx); dst_buf = v4l2_m2m_dst_buf_remove(curr_ctx->fh.m2m_ctx);
dst_buf->timecode = src_buf->timecode; dst_buf->timecode = src_buf->timecode;
dst_buf->timestamp = src_buf->timestamp; dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
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)

View File

@ -233,8 +233,8 @@ static void s5p_mfc_handle_frame_copy_time(struct s5p_mfc_ctx *ctx)
== dec_y_addr) { == dec_y_addr) {
dst_buf->b->timecode = dst_buf->b->timecode =
src_buf->b->timecode; src_buf->b->timecode;
dst_buf->b->timestamp = dst_buf->b->vb2_buf.timestamp =
src_buf->b->timestamp; src_buf->b->vb2_buf.timestamp;
dst_buf->b->flags &= dst_buf->b->flags &=
~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_buf->b->flags |= dst_buf->b->flags |=

View File

@ -1094,7 +1094,7 @@ static irqreturn_t sh_veu_isr(int irq, void *dev_id)
if (!src || !dst) if (!src || !dst)
return IRQ_NONE; return IRQ_NONE;
dst->timestamp = src->timestamp; dst->vb2_buf.timestamp = src->vb2_buf.timestamp;
dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst->flags |= dst->flags |=
src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;

View File

@ -1070,7 +1070,7 @@ static irqreturn_t sh_vou_isr(int irq, void *dev_id)
list_del(&vb->list); list_del(&vb->list);
v4l2_get_timestamp(&vb->vb.timestamp); vb->vb.vb2_buf.timestamp = ktime_get_ns();
vb->vb.sequence = vou_dev->sequence++; vb->vb.sequence = vou_dev->sequence++;
vb->vb.field = V4L2_FIELD_INTERLACED; vb->vb.field = V4L2_FIELD_INTERLACED;
vb2_buffer_done(&vb->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vb->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -214,7 +214,7 @@ static irqreturn_t atmel_isi_handle_streaming(struct atmel_isi *isi)
struct frame_buffer *buf = isi->active; struct frame_buffer *buf = isi->active;
list_del_init(&buf->list); list_del_init(&buf->list);
v4l2_get_timestamp(&vbuf->timestamp); vbuf->vb2_buf.timestamp = ktime_get_ns();
vbuf->sequence = isi->sequence++; vbuf->sequence = isi->sequence++;
vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -1345,7 +1345,7 @@ static void mx27_camera_frame_done_emma(struct mx2_camera_dev *pcdev,
vb2_get_plane_payload(vb, 0)); vb2_get_plane_payload(vb, 0));
list_del_init(&buf->internal.queue); list_del_init(&buf->internal.queue);
v4l2_get_timestamp(&vbuf->timestamp); vb->timestamp = ktime_get_ns();
vbuf->sequence = pcdev->frame_count; vbuf->sequence = pcdev->frame_count;
if (err) if (err)
vb2_buffer_done(vb, VB2_BUF_STATE_ERROR); vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);

View File

@ -155,7 +155,7 @@ static void mx3_cam_dma_done(void *arg)
struct mx3_camera_buffer *buf = to_mx3_vb(vb); struct mx3_camera_buffer *buf = to_mx3_vb(vb);
list_del_init(&buf->queue); list_del_init(&buf->queue);
v4l2_get_timestamp(&vb->timestamp); vb->vb2_buf.timestamp = ktime_get_ns();
vb->field = mx3_cam->field; vb->field = mx3_cam->field;
vb->sequence = mx3_cam->sequence++; vb->sequence = mx3_cam->sequence++;
vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -888,7 +888,7 @@ static irqreturn_t rcar_vin_irq(int irq, void *data)
priv->queue_buf[slot]->field = priv->field; priv->queue_buf[slot]->field = priv->field;
priv->queue_buf[slot]->sequence = priv->sequence++; priv->queue_buf[slot]->sequence = priv->sequence++;
v4l2_get_timestamp(&priv->queue_buf[slot]->timestamp); priv->queue_buf[slot]->vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&priv->queue_buf[slot]->vb2_buf, vb2_buffer_done(&priv->queue_buf[slot]->vb2_buf,
VB2_BUF_STATE_DONE); VB2_BUF_STATE_DONE);
priv->queue_buf[slot] = NULL; priv->queue_buf[slot] = NULL;

View File

@ -510,7 +510,7 @@ static irqreturn_t sh_mobile_ceu_irq(int irq, void *data)
pcdev->active = NULL; pcdev->active = NULL;
ret = sh_mobile_ceu_capture(pcdev); ret = sh_mobile_ceu_capture(pcdev);
v4l2_get_timestamp(&vbuf->timestamp); vbuf->vb2_buf.timestamp = ktime_get_ns();
if (!ret) { if (!ret) {
vbuf->field = pcdev->field; vbuf->field = pcdev->field;
vbuf->sequence = pcdev->sequence++; vbuf->sequence = pcdev->sequence++;

View File

@ -191,7 +191,7 @@ static void bdisp_job_finish(struct bdisp_ctx *ctx, int vb_state)
dst_vb = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
if (src_vb && dst_vb) { if (src_vb && dst_vb) {
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
dst_vb->timecode = src_vb->timecode; dst_vb->timecode = src_vb->timecode;
dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
dst_vb->flags |= src_vb->flags & dst_vb->flags |= src_vb->flags &
@ -297,7 +297,7 @@ static int bdisp_get_bufs(struct bdisp_ctx *ctx)
if (ret) if (ret)
return ret; return ret;
dst_vb->timestamp = src_vb->timestamp; dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
return 0; return 0;
} }

View File

@ -1288,7 +1288,7 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
d_vb = ctx->dst_vb; d_vb = ctx->dst_vb;
d_vb->flags = s_vb->flags; d_vb->flags = s_vb->flags;
d_vb->timestamp = s_vb->timestamp; d_vb->vb2_buf.timestamp = s_vb->vb2_buf.timestamp;
if (s_vb->flags & V4L2_BUF_FLAG_TIMECODE) if (s_vb->flags & V4L2_BUF_FLAG_TIMECODE)
d_vb->timecode = s_vb->timecode; d_vb->timecode = s_vb->timecode;

View File

@ -235,7 +235,7 @@ static int device_process(struct vim2m_ctx *ctx,
out_vb->sequence = out_vb->sequence =
get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE)->sequence++; get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE)->sequence++;
in_vb->sequence = q_data->sequence++; in_vb->sequence = q_data->sequence++;
out_vb->timestamp = in_vb->timestamp; out_vb->vb2_buf.timestamp = in_vb->vb2_buf.timestamp;
if (in_vb->flags & V4L2_BUF_FLAG_TIMECODE) if (in_vb->flags & V4L2_BUF_FLAG_TIMECODE)
out_vb->timecode = in_vb->timecode; out_vb->timecode = in_vb->timecode;

View File

@ -286,7 +286,7 @@ struct vivid_dev {
bool dqbuf_error; bool dqbuf_error;
bool seq_wrap; bool seq_wrap;
bool time_wrap; bool time_wrap;
__kernel_time_t time_wrap_offset; u64 time_wrap_offset;
unsigned perc_dropped_buffers; unsigned perc_dropped_buffers;
enum vivid_signal_mode std_signal_mode; enum vivid_signal_mode std_signal_mode;
unsigned query_std_last; unsigned query_std_last;

View File

@ -954,7 +954,7 @@ static const struct v4l2_ctrl_config vivid_ctrl_has_scaler_out = {
static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl) static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl)
{ {
struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming); struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming);
struct timeval tv; u64 rem;
switch (ctrl->id) { switch (ctrl->id) {
case VIVID_CID_DQBUF_ERROR: case VIVID_CID_DQBUF_ERROR:
@ -993,8 +993,16 @@ static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl)
dev->time_wrap_offset = 0; dev->time_wrap_offset = 0;
break; break;
} }
v4l2_get_timestamp(&tv); /*
dev->time_wrap_offset = -tv.tv_sec - 16; * We want to set the time 16 seconds before the 32 bit tv_sec
* value of struct timeval would wrap around. So first we
* calculate ktime_get_ns() % ((1 << 32) * NSEC_PER_SEC), and
* then we set the offset to ((1 << 32) - 16) * NSEC_PER_SEC).
*/
div64_u64_rem(ktime_get_ns(),
0x100000000ULL * NSEC_PER_SEC, &rem);
dev->time_wrap_offset =
(0x100000000ULL - 16) * NSEC_PER_SEC - rem;
break; break;
} }
return 0; return 0;

View File

@ -441,7 +441,7 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
* "Start of Exposure". * "Start of Exposure".
*/ */
if (dev->tstamp_src_is_soe) if (dev->tstamp_src_is_soe)
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
if (dev->field_cap == V4L2_FIELD_ALTERNATE) { if (dev->field_cap == V4L2_FIELD_ALTERNATE) {
/* /*
* 60 Hz standards start with the bottom field, 50 Hz standards * 60 Hz standards start with the bottom field, 50 Hz standards
@ -558,8 +558,8 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
* the timestamp now. * the timestamp now.
*/ */
if (!dev->tstamp_src_is_soe) if (!dev->tstamp_src_is_soe)
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.timestamp.tv_sec += dev->time_wrap_offset; buf->vb.vb2_buf.timestamp += dev->time_wrap_offset;
} }
/* /*

View File

@ -95,8 +95,8 @@ static void vivid_thread_vid_out_tick(struct vivid_dev *dev)
*/ */
vid_out_buf->vb.sequence /= 2; vid_out_buf->vb.sequence /= 2;
} }
v4l2_get_timestamp(&vid_out_buf->vb.timestamp); vid_out_buf->vb.vb2_buf.timestamp =
vid_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset; ktime_get_ns() + dev->time_wrap_offset;
vb2_buffer_done(&vid_out_buf->vb.vb2_buf, dev->dqbuf_error ? vb2_buffer_done(&vid_out_buf->vb.vb2_buf, dev->dqbuf_error ?
VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
dprintk(dev, 2, "vid_out buffer %d done\n", dprintk(dev, 2, "vid_out buffer %d done\n",
@ -108,8 +108,8 @@ static void vivid_thread_vid_out_tick(struct vivid_dev *dev)
vivid_sliced_vbi_out_process(dev, vbi_out_buf); vivid_sliced_vbi_out_process(dev, vbi_out_buf);
vbi_out_buf->vb.sequence = dev->vbi_out_seq_count; vbi_out_buf->vb.sequence = dev->vbi_out_seq_count;
v4l2_get_timestamp(&vbi_out_buf->vb.timestamp); vbi_out_buf->vb.vb2_buf.timestamp =
vbi_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset; ktime_get_ns() + dev->time_wrap_offset;
vb2_buffer_done(&vbi_out_buf->vb.vb2_buf, dev->dqbuf_error ? vb2_buffer_done(&vbi_out_buf->vb.vb2_buf, dev->dqbuf_error ?
VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
dprintk(dev, 2, "vbi_out buffer %d done\n", dprintk(dev, 2, "vbi_out buffer %d done\n",

View File

@ -117,8 +117,8 @@ static void vivid_thread_sdr_cap_tick(struct vivid_dev *dev)
if (sdr_cap_buf) { if (sdr_cap_buf) {
sdr_cap_buf->vb.sequence = dev->sdr_cap_seq_count; sdr_cap_buf->vb.sequence = dev->sdr_cap_seq_count;
vivid_sdr_cap_process(dev, sdr_cap_buf); vivid_sdr_cap_process(dev, sdr_cap_buf);
v4l2_get_timestamp(&sdr_cap_buf->vb.timestamp); sdr_cap_buf->vb.vb2_buf.timestamp =
sdr_cap_buf->vb.timestamp.tv_sec += dev->time_wrap_offset; ktime_get_ns() + dev->time_wrap_offset;
vb2_buffer_done(&sdr_cap_buf->vb.vb2_buf, dev->dqbuf_error ? vb2_buffer_done(&sdr_cap_buf->vb.vb2_buf, dev->dqbuf_error ?
VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
dev->dqbuf_error = false; dev->dqbuf_error = false;

View File

@ -108,8 +108,7 @@ void vivid_raw_vbi_cap_process(struct vivid_dev *dev, struct vivid_buffer *buf)
if (!VIVID_INVALID_SIGNAL(dev->std_signal_mode)) if (!VIVID_INVALID_SIGNAL(dev->std_signal_mode))
vivid_vbi_gen_raw(&dev->vbi_gen, &vbi, vbuf); vivid_vbi_gen_raw(&dev->vbi_gen, &vbi, vbuf);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns() + dev->time_wrap_offset;
buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
} }
@ -133,8 +132,7 @@ void vivid_sliced_vbi_cap_process(struct vivid_dev *dev,
vbuf[i] = dev->vbi_gen.data[i]; vbuf[i] = dev->vbi_gen.data[i];
} }
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns() + dev->time_wrap_offset;
buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
} }
static int vbi_cap_queue_setup(struct vb2_queue *vq, static int vbi_cap_queue_setup(struct vb2_queue *vq,

View File

@ -582,7 +582,7 @@ vsp1_video_complete_buffer(struct vsp1_video *video)
spin_unlock_irqrestore(&video->irqlock, flags); spin_unlock_irqrestore(&video->irqlock, flags);
done->buf.sequence = video->sequence++; done->buf.sequence = video->sequence++;
v4l2_get_timestamp(&done->buf.timestamp); done->buf.vb2_buf.timestamp = ktime_get_ns();
for (i = 0; i < done->buf.vb2_buf.num_planes; ++i) for (i = 0; i < done->buf.vb2_buf.num_planes; ++i)
vb2_set_plane_payload(&done->buf.vb2_buf, i, done->length[i]); vb2_set_plane_payload(&done->buf.vb2_buf, i, done->length[i]);
vb2_buffer_done(&done->buf.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&done->buf.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -303,7 +303,7 @@ static void xvip_dma_complete(void *param)
buf->buf.field = V4L2_FIELD_NONE; buf->buf.field = V4L2_FIELD_NONE;
buf->buf.sequence = dma->sequence++; buf->buf.sequence = dma->sequence++;
v4l2_get_timestamp(&buf->buf.timestamp); buf->buf.vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&buf->buf.vb2_buf, 0, dma->format.sizeimage); vb2_set_plane_payload(&buf->buf.vb2_buf, 0, dma->format.sizeimage);
vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -316,7 +316,7 @@ static void airspy_urb_complete(struct urb *urb)
len = airspy_convert_stream(s, ptr, urb->transfer_buffer, len = airspy_convert_stream(s, ptr, urb->transfer_buffer,
urb->actual_length); urb->actual_length);
vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len); vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
v4l2_get_timestamp(&fbuf->vb.timestamp); fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
fbuf->vb.sequence = s->sequence++; fbuf->vb.sequence = s->sequence++;
vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -314,7 +314,7 @@ static inline void buffer_filled(struct au0828_dev *dev,
vb->sequence = dev->vbi_frame_count++; vb->sequence = dev->vbi_frame_count++;
vb->field = V4L2_FIELD_INTERLACED; vb->field = V4L2_FIELD_INTERLACED;
v4l2_get_timestamp(&vb->timestamp); vb->vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -438,7 +438,7 @@ static inline void finish_buffer(struct em28xx *dev,
buf->vb.field = V4L2_FIELD_NONE; buf->vb.field = V4L2_FIELD_NONE;
else else
buf->vb.field = V4L2_FIELD_INTERLACED; buf->vb.field = V4L2_FIELD_INTERLACED;
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }

View File

@ -466,7 +466,7 @@ static struct go7007_buffer *frame_boundary(struct go7007 *go, struct go7007_buf
else else
go7007_set_motion_regions(go, vb, 0); go7007_set_motion_regions(go, vb, 0);
v4l2_get_timestamp(&vb->vb.timestamp); vb->vb.vb2_buf.timestamp = ktime_get_ns();
vb_tmp = vb; vb_tmp = vb;
spin_lock(&go->spinlock); spin_lock(&go->spinlock);
list_del(&vb->list); list_del(&vb->list);

View File

@ -517,7 +517,7 @@ static void hackrf_urb_complete_in(struct urb *urb)
urb->transfer_buffer, len); urb->transfer_buffer, len);
vb2_set_plane_payload(&buffer->vb.vb2_buf, 0, len); vb2_set_plane_payload(&buffer->vb.vb2_buf, 0, len);
buffer->vb.sequence = dev->sequence++; buffer->vb.sequence = dev->sequence++;
v4l2_get_timestamp(&buffer->vb.timestamp); buffer->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE);
exit_usb_submit_urb: exit_usb_submit_urb:
usb_submit_urb(urb, GFP_ATOMIC); usb_submit_urb(urb, GFP_ATOMIC);
@ -562,7 +562,7 @@ static void hackrf_urb_complete_out(struct urb *urb)
vb2_plane_vaddr(&buffer->vb.vb2_buf, 0), len); vb2_plane_vaddr(&buffer->vb.vb2_buf, 0), len);
urb->actual_length = len; urb->actual_length = len;
buffer->vb.sequence = dev->sequence++; buffer->vb.sequence = dev->sequence++;
v4l2_get_timestamp(&buffer->vb.timestamp); buffer->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE);
exit_usb_submit_urb: exit_usb_submit_urb:
usb_submit_urb(urb, GFP_ATOMIC); usb_submit_urb(urb, GFP_ATOMIC);

View File

@ -316,8 +316,7 @@ static void pwc_isoc_handler(struct urb *urb)
struct pwc_frame_buf *fbuf = pdev->fill_buf; struct pwc_frame_buf *fbuf = pdev->fill_buf;
if (pdev->vsync == 1) { if (pdev->vsync == 1) {
v4l2_get_timestamp( fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
&fbuf->vb.timestamp);
pdev->vsync = 2; pdev->vsync = 2;
} }

View File

@ -574,7 +574,7 @@ static void s2255_got_frame(struct s2255_vc *vc, int jpgsize)
buf = list_entry(vc->buf_list.next, buf = list_entry(vc->buf_list.next,
struct s2255_buffer, list); struct s2255_buffer, list);
list_del(&buf->list); list_del(&buf->list);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
buf->vb.field = vc->field; buf->vb.field = vc->field;
buf->vb.sequence = vc->frame_count; buf->vb.sequence = vc->frame_count;
spin_unlock_irqrestore(&vc->qlock, flags); spin_unlock_irqrestore(&vc->qlock, flags);

View File

@ -99,7 +99,7 @@ void stk1160_buffer_done(struct stk1160 *dev)
buf->vb.sequence = dev->sequence++; buf->vb.sequence = dev->sequence++;
buf->vb.field = V4L2_FIELD_INTERLACED; buf->vb.field = V4L2_FIELD_INTERLACED;
buf->vb.vb2_buf.planes[0].bytesused = buf->bytesused; buf->vb.vb2_buf.planes[0].bytesused = buf->bytesused;
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->bytesused); vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->bytesused);
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -322,7 +322,7 @@ static void usbtv_image_chunk(struct usbtv *usbtv, __be32 *chunk)
buf->vb.field = V4L2_FIELD_INTERLACED; buf->vb.field = V4L2_FIELD_INTERLACED;
buf->vb.sequence = usbtv->sequence++; buf->vb.sequence = usbtv->sequence++;
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size); vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
vb2_buffer_done(&buf->vb.vb2_buf, state); vb2_buffer_done(&buf->vb.vb2_buf, state);
list_del(&buf->list); list_del(&buf->list);

View File

@ -694,19 +694,16 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
ts.tv_nsec -= NSEC_PER_SEC; ts.tv_nsec -= NSEC_PER_SEC;
} }
uvc_trace(UVC_TRACE_CLOCK, "%s: SOF %u.%06llu y %llu ts %lu.%06lu " uvc_trace(UVC_TRACE_CLOCK, "%s: SOF %u.%06llu y %llu ts %llu "
"buf ts %lu.%06lu (x1 %u/%u/%u x2 %u/%u/%u y1 %u y2 %u)\n", "buf ts %llu (x1 %u/%u/%u x2 %u/%u/%u y1 %u y2 %u)\n",
stream->dev->name, stream->dev->name,
sof >> 16, div_u64(((u64)sof & 0xffff) * 1000000LLU, 65536), sof >> 16, div_u64(((u64)sof & 0xffff) * 1000000LLU, 65536),
y, ts.tv_sec, ts.tv_nsec / NSEC_PER_USEC, y, timespec_to_ns(&ts), vbuf->vb2_buf.timestamp,
vbuf->timestamp.tv_sec,
(unsigned long)vbuf->timestamp.tv_usec,
x1, first->host_sof, first->dev_sof, x1, first->host_sof, first->dev_sof,
x2, last->host_sof, last->dev_sof, y1, y2); x2, last->host_sof, last->dev_sof, y1, y2);
/* Update the V4L2 buffer. */ /* Update the V4L2 buffer. */
vbuf->timestamp.tv_sec = ts.tv_sec; vbuf->vb2_buf.timestamp = timespec_to_ns(&ts);
vbuf->timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
done: done:
spin_unlock_irqrestore(&stream->clock.lock, flags); spin_unlock_irqrestore(&stream->clock.lock, flags);
@ -1034,9 +1031,7 @@ static int uvc_video_decode_start(struct uvc_streaming *stream,
buf->buf.field = V4L2_FIELD_NONE; buf->buf.field = V4L2_FIELD_NONE;
buf->buf.sequence = stream->sequence; buf->buf.sequence = stream->sequence;
buf->buf.timestamp.tv_sec = ts.tv_sec; buf->buf.vb2_buf.timestamp = timespec_to_ns(&ts);
buf->buf.timestamp.tv_usec =
ts.tv_nsec / NSEC_PER_USEC;
/* TODO: Handle PTS and SCR. */ /* TODO: Handle PTS and SCR. */
buf->state = UVC_BUF_STATE_ACTIVE; buf->state = UVC_BUF_STATE_ACTIVE;

View File

@ -120,7 +120,7 @@ static int __set_timestamp(struct vb2_buffer *vb, const void *pb)
*/ */
if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) ==
V4L2_BUF_FLAG_TIMESTAMP_COPY) V4L2_BUF_FLAG_TIMESTAMP_COPY)
vbuf->timestamp = b->timestamp; vb->timestamp = timeval_to_ns(&b->timestamp);
vbuf->flags |= b->flags & V4L2_BUF_FLAG_TIMECODE; vbuf->flags |= b->flags & V4L2_BUF_FLAG_TIMECODE;
if (b->flags & V4L2_BUF_FLAG_TIMECODE) if (b->flags & V4L2_BUF_FLAG_TIMECODE)
vbuf->timecode = b->timecode; vbuf->timecode = b->timecode;
@ -191,7 +191,7 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
b->flags = vbuf->flags; b->flags = vbuf->flags;
b->field = vbuf->field; b->field = vbuf->field;
b->timestamp = vbuf->timestamp; b->timestamp = ns_to_timeval(vb->timestamp);
b->timecode = vbuf->timecode; b->timecode = vbuf->timecode;
b->sequence = vbuf->sequence; b->sequence = vbuf->sequence;
b->reserved2 = 0; b->reserved2 = 0;
@ -308,8 +308,7 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
"for an output buffer\n"); "for an output buffer\n");
return -EINVAL; return -EINVAL;
} }
vbuf->timestamp.tv_sec = 0; vb->timestamp = 0;
vbuf->timestamp.tv_usec = 0;
vbuf->sequence = 0; vbuf->sequence = 0;
if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) { if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {

View File

@ -470,7 +470,7 @@ void vpfe_video_process_buffer_complete(struct vpfe_video_device *video)
{ {
struct vpfe_pipeline *pipe = &video->pipe; struct vpfe_pipeline *pipe = &video->pipe;
v4l2_get_timestamp(&video->cur_frm->vb.timestamp); video->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
vb2_buffer_done(&video->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&video->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
if (pipe->state == VPFE_PIPELINE_STREAM_CONTINUOUS) if (pipe->state == VPFE_PIPELINE_STREAM_CONTINUOUS)
video->cur_frm = video->next_frm; video->cur_frm = video->next_frm;

View File

@ -433,7 +433,7 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
list_del(&buf->list); list_del(&buf->list);
spin_unlock_irqrestore(&video->qlock, flags); spin_unlock_irqrestore(&video->qlock, flags);
v4l2_get_timestamp(&buf->vb.timestamp); buf->vb.vb2_buf.timestamp = ktime_get_ns();
/* Do frame number propagation only if this is the output video node. /* Do frame number propagation only if this is the output video node.
* Frame number either comes from the CSI receivers or it gets * Frame number either comes from the CSI receivers or it gets

View File

@ -329,7 +329,7 @@ struct uvc_buffer *uvcg_queue_next_buffer(struct uvc_video_queue *queue,
buf->buf.field = V4L2_FIELD_NONE; buf->buf.field = V4L2_FIELD_NONE;
buf->buf.sequence = queue->sequence++; buf->buf.sequence = queue->sequence++;
v4l2_get_timestamp(&buf->buf.timestamp); buf->buf.vb2_buf.timestamp = ktime_get_ns();
vb2_set_plane_payload(&buf->buf.vb2_buf, 0, buf->bytesused); vb2_set_plane_payload(&buf->buf.vb2_buf, 0, buf->bytesused);
vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE);

View File

@ -211,6 +211,7 @@ struct vb2_queue;
* @num_planes: number of planes in the buffer * @num_planes: number of planes in the buffer
* on an internal driver queue * on an internal driver queue
* @planes: private per-plane information; do not change * @planes: private per-plane information; do not change
* @timestamp: frame timestamp in ns
*/ */
struct vb2_buffer { struct vb2_buffer {
struct vb2_queue *vb2_queue; struct vb2_queue *vb2_queue;
@ -219,6 +220,7 @@ struct vb2_buffer {
unsigned int memory; unsigned int memory;
unsigned int num_planes; unsigned int num_planes;
struct vb2_plane planes[VB2_MAX_PLANES]; struct vb2_plane planes[VB2_MAX_PLANES];
u64 timestamp;
/* private: internal use only /* private: internal use only
* *

View File

@ -28,7 +28,6 @@
* @vb2_buf: video buffer 2 * @vb2_buf: video buffer 2
* @flags: buffer informational flags * @flags: buffer informational flags
* @field: enum v4l2_field; field order of the image in the buffer * @field: enum v4l2_field; field order of the image in the buffer
* @timestamp: frame timestamp
* @timecode: frame timecode * @timecode: frame timecode
* @sequence: sequence count of this frame * @sequence: sequence count of this frame
* Should contain enough information to be able to cover all the fields * Should contain enough information to be able to cover all the fields
@ -39,7 +38,6 @@ struct vb2_v4l2_buffer {
__u32 flags; __u32 flags;
__u32 field; __u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode; struct v4l2_timecode timecode;
__u32 sequence; __u32 sequence;
}; };

View File

@ -184,7 +184,7 @@ DECLARE_EVENT_CLASS(vb2_v4l2_event_class,
__field(int, minor) __field(int, minor)
__field(u32, flags) __field(u32, flags)
__field(u32, field) __field(u32, field)
__field(s64, timestamp) __field(u64, timestamp)
__field(u32, timecode_type) __field(u32, timecode_type)
__field(u32, timecode_flags) __field(u32, timecode_flags)
__field(u8, timecode_frames) __field(u8, timecode_frames)
@ -205,7 +205,7 @@ DECLARE_EVENT_CLASS(vb2_v4l2_event_class,
__entry->minor = owner ? owner->vdev->minor : -1; __entry->minor = owner ? owner->vdev->minor : -1;
__entry->flags = vbuf->flags; __entry->flags = vbuf->flags;
__entry->field = vbuf->field; __entry->field = vbuf->field;
__entry->timestamp = timeval_to_ns(&vbuf->timestamp); __entry->timestamp = vb->timestamp;
__entry->timecode_type = vbuf->timecode.type; __entry->timecode_type = vbuf->timecode.type;
__entry->timecode_flags = vbuf->timecode.flags; __entry->timecode_flags = vbuf->timecode.flags;
__entry->timecode_frames = vbuf->timecode.frames; __entry->timecode_frames = vbuf->timecode.frames;

View File

@ -18,6 +18,7 @@ DECLARE_EVENT_CLASS(vb2_event_class,
__field(u32, index) __field(u32, index)
__field(u32, type) __field(u32, type)
__field(u32, bytesused) __field(u32, bytesused)
__field(u64, timestamp)
), ),
TP_fast_assign( TP_fast_assign(
@ -28,14 +29,16 @@ DECLARE_EVENT_CLASS(vb2_event_class,
__entry->index = vb->index; __entry->index = vb->index;
__entry->type = vb->type; __entry->type = vb->type;
__entry->bytesused = vb->planes[0].bytesused; __entry->bytesused = vb->planes[0].bytesused;
__entry->timestamp = vb->timestamp;
), ),
TP_printk("owner = %p, queued = %u, owned_by_drv = %d, index = %u, " TP_printk("owner = %p, queued = %u, owned_by_drv = %d, index = %u, "
"type = %u, bytesused = %u", __entry->owner, "type = %u, bytesused = %u, timestamp = %llu", __entry->owner,
__entry->queued_count, __entry->queued_count,
__entry->owned_by_drv_count, __entry->owned_by_drv_count,
__entry->index, __entry->type, __entry->index, __entry->type,
__entry->bytesused __entry->bytesused,
__entry->timestamp
) )
) )