[media] use v4l2_get_timestamp where possible
This is a preparation for a change to the type of v4l2 timestamps. v4l2_get_timestamp() is a helper function that reads the monotonic time and stores it into a 'struct timeval'. Multiple drivers implement the same thing themselves for historic reasons. Changing them all to use v4l2_get_timestamp() is more consistent and reduces the amount of code duplication, and most importantly simplifies the following changes. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> [hans.verkuil@cisco.com: dropped the v4l2-dev.c patch that didn't belong here] Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Родитель
2ef3b6fe9e
Коммит
5ba0e2c3ad
|
@ -3625,13 +3625,10 @@ static void
|
||||||
bttv_irq_wakeup_vbi(struct bttv *btv, struct bttv_buffer *wakeup,
|
bttv_irq_wakeup_vbi(struct bttv *btv, struct bttv_buffer *wakeup,
|
||||||
unsigned int state)
|
unsigned int state)
|
||||||
{
|
{
|
||||||
struct timeval ts;
|
|
||||||
|
|
||||||
if (NULL == wakeup)
|
if (NULL == wakeup)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
v4l2_get_timestamp(&ts);
|
v4l2_get_timestamp(&wakeup->vb.ts);
|
||||||
wakeup->vb.ts = ts;
|
|
||||||
wakeup->vb.field_count = btv->field_count;
|
wakeup->vb.field_count = btv->field_count;
|
||||||
wakeup->vb.state = state;
|
wakeup->vb.state = state;
|
||||||
wake_up(&wakeup->vb.done);
|
wake_up(&wakeup->vb.done);
|
||||||
|
|
|
@ -202,7 +202,7 @@ static void cx18_mdl_send_to_videobuf(struct cx18_stream *s,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dispatch) {
|
if (dispatch) {
|
||||||
vb_buf->vb.ts = ktime_to_timeval(ktime_get());
|
v4l2_get_timestamp(&vb_buf->vb.ts);
|
||||||
list_del(&vb_buf->vb.queue);
|
list_del(&vb_buf->vb.queue);
|
||||||
vb_buf->vb.state = VIDEOBUF_DONE;
|
vb_buf->vb.state = VIDEOBUF_DONE;
|
||||||
wake_up(&vb_buf->vb.done);
|
wake_up(&vb_buf->vb.done);
|
||||||
|
|
|
@ -254,8 +254,6 @@ static irqreturn_t flite_irq_handler(int irq, void *priv)
|
||||||
struct fimc_lite *fimc = priv;
|
struct fimc_lite *fimc = priv;
|
||||||
struct flite_buffer *vbuf;
|
struct flite_buffer *vbuf;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct timeval *tv;
|
|
||||||
struct timespec ts;
|
|
||||||
u32 intsrc;
|
u32 intsrc;
|
||||||
|
|
||||||
spin_lock_irqsave(&fimc->slock, flags);
|
spin_lock_irqsave(&fimc->slock, flags);
|
||||||
|
@ -294,10 +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);
|
||||||
ktime_get_ts(&ts);
|
v4l2_get_timestamp(&vbuf->vb.v4l2_buf.timestamp);
|
||||||
tv = &vbuf->vb.v4l2_buf.timestamp;
|
|
||||||
tv->tv_sec = ts.tv_sec;
|
|
||||||
tv->tv_usec = ts.tv_nsec / NSEC_PER_USEC;
|
|
||||||
vbuf->vb.v4l2_buf.sequence = fimc->frame_count++;
|
vbuf->vb.v4l2_buf.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_STATE_DONE);
|
vb2_buffer_done(&vbuf->vb, VB2_BUF_STATE_DONE);
|
||||||
|
|
|
@ -235,7 +235,7 @@ static int isp_stat_buf_queue(struct ispstat *stat)
|
||||||
if (!stat->active_buf)
|
if (!stat->active_buf)
|
||||||
return STAT_NO_BUF;
|
return STAT_NO_BUF;
|
||||||
|
|
||||||
ktime_get_ts(&stat->active_buf->ts);
|
v4l2_get_timestamp(&stat->active_buf->ts);
|
||||||
|
|
||||||
stat->active_buf->buf_size = stat->buf_size;
|
stat->active_buf->buf_size = stat->buf_size;
|
||||||
if (isp_stat_buf_check_magic(stat, stat->active_buf)) {
|
if (isp_stat_buf_check_magic(stat, stat->active_buf)) {
|
||||||
|
@ -496,8 +496,7 @@ int omap3isp_stat_request_statistics(struct ispstat *stat,
|
||||||
return PTR_ERR(buf);
|
return PTR_ERR(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
data->ts.tv_sec = buf->ts.tv_sec;
|
data->ts = buf->ts;
|
||||||
data->ts.tv_usec = buf->ts.tv_nsec / NSEC_PER_USEC;
|
|
||||||
data->config_counter = buf->config_counter;
|
data->config_counter = buf->config_counter;
|
||||||
data->frame_number = buf->frame_number;
|
data->frame_number = buf->frame_number;
|
||||||
data->buf_size = buf->buf_size;
|
data->buf_size = buf->buf_size;
|
||||||
|
|
|
@ -39,7 +39,7 @@ struct ispstat_buffer {
|
||||||
struct sg_table sgt;
|
struct sg_table sgt;
|
||||||
void *virt_addr;
|
void *virt_addr;
|
||||||
dma_addr_t dma_addr;
|
dma_addr_t dma_addr;
|
||||||
struct timespec ts;
|
struct timeval ts;
|
||||||
u32 buf_size;
|
u32 buf_size;
|
||||||
u32 frame_number;
|
u32 frame_number;
|
||||||
u16 config_counter;
|
u16 config_counter;
|
||||||
|
|
|
@ -328,23 +328,17 @@ irqreturn_t s3c_camif_irq_handler(int irq, void *priv)
|
||||||
!list_empty(&vp->active_buf_q)) {
|
!list_empty(&vp->active_buf_q)) {
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
struct camif_buffer *vbuf;
|
struct camif_buffer *vbuf;
|
||||||
struct timeval *tv;
|
|
||||||
struct timespec ts;
|
|
||||||
/*
|
/*
|
||||||
* Get previous DMA write buffer index:
|
* Get previous DMA write buffer index:
|
||||||
* 0 => DMA buffer 0, 2;
|
* 0 => DMA buffer 0, 2;
|
||||||
* 1 => DMA buffer 1, 3.
|
* 1 => DMA buffer 1, 3.
|
||||||
*/
|
*/
|
||||||
index = (CISTATUS_FRAMECNT(status) + 2) & 1;
|
index = (CISTATUS_FRAMECNT(status) + 2) & 1;
|
||||||
|
|
||||||
ktime_get_ts(&ts);
|
|
||||||
vbuf = camif_active_queue_peek(vp, index);
|
vbuf = camif_active_queue_peek(vp, index);
|
||||||
|
|
||||||
if (!WARN_ON(vbuf == NULL)) {
|
if (!WARN_ON(vbuf == NULL)) {
|
||||||
/* Dequeue a filled buffer */
|
/* Dequeue a filled buffer */
|
||||||
tv = &vbuf->vb.v4l2_buf.timestamp;
|
v4l2_get_timestamp(&vbuf->vb.v4l2_buf.timestamp);
|
||||||
tv->tv_sec = ts.tv_sec;
|
|
||||||
tv->tv_usec = ts.tv_nsec / NSEC_PER_USEC;
|
|
||||||
vbuf->vb.v4l2_buf.sequence = vp->frame_sequence++;
|
vbuf->vb.v4l2_buf.sequence = vp->frame_sequence++;
|
||||||
vb2_buffer_done(&vbuf->vb, VB2_BUF_STATE_DONE);
|
vb2_buffer_done(&vbuf->vb, VB2_BUF_STATE_DONE);
|
||||||
|
|
||||||
|
|
|
@ -436,7 +436,7 @@ void gspca_frame_add(struct gspca_dev *gspca_dev,
|
||||||
}
|
}
|
||||||
j = gspca_dev->fr_queue[i];
|
j = gspca_dev->fr_queue[i];
|
||||||
frame = &gspca_dev->frame[j];
|
frame = &gspca_dev->frame[j];
|
||||||
frame->v4l2_buf.timestamp = ktime_to_timeval(ktime_get());
|
v4l2_get_timestamp(&frame->v4l2_buf.timestamp);
|
||||||
frame->v4l2_buf.sequence = gspca_dev->sequence++;
|
frame->v4l2_buf.sequence = gspca_dev->sequence++;
|
||||||
gspca_dev->image = frame->data;
|
gspca_dev->image = frame->data;
|
||||||
gspca_dev->image_len = 0;
|
gspca_dev->image_len = 0;
|
||||||
|
@ -1909,7 +1909,7 @@ static ssize_t dev_read(struct file *file, char __user *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get a frame */
|
/* get a frame */
|
||||||
timestamp = ktime_to_timeval(ktime_get());
|
v4l2_get_timestamp(×tamp);
|
||||||
timestamp.tv_sec--;
|
timestamp.tv_sec--;
|
||||||
n = 2;
|
n = 2;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
|
@ -420,7 +420,6 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
|
||||||
enum iss_pipeline_state state;
|
enum iss_pipeline_state state;
|
||||||
struct iss_buffer *buf;
|
struct iss_buffer *buf;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct timespec ts;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&video->qlock, flags);
|
spin_lock_irqsave(&video->qlock, flags);
|
||||||
if (WARN_ON(list_empty(&video->dmaqueue))) {
|
if (WARN_ON(list_empty(&video->dmaqueue))) {
|
||||||
|
@ -433,9 +432,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);
|
||||||
|
|
||||||
ktime_get_ts(&ts);
|
v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
|
||||||
buf->vb.v4l2_buf.timestamp.tv_sec = ts.tv_sec;
|
|
||||||
buf->vb.v4l2_buf.timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
|
|
||||||
|
|
||||||
/* 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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче