diff mbox series

v4l2-tracer: add support for most basic controls

Message ID 1c1fd714-5277-417e-bf69-0941dc40a8b7@xs4all.nl
State New
Headers show
Series v4l2-tracer: add support for most basic controls | expand

Commit Message

Hans Verkuil Nov. 15, 2022, 11:36 a.m. UTC
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
---

Comments

Deborah Brouwer Nov. 16, 2022, 5:04 a.m. UTC | #1
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 mbox series

Patch

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;
 	}