Win32: update xbrz

This commit is contained in:
OV2 2016-10-07 21:39:32 +02:00
parent ddb1527236
commit 26914fa9b0
6 changed files with 359 additions and 441 deletions

View File

@ -1,6 +1,6 @@
// ****************************************************************************
// * This file is part of the HqMAME project. It is distributed under *
// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
// * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 *
// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
// * *
// * Additionally and as a special exception, the author gives permission *
@ -22,18 +22,11 @@ namespace xbrz
{
struct ScalerCfg
{
ScalerCfg() :
luminanceWeight_(1),
equalColorTolerance_(30),
dominantDirectionThreshold(3.6),
steepDirectionThreshold(2.2),
newTestAttribute_(0) {}
double luminanceWeight_;
double equalColorTolerance_;
double dominantDirectionThreshold;
double steepDirectionThreshold;
double newTestAttribute_; //unused; test new parameters
double luminanceWeight = 1;
double equalColorTolerance = 30;
double dominantDirectionThreshold = 3.6;
double steepDirectionThreshold = 2.2;
double newTestAttribute = 0; //unused; test new parameters
};
}

File diff suppressed because it is too large Load Diff

View File

@ -36,12 +36,13 @@ http://board.byuu.org/viewtopic.php?f=10&t=2248
- support multithreading
- support 64-bit architectures
- support processing image slices
- support scaling up to 6xBRZ
*/
enum ColorFormat //from high bits -> low bits, 8 bit per channel
enum class ColorFormat //from high bits -> low bits, 8 bit per channel
{
ARGB, //including alpha channel, BGRA byte order on little-endian machines
RGB, //8 bit for each red, green, blue, upper 8 bits unused
ARGB, //including alpha channel, BGRA byte order on little-endian machines
};
/*
@ -53,9 +54,9 @@ enum ColorFormat //from high bits -> low bits, 8 bit per channel
in the target image data if you are using multiple threads for processing each enlarged slice!
THREAD-SAFETY: - parts of the same image may be scaled by multiple threads as long as the [yFirst, yLast) ranges do not overlap!
- there is a minor inefficiency for the first row of a slice, so avoid processing single rows only; suggestion: process 6 rows at least
- there is a minor inefficiency for the first row of a slice, so avoid processing single rows only; suggestion: process 8-16 rows at least
*/
void scale(size_t factor, //valid range: 2 - 5
void scale(size_t factor, //valid range: 2 - 6
const uint32_t* src, uint32_t* trg, int srcWidth, int srcHeight,
ColorFormat colFmt,
const ScalerCfg& cfg = ScalerCfg(),

View File

@ -219,6 +219,8 @@ void RenderHQ4X (SSurface Src, SSurface Dst, RECT *rect);
void Render2xBRZ(SSurface Src, SSurface Dst, RECT* rect);
void Render3xBRZ(SSurface Src, SSurface Dst, RECT* rect);
void Render4xBRZ(SSurface Src, SSurface Dst, RECT* rect);
void Render5xBRZ(SSurface Src, SSurface Dst, RECT* rect);
void Render6xBRZ(SSurface Src, SSurface Dst, RECT* rect);
void RenderEPXA (SSurface Src, SSurface Dst, RECT *);
void RenderEPXB (SSurface Src, SSurface Dst, RECT *);
void RenderEPXC (SSurface Src, SSurface Dst, RECT *);
@ -319,6 +321,8 @@ TRenderMethod FilterToMethod(RenderFilter filterID)
case FILTER_SIMPLE4X: return RenderSimple4X;
case FILTER_HQ4X: return RenderHQ4X;
case FILTER_4XBRZ: return Render4xBRZ;
case FILTER_5XBRZ: return Render5xBRZ;
case FILTER_6XBRZ: return Render6xBRZ;
}
}
@ -357,6 +361,8 @@ const char* GetFilterName(RenderFilter filterID)
case FILTER_SIMPLE4X: return "Simple 4X";
case FILTER_HQ4X: return "hq4x";
case FILTER_4XBRZ: return "4xBRZ";
case FILTER_5XBRZ: return "5xBRZ";
case FILTER_6XBRZ: return "6xBRZ";
}
}
@ -388,6 +394,10 @@ int GetFilterScale(RenderFilter filterID)
case FILTER_HQ4X:
case FILTER_4XBRZ:
return 4;
case FILTER_5XBRZ:
return 5;
case FILTER_6XBRZ:
return 6;
}
}
@ -409,6 +419,8 @@ bool GetFilterHiResSupport(RenderFilter filterID)
case FILTER_2XBRZ:
case FILTER_3XBRZ:
case FILTER_4XBRZ:
case FILTER_5XBRZ:
case FILTER_6XBRZ:
return true;
default:
@ -2746,6 +2758,16 @@ void Render4xBRZ(SSurface Src, SSurface Dst, RECT* rect)
RenderxBRZ(Src, Dst, rect, 4);
}
void Render5xBRZ(SSurface Src, SSurface Dst, RECT* rect)
{
RenderxBRZ(Src, Dst, rect, 5);
}
void Render6xBRZ(SSurface Src, SSurface Dst, RECT* rect)
{
RenderxBRZ(Src, Dst, rect, 6);
}
void RenderxBRZ(SSurface Src, SSurface Dst, RECT* rect, int scalingFactor)
{
xbrz_thread_data::scalingFactor = scalingFactor;

View File

@ -7541,6 +7541,7 @@ checkUpdateFilterBox2:
default: case 2: filter = FILTER_SIMPLE2X; break;
case 3: filter = FILTER_SIMPLE3X; break;
case 4: filter = FILTER_SIMPLE4X; break;
case 5: case 6: filter = FILTER_SIMPLE4X; break;
}
strcpy(textOriginal, GetFilterName(filter));
}

View File

@ -271,6 +271,8 @@ enum RenderFilter{
FILTER_2XBRZ,
FILTER_3XBRZ,
FILTER_4XBRZ,
FILTER_5XBRZ,
FILTER_6XBRZ,
NUM_FILTERS
};