€•€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”Œ6/translations/zh_CN/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/zh_TW/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/it_IT/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/ja_JP/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/ko_KR/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/pt_BR/userspace-api/media/v4l/dv-timings”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/sp_SP/userspace-api/media/v4l/dv-timings”Œ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Œ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”h]”hŒ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/userspace-api/media/v4l/dv-timings.rst”h´KubhŒtarget”“”)”}”(hŒ.. _dv-timings:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ dv-timings”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒDigital Video (DV) Timings”h]”hŒDigital Video (DV) Timings”…””}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒ paragraph”“”)”}”(hXThe video standards discussed so far have been dealing with Analog TV and the corresponding video timings. Today there are many more different hardware interfaces such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry video signals and there is a need to extend the API to select the video timings for these interfaces. Since it is not possible to extend the :ref:`v4l2_std_id ` due to the limited bits available, a new set of ioctls was added to set/get video timings at the input and output.”h]”(hXƒThe video standards discussed so far have been dealing with Analog TV and the corresponding video timings. Today there are many more different hardware interfaces such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry video signals and there is a need to extend the API to select the video timings for these interfaces. Since it is not possible to extend the ”…””}”(hhíh²hh³Nh´Nubh)”}”(hŒ :ref:`v4l2_std_id `”h]”hŒinline”“”)”}”(hh÷h]”hŒ v4l2_std_id”…””}”(hhûh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhhõubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ"userspace-api/media/v4l/dv-timings”Œ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ v4l2-std-id”uh1hh³hÇh´K hhíubhŒs due to the limited bits available, a new set of ioctls was added to set/get video timings at the input and output.”…””}”(hhíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K hhØh²hubhì)”}”(hXcThese ioctls deal with the detailed digital video timings that define each video format. This includes parameters such as the active video width and height, signal polarities, frontporches, backporches, sync widths etc. The ``linux/v4l2-dv-timings.h`` header can be used to get the timings of the formats in the :ref:`cea861` and :ref:`vesadmt` standards.”h]”(hŒàThese ioctls deal with the detailed digital video timings that define each video format. This includes parameters such as the active video width and height, signal polarities, frontporches, backporches, sync widths etc. The ”…””}”(hj$h²hh³Nh´NubhŒliteral”“”)”}”(hŒ``linux/v4l2-dv-timings.h``”h]”hŒlinux/v4l2-dv-timings.h”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hj$ubhŒ= header can be used to get the timings of the formats in the ”…””}”(hj$h²hh³Nh´Nubh)”}”(hŒ :ref:`cea861`”h]”hú)”}”(hjBh]”hŒcea861”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jNŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒcea861”uh1hh³hÇh´Khj$ubhŒ and ”…””}”(hj$h²hh³Nh´Nubh)”}”(hŒ:ref:`vesadmt`”h]”hú)”}”(hjfh]”hŒvesadmt”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjdubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jrŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvesadmt”uh1hh³hÇh´Khj$ubhŒ standards.”…””}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhì)”}”(hXëTo enumerate and query the attributes of the DV timings supported by a device applications use the :ref:`VIDIOC_ENUM_DV_TIMINGS` and :ref:`VIDIOC_DV_TIMINGS_CAP` ioctls. To set DV timings for the device applications use the :ref:`VIDIOC_S_DV_TIMINGS ` ioctl and to get current DV timings they use the :ref:`VIDIOC_G_DV_TIMINGS ` ioctl. To detect the DV timings as seen by the video receiver applications use the :ref:`VIDIOC_QUERY_DV_TIMINGS` ioctl.”h]”(hŒcTo enumerate and query the attributes of the DV timings supported by a device applications use the ”…””}”(hjŽh²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_ENUM_DV_TIMINGS`”h]”hú)”}”(hj˜h]”hŒVIDIOC_ENUM_DV_TIMINGS”…””}”(hjšh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj–ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j¤Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_enum_dv_timings”uh1hh³hÇh´KhjŽubhŒ and ”…””}”(hjŽh²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_DV_TIMINGS_CAP`”h]”hú)”}”(hj¼h]”hŒVIDIOC_DV_TIMINGS_CAP”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjºubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÈŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_dv_timings_cap”uh1hh³hÇh´KhjŽubhŒ? ioctls. To set DV timings for the device applications use the ”…””}”(hjŽh²hh³Nh´Nubh)”}”(hŒ0:ref:`VIDIOC_S_DV_TIMINGS `”h]”hú)”}”(hjàh]”hŒVIDIOC_S_DV_TIMINGS”…””}”(hjâh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjÞubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jìŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_g_dv_timings”uh1hh³hÇh´KhjŽubhŒ2 ioctl and to get current DV timings they use the ”…””}”(hjŽh²hh³Nh´Nubh)”}”(hŒ0:ref:`VIDIOC_G_DV_TIMINGS `”h]”hú)”}”(hjh]”hŒVIDIOC_G_DV_TIMINGS”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_g_dv_timings”uh1hh³hÇh´KhjŽubhŒT ioctl. To detect the DV timings as seen by the video receiver applications use the ”…””}”(hjŽh²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_QUERY_DV_TIMINGS`”h]”hú)”}”(hj(h]”hŒVIDIOC_QUERY_DV_TIMINGS”…””}”(hj*h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j4Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_query_dv_timings”uh1hh³hÇh´KhjŽubhŒ ioctl.”…””}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhì)”}”(hX>When the hardware detects a video source change (e.g. the video signal appears or disappears, or the video resolution changes), then it will issue a `V4L2_EVENT_SOURCE_CHANGE` event. Use the :ref:`ioctl VIDIOC_SUBSCRIBE_EVENT ` and the :ref:`VIDIOC_DQEVENT` to check if this event was reported.”h]”(hŒ•When the hardware detects a video source change (e.g. the video signal appears or disappears, or the video resolution changes), then it will issue a ”…””}”(hjPh²hh³Nh´NubhŒtitle_reference”“”)”}”(hŒ`V4L2_EVENT_SOURCE_CHANGE`”h]”hŒV4L2_EVENT_SOURCE_CHANGE”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjPubhŒ event. Use the ”…””}”(hjPh²hh³Nh´Nubh)”}”(hŒ<:ref:`ioctl VIDIOC_SUBSCRIBE_EVENT `”h]”hú)”}”(hjnh]”hŒioctl VIDIOC_SUBSCRIBE_EVENT”…””}”(hjph²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjlubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jzŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_subscribe_event”uh1hh³hÇh´K%hjPubhŒ and the ”…””}”(hjPh²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_DQEVENT`”h]”hú)”}”(hj’h]”hŒVIDIOC_DQEVENT”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jžŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_dqevent”uh1hh³hÇh´K%hjPubhŒ% to check if this event was reported.”…””}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K%hhØh²hubhì)”}”(hXÎIf the video signal changed, then the application has to stop streaming, free all buffers, and call the :ref:`VIDIOC_QUERY_DV_TIMINGS` to obtain the new video timings, and if they are valid, it can set those by calling the :ref:`ioctl VIDIOC_S_DV_TIMINGS `. This will also update the format, so use the :ref:`ioctl VIDIOC_G_FMT ` to obtain the new format. Now the application can allocate new buffers and start streaming again.”h]”(hŒhIf the video signal changed, then the application has to stop streaming, free all buffers, and call the ”…””}”(hjºh²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_QUERY_DV_TIMINGS`”h]”hú)”}”(hjÄh]”hŒVIDIOC_QUERY_DV_TIMINGS”…””}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjÂubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÐŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_query_dv_timings”uh1hh³hÇh´K+hjºubhŒY to obtain the new video timings, and if they are valid, it can set those by calling the ”…””}”(hjºh²hh³Nh´Nubh)”}”(hŒ6:ref:`ioctl VIDIOC_S_DV_TIMINGS `”h]”hú)”}”(hjèh]”hŒioctl VIDIOC_S_DV_TIMINGS”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhjæubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jôŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_g_dv_timings”uh1hh³hÇh´K+hjºubhŒ/. This will also update the format, so use the ”…””}”(hjºh²hh³Nh´Nubh)”}”(hŒ(:ref:`ioctl VIDIOC_G_FMT `”h]”hú)”}”(hj h]”hŒioctl VIDIOC_G_FMT”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K+hjºubhŒb to obtain the new format. Now the application can allocate new buffers and start streaming again.”…””}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K+hhØh²hubhì)”}”(hXwThe :ref:`VIDIOC_QUERY_DV_TIMINGS` will just report what the hardware detects, it will never change the configuration. If the currently set timings and the actually detected timings differ, then typically this will mean that you will not be able to capture any video. The correct approach is to rely on the `V4L2_EVENT_SOURCE_CHANGE` event so you know when something changed.”h]”(hŒThe ”…””}”(hj4h²hh³Nh´Nubh)”}”(hŒ:ref:`VIDIOC_QUERY_DV_TIMINGS`”h]”hú)”}”(hj>h]”hŒVIDIOC_QUERY_DV_TIMINGS”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj<ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jJŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒvidioc_query_dv_timings”uh1hh³hÇh´K3hj4ubhX will just report what the hardware detects, it will never change the configuration. If the currently set timings and the actually detected timings differ, then typically this will mean that you will not be able to capture any video. The correct approach is to rely on the ”…””}”(hj4h²hh³Nh´NubjY)”}”(hŒ`V4L2_EVENT_SOURCE_CHANGE`”h]”hŒV4L2_EVENT_SOURCE_CHANGE”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj4ubhŒ* event so you know when something changed.”…””}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K3hhØh²hubhì)”}”(hŒ¹Applications can make use of the :ref:`input-capabilities` and :ref:`output-capabilities` flags to determine whether the digital video ioctls can be used with the given input or output.”h]”(hŒ!Applications can make use of the ”…””}”(hjxh²hh³Nh´Nubh)”}”(hŒ:ref:`input-capabilities`”h]”hú)”}”(hj‚h]”hŒinput-capabilities”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj€ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŽŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒinput-capabilities”uh1hh³hÇh´K:hjxubhŒ and ”…””}”(hjxh²hh³Nh´Nubh)”}”(hŒ:ref:`output-capabilities`”h]”hú)”}”(hj¦h]”hŒoutput-capabilities”…””}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hùhj¤ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j²Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒoutput-capabilities”uh1hh³hÇh´K:hjxubhŒ` flags to determine whether the digital video ioctls can be used with the given input or output.”…””}”(hjxh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K:hhØh²hubeh}”(h]”(Œdigital-video-dv-timings”hÕeh ]”h"]”(Œdigital video (dv) timings”Œ dv-timings”eh$]”h&]”uh1hÖhhh²hh³hÇh´KŒexpect_referenced_by_name”}”jÔhÊsŒexpect_referenced_by_id”}”hÕhÊsubeh}”(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”}”hÕ]”hÊasŒnameids”}”(jÔhÕjÓjÐuŒ nametypes”}”(jÔˆjÓ‰uh}”(hÕhØjÐhØuŒ 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”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hì)”}”(hhh]”hŒ0Hyperlink target "dv-timings" is not referenced.”…””}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjeubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jcubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.