diff --git a/include/osg/ImageStream b/include/osg/ImageStream index 4b4a6d593..3f339cdf1 100644 --- a/include/osg/ImageStream +++ b/include/osg/ImageStream @@ -79,6 +79,7 @@ class OSG_EXPORT ImageStream : public Image virtual double getCreationTime() const { return HUGE_VAL; } virtual double getLength() const { return 0.0; } virtual double getFrameRate() const { return 0.0; } + virtual double getCurrentTime() const { return 0.0; } virtual void setReferenceTime(double) {} virtual double getReferenceTime() const { return 0.0; } diff --git a/src/osgPlugins/directshow/DirectShowTexture b/src/osgPlugins/directshow/DirectShowTexture index 9d57bd861..3fc5be65d 100644 --- a/src/osgPlugins/directshow/DirectShowTexture +++ b/src/osgPlugins/directshow/DirectShowTexture @@ -58,6 +58,7 @@ public: void rewind(); osg::ImageStream::StreamStatus getStatus(); void seek(double time); + double getCurrentTime() const; double getLength() const; double getFrameRate() const; void setTimeMultiplier(double rate); diff --git a/src/osgPlugins/directshow/DirectShowTexture.cpp b/src/osgPlugins/directshow/DirectShowTexture.cpp index 197c2732d..50b888b94 100644 --- a/src/osgPlugins/directshow/DirectShowTexture.cpp +++ b/src/osgPlugins/directshow/DirectShowTexture.cpp @@ -1809,6 +1809,29 @@ void DirectShowImageStream::seek(double time) } } + +double DirectShowImageStream::getCurrentTime() const +{ + OpenThreads::ScopedLock lock(_mutex); + double currentTime = -1; + if (_renderer.valid() && _renderer->_mediaSeeking) + { + + LONGLONG curTimeLL = 0; + HRESULT hr = _renderer->_mediaSeeking->GetCurrentPosition(&curTimeLL); + if (FAILED(hr)) + { + OSG_NOTICE << this << " " << getErrorMessage(hr) << std::endl; + } + else + { + currentTime = static_cast(curTimeLL); + currentTime = currentTime * (100.0 * 1e-9); // default unit in directshow IMediaSeeking + } + } + return currentTime; +} + void DirectShowImageStream::setOptions(const Options& map) { for (Options::const_iterator it = map.begin(); it != map.end(); it++) diff --git a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp index 89984628c..915907b66 100644 --- a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp +++ b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp @@ -179,6 +179,11 @@ double FFmpegImageStream::getReferenceTime () const return m_decoder->reference(); } +double FFmpegImageStream::getCurrentTime() const +{ + return m_decoder->reference(); +} + double FFmpegImageStream::getFrameRate() const diff --git a/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp b/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp index 11cb332b7..9c0ace976 100644 --- a/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp +++ b/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp @@ -41,6 +41,7 @@ namespace osgFFmpeg virtual double getCreationTime() const; virtual double getLength() const; virtual double getReferenceTime () const; + virtual double getCurrentTime() const; virtual double getFrameRate() const; virtual bool isImageTranslucent() const;