Difference between revisions of "MVD Services"

From 3dbrew
Jump to navigation Jump to search
Line 76: Line 76:
  
 
This service is used by the [[New_3DS]] [[Internet Browser]].
 
This service is used by the [[New_3DS]] [[Internet Browser]].
 +
 +
Initialization procedures:
 +
* MJPEG: Use command [[MVDSTD:Initialize]] with bufsize=1, then command 0x00180000.
 +
* H.264: If needed, use [[MVDSTD:CalculateVideoOutBufSize]]. Then use [[MVDSTD:Initialize]]. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use [[MVDSTD:DecodeFrame]] 3 times with unknown input data. Use command 0x000A0000, then use [[MVDSTD:DecodeFrame]] with unknown data.
  
 
Shutdown procedures:
 
Shutdown procedures:

Revision as of 22:24, 5 November 2014

This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding). The New_3DS Internet Browser uses mvd:STD for video decoding.

See here for the supported hardware decoder video codecs. Going by strings in the browser, the hw decoder seems to also support MJPEG.

A maximum of 4 sessions can be opened at a time, for all of these services combined.

MVD Service "mvd:STD"

Command Header Available since system version Description
0x00010082 Initialize
0x00020000 Shutdown
0x00030300 CalculateVideoOutBufSize
0x00050100 (u8 unk0, u8 unk1, u8 unk2, u8 unk3) SKATER uses value 0 for all of these params.
0x00070000
0x00080142 DecodeFrame
0x00090042 (u8 unkval, val0, kprocess handle) This writes some state beginning at cmdreply[2]. unkval is normally 0, when preparing to shutdown MVD unkval is 1.
0x000A0000
0x00180000
0x00190000
0x001A0000 Used when doing MJPEG decoding?
0x001B0040 (u8 unknown) SKATER uses value 1 for this.
0x001C0000
0x001D0042 GetConfig
0x001E0044 SetConfig

This one uses the I/O mapped @ 0x10207000.

This service is used by the New_3DS Internet Browser.

Initialization procedures:

Shutdown procedures:

  • MJPEG: 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.

MVD Service "l2b:u"

This one uses the I/O mapped @ 0x10130000.

MVD Service "l2b2:u"

This uses the same command-handler as "l2b:u".

MVD Service "y2r2:u"

This one uses the I/O mapped @ 0x10102000.