| @@ -542,6 +542,23 @@ public: | |||||
| /**@}*/ | /**@}*/ | ||||
| // --------------------------------------------------------------------------------------------------------------------- | |||||
| // -Weffc++ compat ext widget | |||||
| extern "C" { | |||||
| typedef struct _NativeInlineDisplayImageSurfaceCompat { | |||||
| unsigned char* data; | |||||
| int width, height, stride; | |||||
| size_t dataSize; | |||||
| _NativeInlineDisplayImageSurfaceCompat() noexcept | |||||
| : data(nullptr), width(0), height(0), stride(0), dataSize(0) {} | |||||
| } NativeInlineDisplayImageSurfaceCompat; | |||||
| } | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| #define PluginClassEND(ClassName) \ | #define PluginClassEND(ClassName) \ | ||||
| @@ -237,14 +237,14 @@ protected: | |||||
| const size_t dataSize = stride * height; | const size_t dataSize = stride * height; | ||||
| const uint pxToMove = fInlineDisplay.writtenValues; | const uint pxToMove = fInlineDisplay.writtenValues; | ||||
| uchar* data = fInlineDisplay.idisp.data; | |||||
| uchar* data = fInlineDisplay.data; | |||||
| if (fInlineDisplay.dataSize != dataSize || data == nullptr) | if (fInlineDisplay.dataSize != dataSize || data == nullptr) | ||||
| { | { | ||||
| delete[] data; | delete[] data; | ||||
| data = new uchar[dataSize]; | data = new uchar[dataSize]; | ||||
| std::memset(data, 0, dataSize); | std::memset(data, 0, dataSize); | ||||
| fInlineDisplay.idisp.data = data; | |||||
| fInlineDisplay.data = data; | |||||
| fInlineDisplay.dataSize = dataSize; | fInlineDisplay.dataSize = dataSize; | ||||
| } | } | ||||
| else if (pxToMove != 0) | else if (pxToMove != 0) | ||||
| @@ -255,9 +255,9 @@ protected: | |||||
| std::memmove(&data[h * stride + w * 4], &data[h * stride + (w+pxToMove) * 4], 4); | std::memmove(&data[h * stride + w * 4], &data[h * stride + (w+pxToMove) * 4], 4); | ||||
| } | } | ||||
| fInlineDisplay.idisp.width = static_cast<int>(width); | |||||
| fInlineDisplay.idisp.height = static_cast<int>(height); | |||||
| fInlineDisplay.idisp.stride = static_cast<int>(stride); | |||||
| fInlineDisplay.width = static_cast<int>(width); | |||||
| fInlineDisplay.height = static_cast<int>(height); | |||||
| fInlineDisplay.stride = static_cast<int>(stride); | |||||
| const uint h2 = height / 2; | const uint h2 = height / 2; | ||||
| @@ -329,7 +329,7 @@ protected: | |||||
| fInlineDisplay.writtenValues = 0; | fInlineDisplay.writtenValues = 0; | ||||
| fInlineDisplay.pending = false; | fInlineDisplay.pending = false; | ||||
| return &fInlineDisplay.idisp; | |||||
| return (NativeInlineDisplayImageSurface*)(NativeInlineDisplayImageSurfaceCompat*)&fInlineDisplay; | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -344,17 +344,14 @@ private: | |||||
| AudioFilePool fPool; | AudioFilePool fPool; | ||||
| AudioFileThread fThread; | AudioFileThread fThread; | ||||
| struct InlineDisplay { | |||||
| NativeInlineDisplayImageSurface idisp; | |||||
| size_t dataSize; | |||||
| struct InlineDisplay : NativeInlineDisplayImageSurfaceCompat { | |||||
| float lastValuesL[32]; | float lastValuesL[32]; | ||||
| float lastValuesR[32]; | float lastValuesR[32]; | ||||
| volatile uint8_t writtenValues; | volatile uint8_t writtenValues; | ||||
| volatile bool pending; | volatile bool pending; | ||||
| InlineDisplay() | InlineDisplay() | ||||
| : idisp{}, | |||||
| dataSize(0), | |||||
| : NativeInlineDisplayImageSurfaceCompat(), | |||||
| lastValuesL{0.0f}, | lastValuesL{0.0f}, | ||||
| lastValuesR{0.0f}, | lastValuesR{0.0f}, | ||||
| writtenValues(0), | writtenValues(0), | ||||
| @@ -362,10 +359,10 @@ private: | |||||
| ~InlineDisplay() | ~InlineDisplay() | ||||
| { | { | ||||
| if (idisp.data != nullptr) | |||||
| if (data != nullptr) | |||||
| { | { | ||||
| delete[] idisp.data; | |||||
| idisp.data = nullptr; | |||||
| delete[] data; | |||||
| data = nullptr; | |||||
| } | } | ||||
| } | } | ||||
| @@ -193,22 +193,22 @@ protected: | |||||
| const size_t stride = width * 4; | const size_t stride = width * 4; | ||||
| const size_t dataSize = stride * height; | const size_t dataSize = stride * height; | ||||
| uchar* data = fInlineDisplay.idisp.data; | |||||
| uchar* data = fInlineDisplay.data; | |||||
| if (fInlineDisplay.dataSize < dataSize || data == nullptr) | if (fInlineDisplay.dataSize < dataSize || data == nullptr) | ||||
| { | { | ||||
| delete[] data; | delete[] data; | ||||
| data = new uchar[dataSize]; | data = new uchar[dataSize]; | ||||
| std::memset(data, 0, dataSize); | std::memset(data, 0, dataSize); | ||||
| fInlineDisplay.idisp.data = data; | |||||
| fInlineDisplay.data = data; | |||||
| fInlineDisplay.dataSize = dataSize; | fInlineDisplay.dataSize = dataSize; | ||||
| } | } | ||||
| std::memset(data, 0, dataSize); | std::memset(data, 0, dataSize); | ||||
| fInlineDisplay.idisp.width = static_cast<int>(width); | |||||
| fInlineDisplay.idisp.height = static_cast<int>(height); | |||||
| fInlineDisplay.idisp.stride = static_cast<int>(stride); | |||||
| fInlineDisplay.width = static_cast<int>(width); | |||||
| fInlineDisplay.height = static_cast<int>(height); | |||||
| fInlineDisplay.stride = static_cast<int>(stride); | |||||
| const uint heightValueLeft = static_cast<uint>(fInlineDisplay.lastLeft * static_cast<float>(height)); | const uint heightValueLeft = static_cast<uint>(fInlineDisplay.lastLeft * static_cast<float>(height)); | ||||
| const uint heightValueRight = static_cast<uint>(fInlineDisplay.lastRight * static_cast<float>(height)); | const uint heightValueRight = static_cast<uint>(fInlineDisplay.lastRight * static_cast<float>(height)); | ||||
| @@ -283,33 +283,30 @@ protected: | |||||
| } | } | ||||
| fInlineDisplay.pending = false; | fInlineDisplay.pending = false; | ||||
| return &fInlineDisplay.idisp; | |||||
| return (NativeInlineDisplayImageSurface*)(NativeInlineDisplayImageSurfaceCompat*)&fInlineDisplay; | |||||
| } | } | ||||
| private: | private: | ||||
| int fColor, fStyle; | int fColor, fStyle; | ||||
| float fOutLeft, fOutRight; | float fOutLeft, fOutRight; | ||||
| struct InlineDisplay { | |||||
| NativeInlineDisplayImageSurface idisp; | |||||
| size_t dataSize; | |||||
| struct InlineDisplay : NativeInlineDisplayImageSurfaceCompat { | |||||
| float lastLeft; | float lastLeft; | ||||
| float lastRight; | float lastRight; | ||||
| volatile bool pending; | volatile bool pending; | ||||
| InlineDisplay() | InlineDisplay() | ||||
| : idisp{}, | |||||
| dataSize(0), | |||||
| : NativeInlineDisplayImageSurfaceCompat(), | |||||
| lastLeft(0.0f), | lastLeft(0.0f), | ||||
| lastRight(0.0f), | lastRight(0.0f), | ||||
| pending(false) {} | pending(false) {} | ||||
| ~InlineDisplay() | ~InlineDisplay() | ||||
| { | { | ||||
| if (idisp.data != nullptr) | |||||
| if (data != nullptr) | |||||
| { | { | ||||
| delete[] idisp.data; | |||||
| idisp.data = nullptr; | |||||
| delete[] data; | |||||
| data = nullptr; | |||||
| } | } | ||||
| } | } | ||||