diff --git a/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp b/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp index a9cb654..d4d3b6d 100644 --- a/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp +++ b/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp @@ -552,11 +552,16 @@ int StartCaptureDma(cy_device_device_handlers* handlers, const cypart_device_usb if(ret < 0) return ret; - ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002005, 0x0000); + // Framerate... 3D RGB888 is too much for 60 FPS with all screens... + // Force it to 30 FPS for now. Could be expanded in the future to have more + // options, like "top screens only" or "YUV422/YUV420"... + // 0x00 == 60, 0x0110 == 30, 0x0120 == 15 + ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002005, is_3d ? 0x0110 : 0x0000); if(ret < 0) return ret; - ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002005, 0x0000); + // 0x00 == 60, 0x10 == 30, 0x20 == 15 + ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002005, is_3d ? 0x0010 : 0x0000); if(ret < 0) return ret; @@ -578,7 +583,8 @@ int StartCaptureDma(cy_device_device_handlers* handlers, const cypart_device_usb if(ret < 0) return ret; - ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002004, is_3d ? 0x0078 : 0x0068); + // With 3D 60 fps, this would be 0x0078 + ret = write_u16_to_address_partner_ctr(handlers, device, 0xF8002004, is_3d ? 0x0878 : 0x0068); if(ret < 0) return ret; diff --git a/source/cc3dsfs.cpp b/source/cc3dsfs.cpp index 25aa4ff..fb5994d 100755 --- a/source/cc3dsfs.cpp +++ b/source/cc3dsfs.cpp @@ -577,6 +577,8 @@ static void check_close_application(WindowScreen *screen, CaptureData* capture_d static float get_time_multiplier(CaptureData* capture_data, bool should_ignore_data_rate) { if(should_ignore_data_rate) return 1.0; + if((capture_data->status.device.cc_type == CAPTURE_CONN_PARTNER_CTR) && get_3d_enabled(&capture_data->status)) + return 2.0; if(capture_data->status.device.cc_type != CAPTURE_CONN_IS_NITRO) return 1.0; switch(capture_data->status.capture_speed) {