€•…aŒ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ŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/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.”…””}”(hj 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.”…””}”(hjh²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”…””}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj1h²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.”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjDh²hh³hÇh´NubjH)”}”(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.”…””}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjDh²hh³hÇh´NubjH)”}”(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.”…””}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjDh²hh³hÇh´NubjH)”}”(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.”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjDh²hh³hÇh´NubjH)”}”(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&]”uh1jGhjDh²hh³hÇh´NubjH)”}”(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&]”uh1jGhjDh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jBh³hÇh´K hj1h²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.”…””}”(hjh²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”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj,h²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´KJhj,h²hubjC)”}”(hhh]”(jH)”}”(hŒFWHT”h]”hÞ)”}”(hjPh]”hŒFWHT”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KLhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(hŒMPEG2”h]”hÞ)”}”(hjgh]”hŒMPEG2”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(hŒVP8”h]”hÞ)”}”(hj~h]”hŒVP8”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KNhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(hŒVP9”h]”hÞ)”}”(hj•h]”hŒVP9”…””}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(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&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(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&]”uh1jGhjKh²hh³hÇh´NubjH)”}”(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&]”uh1jGhjKh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jBh³hÇh´KLhj,h²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”…””}”(hjh²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.:”…””}”(hjh²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”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”Œbash”Œhighlight_args”}”uh1jh³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:”…””}”(hj2h²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”j0}”uh1jh³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.:”…””}”(hjPh²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”…””}”hj^sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj-‰j.Œbash”j0}”uh1jh³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”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjvh²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 ”…””}”(hj‡h²hh³Nh´NubhŒstrong”“”)”}”(hŒ**VISL_DEBUGFS**”h]”hŒ VISL_DEBUGFS”…””}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubhŒ( Kconfig is enabled, visl will populate ”…””}”(hj‡h²hh³Nh´Nubj)”}”(hŒ$**/sys/kernel/debug/visl/bitstream**”h]”hŒ /sys/kernel/debug/visl/bitstream”…””}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubhŒ¿ 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.”…””}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŒhjvh²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‘hjvh²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”j0}”uh1jh³hÇh´K”hjvh²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˜hjvh²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šhjvh²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..'