sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget2/translations/zh_CN/driver-api/media/drivers/zoranmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/zh_TW/driver-api/media/drivers/zoranmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/it_IT/driver-api/media/drivers/zoranmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/ja_JP/driver-api/media/drivers/zoranmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/ko_KR/driver-api/media/drivers/zoranmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/sp_SP/driver-api/media/drivers/zoranmodnameN 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:spacepreserveuh1hhhhhhL/var/lib/git/docbuild/linux/Documentation/driver-api/media/drivers/zoran.rsthKubhsection)}(hhh](htitle)}(hThe Zoran driverh]hThe Zoran driver}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hCunified zoran driver (zr360x7, zoran, buz, dc10(+), dc30(+), lml33)h]hCunified zoran driver (zr360x7, zoran, buz, dc10(+), dc30(+), lml33)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h3website: http://mjpeg.sourceforge.net/driver-zoran/h](h website: }(hhhhhNhNubh reference)}(h*http://mjpeg.sourceforge.net/driver-zoran/h]h*http://mjpeg.sourceforge.net/driver-zoran/}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurihuh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh]h)}(hFrequently Asked Questionsh]hFrequently Asked Questions}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubah}(h]frequently-asked-questionsah ]h"]frequently asked questionsah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hWhat cards are supportedh]hWhat cards are supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hIomega Buz, Linux Media Labs LML33/LML33R10, Pinnacle/Miro DC10/DC10+/DC30/DC30+ and related boards (available under various names).h]hIomega Buz, Linux Media Labs LML33/LML33R10, Pinnacle/Miro DC10/DC10+/DC30/DC30+ and related boards (available under various names).}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(h Iomega Buzh]h Iomega Buz}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhKubh bullet_list)}(hhh](h list_item)}(hZoran zr36067 PCI controllerh]h)}(hjJh]hZoran zr36067 PCI controller}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHubah}(h]h ]h"]h$]h&]uh1jFhjChhhhhNubjG)}(hZoran zr36060 MJPEG codech]h)}(hjah]hZoran zr36060 MJPEG codec}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ubah}(h]h ]h"]h$]h&]uh1jFhjChhhhhNubjG)}(hPhilips saa7111 TV decoderh]h)}(hjxh]hPhilips saa7111 TV decoder}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvubah}(h]h ]h"]h$]h&]uh1jFhjChhhhhNubjG)}(hPhilips saa7185 TV encoder h]h)}(hPhilips saa7185 TV encoderh]hPhilips saa7185 TV encoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jFhjChhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jAhhhKhj0hhubh)}(h`Drivers to use: videodev, i2c-core, i2c-algo-bit, videocodec, saa7111, saa7185, zr36060, zr36067h]h`Drivers to use: videodev, i2c-core, i2c-algo-bit, videocodec, saa7111, saa7185, zr36060, zr36067}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0hhubh)}(h%Inputs/outputs: Composite and S-videoh]h%Inputs/outputs: Composite and S-video}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0hhubh)}(h@Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)h]h@Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hj0hhubh)}(hCard number: 7h]hCard number: 7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj0hhubeh}(h] iomega-buzah ]h"] iomega buzah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hAverMedia 6 Eyes AVS6EYESh]hAverMedia 6 Eyes AVS6EYES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK&ubjB)}(hhh](jG)}(hZoran zr36067 PCI controllerh]h)}(hjh]hZoran zr36067 PCI controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hZoran zr36060 MJPEG codech]h)}(hjh]hZoran zr36060 MJPEG codec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hSamsung ks0127 TV decoderh]h)}(hj1h]hSamsung ks0127 TV decoder}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj/ubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hConexant bt866 TV encoder h]h)}(hConexant bt866 TV encoderh]hConexant bt866 TV encoder}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjFubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jAhhhK(hjhhubh)}(h]Drivers to use: videodev, i2c-core, i2c-algo-bit, videocodec, ks0127, bt866, zr36060, zr36067h]h]Drivers to use: videodev, i2c-core, i2c-algo-bit, videocodec, ks0127, bt866, zr36060, zr36067}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubhdefinition_list)}(hhh]hdefinition_list_item)}(hInputs/outputs: Six physical inputs. 1-6 are composite, 1-2, 3-4, 5-6 doubles as S-video, 1-3 triples as component. One composite output. h](hterm)}(hInputs/outputs:h]hInputs/outputs:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhK4hjyubh definition)}(hhh]h)}(hySix physical inputs. 1-6 are composite, 1-2, 3-4, 5-6 doubles as S-video, 1-3 triples as component. One composite output.h]hySix physical inputs. 1-6 are composite, 1-2, 3-4, 5-6 doubles as S-video, 1-3 triples as component. One composite output.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jwhhhK4hjtubah}(h]h ]h"]h$]h&]uh1jrhjhhhhhNubh)}(h@Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)h]h@Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjhhubh)}(hCard number: 8h]hCard number: 8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjhhubhnote)}(h&Not autodetected, card=8 is necessary.h]h)}(hjh]h&Not autodetected, card=8 is necessary.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK' in one of your startup scripts (normally rc.local) if you don't use X. Both make sure that the modules are loaded on startup, under the root account.h]hX$One thing to keep in mind is that this doesn’t load zr36067.o itself yet. It just automates loading. If you start using xawtv, the device won’t load on some systems, since you’re trying to load modules as a user, which is not allowed (“permission denied”). A quick workaround is to add ‘Load “v4l”’ to XF86Config-4 when you use X by default, or to run ‘v4l-conf -c ’ in one of your startup scripts (normally rc.local) if you don’t use X. Both make sure that the modules are loaded on startup, under the root account.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThj hhubeh}(h]$how-do-i-get-this-damn-thing-to-workah ]h"]$how do i get this damn thing to workah$]h&]uh1hhhhhhhhMIubh)}(hhh](h)}(h9What mainboard should I use (or why doesn't my card work)h]h;What mainboard should I use (or why doesn’t my card work)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM]ubh)}(hB. In short: good=SiS/Intel, bad=VIA.h]hB. In short: good=SiS/Intel, bad=VIA.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM`hj hhubh)}(hX'Experience tells us that people with a Buz, on average, have more problems than users with a DC10+/LML33. Also, it tells us that people owning a VIA- based mainboard (ktXXX, MVP3) have more problems than users with a mainboard based on a different chipset. Here's some notes from Andrew Stevens:h]hX)Experience tells us that people with a Buz, on average, have more problems than users with a DC10+/LML33. Also, it tells us that people owning a VIA- based mainboard (ktXXX, MVP3) have more problems than users with a mainboard based on a different chipset. Here’s some notes from Andrew Stevens:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMbhj hhubh)}(hDHere's my experience of using LML33 and Buz on various motherboards:h]hFHere’s my experience of using LML33 and Buz on various motherboards:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMghj hhubjB)}(hhh](jG)}(h4VIA MVP3 - Forget it. Pointless. Doesn't work.h]js)}(hhh]jx)}(h.VIA MVP3 - Forget it. Pointless. Doesn't work.h](j~)}(hVIA MVP3h]hVIA MVP3}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMihj/ubj)}(hhh]jB)}(hhh]jG)}(h#Forget it. Pointless. Doesn't work.h]h)}(hjIh]h%Forget it. Pointless. Doesn’t work.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMjhjGubah}(h]h ]h"]h$]h&]uh1jFhjDubah}(h]h ]h"]h$]h&]jj uh1jAhhhMjhjAubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jwhhhMihj,ubah}(h]h ]h"]h$]h&]uh1jrhj(ubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(h`Intel 430FX (Pentium 200) - LML33 perfect, Buz tolerable (3 or 4 frames dropped per movie)h]js)}(hhh]jx)}(hZIntel 430FX (Pentium 200) - LML33 perfect, Buz tolerable (3 or 4 frames dropped per movie)h](j~)}(hIntel 430FX (Pentium 200)h]hIntel 430FX (Pentium 200)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMkhjubj)}(hhh]jB)}(hhh]jG)}(h>LML33 perfect, Buz tolerable (3 or 4 frames dropped per movie)h]h)}(hjh]h>LML33 perfect, Buz tolerable (3 or 4 frames dropped per movie)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMlhjubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]jj uh1jAhhhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhhhMkhjubah}(h]h ]h"]h$]h&]uh1jrhj|ubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(heIntel 440BX (early stepping) - LML33 tolerable. Buz starting to get annoying (6-10 frames/hour)h]js)}(hhh]jx)}(h_Intel 440BX (early stepping) - LML33 tolerable. Buz starting to get annoying (6-10 frames/hour)h](j~)}(hIntel 440BX (early stepping)h]hIntel 440BX (early stepping)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMmhjubj)}(hhh]jB)}(hhh]jG)}(h@LML33 tolerable. Buz starting to get annoying (6-10 frames/hour)h]h)}(hjh]h@LML33 tolerable. Buz starting to get annoying (6-10 frames/hour)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMnhjubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]jj uh1jAhhhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhhhMmhjubah}(h]h ]h"]h$]h&]uh1jrhjubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(hfIntel 440BX (late stepping) - Buz tolerable, LML3 almost perfect (occasional single frame drops)h]js)}(hhh]jx)}(h`Intel 440BX (late stepping) - Buz tolerable, LML3 almost perfect (occasional single frame drops)h](j~)}(hIntel 440BX (late stepping)h]hIntel 440BX (late stepping)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMohj+ubj)}(hhh]jB)}(hhh]jG)}(hBBuz tolerable, LML3 almost perfect (occasional single frame drops)h]h)}(hjEh]hBBuz tolerable, LML3 almost perfect (occasional single frame drops)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMphjCubah}(h]h ]h"]h$]h&]uh1jFhj@ubah}(h]h ]h"]h$]h&]jj uh1jAhhhMphj=ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jwhhhMohj(ubah}(h]h ]h"]h$]h&]uh1jrhj$ubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(h,SiS735 - LML33 perfect, Buz tolerable.h]js)}(hhh]jx)}(h&SiS735 - LML33 perfect, Buz tolerable.h](j~)}(hSiS735h]hSiS735}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMqhjubj)}(hhh]jB)}(hhh]jG)}(hLML33 perfect, Buz tolerable.h]h)}(hjh]hLML33 perfect, Buz tolerable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMrhjubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]jj uh1jAhhhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhhhMqhj|ubah}(h]h ]h"]h$]h&]uh1jrhjxubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(hUVIA KT133(*) - LML33 starting to get annoying, Buz poor enough that I have up. h]js)}(hhh]jx)}(hOVIA KT133(*) - LML33 starting to get annoying, Buz poor enough that I have up. h](j~)}(h VIA KT133(*)h]h VIA KT133(*)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMthjubj)}(hhh]jB)}(hhh]jG)}(h@LML33 starting to get annoying, Buz poor enough that I have up. h]h)}(h?LML33 starting to get annoying, Buz poor enough that I have up.h]h?LML33 starting to get annoying, Buz poor enough that I have up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthjubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]jj uh1jAhhhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhhhMthjubah}(h]h ]h"]h$]h&]uh1jrhjubah}(h]h ]h"]h$]h&]uh1jFhj%hhhNhNubjG)}(h*Both 440BX boards were dual CPU versions. h]h)}(h)Both 440BX boards were dual CPU versions.h]h)Both 440BX boards were dual CPU versions.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMvhj!ubah}(h]h ]h"]h$]h&]uh1jFhj%hhhhhNubeh}(h]h ]h"]h$]h&]jj uh1jAhhhMihj hhubh)}(h!Bernhard Praschinger later added:h]h!Bernhard Praschinger later added:}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMxhj hhubjB)}(hhh](jG)}(h%AMD 751 - Buz perfect-tolerableh]js)}(hhh]jx)}(hAMD 751 - Buz perfect-tolerableh](j~)}(hAMD 751h]hAMD 751}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhMzhjWubj)}(hhh]jB)}(hhh]jG)}(hBuz perfect-tolerableh]h)}(hjqh]hBuz perfect-tolerable}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hjoubah}(h]h ]h"]h$]h&]uh1jFhjlubah}(h]h ]h"]h$]h&]jj uh1jAhhhM{hjiubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jwhhhMzhjTubah}(h]h ]h"]h$]h&]uh1jrhjPubah}(h]h ]h"]h$]h&]uh1jFhjMhhhNhNubjG)}(h&AMD 760 - Buz perfect-tolerable h]js)}(hhh]jx)}(h AMD 760 - Buz perfect-tolerable h](j~)}(hAMD 760h]hAMD 760}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hhhM}hjubj)}(hhh]jB)}(hhh]jG)}(hBuz perfect-tolerable h]h)}(hBuz perfect-tolerableh]hBuz perfect-tolerable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hjubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]jj uh1jAhhhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhhhM}hjubah}(h]h ]h"]h$]h&]uh1jrhjubah}(h]h ]h"]h$]h&]uh1jFhjMhhhNhNubeh}(h]h ]h"]h$]h&]jj uh1jAhhhMzhj hhubh)}(hXEIn general, people on the user mailinglist won't give you much of a chance if you have a VIA-based motherboard. They may be cheap, but sometimes, you'd rather want to spend some more money on better boards. In general, VIA mainboard's IDE/PCI performance will also suck badly compared to others. You'll noticed the DC10+/DC30+ aren't mentioned anywhere in the overview. Basically, you can assume that if the Buz works, the LML33 will work too. If the LML33 works, the DC10+/DC30+ will work too. They're most tolerant to different mainboard chipsets from all of the supported cards.h]hXQIn general, people on the user mailinglist won’t give you much of a chance if you have a VIA-based motherboard. They may be cheap, but sometimes, you’d rather want to spend some more money on better boards. In general, VIA mainboard’s IDE/PCI performance will also suck badly compared to others. You’ll noticed the DC10+/DC30+ aren’t mentioned anywhere in the overview. Basically, you can assume that if the Buz works, the LML33 will work too. If the LML33 works, the DC10+/DC30+ will work too. They’re most tolerant to different mainboard chipsets from all of the supported cards.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hXIf you experience timeouts during capture, buy a better mainboard or lower the quality/buffersize during capture (see 'Concerning buffer sizes, quality, output size etc.'). If it hangs, there's little we can do as of now. Check your IRQs and make sure the card has its own interrupts.h]hX"If you experience timeouts during capture, buy a better mainboard or lower the quality/buffersize during capture (see ‘Concerning buffer sizes, quality, output size etc.’). If it hangs, there’s little we can do as of now. Check your IRQs and make sure the card has its own interrupts.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]7what-mainboard-should-i-use-or-why-doesn-t-my-card-workah ]h"]9what mainboard should i use (or why doesn't my card work)ah$]h&]uh1hhhhhhhhM]ubh)}(hhh](h)}(hProgramming interfaceh]hProgramming interface}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhMubh)}(hyThis driver conforms to video4linux2. Support for V4L1 and for the custom zoran ioctls has been removed in kernel 2.6.38.h]hyThis driver conforms to video4linux2. Support for V4L1 and for the custom zoran ioctls has been removed in kernel 2.6.38.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubh)}(hoFor programming example, please, look at lavrec.c and lavplay.c code in the MJPEG-tools (http://mjpeg.sf.net/).h](hYFor programming example, please, look at lavrec.c and lavplay.c code in the MJPEG-tools (}(hjBhhhNhNubh)}(hhttp://mjpeg.sf.net/h]hhttp://mjpeg.sf.net/}(hjJhhhNhNubah}(h]h ]h"]h$]h&]refurijLuh1hhjBubh).}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubh)}(h)Additional notes for software developers:h]h)Additional notes for software developers:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubh block_quote)}(hXThe driver returns maxwidth and maxheight parameters according to the current TV standard (norm). Therefore, the software which communicates with the driver and "asks" for these parameters should first set the correct norm. Well, it seems logically correct: TV standard is "more constant" for current country than geometry settings of a variety of TV capture cards which may work in ITU or square pixel format. h]h)}(hXThe driver returns maxwidth and maxheight parameters according to the current TV standard (norm). Therefore, the software which communicates with the driver and "asks" for these parameters should first set the correct norm. Well, it seems logically correct: TV standard is "more constant" for current country than geometry settings of a variety of TV capture cards which may work in ITU or square pixel format.h]hXThe driver returns maxwidth and maxheight parameters according to the current TV standard (norm). Therefore, the software which communicates with the driver and “asks” for these parameters should first set the correct norm. Well, it seems logically correct: TV standard is “more constant” for current country than geometry settings of a variety of TV capture cards which may work in ITU or square pixel format.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjsubah}(h]h ]h"]h$]h&]uh1jqhhhMhj#hhubeh}(h]programming-interfaceah ]h"]programming interfaceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h Applicationsh]h Applications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(h,Applications known to work with this driver:h]h,Applications known to work with this driver:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h TV viewing:h]h TV viewing:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjB)}(hhh](jG)}(hxawtvh]h)}(hjh]hxawtv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hkwintvh]h)}(hjh]hkwintv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hGprobably any TV application that supports video4linux or video4linux2. h]h)}(hFprobably any TV application that supports video4linux or video4linux2.h]hFprobably any TV application that supports video4linux or video4linux2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jAhhhMhjhhubh)}(hMJPEG capture/playback:h]hMJPEG capture/playback:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjB)}(hhh](jG)}(h+mjpegtools/lavtools (or Linux Video Studio)h]h)}(hj"h]h+mjpegtools/lavtools (or Linux Video Studio)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(h gstreamerh]h)}(hj9h]h gstreamer}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj7ubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(hmplayer h]h)}(hmplayerh]hmplayer}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjNubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jAhhhMhjhhubh)}(hGeneral raw capture:h]hGeneral raw capture:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjB)}(hhh](jG)}(hxawtvh]h)}(hjh]hxawtv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}ubah}(h]h ]h"]h$]h&]uh1jFhjzhhhhhNubjG)}(h gstreamerh]h)}(hjh]h gstreamer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjzhhhhhNubjG)}(hCprobably any application that supports video4linux or video4linux2 h]h)}(hBprobably any application that supports video4linux or video4linux2h]hBprobably any application that supports video4linux or video4linux2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjzhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jAhhhMhjhhubh)}(hVideo editing:h]hVideo editing:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjB)}(hhh](jG)}(h Cinelerrah]h)}(hjh]h Cinelerra}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(h MainActorh]h)}(hjh]h MainActor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubjG)}(h$mjpegtools (or Linux Video Studio) h]h)}(h"mjpegtools (or Linux Video Studio)h]h"mjpegtools (or Linux Video Studio)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jFhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jAhhhMhjhhubeh}(h] applicationsah ]h"] applicationsah$]h&]uh1hhhhhhhhMubh)}(h Ohh](h)}(h2Concerning buffer sizes, quality, output size etc.h]h2Concerning buffer sizes, quality, output size etc.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhMubh)}(hXThe zr36060 can do 1:2 JPEG compression. This is really the theoretical maximum that the chipset can reach. The driver can, however, limit compression to a maximum (size) of 1:4. The reason for this is that some cards (e.g. Buz) can't handle 1:2 compression without stopping capture after only a few minutes. With 1:4, it'll mostly work. If you have a Buz, use 'low_bitrate=1' to go into 1:4 max. compression mode.h]hXThe zr36060 can do 1:2 JPEG compression. This is really the theoretical maximum that the chipset can reach. The driver can, however, limit compression to a maximum (size) of 1:4. The reason for this is that some cards (e.g. Buz) can’t handle 1:2 compression without stopping capture after only a few minutes. With 1:4, it’ll mostly work. If you have a Buz, use ‘low_bitrate=1’ to go into 1:4 max. compression mode.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hX100% JPEG quality is thus 1:2 compression in practice. So for a full PAL frame (size 720x576). The JPEG fields are stored in YUY2 format, so the size of the fields are 720x288x16/2 bits/field (2 fields/frame) = 207360 bytes/field x 2 = 414720 bytes/frame (add some more bytes for headers and DHT (huffman)/DQT (quantization) tables, and you'll get to something like 512kB per frame for 1:2 compression. For 1:4 compression, you'd have frames of half this size.h]hX100% JPEG quality is thus 1:2 compression in practice. So for a full PAL frame (size 720x576). The JPEG fields are stored in YUY2 format, so the size of the fields are 720x288x16/2 bits/field (2 fields/frame) = 207360 bytes/field x 2 = 414720 bytes/frame (add some more bytes for headers and DHT (huffman)/DQT (quantization) tables, and you’ll get to something like 512kB per frame for 1:2 compression. For 1:4 compression, you’d have frames of half this size.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hXfSome additional explanation by Martin Samuelsson, which also explains the importance of buffer sizes: -- > Hmm, I do not think it is really that way. With the current (downloaded > at 18:00 Monday) driver I get that output sizes for 10 sec: > -q 50 -b 128 : 24.283.332 Bytes > -q 50 -b 256 : 48.442.368 > -q 25 -b 128 : 24.655.992 > -q 25 -b 256 : 25.859.820h]hXfSome additional explanation by Martin Samuelsson, which also explains the importance of buffer sizes: -- > Hmm, I do not think it is really that way. With the current (downloaded > at 18:00 Monday) driver I get that output sizes for 10 sec: > -q 50 -b 128 : 24.283.332 Bytes > -q 50 -b 256 : 48.442.368 > -q 25 -b 128 : 24.655.992 > -q 25 -b 256 : 25.859.820}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hkI woke up, and can't go to sleep again. I'll kill some time explaining why this doesn't look strange to me.h]hqI woke up, and can’t go to sleep again. I’ll kill some time explaining why this doesn’t look strange to me.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hLet's do some math using a width of 704 pixels. I'm not sure whether the Buz actually use that number or not, but that's not too important right now.h]hLet’s do some math using a width of 704 pixels. I’m not sure whether the Buz actually use that number or not, but that’s not too important right now.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hXD704x288 pixels, one field, is 202752 pixels. Divided by 64 pixels per block; 3168 blocks per field. Each pixel consist of two bytes; 128 bytes per block; 1024 bits per block. 100% in the new driver mean 1:2 compression; the maximum output becomes 512 bits per block. Actually 510, but 512 is simpler to use for calculations.h]hXD704x288 pixels, one field, is 202752 pixels. Divided by 64 pixels per block; 3168 blocks per field. Each pixel consist of two bytes; 128 bytes per block; 1024 bits per block. 100% in the new driver mean 1:2 compression; the maximum output becomes 512 bits per block. Actually 510, but 512 is simpler to use for calculations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hXLet's say that we specify d1q50. We thus want 256 bits per block; times 3168 becomes 811008 bits; 101376 bytes per field. We're talking raw bits and bytes here, so we don't need to do any fancy corrections for bits-per-pixel or such things. 101376 bytes per field.h]hXLet’s say that we specify d1q50. We thus want 256 bits per block; times 3168 becomes 811008 bits; 101376 bytes per field. We’re talking raw bits and bytes here, so we don’t need to do any fancy corrections for bits-per-pixel or such things. 101376 bytes per field.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(h~d1 video contains two fields per frame. Those sum up to 202752 bytes per frame, and one of those frames goes into each buffer.h]h~d1 video contains two fields per frame. Those sum up to 202752 bytes per frame, and one of those frames goes into each buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hmBut wait a second! -b128 gives 128kB buffers! It's not possible to cram 202752 bytes of JPEG data into 128kB!h]hoBut wait a second! -b128 gives 128kB buffers! It’s not possible to cram 202752 bytes of JPEG data into 128kB!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(h|This is what the driver notice and automatically compensate for in your examples. Let's do some math using this information:h]h~This is what the driver notice and automatically compensate for in your examples. Let’s do some math using this information:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hX128kB is 131072 bytes. In this buffer, we want to store two fields, which leaves 65536 bytes for each field. Using 3168 blocks per field, we get 20.68686868... available bytes per block; 165 bits. We can't allow the request for 256 bits per block when there's only 165 bits available! The -q50 option is silently overridden, and the -b128 option takes precedence, leaving us with the equivalence of -q32.h]hX128kB is 131072 bytes. In this buffer, we want to store two fields, which leaves 65536 bytes for each field. Using 3168 blocks per field, we get 20.68686868... available bytes per block; 165 bits. We can’t allow the request for 256 bits per block when there’s only 165 bits available! The -q50 option is silently overridden, and the -b128 option takes precedence, leaving us with the equivalence of -q32.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hXThis gives us a data rate of 165 bits per block, which, times 3168, sums up to 65340 bytes per field, out of the allowed 65536. The current driver has another level of rate limiting; it won't accept -q values that fill more than 6/8 of the specified buffers. (I'm not sure why. "Playing it safe" seem to be a safe bet. Personally, I think I would have lowered requested-bits-per-block by one, or something like that.) We can't use 165 bits per block, but have to lower it again, to 6/8 of the available buffer space: We end up with 124 bits per block, the equivalence of -q24. With 128kB buffers, you can't use greater than -q24 at -d1. (And PAL, and 704 pixels width...)h]hXThis gives us a data rate of 165 bits per block, which, times 3168, sums up to 65340 bytes per field, out of the allowed 65536. The current driver has another level of rate limiting; it won’t accept -q values that fill more than 6/8 of the specified buffers. (I’m not sure why. “Playing it safe” seem to be a safe bet. Personally, I think I would have lowered requested-bits-per-block by one, or something like that.) We can’t use 165 bits per block, but have to lower it again, to 6/8 of the available buffer space: We end up with 124 bits per block, the equivalence of -q24. With 128kB buffers, you can’t use greater than -q24 at -d1. (And PAL, and 704 pixels width...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hX The third example is limited to -q24 through the same process. The second example, using very similar calculations, is limited to -q48. The only example that actually grab at the specified -q value is the last one, which is clearly visible, looking at the file size. --h]hX The third example is limited to -q24 through the same process. The second example, using very similar calculations, is limited to -q48. The only example that actually grab at the specified -q value is the last one, which is clearly visible, looking at the file size. --}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubh)}(hConclusion: the quality of the resulting movie depends on buffer size, quality, whether or not you use 'low_bitrate=1' as insmod option for the zr36060.c module to do 1:4 instead of 1:2 compression, etc.h]hConclusion: the quality of the resulting movie depends on buffer size, quality, whether or not you use ‘low_bitrate=1’ as insmod option for the zr36060.c module to do 1:4 instead of 1:2 compression, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj.hhubh)}(hIf you experience timeouts, lowering the quality/buffersize or using 'low_bitrate=1 as insmod option for zr36060.o might actually help, as is proven by the Buz.h]hIf you experience timeouts, lowering the quality/buffersize or using ‘low_bitrate=1 as insmod option for zr36060.o might actually help, as is proven by the Buz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubeh}(h]/concerning-buffer-sizes-quality-output-size-etcah ]h"]2concerning buffer sizes, quality, output size etc.ah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h'It hangs/crashes/fails/whatevers! Help!h]h'It hangs/crashes/fails/whatevers! Help!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXMake sure that the card has its own interrupts (see /proc/interrupts), check the output of dmesg at high verbosity (load zr36067.o with debug=2, load all other modules with debug=1). Check that your mainboard is favorable (see question 2) and if not, test the card in another computer. Also see the notes given in question 3 and try lowering quality/buffersize/capturesize if recording fails after a period of time.h]hXMake sure that the card has its own interrupts (see /proc/interrupts), check the output of dmesg at high verbosity (load zr36067.o with debug=2, load all other modules with debug=1). Check that your mainboard is favorable (see question 2) and if not, test the card in another computer. Also see the notes given in question 3 and try lowering quality/buffersize/capturesize if recording fails after a period of time.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXIf all this doesn't help, give a clear description of the problem including detailed hardware information (memory+brand, mainboard+chipset+brand, which MJPEG card, processor, other PCI cards that might be of interest), give the system PnP information (/proc/interrupts, /proc/dma, /proc/devices), and give the kernel version, driver version, glibc version, gcc version and any other information that might possibly be of interest. Also provide the dmesg output at high verbosity. See 'Contacting' on how to contact the developers.h]hXIf all this doesn’t help, give a clear description of the problem including detailed hardware information (memory+brand, mainboard+chipset+brand, which MJPEG card, processor, other PCI cards that might be of interest), give the system PnP information (/proc/interrupts, /proc/dma, /proc/devices), and give the kernel version, driver version, glibc version, gcc version and any other information that might possibly be of interest. Also provide the dmesg output at high verbosity. See ‘Contacting’ on how to contact the developers.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]%it-hangs-crashes-fails-whatevers-helpah ]h"]'it hangs/crashes/fails/whatevers! help!ah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hMaintainers/Contactingh]hMaintainers/Contacting}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhhhhhM&ubh)}(hXPrevious maintainers/developers of this driver are - Laurent Pinchart - Ronald Bultje rbultje@ronald.bitfreak.net - Serguei Miridonov - Wolfgang Scherr - Dave Perks - Rainer Johanni h](hGPrevious maintainers/developers of this driver are - Laurent Pinchart <}(hj_hhhNhNubh)}(hlaurent.pinchart@skynet.beh]hlaurent.pinchart@skynet.be}(hjghhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:laurent.pinchart@skynet.beuh1hhj_ubh> - Ronald Bultje }(hj_hhhNhNubh)}(hrbultje@ronald.bitfreak.neth]hrbultje@ronald.bitfreak.net}(hj{hhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:rbultje@ronald.bitfreak.netuh1hhj_ubh - Serguei Miridonov <}(hj_hhhNhNubh)}(hmirsev@cicese.mxh]hmirsev@cicese.mx}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mirsev@cicese.mxuh1hhj_ubh> - Wolfgang Scherr <}(hj_hhhNhNubh)}(hscherr@net4you.neth]hscherr@net4you.net}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:scherr@net4you.netuh1hhj_ubh> - Dave Perks <}(hj_hhhNhNubh)}(hdperks@ibm.neth]hdperks@ibm.net}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:dperks@ibm.netuh1hhj_ubh> - Rainer Johanni <}(hj_hhhNhNubh)}(hRainer@Johanni.deh]hRainer@Johanni.de}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:Rainer@Johanni.deuh1hhj_ubh>}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM(hjNhhubeh}(h]maintainers-contactingah ]h"]maintainers/contactingah$]h&]uh1hhhhhhhhM&ubh)}(hhh](h)}(hDriver's Licenseh]hDriver’s License}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM1ubjr)}(hX&This driver is distributed under the terms of the General Public License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. h](h)}(hIThis driver is distributed under the terms of the General Public License.h]hIThis driver is distributed under the terms of the General Public License.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hjubh)}(hThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.h]hThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM5hjubh)}(hThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.h]hThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM:hjubeh}(h]h ]h"]h$]h&]uh1jqhhhM3hjhhubh)}(h-See http://www.gnu.org/ for more information.h](hSee }(hj2hhhNhNubh)}(hhttp://www.gnu.org/h]hhttp://www.gnu.org/}(hj:hhhNhNubah}(h]h ]h"]h$]h&]refurij<uh1hhj2ubh for more information.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM?hjhhubeh}(h]driver-s-licenseah ]h"]driver's licenseah$]h&]uh1hhhhhhhhM1ubeh}(h]the-zoran-driverah ]h"]the zoran driverah$]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_sourceh _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}(j`j]jj jjjjjjjjjZjWjjjjjjjdjajzjwj{ jx j j j/ j, j j} j j j" j js jp j j j j j< j9 j j j j j/ j, j j j j j jjjj+j(jjjKjHjjjXjUu nametypes}(j`jjjjjjZjjjjdjzj{ j j/ j j j" js j j j< j j j/ j j j jj+jjKjjXuh}(j]hj hjjjj0jjjjjWjjj]jjjjjajjwjgjx jj j j, j j} j2 j j j j jp j% j j~ j j j9 j j j? j j j, j j j2 j j jj jj#j(jjj.jHjjjNjUju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.