Move recording and resampler drivers to 'driver' global struct -

moving it outside of g_extern
This commit is contained in:
twinaphex 2014-09-30 21:23:00 +02:00
parent 9daad8bdb8
commit 1a94f14e50
7 changed files with 37 additions and 39 deletions

View File

@ -56,7 +56,7 @@ void find_prev_resampler_driver(void)
sizeof(g_settings.audio.resampler));
else
RARCH_WARN("Couldn't find any previous resampler driver (current one: \"%s\").\n",
g_extern.audio_data.resampler->ident);
driver.resampler->ident);
}
void find_next_resampler_driver(void)
@ -67,12 +67,12 @@ void find_next_resampler_driver(void)
sizeof(g_settings.audio.resampler));
else
RARCH_WARN("Couldn't find any next resampler driver (current one: \"%s\").\n",
g_extern.audio_data.resampler->ident);
driver.resampler->ident);
}
#endif
/* Resampler is used by multiple modules so avoid
* clobbering g_extern.audio_data.resampler here. */
* clobbering driver.resampler here. */
static const rarch_resampler_t *find_resampler_driver(const char *ident)
{

View File

@ -835,7 +835,7 @@ bool driver_update_system_av_info(const struct retro_system_av_info *info)
/* Cannot continue recording with different parameters.
* Take the easiest route out and just restart the recording. */
if (g_extern.rec)
if (driver.recording_data)
{
static const char *msg = "Restarting recording due to driver reinit.";
msg_queue_push(g_extern.msg_queue, msg, 2, 180);
@ -1095,8 +1095,8 @@ void init_audio(void)
g_extern.audio_data.src_ratio =
(double)g_settings.audio.out_rate / g_extern.audio_data.in_rate;
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data,
&g_extern.audio_data.resampler,
if (!rarch_resampler_realloc(&driver.resampler_data,
&driver.resampler,
g_settings.audio.resampler, g_extern.audio_data.orig_src_ratio))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n",
@ -1246,8 +1246,8 @@ void uninit_audio(void)
return;
}
rarch_resampler_freep(&g_extern.audio_data.resampler,
&g_extern.audio_data.resampler_data);
rarch_resampler_freep(&driver.resampler,
&driver.resampler_data);
free(g_extern.audio_data.data);
g_extern.audio_data.data = NULL;

View File

@ -38,6 +38,8 @@
#include "frontend/menu/menu_driver.h"
#include "frontend/menu/backend/menu_backend.h"
#include "frontend/menu/disp/menu_display.h"
#include "audio/resamplers/resampler.h"
#include "record/ffemu.h"
#include "retro.h"
@ -431,6 +433,8 @@ typedef struct driver
const input_osk_driver_t *osk;
const camera_driver_t *camera;
const location_driver_t *location;
const rarch_resampler_t *resampler;
const ffemu_backend_t *recording;
struct retro_callbacks retro_ctx;
void *audio_data;
@ -439,6 +443,8 @@ typedef struct driver
void *osk_data;
void *camera_data;
void *location_data;
void *resampler_data;
void *recording_data;
#ifdef HAVE_MENU
menu_handle_t *menu;

View File

@ -826,7 +826,7 @@ bool rarch_environment_cb(unsigned cmd, void *data)
const struct retro_audio_callback *info =
(const struct retro_audio_callback*)data;
if (g_extern.rec) // A/V sync is a must.
if (driver.recording_data) // A/V sync is a must.
return false;
#ifdef HAVE_NETPLAY

View File

@ -22,7 +22,6 @@
#include <limits.h>
#include <setjmp.h>
#include "driver.h"
#include "record/ffemu.h"
#include "message_queue.h"
#include "rewind.h"
#include "movie.h"
@ -82,8 +81,6 @@
#include "command.h"
#endif
#include "audio/resamplers/resampler.h"
#ifdef __cplusplus
extern "C" {
#endif
@ -542,9 +539,6 @@ struct global
struct
{
void *resampler_data;
const rarch_resampler_t *resampler;
float *data;
size_t data_ptr;
@ -661,9 +655,6 @@ struct global
#endif
/* Recording. */
const ffemu_backend_t *rec_driver;
void *rec;
char record_path[PATH_MAX];
char record_config[PATH_MAX];
bool recording_enable;

View File

@ -62,7 +62,7 @@ static void video_frame(const void *data, unsigned width,
* but we really need to do processing before blocking on VSync
* for best possible scheduling.
*/
if (g_extern.rec && (!g_extern.filter.filter
if (driver.recording_data && (!g_extern.filter.filter
|| !g_settings.video.post_filter_record || !data
|| g_extern.record_gpu_buffer)
)
@ -89,7 +89,7 @@ static void video_frame(const void *data, unsigned width,
data, width, height, pitch);
RARCH_PERFORMANCE_STOP(softfilter_process);
if (g_extern.rec && g_settings.video.post_filter_record)
if (driver.recording_data && g_settings.video.post_filter_record)
rarch_recording_dump_frame(g_extern.filter.buffer,
owidth, oheight, opitch);

View File

@ -288,8 +288,8 @@ void rarch_recording_dump_frame(const void *data, unsigned width,
if (!g_extern.record_gpu_buffer)
ffemu_data.is_dupe = !data;
if (g_extern.rec_driver && g_extern.rec_driver->push_video)
g_extern.rec_driver->push_video(g_extern.rec, &ffemu_data);
if (driver.recording && driver.recording->push_video)
driver.recording->push_video(driver.recording_data, &ffemu_data);
}
static void init_recording(void)
@ -408,7 +408,7 @@ static void init_recording(void)
params.fb_width, params.fb_height,
(unsigned)params.pix_fmt);
if (!ffemu_init_first(&g_extern.rec_driver, &g_extern.rec, &params))
if (!ffemu_init_first(&driver.recording, &driver.recording_data, &params))
{
RARCH_ERR(RETRO_LOG_INIT_RECORDING_FAILED);
rarch_deinit_gpu_recording();
@ -417,16 +417,17 @@ static void init_recording(void)
void rarch_deinit_recording(void)
{
if (!g_extern.rec || !g_extern.rec_driver)
if (!driver.recording_data || !driver.recording)
return;
if (g_extern.rec_driver->finalize)
g_extern.rec_driver->finalize(g_extern.rec);
if (g_extern.rec_driver->free)
g_extern.rec_driver->free(g_extern.rec);
if (driver.recording->finalize)
driver.recording->finalize(driver.recording_data);
g_extern.rec = NULL;
g_extern.rec_driver = NULL;
if (driver.recording->free)
driver.recording->free(driver.recording_data);
driver.recording_data = NULL;
driver.recording = NULL;
rarch_deinit_gpu_recording();
}
@ -434,10 +435,10 @@ void rarch_deinit_recording(void)
void rarch_render_cached_frame(void)
{
const void *frame = g_extern.frame_cache.data;
void *recording = g_extern.rec;
void *recording = driver.recording_data;
/* Cannot allow recording when pushing duped frames. */
g_extern.rec = NULL;
driver.recording_data = NULL;
if (frame == RETRO_HW_FRAME_BUFFER_VALID)
frame = NULL; /* Dupe */
@ -452,7 +453,7 @@ void rarch_render_cached_frame(void)
g_extern.frame_cache.height,
g_extern.frame_cache.pitch);
g_extern.rec = recording;
driver.recording_data = recording;
}
bool rarch_audio_flush(const int16_t *data, size_t samples)
@ -463,14 +464,14 @@ bool rarch_audio_flush(const int16_t *data, size_t samples)
struct resampler_data src_data = {0};
struct rarch_dsp_data dsp_data = {0};
if (g_extern.rec)
if (driver.recording_data)
{
struct ffemu_audio_data ffemu_data = {0};
ffemu_data.data = data;
ffemu_data.frames = samples / 2;
if (g_extern.rec_driver && g_extern.rec_driver->push_audio)
g_extern.rec_driver->push_audio(g_extern.rec, &ffemu_data);
if (driver.recording && driver.recording->push_audio)
driver.recording->push_audio(driver.recording_data, &ffemu_data);
}
if (g_extern.is_paused || g_extern.audio_data.mute)
@ -511,8 +512,8 @@ bool rarch_audio_flush(const int16_t *data, size_t samples)
RARCH_PERFORMANCE_INIT(resampler_proc);
RARCH_PERFORMANCE_START(resampler_proc);
rarch_resampler_process(g_extern.audio_data.resampler,
g_extern.audio_data.resampler_data, &src_data);
rarch_resampler_process(driver.resampler,
driver.resampler_data, &src_data);
RARCH_PERFORMANCE_STOP(resampler_proc);
output_data = g_extern.audio_data.outsamples;
@ -2774,7 +2775,7 @@ static inline void update_frame_time(void)
retro_time_t time = rarch_get_time_usec();
bool is_locked_fps = g_extern.is_paused || driver.nonblock_state;
is_locked_fps |= !!g_extern.rec;
is_locked_fps |= !!driver.recording_data;
if (!g_extern.system.frame_time_last || is_locked_fps)
delta = g_extern.system.frame_time.reference;