diff --git a/Makefile.common b/Makefile.common
index 479ff725bd..9190020277 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -148,7 +148,6 @@ OBJ += frontend/frontend.o \
input/input_hid_driver.o \
gfx/video_common.o \
gfx/video_driver.o \
- gfx/video_pixel_converter.o \
camera/camera_driver.o \
location/location_driver.o \
driver.o \
diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c
index e0169e2ecd..bbcc1b124e 100644
--- a/gfx/drivers/gl.c
+++ b/gfx/drivers/gl.c
@@ -42,7 +42,6 @@
#endif
#include "../font_driver.h"
-#include "../video_pixel_converter.h"
#include "../video_context_driver.h"
#include "../video_texture.h"
diff --git a/gfx/video_driver.c b/gfx/video_driver.c
index f6c50c5528..b9b3dc64d5 100644
--- a/gfx/video_driver.c
+++ b/gfx/video_driver.c
@@ -14,12 +14,14 @@
* If not, see .
*/
+#include
#include
+#include
+
#include
#include "video_thread_wrapper.h"
-#include "video_pixel_converter.h"
#include "video_context_driver.h"
#include "../config.def.h"
#include "../general.h"
@@ -70,6 +72,10 @@ typedef struct video_driver_state
static struct retro_system_av_info video_viewport_av_info;
static video_driver_state_t video_state;
+/* Used for 16-bit -> 16-bit conversions that take place before
+ * being passed to video driver. */
+static video_pixel_scaler_t *scaler_ptr;
+
char rotation_lut[4][32] =
{
"Normal",
@@ -246,6 +252,11 @@ static bool find_video_driver(void)
return true;
}
+video_pixel_scaler_t *scaler_get_ptr(void)
+{
+ return scaler_ptr;
+}
+
/**
* video_driver_get_ptr:
*
@@ -1634,3 +1645,117 @@ struct video_viewport *video_viewport_get_custom(void)
settings_t *settings = config_get_ptr();
return &settings->video_viewport_custom;
}
+
+void deinit_pixel_converter(void)
+{
+ if (!scaler_ptr)
+ return;
+
+ scaler_ctx_gen_reset(scaler_ptr->scaler);
+
+ if (scaler_ptr->scaler)
+ free(scaler_ptr->scaler);
+ if (scaler_ptr->scaler_out)
+ free(scaler_ptr->scaler_out);
+ if (scaler_ptr)
+ free(scaler_ptr);
+
+ scaler_ptr->scaler = NULL;
+ scaler_ptr->scaler_out = NULL;
+ scaler_ptr = NULL;
+}
+
+bool init_video_pixel_converter(unsigned size)
+{
+ /* This function can be called multiple times
+ * without deiniting first on consoles. */
+ deinit_pixel_converter();
+
+ /* If pixel format is not 0RGB1555, we don't need to do
+ * any internal pixel conversion. */
+ if (video_driver_get_pixel_format() != RETRO_PIXEL_FORMAT_0RGB1555)
+ return true;
+
+ RARCH_WARN("0RGB1555 pixel format is deprecated, and will be slower. For 15/16-bit, RGB565 format is preferred.\n");
+
+ scaler_ptr = (video_pixel_scaler_t*)calloc(1, sizeof(*scaler_ptr));
+
+ if (!scaler_ptr)
+ goto error;
+
+ scaler_ptr->scaler = (struct scaler_ctx*)calloc(1, sizeof(*scaler_ptr->scaler));
+
+ if (!scaler_ptr->scaler)
+ goto error;
+
+ scaler_ptr->scaler->scaler_type = SCALER_TYPE_POINT;
+ scaler_ptr->scaler->in_fmt = SCALER_FMT_0RGB1555;
+
+ /* TODO: Pick either ARGB8888 or RGB565 depending on driver. */
+ scaler_ptr->scaler->out_fmt = SCALER_FMT_RGB565;
+
+ if (!scaler_ctx_gen_filter(scaler_ptr->scaler))
+ goto error;
+
+ scaler_ptr->scaler_out = calloc(sizeof(uint16_t), size * size);
+
+ if (!scaler_ptr->scaler_out)
+ goto error;
+
+ return true;
+
+error:
+ if (scaler_ptr->scaler_out)
+ free(scaler_ptr->scaler_out);
+ if (scaler_ptr->scaler)
+ free(scaler_ptr->scaler);
+ if (scaler_ptr)
+ free(scaler_ptr);
+
+ scaler_ptr = NULL;
+
+ return false;
+}
+
+unsigned video_pixel_get_alignment(unsigned pitch)
+{
+ if (pitch & 1)
+ return 1;
+ if (pitch & 2)
+ return 2;
+ if (pitch & 4)
+ return 4;
+ return 8;
+}
+
+bool video_pixel_frame_scale(const void *data,
+ unsigned width, unsigned height,
+ size_t pitch)
+{
+ static struct retro_perf_counter video_frame_conv = {0};
+ video_pixel_scaler_t *scaler = scaler_get_ptr();
+
+ rarch_perf_init(&video_frame_conv, "video_frame_conv");
+
+ if (!data)
+ return false;
+ if (video_driver_get_pixel_format() != RETRO_PIXEL_FORMAT_0RGB1555)
+ return false;
+ if (data == RETRO_HW_FRAME_BUFFER_VALID)
+ return false;
+
+ retro_perf_start(&video_frame_conv);
+
+ scaler->scaler->in_width = width;
+ scaler->scaler->in_height = height;
+ scaler->scaler->out_width = width;
+ scaler->scaler->out_height = height;
+ scaler->scaler->in_stride = pitch;
+ scaler->scaler->out_stride = width * sizeof(uint16_t);
+
+ scaler_ctx_scale(scaler->scaler, scaler->scaler_out, data);
+
+ retro_perf_stop(&video_frame_conv);
+
+ return true;
+}
diff --git a/gfx/video_driver.h b/gfx/video_driver.h
index d3ec46e1e2..95655bb976 100644
--- a/gfx/video_driver.h
+++ b/gfx/video_driver.h
@@ -33,6 +33,21 @@
extern "C" {
#endif
+enum text_alignment
+{
+ TEXT_ALIGN_LEFT = 0,
+ TEXT_ALIGN_RIGHT,
+ TEXT_ALIGN_CENTER
+};
+
+enum texture_filter_type
+{
+ TEXTURE_FILTER_LINEAR = 0,
+ TEXTURE_FILTER_NEAREST,
+ TEXTURE_FILTER_MIPMAP_LINEAR,
+ TEXTURE_FILTER_MIPMAP_NEAREST
+};
+
typedef struct video_info
{
unsigned width;
@@ -56,12 +71,6 @@ typedef struct video_info
bool rgb32;
} video_info_t;
- enum text_alignment
- {
- TEXT_ALIGN_LEFT = 0,
- TEXT_ALIGN_RIGHT,
- TEXT_ALIGN_CENTER
- };
struct font_params
{
@@ -79,13 +88,12 @@ struct font_params
enum text_alignment text_align;
};
-enum texture_filter_type
+typedef struct video_pixel_scaler
{
- TEXTURE_FILTER_LINEAR = 0,
- TEXTURE_FILTER_NEAREST,
- TEXTURE_FILTER_MIPMAP_LINEAR,
- TEXTURE_FILTER_MIPMAP_NEAREST
-};
+ struct scaler_ctx *scaler;
+ void *scaler_out;
+} video_pixel_scaler_t;
+
#define FONT_COLOR_RGBA(r, g, b, a) (((r) << 24) | ((g) << 16) | ((b) << 8) | ((a) << 0))
#define FONT_COLOR_GET_RED(col) (((col) >> 24) & 0xff)
@@ -496,6 +504,18 @@ bool video_monitor_fps_statistics(double *refresh_rate,
bool video_monitor_get_fps(char *buf, size_t size,
char *buf_fps, size_t size_fps);
+void deinit_pixel_converter(void);
+
+bool init_video_pixel_converter(unsigned size);
+
+unsigned video_pixel_get_alignment(unsigned pitch);
+
+bool video_pixel_frame_scale(const void *data,
+ unsigned width, unsigned height,
+ size_t pitch);
+
+video_pixel_scaler_t *scaler_get_ptr(void);
+
extern video_driver_t video_gl;
extern video_driver_t video_psp1;
extern video_driver_t video_vita2d;
diff --git a/gfx/video_pixel_converter.c b/gfx/video_pixel_converter.c
deleted file mode 100644
index 86b3979984..0000000000
--- a/gfx/video_pixel_converter.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#include
-
-#include
-
-#include "../general.h"
-#include "../performance.h"
-#include "../verbosity.h"
-#include "video_pixel_converter.h"
-
-/* Used for 16-bit -> 16-bit conversions that take place before
- * being passed to video driver. */
-static video_pixel_scaler_t *scaler_ptr;
-
-video_pixel_scaler_t *scaler_get_ptr(void)
-{
- return scaler_ptr;
-}
-
-void deinit_pixel_converter(void)
-{
- if (!scaler_ptr)
- return;
-
- scaler_ctx_gen_reset(scaler_ptr->scaler);
-
- if (scaler_ptr->scaler)
- free(scaler_ptr->scaler);
- if (scaler_ptr->scaler_out)
- free(scaler_ptr->scaler_out);
- if (scaler_ptr)
- free(scaler_ptr);
-
- scaler_ptr->scaler = NULL;
- scaler_ptr->scaler_out = NULL;
- scaler_ptr = NULL;
-}
-
-bool init_video_pixel_converter(unsigned size)
-{
- /* This function can be called multiple times
- * without deiniting first on consoles. */
- deinit_pixel_converter();
-
- /* If pixel format is not 0RGB1555, we don't need to do
- * any internal pixel conversion. */
- if (video_driver_get_pixel_format() != RETRO_PIXEL_FORMAT_0RGB1555)
- return true;
-
- RARCH_WARN("0RGB1555 pixel format is deprecated, and will be slower. For 15/16-bit, RGB565 format is preferred.\n");
-
- scaler_ptr = (video_pixel_scaler_t*)calloc(1, sizeof(*scaler_ptr));
-
- if (!scaler_ptr)
- goto error;
-
- scaler_ptr->scaler = (struct scaler_ctx*)calloc(1, sizeof(*scaler_ptr->scaler));
-
- if (!scaler_ptr->scaler)
- goto error;
-
- scaler_ptr->scaler->scaler_type = SCALER_TYPE_POINT;
- scaler_ptr->scaler->in_fmt = SCALER_FMT_0RGB1555;
-
- /* TODO: Pick either ARGB8888 or RGB565 depending on driver. */
- scaler_ptr->scaler->out_fmt = SCALER_FMT_RGB565;
-
- if (!scaler_ctx_gen_filter(scaler_ptr->scaler))
- goto error;
-
- scaler_ptr->scaler_out = calloc(sizeof(uint16_t), size * size);
-
- if (!scaler_ptr->scaler_out)
- goto error;
-
- return true;
-
-error:
- if (scaler_ptr->scaler_out)
- free(scaler_ptr->scaler_out);
- if (scaler_ptr->scaler)
- free(scaler_ptr->scaler);
- if (scaler_ptr)
- free(scaler_ptr);
-
- scaler_ptr = NULL;
-
- return false;
-}
-
-unsigned video_pixel_get_alignment(unsigned pitch)
-{
- if (pitch & 1)
- return 1;
- if (pitch & 2)
- return 2;
- if (pitch & 4)
- return 4;
- return 8;
-}
-
-bool video_pixel_frame_scale(const void *data,
- unsigned width, unsigned height,
- size_t pitch)
-{
- static struct retro_perf_counter video_frame_conv = {0};
- video_pixel_scaler_t *scaler = scaler_get_ptr();
-
- rarch_perf_init(&video_frame_conv, "video_frame_conv");
-
- if (!data)
- return false;
- if (video_driver_get_pixel_format() != RETRO_PIXEL_FORMAT_0RGB1555)
- return false;
- if (data == RETRO_HW_FRAME_BUFFER_VALID)
- return false;
-
- retro_perf_start(&video_frame_conv);
-
- scaler->scaler->in_width = width;
- scaler->scaler->in_height = height;
- scaler->scaler->out_width = width;
- scaler->scaler->out_height = height;
- scaler->scaler->in_stride = pitch;
- scaler->scaler->out_stride = width * sizeof(uint16_t);
-
- scaler_ctx_scale(scaler->scaler, scaler->scaler_out, data);
-
- retro_perf_stop(&video_frame_conv);
-
- return true;
-}
diff --git a/gfx/video_pixel_converter.h b/gfx/video_pixel_converter.h
deleted file mode 100644
index 13282b28de..0000000000
--- a/gfx/video_pixel_converter.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#ifndef _VIDEO_PIXEL_CONVERTER_H
-#define _VIDEO_PIXEL_CONVERTER_H
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct video_pixel_scaler
-{
- struct scaler_ctx *scaler;
- void *scaler_out;
-} video_pixel_scaler_t;
-
-void deinit_pixel_converter(void);
-
-bool init_video_pixel_converter(unsigned size);
-
-unsigned video_pixel_get_alignment(unsigned pitch);
-
-bool video_pixel_frame_scale(const void *data,
- unsigned width, unsigned height,
- size_t pitch);
-
-video_pixel_scaler_t *scaler_get_ptr(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/gfx/video_texture_c.c b/gfx/video_texture_c.c
index 0b1d9ed6d2..813ceb1dd2 100644
--- a/gfx/video_texture_c.c
+++ b/gfx/video_texture_c.c
@@ -17,8 +17,8 @@
#include
#include
+#include "video_driver.h"
#include "video_texture.h"
-#include "video_pixel_converter.h"
#include "video_thread_wrapper.h"
#ifdef HAVE_OPENGL
diff --git a/griffin/griffin.c b/griffin/griffin.c
index 356540f44f..f5805ae47c 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -535,7 +535,6 @@ DRIVERS
============================================================ */
#include "../gfx/video_driver.c"
#include "../gfx/video_common.c"
-#include "../gfx/video_pixel_converter.c"
#include "../input/input_driver.c"
#include "../audio/audio_driver.c"
#include "../camera/camera_driver.c"
diff --git a/libretro_version_1.c b/libretro_version_1.c
index e3e244ab13..04cf8e3d88 100644
--- a/libretro_version_1.c
+++ b/libretro_version_1.c
@@ -33,7 +33,6 @@
#include "performance.h"
#include "input/input_remapping.h"
#include "record/record_driver.h"
-#include "gfx/video_pixel_converter.h"
#include "verbosity.h"
#ifdef HAVE_NETPLAY