root/OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp @ 10961

Revision 10961, 2.1 kB (checked in by robert, 5 years ago)

From Serge Lages, "Here is a patch to allow setting an audio volume with the AudioSink? interface, I've also modified the ffmpeg plugin code to implement the ImageStream?'s setVolume method with its AudioSink?."

RevLine 
[9816]1
2#ifndef HEADER_GUARD_OSGFFMPEG_FFMPEG_IMAGE_STREAM_H
3#define HEADER_GUARD_OSGFFMPEG_FFMPEG_IMAGE_STREAM_H
4
5#include <osg/ImageStream>
6
7#include <OpenThreads/Condition>
8#include <OpenThreads/Thread>
9
[9847]10#include "FFmpegDecoder.hpp"
11#include "MessageQueue.hpp"
12
[9816]13namespace osgFFmpeg
14{
15
16    template <class T>
17    class MessageQueue;
18
[9843]19    class FFmpegImageStream : public osg::ImageStream, public OpenThreads::Thread
[9816]20    {
21    public:
22
23        FFmpegImageStream();
24        FFmpegImageStream(const FFmpegImageStream & image, const osg::CopyOp & copyop = osg::CopyOp::SHALLOW_COPY);
25
26        META_Object(osgFFmpeg, FFmpegImageStream);
27
28        bool open(const std::string & filename);
29
30        virtual void play();
31        virtual void pause();
32        virtual void rewind();
[10809]33        virtual void seek(double time);
[9816]34        virtual void quit(bool waitForThreadToExit = true);
35
[10961]36        virtual void setVolume(float volume);
37        virtual float getVolume() const;
38
[9910]39        virtual double getLength() const;
[10851]40        virtual double getReferenceTime () const;
[9910]41        virtual double getFrameRate() const;
[9816]42
[9910]43        virtual bool isImageTranslucent() const;
[9816]44
45    private:
46
47        enum Command
48        {
49            CMD_PLAY,
50            CMD_PAUSE,
51            CMD_STOP,
[10809]52            CMD_REWIND,
53            CMD_SEEK
[9816]54        };
55
56        typedef MessageQueue<Command> CommandQueue;
57        typedef OpenThreads::Mutex Mutex;
58        typedef OpenThreads::Condition Condition;
59
60        virtual ~FFmpegImageStream();
61        virtual void run();
62        virtual void applyLoopingMode();
63
64        bool handleCommand(Command cmd);
65
66        void cmdPlay();
67        void cmdPause();
68        void cmdRewind();
[10809]69        void cmdSeek(double time);
[9816]70
71        static void publishNewFrame(const FFmpegDecoderVideo &, void * user_data);
72
[9847]73        osg::ref_ptr<FFmpegDecoder>    m_decoder;
[9816]74        CommandQueue *    m_commands;
75
76        Mutex            m_mutex;
77        Condition        m_frame_published_cond;
[10851]78        bool             m_frame_published_flag;
[10809]79        double           m_seek_time;
[9816]80    };
81
82}
83
84
85
86#endif // HEADER_GUARD_OSGFFMPEG_FFMPEG_IMAGE_STREAM_H
Note: See TracBrowser for help on using the browser.