mirror of
https://github.com/SourMesen/Mesen.git
synced 2024-06-02 11:28:17 -04:00
Fixed some cast-align warnings (potential fix for Android crash?)
This commit is contained in:
parent
451c49ab7a
commit
3e6f10757c
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
};
|
|
@ -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];
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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); }
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -35,7 +35,7 @@ private:
|
|||
|
||||
SimpleLock _frameLock;
|
||||
SimpleLock _reinitLock;
|
||||
uint8_t* _frameBuffer;
|
||||
uint32_t* _frameBuffer;
|
||||
|
||||
const uint32_t _bytesPerPixel = 4;
|
||||
uint32_t _screenBufferSize = 0;
|
||||
|
|
Loading…
Reference in a new issue