topical media & game development

talk show tell print

lib-of-vs-libs-openFrameworks-video-ofVideoPlayer.h / h



  ifndef _OF_VIDEO_PLAYER
  define _OF_VIDEO_PLAYER
  
  include <ofConstants.h>
  include <ofTexture.h>
  
  ifdef OF_VIDEO_PLAYER_GSTREAMER
          #include <gst/gst.h>
          #include <pthread.h>
  
          typedef struct{
                  GMainLoop                 *        loop;
                  GstElement                 *        pipeline;
                  unsigned char         *        pixels;
                  pthread_mutex_t         buffer_mutex;
                  bool                                bHasPixelsChanged;
  
                  guint64                                durationNanos;
                  guint64                                nFrames;
                  int                                        pipelineState;
                  float                                speed;
          }ofGstVideoData;
  
  else
          #include <ofQtUtils.h>
  endif
  
  define OF_LOOP_NONE                                        0x01
  define OF_LOOP_PALINDROME                                0x02
  define OF_LOOP_NORMAL                                        0x03
  
  //---------------------------------------------
  
  class ofVideoPlayer : public ofBaseVideo{
  
          public:
  
                  ofVideoPlayer ();
                  virtual ~ofVideoPlayer();
  
                  bool                                 loadMovie(string name);
                  void                                 closeMovie();
                  void                                 close();
  
                  void                                update();                        //same as idleMovie
                  void                                 idleMovie();                // rename to updateMovie?
                  void                                 play();
                  void                                 stop();
  
                  int                                 width, height;
                  float                                  speed;
                  bool                                 bLoaded;
  
                  bool                                 isFrameNew();
                  unsigned char *         getPixels();
                  float                                 getPosition();
                  float                                 getSpeed();
                  float                                 getDuration();
                  bool                                getIsMovieDone();
  
                  void                                 setPosition(float pct);
                  void                                 setVolume(int volume);
                  void                                 setLoopState(int state);
                  void                                   setSpeed(float speed);
                  void                                setFrame(int frame);  // frame 0 = first frame...
  
                  void                                 setUseTexture(bool bUse);
                  ofTexture &                        getTextureReference();
                  void                                 draw(float x, float y, float w, float h);
                  void                                 draw(float x, float y);
  
                  //the anchor is the point the image is drawn around.
                  //this can be useful if you want to rotate an image around a particular point.
          void                                setAnchorPercent(float xPct, float yPct);        //set the anchor as a percentage of the image width/height ( 0.0-1.0 range )
          void                                setAnchorPoint(int x, int y);                                //set the anchor point in pixels
          void                                resetAnchor();                                                                //resets the anchor to (0, 0)
  
                  void                                 setPaused(bool bPause);
  
                  int                                        getCurrentFrame();
                  int                                        getTotalNumFrames();
  
                  void                                firstFrame();
                  void                                nextFrame();
                  void                                previousFrame();
  
                  float                                 getHeight();
                  float                                 getWidth();
  
                  //--------------------------------------
                  #ifdef OF_VIDEO_PLAYER_QUICKTIME
                  //--------------------------------------
                          MovieController          thePlayer;
                          GWorldPtr                         offscreenGWorld;
                          Movie                                  moviePtr;
                          unsigned char *         offscreenGWorldPixels;        // 32 bit: argb (qt k32ARGBPixelFormat)
                          void                                qtGetFrameCount(Movie & movForcount);
                  //--------------------------------------
                  #endif
                  //--------------------------------------
  
                  int                                        nFrames;                                // number of frames
                  unsigned char *         pixels;                                        // 24 bit: rgb
                  bool                                 bHavePixelsChanged;
                  ofTexture                         tex;                                        // a ptr to the texture we are utilizing
                  bool                                 bUseTexture;                        // are we using a texture
                  bool                                allocated;                                // so we know to free pixels or not
  
          protected:
  
                  void                                 start();
                  void                                 createImgMemAndGWorld();
                  bool                                 bStarted;
                  bool                                 bPlaying;
                  bool                                 bPaused;
                  bool                                 bIsFrameNew;                        // if we are new
  
                  //--------------------------------------
                  #ifdef OF_VIDEO_PLAYER_GSTREAMER
                  //--------------------------------------
                  ofGstVideoData                 gstData;
                  bool                                bIsMovieDone;
                  bool                                isStream;
                  GstElement        *                 gstPipeline;
                  GstElement  *                gstSink;
                  gint64                  durationNanos;
                  int                                        loopMode;
  
                  bool                                    posChangingPaused;
  
                  pthread_mutex_t         seek_mutex;
                  void                seek_lock();
                  void                seek_unlock();
                  void                                 gstHandleMessage();
                  bool                                 allocate();
                  //--------------------------------------
                  #endif
                  //--------------------------------------
  
  };
  endif
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.