diff options
Diffstat (limited to 'rotord/ofxMovieExporter.h')
| -rwxr-xr-x | rotord/ofxMovieExporter.h | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/rotord/ofxMovieExporter.h b/rotord/ofxMovieExporter.h deleted file mode 100755 index 28447d7..0000000 --- a/rotord/ofxMovieExporter.h +++ /dev/null @@ -1,198 +0,0 @@ -/* - * ofxMovieExporter.h - * - * Copyright (c) 2011, Neil Mendoza, http://www.neilmendoza.com - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of 16b.it nor the names of its contributors may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ -//#pragma once - -#include <unordered_map> -#include <deque> -#include <math.h> -#include <memory> - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/UUID.h" -#include "Poco/UUIDGenerator.h" -#include "Poco/Notification.h" -#include "Poco/NotificationCenter.h" -#include "Poco/Observer.h" -#include "Poco/ThreadPool.h" -#include "Poco/Thread.h" -#include "Poco/Task.h" -#include "Poco/Runnable.h" -#include "Poco/Mutex.h" -#include "Poco/Random.h" -#include "Poco/AutoPtr.h" -#include "Poco/File.h" -#include "xmlIO.h" -//#define _THREAD_CAPTURE -#include <string> -#include <iostream> -/* -#include "ofMain.h" - -// needed for gcc on win -#ifdef TARGET_WIN32 - #ifndef INT64_C - #define INT64_C(c) (c ## LL) - #define UINT64_C(c) (c ## ULL) - #endif -#endif -*/ -//#define UINT64_C(c) (c ## ULL) - - -extern "C" -{ - //needed both - #include <libavcodec/avcodec.h> - #include <libavformat/avformat.h> - #include <libavutil/mathematics.h> - //needed ofxMovieExporter - #include <libswscale/swscale.h> - //rest needed audio loader - #include <libavutil/opt.h> - //#include <libavutil/channel_layout.h> - #include <libavutil/common.h> - #include <libavutil/imgutils.h> - - #include <libavutil/samplefmt.h> - - #include <libavutil/dict.h> - //#include <libavutil/dict.c> stops the compiler error but causes a linker error. does libavcodec need to be statically linked? - //#include <libavutil/imgutils.h> - //#include <libavutil/samplefmt.h> - //#include <libavutil/timestamp.h> -} -class ofxMovieExporter -//#ifdef _THREAD_CAPTURE -// : public ofThread -//#endif - { - public: - static const int ENCODED_FRAME_BUFFER_SIZE = 500000; - // defaults - static const int BIT_RATE = 4000000; - static const int FRAME_RATE = 25; - static const int OUT_W = 640; - static const int OUT_H = 480; - static const int INIT_QUEUE_SIZE = 50; - static const AVCodecID CODEC_ID = CODEC_ID_MPEG4; - static const std::string FILENAME_PREFIX; - static const std::string CONTAINER; - - ofxMovieExporter(); - ~ofxMovieExporter(); - // tested so far with... - // codecId = CODEC_ID_MPEG4, container = "mp4" - // codecId = CODEC_ID_MPEG2VIDEO, container = "mov" - bool setup(int outW = OUT_W, int outH = OUT_H, int bitRate = BIT_RATE, int frameRate = FRAME_RATE, AVCodecID codecId = CODEC_ID, std::string container = CONTAINER); - bool record(std::string filePrefix=FILENAME_PREFIX, std::string folderPath=""); - bool encodeFrame(unsigned char *pixels); - void finishRecord(); - - void stop(); - bool isRecording() const; - - // set an external pixel source, assumes 3 Byte RGB - // also sets the recording size but does not crop to the recording area - void setPixelSource(unsigned char* pixels, int w, int h); - - // get the number files that have been captured so far - int getNumCaptures(); - - // reset the filename counter back to 0 - void resetNumCaptures(); - - // get the recording size - inline int getRecordingWidth() {return outW;} - inline int getRecordingHeight() {return outH;} - - - private: -//#ifdef _THREAD_CAPTURE -// void threadedFunction(); -// deque<unsigned char*> frameQueue; -// deque<unsigned char*> frameMem; -// ofMutex frameQueueMutex; -// ofMutex frameMemMutex; -//#endif - void initEncoder(); - void allocateMemory(); - void clearMemory(); - - void encodeFrame(); - - - std::string container; - AVCodecID codecId; - - bool recording; - int numCaptures; - int frameRate; - int bitRate; - float frameInterval; - float aframeInterval; - float lastFrameTime; - - std::string outFileName; - - AVOutputFormat* outputFormat; - AVFormatContext* formatCtx; - AVStream* videoStream; - AVStream* audioStream; - - AVCodec* codec; - AVCodecContext* codecCtx; - - AVCodec* acodec; - AVCodecContext* acodecCtx; - - - SwsContext* convertCtx; - - unsigned char* inPixels; - unsigned char* outPixels; - unsigned char* encodedBuf; - - AVFrame* inFrame; - AVFrame* outFrame; - - int posX, posY; - int inW, inH; - int outW, outH; - - bool usePixelSource; - unsigned char* pixelSource; - - int aframeNum; - int vframeNum; - }; - |
