mirror of
https://github.com/libretro/RetroArch
synced 2025-02-21 18:40:09 +00:00
Reorganize recording variables in global struct
This commit is contained in:
parent
bd5695f8a4
commit
f2d2e9a4f1
19
general.h
19
general.h
@ -704,15 +704,18 @@ struct global
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Recording. */
|
/* Recording. */
|
||||||
char record_path[PATH_MAX_LENGTH];
|
struct
|
||||||
char record_config[PATH_MAX_LENGTH];
|
{
|
||||||
bool recording_enable;
|
char path[PATH_MAX_LENGTH];
|
||||||
unsigned record_width;
|
char config[PATH_MAX_LENGTH];
|
||||||
unsigned record_height;
|
bool enable;
|
||||||
|
unsigned width;
|
||||||
|
unsigned height;
|
||||||
|
|
||||||
uint8_t *record_gpu_buffer;
|
uint8_t *gpu_buffer;
|
||||||
size_t record_gpu_width;
|
size_t gpu_width;
|
||||||
size_t record_gpu_height;
|
size_t gpu_height;
|
||||||
|
} record;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -1971,7 +1971,7 @@ static void gl_init_pbo_readback(gl_t *gl)
|
|||||||
* not initialized yet.
|
* not initialized yet.
|
||||||
*/
|
*/
|
||||||
gl->pbo_readback_enable = g_settings.video.gpu_record
|
gl->pbo_readback_enable = g_settings.video.gpu_record
|
||||||
&& g_extern.recording_enable;
|
&& g_extern.record.enable;
|
||||||
if (!gl->pbo_readback_enable)
|
if (!gl->pbo_readback_enable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ static void video_frame(const void *data, unsigned width,
|
|||||||
*/
|
*/
|
||||||
if ((!g_extern.filter.filter
|
if ((!g_extern.filter.filter
|
||||||
|| !g_settings.video.post_filter_record || !data
|
|| !g_settings.video.post_filter_record || !data
|
||||||
|| g_extern.record_gpu_buffer)
|
|| g_extern.record.gpu_buffer)
|
||||||
)
|
)
|
||||||
recording_dump_frame(data, width, height, pitch);
|
recording_dump_frame(data, width, height, pitch);
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ void recording_dump_frame(const void *data, unsigned width,
|
|||||||
ffemu_data.height = height;
|
ffemu_data.height = height;
|
||||||
ffemu_data.data = data;
|
ffemu_data.data = data;
|
||||||
|
|
||||||
if (g_extern.record_gpu_buffer)
|
if (g_extern.record.gpu_buffer)
|
||||||
{
|
{
|
||||||
struct video_viewport vp = {0};
|
struct video_viewport vp = {0};
|
||||||
|
|
||||||
@ -117,8 +117,8 @@ void recording_dump_frame(const void *data, unsigned width,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* User has resized. We kinda have a problem now. */
|
/* User has resized. We kinda have a problem now. */
|
||||||
if (vp.width != g_extern.record_gpu_width ||
|
if (vp.width != g_extern.record.gpu_width ||
|
||||||
vp.height != g_extern.record_gpu_height)
|
vp.height != g_extern.record.gpu_height)
|
||||||
{
|
{
|
||||||
static const char msg[] = "Recording terminated due to resize.";
|
static const char msg[] = "Recording terminated due to resize.";
|
||||||
RARCH_WARN("%s\n", msg);
|
RARCH_WARN("%s\n", msg);
|
||||||
@ -134,19 +134,19 @@ void recording_dump_frame(const void *data, unsigned width,
|
|||||||
* it might take 3-4 times before this returns true. */
|
* it might take 3-4 times before this returns true. */
|
||||||
if (driver.video && driver.video->read_viewport)
|
if (driver.video && driver.video->read_viewport)
|
||||||
if (!driver.video->read_viewport(driver.video_data,
|
if (!driver.video->read_viewport(driver.video_data,
|
||||||
g_extern.record_gpu_buffer))
|
g_extern.record.gpu_buffer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ffemu_data.pitch = g_extern.record_gpu_width * 3;
|
ffemu_data.pitch = g_extern.record.gpu_width * 3;
|
||||||
ffemu_data.width = g_extern.record_gpu_width;
|
ffemu_data.width = g_extern.record.gpu_width;
|
||||||
ffemu_data.height = g_extern.record_gpu_height;
|
ffemu_data.height = g_extern.record.gpu_height;
|
||||||
ffemu_data.data = g_extern.record_gpu_buffer +
|
ffemu_data.data = g_extern.record.gpu_buffer +
|
||||||
(ffemu_data.height - 1) * ffemu_data.pitch;
|
(ffemu_data.height - 1) * ffemu_data.pitch;
|
||||||
|
|
||||||
ffemu_data.pitch = -ffemu_data.pitch;
|
ffemu_data.pitch = -ffemu_data.pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_extern.record_gpu_buffer)
|
if (!g_extern.record.gpu_buffer)
|
||||||
ffemu_data.is_dupe = !data;
|
ffemu_data.is_dupe = !data;
|
||||||
|
|
||||||
if (driver.recording && driver.recording->push_video)
|
if (driver.recording && driver.recording->push_video)
|
||||||
@ -184,7 +184,7 @@ bool recording_init(void)
|
|||||||
struct ffemu_params params = {0};
|
struct ffemu_params params = {0};
|
||||||
const struct retro_system_av_info *info = &g_extern.system.av_info;
|
const struct retro_system_av_info *info = &g_extern.system.av_info;
|
||||||
|
|
||||||
if (!g_extern.recording_enable)
|
if (!g_extern.record.enable)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (g_extern.libretro_dummy)
|
if (g_extern.libretro_dummy)
|
||||||
@ -209,15 +209,15 @@ bool recording_init(void)
|
|||||||
params.fb_width = info->geometry.max_width;
|
params.fb_width = info->geometry.max_width;
|
||||||
params.fb_height = info->geometry.max_height;
|
params.fb_height = info->geometry.max_height;
|
||||||
params.channels = 2;
|
params.channels = 2;
|
||||||
params.filename = g_extern.record_path;
|
params.filename = g_extern.record.path;
|
||||||
params.fps = g_extern.system.av_info.timing.fps;
|
params.fps = g_extern.system.av_info.timing.fps;
|
||||||
params.samplerate = g_extern.system.av_info.timing.sample_rate;
|
params.samplerate = g_extern.system.av_info.timing.sample_rate;
|
||||||
params.pix_fmt = (g_extern.system.pix_fmt == RETRO_PIXEL_FORMAT_XRGB8888) ?
|
params.pix_fmt = (g_extern.system.pix_fmt == RETRO_PIXEL_FORMAT_XRGB8888) ?
|
||||||
FFEMU_PIX_ARGB8888 : FFEMU_PIX_RGB565;
|
FFEMU_PIX_ARGB8888 : FFEMU_PIX_RGB565;
|
||||||
params.config = NULL;
|
params.config = NULL;
|
||||||
|
|
||||||
if (*g_extern.record_config)
|
if (*g_extern.record.config)
|
||||||
params.config = g_extern.record_config;
|
params.config = g_extern.record.config;
|
||||||
|
|
||||||
if (g_settings.video.gpu_record && driver.video->read_viewport)
|
if (g_settings.video.gpu_record && driver.video->read_viewport)
|
||||||
{
|
{
|
||||||
@ -245,14 +245,14 @@ bool recording_init(void)
|
|||||||
params.aspect_ratio = (float)vp.width / vp.height;
|
params.aspect_ratio = (float)vp.width / vp.height;
|
||||||
|
|
||||||
params.pix_fmt = FFEMU_PIX_BGR24;
|
params.pix_fmt = FFEMU_PIX_BGR24;
|
||||||
g_extern.record_gpu_width = vp.width;
|
g_extern.record.gpu_width = vp.width;
|
||||||
g_extern.record_gpu_height = vp.height;
|
g_extern.record.gpu_height = vp.height;
|
||||||
|
|
||||||
RARCH_LOG("Detected viewport of %u x %u\n",
|
RARCH_LOG("Detected viewport of %u x %u\n",
|
||||||
vp.width, vp.height);
|
vp.width, vp.height);
|
||||||
|
|
||||||
g_extern.record_gpu_buffer = (uint8_t*)malloc(vp.width * vp.height * 3);
|
g_extern.record.gpu_buffer = (uint8_t*)malloc(vp.width * vp.height * 3);
|
||||||
if (!g_extern.record_gpu_buffer)
|
if (!g_extern.record.gpu_buffer)
|
||||||
{
|
{
|
||||||
RARCH_ERR("Failed to allocate GPU record buffer.\n");
|
RARCH_ERR("Failed to allocate GPU record buffer.\n");
|
||||||
return false;
|
return false;
|
||||||
@ -260,10 +260,10 @@ bool recording_init(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (g_extern.record_width || g_extern.record_height)
|
if (g_extern.record.width || g_extern.record.height)
|
||||||
{
|
{
|
||||||
params.out_width = g_extern.record_width;
|
params.out_width = g_extern.record.width;
|
||||||
params.out_height = g_extern.record_height;
|
params.out_height = g_extern.record.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_settings.video.force_aspect &&
|
if (g_settings.video.force_aspect &&
|
||||||
@ -290,7 +290,7 @@ bool recording_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
RARCH_LOG("Recording to %s @ %ux%u. (FB size: %ux%u pix_fmt: %u)\n",
|
RARCH_LOG("Recording to %s @ %ux%u. (FB size: %ux%u pix_fmt: %u)\n",
|
||||||
g_extern.record_path,
|
g_extern.record.path,
|
||||||
params.out_width, params.out_height,
|
params.out_width, params.out_height,
|
||||||
params.fb_width, params.fb_height,
|
params.fb_width, params.fb_height,
|
||||||
(unsigned)params.pix_fmt);
|
(unsigned)params.pix_fmt);
|
||||||
|
20
retroarch.c
20
retroarch.c
@ -568,9 +568,9 @@ static void parse_input(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'r':
|
case 'r':
|
||||||
strlcpy(g_extern.record_path, optarg,
|
strlcpy(g_extern.record.path, optarg,
|
||||||
sizeof(g_extern.record_path));
|
sizeof(g_extern.record.path));
|
||||||
g_extern.recording_enable = true;
|
g_extern.record.enable = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef HAVE_DYNAMIC
|
#ifdef HAVE_DYNAMIC
|
||||||
@ -714,8 +714,8 @@ static void parse_input(int argc, char *argv[])
|
|||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
{
|
{
|
||||||
if (sscanf(optarg, "%ux%u", &g_extern.record_width,
|
if (sscanf(optarg, "%ux%u", &g_extern.record.width,
|
||||||
&g_extern.record_height) != 2)
|
&g_extern.record.height) != 2)
|
||||||
{
|
{
|
||||||
RARCH_ERR("Wrong format for --size.\n");
|
RARCH_ERR("Wrong format for --size.\n");
|
||||||
print_help();
|
print_help();
|
||||||
@ -725,8 +725,8 @@ static void parse_input(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'R':
|
case 'R':
|
||||||
strlcpy(g_extern.record_config, optarg,
|
strlcpy(g_extern.record.config, optarg,
|
||||||
sizeof(g_extern.record_config));
|
sizeof(g_extern.record.config));
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
print_features();
|
print_features();
|
||||||
@ -2401,9 +2401,9 @@ bool rarch_main_command(unsigned cmd)
|
|||||||
g_settings.audio.dsp_plugin);
|
g_settings.audio.dsp_plugin);
|
||||||
break;
|
break;
|
||||||
case RARCH_CMD_GPU_RECORD_DEINIT:
|
case RARCH_CMD_GPU_RECORD_DEINIT:
|
||||||
if (g_extern.record_gpu_buffer)
|
if (g_extern.record.gpu_buffer)
|
||||||
free(g_extern.record_gpu_buffer);
|
free(g_extern.record.gpu_buffer);
|
||||||
g_extern.record_gpu_buffer = NULL;
|
g_extern.record.gpu_buffer = NULL;
|
||||||
break;
|
break;
|
||||||
case RARCH_CMD_RECORD_DEINIT:
|
case RARCH_CMD_RECORD_DEINIT:
|
||||||
if (!recording_deinit())
|
if (!recording_deinit())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user