diff --git a/python/src/ustreamer.c b/python/src/ustreamer.c index f2d9caf..f1d27f0 100644 --- a/python/src/ustreamer.c +++ b/python/src/ustreamer.c @@ -236,6 +236,7 @@ static PyObject *_MemsinkObject_wait_frame(_MemsinkObject *self, PyObject *args, SET_NUMBER(stride, Long, Long); SET_NUMBER(online, Long, Bool); SET_NUMBER(key, Long, Bool); + SET_NUMBER(gop, Long, Long); SET_NUMBER(grab_ts, Double, Float); SET_NUMBER(encode_begin_ts, Double, Float); SET_NUMBER(encode_end_ts, Double, Float); diff --git a/src/dump/file.c b/src/dump/file.c index 43e7bcd..9a30094 100644 --- a/src/dump/file.c +++ b/src/dump/file.c @@ -52,11 +52,11 @@ void us_output_file_write(void *v_output, const us_frame_s *frame) { us_base64_encode(frame->data, frame->used, &output->base64_data, &output->base64_allocated); fprintf(output->fp, "{\"size\": %zu, \"width\": %u, \"height\": %u," - " \"format\": %u, \"stride\": %u, \"online\": %u, \"key\": %u," + " \"format\": %u, \"stride\": %u, \"online\": %u, \"key\": %u, \"gop\": %u," " \"grab_ts\": %.3Lf, \"encode_begin_ts\": %.3Lf, \"encode_end_ts\": %.3Lf," " \"data\": \"%s\"}\n", frame->used, frame->width, frame->height, - frame->format, frame->stride, frame->online, frame->key, + frame->format, frame->stride, frame->online, frame->key, frame->gop, frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts, output->base64_data); } else { diff --git a/src/dump/main.c b/src/dump/main.c index f753301..4788d97 100644 --- a/src/dump/main.c +++ b/src/dump/main.c @@ -260,16 +260,16 @@ static int _dump_sink( const long long now_second = us_floor_ms(now); char fourcc_str[8]; - US_LOG_VERBOSE("Frame: res=%ux%u, fmt=%s, stride=%u, online=%d, key=%d, kr=%d, latency=%.3Lf, diff=%.3Lf, size=%zu", - frame->width, frame->height, + US_LOG_VERBOSE("Frame: %s - %ux%u -- online=%d, key=%d, kr=%d, gop=%u, latency=%.3Lf, backlog=%.3Lf, size=%zu", us_fourcc_to_string(frame->format, fourcc_str, 8), - frame->stride, frame->online, frame->key, key_requested, + frame->width, frame->height, + frame->online, frame->key, key_requested, frame->gop, now - frame->grab_ts, (last_ts ? now - last_ts : 0), frame->used); last_ts = now; - US_LOG_DEBUG(" grab_ts=%.3Lf, encode_begin_ts=%.3Lf, encode_end_ts=%.3Lf", - frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts); + US_LOG_DEBUG(" stride=%u, grab_ts=%.3Lf, encode_begin_ts=%.3Lf, encode_end_ts=%.3Lf", + frame->stride, frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts); if (now_second != fps_second) { fps = fps_accum; diff --git a/src/libs/frame.h b/src/libs/frame.h index 9760555..952dd55 100644 --- a/src/libs/frame.h +++ b/src/libs/frame.h @@ -50,6 +50,7 @@ typedef struct { bool online; bool key; + unsigned gop; long double grab_ts; long double encode_begin_ts; @@ -64,6 +65,7 @@ typedef struct { x_dest->stride = x_src->stride; \ x_dest->online = x_src->online; \ x_dest->key = x_src->key; \ + x_dest->gop = x_src->gop; \ x_dest->grab_ts = x_src->grab_ts; \ x_dest->encode_begin_ts = x_src->encode_begin_ts; \ x_dest->encode_end_ts = x_src->encode_end_ts; \ @@ -81,6 +83,7 @@ static inline void us_frame_copy_meta(const us_frame_s *src, us_frame_s *dest) { && x_a->stride == x_b->stride \ && x_a->online == x_b->online \ && x_a->key == x_b->key \ + && x_a->gop == x_b->gop \ ) diff --git a/src/libs/memsinksh.h b/src/libs/memsinksh.h index 6a90424..0ad2452 100644 --- a/src/libs/memsinksh.h +++ b/src/libs/memsinksh.h @@ -30,7 +30,7 @@ #define US_MEMSINK_MAGIC ((uint64_t)0xCAFEBABECAFEBABE) -#define US_MEMSINK_VERSION ((uint32_t)3) +#define US_MEMSINK_VERSION ((uint32_t)4) #ifndef US_CFG_MEMSINK_MAX_DATA # define US_CFG_MEMSINK_MAX_DATA 33554432 @@ -51,6 +51,7 @@ typedef struct { unsigned stride; bool online; bool key; + unsigned gop; long double grab_ts; long double encode_begin_ts; diff --git a/src/ustreamer/m2m.c b/src/ustreamer/m2m.c index cb5e42b..0add7c1 100644 --- a/src/ustreamer/m2m.c +++ b/src/ustreamer/m2m.c @@ -476,6 +476,7 @@ static int _m2m_encoder_compress_raw(us_m2m_encoder_s *enc, const us_frame_s *sr } else { us_frame_set_data(dest, _RUN(output_bufs[output_buf.index].data), output_plane.bytesused); dest->key = output_buf.flags & V4L2_BUF_FLAG_KEYFRAME; + dest->gop = enc->gop; done = true; }