€•°{Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”ŒD/translations/zh_CN/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/zh_TW/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/it_IT/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/ja_JP/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/ko_KR/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/pt_BR/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/sp_SP/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/process/debugging/media_specific_debugging_guide.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ,Debugging and tracing in the media subsystem”h]”hŒ,Debugging and tracing in the media subsystem”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid1”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ’This document serves as a starting point and lookup for debugging device drivers in the media subsystem and to debug these drivers from userspace.”h]”hŒ’This document serves as a starting point and lookup for debugging device drivers in the media subsystem and to debug these drivers from userspace.”…””}”(hháh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KhhÊh²hubhŒtopic”“”)”}”(hŒ Contents ”h]”(hÎ)”}”(hŒContents”h]”hŒContents”…””}”(hhõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhñh³hÇh´K ubhŒ bullet_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hhh]”(hà)”}”(hhh]”hŒ reference”“”)”}”(hhh]”hŒ,Debugging and tracing in the media subsystem”…””}”(hjh²hh³Nh´Nubah}”(h]”hÞah ]”h"]”h$]”h&]”Œrefid”Œ,debugging-and-tracing-in-the-media-subsystem”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj ubj)”}”(hhh]”(j )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒGeneral debugging advice”…””}”(hj0h²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œgeneral-debugging-advice”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒdev_debug module parameter”…””}”(hjRh²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œdev-debug-module-parameter”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒdev_dbg() / v4l2_dbg()”…””}”(hjth²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œdev-dbg-v4l2-dbg”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒ Dynamic debug”…””}”(hj–h²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œ dynamic-debug”uh1jhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒFtrace”…””}”(hj¸h²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œftrace”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒDebugFS”…””}”(hjÚh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œdebugfs”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒPerf & alternatives”…””}”(hjüh²hh³Nh´Nubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”Œrefid”Œperf-alternatives”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒError checking & panic analysis”…””}”(hjh²hh³Nh´Nubah}”(h]”Œid9”ah ]”h"]”h$]”h&]”Œrefid”Œerror-checking-panic-analysis”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒ(Driver verification with v4l2-compliance”…””}”(hj@h²hh³Nh´Nubah}”(h]”Œid10”ah ]”h"]”h$]”h&]”Œrefid”Œ(driver-verification-with-v4l2-compliance”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )”}”(hhh]”hà)”}”(hhh]”j)”}”(hhh]”hŒ'Debugging problems with receiving video”…””}”(hjbh²hh³Nh´Nubah}”(h]”Œid11”ah ]”h"]”h$]”h&]”Œrefid”Œ'debugging-problems-with-receiving-video”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhñh²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1hïh³hÇh´K hhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒGeneral debugging advice”h]”hŒGeneral debugging advice”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj9uh1hÍhj™h²hh³hÇh´Kubhà)”}”(hŒUFor general advice see the :doc:`general advice document `.”h]”(hŒFor general advice see the ”…””}”(hjªh²hh³Nh´Nubh)”}”(hŒ9:doc:`general advice document `”h]”hŒinline”“”)”}”(hj´h]”hŒgeneral advice document”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j¶hj²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ0process/debugging/media_specific_debugging_guide”Œ refdomain”jÃŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ/process/debugging/index”uh1hh³hÇh´KhjªubhŒ.”…””}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khj™h²hubhà)”}”(hŒ /sys/class/video4linux/video3/dev_debug # dmesg -wH [...] videodev: v4l2_open: video3: open (0) [ +0.000036] video3: VIDIOC_QUERYCAP: driver=rkvdec, card=rkvdec, bus=platform:rkvdec, version=0x00060900, capabilities=0x84204000, device_caps=0x04204000”h]”hX9# cat /sys/class/video4linux/video3/name rkvdec # echo 0xff > /sys/class/video4linux/video3/dev_debug # dmesg -wH [...] videodev: v4l2_open: video3: open (0) [ +0.000036] video3: VIDIOC_QUERYCAP: driver=rkvdec, card=rkvdec, bus=platform:rkvdec, version=0x00060900, capabilities=0x84204000, device_caps=0x04204000”…””}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´Khjöh²hubhà)”}”(hŒVFor the full documentation see :ref:`driver-api/media/v4l2-dev:video device debugging`”h]”(hŒFor the full documentation see ”…””}”(hj9h²hh³Nh´Nubh)”}”(hŒ7:ref:`driver-api/media/v4l2-dev:video device debugging`”h]”j·)”}”(hjCh]”hŒ0driver-api/media/v4l2-dev:video device debugging”…””}”(hjEh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hjAubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jOŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ0driver-api/media/v4l2-dev:video device debugging”uh1hh³hÇh´K$hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K$hjöh²hubeh}”(h]”jaah ]”h"]”Œdev_debug module parameter”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒdev_dbg() / v4l2_dbg()”h]”hŒdev_dbg() / v4l2_dbg()”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj}uh1hÍhjnh²hh³hÇh´K(ubhà)”}”(hŒ·Two debug print statements, which are specific for devices and for the v4l2 subsystem, avoid adding these to your final submission unless they have long-term value for investigations.”h]”hŒ·Two debug print statements, which are specific for devices and for the v4l2 subsystem, avoid adding these to your final submission unless they have long-term value for investigations.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K*hjnh²hubhà)”}”(hŒ{For a general overview please see the :ref:`process/debugging/driver_development_debugging_guide:printk() & friends` guide.”h]”(hŒ&For a general overview please see the ”…””}”(hjh²hh³Nh´Nubh)”}”(hŒN:ref:`process/debugging/driver_development_debugging_guide:printk() & friends`”h]”j·)”}”(hj—h]”hŒGprocess/debugging/driver_development_debugging_guide:printk() & friends”…””}”(hj™h²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj•ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”j£Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒGprocess/debugging/driver_development_debugging_guide:printk() & friends”uh1hh³hÇh´K.hjubhŒ guide.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K.hjnh²hubj)”}”(hhh]”j )”}”(hXcDifference between both? - v4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug - dev_dbg() can be targeted by dynamic debug - v4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log ”h]”(hà)”}”(hŒDifference between both?”h]”hŒDifference between both?”…””}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K2hjÂubj)”}”(hhh]”(j )”}”(hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”h]”hà)”}”(hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”h]”hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K4hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubj )”}”(hŒ*dev_dbg() can be targeted by dynamic debug”h]”hà)”}”(hjñh]”hŒ*dev_dbg() can be targeted by dynamic debug”…””}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K6hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubj )”}”(hŒv4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log ”h]”hà)”}”(hŒv4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log”h]”hŒv4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K7hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³hÇh´K4hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j$j%uh1jh³hÇh´K2hjnh²hubeh}”(h]”jƒah ]”h"]”Œdev_dbg() / v4l2_dbg()”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K(ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Dynamic debug”h]”hŒ Dynamic debug”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjŸuh1hÍhj9h²hh³hÇh´K;ubhà)”}”(hŒ5A method to trim down the debug output to your needs.”h]”hŒ5A method to trim down the debug output to your needs.”…””}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K=hj9h²hubhà)”}”(hŒbFor general advice see the :ref:`process/debugging/userspace_debugging_guide:dynamic debug` guide.”h]”(hŒFor general advice see the ”…””}”(hjXh²hh³Nh´Nubh)”}”(hŒ@:ref:`process/debugging/userspace_debugging_guide:dynamic debug`”h]”j·)”}”(hjbh]”hŒ9process/debugging/userspace_debugging_guide:dynamic debug”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jnŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ9process/debugging/userspace_debugging_guide:dynamic debug”uh1hh³hÇh´K?hjXubhŒ guide.”…””}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K?hj9h²hubhà)”}”(hŒNHere is one example, that enables all available pr_debug()'s within the file::”h]”hŒOHere is one example, that enables all available pr_debug()’s within the file:”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KBhj9h²hubj*)”}”(hXY$ alias ddcmd='echo $* > /proc/dynamic_debug/control' $ ddcmd '-p; file v4l2-h264.c +p' $ grep =p /proc/dynamic_debug/control drivers/media/v4l2-core/v4l2-h264.c:372 [v4l2_h264]print_ref_list_b =p "ref_pic_list_b%u (cur_poc %u%c) %s" drivers/media/v4l2-core/v4l2-h264.c:333 [v4l2_h264]print_ref_list_p =p "ref_pic_list_p (cur_poc %u%c) %s\n"”h]”hXY$ alias ddcmd='echo $* > /proc/dynamic_debug/control' $ ddcmd '-p; file v4l2-h264.c +p' $ grep =p /proc/dynamic_debug/control drivers/media/v4l2-core/v4l2-h264.c:372 [v4l2_h264]print_ref_list_b =p "ref_pic_list_b%u (cur_poc %u%c) %s" drivers/media/v4l2-core/v4l2-h264.c:333 [v4l2_h264]print_ref_list_p =p "ref_pic_list_p (cur_poc %u%c) %s\n"”…””}”hj˜sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´KDhj9h²hubeh}”(h]”j¥ah ]”h"]”Œ dynamic debug”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K;ubhÉ)”}”(hhh]”(hÎ)”}”(hŒFtrace”h]”hŒFtrace”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjÁuh1hÍhj­h²hh³hÇh´KMubhà)”}”(hŒÄAn internal kernel tracer that can trace static predefined events, function calls, etc. Very useful for debugging problems without changing the kernel and understanding the behavior of subsystems.”h]”hŒÄAn internal kernel tracer that can trace static predefined events, function calls, etc. Very useful for debugging problems without changing the kernel and understanding the behavior of subsystems.”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KOhj­h²hubhà)”}”(hŒ[For general advice see the :ref:`process/debugging/userspace_debugging_guide:ftrace` guide.”h]”(hŒFor general advice see the ”…””}”(hjÌh²hh³Nh´Nubh)”}”(hŒ9:ref:`process/debugging/userspace_debugging_guide:ftrace`”h]”j·)”}”(hjÖh]”hŒ2process/debugging/userspace_debugging_guide:ftrace”…””}”(hjØh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hjÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jâŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ2process/debugging/userspace_debugging_guide:ftrace”uh1hh³hÇh´KShjÌubhŒ guide.”…””}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KShj­h²hubeh}”(h]”jÇah ]”h"]”Œftrace”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KMubhÉ)”}”(hhh]”(hÎ)”}”(hŒDebugFS”h]”hŒDebugFS”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjãuh1hÍhjh²hh³hÇh´KWubhà)”}”(hŒfThis tool allows you to dump or modify internal values of your driver to files in a custom filesystem.”h]”hŒfThis tool allows you to dump or modify internal values of your driver to files in a custom filesystem.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KYhjh²hubhà)”}”(hŒeFor general advice see the :ref:`process/debugging/driver_development_debugging_guide:debugfs` guide.”h]”(hŒFor general advice see the ”…””}”(hj$h²hh³Nh´Nubh)”}”(hŒC:ref:`process/debugging/driver_development_debugging_guide:debugfs`”h]”j·)”}”(hj.h]”hŒ`__)::”h]”(hŒsGather statistics data for a decoding job: (This example is on a RK3399 SoC with the rkvdec codec driver using the ”…””}”(hj¼h²hh³Nh´Nubj)”}”(hŒ;`fluster test suite `__”h]”hŒfluster test suite”…””}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œfluster test suite”Œrefuri”Œ"https://github.com/fluendo/fluster”uh1jhj¼ubhŒ):”…””}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Kihj]h²hubj*)”}”(hX perf stat -d python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 ... Performance counter stats for 'python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 -v': 7794.23 msec task-clock:u # 0.697 CPUs utilized 0 context-switches:u # 0.000 /sec 0 cpu-migrations:u # 0.000 /sec 11901 page-faults:u # 1.527 K/sec 882671556 cycles:u # 0.113 GHz (95.79%) 711708695 instructions:u # 0.81 insn per cycle (95.79%) 10581935 branches:u # 1.358 M/sec (15.13%) 6871144 branch-misses:u # 64.93% of all branches (95.79%) 281716547 L1-dcache-loads:u # 36.144 M/sec (95.79%) 9019581 L1-dcache-load-misses:u # 3.20% of all L1-dcache accesses (95.79%) LLC-loads:u LLC-load-misses:u 11.180830431 seconds time elapsed 1.502318000 seconds user 6.377221000 seconds sys”h]”hX perf stat -d python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 ... Performance counter stats for 'python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 -v': 7794.23 msec task-clock:u # 0.697 CPUs utilized 0 context-switches:u # 0.000 /sec 0 cpu-migrations:u # 0.000 /sec 11901 page-faults:u # 1.527 K/sec 882671556 cycles:u # 0.113 GHz (95.79%) 711708695 instructions:u # 0.81 insn per cycle (95.79%) 10581935 branches:u # 1.358 M/sec (15.13%) 6871144 branch-misses:u # 64.93% of all branches (95.79%) 281716547 L1-dcache-loads:u # 36.144 M/sec (95.79%) 9019581 L1-dcache-load-misses:u # 3.20% of all L1-dcache accesses (95.79%) LLC-loads:u LLC-load-misses:u 11.180830431 seconds time elapsed 1.502318000 seconds user 6.377221000 seconds sys”…””}”hjàsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´Kmhj]h²hubhà)”}”(hŒMThe availability of events and metrics depends on the system you are running.”h]”hŒMThe availability of events and metrics depends on the system you are running.”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K…hj]h²hubeh}”(h]”j ah ]”h"]”Œperf & alternatives”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K`ubhÉ)”}”(hhh]”(hÎ)”}”(hŒError checking & panic analysis”h]”hŒError checking & panic analysis”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj'uh1hÍhjh²hh³hÇh´Kˆubhà)”}”(hŒzVarious Kernel configuration options to enhance error detection of the Linux Kernel with the cost of lowering performance.”h]”hŒzVarious Kernel configuration options to enhance error detection of the Linux Kernel with the cost of lowering performance.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KŠhjh²hubhà)”}”(hŒŒFor general advice see the :ref:`process/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers` guide.”h]”(hŒFor general advice see the ”…””}”(hj"h²hh³Nh´Nubh)”}”(hŒj:ref:`process/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers`”h]”j·)”}”(hj,h]”hŒcprocess/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”j8Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒcprocess/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers”uh1hh³hÇh´Khj"ubhŒ guide.”…””}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khjh²hubeh}”(h]”j-ah ]”h"]”Œerror checking & panic analysis”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KˆubhÉ)”}”(hhh]”(hÎ)”}”(hŒ(Driver verification with v4l2-compliance”h]”hŒ(Driver verification with v4l2-compliance”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjIuh1hÍhj[h²hh³hÇh´K’ubhà)”}”(hŒÜTo verify, that a driver adheres to the v4l2 API, the tool v4l2-compliance is used, which is part of the `v4l_utils `__, a suite of userspace tools to work with the media subsystem.”h]”(hŒiTo verify, that a driver adheres to the v4l2 API, the tool v4l2-compliance is used, which is part of the ”…””}”(hjlh²hh³Nh´Nubj)”}”(hŒ5`v4l_utils `__”h]”hŒ v4l_utils”…””}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ v4l_utils”jÔŒ%https://git.linuxtv.org/v4l-utils.git”uh1jhjlubhŒ>, a suite of userspace tools to work with the media subsystem.”…””}”(hjlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K”hj[h²hubhà)”}”(hŒ7To see the detailed media topology (and check it) use::”h]”hŒ6To see the detailed media topology (and check it) use:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K™hj[h²hubj*)”}”(hŒ(v4l2-compliance -M /dev/mediaX --verbose”h]”hŒ(v4l2-compliance -M /dev/mediaX --verbose”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K›hj[h²hubhà)”}”(hŒ`You can also run a full compliance check for all devices referenced in the media topology with::”h]”hŒ_You can also run a full compliance check for all devices referenced in the media topology with:”…””}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khj[h²hubj*)”}”(hŒv4l2-compliance -m /dev/mediaX”h]”hŒv4l2-compliance -m /dev/mediaX”…””}”hj¹sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K hj[h²hubeh}”(h]”jOah ]”h"]”Œ(driver verification with v4l2-compliance”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K’ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ'Debugging problems with receiving video”h]”hŒ'Debugging problems with receiving video”…””}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjkuh1hÍhjÎh²hh³hÇh´K£ubhà)”}”(hXjImplementing vidioc_log_status in the driver: this can log the current status to the kernel log. It's called by v4l2-ctl --log-status. Very useful for debugging problems with receiving video (TV/S-Video/HDMI/etc) since the video signal is external (so unpredictable). Less useful with camera sensor inputs since you have control over what the camera sensor does.”h]”hXlImplementing vidioc_log_status in the driver: this can log the current status to the kernel log. It’s called by v4l2-ctl --log-status. Very useful for debugging problems with receiving video (TV/S-Video/HDMI/etc) since the video signal is external (so unpredictable). Less useful with camera sensor inputs since you have control over what the camera sensor does.”…””}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K¥hjÎh²hubhà)”}”(hŒ)Usually you can just assign the default::”h]”hŒ(Usually you can just assign the default:”…””}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K«hjÎh²hubj*)”}”(hŒ+.vidioc_log_status = v4l2_ctrl_log_status,”h]”hŒ+.vidioc_log_status = v4l2_ctrl_log_status,”…””}”hjûsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K­hjÎh²hubhà)”}”(hŒIBut you can also create your own callback, to create a custom status log.”h]”hŒIBut you can also create your own callback, to create a custom status log.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K¯hjÎh²hubhà)”}”(hŒ¸You can find an example in the cobalt driver (`drivers/media/pci/cobalt/cobalt-v4l2.c `__).”h]”(hŒ.You can find an example in the cobalt driver (”…””}”(hjh²hh³Nh´Nubj)”}”(hŒˆ`drivers/media/pci/cobalt/cobalt-v4l2.c `__”h]”hŒ&drivers/media/pci/cobalt/cobalt-v4l2.c”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ&drivers/media/pci/cobalt/cobalt-v4l2.c”jÔŒ[https://elixir.bootlin.com/linux/v6.11.6/source/drivers/media/pci/cobalt/cobalt-v4l2.c#L567”uh1jhjubhŒ).”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K±hjÎh²hubhà)”}”(hŒ **Copyright** ©2024 : Collabora”h]”(hŒstrong”“”)”}”(hŒ **Copyright**”h]”hŒ Copyright”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:ubhŒ ©2024 : Collabora”…””}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K´hjÎh²hubeh}”(h]”jqah ]”h"]”Œ'debugging problems with receiving video”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K£ubeh}”(h]”j ah ]”h"]”Œ,debugging and tracing in the media subsystem”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j‰Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jcj j–j’jój?jkjaj6jƒjªj¥jjÇjZjéjj jXj-jËjOj\jquŒ nametypes”}”(jc‰j–‰jó‰jk‰j6‰jª‰j‰jZ‰j‰jX‰jˉj\‰uh}”(j hÊj’hñj?j™jajöjƒjnj¥j9jÇj­jéjj j]j-jjOj[jqjÎhÞjj9j0j[jRj}jtjŸj–jÁj¸jãjÚjjüj'jjIj@jkjbuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j—K s…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.