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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#include "DSTrackSelector.h"
#include "main.h"
#include "CWAAudioRenderer.h"
#include "../Agave/Language/api_language.h"
#include "resource.h"
int DSTrackSelector::getNumAudioTracks()
{
if (nullfilter)
return nullfilter->GetConnectedInputsCount();
return 1;
}
void DSTrackSelector::enumAudioTrackName(int n, char *buf, int size)
{
char t[256] = {0};
StringCchPrintfA(t, 256, WASABI_API_LNGSTRING(IDS_TRACK_X), n);
int l = min(size, 255);
lstrcpynA((char *)buf, t, l);
}
int DSTrackSelector::getCurAudioTrack()
{
if (nullfilter)
return nullfilter->GetSelectedInput();
return 0;
}
int DSTrackSelector::getNumVideoTracks()
{
return 1;
}
void DSTrackSelector::enumVideoTrackName(int n, char *buf, int size)
{
WASABI_API_LNGSTRING_BUF(IDS_TRACK_1,buf,min(7, size));
}
int DSTrackSelector::getCurVideoTrack()
{
return 0;
}
void DSTrackSelector::setAudioTrack(int n)
{
if (nullfilter)
{
CComPtr<IMediaPosition> pMediaPosition = NULL;
pGraphBuilder->QueryInterface(IID_IMediaPosition, (void **)&pMediaPosition);
pMediaControl->Pause();
REFTIME pos;
pMediaPosition->get_CurrentPosition(&pos);
nullfilter->SetSelectedInput(n);
{
CMediaType *mt = nullfilter->GetAcceptedType();
if (mt->subtype != MEDIASUBTYPE_PCM)
has_audio = NULL;
else
{
WAVEFORMATEX *pHeader = (WAVEFORMATEX*)mt->pbFormat;
// reget this cause this is the real UNCOMPRESSED format
audio_bps = pHeader->wBitsPerSample;
audio_srate = pHeader->nSamplesPerSec;
audio_nch = pHeader->nChannels;
if (audio_bps == 32 || audio_bps == 64)
{
m_float = 1;
m_src_bps = audio_bps;
audio_bps = 16; //TODO: read bits from AGAVE_API_CONFIG :)
}
}
mod.outMod->Close();
int maxlat = mod.outMod->Open(audio_srate, audio_nch, audio_bps, -1, -1);
if (maxlat < 0)
{
releaseObjects();
return ;
}
mod.SetInfo(m_bitrate, audio_srate / 1000, audio_nch, 1);
mod.SAVSAInit(maxlat, audio_srate);
mod.VSASetInfo(audio_srate, audio_nch);
mod.outMod->SetVolume( -666);
}
pMediaPosition->put_CurrentPosition(pos);
pMediaControl->Run();
}
}
void DSTrackSelector::setVideoTrack(int n){}
|