From Brad Christiansen, "I have added an implementation for set/getVolume in the direct show plug-in."
This commit is contained in:
@@ -65,6 +65,8 @@ public:
|
||||
double getTimeMultiplier() const;
|
||||
void quit(bool /*waitForThreadToExit*/ = true);
|
||||
void stop();
|
||||
void setVolume(float);
|
||||
float getVolume() const;
|
||||
};
|
||||
|
||||
|
||||
@@ -76,8 +78,9 @@ class CTextureRenderer : public CBaseVideoRenderer, public osg::Referenced
|
||||
public:
|
||||
IGraphBuilder* _graphBuilder; // GraphBuilder
|
||||
IMediaControl* _mediaControl; // Media Control
|
||||
IMediaSeeking* _mediaSeeking; // Media seeking
|
||||
IMediaSeeking* _mediaSeeking; // Media seeking
|
||||
IMediaEvent* _mediaEvent; // Media Event
|
||||
IBasicAudio* _basicAudio;
|
||||
IBaseFilter* _videoCaptureDevice;
|
||||
IBaseFilter* _fileSource;
|
||||
IBaseFilter* _soundOutputDevice;
|
||||
|
||||
@@ -806,6 +806,11 @@ bool CTextureRenderer::initBuildGraph()
|
||||
hr = _graphBuilder->AddFilter((IBaseFilter*)this, L"Sampler");
|
||||
if (!checkError(prefixForMessage, hr))
|
||||
return false;
|
||||
|
||||
|
||||
hr = _graphBuilder->QueryInterface( IID_IBasicAudio, (void **)&_basicAudio);
|
||||
checkError(prefixForMessage, hr); //May be no sound so dont effect return result
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1104,6 +1109,7 @@ bool CTextureRenderer::setupOutputSoundDevice(ICreateDevEnum* devs)
|
||||
if (_soundOutputDevice) _soundOutputDevice->Release(); _soundOutputDevice = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1545,6 +1551,7 @@ void CTextureRenderer::releaseRessources()
|
||||
if (_mediaControl) _mediaControl->Release(); _mediaControl = 0;
|
||||
if (_mediaEvent) _mediaEvent->Release(); _mediaEvent = 0;
|
||||
if (_mediaSeeking) _mediaSeeking->Release(); _mediaSeeking = 0;
|
||||
if (_basicAudio) _basicAudio->Release(); _basicAudio = 0;
|
||||
// remove filter outside because this is a filter too.
|
||||
}
|
||||
|
||||
@@ -1578,6 +1585,7 @@ CTextureRenderer::CTextureRenderer( DirectShowImageStream* is, HRESULT* valid)
|
||||
_videoCaptureDevice = 0;
|
||||
_soundOutputDevice = 0;
|
||||
_soundCaptureDevice = 0;
|
||||
_basicAudio = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1882,6 +1890,26 @@ double DirectShowImageStream::getTimeMultiplier() const
|
||||
return rate;
|
||||
}
|
||||
|
||||
void DirectShowImageStream::setVolume(float vol) {
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
|
||||
if (_renderer.valid() && _renderer->_basicAudio)
|
||||
{
|
||||
_renderer->_basicAudio->put_Volume(vol);
|
||||
}
|
||||
}
|
||||
|
||||
float DirectShowImageStream::getVolume() const {
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
|
||||
double vol = 0;
|
||||
if (_renderer.valid() && _renderer->_basicAudio)
|
||||
{
|
||||
long d = 0;
|
||||
_renderer->_basicAudio->get_Volume(&d);
|
||||
vol = static_cast<double>(d);
|
||||
}
|
||||
return vol;
|
||||
}
|
||||
|
||||
void DirectShowImageStream::stop()
|
||||
{
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
|
||||
|
||||
Reference in New Issue
Block a user