@@ -669,14 +669,39 @@ CAviSynthAudioStream::CAviSynthAudioStream(CAviSynthFile* pAviSynthFile, CSource
669669 m_mt.SetTemporalCompression (FALSE );
670670 m_mt.SetSampleSize (m_BytesPerSample);
671671
672- WAVEFORMATEX* wfe = (WAVEFORMATEX*)m_mt.AllocFormatBuffer (sizeof (WAVEFORMATEX));
673- wfe->wFormatTag = wFormatTag;
674- wfe->nChannels = m_Channels;
675- wfe->nSamplesPerSec = m_SampleRate;
676- wfe->nAvgBytesPerSec = m_BytesPerSample * m_SampleRate;
677- wfe->nBlockAlign = m_BytesPerSample;
678- wfe->wBitsPerSample = m_BitDepth;
679- wfe->cbSize = 0 ;
672+ bool has_at_least_v10 = true ;
673+ try {
674+ m_pAviSynthFile->m_ScriptEnvironment ->CheckVersion (10 );
675+ }
676+ catch (const AvisynthError&) {
677+ has_at_least_v10 = false ;
678+ }
679+
680+ UINT channelLayout = has_at_least_v10 ? VInfo.GetChannelMask () : 0 ;
681+
682+ if (channelLayout) {
683+ WAVEFORMATEXTENSIBLE* wfex = (WAVEFORMATEXTENSIBLE*)m_mt.AllocFormatBuffer (sizeof (WAVEFORMATEXTENSIBLE));
684+ wfex->Format .wFormatTag = WAVE_FORMAT_EXTENSIBLE;
685+ wfex->Format .nChannels = m_Channels;
686+ wfex->Format .nSamplesPerSec = m_SampleRate;
687+ wfex->Format .nAvgBytesPerSec = m_BytesPerSample * m_SampleRate;
688+ wfex->Format .nBlockAlign = m_BytesPerSample;
689+ wfex->Format .wBitsPerSample = m_BitDepth;
690+ wfex->Format .cbSize = sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX); // 22
691+ wfex->Samples .wValidBitsPerSample = m_BitDepth;
692+ wfex->dwChannelMask = channelLayout;
693+ wfex->SubFormat = m_Subtype;
694+ }
695+ else {
696+ WAVEFORMATEX* wfe = (WAVEFORMATEX*)m_mt.AllocFormatBuffer (sizeof (WAVEFORMATEX));
697+ wfe->wFormatTag = wFormatTag;
698+ wfe->nChannels = m_Channels;
699+ wfe->nSamplesPerSec = m_SampleRate;
700+ wfe->nAvgBytesPerSec = m_BytesPerSample * m_SampleRate;
701+ wfe->nBlockAlign = m_BytesPerSample;
702+ wfe->wBitsPerSample = m_BitDepth;
703+ wfe->cbSize = 0 ;
704+ }
680705
681706 m_StreamInfo = std::format (L" Audio stream: {} channels, {} Hz, " , m_Channels, m_SampleRate);
682707 switch (m_SampleType) {
0 commit comments