[v4,0/2] utils: add v4l2-tracer utility

Message ID cover.1669831184.git.deborah.brouwer@collabora.com (mailing list archive)
Headers
Series utils: add v4l2-tracer utility |

Message

Deborah Brouwer Nov. 30, 2022, 6:24 p.m. UTC
  Hi all - thank you very much for your reviews.

This is a patch series now to add Hans' patch
for tracing basic controls.

Changes since v3:
- fix clang-tidy warnings
- fix memory leaks in auto-generated code
- strings: check for nullptr before assignment
- remove unnecessary checks for nullptr before free()
- polling: check return value
- dynamic arrays: check memory allocation
- put format-specific info (h264) into a union
- add comment to the top of auto-generated files
- replace array with std::vector for media topology 
- move debug/verbose options to helper functions
- fix auto-gen script to include a few extra controls

Changes since v2:
- remove duplication in entries for numbers/strings
- use media topology to find retrace devices
- add specific ioctls to trace
- in help msg change 'data' -> 'video frame data'
- trace mem_array with space after every byte
- add to trace files package version, SHA, date
- retracer also generates a JSON retrace file
- default trace format is "pretty"
- add a "compact" format option
- consolidate options for tracer/retracer
- remove mutex locks as unnecessary
- add more autogenerated functions
- add 'clean' command to remove fd/addresses

Changes since v1:
- auto-generate code from uAPI headers
- generated code adds some ability to trace
  VP9/HEVC which compiles but still needs work
- generated code adds full support for MPEG2
- fix multiplanar decoding for vicodec
- change library name to libv4l2tracer
- update README
- expand help to show options
- remove extraneous files from gitignore

Example:

Trace an application decoding VP8:

v4l2-tracer trace gst-launch-1.0 -- filesrc 
location=test-25fps.vp8 ! parsebin ! 
v4l2slvp8dec ! videocodectestsink

Or trace an application decoding FWHT:

v4l2-tracer trace v4l2-ctl -d3 --stream-mmap
--stream-out-mmap --stream-from-hdr
test-25fps.fwht --stream-to out.yuv

A trace file is generated: 71827_trace.json

Retrace the trace file:
v4l2-tracer retrace 71827_trace.json

Specify nodes if using a different driver:
v4l2-tracer -d0 -m0 retrace 71827_trace.json

A retrace file is generated: 71827_trace_retrace.json

Remove irrelevant differences (optional)
e.g. file descriptors and addresses:
v4l2-tracer clean 71827_trace.json
v4l2-tracer clean 71827_trace_retrace.json

Clean files are generated:
clean_71827_trace.json
clean_71827_trace_retrace.json

Use an application to compare the files:
kdiff3 clean_71827_trace.json clean_71827_trace_retrace.json

Deborah Brouwer (1):
  utils: add v4l2-tracer utility

Hans Verkuil (1):
  v4l2-tracer: add support for most basic controls

 README                                   |    8 +
 configure.ac                             |   12 +
 utils/Makefile.am                        |    5 +
 utils/v4l2-tracer/.gitignore             |    7 +
 utils/v4l2-tracer/Makefile.am            |   36 +
 utils/v4l2-tracer/libv4l2tracer.cpp      |  303 +++++
 utils/v4l2-tracer/retrace-helper.cpp     |  262 +++++
 utils/v4l2-tracer/retrace.cpp            | 1373 ++++++++++++++++++++++
 utils/v4l2-tracer/retrace.h              |   43 +
 utils/v4l2-tracer/trace-helper.cpp       |  500 ++++++++
 utils/v4l2-tracer/trace.cpp              |  603 ++++++++++
 utils/v4l2-tracer/trace.h                |   75 ++
 utils/v4l2-tracer/v4l2-tracer-common.cpp |  476 ++++++++
 utils/v4l2-tracer/v4l2-tracer-common.h   |   79 ++
 utils/v4l2-tracer/v4l2-tracer-gen.pl     |  879 ++++++++++++++
 utils/v4l2-tracer/v4l2-tracer.1.in       |  111 ++
 utils/v4l2-tracer/v4l2-tracer.cpp        |  415 +++++++
 17 files changed, 5187 insertions(+)
 create mode 100644 utils/v4l2-tracer/.gitignore
 create mode 100644 utils/v4l2-tracer/Makefile.am
 create mode 100644 utils/v4l2-tracer/libv4l2tracer.cpp
 create mode 100644 utils/v4l2-tracer/retrace-helper.cpp
 create mode 100644 utils/v4l2-tracer/retrace.cpp
 create mode 100644 utils/v4l2-tracer/retrace.h
 create mode 100644 utils/v4l2-tracer/trace-helper.cpp
 create mode 100644 utils/v4l2-tracer/trace.cpp
 create mode 100644 utils/v4l2-tracer/trace.h
 create mode 100644 utils/v4l2-tracer/v4l2-tracer-common.cpp
 create mode 100644 utils/v4l2-tracer/v4l2-tracer-common.h
 create mode 100755 utils/v4l2-tracer/v4l2-tracer-gen.pl
 create mode 100644 utils/v4l2-tracer/v4l2-tracer.1.in
 create mode 100644 utils/v4l2-tracer/v4l2-tracer.cpp
  

Comments

Daniel Almeida Dec. 5, 2022, 2:39 p.m. UTC | #1
Hi Hans, this looks good to me.

Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>


-- Daniel
  
Daniel Almeida Dec. 5, 2022, 4:22 p.m. UTC | #2
Apparently my name was stated as "Collabora", sorry, I've just switched
email clients recently.

Fixed now.

On Mon, 2022-12-05 at 11:39 -0300, Collabora wrote:
> Hi Hans, this looks good to me.
> 
> Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
> 
> 
> -- Daniel
  
Hans Verkuil Dec. 6, 2022, 10:21 a.m. UTC | #3
Hi Deb,

On 11/30/22 19:24, Deborah Brouwer wrote:
> Hi all - thank you very much for your reviews.
> 
> This is a patch series now to add Hans' patch
> for tracing basic controls.

All merged!

Thank you very much for this nice utility, I think it will
be quite useful.

Regards,

	Hans

> 
> Changes since v3:
> - fix clang-tidy warnings
> - fix memory leaks in auto-generated code
> - strings: check for nullptr before assignment
> - remove unnecessary checks for nullptr before free()
> - polling: check return value
> - dynamic arrays: check memory allocation
> - put format-specific info (h264) into a union
> - add comment to the top of auto-generated files
> - replace array with std::vector for media topology 
> - move debug/verbose options to helper functions
> - fix auto-gen script to include a few extra controls
> 
> Changes since v2:
> - remove duplication in entries for numbers/strings
> - use media topology to find retrace devices
> - add specific ioctls to trace
> - in help msg change 'data' -> 'video frame data'
> - trace mem_array with space after every byte
> - add to trace files package version, SHA, date
> - retracer also generates a JSON retrace file
> - default trace format is "pretty"
> - add a "compact" format option
> - consolidate options for tracer/retracer
> - remove mutex locks as unnecessary
> - add more autogenerated functions
> - add 'clean' command to remove fd/addresses
> 
> Changes since v1:
> - auto-generate code from uAPI headers
> - generated code adds some ability to trace
>   VP9/HEVC which compiles but still needs work
> - generated code adds full support for MPEG2
> - fix multiplanar decoding for vicodec
> - change library name to libv4l2tracer
> - update README
> - expand help to show options
> - remove extraneous files from gitignore
> 
> Example:
> 
> Trace an application decoding VP8:
> 
> v4l2-tracer trace gst-launch-1.0 -- filesrc 
> location=test-25fps.vp8 ! parsebin ! 
> v4l2slvp8dec ! videocodectestsink
> 
> Or trace an application decoding FWHT:
> 
> v4l2-tracer trace v4l2-ctl -d3 --stream-mmap
> --stream-out-mmap --stream-from-hdr
> test-25fps.fwht --stream-to out.yuv
> 
> A trace file is generated: 71827_trace.json
> 
> Retrace the trace file:
> v4l2-tracer retrace 71827_trace.json
> 
> Specify nodes if using a different driver:
> v4l2-tracer -d0 -m0 retrace 71827_trace.json
> 
> A retrace file is generated: 71827_trace_retrace.json
> 
> Remove irrelevant differences (optional)
> e.g. file descriptors and addresses:
> v4l2-tracer clean 71827_trace.json
> v4l2-tracer clean 71827_trace_retrace.json
> 
> Clean files are generated:
> clean_71827_trace.json
> clean_71827_trace_retrace.json
> 
> Use an application to compare the files:
> kdiff3 clean_71827_trace.json clean_71827_trace_retrace.json
> 
> Deborah Brouwer (1):
>   utils: add v4l2-tracer utility
> 
> Hans Verkuil (1):
>   v4l2-tracer: add support for most basic controls
> 
>  README                                   |    8 +
>  configure.ac                             |   12 +
>  utils/Makefile.am                        |    5 +
>  utils/v4l2-tracer/.gitignore             |    7 +
>  utils/v4l2-tracer/Makefile.am            |   36 +
>  utils/v4l2-tracer/libv4l2tracer.cpp      |  303 +++++
>  utils/v4l2-tracer/retrace-helper.cpp     |  262 +++++
>  utils/v4l2-tracer/retrace.cpp            | 1373 ++++++++++++++++++++++
>  utils/v4l2-tracer/retrace.h              |   43 +
>  utils/v4l2-tracer/trace-helper.cpp       |  500 ++++++++
>  utils/v4l2-tracer/trace.cpp              |  603 ++++++++++
>  utils/v4l2-tracer/trace.h                |   75 ++
>  utils/v4l2-tracer/v4l2-tracer-common.cpp |  476 ++++++++
>  utils/v4l2-tracer/v4l2-tracer-common.h   |   79 ++
>  utils/v4l2-tracer/v4l2-tracer-gen.pl     |  879 ++++++++++++++
>  utils/v4l2-tracer/v4l2-tracer.1.in       |  111 ++
>  utils/v4l2-tracer/v4l2-tracer.cpp        |  415 +++++++
>  17 files changed, 5187 insertions(+)
>  create mode 100644 utils/v4l2-tracer/.gitignore
>  create mode 100644 utils/v4l2-tracer/Makefile.am
>  create mode 100644 utils/v4l2-tracer/libv4l2tracer.cpp
>  create mode 100644 utils/v4l2-tracer/retrace-helper.cpp
>  create mode 100644 utils/v4l2-tracer/retrace.cpp
>  create mode 100644 utils/v4l2-tracer/retrace.h
>  create mode 100644 utils/v4l2-tracer/trace-helper.cpp
>  create mode 100644 utils/v4l2-tracer/trace.cpp
>  create mode 100644 utils/v4l2-tracer/trace.h
>  create mode 100644 utils/v4l2-tracer/v4l2-tracer-common.cpp
>  create mode 100644 utils/v4l2-tracer/v4l2-tracer-common.h
>  create mode 100755 utils/v4l2-tracer/v4l2-tracer-gen.pl
>  create mode 100644 utils/v4l2-tracer/v4l2-tracer.1.in
>  create mode 100644 utils/v4l2-tracer/v4l2-tracer.cpp
>