mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 19:20:35 +00:00
Reimplementation of set_direct_pixel_conv and document the function
This commit is contained in:
parent
4bd347375f
commit
a4a133d700
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user