Fixed some cast-align warnings (potential fix for Android crash?)

This commit is contained in:
Sour 2018-06-19 20:43:16 -04:00
parent 451c49ab7a
commit 3e6f10757c
20 changed files with 53 additions and 41 deletions

View file

@ -25,7 +25,7 @@ BaseVideoFilter::~BaseVideoFilter()
void BaseVideoFilter::UpdateBufferSize()
{
uint32_t newBufferSize = GetFrameInfo().Width*GetFrameInfo().Height*GetFrameInfo().BitsPerPixel;
uint32_t newBufferSize = GetFrameInfo().Width*GetFrameInfo().Height;
if(_bufferSize != newBufferSize) {
_frameLock.Acquire();
if(_outputBuffer) {
@ -33,7 +33,7 @@ void BaseVideoFilter::UpdateBufferSize()
}
_bufferSize = newBufferSize;
_outputBuffer = new uint8_t[newBufferSize];
_outputBuffer = new uint32_t[newBufferSize];
_frameLock.Release();
}
}
@ -61,12 +61,12 @@ void BaseVideoFilter::SendFrame(uint16_t *ppuOutputBuffer, uint32_t frameNumber)
OnBeforeApplyFilter();
ApplyFilter(ppuOutputBuffer);
DebugHud::GetInstance()->Draw((uint32_t*)_outputBuffer, _overscan, GetFrameInfo().Width, frameNumber);
DebugHud::GetInstance()->Draw(_outputBuffer, _overscan, GetFrameInfo().Width, frameNumber);
_frameLock.Release();
}
uint8_t* BaseVideoFilter::GetOutputBuffer()
uint32_t* BaseVideoFilter::GetOutputBuffer()
{
return _outputBuffer;
}
@ -82,8 +82,8 @@ void BaseVideoFilter::TakeScreenshot(VideoFilterType filterType, string filename
return;
}
frameBuffer = (uint32_t*)new uint8_t[_bufferSize];
memcpy(frameBuffer, GetOutputBuffer(), _bufferSize);
frameBuffer = new uint32_t[_bufferSize];
memcpy(frameBuffer, GetOutputBuffer(), _bufferSize * sizeof(frameBuffer[0]));
frameInfo = GetFrameInfo();
}
@ -104,7 +104,7 @@ void BaseVideoFilter::TakeScreenshot(VideoFilterType filterType, string filename
}
VideoHud hud;
hud.DrawHud((uint8_t*)pngBuffer, frameInfo, EmulationSettings::GetOverscanDimensions());
hud.DrawHud(pngBuffer, frameInfo, EmulationSettings::GetOverscanDimensions());
if(!filename.empty()) {
PNGHelper::WritePNG(filename, pngBuffer, frameInfo.Width, frameInfo.Height);

View file

@ -8,7 +8,7 @@
class BaseVideoFilter
{
private:
uint8_t* _outputBuffer = nullptr;
uint32_t* _outputBuffer = nullptr;
uint32_t _bufferSize = 0;
SimpleLock _frameLock;
OverscanDimensions _overscan;
@ -25,7 +25,7 @@ public:
BaseVideoFilter();
virtual ~BaseVideoFilter();
uint8_t* GetOutputBuffer();
uint32_t* GetOutputBuffer();
void SendFrame(uint16_t *ppuOutputBuffer, uint32_t frameNumber);
void TakeScreenshot(VideoFilterType filterType);
void TakeScreenshot(VideoFilterType filterType, string filename, std::stringstream *stream = nullptr);

View file

@ -39,7 +39,7 @@ BisqwitNtscFilter::BisqwitNtscFilter(int resDivider)
break;
}
uint32_t* outputBuffer = (uint32_t*)GetOutputBuffer();
uint32_t* outputBuffer = GetOutputBuffer();
//Adjust outputbuffer to start at the middle of the picture
if(_keepVerticalRes) {
@ -68,7 +68,7 @@ void BisqwitNtscFilter::ApplyFilter(uint16_t *ppuOutputBuffer)
_workDone = false;
_waitWork.Signal();
DecodeFrame(GetOverscan().Top, 120, ppuOutputBuffer, (uint32_t*)GetOutputBuffer(), (IsOddFrame() ? 8 : 0) + GetOverscan().Top*341*8);
DecodeFrame(GetOverscan().Top, 120, ppuOutputBuffer, GetOutputBuffer(), (IsOddFrame() ? 8 : 0) + GetOverscan().Top*341*8);
while(!_workDone) {}
}

View file

@ -75,7 +75,7 @@ void DefaultVideoFilter::DecodePpuBuffer(uint16_t *ppuOutputBuffer, uint32_t* ou
void DefaultVideoFilter::ApplyFilter(uint16_t *ppuOutputBuffer)
{
DecodePpuBuffer(ppuOutputBuffer, (uint32_t*)GetOutputBuffer(), EmulationSettings::GetVideoFilterType() <= VideoFilterType::BisqwitNtsc);
DecodePpuBuffer(ppuOutputBuffer, GetOutputBuffer(), EmulationSettings::GetVideoFilterType() <= VideoFilterType::BisqwitNtsc);
}
void DefaultVideoFilter::RgbToYiq(double r, double g, double b, double &y, double &i, double &q)

View file

@ -51,7 +51,10 @@ struct HdTileKey
{
uint32_t result = 0;
for(size_t i = 0; i < len; i += 4) {
result += *((uint32_t*)key);
uint32_t chunk;
memcpy(&chunk, key, sizeof(uint32_t));
result += chunk;
result = (result << 2) | (result >> 30);
key += 4;
}
@ -290,7 +293,7 @@ struct HdPackTileInfo : public HdTileKey
struct HdPackBitmapInfo
{
vector<uint8_t> PixelData;
vector<uint32_t> PixelData;
uint32_t Width;
uint32_t Height;
};
@ -301,7 +304,7 @@ struct HdBackgroundFileData
uint32_t Width;
uint32_t Height;
vector<uint8_t> PixelData;
vector<uint32_t> PixelData;
};
struct HdBackgroundInfo
@ -314,7 +317,7 @@ struct HdBackgroundInfo
uint32_t* data()
{
return (uint32_t*)Data->PixelData.data();
return Data->PixelData.data();
}
string ToString()

View file

@ -357,12 +357,12 @@ void HdPackBuilder::GetChrBankList(uint32_t *banks)
Console::Resume();
}
void HdPackBuilder::GetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint8_t *rgbBuffer)
void HdPackBuilder::GetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint32_t *rgbBuffer)
{
Console::Pause();
for(uint32_t i = 0; i < 128 * 128 * _instance->_hdData.Scale*_instance->_hdData.Scale; i++) {
((uint32_t*)rgbBuffer)[i] = 0xFFFF00FF;
rgbBuffer[i] = 0xFF666666;
}
auto result = _instance->_tilesByChrBankByPalette.find(bankNumber);

View file

@ -46,5 +46,5 @@ public:
void SaveHdPack();
static void GetChrBankList(uint32_t *banks);
static void GetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint8_t *rgbBuffer);
static void GetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint32_t *rgbBuffer);
};

View file

@ -207,8 +207,13 @@ bool HdPackLoader::ProcessImgTag(string src)
{
HdPackBitmapInfo bitmapInfo;
vector<uint8_t> fileData;
vector<uint8_t> pixelData;
LoadFile(src, fileData);
if(PNGHelper::ReadPNG(fileData, bitmapInfo.PixelData, bitmapInfo.Width, bitmapInfo.Height)) {
if(PNGHelper::ReadPNG(fileData, pixelData, bitmapInfo.Width, bitmapInfo.Height)) {
bitmapInfo.PixelData.resize(pixelData.size() / 4);
memcpy(bitmapInfo.PixelData.data(), pixelData.data(), bitmapInfo.PixelData.size() * sizeof(bitmapInfo.PixelData[0]));
_hdNesBitmaps.push_back(bitmapInfo);
return true;
} else {
@ -513,7 +518,8 @@ void HdPackLoader::ProcessBackgroundTag(vector<string> &tokens, vector<HdPackCon
if(PNGHelper::ReadPNG(fileContent, pixelData, width, height)) {
_data->BackgroundFileData.push_back(unique_ptr<HdBackgroundFileData>(new HdBackgroundFileData()));
bgFileData = _data->BackgroundFileData.back().get();
bgFileData->PixelData = pixelData;
bgFileData->PixelData.resize(pixelData.size() / 4);
memcpy(bgFileData->PixelData.data(), pixelData.data(), bgFileData->PixelData.size() * sizeof(bgFileData->PixelData[0]));
bgFileData->Width = width;
bgFileData->Height = height;
bgFileData->PngName = tokens[0];

View file

@ -35,5 +35,5 @@ void HdVideoFilter::SetHdScreenTiles(HdScreenInfo *hdScreenInfo)
void HdVideoFilter::ApplyFilter(uint16_t *ppuOutputBuffer)
{
OverscanDimensions overscan = GetOverscan();
_hdNesPack->Process(_hdScreenInfo, (uint32_t*)GetOutputBuffer(), overscan);
_hdNesPack->Process(_hdScreenInfo, GetOutputBuffer(), overscan);
}

View file

@ -49,7 +49,10 @@ struct TileKey
{
uint32_t result = 0;
for(size_t i = 0; i < len; i += 4) {
result += *((uint32_t*)key);
uint32_t chunk;
memcpy(&chunk, key, sizeof(uint32_t));
result += chunk;
result = (result << 2) | (result >> 30);
key += 4;
}

View file

@ -23,7 +23,7 @@ protected:
_buffer.push_back(bytes[i]);
}
} else {
value = *((T*)(&_buffer[0] + _position));
memcpy(&value, _buffer.data()+_position, sizeof(T));
_position += sizeof(T);
}
}

View file

@ -90,7 +90,7 @@ void NtscFilter::ApplyFilter(uint16_t *ppuOutputBuffer)
void NtscFilter::GenerateArgbFrame(uint32_t *ntscBuffer)
{
uint32_t* outputBuffer = (uint32_t*)GetOutputBuffer();
uint32_t* outputBuffer = GetOutputBuffer();
OverscanDimensions overscan = GetOverscan();
int overscanLeft = overscan.Left > 0 ? NES_NTSC_OUT_WIDTH(overscan.Left) : 0;
int overscanRight = overscan.Right > 0 ? NES_NTSC_OUT_WIDTH(overscan.Right) : 0;

View file

@ -18,7 +18,7 @@ void RawVideoFilter::ApplyFilter(uint16_t * ppuOutputBuffer)
{
//Do nothing - return 9-bit values (6-bit Palette + 3-bit emphasis)
OverscanDimensions overscan = GetOverscan();
uint32_t* out = (uint32_t*)GetOutputBuffer();
uint32_t* out = GetOutputBuffer();
for(uint32_t i = overscan.Top, iMax = 240 - overscan.Bottom; i < iMax; i++) {
for(uint32_t j = overscan.Left, jMax = 256 - overscan.Right; j < jMax; j++) {
*out = _rawPalette[ppuOutputBuffer[i * 256 + j]];

View file

@ -109,7 +109,7 @@ private:
} else {
if(_inBlock) {
if(_blockPosition + sizeof(T) <= _blockSize) {
value = *((T*)(_blockBuffer + _blockPosition));
memcpy(&value, _blockBuffer + _blockPosition, sizeof(T));
_blockPosition += sizeof(T);
} else {
value = defaultValue;
@ -117,7 +117,7 @@ private:
}
} else {
if(_position + sizeof(T) <= _streamSize) {
value = *((T*)(_stream + _position));
memcpy(&value, _stream + _position, sizeof(T));
_position += sizeof(T);
} else {
value = defaultValue;

View file

@ -114,7 +114,7 @@ void VideoDecoder::DecodeFrame(bool synchronous)
}
_videoFilter->SendFrame(_ppuOutputBuffer, _frameNumber);
uint32_t* outputBuffer = (uint32_t*)_videoFilter->GetOutputBuffer();
uint32_t* outputBuffer = _videoFilter->GetOutputBuffer();
FrameInfo frameInfo = _videoFilter->GetFrameInfo();
if(_rotateFilter) {
@ -128,7 +128,7 @@ void VideoDecoder::DecodeFrame(bool synchronous)
}
if(_hud) {
_hud->DrawHud((uint8_t*)outputBuffer, frameInfo, _videoFilter->GetOverscan());
_hud->DrawHud(outputBuffer, frameInfo, _videoFilter->GetOverscan());
}
ScreenSize screenSize;

View file

@ -8,7 +8,7 @@
#include "Zapper.h"
#include "MovieManager.h"
void VideoHud::DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan)
void VideoHud::DrawHud(uint32_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan)
{
uint32_t displayCount = 0;
InputDisplaySettings settings = EmulationSettings::GetInputDisplaySettings();
@ -25,11 +25,11 @@ void VideoHud::DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimen
DrawMovieIcons(outputBuffer, frameInfo, overscan);
}
bool VideoHud::DisplayControllerInput(ControlDeviceState &state, int inputPort, uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex)
bool VideoHud::DisplayControllerInput(ControlDeviceState &state, int inputPort, uint32_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex)
{
bool axisInverted = (EmulationSettings::GetScreenRotation() % 180) != 0;
int scale = frameInfo.Width / (axisInverted ? overscan.GetScreenHeight() : overscan.GetScreenWidth());
uint32_t* rgbaBuffer = (uint32_t*)outputBuffer;
uint32_t* rgbaBuffer = outputBuffer;
InputDisplaySettings settings = EmulationSettings::GetInputDisplaySettings();
uint32_t yStart, xStart;
@ -108,7 +108,7 @@ bool VideoHud::DisplayControllerInput(ControlDeviceState &state, int inputPort,
return false;
}
void VideoHud::DrawMovieIcons(uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan)
void VideoHud::DrawMovieIcons(uint32_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan)
{
if(EmulationSettings::CheckFlag(EmulationFlags::DisplayMovieIcons) && (MovieManager::Playing() || MovieManager::Recording())) {
InputDisplaySettings settings = EmulationSettings::GetInputDisplaySettings();

View file

@ -13,9 +13,9 @@ private:
static const vector<uint32_t> _recordIcon;
void BlendColors(uint32_t* output, uint32_t input);
bool DisplayControllerInput(ControlDeviceState &state, int inputPort, uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex);
void DrawMovieIcons(uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan);
bool DisplayControllerInput(ControlDeviceState &state, int inputPort, uint32_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex);
void DrawMovieIcons(uint32_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan);
public:
void DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan);
void DrawHud(uint32_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan);
};

View file

@ -574,6 +574,6 @@ namespace InteropEmu {
DllExport void __stdcall HdBuilderStopRecording() { Console::StopRecordingHdPack(); }
DllExport void __stdcall HdBuilderGetChrBankList(uint32_t* bankBuffer) { HdPackBuilder::GetChrBankList(bankBuffer); }
DllExport void __stdcall HdBuilderGetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint8_t *rgbBuffer) { HdPackBuilder::GetBankPreview(bankNumber, pageNumber, rgbBuffer); }
DllExport void __stdcall HdBuilderGetBankPreview(uint32_t bankNumber, uint32_t pageNumber, uint32_t *rgbBuffer) { HdPackBuilder::GetBankPreview(bankNumber, pageNumber, rgbBuffer); }
}
}

View file

@ -73,7 +73,7 @@ bool SdlRenderer::Init()
SDL_SetWindowSize(_sdlWindow, _screenWidth, _screenHeight);
_frameBuffer = new uint8_t[_nesFrameHeight*_nesFrameWidth*_bytesPerPixel];
_frameBuffer = new uint32_t[_nesFrameHeight*_nesFrameWidth];
memset(_frameBuffer, 0, _nesFrameHeight*_nesFrameWidth*_bytesPerPixel);
return true;
@ -165,7 +165,7 @@ void SdlRenderer::Render()
SDL_LockTexture(_sdlTexture, nullptr, (void**)&textureBuffer, &rowPitch);
{
auto frameLock = _frameLock.AcquireSafe();
uint32_t* ppuFrameBuffer = (uint32_t*)_frameBuffer;
uint32_t* ppuFrameBuffer = _frameBuffer;
for(uint32_t i = 0, iMax = _nesFrameHeight; i < iMax; i++) {
memcpy(textureBuffer, ppuFrameBuffer, _nesFrameWidth*_bytesPerPixel);
ppuFrameBuffer += _nesFrameWidth;

View file

@ -35,7 +35,7 @@ private:
SimpleLock _frameLock;
SimpleLock _reinitLock;
uint8_t* _frameBuffer;
uint32_t* _frameBuffer;
const uint32_t _bytesPerPixel = 4;
uint32_t _screenBufferSize = 0;