diff --git a/libstratosphere/include/stratosphere/capsrv.hpp b/libstratosphere/include/stratosphere/capsrv.hpp index eb9c3c3c..12285a69 100644 --- a/libstratosphere/include/stratosphere/capsrv.hpp +++ b/libstratosphere/include/stratosphere/capsrv.hpp @@ -19,3 +19,4 @@ #include #include #include +#include diff --git a/libstratosphere/include/stratosphere/capsrv/capsrv_screen_shot_control_api.hpp b/libstratosphere/include/stratosphere/capsrv/capsrv_screen_shot_control_api.hpp new file mode 100644 index 00000000..f3fdc23a --- /dev/null +++ b/libstratosphere/include/stratosphere/capsrv/capsrv_screen_shot_control_api.hpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include +#include + +namespace ams::capsrv { + + constexpr inline s32 DefaultCaptureTimeoutMilliSeconds = 100; + + Result InitializeScreenShotControl(); + void FinalizeScreenShotControl(); + + Result CaptureJpegScreenshot(u64 *out_size, void *dst, size_t dst_size, vi::LayerStack layer_stack, TimeSpan timeout); + +} diff --git a/libstratosphere/include/stratosphere/vi.hpp b/libstratosphere/include/stratosphere/vi.hpp new file mode 100644 index 00000000..ed95b4f0 --- /dev/null +++ b/libstratosphere/include/stratosphere/vi.hpp @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include diff --git a/libstratosphere/include/stratosphere/vi/vi_layer_stack.hpp b/libstratosphere/include/stratosphere/vi/vi_layer_stack.hpp new file mode 100644 index 00000000..f18deab9 --- /dev/null +++ b/libstratosphere/include/stratosphere/vi/vi_layer_stack.hpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include + +namespace ams::vi { + + enum LayerStack { + LayerStack_Default = 0, + LayerStack_Lcd = 1, + LayerStack_Screenshot = 2, + LayerStack_Recording = 3, + LayerStack_LastFrame = 4, + LayerStack_Arbitrary = 5, + LayerStack_ApplicationForDebug = 6, + LayerStack_Null = 10, + }; + +} diff --git a/libstratosphere/source/capsrv/capsrv_screen_shot_control_api.cpp b/libstratosphere/source/capsrv/capsrv_screen_shot_control_api.cpp new file mode 100644 index 00000000..a262f47d --- /dev/null +++ b/libstratosphere/source/capsrv/capsrv_screen_shot_control_api.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include + +namespace ams::capsrv { + + Result InitializeScreenShotControl() { + return ::capsscInitialize(); + } + + void FinalizeScreenShotControl() { + return ::capsscExit(); + } + + Result CaptureJpegScreenshot(u64 *out_size, void *dst, size_t dst_size, vi::LayerStack layer_stack, TimeSpan timeout) { + return ::capsscCaptureJpegScreenShot(out_size, dst, dst_size, static_cast<::ViLayerStack>(layer_stack), timeout.GetNanoSeconds()); + } + +}