Skip to content

Commit

Permalink
Merge pull request #227 from MediaPortal/MP1-5178-MPAudioswitcher_con…
Browse files Browse the repository at this point in the history
…nection&switching_issues

MP1-5178: MP Audioswitcher connection & switching issues
  • Loading branch information
andrewjswan authored Nov 13, 2023
2 parents ab977d8 + bd29fd3 commit 7a66db0
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 6 deletions.
4 changes: 4 additions & 0 deletions DirectShowFilters/MPAudioswitcher/MPAudioSwitcher.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@
<None Include="source\AudioSwitcher.def" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="source\resource.h" />
<ClInclude Include="source\Audio.h" />
<ClInclude Include="source\AudioSwitcher.h" />
<ClInclude Include="source\FilterApp.h" />
Expand All @@ -278,6 +279,9 @@
<Project>{c2082189-3ecb-4079-91fa-89d3c8a305c0}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="source\MPAudioSwitcher.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
<ProjectExtensions>
Expand Down
100 changes: 100 additions & 0 deletions DirectShowFilters/MPAudioswitcher/source/MPAudioSwitcher.rc
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Czech (Czech Republic) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
#pragma code_page(1250)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END

3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END

#endif // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,1,0
PRODUCTVERSION 1,0,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Team MediaPortal"
VALUE "FileDescription", "MediaPortal Audio Switcher"
VALUE "FileVersion", "1.0.1.0"
VALUE "InternalName", "MPAudioSwitcher"
VALUE "LegalCopyright", "Copyright � Team MediaPortal 2005-2023"
VALUE "OriginalFilename", "MPAudioSwitcher.ax"
VALUE "ProductName", "MPAudioSwitcher"
VALUE "ProductVersion", "1.0.1.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

#endif // Czech (Czech Republic) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

44 changes: 38 additions & 6 deletions DirectShowFilters/MPAudioswitcher/source/StreamSwitcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ CStreamSwitcherInputPin::CStreamSwitcherInputPin(CStreamSwitcherFilter* pFilter,
, m_bSampleSkipped(FALSE)
, m_bQualityChanged(FALSE)
, m_bUsingOwnAllocator(FALSE)
, m_bSampleSetMedia(FALSE)
, m_evBlock(TRUE)
, m_fCanBlock(false)
, m_hNotifyEvent(NULL)
Expand Down Expand Up @@ -760,6 +761,8 @@ STDMETHODIMP CStreamSwitcherInputPin::Receive(IMediaSample* pSample)
((CStreamSwitcherFilter*)m_pFilter)->OnNewOutputMediaType(m_mt, mtOut);
pOutSample->SetMediaType(&mtOut);
}
else if (m_bSampleSetMedia)
pOutSample->SetMediaType(&mtOut);

// Transform

Expand All @@ -770,7 +773,22 @@ STDMETHODIMP CStreamSwitcherInputPin::Receive(IMediaSample* pSample)
if(S_OK == hr)
{
hr = pOut->Deliver(pOutSample);
m_bSampleSkipped = FALSE;
if (FAILED(hr))
{
//sample was not delivered (usually becouse of flushing)
if (fTypeChanged)
{
//next sample must carry the mediatype and AM_SAMPLE_TYPECHANGED flag set
m_bSampleSetMedia = TRUE;
}

m_bSampleSkipped = TRUE;
}
else
{
m_bSampleSetMedia = FALSE;
m_bSampleSkipped = FALSE;
}
/*
if(FAILED(hr))
{
Expand Down Expand Up @@ -900,17 +918,31 @@ HRESULT CStreamSwitcherOutputPin::DecideBufferSize(IMemAllocator* pAllocator, AL

// virtual

[uuid("AEFA5024-215A-4FC7-97A4-1043C86FD0B8")]
class MatrixMixer {};
DEFINE_GUID(CLSID_MatrixMixer,
0xAEFA5024, 0x215A, 0x4FC7, 0x97, 0xA4, 0x10, 0x43, 0xC8, 0x6F, 0xD0, 0xB8);

DEFINE_GUID(CLSID_MPAudioRenderer,
0xEC9ED6FC, 0x7B03, 0x4CB6, 0x8C, 0x01, 0x4E, 0xAB, 0xE1, 0x09, 0xF2, 0x6B);

HRESULT CStreamSwitcherOutputPin::CheckConnect(IPin* pPin)
{
CComPtr<IBaseFilter> pBF = GetFilterFromPin(pPin);
CLSID clsid;
bool bAccept = false;

if (pBF)
{
bAccept = IsAudioWaveRenderer(pBF);
if (!bAccept)
{
clsid = GUID_NULL;
pBF->GetClassID(&clsid);
bAccept = clsid == CLSID_MPAudioRenderer || clsid == CLSID_MatrixMixer;
}
}

return
IsAudioWaveRenderer(pBF) || GetCLSID(pBF) == __uuidof(MatrixMixer)
? __super::CheckConnect(pPin)
: E_FAIL;
bAccept ? __super::CheckConnect(pPin) : E_FAIL;

// return CComQIPtr<IPinConnection>(pPin) ? CBaseOutputPin::CheckConnect(pPin) : E_NOINTERFACE;
// return CBaseOutputPin::CheckConnect(pPin);
Expand Down
1 change: 1 addition & 0 deletions DirectShowFilters/MPAudioswitcher/source/StreamSwitcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ class CStreamSwitcherInputPin : public CBaseInputPin, public IPinConnection, pub
BOOL m_bSampleSkipped;
BOOL m_bQualityChanged;
BOOL m_bUsingOwnAllocator;
BOOL m_bSampleSetMedia;

CAMEvent m_evBlock;
bool m_fCanBlock;
Expand Down
14 changes: 14 additions & 0 deletions DirectShowFilters/MPAudioswitcher/source/resource.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by MPAudioSwitcher.rc

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

0 comments on commit 7a66db0

Please sign in to comment.