Difference between revisions of "GRC services"
Misson20000 (talk | contribs) (→grc:d: thanks to Stary for initial research) |
|||
Line 70: | Line 70: | ||
| 2 || || Takes an input u32 (must be value 0-1) and a type-0x6 output buffer, returns a total of 0x10-bytes of output. | | 2 || || Takes an input u32 (must be value 0-1) and a type-0x6 output buffer, returns a total of 0x10-bytes of output. | ||
|} | |} | ||
+ | |||
+ | == Cmd1 == | ||
+ | Begins video stream. Can only be called once. | ||
+ | |||
+ | == Cmd2 == | ||
+ | Retrieves video data. Takes u32 "stream" (0: video, 1: audio), returns u32 (num_frames?), u32 data_size, u64 (start_timestamp?). Video stream writes H.264 NAL units to the output buffer (try <code>ffplay -f h264</code>). Official code uses buffer size 0x32000 for video, 0x1000 for audio, and multiple threads to read out both streams at the same time. | ||
= IOffscreenRecorder = | = IOffscreenRecorder = |
Revision as of 20:10, 7 April 2019
GRC (Game Recording) uses libstagefright and the NvMMLite TVMR library for writing recorded video to MP4s.
Error reporting is done using the new /dev/nverpt-ctrl ioctls.
grc:c
This is "nn::grcsrv::IGrcService".
Cmd | Name | Notes |
---|---|---|
1 | OpenContinuousRecorder | Takes a total of 0x48-bytes of input and a handle, returns an #IContinuousRecorder. |
2 | OpenGameMovieTrimmer | Takes a total of 0x8-bytes of input and a handle, returns an #IGameMovieTrimmer. |
3 | Takes a total of 0x8-bytes of input and a handle, returns an #IOffscreenRecorder. | |
101 | Takes a total of 0x10-bytes of input, returns an #IMovieMaker. |
IContinuousRecorder
This is "nn::grcsrv::IContinuousRecorder".
Cmd | Name |
---|---|
1 | |
2 | |
10 | |
11 | |
12 | |
13 | |
14 |
IGameMovieTrimmer
This is "nn::grcsrv::IGameMovieTrimmer".
Cmd | Name |
---|---|
1 | BeginTrim |
2 | EndTrim |
10 | GetNotTrimmingEvent |
20 | SetThumbnailRgba |
grc:d
This is "nn::grcsrv::IRemoteVideoTransfer".
Added with 6.0.0.
Cmd | Name | Notes |
---|---|---|
1 | No input/output. | |
2 | Takes an input u32 (must be value 0-1) and a type-0x6 output buffer, returns a total of 0x10-bytes of output. |
Cmd1
Begins video stream. Can only be called once.
Cmd2
Retrieves video data. Takes u32 "stream" (0: video, 1: audio), returns u32 (num_frames?), u32 data_size, u64 (start_timestamp?). Video stream writes H.264 NAL units to the output buffer (try ffplay -f h264
). Official code uses buffer size 0x32000 for video, 0x1000 for audio, and multiple threads to read out both streams at the same time.
IOffscreenRecorder
This is "nn::grcsrv::IOffscreenRecorder".
Cmd | Name | Notes |
---|---|---|
201 | Takes a total of 0x8-bytes of input, returns a total of 0x8-bytes of output. | |
202 | Takes a total of 0x8-bytes of input, no output. |
IMovieMaker
This is "nn::grcsrv::IMovieMaker".
CreateVideoProxy
No input, returns an #IHOSBinderDriver.
SetAlbumShimLibraryVersion
Takes a total of 8-bytes of input, no output.
OpenOffscreenLayer
Takes an input u64 LayerHandle, returns an output u32.
CloseOffscreenLayer
Takes an input u64 LayerHandle, no output.
StartOffscreenRecording
Takes an input u64, no output.
Seems to be unused by official user processes, #StartOffscreenRecordingEx is used instead.
AbortOffscreenRecording
Takes an input u64 LayerHandle, no output.
RequestOffscreenRecordingFinishReady
Takes an input u64 LayerHandle, no output.
StartOffscreenRecordingEx
Takes an input u64 LayerHandle and an #OffscreenRecordingParameter, no output.
CompleteOffscreenRecordingFinish
Takes an input u64 LayerHandle and a type-0x5 input buffer, no output.
Seems to be unused by official user processes, #CompleteOffscreenRecordingFinishEx0 is used instead.
CompleteOffscreenRecordingFinishEx0
Takes two input u32s width/height, an input u64 LayerHandle and 2 type-0x5 input buffers, no output.
The input buffers are optional, addr=NULL and size=0 can be used for these.
width/height must be 1280x720, these fields are unused afterwards.
Besides width/height, this is the same as #CompleteOffscreenRecordingFinish except the second buffer is user-specified instead of addr=NULL/size=0.
CompleteOffscreenRecordingFinishEx1
Takes two input u32s width/height, an input u64 LayerHandle and two type-0x5 input buffers, returns a 0x20-byte output struct.
Same as #CompleteOffscreenRecordingFinishEx0 except the output struct is returned in the cmdreply.
EncodeOffscreenLayerAudioSample
Takes an input u64 LayerHandle and a type-0x5 input buffer, returns an output u64.
GetOffscreenLayerError
Takes an input u64 LayerHandle, no output.
GetOffscreenLayerRecordingFinishReadyEvent
Takes an input u64 LayerHandle, returns an output event handle with autoclear disabled.
GetOffscreenLayerAudioEncodeReadyEvent
Takes an input u64 LayerHandle, returns an output event handle with autoclear disabled.
OffscreenRecordingParameter
This is a 0x80-byte struct.
IHOSBinderDriver
This is the same interface as NV IHOSBinderDriver.