Fixed Linux compilation errors/warnings
This commit is contained in:
parent
ce62e40d47
commit
25019f052c
9 changed files with 10 additions and 501 deletions
|
@ -20,7 +20,7 @@ public:
|
|||
virtual ~BizhawkMovie();
|
||||
|
||||
void RecordState(uint8_t port, uint8_t value) override;
|
||||
void Record(string filename, bool reset);
|
||||
void Record(string filename, bool reset) override;
|
||||
|
||||
uint8_t GetState(uint8_t port) override;
|
||||
|
||||
|
@ -29,5 +29,5 @@ public:
|
|||
bool IsRecording() override;
|
||||
bool IsPlaying() override;
|
||||
|
||||
void ProcessNotification(ConsoleNotificationType type, void* parameter);
|
||||
void ProcessNotification(ConsoleNotificationType type, void* parameter) override;
|
||||
};
|
|
@ -85,7 +85,7 @@ protected:
|
|||
|
||||
void InitMapper() override;
|
||||
void InitMapper(RomData &romData) override;
|
||||
void Reset(bool softReset);
|
||||
void Reset(bool softReset) override;
|
||||
|
||||
uint32_t GetFdsDiskSideSize(uint8_t side);
|
||||
uint8_t ReadFdsDisk();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "stdafx.h"
|
||||
#include <algorithm>
|
||||
#include "../Utilities/HexUtilities.h"
|
||||
#include "FceuxMovie.h"
|
||||
#include "Console.h"
|
||||
|
|
|
@ -27,7 +27,7 @@ protected:
|
|||
Stream(_currentReg, _outerChrBank);
|
||||
}
|
||||
|
||||
void SelectCHRPage(uint16_t slot, uint16_t page, ChrMemoryType memoryType)
|
||||
void SelectCHRPage(uint16_t slot, uint16_t page, ChrMemoryType memoryType) override
|
||||
{
|
||||
switch(slot){
|
||||
case 4: page |= (_outerChrBank & 0x10) << 4; break;
|
||||
|
|
|
@ -19,7 +19,6 @@ private:
|
|||
atomic<bool> _stopFlag;
|
||||
|
||||
shared_ptr<AviRecorder> _aviRecorder;
|
||||
FrameInfo type_info;
|
||||
|
||||
void RenderThread();
|
||||
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
#include <cmath>
|
||||
#include "../Core/EmulationSettings.h"
|
||||
#include "../Core/VideoDecoder.h"
|
||||
#include "../Core/PPU.h"
|
||||
|
||||
void BaseRenderer::DisplayMessage(string title, string message)
|
||||
{
|
||||
shared_ptr<ToastInfo> toast(new ToastInfo(title, message, 4000, ""));
|
||||
shared_ptr<ToastInfo> toast(new ToastInfo(title, message, 4000));
|
||||
_toasts.push_front(toast);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,65 +44,6 @@
|
|||
*/
|
||||
/* #define USE_SCALE_RANDOMWRITE */
|
||||
|
||||
static inline void scale2x_8_def_whole(scale2x_uint8* dst0, scale2x_uint8* dst1, const scale2x_uint8* src0, const scale2x_uint8* src1, const scale2x_uint8* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale2x_8_def_border(scale2x_uint8* dst, const scale2x_uint8* src0, const scale2x_uint8* src1, const scale2x_uint8* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
@ -193,65 +134,6 @@ static inline void scale2x_8_def_center(scale2x_uint8* dst, const scale2x_uint8*
|
|||
}
|
||||
}
|
||||
|
||||
static inline void scale2x_16_def_whole(scale2x_uint16* dst0, scale2x_uint16* dst1, const scale2x_uint16* src0, const scale2x_uint16* src1, const scale2x_uint16* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale2x_16_def_border(scale2x_uint16* dst, const scale2x_uint16* src0, const scale2x_uint16* src1, const scale2x_uint16* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
@ -342,65 +224,6 @@ static inline void scale2x_16_def_center(scale2x_uint16* dst, const scale2x_uint
|
|||
}
|
||||
}
|
||||
|
||||
static inline void scale2x_32_def_whole(scale2x_uint32* dst0, scale2x_uint32* dst1, const scale2x_uint32* src0, const scale2x_uint32* src1, const scale2x_uint32* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[1] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[1] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 2;
|
||||
dst1 += 2;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src0[0] : src1[0];
|
||||
dst0[1] = src1[0] == src0[0] ? src0[0] : src1[0];
|
||||
dst1[0] = src1[-1] == src2[0] ? src2[0] : src1[0];
|
||||
dst1[1] = src1[0] == src2[0] ? src2[0] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale2x_32_def_border(scale2x_uint32* dst, const scale2x_uint32* src0, const scale2x_uint32* src1, const scale2x_uint32* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
|
|
@ -44,97 +44,6 @@
|
|||
*/
|
||||
/* #define USE_SCALE_RANDOMWRITE */
|
||||
|
||||
static inline void scale3x_8_def_whole(scale3x_uint8* dst0, scale3x_uint8* dst1, scale3x_uint8* dst2, const scale3x_uint8* src0, const scale3x_uint8* src1, const scale3x_uint8* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = (src1[0] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[0]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = (src1[0] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[0]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[0]) || (src1[0] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale3x_8_def_border(scale3x_uint8* dst, const scale3x_uint8* src0, const scale3x_uint8* src1, const scale3x_uint8* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
@ -237,97 +146,6 @@ static inline void scale3x_8_def_center(scale3x_uint8* dst, const scale3x_uint8*
|
|||
}
|
||||
}
|
||||
|
||||
static inline void scale3x_16_def_whole(scale3x_uint16* dst0, scale3x_uint16* dst1, scale3x_uint16* dst2, const scale3x_uint16* src0, const scale3x_uint16* src1, const scale3x_uint16* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = (src1[0] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[0]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = (src1[0] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[0]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[0]) || (src1[0] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale3x_16_def_border(scale3x_uint16* dst, const scale3x_uint16* src0, const scale3x_uint16* src1, const scale3x_uint16* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
@ -430,97 +248,6 @@ static inline void scale3x_16_def_center(scale3x_uint16* dst, const scale3x_uint
|
|||
}
|
||||
}
|
||||
|
||||
static inline void scale3x_32_def_whole(scale3x_uint32* dst0, scale3x_uint32* dst1, scale3x_uint32* dst2, const scale3x_uint32* src0, const scale3x_uint32* src1, const scale3x_uint32* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
||||
/* first pixel */
|
||||
if (src0[0] != src2[0] && src1[0] != src1[1]) {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = (src1[0] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[0]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = (src1[0] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[0]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
|
||||
/* central pixels */
|
||||
count -= 2;
|
||||
while (count) {
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[1]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[1]) || (src1[1] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[1] == src0[0] ? src1[1] : src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[1] == src2[0] ? src1[1] : src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
|
||||
++src0;
|
||||
++src1;
|
||||
++src2;
|
||||
dst0 += 3;
|
||||
dst1 += 3;
|
||||
dst2 += 3;
|
||||
--count;
|
||||
}
|
||||
|
||||
/* last pixel */
|
||||
if (src0[0] != src2[0] && src1[-1] != src1[0]) {
|
||||
dst0[0] = src1[-1] == src0[0] ? src1[-1] : src1[0];
|
||||
dst0[1] = (src1[-1] == src0[0] && src1[0] != src0[0]) || (src1[0] == src0[0] && src1[0] != src0[-1]) ? src0[0] : src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = (src1[0] == src0[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src0[0]) ? src1[0] : src1[0];
|
||||
dst2[0] = src1[-1] == src2[0] ? src1[-1] : src1[0];
|
||||
dst2[1] = (src1[-1] == src2[0] && src1[0] != src2[0]) || (src1[0] == src2[0] && src1[0] != src2[-1]) ? src2[0] : src1[0];
|
||||
dst2[2] = src1[0];
|
||||
} else {
|
||||
dst0[0] = src1[0];
|
||||
dst0[1] = src1[0];
|
||||
dst0[2] = src1[0];
|
||||
dst1[0] = src1[0];
|
||||
dst1[1] = src1[0];
|
||||
dst1[2] = src1[0];
|
||||
dst2[0] = src1[0];
|
||||
dst2[1] = src1[0];
|
||||
dst2[2] = src1[0];
|
||||
}
|
||||
}
|
||||
|
||||
static inline void scale3x_32_def_border(scale3x_uint32* dst, const scale3x_uint32* src0, const scale3x_uint32* src1, const scale3x_uint32* src2, unsigned count)
|
||||
{
|
||||
assert(count >= 2);
|
||||
|
|
|
@ -163,47 +163,6 @@ private:
|
|||
template <class T> inline
|
||||
T square(T value) { return value * value; }
|
||||
|
||||
|
||||
|
||||
inline
|
||||
double distRGB(uint32_t pix1, uint32_t pix2)
|
||||
{
|
||||
const double r_diff = static_cast<int>(getRed (pix1)) - getRed (pix2);
|
||||
const double g_diff = static_cast<int>(getGreen(pix1)) - getGreen(pix2);
|
||||
const double b_diff = static_cast<int>(getBlue (pix1)) - getBlue (pix2);
|
||||
|
||||
//euklidean RGB distance
|
||||
return std::sqrt(square(r_diff) + square(g_diff) + square(b_diff));
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
double distYCbCr(uint32_t pix1, uint32_t pix2, double lumaWeight)
|
||||
{
|
||||
//http://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.601_conversion
|
||||
//YCbCr conversion is a matrix multiplication => take advantage of linearity by subtracting first!
|
||||
const int r_diff = static_cast<int>(getRed (pix1)) - getRed (pix2); //we may delay division by 255 to after matrix multiplication
|
||||
const int g_diff = static_cast<int>(getGreen(pix1)) - getGreen(pix2); //
|
||||
const int b_diff = static_cast<int>(getBlue (pix1)) - getBlue (pix2); //substraction for int is noticeable faster than for double!
|
||||
|
||||
//const double k_b = 0.0722; //ITU-R BT.709 conversion
|
||||
//const double k_r = 0.2126; //
|
||||
const double k_b = 0.0593; //ITU-R BT.2020 conversion
|
||||
const double k_r = 0.2627; //
|
||||
const double k_g = 1 - k_b - k_r;
|
||||
|
||||
const double scale_b = 0.5 / (1 - k_b);
|
||||
const double scale_r = 0.5 / (1 - k_r);
|
||||
|
||||
const double y = k_r * r_diff + k_g * g_diff + k_b * b_diff; //[!], analog YCbCr!
|
||||
const double c_b = scale_b * (b_diff - y);
|
||||
const double c_r = scale_r * (r_diff - y);
|
||||
|
||||
//we skip division by 255 to have similar range like other distance functions
|
||||
return std::sqrt(square(lumaWeight * y) + square(c_b) + square(c_r));
|
||||
}
|
||||
|
||||
|
||||
struct DistYCbCrBuffer //30% perf boost compared to distYCbCr()!
|
||||
{
|
||||
public:
|
||||
|
@ -352,26 +311,25 @@ DEF_GETTER(g) DEF_GETTER(h) DEF_GETTER(i)
|
|||
#undef DEF_GETTER
|
||||
|
||||
#define DEF_GETTER(x, y) template <> inline uint32_t get_##x<ROT_90>(const Kernel_3x3& ker) { return ker.y; }
|
||||
DEF_GETTER(a, g) DEF_GETTER(b, d) DEF_GETTER(c, a)
|
||||
DEF_GETTER(b, d) DEF_GETTER(c, a)
|
||||
DEF_GETTER(d, h) DEF_GETTER(e, e) DEF_GETTER(f, b)
|
||||
DEF_GETTER(g, i) DEF_GETTER(h, f) DEF_GETTER(i, c)
|
||||
#undef DEF_GETTER
|
||||
|
||||
#define DEF_GETTER(x, y) template <> inline uint32_t get_##x<ROT_180>(const Kernel_3x3& ker) { return ker.y; }
|
||||
DEF_GETTER(a, i) DEF_GETTER(b, h) DEF_GETTER(c, g)
|
||||
DEF_GETTER(b, h) DEF_GETTER(c, g)
|
||||
DEF_GETTER(d, f) DEF_GETTER(e, e) DEF_GETTER(f, d)
|
||||
DEF_GETTER(g, c) DEF_GETTER(h, b) DEF_GETTER(i, a)
|
||||
#undef DEF_GETTER
|
||||
|
||||
#define DEF_GETTER(x, y) template <> inline uint32_t get_##x<ROT_270>(const Kernel_3x3& ker) { return ker.y; }
|
||||
DEF_GETTER(a, c) DEF_GETTER(b, f) DEF_GETTER(c, i)
|
||||
DEF_GETTER(b, f) DEF_GETTER(c, i)
|
||||
DEF_GETTER(d, b) DEF_GETTER(e, e) DEF_GETTER(f, h)
|
||||
DEF_GETTER(g, a) DEF_GETTER(h, d) DEF_GETTER(i, g)
|
||||
#undef DEF_GETTER
|
||||
|
||||
|
||||
//compress four blend types into a single byte
|
||||
inline BlendType getTopL (unsigned char b) { return static_cast<BlendType>(0x3 & b); }
|
||||
inline BlendType getTopR (unsigned char b) { return static_cast<BlendType>(0x3 & (b >> 2)); }
|
||||
inline BlendType getBottomR(unsigned char b) { return static_cast<BlendType>(0x3 & (b >> 4)); }
|
||||
inline BlendType getBottomL(unsigned char b) { return static_cast<BlendType>(0x3 & (b >> 6)); }
|
||||
|
|
Loading…
Add table
Reference in a new issue