From Brad Christiansen, "I have added an implementation for set/getVolume in the direct show plug-in."

This commit is contained in:
Robert Osfield
2011-12-23 17:16:06 +00:00
parent f3ce66aa8b
commit 50c7a31d62
2 changed files with 32 additions and 1 deletions

View File

@@ -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;

View File

@@ -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);