diff options
Diffstat (limited to 'thirdparty/etcpak/Error.cpp')
-rw-r--r-- | thirdparty/etcpak/Error.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/thirdparty/etcpak/Error.cpp b/thirdparty/etcpak/Error.cpp new file mode 100644 index 0000000000..014ecdab66 --- /dev/null +++ b/thirdparty/etcpak/Error.cpp @@ -0,0 +1,48 @@ +#include <stdint.h> + +#include "Error.hpp" +#include "Math.hpp" + +float CalcMSE3( const Bitmap& bmp, const Bitmap& out ) +{ + float err = 0; + + const uint32_t* p1 = bmp.Data(); + const uint32_t* p2 = out.Data(); + size_t cnt = bmp.Size().x * bmp.Size().y; + + for( size_t i=0; i<cnt; i++ ) + { + uint32_t c1 = *p1++; + uint32_t c2 = *p2++; + + err += sq( ( c1 & 0x000000FF ) - ( c2 & 0x000000FF ) ); + err += sq( ( ( c1 & 0x0000FF00 ) >> 8 ) - ( ( c2 & 0x0000FF00 ) >> 8 ) ); + err += sq( ( ( c1 & 0x00FF0000 ) >> 16 ) - ( ( c2 & 0x00FF0000 ) >> 16 ) ); + } + + err /= cnt * 3; + + return err; +} + +float CalcMSE1( const Bitmap& bmp, const Bitmap& out ) +{ + float err = 0; + + const uint32_t* p1 = bmp.Data(); + const uint32_t* p2 = out.Data(); + size_t cnt = bmp.Size().x * bmp.Size().y; + + for( size_t i=0; i<cnt; i++ ) + { + uint32_t c1 = *p1++; + uint32_t c2 = *p2++; + + err += sq( ( c1 >> 24 ) - ( c2 & 0xFF ) ); + } + + err /= cnt; + + return err; +} |