Reorganize recording variables in global struct

This commit is contained in:
twinaphex 2015-03-07 14:02:50 +01:00
parent bd5695f8a4
commit f2d2e9a4f1
5 changed files with 44 additions and 41 deletions

View File

@ -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
{ {

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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())