Skip to content

Commit f3f6b66

Browse files
committed
AviSynth+: добавлена поддержка раскладки каналов.
1 parent b472955 commit f3f6b66

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

Source/AviSynthStream.cpp

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)