mirror of
https://github.com/libretro/RetroArch
synced 2025-02-27 09:41:14 +00:00
Move recording and resampler drivers to 'driver' global struct -
moving it outside of g_extern
This commit is contained in:
parent
9daad8bdb8
commit
1a94f14e50
@ -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)
|
||||
{
|
||||
|
10
driver.c
10
driver.c
@ -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;
|
||||
|
6
driver.h
6
driver.h
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
39
retroarch.c
39
retroarch.c
@ -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, ¶ms))
|
||||
if (!ffemu_init_first(&driver.recording, &driver.recording_data, ¶ms))
|
||||
{
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user