summaryrefslogtreecommitdiff
path: root/rotord/gstvideoloader.h
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/gstvideoloader.h')
-rw-r--r--rotord/gstvideoloader.h235
1 files changed, 0 insertions, 235 deletions
diff --git a/rotord/gstvideoloader.h b/rotord/gstvideoloader.h
deleted file mode 100644
index b354fa7..0000000
--- a/rotord/gstvideoloader.h
+++ /dev/null
@@ -1,235 +0,0 @@
-#include <string>
-#include <iostream>
-
-#include <gst/gst.h>
-#include <gst/app/gstappsink.h>
-#include <gst/video/video.h>
-#include <gst/audio/multichannel.h>
-
-#include <glib-object.h>
-#include <glib.h>
-#include <algorithm>
-
-#define GST_DISABLE_DEPRECATED
-#include <gst/gstpad.h>
-#include "Pixels.h"
-#include "ofUtils.h"
-
-enum ofLoopType{
- OF_LOOP_NONE=0x01,
- OF_LOOP_PALINDROME=0x02,
- OF_LOOP_NORMAL=0x03
-};
-
-class ofGstAppSink;
-typedef struct _GstElement GstElement;
-typedef struct _GstBuffer GstBuffer;
-typedef struct _GstMessage GstMessage;
-
-class ofGstUtils{
-public:
- ofGstUtils();
- virtual ~ofGstUtils();
-
- bool setPipelineWithSink(std::string pipeline, std::string sinkname="sink", bool isStream=false);
- bool setPipelineWithSink(GstElement * pipeline, GstElement * sink, bool isStream=false);
-
- void play();
- void stop();
- void setPaused(bool bPause);
- bool isPaused(){return bPaused;}
- bool isLoaded(){return bLoaded;}
- bool isPlaying(){return bPlaying;}
-
- float getPosition();
- float getSpeed();
- float getDuration();
- int64_t getDurationNanos();
- bool getIsMovieDone();
-
- void setPosition(float pct);
- void setVolume(float volume);
- void setLoopState(ofLoopType state);
- ofLoopType getLoopState(){return loopMode;}
- void setSpeed(float speed);
-
- void setFrameByFrame(bool bFrameByFrame);
- bool isFrameByFrame();
-
- GstElement * getPipeline();
- GstElement * getSink();
- unsigned long getMinLatencyNanos();
- unsigned long getMaxLatencyNanos();
-
- virtual void close();
-
- void setSinkListener(ofGstAppSink * appsink);
-
- // callbacks to get called from gstreamer
- virtual GstFlowReturn preroll_cb(GstBuffer * buffer);
- virtual GstFlowReturn buffer_cb(GstBuffer * buffer);
- virtual void eos_cb();
-
- static void startGstMainLoop();
- void update();
-
-protected:
- ofGstAppSink * appsink;
- bool isStream;
-
-private:
- void gstHandleMessage();
- //void update(ofEventArgs & args);
- bool startPipeline();
-
- bool bPlaying;
- bool bPaused;
- bool bIsMovieDone;
- bool bLoaded;
- bool bFrameByFrame;
- ofLoopType loopMode;
-
- GstElement * gstSink;
- GstElement * gstPipeline;
-
- float speed;
- int64_t durationNanos;
- bool isAppSink;
-};
-
-class ofGstVideoUtils: public ofGstUtils{
-public:
-
- ofGstVideoUtils();
- virtual ~ofGstVideoUtils();
-
- bool setPipeline(std::string pipeline, int bpp=24, bool isStream=false, int w=-1, int h=-1);
-
- bool allocate(int w, int h, int bpp);
-
- bool isFrameNew();
- unsigned char * getPixels();
- //ofPixelsRef getPixelsRef();
-
-
- float getHeight();
- float getWidth();
-
- void close();
-
- void update();
-
-
-protected:
- GstFlowReturn preroll_cb(GstBuffer * buffer);
- GstFlowReturn buffer_cb(GstBuffer * buffer);
- void eos_cb();
-
- Pixels pixels;
- Pixels backPixels;
- //ofPixels pixels; // 24 bit: rgb
- //ofPixels backPixels;
- //ofPixels eventPixels;
-private:
- bool bIsFrameNew; // if we are new
- bool bHavePixelsChanged;
- bool bBackPixelsChanged;
- //ofMutex mutex;
- GstBuffer * buffer, *prevBuffer;
-
-};
-
-
-//-------------------------------------------------
-//----------------------------------------- appsink listener
-//-------------------------------------------------
-
-class ofGstAppSink{
-public:
- virtual GstFlowReturn on_preroll(GstBuffer * buffer){
- return GST_FLOW_OK;
- }
- virtual GstFlowReturn on_buffer(GstBuffer * buffer){
- return GST_FLOW_OK;
- }
- virtual void on_eos(){}
-
- // return true to set the message as attended so upstream doesn't try to process it
- virtual bool on_message(GstMessage* msg){return false;};
-
- // pings when enough data has arrived to be able to get sink properties
- virtual void on_stream_prepared(){};
-};
-
-class ofGstVideoPlayer: public ofGstAppSink{
-public:
-
- ofGstVideoPlayer();
- ~ofGstVideoPlayer();
-
- /// needs to be called before loadMovie
- //bool setPixelFormat(ofPixelFormat pixelFormat);
- //ofPixelFormat getPixelFormat();
-
- bool loadMovie(string uri);
-
- void update();
-
- int getCurrentFrame();
- int getTotalNumFrames();
-
- void firstFrame();
- void nextFrame();
- void previousFrame();
- void setFrame(int frame); // frame 0 = first frame...
-
- bool isStream();
-
- void play();
- void stop();
- void setPaused(bool bPause);
- bool isPaused();
- bool isLoaded();
- bool isPlaying();
-
- float getPosition();
- float getSpeed();
- float getDuration();
- bool getIsMovieDone();
-
- void setPosition(float pct);
- void setVolume(float volume);
- void setLoopState(ofLoopType state);
- ofLoopType getLoopState();
- void setSpeed(float speed);
- void close();
-
- bool isFrameNew();
-
- unsigned char * getPixels();
- //ofPixelsRef getPixelsRef();
-
- float getHeight();
- float getWidth();
-
- void setFrameByFrame(bool frameByFrame);
- void setThreadAppSink(bool threaded);
-
- ofGstVideoUtils * getGstVideoUtils();
-
-protected:
- bool allocate(int bpp);
- void on_stream_prepared();
-
- // return true to set the message as attended so upstream doesn't try to process it
- virtual bool on_message(GstMessage* msg){return false;};
-
-private:
- //ofPixelFormat internalPixelFormat;
- guint64 nFrames;
- int fps_n, fps_d;
- bool bIsStream;
- bool bIsAllocated;
- bool threadAppSink;
- ofGstVideoUtils videoUtils;
-};