Line 160: |
Line 160: |
| * Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]]. | | * Color-conversion: just use command 0x00190000, then [[MVDSTD:Shutdown]]. |
| * H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn't 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]]. | | * H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn't 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use [[MVDSTD:Shutdown]]. |
| + | |
| + | ===MVDSTD configuration structure=== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Input format type, see below. |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | The default for this is 0x0. Must be <=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | The default for this is 0x0. This must be <=1. |
| + | |- |
| + | | 0x0C |
| + | | 0x4 |
| + | | Input video width. Must be >=width_min and <width_max. This must be aligned: the low <dimensions_alignment>-bits must be clear. |
| + | |- |
| + | |- |
| + | | 0x10 |
| + | | 0x4 |
| + | | Input video height. Must be >=height_min and <height_max. This must be aligned: the low <dimensions_alignment>-bits must be clear. |
| + | |- |
| + | | 0x14 |
| + | | 0x4 |
| + | | Input data physical address, only set for color-conversion. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
| + | |- |
| + | | 0x18 |
| + | | 0x4 |
| + | | Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
| + | |- |
| + | | 0x1C |
| + | | 0x4 |
| + | | Physical data address, only used for color-conversion when the type value is 0x20000. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
| + | |- |
| + | | 0x20 |
| + | | 0x4 |
| + | | Physical data address, for color-conversion. This isn't used when the value at offset 0x4 is 0x0 or 0x4. |
| + | |- |
| + | | 0x24 |
| + | | 0x4 |
| + | | Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x0 or 0x4. |
| + | |- |
| + | | 0x40 |
| + | | 0x4 |
| + | | When non-zero this enables usage of the 4 words starting at offset 0x44. Normally this is set to 0x0 for color-conversion, and 0x1 for video processing. |
| + | |- |
| + | | 0x44 |
| + | | 0x4 |
| + | | See offset 0x40. The default for this is 0x0. Must be <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 4-bits of this value must be clear. |
| + | |- |
| + | | 0x48 |
| + | | 0x4 |
| + | | See offset 0x40. The default for this is 0x0. Must be <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 4-bits of this value must be clear. |
| + | |- |
| + | | 0x4C |
| + | | 0x4 |
| + | | See offset 0x40. Output video height. Must be >=16 and <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 3-bits of this value must be clear. |
| + | |- |
| + | | 0x50 |
| + | | 0x4 |
| + | | See offset 0x40. Output video width. Must be >=width_min and <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 3-bits of this value must be clear. |
| + | |- |
| + | | 0x54 |
| + | | 0x4 |
| + | | The default for this is 0x0. Must be <=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. |
| + | |- |
| + | | 0x58 |
| + | | 0x4 |
| + | | Output format type, see below. SKATER writes value 0x40002 here. The physaddr at offset 0x68 is only checked when this is value 0x00020001. |
| + | |- |
| + | | 0x5C |
| + | | 0x4 |
| + | | Output video width. Must be >=16, and must be <somewidth_statefield. |
| + | |- |
| + | | 0x60 |
| + | | 0x4 |
| + | | Output video height. Must be >=16, and must be <someheight_statefield. |
| + | |- |
| + | | 0x64 |
| + | | 0x4 |
| + | | Output data physical address. |
| + | |- |
| + | | 0x68 |
| + | | 0x4 |
| + | | Output data physical address, only set for color-conversion. |
| + | |} |
| + | |
| + | The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr->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). |
| + | |
| + | For color-conversion, the output frame is split into two images via the two output physaddrs. |
| + | |
| + | 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. |
| + | |
| + | The configuration doesn't seem to change at all while SKATER is running video processing(each [[MVDSTD:SetConfig]] input config appears to the same). |
| + | |
| + | ====Input formats==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Type value |
| + | ! Mode |
| + | ! Description |
| + | |- |
| + | | 0x00010001 |
| + | | Color conversion |
| + | | yuyv422 |
| + | |- |
| + | | 0x00010002 |
| + | | Video processing |
| + | | ? |
| + | |- |
| + | | 0x00010004 |
| + | | Video processing |
| + | | ? |
| + | |- |
| + | | 0x00010005 |
| + | | Color conversion |
| + | | ? |
| + | |- |
| + | | 0x00010006 |
| + | | Color conversion |
| + | | ? |
| + | |- |
| + | | 0x00010007 |
| + | | Color conversion |
| + | | ? |
| + | |- |
| + | | 0x00020000 |
| + | | Color conversion |
| + | | ? |
| + | |- |
| + | | 0x00020001 |
| + | | Video processing |
| + | | H.264 |
| + | |- |
| + | | 0x00020002 |
| + | | ? |
| + | | ? |
| + | |- |
| + | | 0x00080000 |
| + | | Video processing |
| + | | Same as 0x00020001, except with gray-scale? |
| + | |- |
| + | | 0x00080001 |
| + | | Video processing |
| + | | ? |
| + | |- |
| + | | 0x00180001 |
| + | | Video processing |
| + | | ? |
| + | |} |
| + | |
| + | ====Output formats==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Type value |
| + | ! Description |
| + | |- |
| + | | 0x00010001 |
| + | | See the input format type. |
| + | |- |
| + | | 0x00010005 |
| + | | Unknown. A certain MVD state field must not be set to 0x8170 in order to use this. |
| + | |- |
| + | | 0x00010006 |
| + | | Unknown, see 0x00010005 for the usage requirement. |
| + | |- |
| + | | 0x00010007 |
| + | | Unknown, see 0x00010005 for the usage requirement. |
| + | |- |
| + | | 0x00010008 |
| + | | 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. |
| + | |- |
| + | | 0x00010009 |
| + | | Unknown, see 0x00010008 for the usage requirements. |
| + | |- |
| + | | 0x0001000A |
| + | | Unknown, see 0x00010008 for the usage requirements. |
| + | |- |
| + | | 0x0001000B |
| + | | Unknown, see 0x00010008 for the usage requirements. |
| + | |- |
| + | | 0x00020001 |
| + | | Some sort of YUV format? |
| + | |- |
| + | | 0x00040000 |
| + | | Unknown, doesn't write anything to the out-buffer when doing color-conversion. |
| + | |- |
| + | | 0x00040001 |
| + | | RGB555 |
| + | |- |
| + | | 0x00040002 |
| + | | BGR565 |
| + | |- |
| + | | 0x00040003 |
| + | | Some sort of 16bit format it seems? |
| + | |- |
| + | | 0x00040004 |
| + | | RGB565 |
| + | |- |
| + | | 0x00041000 |
| + | | Unknown, doesn't write anything to the out-buffer when doing color-conversion. |
| + | |- |
| + | | 0x00041001 |
| + | | y400a? |
| + | |- |
| + | | 0x00041002 |
| + | | y400a? |
| + | |} |
| | | |
| ==MVD Service "l2b:u"== | | ==MVD Service "l2b:u"== |