Merge pull request #5273 from xperia64/frame_timing_tweak
Update FPS to roughly match the actual 3DS rate
This commit is contained in:
		| @@ -11,10 +11,11 @@ | ||||
| #include "core/core.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hw/gpu.h" | ||||
|  | ||||
| namespace Cheats { | ||||
|  | ||||
| constexpr u64 run_interval_ticks = BASE_CLOCK_RATE_ARM11 / 60; | ||||
| constexpr u64 run_interval_ticks = GPU::frame_ticks; | ||||
|  | ||||
| CheatEngine::CheatEngine(Core::System& system_) : system(system_) { | ||||
|     LoadCheatFile(); | ||||
|   | ||||
| @@ -9,6 +9,7 @@ | ||||
| #include "common/param_package.h" | ||||
| #include "common/string_util.h" | ||||
| #include "core/dumping/ffmpeg_backend.h" | ||||
| #include "core/hw/gpu.h" | ||||
| #include "core/settings.h" | ||||
| #include "video_core/renderer_base.h" | ||||
| #include "video_core/video_core.h" | ||||
| @@ -124,8 +125,13 @@ bool FFmpegVideoStream::Init(FFmpegMuxer& muxer, const Layout::FramebufferLayout | ||||
|     codec_context->bit_rate = Settings::values.video_bitrate; | ||||
|     codec_context->width = layout.width; | ||||
|     codec_context->height = layout.height; | ||||
|     codec_context->time_base.num = 1; | ||||
|     codec_context->time_base.den = 60; | ||||
|     // TODO(xperia64): While these numbers from core timing work fine, certain video codecs do not | ||||
|     // support the strange resulting timebase (280071/16756991); Addressing this issue would require | ||||
|     // resampling the video | ||||
|     // List of codecs known broken by this change: mpeg1, mpeg2, mpeg4, libxvid | ||||
|     // See https://github.com/citra-emu/citra/pull/5273#issuecomment-643023325 for more information | ||||
|     codec_context->time_base.num = static_cast<int>(GPU::frame_ticks); | ||||
|     codec_context->time_base.den = static_cast<int>(BASE_CLOCK_RATE_ARM11); | ||||
|     codec_context->gop_size = 12; | ||||
|     codec_context->pix_fmt = codec->pix_fmts ? codec->pix_fmts[0] : AV_PIX_FMT_YUV420P; | ||||
|     if (format_context->oformat->flags & AVFMT_GLOBALHEADER) | ||||
|   | ||||
| @@ -30,8 +30,6 @@ namespace GPU { | ||||
| Regs g_regs; | ||||
| Memory::MemorySystem* g_memory; | ||||
|  | ||||
| /// 268MHz CPU clocks / 60Hz frames per second | ||||
| const u64 frame_ticks = static_cast<u64>(BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE); | ||||
| /// Event id for CoreTiming | ||||
| static Core::TimingEventType* vblank_event; | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,7 @@ | ||||
| #include "common/bit_field.h" | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/common_types.h" | ||||
| #include "core/core_timing.h" | ||||
|  | ||||
| namespace Memory { | ||||
| class MemorySystem; | ||||
| @@ -19,7 +20,12 @@ class MemorySystem; | ||||
|  | ||||
| namespace GPU { | ||||
|  | ||||
| constexpr float SCREEN_REFRESH_RATE = 60; | ||||
| // Measured on hardware to be 2240568 timer cycles or 4481136 ARM11 cycles | ||||
| constexpr u64 frame_ticks = 4481136ull; | ||||
|  | ||||
| // Refresh rate defined by ratio of ARM11 frequency to ARM11 ticks per frame | ||||
| // (268,111,856) / (4,481,136) = 59.83122493939037Hz | ||||
| constexpr double SCREEN_REFRESH_RATE = BASE_CLOCK_RATE_ARM11 / static_cast<double>(frame_ticks); | ||||
|  | ||||
| // Returns index corresponding to the Regs member labeled by field_name | ||||
| #define GPU_REG_INDEX(field_name) (offsetof(GPU::Regs, field_name) / sizeof(u32)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user