Skip to content

Commit

Permalink
Media Foundation: Fix initialization and compile warning.
Browse files Browse the repository at this point in the history
  • Loading branch information
MikuAuahDark committed Jul 28, 2024
1 parent ccbbef1 commit d13c840
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
24 changes: 14 additions & 10 deletions src/nav_backend_mediafoundation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -482,9 +482,8 @@ MediaFoundationState::MediaFoundationState(MediaFoundationBackend *backend, nav_

if (!failed)
{
nav_audioformat audioformat = (bps & 0xFF) | ((bps > 8) << 15);
streamInfo.type = NAV_STREAMTYPE_AUDIO;
streamInfo.audio.format = audioformat;
streamInfo.audio.format = makeAudioFormat(bps, false, bps > 8);
}
}
}
Expand Down Expand Up @@ -607,7 +606,7 @@ bool MediaFoundationState::isStreamEnabled(size_t index) noexcept
return false;
}

if (FAILED(mfSourceReader->GetStreamSelection((size_t) index, &enabled)))
if (FAILED(mfSourceReader->GetStreamSelection((DWORD) index, &enabled)))
{
nav::error::set("IMFSourceReader::GetStreamSelection failed");
return false;
Expand All @@ -624,7 +623,7 @@ bool MediaFoundationState::setStreamEnabled(size_t index, bool enabled)
return false;
}

if (FAILED(mfSourceReader->SetStreamSelection((size_t) index, (BOOL) enabled)))
if (FAILED(mfSourceReader->SetStreamSelection((DWORD) index, (BOOL) enabled)))
{
nav::error::set("IMFSourceReader::SetStreamSelection failed");
return false;
Expand All @@ -636,7 +635,6 @@ bool MediaFoundationState::setStreamEnabled(size_t index, bool enabled)
double MediaFoundationState::getDuration() noexcept
{
WrappedPropVariant pvar;
int64_t duration;

if (FAILED(mfSourceReader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, &pvar)))
return -1.0;
Expand Down Expand Up @@ -797,6 +795,7 @@ nav_frame_t *MediaFoundationState::decode2D(ComPtr<IMF2DBuffer> &buf2d, size_t s
MediaFoundationBackend::MediaFoundationBackend()
: mfplat("mfplat.dll")
, mfreadwrite("mfreadwrite.dll")
, callCoUninitialize(true)
, MFStartup(nullptr)
, MFShutdown(nullptr)
, MFCreateMediaType(nullptr)
Expand All @@ -812,20 +811,25 @@ MediaFoundationBackend::MediaFoundationBackend()
)
throw std::runtime_error("cannot load MediaFoundation function pointer");

if (FAILED(CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE)))
HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
if (FAILED(hr) && hr != RPC_E_CHANGED_MODE)
throw std::runtime_error("CoInitializeEx failed");

callCoUninitialize = SUCCEEDED(hr) || hr == RPC_E_CHANGED_MODE;

if (FAILED(MFStartup(MF_VERSION, MFSTARTUP_NOSOCKET)))
{
CoUninitialize();
if (callCoUninitialize)
CoUninitialize();
throw std::runtime_error("MFStartup failed");
}
}

MediaFoundationBackend::~MediaFoundationBackend()
{
MFShutdown();
CoUninitialize();
if (callCoUninitialize)
CoUninitialize();
}

State *MediaFoundationBackend::open(nav_input *input, const char *filename)
Expand All @@ -837,7 +841,7 @@ State *MediaFoundationBackend::open(nav_input *input, const char *filename)

if (FAILED(MFCreateMFByteStreamOnStream(istream.get(), byteStream.dptr())))
throw std::runtime_error("MFCreateMFByteStreamOnStream failed");

if (filename)
{
// Try set the filename
Expand Down Expand Up @@ -879,7 +883,7 @@ Backend *create()
{
return new MediaFoundationBackend();
}
catch(const std::exception& e)
catch(const std::exception&)
{
return nullptr;
}
Expand Down
1 change: 1 addition & 0 deletions src/nav_backend_mediafoundation_internal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ class MediaFoundationBackend: public Backend
MediaFoundationBackend();

DynLib mfplat, mfreadwrite;
bool callCoUninitialize;

public:
#define _NAV_PROXY_FUNCTION_POINTER(n) decltype(n) *n
Expand Down

0 comments on commit d13c840

Please sign in to comment.