€•¬`Œ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”Œ*/translations/zh_CN/admin-guide/media/visl”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/admin-guide/media/visl”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/admin-guide/media/visl”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/admin-guide/media/visl”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/admin-guide/media/visl”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/admin-guide/media/visl”Œ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ŸŒD/var/lib/git/docbuild/linux/Documentation/admin-guide/media/visl.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ+The Virtual Stateless Decoder Driver (visl)”h]”hŒ+The Virtual Stateless Decoder Driver (visl)”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒKA virtual stateless decoder device for stateless uAPI development purposes.”h]”hŒKA virtual stateless decoder device for stateless uAPI development purposes.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒ‡This tool's objective is to help the development and testing of userspace applications that use the V4L2 stateless API to decode media.”h]”hŒ‰This tool’s objective is to help the development and testing of userspace applications that use the V4L2 stateless API to decode media.”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhÊ)”}”(hŒÌA userspace implementation can use visl to run a decoding loop even when no hardware is available or when the kernel uAPI for the codec has not been upstreamed yet. This can reveal bugs at an early stage.”h]”hŒÌA userspace implementation can use visl to run a decoding loop even when no hardware is available or when the kernel uAPI for the codec has not been upstreamed yet. This can reveal bugs at an early stage.”…””}”(hhçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhÊ)”}”(hXlThis driver can also trace the contents of the V4L2 controls submitted to it. It can also dump the contents of the vb2 buffers through a debugfs interface. This is in many ways similar to the tracing infrastructure available for other popular encode/decode APIs out there and can help develop a userspace application by using another (working) one as a reference.”h]”hXlThis driver can also trace the contents of the V4L2 controls submitted to it. It can also dump the contents of the vb2 buffers through a debugfs interface. This is in many ways similar to the tracing infrastructure available for other popular encode/decode APIs out there and can help develop a userspace application by using another (working) one as a reference.”…””}”(hhõhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhŒnote”“”)”}”(hŒ£No actual decoding of video frames is performed by visl. The V4L2 test pattern generator is used to write various debug information to the capture buffers instead.”h]”hÊ)”}”(hŒ£No actual decoding of video frames is performed by visl. The V4L2 test pattern generator is used to write various debug information to the capture buffers instead.”h]”hŒ£No actual decoding of video frames is performed by visl. The V4L2 test pattern generator is used to write various debug information to the capture buffers instead.”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh¶hžhhŸh³h Nubhµ)”}”(hhh]”(hº)”}”(hŒModule parameters”h]”hŒModule parameters”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒèvisl_debug: Activates debug info, printing various debug messages through dprintk. Also controls whether per-frame debug info is shown. Defaults to off. Note that enabling this feature can result in slow performance through serial. ”h]”hÊ)”}”(hŒçvisl_debug: Activates debug info, printing various debug messages through dprintk. Also controls whether per-frame debug info is shown. Defaults to off. Note that enabling this feature can result in slow performance through serial.”h]”hŒçvisl_debug: Activates debug info, printing various debug messages through dprintk. Also controls whether per-frame debug info is shown. Defaults to off. Note that enabling this feature can result in slow performance through serial.”…””}”(hj9hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubj4)”}”(hŒxvisl_transtime_ms: Simulated process time in milliseconds. Slowing down the decoding speed can be useful for debugging. ”h]”hÊ)”}”(hŒwvisl_transtime_ms: Simulated process time in milliseconds. Slowing down the decoding speed can be useful for debugging.”h]”hŒwvisl_transtime_ms: Simulated process time in milliseconds. Slowing down the decoding speed can be useful for debugging.”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K$hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubj4)”}”(hŒçvisl_dprintk_frame_start, visl_dprintk_frame_nframes: Dictates a range of frames where dprintk is activated. This only controls the dprintk tracing on a per-frame basis. Note that printing a lot of data can be slow through serial. ”h]”hÊ)”}”(hŒævisl_dprintk_frame_start, visl_dprintk_frame_nframes: Dictates a range of frames where dprintk is activated. This only controls the dprintk tracing on a per-frame basis. Note that printing a lot of data can be slow through serial.”h]”hŒævisl_dprintk_frame_start, visl_dprintk_frame_nframes: Dictates a range of frames where dprintk is activated. This only controls the dprintk tracing on a per-frame basis. Note that printing a lot of data can be slow through serial.”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K'hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubj4)”}”(hXkeep_bitstream_buffers: Controls whether bitstream (i.e. OUTPUT) buffers are kept after a decoding session. Defaults to false so as to reduce the amount of clutter. keep_bitstream_buffers == false works well when live debugging the client program with GDB. ”h]”hÊ)”}”(hXkeep_bitstream_buffers: Controls whether bitstream (i.e. OUTPUT) buffers are kept after a decoding session. Defaults to false so as to reduce the amount of clutter. keep_bitstream_buffers == false works well when live debugging the client program with GDB.”h]”hXkeep_bitstream_buffers: Controls whether bitstream (i.e. OUTPUT) buffers are kept after a decoding session. Defaults to false so as to reduce the amount of clutter. keep_bitstream_buffers == false works well when live debugging the client program with GDB.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K+hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubj4)”}”(hŒ²bitstream_trace_frame_start, bitstream_trace_nframes: Similar to visl_dprintk_frame_start, visl_dprintk_nframes, but controls the dumping of buffer data through debugfs instead. ”h]”hÊ)”}”(hŒ±bitstream_trace_frame_start, bitstream_trace_nframes: Similar to visl_dprintk_frame_start, visl_dprintk_nframes, but controls the dumping of buffer data through debugfs instead.”h]”hŒ±bitstream_trace_frame_start, bitstream_trace_nframes: Similar to visl_dprintk_frame_start, visl_dprintk_nframes, but controls the dumping of buffer data through debugfs instead.”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K0hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubj4)”}”(hŒãtpg_verbose: Write extra information on each output frame to ease debugging the API. When set to true, the output frames are not stable for a given input as some information like pointers or queue status will be added to them. ”h]”hÊ)”}”(hŒâtpg_verbose: Write extra information on each output frame to ease debugging the API. When set to true, the output frames are not stable for a given input as some information like pointers or queue status will be added to them.”h]”hŒâtpg_verbose: Write extra information on each output frame to ease debugging the API. When set to true, the output frames are not stable for a given input as some information like pointers or queue status will be added to them.”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K4hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j.hŸh³h K hjhžhubeh}”(h]”Œmodule-parameters”ah ]”h"]”Œmodule parameters”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ-What is the default use case for this driver?”h]”hŒ-What is the default use case for this driver?”…””}”(hjØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjÕhžhhŸh³h K9ubhÊ)”}”(hŒóThis driver can be used as a way to compare different userspace implementations. This assumes that a working client is run against visl and that the ftrace and OUTPUT buffer data is subsequently used to debug a work-in-progress implementation.”h]”hŒóThis driver can be used as a way to compare different userspace implementations. This assumes that a working client is run against visl and that the ftrace and OUTPUT buffer data is subsequently used to debug a work-in-progress implementation.”…””}”(hjæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K;hjÕhžhubhÊ)”}”(hŒšEven though no video decoding is actually done, the output frames can be used against a reference for a given input, except if tpg_verbose is set to true.”h]”hŒšEven though no video decoding is actually done, the output frames can be used against a reference for a given input, except if tpg_verbose is set to true.”…””}”(hjôhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K@hjÕhžhubhÊ)”}”(hŒÄDepending on the tpg_verbose parameter value, information on reference frames, their timestamps, the status of the OUTPUT and CAPTURE queues and more can be read directly from the CAPTURE buffers.”h]”hŒÄDepending on the tpg_verbose parameter value, information on reference frames, their timestamps, the status of the OUTPUT and CAPTURE queues and more can be read directly from the CAPTURE buffers.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KChjÕhžhubeh}”(h]”Œ,what-is-the-default-use-case-for-this-driver”ah ]”h"]”Œ-what is the default use case for this driver?”ah$]”h&]”uh1h´hh¶hžhhŸh³h K9ubhµ)”}”(hhh]”(hº)”}”(hŒSupported codecs”h]”hŒSupported codecs”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KHubhÊ)”}”(hŒ#The following codecs are supported:”h]”hŒ#The following codecs are supported:”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KJhjhžhubj/)”}”(hhh]”(j4)”}”(hŒFWHT”h]”hÊ)”}”(hj<h]”hŒFWHT”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KLhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒMPEG2”h]”hÊ)”}”(hjSh]”hŒMPEG2”…””}”(hjUhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KMhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒVP8”h]”hÊ)”}”(hjjh]”hŒVP8”…””}”(hjlhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KNhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒVP9”h]”hÊ)”}”(hjh]”hŒVP9”…””}”(hjƒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒH.264”h]”hÊ)”}”(hj˜h]”hŒH.264”…””}”(hjšhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KPhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒHEVC”h]”hÊ)”}”(hj¯h]”hŒHEVC”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KQhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubj4)”}”(hŒAV1 ”h]”hÊ)”}”(hŒAV1”h]”hŒAV1”…””}”(hjÈhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KRhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jËjÌuh1j.hŸh³h KLhjhžhubeh}”(h]”Œsupported-codecs”ah ]”h"]”Œsupported codecs”ah$]”h&]”uh1h´hh¶hžhhŸh³h KHubhµ)”}”(hhh]”(hº)”}”(hŒvisl trace events”h]”hŒvisl trace events”…””}”(hjíhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjêhžhhŸh³h KUubhÊ)”}”(hŒ8The trace events are defined on a per-codec basis, e.g.:”h]”hŒ8The trace events are defined on a per-codec basis, e.g.:”…””}”(hjûhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KVhjêhžhubhŒ literal_block”“”)”}”(hŒ¯$ ls /sys/kernel/tracing/events/ | grep visl visl_av1_controls visl_fwht_controls visl_h264_controls visl_hevc_controls visl_mpeg2_controls visl_vp8_controls visl_vp9_controls”h]”hŒ¯$ ls /sys/kernel/tracing/events/ | grep visl visl_av1_controls visl_fwht_controls visl_h264_controls visl_hevc_controls visl_mpeg2_controls visl_vp8_controls visl_vp9_controls”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”h±h²Œforce”‰Œlanguage”Œbash”Œhighlight_args”}”uh1j hŸh³h KXhjêhžhubhÊ)”}”(hŒ,For example, in order to dump HEVC SPS data:”h]”hŒ,For example, in order to dump HEVC SPS data:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kchjêhžhubj )”}”(hŒS$ echo 1 > /sys/kernel/tracing/events/visl_hevc_controls/v4l2_ctrl_hevc_sps/enable”h]”hŒS$ echo 1 > /sys/kernel/tracing/events/visl_hevc_controls/v4l2_ctrl_hevc_sps/enable”…””}”hj,sbah}”(h]”h ]”h"]”h$]”h&]”h±h²j‰jŒbash”j}”uh1j hŸh³h KehjêhžhubhÊ)”}”(hŒ6The SPS data will be dumped to the trace buffer, i.e.:”h]”hŒ6The SPS data will be dumped to the trace buffer, i.e.:”…””}”(hj<hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kihjêhžhubj )”}”(hX©$ cat /sys/kernel/tracing/trace video_parameter_set_id 0 seq_parameter_set_id 0 pic_width_in_luma_samples 1920 pic_height_in_luma_samples 1080 bit_depth_luma_minus8 0 bit_depth_chroma_minus8 0 log2_max_pic_order_cnt_lsb_minus4 4 sps_max_dec_pic_buffering_minus1 6 sps_max_num_reorder_pics 2 sps_max_latency_increase_plus1 0 log2_min_luma_coding_block_size_minus3 0 log2_diff_max_min_luma_coding_block_size 3 log2_min_luma_transform_block_size_minus2 0 log2_diff_max_min_luma_transform_block_size 3 max_transform_hierarchy_depth_inter 2 max_transform_hierarchy_depth_intra 2 pcm_sample_bit_depth_luma_minus1 0 pcm_sample_bit_depth_chroma_minus1 0 log2_min_pcm_luma_coding_block_size_minus3 0 log2_diff_max_min_pcm_luma_coding_block_size 0 num_short_term_ref_pic_sets 0 num_long_term_ref_pics_sps 0 chroma_format_idc 1 sps_max_sub_layers_minus1 0 flags AMP_ENABLED|SAMPLE_ADAPTIVE_OFFSET|TEMPORAL_MVP_ENABLED|STRONG_INTRA_SMOOTHING_ENABLED”h]”hX©$ cat /sys/kernel/tracing/trace video_parameter_set_id 0 seq_parameter_set_id 0 pic_width_in_luma_samples 1920 pic_height_in_luma_samples 1080 bit_depth_luma_minus8 0 bit_depth_chroma_minus8 0 log2_max_pic_order_cnt_lsb_minus4 4 sps_max_dec_pic_buffering_minus1 6 sps_max_num_reorder_pics 2 sps_max_latency_increase_plus1 0 log2_min_luma_coding_block_size_minus3 0 log2_diff_max_min_luma_coding_block_size 3 log2_min_luma_transform_block_size_minus2 0 log2_diff_max_min_luma_transform_block_size 3 max_transform_hierarchy_depth_inter 2 max_transform_hierarchy_depth_intra 2 pcm_sample_bit_depth_luma_minus1 0 pcm_sample_bit_depth_chroma_minus1 0 log2_min_pcm_luma_coding_block_size_minus3 0 log2_diff_max_min_pcm_luma_coding_block_size 0 num_short_term_ref_pic_sets 0 num_long_term_ref_pics_sps 0 chroma_format_idc 1 sps_max_sub_layers_minus1 0 flags AMP_ENABLED|SAMPLE_ADAPTIVE_OFFSET|TEMPORAL_MVP_ENABLED|STRONG_INTRA_SMOOTHING_ENABLED”…””}”hjJsbah}”(h]”h ]”h"]”h$]”h&]”h±h²j‰jŒbash”j}”uh1j hŸh³h Kkhjêhžhubeh}”(h]”Œvisl-trace-events”ah ]”h"]”Œvisl trace events”ah$]”h&]”uh1h´hh¶hžhhŸh³h KUubhµ)”}”(hhh]”(hº)”}”(hŒ*Dumping OUTPUT buffer data through debugfs”h]”hŒ*Dumping OUTPUT buffer data through debugfs”…””}”(hjehžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjbhžhhŸh³h KŠubhÊ)”}”(hX"If the **VISL_DEBUGFS** Kconfig is enabled, visl will populate **/sys/kernel/debug/visl/bitstream** with OUTPUT buffer data according to the values of bitstream_trace_frame_start and bitstream_trace_nframes. This can highlight errors as broken clients may fail to fill the buffers properly.”h]”(hŒIf the ”…””}”(hjshžhhŸNh NubhŒstrong”“”)”}”(hŒ**VISL_DEBUGFS**”h]”hŒ VISL_DEBUGFS”…””}”(hj}hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j{hjsubhŒ( Kconfig is enabled, visl will populate ”…””}”(hjshžhhŸNh Nubj|)”}”(hŒ$**/sys/kernel/debug/visl/bitstream**”h]”hŒ /sys/kernel/debug/visl/bitstream”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j{hjsubhŒ¿ with OUTPUT buffer data according to the values of bitstream_trace_frame_start and bitstream_trace_nframes. This can highlight errors as broken clients may fail to fill the buffers properly.”…””}”(hjshžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŒhjbhžhubhÊ)”}”(hŒA single file is created for each processed OUTPUT buffer. Its name contains an integer that denotes the buffer sequence, i.e.:”h]”hŒA single file is created for each processed OUTPUT buffer. Its name contains an integer that denotes the buffer sequence, i.e.:”…””}”(hj§hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K‘hjbhžhubj )”}”(hŒ6snprintf(name, 32, "bitstream%d", run->src->sequence);”h]”hŒ6snprintf(name, 32, "bitstream%d", run->src->sequence);”…””}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”h±h²j‰jŒc”j}”uh1j hŸh³h K”hjbhžhubhÊ)”}”(hŒEDumping the values is simply a matter of reading from the file, i.e.:”h]”hŒEDumping the values is simply a matter of reading from the file, i.e.:”…””}”(hjÅhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K˜hjbhžhubhÊ)”}”(hŒ"For the buffer with sequence == 0:”h]”hŒ"For the buffer with sequence == 0:”…””}”(hjÓhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kšhjbhžhubj )”}”(hXQ$ xxd /sys/kernel/debug/visl/bitstream/bitstream0 00000000: 2601 af04 d088 bc25 a173 0e41 a4f2 3274 &......%.s.A..2t 00000010: c668 cb28 e775 b4ac f53a ba60 f8fd 3aa1 .h.(.u...:.`..:. 00000020: 46b4 bcfc 506c e227 2372 e5f5 d7ea 579f F...Pl.'#r....W. 00000030: 6371 5eb5 0eb8 23b5 ca6a 5de5 983a 19e4 cq^...#..j]..:.. 00000040: e8c3 4320 b4ba a226 cbc1 4138 3a12 32d6 ..C ...&..A8:.2. 00000050: fef3 247b 3523 4e90 9682 ac8e eb0c a389 ..${5#N......... 00000060: ddd0 6cfc 0187 0e20 7aae b15b 1812 3d33 ..l.... z..[..=3 00000070: e1c5 f425 a83a 00b7 4f18 8127 3c4c aefb ...%.:..O..'