--- src/osgPlugins/ffmpeg/FFmpegDecoder.hpp.orig 2022-12-01 18:17:31 UTC +++ src/osgPlugins/ffmpeg/FFmpegDecoder.hpp @@ -1,4 +1,3 @@ - #ifndef HEADER_GUARD_OSGFFMPEG_FFMPEG_DECODER_H #define HEADER_GUARD_OSGFFMPEG_FFMPEG_DECODER_H @@ -7,73 +6,76 @@ #include - namespace osgFFmpeg { class FFmpegParameters; class FormatContextPtr { - public: - - typedef AVFormatContext T; - - explicit FormatContextPtr() : _ptr(0) {} - explicit FormatContextPtr(T* ptr) : _ptr(ptr) {} - - ~FormatContextPtr() - { - cleanup(); - } - - T* get() { return _ptr; } +public: + typedef AVFormatContext T; - operator bool() const { return _ptr != 0; } + explicit FormatContextPtr() : _ptr(nullptr) {} + explicit FormatContextPtr(T* ptr) : _ptr(ptr) {} - T * operator-> () const // never throws - { - return _ptr; - } + ~FormatContextPtr() + { + cleanup(); + } - void reset(T* ptr) - { - if (ptr==_ptr) return; - cleanup(); - _ptr = ptr; - } + T* get() const { return _ptr; } + T** getPtr() { return &_ptr; } - void cleanup() + operator T*() const { return _ptr; } + + FormatContextPtr& operator=(T* ptr) + { + reset(ptr); + return *this; + } + + bool operator==(std::nullptr_t) const { return _ptr == nullptr; } + bool operator!=(std::nullptr_t) const { return _ptr != nullptr; } + + T* operator->() const // never throws + { + return _ptr; + } + + void reset(T* ptr) + { + if (ptr == _ptr) return; + cleanup(); + _ptr = ptr; + } + + void cleanup() + { + if (_ptr) { - if (_ptr) - { #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 17, 0) - OSG_NOTICE<<"Calling avformat_close_input("<<&_ptr<<")"<start_time; - else return HUGE_VAL; + if (m_format_context) return m_format_context->start_time; + else return HUGE_VAL; } inline double FFmpegDecoder::duration() const @@ -165,37 +161,30 @@ inline double FFmpegDecoder::reference() inline double FFmpegDecoder::reference() { - return m_clocks.getCurrentTime(); + return m_clocks.getCurrentTime(); } - -inline FFmpegDecoderAudio & FFmpegDecoder::audio_decoder() +inline FFmpegDecoderAudio& FFmpegDecoder::audio_decoder() { return m_audio_decoder; } - -inline FFmpegDecoderVideo & FFmpegDecoder::video_decoder() +inline FFmpegDecoderVideo& FFmpegDecoder::video_decoder() { return m_video_decoder; } - -inline FFmpegDecoderAudio const & FFmpegDecoder::audio_decoder() const +inline FFmpegDecoderAudio const& FFmpegDecoder::audio_decoder() const { return m_audio_decoder; } - -inline FFmpegDecoderVideo const & FFmpegDecoder::video_decoder() const +inline FFmpegDecoderVideo const& FFmpegDecoder::video_decoder() const { return m_video_decoder; } - - } // namespace osgFFmpeg - - #endif // HEADER_GUARD_OSGFFMPEG_FFMPEG_DECODER_H +