mirror of
https://github.com/libretro/RetroArch
synced 2025-02-20 06:40:18 +00:00
Start preparing internal ffmpeg core mechanisms
This commit is contained in:
parent
6f1bc69fc7
commit
d3f0954418
@ -797,9 +797,10 @@ endif
|
||||
# Record
|
||||
|
||||
ifeq ($(HAVE_FFMPEG), 1)
|
||||
OBJ += record/drivers/ffmpeg.o
|
||||
LIBS += $(AVCODEC_LIBS) $(AVFORMAT_LIBS) $(AVUTIL_LIBS) $(SWSCALE_LIBS) $(FFMPEG_LIBS)
|
||||
DEFINES += $(AVCODEC_CFLAGS) $(AVFORMAT_CFLAGS) $(AVUTIL_CFLAGS) $(SWSCALE_CFLAGS)
|
||||
OBJ += record/drivers/ffmpeg.o \
|
||||
cores/ffmpeg_core.o
|
||||
LIBS += $(AVCODEC_LIBS) $(AVFORMAT_LIBS) $(AVUTIL_LIBS) $(SWSCALE_LIBS) $(SWRESAMPLE_LIBS) $(FFMPEG_LIBS)
|
||||
DEFINES += $(AVCODEC_CFLAGS) $(AVFORMAT_CFLAGS) $(AVUTIL_CFLAGS) $(SWSCALE_CFLAGS) $(SWRESAMPLE_CFLAGS)
|
||||
DEFINES += -DHAVE_FFMPEG -Iffmpeg
|
||||
endif
|
||||
|
||||
|
@ -75,6 +75,7 @@ AVCODEC_LIBS := -lavcodec
|
||||
AVUTIL_LIBS := -lavutil
|
||||
SWSCALE_LIBS := -lswscale
|
||||
AVFORMAT_LIBS := -lavformat
|
||||
SWRESAMPLE_LIBS := -lswresample
|
||||
FFMPEG_LIBS := -lws2_32 -lz
|
||||
endif
|
||||
|
||||
|
1575
cores/ffmpeg_core.c
Normal file
1575
cores/ffmpeg_core.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -15,8 +15,8 @@
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef DYNAMIC_DUMMY_H__
|
||||
#define DYNAMIC_DUMMY_H__
|
||||
#ifndef INTERNAL_CORES_H__
|
||||
#define INTERNAL_CORES_H__
|
||||
|
||||
#include <boolean.h>
|
||||
#include "../libretro.h"
|
||||
@ -72,5 +72,60 @@ void *libretro_dummy_retro_get_memory_data(unsigned id);
|
||||
|
||||
size_t libretro_dummy_retro_get_memory_size(unsigned id);
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
||||
|
||||
void libretro_ffmpeg_retro_init(void);
|
||||
|
||||
void libretro_ffmpeg_retro_deinit(void);
|
||||
|
||||
unsigned libretro_ffmpeg_retro_api_version(void);
|
||||
|
||||
void libretro_ffmpeg_retro_get_system_info(struct retro_system_info *info);
|
||||
|
||||
void libretro_ffmpeg_retro_get_system_av_info(struct retro_system_av_info *info);
|
||||
|
||||
void libretro_ffmpeg_retro_set_environment(retro_environment_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_video_refresh(retro_video_refresh_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_audio_sample(retro_audio_sample_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_audio_sample_batch(retro_audio_sample_batch_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_input_poll(retro_input_poll_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_input_state(retro_input_state_t cb);
|
||||
|
||||
void libretro_ffmpeg_retro_set_controller_port_device(unsigned port, unsigned device);
|
||||
|
||||
void libretro_ffmpeg_retro_reset(void);
|
||||
|
||||
void libretro_ffmpeg_retro_run(void);
|
||||
|
||||
size_t libretro_ffmpeg_retro_serialize_size(void);
|
||||
|
||||
bool libretro_ffmpeg_retro_serialize(void *data, size_t size);
|
||||
|
||||
bool libretro_ffmpeg_retro_unserialize(const void *data, size_t size);
|
||||
|
||||
void libretro_ffmpeg_retro_cheat_reset(void);
|
||||
|
||||
void libretro_ffmpeg_retro_cheat_set(unsigned index, bool enabled, const char *code);
|
||||
|
||||
bool libretro_ffmpeg_retro_load_game(const struct retro_game_info *game);
|
||||
|
||||
bool libretro_ffmpeg_retro_load_game_special(unsigned game_type,
|
||||
const struct retro_game_info *info, size_t num_info);
|
||||
|
||||
void libretro_ffmpeg_retro_unload_game(void);
|
||||
|
||||
unsigned libretro_ffmpeg_retro_get_region(void);
|
||||
|
||||
void *libretro_ffmpeg_retro_get_memory_data(unsigned id);
|
||||
|
||||
size_t libretro_ffmpeg_retro_get_memory_size(unsigned id);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
43
dynamic.c
43
dynamic.c
@ -29,7 +29,7 @@
|
||||
|
||||
#include <boolean.h>
|
||||
#include "libretro_private.h"
|
||||
#include "cores/dynamic_dummy.h"
|
||||
#include "cores/internal_cores.h"
|
||||
#include "retroarch.h"
|
||||
#include "runloop.h"
|
||||
#include "configuration.h"
|
||||
@ -60,6 +60,10 @@ static dylib_t lib_handle;
|
||||
|
||||
#define SYM_DUMMY(x) p##x = libretro_dummy_##x
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
||||
#define SYM_FFMPEG(x) p##x = libretro_ffmpeg_##x
|
||||
#endif
|
||||
|
||||
void (*pretro_init)(void);
|
||||
void (*pretro_deinit)(void);
|
||||
|
||||
@ -400,6 +404,43 @@ static void load_symbols(enum rarch_core_type type)
|
||||
SYM_DUMMY(retro_get_memory_data);
|
||||
SYM_DUMMY(retro_get_memory_size);
|
||||
break;
|
||||
#ifdef HAVE_FFMPEG
|
||||
case CORE_TYPE_FFMPEG:
|
||||
SYM_FFMPEG(retro_init);
|
||||
SYM_FFMPEG(retro_deinit);
|
||||
|
||||
SYM_FFMPEG(retro_api_version);
|
||||
SYM_FFMPEG(retro_get_system_info);
|
||||
SYM_FFMPEG(retro_get_system_av_info);
|
||||
|
||||
SYM_FFMPEG(retro_set_environment);
|
||||
SYM_FFMPEG(retro_set_video_refresh);
|
||||
SYM_FFMPEG(retro_set_audio_sample);
|
||||
SYM_FFMPEG(retro_set_audio_sample_batch);
|
||||
SYM_FFMPEG(retro_set_input_poll);
|
||||
SYM_FFMPEG(retro_set_input_state);
|
||||
|
||||
SYM_FFMPEG(retro_set_controller_port_device);
|
||||
|
||||
SYM_FFMPEG(retro_reset);
|
||||
SYM_FFMPEG(retro_run);
|
||||
|
||||
SYM_FFMPEG(retro_serialize_size);
|
||||
SYM_FFMPEG(retro_serialize);
|
||||
SYM_FFMPEG(retro_unserialize);
|
||||
|
||||
SYM_FFMPEG(retro_cheat_reset);
|
||||
SYM_FFMPEG(retro_cheat_set);
|
||||
|
||||
SYM_FFMPEG(retro_load_game);
|
||||
SYM_FFMPEG(retro_load_game_special);
|
||||
|
||||
SYM_FFMPEG(retro_unload_game);
|
||||
SYM_FFMPEG(retro_get_region);
|
||||
SYM_FFMPEG(retro_get_memory_data);
|
||||
SYM_FFMPEG(retro_get_memory_size);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,9 @@ enum rarch_core_type
|
||||
{
|
||||
CORE_TYPE_PLAIN = 0,
|
||||
CORE_TYPE_DUMMY,
|
||||
#ifdef HAVE_FFMPEG
|
||||
CORE_TYPE_FFMPEG,
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -42,6 +42,8 @@ typedef struct fifo_buffer fifo_buffer_t;
|
||||
|
||||
fifo_buffer_t *fifo_new(size_t size);
|
||||
|
||||
void fifo_clear(fifo_buffer_t *buffer);
|
||||
|
||||
void fifo_write(fifo_buffer_t *buffer, const void *in_buf, size_t size);
|
||||
|
||||
void fifo_read(fifo_buffer_t *buffer, void *in_buf, size_t size);
|
||||
|
@ -44,6 +44,12 @@ fifo_buffer_t *fifo_new(size_t size)
|
||||
return buf;
|
||||
}
|
||||
|
||||
void fifo_clear(fifo_buffer_t *buffer)
|
||||
{
|
||||
buffer->first = 0;
|
||||
buffer->end = 0;
|
||||
}
|
||||
|
||||
void fifo_free(fifo_buffer_t *buffer)
|
||||
{
|
||||
if (!buffer)
|
||||
|
@ -279,12 +279,13 @@ if [ "$HAVE_THREADS" != 'no' ]; then
|
||||
if [ "$HAVE_FFMPEG" != 'no' ]; then
|
||||
check_pkgconf AVCODEC libavcodec 54
|
||||
check_pkgconf AVFORMAT libavformat 54
|
||||
check_pkgconf SWRESAMPLE libswresample
|
||||
check_pkgconf AVUTIL libavutil 51
|
||||
check_pkgconf SWSCALE libswscale 2.1
|
||||
check_header AV_CHANNEL_LAYOUT libavutil/channel_layout.h
|
||||
|
||||
HAVE_FFMPEG='yes'
|
||||
if [ "$HAVE_AVCODEC" = 'no' ] || [ "$HAVE_AVFORMAT" = 'no' ] || [ "$HAVE_AVUTIL" = 'no' ] || [ "$HAVE_SWSCALE" = 'no' ]; then
|
||||
if [ "$HAVE_AVCODEC" = 'no' ] || [ "$HAVE_SWRESAMPLE" = 'no' ] || [ "$HAVE_AVFORMAT" = 'no' ] || [ "$HAVE_AVUTIL" = 'no' ] || [ "$HAVE_SWSCALE" = 'no' ]; then
|
||||
HAVE_FFMPEG='no'
|
||||
echo "Notice: FFmpeg recording disabled due to missing or unsuitable packages."
|
||||
fi
|
||||
@ -391,6 +392,6 @@ add_define_make OS "$OS"
|
||||
|
||||
# Creates config.mk and config.h.
|
||||
add_define_make GLOBAL_CONFIG_DIR "$GLOBAL_CONFIG_DIR"
|
||||
VARS="RGUI LAKKA GLUI XMB ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO CORETEXT PULSE SDL SDL2 D3D9 DINPUT LIBUSB XINPUT DSOUND XAUDIO OPENGL EXYNOS DISPMANX SUNXI OMAP GLES GLES3 VG EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG LIBXML2 ZLIB DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL SWSCALE FREETYPE XKBCOMMON XVIDEO X11 XEXT XF86VM XINERAMA WAYLAND MALI_FBDEV VIVANTE_FBDEV NETWORKING NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO STRL STRCASESTR MMAP PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 FFMPEG_AVCODEC_ENCODE_VIDEO2 BSV_MOVIE VIDEOCORE NEON FLOATHARD FLOATSOFTFP UDEV V4L2 AV_CHANNEL_LAYOUT 7ZIP PARPORT COCOA AVFOUNDATION CORELOCATION IOHIDMANAGER LIBRETRODB"
|
||||
VARS="RGUI LAKKA GLUI XMB ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO CORETEXT PULSE SDL SDL2 D3D9 DINPUT LIBUSB XINPUT DSOUND XAUDIO OPENGL EXYNOS DISPMANX SUNXI OMAP GLES GLES3 VG EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG LIBXML2 ZLIB DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL SWSCALE FREETYPE XKBCOMMON XVIDEO X11 XEXT XF86VM XINERAMA WAYLAND MALI_FBDEV VIVANTE_FBDEV NETWORKING NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO STRL STRCASESTR MMAP PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 SWRESAMPLE FFMPEG_AVCODEC_ENCODE_VIDEO2 BSV_MOVIE VIDEOCORE NEON FLOATHARD FLOATSOFTFP UDEV V4L2 AV_CHANNEL_LAYOUT 7ZIP PARPORT COCOA AVFOUNDATION CORELOCATION IOHIDMANAGER LIBRETRODB"
|
||||
create_config_make config.mk $VARS
|
||||
create_config_header config.h $VARS
|
||||
|
Loading…
x
Reference in New Issue
Block a user