aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_wmvdrm/AudioFormat.cpp
blob: 7af75b246349229db1a265699f420d6ed4509eea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "main.h"
#include "AudioLayer.h"

unsigned long AudioFormat::AudioSamplesToMilliseconds(unsigned long samples)
{
	return MulDiv(samples, 1000, SampleRate());
}

unsigned long AudioFormat::AudioBytesToMilliseconds(unsigned long bytes)
{
	return MulDiv(AudioBytesToSamples(bytes), 1000, SampleRate());
}

unsigned long AudioFormat::AudioMillisecondsToBytes(DWORD milliseconds)
{
	return AudioSamplesToBytes(MulDiv(milliseconds, SampleRate(), 1000));
}

unsigned long AudioFormat::AudioDurationToBytes(QWORD duration)
{
	// TODO: potential integer overflow
	return AudioSamplesToBytes(MulDiv((int)duration, SampleRate(), 1000*10000));
}

unsigned long AudioFormat::AudioBytesToSamples(unsigned long bytes)
{
	return bytes / waveFormat->Format.nBlockAlign;
}

unsigned long AudioFormat::AudioSamplesToBytes(unsigned long samples)
{
	return samples * waveFormat->Format.nBlockAlign;
}

long AudioFormat::Channels()
{
	return waveFormat->Format.nChannels;
}

long AudioFormat::ValidBits()
{
	if (waveFormat->Format.wFormatTag == WAVE_FORMAT_PCM)
	{
		return waveFormat->Format.wBitsPerSample;
	}
	if (waveFormat->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE)
	{
		return waveFormat->Samples.wValidBitsPerSample;
	}
	return 0;
}

long AudioFormat::BitSize()
{
	return waveFormat->Format.wBitsPerSample;
}

long AudioFormat::SampleRate()
{
	return waveFormat->Format.nSamplesPerSec;
}