Skip to content
This repository was archived by the owner on Mar 22, 2024. It is now read-only.

Commit 8ea1a24

Browse files
committed
* Updating timestamping for V4L cameras
Signed-off-by: Christian Berger <christian.berger@gu.se>
1 parent e5f61ad commit 8ea1a24

File tree

5 files changed

+33
-21
lines changed

5 files changed

+33
-21
lines changed

Dockerfile.aarch64

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ MAINTAINER Christian Berger "christian.berger@gu.se"
1919

2020
RUN [ "cross-build-start" ]
2121

22-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
23-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
24-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
22+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
23+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
2524
apk update && \
2625
apk --no-cache add \
2726
cmake \
@@ -57,9 +56,8 @@ MAINTAINER Christian Berger "christian.berger@gu.se"
5756

5857
RUN [ "cross-build-start" ]
5958

60-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
61-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
62-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
59+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
60+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
6361
apk update && \
6462
apk --no-cache add \
6563
libx11

Dockerfile.amd64

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616
# Part to build opendlv-device-camera-v4l.
1717
FROM alpine:3.7 as builder
1818
MAINTAINER Christian Berger "christian.berger@gu.se"
19-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
20-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
21-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
19+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
20+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
2221
apk update && \
2322
apk --no-cache add \
2423
cmake \
@@ -49,9 +48,8 @@ RUN mkdir build && \
4948
FROM alpine:3.7
5049
MAINTAINER Christian Berger "christian.berger@gu.se"
5150

52-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
53-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
54-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
51+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
52+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
5553
apk update && \
5654
apk --no-cache add \
5755
libx11

Dockerfile.armhf

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ MAINTAINER Christian Berger "christian.berger@gu.se"
1919

2020
RUN [ "cross-build-start" ]
2121

22-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
23-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
24-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
22+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
23+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
2524
apk update && \
2625
apk --no-cache add \
2726
cmake \
@@ -57,9 +56,8 @@ MAINTAINER Christian Berger "christian.berger@gu.se"
5756

5857
RUN [ "cross-build-start" ]
5958

60-
RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
61-
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
62-
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
59+
RUN echo http://dl-4.alpinelinux.org/alpine/v3.8/main > /etc/apk/repositories && \
60+
echo http://dl-4.alpinelinux.org/alpine/v3.8/community >> /etc/apk/repositories && \
6361
apk update && \
6462
apk --no-cache add \
6563
libx11

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ To run this microservice using our pre-built Docker multi-arch images to open
4242
a Video4Linux-supported camera, simply start it as follows:
4343

4444
```
45-
docker run --rm -ti --init --ipc=host -v /tmp:/tmp -e DISPLAY=$DISPLAY --device /dev/video0 chalmersrevere/opendlv-device-camera-v4l-multi:v0.0.6 --camera=/dev/video0 --width=640 --height=480 --freq=20 --verbose
45+
docker run --rm -ti --init --ipc=host -v /tmp:/tmp -e DISPLAY=$DISPLAY --device /dev/video0 chalmersrevere/opendlv-device-camera-v4l-multi:v0.0.7 --camera=/dev/video0 --width=640 --height=480 --freq=20 --verbose
4646
```
4747

4848
## Build from sources on the example of Ubuntu 16.04 LTS

src/opendlv-device-camera-v4l.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <sys/types.h>
2323
#include <sys/stat.h>
2424
#include <sys/select.h>
25+
#include <time.h>
2526
#include <unistd.h>
2627

2728
#include <linux/videodev2.h>
@@ -224,6 +225,19 @@ int32_t main(int32_t argc, char **argv) {
224225
(sharedMemoryARGB && sharedMemoryARGB->valid()) ) {
225226
std::clog << "[opendlv-device-camera-v4l]: Data from camera '" << commandlineArguments["camera"]<< "' available in I420 format in shared memory '" << sharedMemoryI420->name() << "' (" << sharedMemoryI420->size() << ") and in ARGB format in shared memory '" << sharedMemoryARGB->name() << "' (" << sharedMemoryARGB->size() << ")." << std::endl;
226227

228+
int64_t uptimeToEpochOffsetIn_ms{0};
229+
{
230+
struct timeval epochTime{};
231+
gettimeofday(&epochTime, nullptr);
232+
233+
struct timespec upTime{};
234+
clock_gettime(CLOCK_MONOTONIC, &upTime);
235+
236+
int64_t uptimeIn_ms = upTime.tv_sec * 1000 + static_cast<int64_t>(round(upTime.tv_nsec/ 1000.0f*1000.0f));
237+
int64_t epochTimeIn_ms = epochTime.tv_sec * 1000 + static_cast<int64_t>(round(epochTime.tv_usec/1000.0f));
238+
uptimeToEpochOffsetIn_ms = epochTimeIn_ms - uptimeIn_ms;
239+
}
240+
227241
// Define timeout for select system call.
228242
struct timeval timeout {};
229243
fd_set setOfFiledescriptorsToReadFrom{};
@@ -263,8 +277,12 @@ int32_t main(int32_t argc, char **argv) {
263277
return false;
264278
}
265279

266-
cluon::data::TimeStamp ts;
267-
ts.seconds(v4l2_buf.timestamp.tv_sec).microseconds(v4l2_buf.timestamp.tv_usec/1000);
280+
cluon::data::TimeStamp ts{cluon::time::now()};
281+
if ( (v4l2_buf.flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC ) {
282+
int64_t temp_ms = v4l2_buf.timestamp.tv_sec * 1000 + static_cast<int64_t>(round(v4l2_buf.timestamp.tv_usec/1000.0f));
283+
int64_t epochTimeStampIn_ms = temp_ms + uptimeToEpochOffsetIn_ms;
284+
ts = cluon::time::fromMicroseconds(epochTimeStampIn_ms*1000);
285+
}
268286

269287
const uint8_t bufferIndex = v4l2_buf.index;
270288
const uint32_t bufferSize = v4l2_buf.bytesused;

0 commit comments

Comments
 (0)