<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2670QM</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2670QM"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/2670QM"/>
	<updated>2026-05-12T21:27:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMINF:ConnectToEncryptedAP&amp;diff=23686</id>
		<title>NWMINF:ConnectToEncryptedAP</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMINF:ConnectToEncryptedAP&amp;diff=23686"/>
		<updated>2025-08-22T13:32:57Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added AP channel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00070742]&lt;br /&gt;
|-&lt;br /&gt;
| 1-8&lt;br /&gt;
| SSID&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| SSID length&lt;br /&gt;
|-&lt;br /&gt;
| 10-11&lt;br /&gt;
| 6-byte AP MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| AP channel&lt;br /&gt;
|-&lt;br /&gt;
| 13-29&lt;br /&gt;
| 0x44-byte encryption structure&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| Value 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Event handle. This is probably signaled once the system finishes connecting to the AP?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Encryption structure=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x20&lt;br /&gt;
| This is the WPA PSK / network encryption key.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x20&lt;br /&gt;
| Usually zero.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMINF:ConnectToAP&amp;diff=23685</id>
		<title>NWMINF:ConnectToAP</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMINF:ConnectToAP&amp;diff=23685"/>
		<updated>2025-08-22T13:32:33Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added AP channel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x0008....]&lt;br /&gt;
|-&lt;br /&gt;
| 1-8&lt;br /&gt;
| SSID&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| SSID length&lt;br /&gt;
|-&lt;br /&gt;
| 10-11&lt;br /&gt;
| 6-byte AP MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| AP channel&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Event handle. This is probably signaled once the system finishes connecting to the AP?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
Calls same code as [[NWMINF:ConnectToEncryptedAP]] but with an all-zero encryption struct.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23394</id>
		<title>MVDSTD:CalculateWorkBufSize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23394"/>
		<updated>2025-04-03T10:35:19Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| Header code [0x00030300]&lt;br /&gt;
|-&lt;br /&gt;
| 01-03&lt;br /&gt;
| CalculateWorkBufSizeConfig&lt;br /&gt;
|-&lt;br /&gt;
| 04-10&lt;br /&gt;
| ???????????????&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| u32 Video width&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| u32 Video height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
==CalculateWorkBufSizeConfig==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x01-0x04&lt;br /&gt;
| CalculateWorkBufWithLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x05-0x06&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesA&lt;br /&gt;
|-&lt;br /&gt;
| 0x07-0x08&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesB&lt;br /&gt;
|-&lt;br /&gt;
| 0x09-0x11&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithLevel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| bool Double size&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| u8 H.264 level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Flag====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| FLAG_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| FLAG_ENABLE_CALCULATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| FLAG_ENABLE_EXTRA_OP (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| FLAG_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====H.264 level====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Level 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Level 1.0b&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Level 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Level 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| Level 2.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| Level 2.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Level 2.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Level 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Level 3.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Level 3.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Level 4.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Level 4.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| Level 4.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| Level 5.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| Level 5.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Level 5.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate maximum possible buffer size (==buffer size that &#039;&#039;&#039;&#039;&#039;may&#039;&#039;&#039;&#039;&#039; be needed to decode video) based on H.264 level and resolution, &amp;lt;s&amp;gt;so any videos that are compliant with H.264 specs should be decoded with this buffer size&amp;lt;/s&amp;gt; &#039;&#039;&#039;&#039;&#039;it seems there is some buffer overflow (some hundreds bytes according to test) when maximum number of reference frames are used&#039;&#039;&#039;&#039;&#039;, so adding some extra bytes (maybe around 4096Bytes is enough) is safer.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; based on &#039;&#039;&#039;H.264 level&#039;&#039;&#039; and &#039;&#039;&#039;resolution&#039;&#039;&#039;, 0x10 is used if &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; is greater than 0x10.&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;(max_reference_frames + 1)&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* If FLAG_ENABLE_EXTRA_OP is set, &#039;&#039;&#039;temp_buffer_size += (temp_buffer_size / 6)&#039;&#039;&#039;&lt;br /&gt;
* If double size (offset 0x02) is set, &#039;&#039;&#039;temp_buffer_size *= 2&#039;&#039;&#039;&lt;br /&gt;
* Finally, &#039;&#039;&#039;temp_buffer_size += 0xFC8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) &#039;&#039;&#039;&#039;&#039;and&#039;&#039;&#039;&#039;&#039; flag (offset 0x01) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If resolution is too high for given H.264 level, 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Attempting to use more than 0x10 for H.264 level (offset 0x03) will likely cause out-of-bound access.&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithNumOfRefFramesA/B===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Number of reference frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate buffer size based on resolution and number of reference frames.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;number_of_reference_frames&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x10800&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x858&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If number of reference frames (offset 0x01) is less than 0x02, 0x02 is used internally, if it&#039;s greater than 0x10, 0x10 is used internally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
It is possible to enable more than 1 calculation methods simultaneously, in that case the largest buffer size among them is returned.&lt;br /&gt;
&lt;br /&gt;
SKATER uses&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.enable = 0x01;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.flag = 0x07; //(FLAG_ENABLE_CALCULATION | FLAG_ENABLE_EXTRA_OP | FLAG_UNK).&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.doubleSize = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.level = 0x0A; //Level 3.2.&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.width = 854; //Regardless of input video, 854 is always used.&lt;br /&gt;
cmd.height = 480; //Regardless of input video, 480 is always used.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and result is &#039;&#039;&#039;9438920Bytes&#039;&#039;&#039; (0x9006C8), aka MVD_DEFAULT_WORKBUF_SIZE.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t write to MVD state / registers at all.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23393</id>
		<title>MVDSTD:CalculateWorkBufSize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23393"/>
		<updated>2025-04-02T09:54:31Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| Header code [0x00030300]&lt;br /&gt;
|-&lt;br /&gt;
| 01-03&lt;br /&gt;
| CalculateWorkBufSizeConfig&lt;br /&gt;
|-&lt;br /&gt;
| 04-10&lt;br /&gt;
| ???????????????&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| u32 Video width&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| u32 Video height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
==CalculateWorkBufSizeConfig==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x01-0x04&lt;br /&gt;
| CalculateWorkBufWithLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x05-0x06&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesA&lt;br /&gt;
|-&lt;br /&gt;
| 0x07-0x08&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesB&lt;br /&gt;
|-&lt;br /&gt;
| 0x09-0x11&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithLevel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| bool Double size&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| u8 H.264 level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Flag====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| FLAG_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| FLAG_ENABLE_CALCULATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| FLAG_ENABLE_EXTRA_OP (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| FLAG_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====H.264 level====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Level 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Level 1.0b&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Level 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Level 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| Level 2.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| Level 2.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Level 2.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Level 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Level 3.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Level 3.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Level 4.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Level 4.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| Level 4.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| Level 5.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| Level 5.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Level 5.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate maximum possible buffer size (==buffer size that &#039;&#039;&#039;&#039;&#039;may&#039;&#039;&#039;&#039;&#039; be needed to decode video) based on H.264 level and resolution, &amp;lt;s&amp;gt;so any videos that are compliant with H.264 specs should be decoded with this buffer size&amp;lt;/s&amp;gt; &#039;&#039;&#039;&#039;&#039;it seems there is some buffer overflow (some hundreds bytes according to test) when maximum number of reference frames are used&#039;&#039;&#039;&#039;&#039;, so adding some extra bytes (maybe around 4096Bytes is enough) is safer.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; based on &#039;&#039;&#039;H.264 level&#039;&#039;&#039; and &#039;&#039;&#039;resolution&#039;&#039;&#039;, 0x10 is used if &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; is greater than 0x10.&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;(max_reference_frames + 1)&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* If FLAG_ENABLE_EXTRA_OP is set, &#039;&#039;&#039;temp_buffer_size += (temp_buffer_size / 6)&#039;&#039;&#039;&lt;br /&gt;
* If double size (offset 0x02) is set, &#039;&#039;&#039;temp_buffer_size *= 2&#039;&#039;&#039;&lt;br /&gt;
* Finally, &#039;&#039;&#039;temp_buffer_size += 0xFC8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) &#039;&#039;&#039;&#039;&#039;and&#039;&#039;&#039;&#039;&#039; flag (offset 0x01) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If resolution is too high for given H.264 level, 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Attempting to use more than 0x10 for H.264 level (offset 0x03) will likely cause out-of-bound access.&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithNumOfRefFramesA/B===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Number of reference frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate buffer size based on resolution and number of reference frames.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;number_of_reference_frames&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x10800&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x858&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If number of reference frames (offset 0x01) is less than 0x02, 0x02 is used internally, if it&#039;s greater than 0x10, 0x10 is used internally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
It is possible to enable more than 1 calculation methods simultaneously, in that case the largest buffer size among them is returned.&lt;br /&gt;
&lt;br /&gt;
SKATER uses&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.enable = 0x01;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.flag = 0x07; //(FLAG_ENABLE_CALCULATION | FLAG_ENABLE_EXTRA_OP | FLAG_UNK).&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.doubleSize = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.level = 0x0A; //Level 3.2.&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.width = 854; //Regardless of input video, 854 is always used.&lt;br /&gt;
cmd.height = 480; //Regardless of input video, 480 is always used.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and result is &#039;&#039;&#039;9438920Bytes&#039;&#039;&#039; (0x9006C8), aka MVD_DEFAULT_WORKBUF_SIZE.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t write to MVD state / registers at all.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23392</id>
		<title>MVDSTD:CalculateWorkBufSize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23392"/>
		<updated>2025-04-02T09:52:36Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Fixed wrong description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| Header code [0x00030300]&lt;br /&gt;
|-&lt;br /&gt;
| 01-03&lt;br /&gt;
| CalculateWorkBufSizeConfig&lt;br /&gt;
|-&lt;br /&gt;
| 04-10&lt;br /&gt;
| ???????????????&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| u32 Video width&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| u32 Video height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
==CalculateWorkBufSizeConfig==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x01-0x04&lt;br /&gt;
| CalculateWorkBufWithLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x05-0x06&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesA&lt;br /&gt;
|-&lt;br /&gt;
| 0x07-0x08&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesB&lt;br /&gt;
|-&lt;br /&gt;
| 0x09-0x11&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithLevel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| bool Double size&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| u8 H.264 level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Flag====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| FLAG_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| FLAG_ENABLE_CALCULATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| FLAG_ENABLE_EXTRA_OP (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| FLAG_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====H.264 level====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Level 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Level 1.0b&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Level 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Level 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| Level 2.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| Level 2.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Level 2.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Level 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Level 3.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Level 3.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Level 4.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Level 4.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| Level 4.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| Level 5.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| Level 5.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Level 5.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate maximum possible buffer size (==buffer size that &#039;&#039;&#039;&#039;&#039;may&#039;&#039;&#039;&#039;&#039; be needed to decode video) based on H.264 level and resolution, &amp;lt;s&amp;gt;so any videos that are compliant with H.264 specs should be decoded with this buffer size&amp;lt;/s&amp;gt; &#039;&#039;&#039;&#039;&#039;it seems there is some buffer overflow (some hundreds bytes according to test) when maximum number of reference frames are used&#039;&#039;&#039;&#039;&#039;, so adding some extra bytes (maybe around 4K is enough) is safer.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; based on &#039;&#039;&#039;H.264 level&#039;&#039;&#039; and &#039;&#039;&#039;resolution&#039;&#039;&#039;, 0x10 is used if &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; is greater than 0x10.&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;(max_reference_frames + 1)&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* If FLAG_ENABLE_EXTRA_OP is set, &#039;&#039;&#039;temp_buffer_size += (temp_buffer_size / 6)&#039;&#039;&#039;&lt;br /&gt;
* If double size (offset 0x02) is set, &#039;&#039;&#039;temp_buffer_size *= 2&#039;&#039;&#039;&lt;br /&gt;
* Finally, &#039;&#039;&#039;temp_buffer_size += 0xFC8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) &#039;&#039;&#039;&#039;&#039;and&#039;&#039;&#039;&#039;&#039; flag (offset 0x01) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If resolution is too high for given H.264 level, 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Attempting to use more than 0x10 for H.264 level (offset 0x03) will likely cause out-of-bound access.&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithNumOfRefFramesA/B===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Number of reference frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate buffer size based on resolution and number of reference frames.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;number_of_reference_frames&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x10800&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x858&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If number of reference frames (offset 0x01) is less than 0x02, 0x02 is used internally, if it&#039;s greater than 0x10, 0x10 is used internally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
It is possible to enable more than 1 calculation methods simultaneously, in that case the largest buffer size among them is returned.&lt;br /&gt;
&lt;br /&gt;
SKATER uses&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.enable = 0x01;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.flag = 0x07; //(FLAG_ENABLE_CALCULATION | FLAG_ENABLE_EXTRA_OP | FLAG_UNK).&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.doubleSize = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.level = 0x0A; //Level 3.2.&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.width = 854; //Regardless of input video, 854 is always used.&lt;br /&gt;
cmd.height = 480; //Regardless of input video, 480 is always used.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and result is &#039;&#039;&#039;9438920Bytes&#039;&#039;&#039; (0x9006C8), aka MVD_DEFAULT_WORKBUF_SIZE.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t write to MVD state / registers at all.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23391</id>
		<title>MVDSTD:CalculateWorkBufSize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23391"/>
		<updated>2025-04-01T11:43:31Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| Header code [0x00030300]&lt;br /&gt;
|-&lt;br /&gt;
| 01-03&lt;br /&gt;
| CalculateWorkBufSizeConfig&lt;br /&gt;
|-&lt;br /&gt;
| 04-10&lt;br /&gt;
| ???????????????&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| u32 Video width&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| u32 Video height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
==CalculateWorkBufSizeConfig==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x01-0x04&lt;br /&gt;
| CalculateWorkBufWithLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x05-0x06&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesA&lt;br /&gt;
|-&lt;br /&gt;
| 0x07-0x08&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesB&lt;br /&gt;
|-&lt;br /&gt;
| 0x09-0x11&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithLevel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| bool Double size&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| u8 H.264 level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Flag====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| FLAG_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| FLAG_ENABLE_CALCULATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| FLAG_ENABLE_EXTRA_OP (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| FLAG_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====H.264 level====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Level 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Level 1.0b&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Level 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Level 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| Level 2.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| Level 2.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Level 2.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Level 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Level 3.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Level 3.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Level 4.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Level 4.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| Level 4.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| Level 5.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| Level 5.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Level 5.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate maximum possible buffer size (==buffer size that &#039;&#039;&#039;&#039;&#039;may&#039;&#039;&#039;&#039;&#039; be needed to decode video) based on H.264 level and resolution, so any videos that are compliant with H.264 specs should be decoded with this buffer size.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; based on &#039;&#039;&#039;H.264 level&#039;&#039;&#039; and &#039;&#039;&#039;resolution&#039;&#039;&#039;, 0x10 is used if &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; is greater than 0x10.&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;(max_reference_frames + 1)&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* If FLAG_ENABLE_EXTRA_OP is set, &#039;&#039;&#039;temp_buffer_size += (temp_buffer_size / 6)&#039;&#039;&#039;&lt;br /&gt;
* If double size (offset 0x02) is set, &#039;&#039;&#039;temp_buffer_size *= 2&#039;&#039;&#039;&lt;br /&gt;
* Finally, &#039;&#039;&#039;temp_buffer_size += 0xFC8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) &#039;&#039;&#039;&#039;&#039;and&#039;&#039;&#039;&#039;&#039; flag (offset 0x01) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If resolution is too high for given H.264 level, 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Attempting to use more than 0x10 for H.264 level (offset 0x03) will likely cause out-of-bound access.&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithNumOfRefFramesA/B===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Number of reference frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate buffer size based on resolution and number of reference frames.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;number_of_reference_frames&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x10800&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x858&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If number of reference frames (offset 0x01) is less than 0x02, 0x02 is used internally, if it&#039;s greater than 0x10, 0x10 is used internally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
It is possible to enable more than 1 calculation methods simultaneously, in that case the largest buffer size among them is returned.&lt;br /&gt;
&lt;br /&gt;
SKATER uses&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.enable = 0x01;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.flag = 0x07; //(FLAG_ENABLE_CALCULATION | FLAG_ENABLE_EXTRA_OP | FLAG_UNK).&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.doubleSize = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.level = 0x0A; //Level 3.2.&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.width = 854; //Regardless of input video, 854 is always used.&lt;br /&gt;
cmd.height = 480; //Regardless of input video, 480 is always used.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and result is &#039;&#039;&#039;9438920Bytes&#039;&#039;&#039; (0x9006C8), aka MVD_DEFAULT_WORKBUF_SIZE.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t write to MVD state / registers at all.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23390</id>
		<title>MVDSTD:CalculateWorkBufSize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVDSTD:CalculateWorkBufSize&amp;diff=23390"/>
		<updated>2025-04-01T11:34:31Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added command detail.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| Header code [0x00030300]&lt;br /&gt;
|-&lt;br /&gt;
| 01-03&lt;br /&gt;
| CalculateWorkBufSizeConfig&lt;br /&gt;
|-&lt;br /&gt;
| 04-10&lt;br /&gt;
| ???????????????&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| u32 Video width&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| u32 Video height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
==CalculateWorkBufSizeConfig==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x01-0x04&lt;br /&gt;
| CalculateWorkBufWithLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x05-0x06&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesA&lt;br /&gt;
|-&lt;br /&gt;
| 0x07-0x08&lt;br /&gt;
| CalculateWorkBufWithNumOfRefFramesB&lt;br /&gt;
|-&lt;br /&gt;
| 0x09-0x11&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithLevel===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| bool Double size&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| u8 H.264 level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Flag====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| FLAG_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| FLAG_ENABLE_CALCULATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| FLAG_ENABLE_EXTRA_OP (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| FLAG_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====H.264 level====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Level 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Level 1.0b&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Level 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Level 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| Level 2.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| Level 2.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Level 2.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Level 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Level 3.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Level 3.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Level 4.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Level 4.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| Level 4.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| Level 5.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| Level 5.1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Level 5.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate maximum possible buffer size (==buffer size that &#039;&#039;&#039;&#039;&#039;may&#039;&#039;&#039;&#039;&#039; be needed to decode video) based on H.264 level and resolution, so any videos that are compliant with H.264 specs should be decoded with this buffer size.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; based on &#039;&#039;&#039;H.264 level&#039;&#039;&#039; and &#039;&#039;&#039;resolution&#039;&#039;&#039;, 0x10 is used if &#039;&#039;&#039;max_reference_frames&#039;&#039;&#039; is greater than 0x10.&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;(max_reference_frames + 1)&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* If FLAG_ENABLE_EXTRA_OP is set, &#039;&#039;&#039;temp_buffer_size += (temp_buffer_size / 6)&#039;&#039;&#039;&lt;br /&gt;
* If double size (offset 0x02) is set, &#039;&#039;&#039;temp_buffer_size *= 2&#039;&#039;&#039;&lt;br /&gt;
* Finally, &#039;&#039;&#039;temp_buffer_size += 0xFC8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) &#039;&#039;&#039;&#039;&#039;and&#039;&#039;&#039;&#039;&#039; flag (offset 0x01) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If resolution is too high for given H.264 level, 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Attempting to use more than 0x10 for H.264 level (offset 0x03) will likely cause out-of-bound access.&lt;br /&gt;
&lt;br /&gt;
===CalculateWorkBufWithNumOfRefFramesA/B===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| bool Enable calculation&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| u8 Number of reference frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will calculate buffer size based on resolution and number of reference frames.&lt;br /&gt;
&lt;br /&gt;
Calculation procedures are :&lt;br /&gt;
* Calculate &#039;&#039;&#039;frame_size&#039;&#039;&#039; based on &#039;&#039;&#039;resolution&#039;&#039;&#039;.&lt;br /&gt;
* Multiply &#039;&#039;&#039;frame_size&#039;&#039;&#039; and &#039;&#039;&#039;number_of_reference_frames&#039;&#039;&#039; to get &#039;&#039;&#039;temp_buffer_size&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x10800&#039;&#039;&#039;&lt;br /&gt;
* Finally, for CalculateWorkBufWithNumOfRefFrames&#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039;temp_buffer_size += 0x858&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To perform calculation, enable calculation (ofset 0x00) must be non-zero, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
If number of reference frames (offset 0x01) is less than 0x02, 0x02 is used internally, if it&#039;s greater than 0x10, 0x10 is used internally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to enable more than 1 calculation methods simultaneously, in that case the biggest buffer size among them is returned.&lt;br /&gt;
&lt;br /&gt;
SKATER uses&lt;br /&gt;
```&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.enable = 0x01;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.flag = 0x07; //(FLAG_ENABLE_CALCULATION | FLAG_ENABLE_EXTRA_OP | FLAG_UNK).&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.doubleSize = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithLevel.level = 0x0A; //Level 3.2.&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesA.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.enable = 0x00;&lt;br /&gt;
cmd.CalculateWorkBufWithNumOfRefFramesB.numOfReferenceFrames = 0x00;&lt;br /&gt;
cmd.width = 854; //Regardless of input video, 854 is always used.&lt;br /&gt;
cmd.height = 480; //Regardless of input video, 480 is always used.&lt;br /&gt;
```&lt;br /&gt;
and result is 9438920Bytes (0x9006C8), aka MVD_DEFAULT_WORKBUF_SIZE.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t write to MVD state / registers at all.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Hardware&amp;diff=22584</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Hardware&amp;diff=22584"/>
		<updated>2024-06-18T12:16:09Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added 2TB SD card test results and boot time vs capacity table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists and describes the hardware found inside the Nintendo 3DS. Many of these parts are custom made and are expanded upon here or in other pages.&lt;br /&gt;
&lt;br /&gt;
== Common hardware ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| ARM11 Processor Core || Old3DS: [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/index.html ARM11 2x MPCore &amp;amp; 2x VFPv2 Co-Processor] 268MHz (268,111,856.0 ± 2&amp;lt;sup&amp;gt;-32&amp;lt;/sup&amp;gt; Hz, i.e. exactly twice the clock rate of the ARM9).&lt;br /&gt;
&lt;br /&gt;
New3DS: 4x MPCore, 4x VFPv2, able to run up to 804MHz (see below). It also has an optional 2MB L2 cache.&lt;br /&gt;
|-&lt;br /&gt;
| ARM9 Processor Core || [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0201d/index.html ARM946] 134MHz (134,055,927.9 ± 2&amp;lt;sup&amp;gt;-32&amp;lt;/sup&amp;gt; Hz),&lt;br /&gt;
|-&lt;br /&gt;
| GPU || [http://en.wikipedia.org/wiki/PICA200 DMP PICA] 268MHz,&lt;br /&gt;
|-&lt;br /&gt;
| VRAM || 6 MB within SoC.&lt;br /&gt;
|-&lt;br /&gt;
| Top screen || 800x240, with only 400 usable pixels per eye per line.&lt;br /&gt;
|-&lt;br /&gt;
| Bottom screen || 320x240, with resistive touch overlay.&lt;br /&gt;
|-&lt;br /&gt;
| DSP || [https://twitter.com/CEVADSP/status/177172880918986752 CEVA TeakLite]. 134Mhz. 24ch 32728Hz sampling rates.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
New3DS exclusives are able to clock the CPU at 804MHz, but this appears to be limited to the currently running application/app cores. Timed by running svcGetSystemTick on either side of a long idle loop to stay in the current process context. svcGetSystemTick uses a tick counter running at 268MHz in this mode.&lt;br /&gt;
&lt;br /&gt;
On New3DS: when Home Menu is active, the system runs at 804MHz. For everything else, it&#039;s 268MHz, except when the app(let) has the required flag set. See [[NCCH/Extended_Header|here]] and [[PDN_Registers|here]] for details, regarding clock-rate and cache.&lt;br /&gt;
&lt;br /&gt;
For New3DS-only there are multiple clock-rate multiplier values available in [[PDN_Registers|hardware]], but since the relevant code is only implemented in the New3DS ARM11-kernel, the only non-normal clock-rate available with official kernel code is 3x.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! 3DS !! 3DSXL !! 2DS !! N3DS !! N3DSXL !! N2DSXL&lt;br /&gt;
|-&lt;br /&gt;
| Model || CTR-001 || SPR-001 || FTR-001 || KTR-001 || RED-001 || JAN-001&lt;br /&gt;
|-&lt;br /&gt;
| SoC || CPU CTR&lt;br /&gt;
|| CPU CTR A&lt;br /&gt;
CPU CTR&lt;br /&gt;
|| CPU CTR B  || CPU LGR A  || CPU LGR A  || CPU LGR A&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FCRAM || [https://web.archive.org/web/20221022124807/https://www.fujitsu.com/downloads/MICRO/fma/pdf/MB81EDS516545_e511463.pdf 2x64MB Fujitsu MB82M8080-07L] || Fujitsu MB82DBS16641 || Fujitsu MB82DBS1664 || ?? || Fujitsu MB82MK9A9A || Fujitsu MB82MK9A9A&lt;br /&gt;
|-&lt;br /&gt;
| Top Screen ||  3.53 in, 3D || 4.88 in, 3D || 3.53 in cropped from a single panel ||  3.88 in, 3D || 4.88 in, 3D || 4.88 in (?)&lt;br /&gt;
|-&lt;br /&gt;
| Bottom Screen ||  3.00 in || 4.18 in || 3.00 in cropped from a single panel || 3.33 in || 4.18 in || 4.18 in (?)&lt;br /&gt;
|-&lt;br /&gt;
| Storage ||colspan=&amp;quot;2&amp;quot;| Toshiba THGBM2G3P1FBAI8 1GB ||colspan=&amp;quot;1&amp;quot;| Changed between O3DS and N3DS parts depending on production date ||colspan=&amp;quot;2&amp;quot;| Samsung KLM4G1YEQC 4GB (in 1.3GiB SLC mode) or Toshiba THGBMBG4P1KBAIT 2GB (MLC, approx. 1.8GiB usable) ||colspan=&amp;quot;1&amp;quot;| Samsung KLM4G1FEPD 4GB&lt;br /&gt;
|-&lt;br /&gt;
| Speaker, Microphone, Circlepad, Touch controller || TI PAIC3010B 0AA37DW || ?? || ?? || TI AIC3010B 39C4ETW  || TI AIC3010D 48C01JW || ??&lt;br /&gt;
|-&lt;br /&gt;
| Gyroscope || [https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf Invensense ITG-3270 MEMS Gyroscope] || ?? || ?? || ?? || ?? || ?? &lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || ST Micro 2048 33DH X1MAQ Accelerometer Model LIS331DH || ?? || ?? || ?? || ?? || ??&lt;br /&gt;
|-&lt;br /&gt;
| Infrared IC || NXP S750 0803 TSD031C || ?? || ?? || ?? || NXP S750 1603 TSD438C || NXP S750 0210 TSD651C&lt;br /&gt;
|-&lt;br /&gt;
| Custom Microcontroller || Renesas UC CTR || ?? || Renesas UC CTR 324KM47 KG10  || Renesas UC KTR || Renesas UC KTR 442KM13 TK14 || ??&lt;br /&gt;
|-&lt;br /&gt;
| PMIC? || TI 93045A4 OAAH86W || ?? || ?? || TI 93045A4 38A6TYW G2 || TI 93045A4 49AF3NW G2 || TI 93045A4 72ASRHW G2&lt;br /&gt;
|-&lt;br /&gt;
| Charging IC ||colspan=&amp;quot;6&amp;quot;| CKP TI [http://www.ti.com/lit/ds/symlink/bq24072.pdf BQ24072]&lt;br /&gt;
|-&lt;br /&gt;
| Wifi || Atheros AR6014 || ?? || ?? || ?? || Atheros AR6014G-AL1C || ??&lt;br /&gt;
|-&lt;br /&gt;
| Wifi SPI Flash&lt;br /&gt;
| Raw ID data: 20 58 || ?? || ?? || Raw ID data: 62 62 || ?? || ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [11] Official Documentation&lt;br /&gt;
&lt;br /&gt;
* [5],[10] According to iFixit.com ([http://www.ifixit.com/Teardown/Nintendo-3DS-Teardown/5029/1#s22696 source]):&lt;br /&gt;
&lt;br /&gt;
* Datasheet for memory is for a chip in the same series, it has less memory than the one inside the 3DS (128mbits vs 512mbits).&lt;br /&gt;
&lt;br /&gt;
* There is a trove of data on the FCC website at [https://fjallfoss.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&amp;amp;RequestTimeout=500&amp;amp;calledFromFrame=N&amp;amp;application_id=462292&amp;amp;fcc_id=%27EW4DWMW028%27].&lt;br /&gt;
&lt;br /&gt;
* [12] This IC is somewhat similar to [http://www.alldatasheet.net/datasheet-pdf/pdf/347838/NXP/SC16IS750IBS.html this].&lt;br /&gt;
&lt;br /&gt;
* The Raw ID data for Wifi SPI Flash is from command 0x9F, RDID.&lt;br /&gt;
&lt;br /&gt;
== FCRAM ==&lt;br /&gt;
&lt;br /&gt;
There is one FCRAM (Fast Cycle RAM) IC in the 3DS, produced by Fujitsu and branded as MB82M8080-07L. The Fujitsu MB82M8080-07L chip internally contains 2 dies, where each die is branded MB81EDS516545 and MB82DBS08645.&lt;br /&gt;
&lt;br /&gt;
The MB81EDS516545 die is a CMOS Fast Cycle Random Access Memory (FCRAM) with Low Power Double Data Rate (LPDDR) SDRAM Interface containing 512MBit storage accessible in a 64-bit format. The MB81EDS516545 is suited for consumer applications requiring high data bandwidth with low power consumption.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SoC ==&lt;br /&gt;
&lt;br /&gt;
The 3DS has much of it&#039;s internals housed in a SoC (System on Chip) just like it&#039;s predecessors. This is done to reduce build costs, cut down on power consumption, as well as make the PCB layout less complex and make the system harder to tamper with. The SoC, branded as the Nintendo 1048 0H, contains the CPU, GPU, DSP and VRAM.&lt;br /&gt;
&lt;br /&gt;
According to official documents, the CPU used is a dual-core ARM11 CPU, clocked at 268MHz. One core is dedicated to system software, while the other is used for application programming, each known as the syscore and appcore, respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
&lt;br /&gt;
Designed by Digital Media Professionals Inc. (DMP) and codenamed PICA200, 268Mhz.&lt;br /&gt;
&lt;br /&gt;
Block diagram of an ULTRAY2000 based architecture PICA200:&lt;br /&gt;
&lt;br /&gt;
[[File:Pica200BlockDiagram.png]]&lt;br /&gt;
&lt;br /&gt;
PICA200 is compatible with OpenGL ES 1.1. It furthermore provides unique functionality for:&lt;br /&gt;
* Per-fragment lighting (&amp;quot;Lighting Maestro&amp;quot;)&lt;br /&gt;
* Hard- and soft-shadowing (&amp;quot;Shadow Maestro&amp;quot;)&lt;br /&gt;
* Polygon subdivision (&amp;quot;Figure Maestro&amp;quot;)&lt;br /&gt;
* Bump mapping and procedural textures (&amp;quot;Mapping Maestro&amp;quot;)&lt;br /&gt;
* Rendering of gaseous objects (&amp;quot;Particle Maestro&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Some parts of the extended functionality are provided in hardware by an extended geometry pipeline. Most importantly, PICA200 has three programmable vertex processors. There is furthermore a unit called [[GPU/Primitive_Engine|Primitive Engine]], which is a geometry shader unit (using the same instruction set as vertex shaders) with support for variable-size primitives. The Primitive Engine functionality may be disabled, and the geometry shader unit then acts as a fourth vertex processor. See [[Shader_Instruction_Set]] for more information on the shader instruction set.&lt;br /&gt;
&lt;br /&gt;
[[GPU/Fragment Lighting|Fragment lighting]] is implemented as an optional pipeline step during pixel processing. It&#039;s implemented by having the vertex shader output an additional attribute describing the transformation (represented by a quaternion) to surface-local space. This per-vertex quaternion can then be interpolated across screen space to calculate dot products relevant for lighting (e.g. light vector dot normal vector). To provide support for advanced lighting models, these dot products are used as indices into programmable lookup tables. With this setup, PICA200 in particular supports the shading models Blinn-Phong, Cook-Terrance, Ward, and microfacet-based BRDF-models.&lt;br /&gt;
&lt;br /&gt;
PICA200 supports four texture units, the fourth of which is used exclusively for [[GPU/Procedural Texture Generation|procedural texture generation]].&lt;br /&gt;
&lt;br /&gt;
== SDIO controller ==&lt;br /&gt;
&lt;br /&gt;
Nintendo recommends SD cards up to 32 GB. The internal SDIO controller seems to support SD cards up to 2.199 Terabyte (32-bit sector number). Up to 2TB (AGI TF138) has been tested and works, however larger SD sizes increase system boot time. The larger the SD capacity, the greater the bootup slowdown. 64-128GB tends to be the sweet spot for most users, with only an extra 0.5-1.0 seconds added to boot time as the tradeoff for the larger size.&lt;br /&gt;
&lt;br /&gt;
SD cards should be formatted FAT32 with a 64KB unit size for maximum compatibility.&lt;br /&gt;
&lt;br /&gt;
[[File:Gm9_2tb_sd.png]]&lt;br /&gt;
[[File:Ftpd_2tb_sd.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Capacity !! Boot time (NEW2DS) !! Boot time (OLD3DS)&lt;br /&gt;
|-&lt;br /&gt;
| No SD cards || 7 seconds || 8 seconds&lt;br /&gt;
|-&lt;br /&gt;
| 16GB || 10 seconds || 11 seconds&lt;br /&gt;
|-&lt;br /&gt;
| 64GB || 12 seconds || 11 seconds&lt;br /&gt;
|-&lt;br /&gt;
| 256GB || 19 seconds || 20 seconds&lt;br /&gt;
|-&lt;br /&gt;
| 2TB || 60 seconds || 60 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Tests were made on NEW2DS 11.16.0.49J and OLD3DS 11.15.0.47J.&lt;br /&gt;
* Boot time is the time until you see the home menu (software icons are still loading) after pressing power button.&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
&lt;br /&gt;
=== Front ===&lt;br /&gt;
&lt;br /&gt;
[[Image:CTR_Front.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
[http://guide-images.ifixit.net/igi/ishJaSCOwLkvbLYK High Resolution]&lt;br /&gt;
&lt;br /&gt;
=== Back ===&lt;br /&gt;
&lt;br /&gt;
[[Image:CTR_Back.jpg]]&lt;br /&gt;
&lt;br /&gt;
[http://guide-images.ifixit.net/igi/n1CKAdbPrHyNPNuW High Resolution]&lt;br /&gt;
&lt;br /&gt;
=== NAND pinout ===&lt;br /&gt;
&lt;br /&gt;
NAND dumping has been successful, but the image is encrypted.&lt;br /&gt;
&lt;br /&gt;
==== Normal model ====&lt;br /&gt;
&lt;br /&gt;
[[Image:CTR_NAND_pinout.png]]&lt;br /&gt;
&lt;br /&gt;
==== XL model ====&lt;br /&gt;
&lt;br /&gt;
[[Image:CTR_NAND_pinout_XL.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
==== 2DS ====&lt;br /&gt;
&lt;br /&gt;
[[Image:2DSeMMC.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
==== New 3DS ====&lt;br /&gt;
&lt;br /&gt;
[[Image:N3DSeMMC.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== New 3DS XL ====&lt;br /&gt;
&lt;br /&gt;
[[Image:N3DSXLeMMC.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== WiFi dongle pinout ===&lt;br /&gt;
[[Image:CTR_WiFiDongle_pinout.png|600px]]&lt;br /&gt;
&lt;br /&gt;
SDIO interface is colored red: &lt;br /&gt;
* CLK&lt;br /&gt;
* CMD&lt;br /&gt;
* D0, D1, D2, D3&lt;br /&gt;
&lt;br /&gt;
This is the interface for the &#039;NEW&#039; WiFi module (based on Atheros AR6002) first included in DSi.&lt;br /&gt;
&lt;br /&gt;
The proprietary DS-mode WiFi is colored yellow, pins are unknown.&lt;br /&gt;
&lt;br /&gt;
I²C eeprom is colored blue:&lt;br /&gt;
* SCL&lt;br /&gt;
* SDA&lt;br /&gt;
&lt;br /&gt;
SPI Flash is colored purple:&lt;br /&gt;
* CLK&lt;br /&gt;
* CS#&lt;br /&gt;
* SI&lt;br /&gt;
* SO&lt;br /&gt;
* WP#&lt;br /&gt;
* NC&lt;br /&gt;
&lt;br /&gt;
=== Auxiliary Microcontroller (MCU) ===&lt;br /&gt;
[[Image:CTR_UC.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Monitors HOME button, WiFi switch, 3D slider, volume control slider.&lt;br /&gt;
Controls LEDs, various power supplies via an I²C connection to the PMIC.&lt;br /&gt;
&lt;br /&gt;
Two I²C buses are attached to the MCU. For one, the SoC is the master; for the other, the MCU is the master.&lt;br /&gt;
&lt;br /&gt;
Devices attached to MCU master I²C bus:&lt;br /&gt;
* MCU (master)&lt;br /&gt;
* Fuel Gauge&lt;br /&gt;
* Accelerometer (slave address 0x18)&lt;br /&gt;
* PMIC&lt;br /&gt;
* maybe more?&lt;br /&gt;
&lt;br /&gt;
Devices attached to the SoC master I²C bus:&lt;br /&gt;
* SoC (master)&lt;br /&gt;
* MCU&lt;br /&gt;
* LCD&lt;br /&gt;
* Camera&lt;br /&gt;
* QTM (New3DS-only)&lt;br /&gt;
&lt;br /&gt;
The MCU uses the [http://mcs.uwsuper.edu/sb/327/Resources/RL78.pdf RL78 ISA].&lt;br /&gt;
&lt;br /&gt;
The MCU uses some custom Special Function Registers, but documentation for much of the hardware protocol/general SFRs can be found [http://courses.ee.sun.ac.za/Computer_Systems_245/Dokumentasie/RL78%20hardware%20manual%20(registers).pdf here].&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=File:Ftpd_2tb_sd.png&amp;diff=22583</id>
		<title>File:Ftpd 2tb sd.png</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=File:Ftpd_2tb_sd.png&amp;diff=22583"/>
		<updated>2024-06-18T12:11:39Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Ftpd screen with 2TB SD cards.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Ftpd screen with 2TB SD cards.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=File:Gm9_2tb_sd.png&amp;diff=22582</id>
		<title>File:Gm9 2tb sd.png</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=File:Gm9_2tb_sd.png&amp;diff=22582"/>
		<updated>2024-06-18T12:10:21Z</updated>

		<summary type="html">&lt;p&gt;2670QM: GM9 screen with 2TB SD cards.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
GM9 screen with 2TB SD cards.&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=User:2670QM&amp;diff=22581</id>
		<title>User:2670QM</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=User:2670QM&amp;diff=22581"/>
		<updated>2024-06-18T11:09:42Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Updated discord user name to new format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discord : armv6k&lt;br /&gt;
&lt;br /&gt;
Github : https://github.com/Core-2-Extreme&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21607</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21607"/>
		<updated>2021-09-28T08:30:13Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Output formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Video processing&lt;br /&gt;
!  Color conversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| N/A&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| YVYU422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| UYVY422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| VYUY422?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| YUYV422&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YVYU422&lt;br /&gt;
| A certain MVD state field must not be set to 0x8170 in order to use this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| VYUY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUYV422 with some align?&lt;br /&gt;
| A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YVYU422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| VYUY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? &lt;br /&gt;
| 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| ARGB1555?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| RGB565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| ABGR1555?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| BGR565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| ARGB32&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| ABGR32&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21606</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21606"/>
		<updated>2021-09-28T08:24:00Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Updated format name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Video processing&lt;br /&gt;
!  Color conversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| N/A&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| YVYU422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| UYVY422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| VYUY422?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| YUYV422&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YVYU422&lt;br /&gt;
| A certain MVD state field must not be set to 0x8170 in order to use this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| VYUY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUYV422 with some align?&lt;br /&gt;
| A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YVYU422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| VYUY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? &lt;br /&gt;
| 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| ARGB1555?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| ABGR1555?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| ARGB32&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| ABGR32&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21604</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21604"/>
		<updated>2021-09-28T01:53:25Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Video processing&lt;br /&gt;
!  Color conversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| N/A&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| YVYU422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| UYVY422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| VYUY422?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| YUYV422&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YVYU422&lt;br /&gt;
| A certain MVD state field must not be set to 0x8170 in order to use this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| VYUY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUYV422 with some align?&lt;br /&gt;
| A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YVYU422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| VYUY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? &lt;br /&gt;
| 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGBA5551?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGBA5551?&lt;br /&gt;
| 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=User:2670QM&amp;diff=21603</id>
		<title>User:2670QM</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=User:2670QM&amp;diff=21603"/>
		<updated>2021-09-28T01:50:40Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Created page with &amp;quot;Discord : ARM11#7410 Github : https://github.com/Core-2-Extreme&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discord : ARM11#7410&lt;br /&gt;
Github : https://github.com/Core-2-Extreme&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21602</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21602"/>
		<updated>2021-09-28T01:46:44Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Updated some format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Video processing&lt;br /&gt;
!  Color conversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| N/A&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| YVYU422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| UYVY422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| VYUY422?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| YUYV422&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YVYU422&lt;br /&gt;
| A certain MVD state field must not be set to 0x8170 in order to use this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| VYUY422&lt;br /&gt;
| see 0x00010005 for the usage requirement.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| VYUY422 with some align?&lt;br /&gt;
| A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YVYU422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| VYUY422 with some align?&lt;br /&gt;
| see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? &lt;br /&gt;
| 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGBA5551?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGBA5551?&lt;br /&gt;
| 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown&lt;br /&gt;
| Doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21601</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21601"/>
		<updated>2021-09-28T01:05:38Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Changed layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Video processing&lt;br /&gt;
!  Color conversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| N/A&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| YVYU422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| UYVY422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| VYUY422?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| See the input format type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YUY2 (pixel order : YVU)?, A certain MVD state field must not be set to 0x8170 in order to use this. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY (pixel order : YUV)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| UYVY (pixel order : YVU)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUY2 (pixel order : YUV) with some align?, A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YUY2 (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY (pixel order : YUV) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| UYVY (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGBA5551?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGBA5551? 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21600</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21600"/>
		<updated>2021-09-28T01:01:48Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added input format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| YUYV422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When color conversion, YVYU422&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When color conversion, UYVY422&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When color conversion, VYUY422?&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| See the input format type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YUY2 (pixel order : YVU)?, A certain MVD state field must not be set to 0x8170 in order to use this. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY (pixel order : YUV)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| UYVY (pixel order : YVU)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUY2 (pixel order : YUV) with some align?, A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YUY2 (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY (pixel order : YUV) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| UYVY (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGBA5551?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGBA5551? 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21597</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21597"/>
		<updated>2021-09-27T02:28:09Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Output formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| yuyv422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| See the input format type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YUY2 (pixel order : YVU)?, A certain MVD state field must not be set to 0x8170 in order to use this. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY (pixel order : YUV)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| UYVY (pixel order : YVU)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUY2 (pixel order : YUV) with some align?, A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YUY2 (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY (pixel order : YUV) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| UYVY (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGBA5551?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGBA5551? 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21596</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21596"/>
		<updated>2021-09-26T21:53:29Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Input formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| yuyv422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Color conversion, Video processing&lt;br /&gt;
| When video processing, H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be corrupt a little??&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, output will be gray-scale.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264, but no output will be written to output buffer with error code 0xD961710A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| See the input format type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YUY2 (pixel order : YVU)?, A certain MVD state field must not be set to 0x8170 in order to use this. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY (pixel order : YUV)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| UYVY (pixel order : YVU)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUY2 (pixel order : YUV) with some align?, A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YUY2 (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY (pixel order : YUV) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| UYVY (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGB555?, RGBA5551?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGB555 or RGBA5551? 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21594</id>
		<title>MVD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MVD_Services&amp;diff=21594"/>
		<updated>2021-09-26T06:10:13Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Added some format name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The [[New_3DS]] [[Internet Browser]] uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.&lt;br /&gt;
&lt;br /&gt;
See [[Internet_Browser|here]] for the supported hardware decoder video codecs.&lt;br /&gt;
&lt;br /&gt;
There can only be one service session open at a time for each individual MVD service.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;mvd:STD&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!  Used by [[Internet_Browser|SKATER]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Initialize|Initialize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:Shutdown|Shutdown]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030300&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000400C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:CalculateImageSize|CalculateImageSize]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn&#039;t seem to affect video-processing output.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080142&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetStatus|GetStatus]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0202&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. This writes 0x28-bytes of output starting at cmdreply[2].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk0, u32 unk1, u32 unk2) Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C2&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown.&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing).&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0040&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Used during shutdown with video-processing.&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:GetConfig|GetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0044&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetConfig|SetConfig]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0902&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]].&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210100&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]]&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This one uses the I/O mapped @ 0x10207000.&lt;br /&gt;
&lt;br /&gt;
This service is used by the [[New_3DS]] [[Internet Browser]]. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.&lt;br /&gt;
&lt;br /&gt;
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn&#039;t support the 0x14* region.&lt;br /&gt;
&lt;br /&gt;
By default MVD does(?) various post-processing with the output image, this is controlled by the [[MVDSTD:GetConfig|configuration]]. This post-processing isn&#039;t done at all in certain cases.&lt;br /&gt;
&lt;br /&gt;
Initialization procedures:&lt;br /&gt;
* Color-conversion: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.&lt;br /&gt;
* H.264: If needed, use [[MVDSTD:CalculateWorkBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:ProcessNALUnit]] for each of the individual NAL-unit parameter sets(&amp;quot;Sequence Parameter Set&amp;quot; and &amp;quot;Picture Parameter Set&amp;quot;), with the main video processing starting afterwards.&lt;br /&gt;
&lt;br /&gt;
Shutdown procedures:&lt;br /&gt;
* Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]].&lt;br /&gt;
* H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn&#039;t 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]].&lt;br /&gt;
&lt;br /&gt;
===MVDSTD configuration structure===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn&#039;t seem to have any visible affect on the output for video processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. This must be &amp;lt;=1. Referred to as &amp;quot;H264 range&amp;quot; in SKATER. When 0x1 the output image is brighter than normal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width. Must be &amp;gt;=width_min and &amp;lt;width_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height. Must be &amp;gt;=height_min and &amp;lt;height_max. This must be aligned: the low &amp;lt;dimensions_alignment&amp;gt;-bits must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input data physical address, only set for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value is 0x20000. This isn&#039;t used when the value at offset 0x4 is 0x1 or 0x5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, for color-conversion. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn&#039;t used when the value at offset 0x4 is 0x0 or 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables some sort of color adjustment for the output?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same affect as offset 0x2C? This must not be enabled at the same time as that field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be &amp;lt;8 for video-processing? Doesn&#039;t seem to have any visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn&#039;t mandatory for the latter).&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 4-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_height. Must be &amp;gt;=16 and &amp;lt;=heightval. Where heightval = &amp;lt;height value from the field at offset 0x10&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| See offset 0x40. u32 input_crop_width. Must be &amp;gt;=width_min and &amp;lt;=widthval. Where widthval = &amp;lt;width value from the field at offset 0xC&amp;gt;. The low 3-bits of this value must be clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| The default for this is 0x0. Must be &amp;lt;=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type, see below. SKATER writes value 0x40002 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width. Must be &amp;gt;=16, and must be &amp;lt;somewidth_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height. Must be &amp;gt;=16, and must be &amp;lt;someheight_statefield.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Additional output data physical address. This is only used when the output format type is value 0x00020001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output. Must be &amp;lt;3 for video-processing?&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. Must be &amp;lt;=1 for video processing? Doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, must be zero for video-processing.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown, doesn&#039;t seem to have a visible affect on the output.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| This flag enables using the following 4 words when non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_x_pos. Output X position in the output buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_y_pos. Same as above except for the Y pos.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| Same as the field at offset 0x110 except for the output height.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown, when non-zero it seems the output buffer isn&#039;t written any more?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr-&amp;gt;physaddr conversion for the above physaddrs, when modifying the config struct before using [[MVDSTD:SetConfig]]. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).&lt;br /&gt;
&lt;br /&gt;
For color-conversion, the output frame is split into two images via the two output physaddrs.&lt;br /&gt;
&lt;br /&gt;
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.&lt;br /&gt;
&lt;br /&gt;
The configuration doesn&#039;t seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same).&lt;br /&gt;
&lt;br /&gt;
====SKATER video processing config====&lt;br /&gt;
When processing video, SKATER [[MVDSTD:GetConfig|gets]] the config, updates all of the fields listed below, then uses [[MVDSTD:SetConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
!  Written value&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input format type.&lt;br /&gt;
| 0x00020001(H.264), hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state. This is the &#039;range&#039; field in the following debug print: &amp;quot;H264 w=%d h=%d range=%d pics=%d multi=%d\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Input video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flag&lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output format type.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video width.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output video height.&lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Output data physical address, only set for color-conversion.&lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x1, hard-coded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| Loaded from unique input state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
| 0x0, hard-coded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loaded from unique input state&amp;quot; refers to the field being loaded from state seperate from the other fields used for this configuration structure.&lt;br /&gt;
&lt;br /&gt;
====Input formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Mode&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| Color conversion&lt;br /&gt;
| yuyv422&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| Video processing&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010004&lt;br /&gt;
| Video processing&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| Color conversion&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| Color conversion&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| Color conversion&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Color conversion&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Video processing&lt;br /&gt;
| H.264&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| Video processing&lt;br /&gt;
| Same as 0x00020001, except with gray-scale?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| Video processing&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| Video processing&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Output formats====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001&lt;br /&gt;
| See the input format type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010005&lt;br /&gt;
| YUY2 (pixel order : YVU)?, A certain MVD state field must not be set to 0x8170 in order to use this. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010006&lt;br /&gt;
| UYVY (pixel order : YUV)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010007&lt;br /&gt;
| UYVY (pixel order : YVU)?, see 0x00010005 for the usage requirement. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010008&lt;br /&gt;
| YUY2 (pixel order : YUV) with some align?, A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010009&lt;br /&gt;
| YUY2 (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000A&lt;br /&gt;
| UYVY (pixel order : YUV) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001000B&lt;br /&gt;
| UYVY (pixel order : YVU) with some align?, see 0x00010008 for the usage requirements. 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001&lt;br /&gt;
| Some sort of YUV format? 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| RGB555?, RGBA5551?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| BGR565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| Some sort of RGB555 or RGBA5551? 16bit format.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041000&lt;br /&gt;
| Unknown, doesn&#039;t write anything to the out-buffer when doing color-conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041001&lt;br /&gt;
| y400a?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00041002&lt;br /&gt;
| y400a?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b:u&amp;quot;==&lt;br /&gt;
This one uses the I/O mapped @ 0x10130000.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header &lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| GetInputFormat?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040080&lt;br /&gt;
| GetOutputFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| GetTransferEndInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| GetL2BEndEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| Waits on a DMA Handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0102&lt;br /&gt;
| MaybeSetRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0080&lt;br /&gt;
| isDoneRecieving&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| SetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| GetInputLineWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| SetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetInputLines&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| MaybeSetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| MaybeGetAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140080&lt;br /&gt;
| isBusyConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| SetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160080&lt;br /&gt;
| GetPackageParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170080&lt;br /&gt;
| PingProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;l2b2:u&amp;quot;==&lt;br /&gt;
This uses the same command-handler as &amp;quot;l2b:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==MVD Service &amp;quot;y2r2:u&amp;quot;==&lt;br /&gt;
This is a exact copy of y2r camera service and hence named y2r2.&lt;br /&gt;
&lt;br /&gt;
==MVD Result-codes==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Result-code&lt;br /&gt;
!  Internal MVD status-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xD961710F&lt;br /&gt;
| &lt;br /&gt;
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD96170CA&lt;br /&gt;
| -2(~1)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xE16170C9&lt;br /&gt;
| -1(~0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xF96171C8&lt;br /&gt;
| -0xFB(~0xFA)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17000&lt;br /&gt;
| 0x0&lt;br /&gt;
| OK&lt;br /&gt;
|-&lt;br /&gt;
| 0x17001&lt;br /&gt;
| 0x1&lt;br /&gt;
| Returned after processing NAL-unit parameter-sets.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17002&lt;br /&gt;
| 0x2&lt;br /&gt;
| Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: &amp;quot;H264 output %lld us corrected to %lld us\n&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17003&lt;br /&gt;
| 0x3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17004&lt;br /&gt;
| 0x4&lt;br /&gt;
| Returned when not all of the input NAL-unit buffer was processed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x17005&lt;br /&gt;
| 0x5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17006&lt;br /&gt;
| 0x6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17007&lt;br /&gt;
| 0x7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17038&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported H.264 Levels and Profiles==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Level&lt;br /&gt;
! Baseline&lt;br /&gt;
! Main&lt;br /&gt;
! High&lt;br /&gt;
! High 10 (High10, High10p, Hi10p or 10-bit H.264)&lt;br /&gt;
! High 4:2:2 (High422p or High422)&lt;br /&gt;
! High 4:4:4 Predictive (Hi444PP)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 2.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.1&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 3.2&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Untested&lt;br /&gt;
| Untested&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 4.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|-&lt;br /&gt;
| 5.2&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
| No (untested)&lt;br /&gt;
|}&lt;br /&gt;
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/baseline.html Baseline Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/main.html Main Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high.html High Profile Test]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://mtheall.com/~mtheall/pie/high10.html High10 Profile Test]&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkEnableUPnP(bool)&amp;diff=21098</id>
		<title>ACI:GetConnectingNetworkEnableUPnP(bool)</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkEnableUPnP(bool)&amp;diff=21098"/>
		<updated>2019-11-05T03:51:08Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Created page with &amp;quot;=Request= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !  Description |- | 0 | Header code [0x04A10000] |}  =Response= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A10000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0 = Disabled, 1 = Enabled(?).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If disabled UPnP return 0.&lt;br /&gt;
If enabled UPnP return 1.(?)&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cache_buffer = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cache_buffer[0] = IPC_MakeHeader(0x4A1, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;Result : 0x%lx&amp;quot;, cache_buffer[1]);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;br /&gt;
&lt;br /&gt;
svcCloseHandle(share_ac_handle);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21097</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21097"/>
		<updated>2019-11-05T03:36:56Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
Return the current access point to MTU value.&lt;br /&gt;
If the 3DS is connected to the internet, return the current access point&#039;s MTU value.&lt;br /&gt;
If the 3DS isn&#039;t connected to the internet, return the last connected access point&#039;s MTU value.&lt;br /&gt;
(If the 3DS has never connected to any access point return to 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cache_buffer = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cache_buffer[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;Result : 0x%lx&amp;quot;, cache_buffer[1]);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;br /&gt;
&lt;br /&gt;
svcCloseHandle(share_ac_handle);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21089</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21089"/>
		<updated>2019-11-04T13:51:08Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
Return the current access point to MTU value.&lt;br /&gt;
If the 3DS is connected to the internet, return the current access point&#039;s MTU value.&lt;br /&gt;
If the 3DS isn&#039;t connected to the internet, return the last connected access point&#039;s MTU value.&lt;br /&gt;
(If the 3DS has never connected to any access point return to 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cache_buffer = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cache_buffer[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;Result : 0x%lx&amp;quot;, cache_buffer[1]);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21088</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21088"/>
		<updated>2019-11-04T13:46:52Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
Return the current access point to MTU value.&lt;br /&gt;
If the 3DS is connected to the internet, return current access point MTU value.&lt;br /&gt;
If the 3DS isn&#039;t connected to the internet, return last connected access point MTU value.&lt;br /&gt;
(If the 3DS has never connected to any access point return 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cache_buffer = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cache_buffer[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;Result : 0x%lx&amp;quot;, cache_buffer[1]);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21087</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21087"/>
		<updated>2019-11-04T13:17:45Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If 3DS is connected to Internet return current access point MTU value.&lt;br /&gt;
If 3DS isn&#039;t connected to Internet return last connected access point MTU value.(If 3DS has never connected any access point return 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cache_buffer = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cache_buffer[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;Result : 0x%lx&amp;quot;, cache_buffer[1]);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21086</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21086"/>
		<updated>2019-11-04T13:15:45Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If 3DS is connected to Internet return current access point MTU value.&lt;br /&gt;
If 3DS isn&#039;t connected to Internet return last connected access point MTU value.(If 3DS has never connected any access point return 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
&lt;br /&gt;
u32* cmdbuf = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
cmdbuf[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21085</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21085"/>
		<updated>2019-11-04T13:15:17Z</updated>

		<summary type="html">&lt;p&gt;2670QM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If 3DS is connected to Internet return current access point MTU value.&lt;br /&gt;
If 3DS isn&#039;t connected to Internet return last connected access point MTU value.(If 3DS has never connected any access point return 0)&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
Handle share_ac_handle;&lt;br /&gt;
u32* cmdbuf = getThreadCommandBuffer();&lt;br /&gt;
&lt;br /&gt;
srvGetServiceHandle(&amp;amp;share_ac_handle, &amp;quot;ac:i&amp;quot;);&lt;br /&gt;
cmdbuf[0] = IPC_MakeHeader(0x4A2, 0, 0); // 0x04A20000&lt;br /&gt;
		&lt;br /&gt;
svcSendSyncRequest(share_ac_handle);&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;MTU value : %ld&amp;quot;, cache_buffer[2]);&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21084</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21084"/>
		<updated>2019-11-04T13:03:42Z</updated>

		<summary type="html">&lt;p&gt;2670QM: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If 3DS is connected to Internet return current access point MTU value.&lt;br /&gt;
If 3DS isn&#039;t connected to Internet return last connected access point MTU value.(If 3DS has never connected any access point return 0)&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21083</id>
		<title>ACI:GetConnectingNetworkMtu</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACI:GetConnectingNetworkMtu&amp;diff=21083"/>
		<updated>2019-11-04T13:02:27Z</updated>

		<summary type="html">&lt;p&gt;2670QM: Created page with &amp;quot;=Request= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !  Description |- | 0 | Header code [0x04A20000] |}  =Response= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x04A20000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Output MTU value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
If 3DS is connected to Internet return current access point MTU value.&lt;br /&gt;
If 3DS isn&#039;t connected to Internet return last connected access point MTU value.(If 3DS has never connected any access point return 0)&lt;/div&gt;</summary>
		<author><name>2670QM</name></author>
	</entry>
</feed>