Skip to content

Commit

Permalink
use ComPtr for misc. things
Browse files Browse the repository at this point in the history
  • Loading branch information
oltolm committed Sep 27, 2024
1 parent 9208d9d commit afd9693
Show file tree
Hide file tree
Showing 12 changed files with 110 additions and 126 deletions.
2 changes: 2 additions & 0 deletions GPU/Common/Draw2D.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#pragma once

#include "Data/Collections/Slice.h"
#include "GPU/GPU.h"
#include "Common/GPU/Shader.h"
#include "GPU/thin3d.h"

// For framebuffer copies and similar things that just require passthrough.
struct Draw2DVertex {
Expand Down
8 changes: 4 additions & 4 deletions UI/RemoteISOScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.

#include "ppsspp_config.h"
#include <algorithm>
#include <thread>
#include <mutex>

#if PPSSPP_PLATFORM(WINDOWS) && !PPSSPP_PLATFORM(UWP)
#include <initguid.h>
#include "Common/CommonWindows.h"
#include <netfw.h>
#include <wrl/client.h>
#endif

// TODO: For text align flags, probably shouldn't be in gfx_es2/...
Expand Down Expand Up @@ -62,8 +63,8 @@ enum class ServerAllowStatus {

static ServerAllowStatus IsServerAllowed(int port) {
#if PPSSPP_PLATFORM(WINDOWS) && !PPSSPP_PLATFORM(UWP)
INetFwMgr *fwMgr = nullptr;
HRESULT hr = CoCreateInstance(__uuidof(NetFwMgr), nullptr, CLSCTX_INPROC_SERVER, __uuidof(INetFwMgr), (void **)&fwMgr);
Microsoft::WRL::ComPtr<INetFwMgr> fwMgr;
HRESULT hr = CoCreateInstance(__uuidof(NetFwMgr), nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&fwMgr));
if (FAILED(hr)) {
return ServerAllowStatus::UNKNOWN;
}
Expand All @@ -80,7 +81,6 @@ static ServerAllowStatus IsServerAllowed(int port) {
VariantInit(&allowedV);
VariantInit(&restrictedV);
hr = fwMgr->IsPortAllowed(&app[0], NET_FW_IP_VERSION_ANY, port, nullptr, NET_FW_IP_PROTOCOL_TCP, &allowedV, &restrictedV);
fwMgr->Release();

if (FAILED(hr)) {
return ServerAllowStatus::UNKNOWN;
Expand Down
12 changes: 6 additions & 6 deletions Windows/BufferLock.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@

#pragma once

#include "CaptureDevice.h"
#include <wrl/client.h>


//-------------------------------------------------------------------
// VideoBufferLock class
Expand All @@ -27,17 +30,14 @@ class VideoBufferLock
VideoBufferLock(IMFMediaBuffer *pBuffer) : m_p2DBuffer(NULL), m_bLocked(FALSE)
{
m_pBuffer = pBuffer;
m_pBuffer->AddRef();


// Query for the 2-D buffer interface. OK if this fails.
(void)m_pBuffer->QueryInterface(IID_PPV_ARGS(&m_p2DBuffer));
}

~VideoBufferLock()
{
UnlockBuffer();
SafeRelease(&m_pBuffer);
SafeRelease(&m_p2DBuffer);
}

//-------------------------------------------------------------------
Expand Down Expand Up @@ -116,8 +116,8 @@ class VideoBufferLock
}

private:
IMFMediaBuffer *m_pBuffer;
IMF2DBuffer *m_p2DBuffer;
Microsoft::WRL::ComPtr<IMFMediaBuffer> m_pBuffer;
Microsoft::WRL::ComPtr<IMF2DBuffer> m_p2DBuffer;

BOOL m_bLocked;
};
59 changes: 26 additions & 33 deletions Windows/CaptureDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.

#include <shlwapi.h>
#include <wrl/client.h>

#include "Common/Thread/ThreadUtil.h"
#include "CaptureDevice.h"
Expand All @@ -25,6 +26,8 @@
#include "Core/HLE/sceUsbCam.h"
#include "Core/Config.h"

using Microsoft::WRL::ComPtr;

namespace MFAPI {
HINSTANCE Mflib;
HINSTANCE Mfplatlib;
Expand Down Expand Up @@ -142,7 +145,7 @@ HRESULT ReaderCallback::OnReadSample(
LONGLONG llTimestamp,
IMFSample *pSample) {
HRESULT hr = S_OK;
IMFMediaBuffer *pBuffer = nullptr;
ComPtr<IMFMediaBuffer> pBuffer;
std::lock_guard<std::mutex> lock(device->sdMutex);
if (device->isShutDown())
return hr;
Expand Down Expand Up @@ -173,7 +176,7 @@ HRESULT ReaderCallback::OnReadSample(

// pSample can be null, in this case ReadSample still should be called to request next frame.
if (pSample) {
videoBuffer = new VideoBufferLock(pBuffer);
videoBuffer = new VideoBufferLock(pBuffer.Get());
hr = videoBuffer->LockBuffer(device->deviceParam.default_stride, device->deviceParam.height, &pbScanline0, &lStride);

if (lStride > 0)
Expand Down Expand Up @@ -278,7 +281,6 @@ HRESULT ReaderCallback::OnReadSample(
}
}

SafeRelease(&pBuffer);
return hr;
}

Expand Down Expand Up @@ -522,18 +524,15 @@ bool WindowsCaptureDevice::init() {

bool WindowsCaptureDevice::start(void *startParam) {
HRESULT hr = S_OK;
IMFAttributes *pAttributes = nullptr;
IMFMediaType *pType = nullptr;
ComPtr<IMFAttributes> pAttributes;
ComPtr<IMFMediaType> pType;
UINT32 selection = 0;
UINT32 count = 0;

// Release old sources first(if any).
SafeRelease(&m_pSource);
SafeRelease(&m_pReader);
if (m_pCallback) {
delete m_pCallback;
m_pCallback = nullptr;
}
m_pSource = nullptr;
m_pReader = nullptr;
m_pCallback = nullptr;
// Need to re-enumerate the list,because old sources were released.
std::vector<std::string> deviceList = getDeviceList(true);

Expand All @@ -555,25 +554,24 @@ bool WindowsCaptureDevice::start(void *startParam) {
}
++count;
}
setSelction(selection);
setSelection(selection);
hr = param.ppDevices[param.selection]->ActivateObject(
__uuidof(IMFMediaSource),
(void**)&m_pSource);
IID_PPV_ARGS(&m_pSource));

if (SUCCEEDED(hr))
hr = MFCreateAttributes(&pAttributes, 2);

// Use async mode
if (SUCCEEDED(hr))
hr = pAttributes->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK, m_pCallback);
hr = pAttributes->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK, m_pCallback.Get());

if (SUCCEEDED(hr))
hr = pAttributes->SetUINT32(MF_READWRITE_DISABLE_CONVERTERS, TRUE);

if (SUCCEEDED(hr)) {
hr = CreateSourceReaderFromMediaSource(
m_pSource,
pAttributes,
m_pSource.Get(),
pAttributes.Get(),
&m_pReader
);
}
Expand Down Expand Up @@ -609,7 +607,7 @@ bool WindowsCaptureDevice::start(void *startParam) {

if (FAILED(hr)) { break; }

hr = setDeviceParam(pType);
hr = setDeviceParam(pType.Get());

if (SUCCEEDED(hr))
break;
Expand Down Expand Up @@ -654,7 +652,7 @@ bool WindowsCaptureDevice::start(void *startParam) {

if (FAILED(hr)) { break; }

hr = setDeviceParam(pType);
hr = setDeviceParam(pType.Get());

if (SUCCEEDED(hr))
break;
Expand All @@ -679,15 +677,11 @@ bool WindowsCaptureDevice::start(void *startParam) {
setError(CAPTUREDEVIDE_ERROR_START_FAILED, "Cannot start");
if(m_pSource)
m_pSource->Shutdown();
SafeRelease(&m_pSource);
SafeRelease(&pAttributes);
SafeRelease(&pType);
SafeRelease(&m_pReader);
m_pSource = nullptr;
m_pReader = nullptr;
return false;
}

SafeRelease(&pAttributes);
SafeRelease(&pType);
updateState(CAPTUREDEVIDE_STATE::STARTED);
break;
case CAPTUREDEVIDE_STATE::LOST:
Expand Down Expand Up @@ -751,13 +745,13 @@ std::vector<std::string> WindowsCaptureDevice::getDeviceList(bool forceEnum, int

if (SUCCEEDED(hr)) {
// Get the size needed first
dwMinSize = WideCharToMultiByte(CP_UTF8, NULL, pwstrName, -1, nullptr, 0, nullptr, FALSE);
dwMinSize = WideCharToMultiByte(CP_UTF8, 0, pwstrName, -1, nullptr, 0, nullptr, FALSE);
if (dwMinSize == 0)
hr = E_FAIL;
}
if (SUCCEEDED(hr)) {
cstrName = new char[dwMinSize];
WideCharToMultiByte(CP_UTF8, NULL, pwstrName, -1, cstrName, dwMinSize, NULL, FALSE);
WideCharToMultiByte(CP_UTF8, 0, pwstrName, -1, cstrName, dwMinSize, NULL, FALSE);
strName = cstrName;
delete[] cstrName;

Expand Down Expand Up @@ -937,9 +931,9 @@ void WindowsCaptureDevice::messageHandler() {
stop();

std::lock_guard<std::mutex> lock(sdMutex);
SafeRelease(&m_pSource);
SafeRelease(&m_pReader);
delete m_pCallback;
m_pSource = nullptr;
m_pReader = nullptr;
m_pCallback = nullptr;
unRegisterCMPTMFApis();

std::unique_lock<std::mutex> lock2(paramMutex);
Expand All @@ -957,7 +951,7 @@ void WindowsCaptureDevice::messageHandler() {

HRESULT WindowsCaptureDevice::enumDevices() {
HRESULT hr = S_OK;
IMFAttributes *pAttributes = nullptr;
ComPtr<IMFAttributes> pAttributes;

hr = MFCreateAttributes(&pAttributes, 1);
if (SUCCEEDED(hr)) {
Expand All @@ -982,10 +976,9 @@ HRESULT WindowsCaptureDevice::enumDevices() {
}
}
if (SUCCEEDED(hr)) {
hr = EnumDeviceSources(pAttributes, &param.ppDevices, &param.count);
hr = EnumDeviceSources(pAttributes.Get(), &param.ppDevices, &param.count);
}

SafeRelease(&pAttributes);
return hr;
}

Expand Down
9 changes: 5 additions & 4 deletions Windows/CaptureDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <vector>
#include <queue>
#include <thread>
#include <wrl/client.h>

#include "Core/HLE/sceUsbMic.h"

Expand Down Expand Up @@ -193,7 +194,7 @@ class WindowsCaptureDevice {
std::vector<std::string> getDeviceList(bool forceEnum = false, int *pActuallCount = nullptr);

void setError(const CAPTUREDEVIDE_ERROR &newError, const std::string &newErrorMessage) { error = newError; errorMessage = newErrorMessage; }
void setSelction(const UINT32 &selection) { param.selection = selection; }
void setSelection(const UINT32 &selection) { param.selection = selection; }
HRESULT setDeviceParam(IMFMediaType *pType);

bool isShutDown() const { return state == CAPTUREDEVIDE_STATE::SHUTDOWN; }
Expand Down Expand Up @@ -226,9 +227,9 @@ class WindowsCaptureDevice {
bool isDeviceChanged = false;

// MF interface.
ReaderCallback *m_pCallback = nullptr;
IMFSourceReader *m_pReader = nullptr;
IMFMediaSource *m_pSource = nullptr;
Microsoft::WRL::ComPtr<ReaderCallback> m_pCallback;
Microsoft::WRL::ComPtr<IMFSourceReader> m_pReader;
Microsoft::WRL::ComPtr<IMFMediaSource> m_pSource;

// Message loop.
std::mutex mutex;
Expand Down
11 changes: 5 additions & 6 deletions Windows/DSoundStream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,22 +78,21 @@ bool DSoundAudioBackend::CreateBuffer() {
dsBuffer_->SetCurrentPosition(0);
return true;
} else {
dsBuffer_ = NULL;
dsBuffer_ = nullptr;
return false;
}
}

int DSoundAudioBackend::RunThread() {
if (FAILED(DirectSoundCreate8(0, &ds_, 0))) {
ds_ = NULL;
ds_ = nullptr;
threadData_ = 2;
return 1;
}

ds_->SetCooperativeLevel(window_, DSSCL_PRIORITY);
if (!CreateBuffer()) {
ds_->Release();
ds_ = NULL;
ds_ = nullptr;
threadData_ = 2;
return 1;
}
Expand Down Expand Up @@ -141,8 +140,8 @@ int DSoundAudioBackend::RunThread() {
}
dsBuffer_->Stop();

dsBuffer_->Release();
ds_->Release();
dsBuffer_ = nullptr;
ds_ = nullptr;

threadData_ = 2;
return 0;
Expand Down
9 changes: 4 additions & 5 deletions Windows/DSoundStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@

#include "WindowsAudio.h"
#include <mmreg.h>

struct IDirectSound8;
struct IDirectSoundBuffer;
#include <dsound.h>
#include <wrl/client.h>

class DSoundAudioBackend : public WindowsAudioBackend {
public:
Expand All @@ -29,8 +28,8 @@ class DSoundAudioBackend : public WindowsAudioBackend {

StreamCallback callback_;

IDirectSound8 *ds_ = nullptr;
IDirectSoundBuffer *dsBuffer_ = nullptr;
Microsoft::WRL::ComPtr<IDirectSound8> ds_;
Microsoft::WRL::ComPtr<IDirectSoundBuffer> dsBuffer_;

int bufferSize_ = 0; // bytes
int totalRenderedBytes_ = 0;
Expand Down
Loading

0 comments on commit afd9693

Please sign in to comment.