Message ID | 1c1fd714-5277-417e-bf69-0941dc40a8b7@xs4all.nl (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | v4l2-tracer: add support for most basic controls | expand |
Hi Hans, Thanks for this! I have one question below On Tue, Nov 15, 2022 at 12:36:44PM +0100, Hans Verkuil wrote: > The v4l2-tracer utility didn't support tracing simple controls without > a payload (i.e. the 'size' field is 0) and just a simple value. > > This adds support for that, plus the four standard INTEGER64 controls > that use field value64. > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> > --- > Hi Deb, > > I think this is a nice addition for your v3 patch. Support for these > common simple controls is easy to add, and it makes for much better > tracing. > > Hans > --- > diff --git a/utils/v4l2-tracer/retrace.cpp b/utils/v4l2-tracer/retrace.cpp > index b736e835..f0353988 100644 > --- a/utils/v4l2-tracer/retrace.cpp > +++ b/utils/v4l2-tracer/retrace.cpp > @@ -734,7 +734,23 @@ struct v4l2_ext_control *retrace_v4l2_ext_control(json_object *parent_obj, int c > p->value = retrace_v4l2_ext_control_value(v4l2_ext_control_obj, > v4l2_stateless_hevc_start_code_val_def); > break; > + case V4L2_CID_MPEG_VIDEO_DEC_PTS: > + case V4L2_CID_MPEG_VIDEO_DEC_FRAME: > + case V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR: > + case V4L2_CID_PIXEL_RATE: { > + json_object *value64_obj; > + > + if (json_object_object_get_ex(v4l2_ext_control_obj, "value64", &value64_obj)) > + p->value64 = json_object_get_int64(value64_obj); > + break; > + } > default: > + if (!p->size) { > + json_object *value_obj; > + > + if (json_object_object_get_ex(v4l2_ext_control_obj, "value", &value_obj)) > + p->value = json_object_get_int64(value_obj); The json library integers don't map to exactly what we need but should this be just a plain int since value is __s32? > + } > break; > } > > diff --git a/utils/v4l2-tracer/trace.cpp b/utils/v4l2-tracer/trace.cpp > index f0bd7002..e26d6e6d 100644 > --- a/utils/v4l2-tracer/trace.cpp > +++ b/utils/v4l2-tracer/trace.cpp > @@ -405,9 +405,19 @@ void trace_v4l2_ext_control(void *arg, json_object *parent_obj, std::string key_ > case V4L2_CID_STATELESS_MPEG2_QUANTISATION: > trace_v4l2_ctrl_mpeg2_quantisation_gen(p->p_mpeg2_quantisation, v4l2_ext_control_obj); > break; > + case V4L2_CID_MPEG_VIDEO_DEC_PTS: > + case V4L2_CID_MPEG_VIDEO_DEC_FRAME: > + case V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR: > + case V4L2_CID_PIXEL_RATE: > + json_object_object_add(v4l2_ext_control_obj, "value64", json_object_new_uint64(p->value64)); > + break; > default: > - fprintf(stderr, "%s:%s:%d: ", __FILE__, __func__, __LINE__); > - fprintf(stderr, "warning: cannot trace control: %s\n", val2s(p->id, control_val_def).c_str()); > + if (p->size) { > + fprintf(stderr, "%s:%s:%d: ", __FILE__, __func__, __LINE__); > + fprintf(stderr, "warning: cannot trace control: %s\n", val2s(p->id, control_val_def).c_str()); > + } else { > + json_object_object_add(v4l2_ext_control_obj, "value", json_object_new_uint64(p->value)); Same here I'm thinking to change uint64 to just int? > + } > break; > } > >
diff --git a/utils/v4l2-tracer/retrace.cpp b/utils/v4l2-tracer/retrace.cpp index b736e835..f0353988 100644 --- a/utils/v4l2-tracer/retrace.cpp +++ b/utils/v4l2-tracer/retrace.cpp @@ -734,7 +734,23 @@ struct v4l2_ext_control *retrace_v4l2_ext_control(json_object *parent_obj, int c p->value = retrace_v4l2_ext_control_value(v4l2_ext_control_obj, v4l2_stateless_hevc_start_code_val_def); break; + case V4L2_CID_MPEG_VIDEO_DEC_PTS: + case V4L2_CID_MPEG_VIDEO_DEC_FRAME: + case V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR: + case V4L2_CID_PIXEL_RATE: { + json_object *value64_obj; + + if (json_object_object_get_ex(v4l2_ext_control_obj, "value64", &value64_obj)) + p->value64 = json_object_get_int64(value64_obj); + break; + } default: + if (!p->size) { + json_object *value_obj; + + if (json_object_object_get_ex(v4l2_ext_control_obj, "value", &value_obj)) + p->value = json_object_get_int64(value_obj); + } break; } diff --git a/utils/v4l2-tracer/trace.cpp b/utils/v4l2-tracer/trace.cpp index f0bd7002..e26d6e6d 100644 --- a/utils/v4l2-tracer/trace.cpp +++ b/utils/v4l2-tracer/trace.cpp @@ -405,9 +405,19 @@ void trace_v4l2_ext_control(void *arg, json_object *parent_obj, std::string key_ case V4L2_CID_STATELESS_MPEG2_QUANTISATION: trace_v4l2_ctrl_mpeg2_quantisation_gen(p->p_mpeg2_quantisation, v4l2_ext_control_obj); break; + case V4L2_CID_MPEG_VIDEO_DEC_PTS: + case V4L2_CID_MPEG_VIDEO_DEC_FRAME: + case V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR: + case V4L2_CID_PIXEL_RATE: + json_object_object_add(v4l2_ext_control_obj, "value64", json_object_new_uint64(p->value64)); + break; default: - fprintf(stderr, "%s:%s:%d: ", __FILE__, __func__, __LINE__); - fprintf(stderr, "warning: cannot trace control: %s\n", val2s(p->id, control_val_def).c_str()); + if (p->size) { + fprintf(stderr, "%s:%s:%d: ", __FILE__, __func__, __LINE__); + fprintf(stderr, "warning: cannot trace control: %s\n", val2s(p->id, control_val_def).c_str()); + } else { + json_object_object_add(v4l2_ext_control_obj, "value", json_object_new_uint64(p->value)); + } break; }
The v4l2-tracer utility didn't support tracing simple controls without a payload (i.e. the 'size' field is 0) and just a simple value. This adds support for that, plus the four standard INTEGER64 controls that use field value64. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> --- Hi Deb, I think this is a nice addition for your v3 patch. Support for these common simple controls is easy to add, and it makes for much better tracing. Hans ---