Vsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/driver-api/media/v4l2-ispmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/pt_BR/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/media/v4l2-ispmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp.rsthKubhsection)}(hhh](htitle)}(h2V4L2 generic ISP parameters and statistics supporth]h2V4L2 generic ISP parameters and statistics support}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDesign rationaleh]hDesign rationale}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hISP configuration parameters and statistics are processed and collected by drivers and exchanged with userspace through data types that usually reflect the ISP peripheral registers layout.h]hISP configuration parameters and statistics are processed and collected by drivers and exchanged with userspace through data types that usually reflect the ISP peripheral registers layout.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXOEach ISP driver defines its own metadata output format for parameters and a metadata capture format for statistics. The buffer layout is realized by a set of C structures that reflects the registers layout. The number and types of C structures is fixed by the format definition and becomes part of the Linux kernel uAPI/uABI interface.h]hXOEach ISP driver defines its own metadata output format for parameters and a metadata capture format for statistics. The buffer layout is realized by a set of C structures that reflects the registers layout. The number and types of C structures is fixed by the format definition and becomes part of the Linux kernel uAPI/uABI interface.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hBecause of the hard requirement of backward compatibility when extending the user API/ABI interface, modifying an ISP driver capture or output metadata format after it has been accepted by mainline is very hard if not impossible.h]hBecause of the hard requirement of backward compatibility when extending the user API/ABI interface, modifying an ISP driver capture or output metadata format after it has been accepted by mainline is very hard if not impossible.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hIt generally happens, in fact, that after the first accepted revision of an ISP driver the buffers layout need to be modified, either to support new hardware blocks, to fix bugs or to support different revisions of the hardware.h]hIt generally happens, in fact, that after the first accepted revision of an ISP driver the buffers layout need to be modified, either to support new hardware blocks, to fix bugs or to support different revisions of the hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hEach of these situations would require defining a new metadata format, making it really hard to maintain and extend drivers and requiring userspace to use the correct format depending on the kernel revision in use.h]hEach of these situations would require defining a new metadata format, making it really hard to maintain and extend drivers and requiring userspace to use the correct format depending on the kernel revision in use.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]design-rationaleah ]h"]design rationaleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h!V4L2 ISP configuration parametersh]h!V4L2 ISP configuration parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhK ubh)}(hXIFor these reasons, Video4Linux2 defines generic types for ISP configuration parameters and statistics. Drivers are still expected to define their own formats for their metadata output and capture nodes, but the buffers layout can be defined using the extensible and versioned types defined by include/uapi/linux/media/v4l2-isp.h.h]hXIFor these reasons, Video4Linux2 defines generic types for ISP configuration parameters and statistics. Drivers are still expected to define their own formats for their metadata output and capture nodes, but the buffers layout can be defined using the extensible and versioned types defined by include/uapi/linux/media/v4l2-isp.h.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hj>hhubh)}(hxDrivers are expected to provide the definitions of their supported ISP blocks and the expected maximum size of a buffer.h]hxDrivers are expected to provide the definitions of their supported ISP blocks and the expected maximum size of a buffer.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hj>hhubh)}(hFor driver developers a set of helper functions to assist them with validation of the buffer received from userspace is available in drivers/media/v4l2-core/v4l2-isp.ch]hFor driver developers a set of helper functions to assist them with validation of the buffer received from userspace is available in drivers/media/v4l2-core/v4l2-isp.c}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hj>hhubeh}(h]!v4l2-isp-configuration-parametersah ]h"]!v4l2 isp configuration parametersah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h%V4L2 ISP support driver documentationh]h%V4L2 ISP support driver documentation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK0ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_isp_buffer_size (C macro)c.v4l2_isp_buffer_sizehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hv4l2_isp_buffer_sizeh]hdesc_signature_line)}(hv4l2_isp_buffer_sizeh]h desc_name)}(hv4l2_isp_buffer_sizeh]h desc_sig_name)}(hjh]hv4l2_isp_buffer_size}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKubah}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](cmacroeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh)}(h#``v4l2_isp_buffer_size (max_size)``h]hliteral)}(hjh]hv4l2_isp_buffer_size (max_size)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjhhubh block_quote)}(h"Calculate size of v4l2_isp_buffer h]h)}(h!Calculate size of v4l2_isp_bufferh]h!Calculate size of v4l2_isp_buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj.hKhjhhubh container)}(hX"**Parameters** ``max_size`` The total size of the ISP configuration or statistics blocks **Description** Users of v4l2-isp will have differing sized data arrays for parameters and statistics, depending on their specific blocks. Drivers need to be able to calculate the appropriate size of the buffer to accommodate all ISP blocks supported by the platform. This macro provides a convenient tool for the calculation. The intended users of this function are drivers initializing the size of their metadata (parameters and statistics) buffers.h](h)}(h**Parameters**h]hstrong)}(hj=h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj;ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhj7ubhdefinition_list)}(hhh]hdefinition_list_item)}(hJ``max_size`` The total size of the ISP configuration or statistics blocks h](hterm)}(h ``max_size``h]j)}(hjdh]hmax_size}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhj\ubh definition)}(hhh]h)}(hhhhNhNubah}(h]h ]kah"]h$]h&]uh1j<hj8ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdeviceh]hdevice}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj`modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jy ASTIdentifier)}jtjsb&c.v4l2_isp_params_validate_buffer_sizeasbuh1hhj8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj8ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hj2ubj7)}(hstruct vb2_buffer *vbh](j=)}(hj@h]hstruct}(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h vb2_bufferh]h vb2_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjmodnameN classnameNjxj{)}j~]j&c.v4l2_isp_params_validate_buffer_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvbh]hvb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hj2ubj7)}(hsize_t max_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetj3modnameN classnameNjxj{)}j~]j&c.v4l2_isp_params_validate_buffer_sizeasbuh1hhj*ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hmax_sizeh]hmax_size}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hj2ubeh}(h]h ]h"]h$]h&]hhuh1j0hjhhhjhK#ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK#hjhhubj)}(hhh]h)}(h Validate a V4L2 ISP buffer sizesh]h Validate a V4L2 ISP buffer sizes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj6)}(hX**Parameters** ``struct device *dev`` the driver's device pointer ``struct vb2_buffer *vb`` the videobuf2 buffer ``size_t max_size`` the maximum allowed buffer size **Description** This function performs validation of the size of a V4L2 ISP parameters buffer before the driver can access the actual data buffer content. After the sizes validation, drivers should copy the buffer content to a kernel-only memory area to prevent userspace from modifying it, before completing validation using v4l2_isp_params_validate_buffer(). The **vb** buffer as received from the vb2 .buf_prepare() operation is checked against **max_size** and it's validated to be large enough to accommodate at least one ISP configuration block.h](h)}(h**Parameters**h]j@)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK'hjubjV)}(hhh](j[)}(h3``struct device *dev`` the driver's device pointer h](ja)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK$hjubj{)}(hhh]h)}(hthe driver's device pointerh]hthe driver’s device pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK$hjubah}(h]h ]h"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]uh1jZhjhK$hjubj[)}(h/``struct vb2_buffer *vb`` the videobuf2 buffer h](ja)}(h``struct vb2_buffer *vb``h]j)}(hjh]hstruct vb2_buffer *vb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK%hjubj{)}(hhh]h)}(hthe videobuf2 bufferh]hthe videobuf2 buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK%hjubah}(h]h ]h"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]uh1jZhjhK%hjubj[)}(h4``size_t max_size`` the maximum allowed buffer size h](ja)}(h``size_t max_size``h]j)}(hj:h]hsize_t max_size}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK&hj4ubj{)}(hhh]h)}(hthe maximum allowed buffer sizeh]hthe maximum allowed buffer size}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhK&hjPubah}(h]h ]h"]h$]h&]uh1jzhj4ubeh}(h]h ]h"]h$]h&]uh1jZhjOhK&hjubeh}(h]h ]h"]h$]h&]uh1jUhjubh)}(h**Description**h]j@)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjsubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK(hjubh)}(hThis function performs validation of the size of a V4L2 ISP parameters buffer before the driver can access the actual data buffer content.h]hThis function performs validation of the size of a V4L2 ISP parameters buffer before the driver can access the actual data buffer content.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK'hjubh)}(hAfter the sizes validation, drivers should copy the buffer content to a kernel-only memory area to prevent userspace from modifying it, before completing validation using v4l2_isp_params_validate_buffer().h]hAfter the sizes validation, drivers should copy the buffer content to a kernel-only memory area to prevent userspace from modifying it, before completing validation using v4l2_isp_params_validate_buffer().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK*hjubh)}(hThe **vb** buffer as received from the vb2 .buf_prepare() operation is checked against **max_size** and it's validated to be large enough to accommodate at least one ISP configuration block.h](hThe }(hjhhhNhNubj@)}(h**vb**h]hvb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubhM buffer as received from the vb2 .buf_prepare() operation is checked against }(hjhhhNhNubj@)}(h **max_size**h]hmax_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubh] and it’s validated to be large enough to accommodate at least one ISP configuration block.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*v4l2_isp_params_block_type_info (C struct)!c.v4l2_isp_params_block_type_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_isp_params_block_type_infoh]j)}(h&struct v4l2_isp_params_block_type_infoh](j=)}(hj@h]hstruct}(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK5ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hK5ubj)}(hv4l2_isp_params_block_type_infoh]j)}(hjh]hv4l2_isp_params_block_type_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj hK5ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hK5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hK5hjhhubj)}(hhh]h)}(h#V4L2 ISP params per-block-type infoh]h#V4L2 ISP params per-block-type info}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK8hj;hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hK5ubeh}(h]h ](jstructeh"]h$]h&]jjjjVjjVjjjuh1jhhhjhNhNubj6)}(hX **Definition**:: struct v4l2_isp_params_block_type_info { size_t size; int (*block_validate)(struct device *dev, const struct v4l2_isp_block_header *block); }; **Members** ``size`` the block type expected size ``block_validate`` driver's callback to implement per-block validation **Description** The v4l2_isp_params_block_type_info collects information of the ISP configuration block types for validation purposes. It contains the expected block type size and a function pointer where drivers can register a callback for additional per-block validation purposes. The validation function is expected to return 0 on success or a negative error number for errors. Drivers shall prepare a list of block type info, indexed by block type, one for each supported ISP block type and correctly populate them with the expected block type size and the optional callback.h](j)}(h**Definition**:: struct v4l2_isp_params_block_type_info { size_t size; int (*block_validate)(struct device *dev, const struct v4l2_isp_block_header *block); }; h](h)}(h**Definition**::h](j@)}(h**Definition**h]h Definition}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjbubh:}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhj^ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhjZubh)}(hXlThe v4l2_isp_params_block_type_info collects information of the ISP configuration block types for validation purposes. It contains the expected block type size and a function pointer where drivers can register a callback for additional per-block validation purposes. The validation function is expected to return 0 on success or a negative error number for errors.h]hXlThe v4l2_isp_params_block_type_info collects information of the ISP configuration block types for validation purposes. It contains the expected block type size and a function pointer where drivers can register a callback for additional per-block validation purposes. The validation function is expected to return 0 on success or a negative error number for errors.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK;hjZubh)}(hDrivers shall prepare a list of block type info, indexed by block type, one for each supported ISP block type and correctly populate them with the expected block type size and the optional callback.h]hDrivers shall prepare a list of block type info, indexed by block type, one for each supported ISP block type and correctly populate them with the expected block type size and the optional callback.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKAhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,v4l2_isp_params_validate_buffer (C function)!c.v4l2_isp_params_validate_bufferhNtauh1jhjhhhNhNubj)}(hhh](j)}(hint v4l2_isp_params_validate_buffer (struct device *dev, struct vb2_buffer *vb, const struct v4l2_isp_params_buffer *buffer, const struct v4l2_isp_params_block_type_info *type_info, size_t num_block_types)h]j)}(hint v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb, const struct v4l2_isp_params_buffer *buffer, const struct v4l2_isp_params_block_type_info *type_info, size_t num_block_types)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhKMubj)}(hv4l2_isp_params_validate_bufferh]j)}(hv4l2_isp_params_validate_bufferh]hv4l2_isp_params_validate_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj|hhhjhKMubj1)}(h(struct device *dev, struct vb2_buffer *vb, const struct v4l2_isp_params_buffer *buffer, const struct v4l2_isp_params_block_type_info *type_info, size_t num_block_types)h](j7)}(hstruct device *devh](j=)}(hj@h]hstruct}(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjmodnameN classnameNjxj{)}j~]j)}jtjsb!c.v4l2_isp_params_validate_bufferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(hstruct vb2_buffer *vbh](j=)}(hj@h]hstruct}(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(h vb2_bufferh]h vb2_buffer}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjOmodnameN classnameNjxj{)}j~]j!c.v4l2_isp_params_validate_bufferasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hvbh]hvb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(h+const struct v4l2_isp_params_buffer *bufferh](j=)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(hj@h]hstruct}(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hv4l2_isp_params_bufferh]hv4l2_isp_params_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjmodnameN classnameNjxj{)}j~]j!c.v4l2_isp_params_validate_bufferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufferh]hbuffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(h7const struct v4l2_isp_params_block_type_info *type_infoh](j=)}(hjh]hconst}(hj+ hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj' ubj)}(h h]h }(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubj=)}(hj@h]hstruct}(hjF hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj' ubj)}(h h]h }(hjS hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubh)}(hhh]j)}(hv4l2_isp_params_block_type_infoh]hv4l2_isp_params_block_type_info}(hjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjf modnameN classnameNjxj{)}j~]j!c.v4l2_isp_params_validate_bufferasbuh1hhj' ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubj)}(h type_infoh]h type_info}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(hsize_t num_block_typesh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetj modnameN classnameNjxj{)}j~]j!c.v4l2_isp_params_validate_bufferasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnum_block_typesh]hnum_block_types}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubeh}(h]h ]h"]h$]h&]hhuh1j0hj|hhhjhKMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjxhhhjhKMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhKMhjuhhubj)}(hhh]h)}(h%Validate a V4L2 ISP parameters bufferh]h%Validate a V4L2 ISP parameters buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKMhj hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj' jj' jjjuh1jhhhjhNhNubj6)}(hX**Parameters** ``struct device *dev`` the driver's device pointer ``struct vb2_buffer *vb`` the videobuf2 buffer ``const struct v4l2_isp_params_buffer *buffer`` the V4L2 ISP parameters buffer ``const struct v4l2_isp_params_block_type_info *type_info`` the array of per-block-type validation info ``size_t num_block_types`` the number of block types in the type_info array **Description** This function completes the validation of a V4L2 ISP parameters buffer, verifying each configuration block correctness before the driver can use them to program the hardware. Drivers should use this function after having validated the correctness of the vb2 buffer sizes by using the v4l2_isp_params_validate_buffer_size() helper first. Once the buffer size has been validated, drivers should perform a copy of the user provided buffer into a kernel-only memory buffer to prevent userspace from modifying its content after it has been submitted to the driver, and then call this function to complete validation.h](h)}(h**Parameters**h]j@)}(hj1 h]h Parameters}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj/ ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKQhj+ ubjV)}(hhh](j[)}(h3``struct device *dev`` the driver's device pointer h](ja)}(h``struct device *dev``h]j)}(hjP h]hstruct device *dev}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKNhjJ ubj{)}(hhh]h)}(hthe driver's device pointerh]hthe driver’s device pointer}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje hKNhjf ubah}(h]h ]h"]h$]h&]uh1jzhjJ ubeh}(h]h ]h"]h$]h&]uh1jZhje hKNhjG ubj[)}(h/``struct vb2_buffer *vb`` the videobuf2 buffer h](ja)}(h``struct vb2_buffer *vb``h]j)}(hj h]hstruct vb2_buffer *vb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKOhj ubj{)}(hhh]h)}(hthe videobuf2 bufferh]hthe videobuf2 buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKOhj ubah}(h]h ]h"]h$]h&]uh1jzhj ubeh}(h]h ]h"]h$]h&]uh1jZhj hKOhjG ubj[)}(hO``const struct v4l2_isp_params_buffer *buffer`` the V4L2 ISP parameters buffer h](ja)}(h/``const struct v4l2_isp_params_buffer *buffer``h]j)}(hj h]h+const struct v4l2_isp_params_buffer *buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKPhj ubj{)}(hhh]h)}(hthe V4L2 ISP parameters bufferh]hthe V4L2 ISP parameters buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKPhj ubah}(h]h ]h"]h$]h&]uh1jzhj ubeh}(h]h ]h"]h$]h&]uh1jZhj hKPhjG ubj[)}(hh``const struct v4l2_isp_params_block_type_info *type_info`` the array of per-block-type validation info h](ja)}(h;``const struct v4l2_isp_params_block_type_info *type_info``h]j)}(hj h]h7const struct v4l2_isp_params_block_type_info *type_info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKQhj ubj{)}(hhh]h)}(h+the array of per-block-type validation infoh]h+the array of per-block-type validation info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKQhj ubah}(h]h ]h"]h$]h&]uh1jzhj ubeh}(h]h ]h"]h$]h&]uh1jZhj hKQhjG ubj[)}(hL``size_t num_block_types`` the number of block types in the type_info array h](ja)}(h``size_t num_block_types``h]j)}(hj4 h]hsize_t num_block_types}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2 ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKRhj. ubj{)}(hhh]h)}(h0the number of block types in the type_info arrayh]h0the number of block types in the type_info array}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI hKRhjJ ubah}(h]h ]h"]h$]h&]uh1jzhj. ubeh}(h]h ]h"]h$]h&]uh1jZhjI hKRhjG ubeh}(h]h ]h"]h$]h&]uh1jUhj+ ubh)}(h**Description**h]j@)}(hjo h]h Description}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjm ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKThj+ ubh)}(hThis function completes the validation of a V4L2 ISP parameters buffer, verifying each configuration block correctness before the driver can use them to program the hardware.h]hThis function completes the validation of a V4L2 ISP parameters buffer, verifying each configuration block correctness before the driver can use them to program the hardware.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKShj+ ubh)}(hXDrivers should use this function after having validated the correctness of the vb2 buffer sizes by using the v4l2_isp_params_validate_buffer_size() helper first. Once the buffer size has been validated, drivers should perform a copy of the user provided buffer into a kernel-only memory buffer to prevent userspace from modifying its content after it has been submitted to the driver, and then call this function to complete validation.h]hXDrivers should use this function after having validated the correctness of the vb2 buffer sizes by using the v4l2_isp_params_validate_buffer_size() helper first. Once the buffer size has been validated, drivers should perform a copy of the user provided buffer into a kernel-only memory buffer to prevent userspace from modifying its content after it has been submitted to the driver, and then call this function to complete validation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKWhj+ ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)v4l2_isp_stats_block_type_info (C struct) c.v4l2_isp_stats_block_type_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_isp_stats_block_type_infoh]j)}(h%struct v4l2_isp_stats_block_type_infoh](j=)}(hj@h]hstruct}(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKaubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKaubj)}(hv4l2_isp_stats_block_type_infoh]j)}(hj h]hv4l2_isp_stats_block_type_info}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKaubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKaubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKahj hhubj)}(hhh]h)}(h"V4L2 ISP stats per-block-type infoh]h"V4L2 ISP stats per-block-type info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKehj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKaubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj6)}(hX  **Definition**:: struct v4l2_isp_stats_block_type_info { size_t size; }; **Members** ``size`` the block type expected size **Description** The v4l2_isp_stats_block_type_info collects information of the ISP statistics block types for validation purposes. It currently only contains the expected block size. Drivers shall prepare a list of statistics block type info, indexed by block type, one for each supported ISP statistics block type and correctly populate them with the expected block size.h](j)}(hV**Definition**:: struct v4l2_isp_stats_block_type_info { size_t size; }; h](h)}(h**Definition**::h](j@)}(h**Definition**h]h Definition}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj) ubh:}(hj) hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKihj% ubj)}(h=struct v4l2_isp_stats_block_type_info { size_t size; };h]h=struct v4l2_isp_stats_block_type_info { size_t size; };}hjF sbah}(h]h ]h"]h$]h&]hhuh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKkhj% ubeh}(h]h ]h"]h$]h&]uh1jhjE hKihj! ubh)}(h **Members**h]j@)}(hj] h]hMembers}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj[ ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKohj! ubjV)}(hhh]j[)}(h'``size`` the block type expected size h](ja)}(h``size``h]j)}(hj| h]hsize}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhhjv ubj{)}(hhh]h)}(hthe block type expected sizeh]hthe block type expected size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKghj ubah}(h]h ]h"]h$]h&]uh1jzhjv ubeh}(h]h ]h"]h$]h&]uh1jZhj hKhhjs ubah}(h]h ]h"]h$]h&]uh1jUhj! ubh)}(h**Description**h]j@)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKjhj! ubh)}(hThe v4l2_isp_stats_block_type_info collects information of the ISP statistics block types for validation purposes. It currently only contains the expected block size.h]hThe v4l2_isp_stats_block_type_info collects information of the ISP statistics block types for validation purposes. It currently only contains the expected block size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKghj! ubh)}(hDrivers shall prepare a list of statistics block type info, indexed by block type, one for each supported ISP statistics block type and correctly populate them with the expected block size.h]hDrivers shall prepare a list of statistics block type info, indexed by block type, one for each supported ISP statistics block type and correctly populate them with the expected block size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKkhj! ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'v4l2_isp_stats_init_buffer (C function)c.v4l2_isp_stats_init_bufferhNtauh1jhjhhhNhNubj)}(hhh](j)}(h\void v4l2_isp_stats_init_buffer (struct v4l2_isp_buffer *buf, enum v4l2_isp_version version)h]j)}(h[void v4l2_isp_stats_init_buffer(struct v4l2_isp_buffer *buf, enum v4l2_isp_version version)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKuubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKuubj)}(hv4l2_isp_stats_init_bufferh]j)}(hv4l2_isp_stats_init_bufferh]hv4l2_isp_stats_init_buffer}(hj- hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKuubj1)}(h<(struct v4l2_isp_buffer *buf, enum v4l2_isp_version version)h](j7)}(hstruct v4l2_isp_buffer *bufh](j=)}(hj@h]hstruct}(hjI hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjE ubj)}(h h]h }(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubh)}(hhh]j)}(hv4l2_isp_bufferh]hv4l2_isp_buffer}(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetji modnameN classnameNjxj{)}j~]j)}jtj/ sbc.v4l2_isp_stats_init_bufferasbuh1hhjE ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjA ubj7)}(henum v4l2_isp_version versionh](j=)}(henumh]henum}(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hv4l2_isp_versionh]hv4l2_isp_version}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetj modnameN classnameNjxj{)}j~]j c.v4l2_isp_stats_init_bufferasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hversionh]hversion}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjA ubeh}(h]h ]h"]h$]h&]hhuh1j0hj hhhj hKuubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKuubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKuhj hhubj)}(hhh]h)}(hInitialize a statistics bufferh]hInitialize a statistics buffer}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKuhj-hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj6)}(hX#**Parameters** ``struct v4l2_isp_buffer *buf`` the v4l2_isp_buffer to initialize ``enum v4l2_isp_version version`` the v4l2-isp serialization format version used by the driver **Description** Initialize a buffer of statistics. Only set the 'version' field and reset 'data_size' to 0.h](h)}(h**Parameters**h]j@)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjPubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKyhjLubjV)}(hhh](j[)}(hB``struct v4l2_isp_buffer *buf`` the v4l2_isp_buffer to initialize h](ja)}(h``struct v4l2_isp_buffer *buf``h]j)}(hjqh]hstruct v4l2_isp_buffer *buf}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKzhjkubj{)}(hhh]h)}(h!the v4l2_isp_buffer to initializeh]h!the v4l2_isp_buffer to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKzhjubah}(h]h ]h"]h$]h&]uh1jzhjkubeh}(h]h ]h"]h$]h&]uh1jZhjhKzhjhubj[)}(h_``enum v4l2_isp_version version`` the v4l2-isp serialization format version used by the driver h](ja)}(h!``enum v4l2_isp_version version``h]j)}(hjh]henum v4l2_isp_version version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhK{hjubj{)}(hhh]h)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(hunsigned int block_typeh](j)}(hunsignedh]hunsigned}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h block_typeh]h block_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubj7)}(hsize_t max_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejt reftargetjmodnameN classnameNjxj{)}j~]jec.v4l2_isp_stats_init_blockasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_sizeh]hmax_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j6hjubeh}(h]h ]h"]h$]h&]hhuh1j0hj&hhhj7hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj"hhhj7hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hKhjhhubj)}(hhh]h)}(h8Create and initialize a new block in a statistics bufferh]h8Create and initialize a new block in a statistics buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj6)}(hX**Parameters** ``struct device *dev`` the driver's device pointer ``struct v4l2_isp_buffer *buf`` the v4l2_isp_buffer where statistics are serialized ``const struct v4l2_isp_stats_block_type_info *type_info`` the array of per-block-type validation info ``size_t num_block_types`` the number of block types in the type_info array ``unsigned int block_type`` the type of the statistics block to initialize ``size_t max_size`` the maximum size of the data[] member of **buf** **Description** This function locates and initialize a new statistics block in **buf** for the driver to populate its content. The function checks that enough space for the requested **block_type** is available in **buf** and increments the 'data_size' member of **buf**. The newly created statistics block's header is initialized with the size and type information provided by the caller in **type_info**. Drivers should call this function before populating a new statistics block content. Returns a pointer to the next available location in **buf**, or an error pointer if the requested **block_size** is not available in **buf** or **block_type** is not valid.h](h)}(h**Parameters**h]j@)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj!ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubjV)}(hhh](j[)}(h3``struct device *dev`` the driver's device pointer h](ja)}(h``struct device *dev``h]j)}(hjBh]hstruct device *dev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhj<ubj{)}(hhh]h)}(hthe driver's device pointerh]hthe driver’s device pointer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjXubah}(h]h ]h"]h$]h&]uh1jzhj<ubeh}(h]h ]h"]h$]h&]uh1jZhjWhKhj9ubj[)}(hT``struct v4l2_isp_buffer *buf`` the v4l2_isp_buffer where statistics are serialized W%h](ja)}(h``struct v4l2_isp_buffer *buf``h]j)}(hj{h]hstruct v4l2_isp_buffer *buf}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjuubj{)}(hhh]h)}(h3the v4l2_isp_buffer where statistics are serializedh]h3the v4l2_isp_buffer where statistics are serialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jzhjuubeh}(h]h ]h"]h$]h&]uh1jZhjhKhj9ubj[)}(hg``const struct v4l2_isp_stats_block_type_info *type_info`` the array of per-block-type validation info h](ja)}(h:``const struct v4l2_isp_stats_block_type_info *type_info``h]j)}(hjh]h6const struct v4l2_isp_stats_block_type_info *type_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubj{)}(hhh]h)}(h+the array of per-block-type validation infoh]h+the array of per-block-type validation info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]uh1jZhjhKhj9ubj[)}(hL``size_t num_block_types`` the number of block types in the type_info array h](ja)}(h``size_t num_block_types``h]j)}(hjh]hsize_t num_block_types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubj{)}(hhh]h)}(h0the number of block types in the type_info arrayh]h0the number of block types in the type_info array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]uh1jZhjhKhj9ubj[)}(hK``unsigned int block_type`` the type of the statistics block to initialize h](ja)}(h``unsigned int block_type``h]j)}(hj&h]hunsigned int block_type}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhj ubj{)}(hhh]h)}(h.the type of the statistics block to initializeh]h.the type of the statistics block to initialize}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jzhj ubeh}(h]h ]h"]h$]h&]uh1jZhj;hKhj9ubj[)}(hE``size_t max_size`` the maximum size of the data[] member of **buf** h](ja)}(h``size_t max_size``h]j)}(hj_h]hsize_t max_size}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1j`hb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjYubj{)}(hhh]h)}(h0the maximum size of the data[] member of **buf**h](h)the maximum size of the data[] member of }(hjxhhhNhNubj@)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjxubeh}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1jzhjYubeh}(h]h ]h"]h$]h&]uh1jZhjthKhj9ubeh}(h]h ]h"]h$]h&]uh1jUhjubh)}(h**Description**h]j@)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubh)}(hXThis function locates and initialize a new statistics block in **buf** for the driver to populate its content. The function checks that enough space for the requested **block_type** is available in **buf** and increments the 'data_size' member of **buf**. The newly created statistics block's header is initialized with the size and type information provided by the caller in **type_info**.h](h?This function locates and initialize a new statistics block in }(hjhhhNhNubj@)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubha for the driver to populate its content. The function checks that enough space for the requested }(hjhhhNhNubj@)}(h**block_type**h]h block_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubh is available in }(hjhhhNhNubj@)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubh. and increments the ‘data_size’ member of }(hjhhhNhNubj@)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubh|. The newly created statistics block’s header is initialized with the size and type information provided by the caller in }(hjhhhNhNubj@)}(h **type_info**h]h type_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubh)}(hSDrivers should call this function before populating a new statistics block content.h]hSDrivers should call this function before populating a new statistics block content.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubh)}(hReturns a pointer to the next available location in **buf**, or an error pointer if the requested **block_size** is not available in **buf** or **block_type** is not valid.h](h4Returns a pointer to the next available location in }(hj6hhhNhNubj@)}(h**buf**h]hbuf}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj6ubh', or an error pointer if the requested }(hj6hhhNhNubj@)}(h**block_size**h]h block_size}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj6ubh is not available in }(hj6hhhNhNubj@)}(h**buf**h]hbuf}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj6ubh or }(hj6hhhNhNubj@)}(h**block_type**h]h block_type}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj6ubh is not valid.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-isp:49: ./include/media/v4l2-isp.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubeh}(h]%v4l2-isp-support-driver-documentationah ]h"]%v4l2 isp support driver documentationah$]h&]uh1hhhhhhhhK0ubeh}(h]2v4l2-generic-isp-parameters-and-statistics-supportah ]h"]2v4l2 generic isp parameters and statistics supportah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj;j8j~j{jju nametypes}(jj;j~juh}(jhj8hj{j>jjjjjjjjjsjxj j j j jj"u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.