diff --git a/libretro-sdk/gfx/scaler/scaler.c b/libretro-sdk/gfx/scaler/scaler.c index f555e842ad..3d510b5a06 100644 --- a/libretro-sdk/gfx/scaler/scaler.c +++ b/libretro-sdk/gfx/scaler/scaler.c @@ -95,47 +95,68 @@ static bool allocate_frames(struct scaler_ctx *ctx) return true; } +/** + * set_direct_pix_conv: + * @ctx : pointer to scaler context object. + * + * Bind a pixel converter callback function to the 'direct_pixconv' function pointer + * of the scaler context object. + * + * Returns: true if a pixel converter function callback could be bound, false if not. + * If false, the function callback 'direct_pixconv' is still unbound. + **/ static bool set_direct_pix_conv(struct scaler_ctx *ctx) { if (ctx->in_fmt == ctx->out_fmt) + { ctx->direct_pixconv = conv_copy; - else if (ctx->in_fmt == SCALER_FMT_0RGB1555 - && ctx->out_fmt == SCALER_FMT_ARGB8888) - ctx->direct_pixconv = conv_0rgb1555_argb8888; - else if (ctx->in_fmt == SCALER_FMT_RGB565 - && ctx->out_fmt == SCALER_FMT_ARGB8888) - ctx->direct_pixconv = conv_rgb565_argb8888; - else if (ctx->in_fmt == SCALER_FMT_RGB565 - && ctx->out_fmt == SCALER_FMT_BGR24) - ctx->direct_pixconv = conv_rgb565_bgr24; - else if (ctx->in_fmt == SCALER_FMT_0RGB1555 - && ctx->out_fmt == SCALER_FMT_RGB565) - ctx->direct_pixconv = conv_0rgb1555_rgb565; - else if (ctx->in_fmt == SCALER_FMT_RGB565 - && ctx->out_fmt == SCALER_FMT_0RGB1555) - ctx->direct_pixconv = conv_rgb565_0rgb1555; - else if (ctx->in_fmt == SCALER_FMT_BGR24 - && ctx->out_fmt == SCALER_FMT_ARGB8888) - ctx->direct_pixconv = conv_bgr24_argb8888; - else if (ctx->in_fmt == SCALER_FMT_ARGB8888 - && ctx->out_fmt == SCALER_FMT_0RGB1555) - ctx->direct_pixconv = conv_argb8888_0rgb1555; - else if (ctx->in_fmt == SCALER_FMT_ARGB8888 - && ctx->out_fmt == SCALER_FMT_BGR24) - ctx->direct_pixconv = conv_argb8888_bgr24; - else if (ctx->in_fmt == SCALER_FMT_0RGB1555 - && ctx->out_fmt == SCALER_FMT_BGR24) - ctx->direct_pixconv = conv_0rgb1555_bgr24; - else if (ctx->in_fmt == SCALER_FMT_ARGB8888 - && ctx->out_fmt == SCALER_FMT_ABGR8888) - ctx->direct_pixconv = conv_argb8888_abgr8888; - else if (ctx->in_fmt == SCALER_FMT_YUYV - && ctx->out_fmt == SCALER_FMT_ARGB8888) - ctx->direct_pixconv = conv_yuyv_argb8888; - else if (ctx->in_fmt == SCALER_FMT_RGBA4444 - && ctx->out_fmt == SCALER_FMT_ARGB8888) - ctx->direct_pixconv = conv_rgba4444_argb8888; - else + return true; + } + + switch (ctx->in_fmt) + { + case SCALER_FMT_0RGB1555: + if (ctx->out_fmt == SCALER_FMT_ARGB8888) + ctx->direct_pixconv = conv_0rgb1555_argb8888; + else if (ctx->out_fmt == SCALER_FMT_RGB565) + ctx->direct_pixconv = conv_0rgb1555_rgb565; + else if (ctx->out_fmt == SCALER_FMT_BGR24) + ctx->direct_pixconv = conv_0rgb1555_bgr24; + break; + case SCALER_FMT_RGB565: + if (ctx->out_fmt == SCALER_FMT_ARGB8888) + ctx->direct_pixconv = conv_rgb565_argb8888; + else if (ctx->out_fmt == SCALER_FMT_BGR24) + ctx->direct_pixconv = conv_rgb565_bgr24; + else if (ctx->out_fmt == SCALER_FMT_0RGB1555) + ctx->direct_pixconv = conv_rgb565_0rgb1555; + break; + case SCALER_FMT_BGR24: + if (ctx->out_fmt == SCALER_FMT_ARGB8888) + ctx->direct_pixconv = conv_bgr24_argb8888; + break; + case SCALER_FMT_ARGB8888: + if (ctx->out_fmt == SCALER_FMT_0RGB1555) + ctx->direct_pixconv = conv_argb8888_0rgb1555; + else if (ctx->out_fmt == SCALER_FMT_BGR24) + ctx->direct_pixconv = conv_argb8888_bgr24; + else if (ctx->out_fmt == SCALER_FMT_ABGR8888) + ctx->direct_pixconv = conv_argb8888_abgr8888; + break; + case SCALER_FMT_YUYV: + if (ctx->out_fmt == SCALER_FMT_ARGB8888) + ctx->direct_pixconv = conv_yuyv_argb8888; + break; + case SCALER_FMT_RGBA4444: + if (ctx->out_fmt == SCALER_FMT_ARGB8888) + ctx->direct_pixconv = conv_rgba4444_argb8888; + break; + case SCALER_FMT_ABGR8888: + /* FIXME/TODO */ + break; + } + + if (!ctx->direct_pixconv) return false; return true;