diff options
-rw-r--r-- | encode.c | 6 | ||||
-rw-r--r-- | encode.h | 3 | ||||
-rw-r--r-- | main.c | 6 | ||||
-rw-r--r-- | makefile | 3 |
4 files changed, 12 insertions, 6 deletions
@@ -33,6 +33,7 @@ #include "gpu.h" #include "hevc.h" #include "proto.h" +#include "toolbox/perf.h" #include "toolbox/utils.h" struct EncodeContext { @@ -778,7 +779,8 @@ static bool DrainBuffers(int fd, struct iovec* iovec, int count) { } } -bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd) { +bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd, + unsigned long long timestamp) { bool result = false; VABufferID buffers[8]; VABufferID* buffer_ptr = buffers; @@ -927,7 +929,7 @@ bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd) { .size = segment->size, .type = PROTO_TYPE_VIDEO, .flags = idr ? PROTO_FLAG_KEYFRAME : 0, - .latency = 0, + .latency = (uint16_t)(MicrosNow() - timestamp), }; struct iovec iovec[] = { {.iov_base = &proto, .iov_len = sizeof(proto)}, @@ -33,7 +33,8 @@ struct EncodeContext* EncodeContextCreate(struct GpuContext* gpu_context, enum YuvRange range); const struct GpuFrame* EncodeContextGetFrame( struct EncodeContext* encode_context); -bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd); +bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd, + unsigned long long timestamp); void EncodeContextDestroy(struct EncodeContext* encode_context); #endif // STREAMER_ENCODE_H_ @@ -32,6 +32,7 @@ #include "gpu.h" #include "input.h" #include "toolbox/io_muxer.h" +#include "toolbox/perf.h" #include "toolbox/utils.h" // TODO(mburakov): Currently zwp_linux_dmabuf_v1 has no way to provide @@ -135,6 +136,7 @@ static void OnTimerExpire(void* user) { return; } + unsigned long long timestamp = MicrosNow(); const struct GpuFrame* captured_frame = CaptureContextGetFrame(contexts->capture_context); if (!captured_frame) { @@ -163,8 +165,8 @@ static void OnTimerExpire(void* user) { LOG("Failed to convert frame"); goto drop_client; } - if (!EncodeContextEncodeFrame(contexts->encode_context, - contexts->client_fd)) { + if (!EncodeContextEncodeFrame(contexts->encode_context, contexts->client_fd, + timestamp)) { LOG("Failed to encode frame"); goto drop_client; } @@ -4,7 +4,8 @@ obj:=$(src:.c=.o) obj+=\ toolbox/buffer.o \ - toolbox/io_muxer.o + toolbox/io_muxer.o \ + toolbox/perf.o libs:=\ egl \ |