From e9320eb83115f66e99bd98e76c8c9ff78ca043d4 Mon Sep 17 00:00:00 2001 From: Comment Date: Fri, 26 Apr 2013 10:20:53 +0100 Subject: tweaks --- rotord/gstvideoloader.cpp | 365 +++++++++++++++++++++++++++++++++++++++++++++- rotord/gstvideoloader.h | 71 +++++++++ rotord/renderContext.h | 0 rotord/rotor.cpp | 2 + 4 files changed, 437 insertions(+), 1 deletion(-) delete mode 100755 rotord/renderContext.h diff --git a/rotord/gstvideoloader.cpp b/rotord/gstvideoloader.cpp index 0cdc060..2835b02 100644 --- a/rotord/gstvideoloader.cpp +++ b/rotord/gstvideoloader.cpp @@ -783,4 +783,367 @@ void ofGstVideoUtils::eos_cb(){ ofGstUtils::eos_cb(); //ofEventArgs args; //ofNotifyEvent(eosEvent,args); -} \ No newline at end of file +} + +ofGstVideoPlayer::ofGstVideoPlayer(){ + nFrames = 0; + //internalPixelFormat = OF_PIXELS_RGB; + bIsStream = false; + bIsAllocated = false; + threadAppSink = false; + videoUtils.setSinkListener(this); +} + +ofGstVideoPlayer::~ofGstVideoPlayer(){ + close(); +} + +bool ofGstVideoPlayer::loadMovie(string name){ + close(); + /* + if( name.find( "file://",0 ) != string::npos){ + bIsStream = false; + }else if( name.find( "://",0 ) == string::npos){ + name = "file://"+ofToDataPath(name,true); + bIsStream = false; + }else{ + bIsStream = true; + } + */ + cerr<<"loading "< 0.5f) framePosInInt = framePosInInt + 1; + //frame = (int)ceil((getTotalNumFrames() * getPosition())); + frame = framePosInInt; + + return frame; +} + +int ofGstVideoPlayer::getTotalNumFrames(){ + return nFrames; +} + +void ofGstVideoPlayer::firstFrame(){ + setFrame(0); +} + +void ofGstVideoPlayer::nextFrame(){ + gint64 currentFrame = getCurrentFrame(); + if(currentFrame!=-1) setFrame(currentFrame + 1); +} + +void ofGstVideoPlayer::previousFrame(){ + gint64 currentFrame = getCurrentFrame(); + if(currentFrame!=-1) setFrame(currentFrame - 1); +} + +void ofGstVideoPlayer::setFrame(int frame){ // frame 0 = first frame... + float pct = (float)frame / (float)nFrames; + setPosition(pct); +} + +bool ofGstVideoPlayer::isStream(){ + return bIsStream; +} + +void ofGstVideoPlayer::update(){ + videoUtils.update(); +} + +void ofGstVideoPlayer::play(){ + videoUtils.play(); +} + +void ofGstVideoPlayer::stop(){ + videoUtils.stop(); +} + +void ofGstVideoPlayer::setPaused(bool bPause){ + videoUtils.setPaused(bPause); +} + +bool ofGstVideoPlayer::isPaused(){ + return videoUtils.isPaused(); +} + +bool ofGstVideoPlayer::isLoaded(){ + return videoUtils.isLoaded(); +} + +bool ofGstVideoPlayer::isPlaying(){ + return videoUtils.isPlaying(); +} + +float ofGstVideoPlayer::getPosition(){ + return videoUtils.getPosition(); +} + +float ofGstVideoPlayer::getSpeed(){ + return videoUtils.getSpeed(); +} + +float ofGstVideoPlayer::getDuration(){ + return videoUtils.getDuration(); +} + +bool ofGstVideoPlayer::getIsMovieDone(){ + return videoUtils.getIsMovieDone(); +} + +void ofGstVideoPlayer::setPosition(float pct){ + videoUtils.setPosition(pct); +} + +void ofGstVideoPlayer::setVolume(float volume){ + videoUtils.setVolume(volume); +} + +void ofGstVideoPlayer::setLoopState(ofLoopType state){ + videoUtils.setLoopState(state); +} + +ofLoopType ofGstVideoPlayer::getLoopState(){ + return videoUtils.getLoopState(); +} + +void ofGstVideoPlayer::setSpeed(float speed){ + videoUtils.setSpeed(speed); +} + +void ofGstVideoPlayer::close(){ + bIsAllocated = false; + videoUtils.close(); +} + +bool ofGstVideoPlayer::isFrameNew(){ + return videoUtils.isFrameNew(); +} + +unsigned char * ofGstVideoPlayer::getPixels(){ + return videoUtils.getPixels(); +} +/* +ofPixelsRef ofGstVideoPlayer::getPixelsRef(){ + return videoUtils.getPixelsRef(); +} +*/ +float ofGstVideoPlayer::getHeight(){ + return videoUtils.getHeight(); +} + +float ofGstVideoPlayer::getWidth(){ + return videoUtils.getWidth(); +} + +ofGstVideoUtils * ofGstVideoPlayer::getGstVideoUtils(){ + return &videoUtils; +} + +void ofGstVideoPlayer::setFrameByFrame(bool frameByFrame){ + videoUtils.setFrameByFrame(frameByFrame); +} + diff --git a/rotord/gstvideoloader.h b/rotord/gstvideoloader.h index 66b4c9c..867da01 100644 --- a/rotord/gstvideoloader.h +++ b/rotord/gstvideoloader.h @@ -151,4 +151,75 @@ public: 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; +}; diff --git a/rotord/renderContext.h b/rotord/renderContext.h deleted file mode 100755 index e69de29..0000000 diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp index 4249b08..20c6d3a 100755 --- a/rotord/rotor.cpp +++ b/rotord/rotor.cpp @@ -443,4 +443,6 @@ bool Video_output::render(const float duration, const float framerate,const stri return true; */ +bool Video_input::load(const string &filename){ +} -- cgit v1.2.3