├── .gitignore
├── README.md
├── example
├── Project.xcconfig
├── openFrameworks-Info.plist
├── src
│ ├── main.cpp
│ ├── testApp.cpp
│ └── testApp.h
└── threaded-image-sequence-example.xcodeproj
│ └── project.pbxproj
└── src
└── ofxImageSequenceRecorder.h
/.gitignore:
--------------------------------------------------------------------------------
1 | *.depend
2 | *.layout
3 | *.mode*v3
4 | *.pbxuser
5 | *.app*
6 | *.DS_*
7 |
8 | .svn/
9 | obj/
10 | bin/
11 | build/
12 | !data/
13 |
14 | project.xcworkspace/
15 | xcuserdata/
16 | xcshareddata/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## ofxImageSequenceRecorder
2 |
3 | A threaded image sequence recorder for OpenFrameworks. Adapted from the ideas of Memo and others in [this forum thread](http://forum.openframeworks.cc/index.php?topic=1687.0).
4 |
5 | This version maintains a queue of ofPixels objects to be saved. You can add a frame from an ofVideoGrabber, an ofImage, an ofVideoPlayer, or anything else that provides an ofPixels object. While the thread is running, frames are saved off to disk in the same order they were added with sequential filenames based on the file prefix and format your provided.
6 |
7 | See the included example for usage.
8 |
9 |
--------------------------------------------------------------------------------
/example/Project.xcconfig:
--------------------------------------------------------------------------------
1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT.
2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED
3 | OF_PATH = ../../..
4 |
5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE
6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig"
7 |
8 | OTHER_LDFLAGS = $(OF_CORE_LIBS)
9 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
10 |
--------------------------------------------------------------------------------
/example/openFrameworks-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.yourcompany.openFrameworks
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | APPL
15 | CFBundleSignature
16 | ????
17 | CFBundleVersion
18 | 1.0
19 |
20 |
21 |
--------------------------------------------------------------------------------
/example/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "testApp.h"
2 |
3 | //--------------------------------------------------------------
4 | int main(){
5 | // set width, height, mode (OF_WINDOW or OF_FULLSCREEN)
6 | ofSetupOpenGL(1024, 768, OF_WINDOW);
7 | ofRunApp(new testApp()); // start the app
8 | }
9 |
--------------------------------------------------------------------------------
/example/src/testApp.cpp:
--------------------------------------------------------------------------------
1 | #include "testApp.h"
2 |
3 | //--------------------------------------------------------------
4 | void testApp::setup(){
5 | cam.initGrabber(640, 480);
6 | recording = false;
7 |
8 | recorder.setPrefix(ofToDataPath("recording1/frame_")); // this directory must already exist
9 | recorder.setFormat("jpg"); // png is really slow but high res, bmp is fast but big, jpg is just right
10 | }
11 |
12 | //--------------------------------------------------------------
13 | void testApp::update(){
14 | cam.update();
15 |
16 | if (cam.isFrameNew() && recording){
17 | recorder.addFrame(cam);
18 | }
19 | }
20 |
21 | //--------------------------------------------------------------
22 | void testApp::draw(){
23 | ofBackground(125);
24 | cam.draw(0,0);
25 |
26 | ofSetColor(255);
27 |
28 | stringstream c;
29 | c << "Recording: " << recording << "\nThread running: " << recorder.isThreadRunning() << "\nQueue Size: " << recorder.q.size() << "\n\nPress 'r' to toggle recording.\nPress 't' to toggle worker thread." << endl;
30 |
31 | ofDrawBitmapString(c.str(), 650, 10);
32 | }
33 |
34 | void testApp::exit(){
35 | recorder.waitForThread();
36 | }
37 |
38 | //--------------------------------------------------------------
39 | void testApp::keyPressed(int key){
40 | if(key == 'r'){
41 | recording = !recording;
42 | }
43 |
44 | if(key == 't'){
45 | if(recorder.isThreadRunning()){
46 | recorder.stopThread();
47 | } else {
48 | recorder.startThread(false, true);
49 | }
50 | }
51 | }
52 |
53 | //--------------------------------------------------------------
54 | void testApp::keyReleased(int key){
55 |
56 | }
57 |
58 | //--------------------------------------------------------------
59 | void testApp::mouseMoved(int x, int y){
60 |
61 | }
62 |
63 | //--------------------------------------------------------------
64 | void testApp::mouseDragged(int x, int y, int button){
65 |
66 | }
67 |
68 | //--------------------------------------------------------------
69 | void testApp::mousePressed(int x, int y, int button){
70 |
71 | }
72 |
73 | //--------------------------------------------------------------
74 | void testApp::mouseReleased(int x, int y, int button){
75 |
76 | }
77 |
78 | //--------------------------------------------------------------
79 | void testApp::windowResized(int w, int h){
80 |
81 | }
82 |
83 | //--------------------------------------------------------------
84 | void testApp::gotMessage(ofMessage msg){
85 |
86 | }
87 |
88 | //--------------------------------------------------------------
89 | void testApp::dragEvent(ofDragInfo dragInfo){
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/example/src/testApp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "ofMain.h"
4 | #include "ofxImageSequenceRecorder.h"
5 |
6 | class testApp : public ofBaseApp{
7 | public:
8 | void setup();
9 | void update();
10 | void draw();
11 |
12 | void keyPressed(int key);
13 | void keyReleased(int key);
14 | void mouseMoved(int x, int y);
15 | void mouseDragged(int x, int y, int button);
16 | void mousePressed(int x, int y, int button);
17 | void mouseReleased(int x, int y, int button);
18 | void windowResized(int w, int h);
19 | void dragEvent(ofDragInfo dragInfo);
20 | void gotMessage(ofMessage msg);
21 | void exit();
22 |
23 | ofxImageSequenceRecorder recorder;
24 | ofVideoGrabber cam;
25 |
26 | bool recording;
27 | };
28 |
--------------------------------------------------------------------------------
/example/threaded-image-sequence-example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 42;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
11 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; };
12 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; };
13 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; };
14 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; };
15 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9740E8CC7DD009D7055 /* Carbon.framework */; };
16 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; };
17 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; };
18 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; };
19 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; };
20 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; };
21 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; };
22 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */; };
23 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; };
24 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; };
25 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; };
26 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
27 | /* End PBXBuildFile section */
28 |
29 | /* Begin PBXContainerItemProxy section */
30 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = {
31 | isa = PBXContainerItemProxy;
32 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
33 | proxyType = 2;
34 | remoteGlobalIDString = E4B27C1510CBEB8E00536013;
35 | remoteInfo = openFrameworks;
36 | };
37 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = {
38 | isa = PBXContainerItemProxy;
39 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
40 | proxyType = 1;
41 | remoteGlobalIDString = E4B27C1410CBEB8E00536013;
42 | remoteInfo = openFrameworks;
43 | };
44 | /* End PBXContainerItemProxy section */
45 |
46 | /* Begin PBXCopyFilesBuildPhase section */
47 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = {
48 | isa = PBXCopyFilesBuildPhase;
49 | buildActionMask = 2147483647;
50 | dstPath = "";
51 | dstSubfolderSpec = 10;
52 | files = (
53 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */,
54 | );
55 | runOnlyForDeploymentPostprocessing = 0;
56 | };
57 | /* End PBXCopyFilesBuildPhase section */
58 |
59 | /* Begin PBXFileReference section */
60 | 3762D55215AB3FDC00CDAF07 /* ofxImageSequenceRecorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxImageSequenceRecorder.h; sourceTree = ""; };
61 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; };
62 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; };
63 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; };
64 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; };
65 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; };
66 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
67 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
68 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
69 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; };
70 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
71 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
72 | E4B69B5B0A3A1756003C02F2 /* threaded-image-sequence-exampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "threaded-image-sequence-exampleDebug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
73 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
74 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = testApp.cpp; path = src/testApp.cpp; sourceTree = SOURCE_ROOT; };
75 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = testApp.h; path = src/testApp.h; sourceTree = SOURCE_ROOT; };
76 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; };
77 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
78 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
79 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
80 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
81 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | E4B69B590A3A1756003C02F2 /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */,
90 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */,
91 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */,
92 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */,
93 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */,
94 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */,
95 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */,
96 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */,
97 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */,
98 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */,
99 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */,
100 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */,
101 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */,
102 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */,
103 | );
104 | runOnlyForDeploymentPostprocessing = 0;
105 | };
106 | /* End PBXFrameworksBuildPhase section */
107 |
108 | /* Begin PBXGroup section */
109 | 3762D55015AB3FDC00CDAF07 /* ofxImageSequenceRecorder */ = {
110 | isa = PBXGroup;
111 | children = (
112 | 3762D55115AB3FDC00CDAF07 /* src */,
113 | );
114 | name = ofxImageSequenceRecorder;
115 | path = ../../../addons/ofxImageSequenceRecorder;
116 | sourceTree = "";
117 | };
118 | 3762D55115AB3FDC00CDAF07 /* src */ = {
119 | isa = PBXGroup;
120 | children = (
121 | 3762D55215AB3FDC00CDAF07 /* ofxImageSequenceRecorder.h */,
122 | );
123 | path = src;
124 | sourceTree = "";
125 | };
126 | BB4B014C10F69532006C3DED /* addons */ = {
127 | isa = PBXGroup;
128 | children = (
129 | 3762D55015AB3FDC00CDAF07 /* ofxImageSequenceRecorder */,
130 | );
131 | name = addons;
132 | sourceTree = "";
133 | };
134 | BBAB23C913894ECA00AA2426 /* system frameworks */ = {
135 | isa = PBXGroup;
136 | children = (
137 | E4C2424410CC5A17004149E2 /* AppKit.framework */,
138 | E4C2424510CC5A17004149E2 /* Cocoa.framework */,
139 | E4C2424610CC5A17004149E2 /* IOKit.framework */,
140 | E45BE9710E8CC7DD009D7055 /* AGL.framework */,
141 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */,
142 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */,
143 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */,
144 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */,
145 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */,
146 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */,
147 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */,
148 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */,
149 | );
150 | name = "system frameworks";
151 | sourceTree = "";
152 | };
153 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = {
154 | isa = PBXGroup;
155 | children = (
156 | BBAB23BE13894E4700AA2426 /* GLUT.framework */,
157 | );
158 | name = "3rd party frameworks";
159 | sourceTree = "";
160 | };
161 | E4328144138ABC890047C5CB /* Products */ = {
162 | isa = PBXGroup;
163 | children = (
164 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */,
165 | );
166 | name = Products;
167 | sourceTree = "";
168 | };
169 | E45BE5980E8CC70C009D7055 /* frameworks */ = {
170 | isa = PBXGroup;
171 | children = (
172 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */,
173 | BBAB23C913894ECA00AA2426 /* system frameworks */,
174 | );
175 | name = frameworks;
176 | sourceTree = "";
177 | };
178 | E4B69B4A0A3A1720003C02F2 = {
179 | isa = PBXGroup;
180 | children = (
181 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */,
182 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */,
183 | E4B69E1C0A3A1BDC003C02F2 /* src */,
184 | E4EEC9E9138DF44700A80321 /* openFrameworks */,
185 | BB4B014C10F69532006C3DED /* addons */,
186 | E45BE5980E8CC70C009D7055 /* frameworks */,
187 | E4B69B5B0A3A1756003C02F2 /* threaded-image-sequence-exampleDebug.app */,
188 | );
189 | sourceTree = "";
190 | };
191 | E4B69E1C0A3A1BDC003C02F2 /* src */ = {
192 | isa = PBXGroup;
193 | children = (
194 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */,
195 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */,
196 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */,
197 | );
198 | path = src;
199 | sourceTree = SOURCE_ROOT;
200 | };
201 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = {
202 | isa = PBXGroup;
203 | children = (
204 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */,
205 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */,
206 | );
207 | name = openFrameworks;
208 | sourceTree = "";
209 | };
210 | /* End PBXGroup section */
211 |
212 | /* Begin PBXNativeTarget section */
213 | E4B69B5A0A3A1756003C02F2 /* threaded-image-sequence-example */ = {
214 | isa = PBXNativeTarget;
215 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "threaded-image-sequence-example" */;
216 | buildPhases = (
217 | E4B69B580A3A1756003C02F2 /* Sources */,
218 | E4B69B590A3A1756003C02F2 /* Frameworks */,
219 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */,
220 | E4C2427710CC5ABF004149E2 /* CopyFiles */,
221 | );
222 | buildRules = (
223 | );
224 | dependencies = (
225 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */,
226 | );
227 | name = "threaded-image-sequence-example";
228 | productName = myOFApp;
229 | productReference = E4B69B5B0A3A1756003C02F2 /* threaded-image-sequence-exampleDebug.app */;
230 | productType = "com.apple.product-type.application";
231 | };
232 | /* End PBXNativeTarget section */
233 |
234 | /* Begin PBXProject section */
235 | E4B69B4C0A3A1720003C02F2 /* Project object */ = {
236 | isa = PBXProject;
237 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "threaded-image-sequence-example" */;
238 | compatibilityVersion = "Xcode 2.4";
239 | developmentRegion = English;
240 | hasScannedForEncodings = 0;
241 | knownRegions = (
242 | English,
243 | Japanese,
244 | French,
245 | German,
246 | );
247 | mainGroup = E4B69B4A0A3A1720003C02F2;
248 | productRefGroup = E4B69B4A0A3A1720003C02F2;
249 | projectDirPath = "";
250 | projectReferences = (
251 | {
252 | ProductGroup = E4328144138ABC890047C5CB /* Products */;
253 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
254 | },
255 | );
256 | projectRoot = "";
257 | targets = (
258 | E4B69B5A0A3A1756003C02F2 /* threaded-image-sequence-example */,
259 | );
260 | };
261 | /* End PBXProject section */
262 |
263 | /* Begin PBXReferenceProxy section */
264 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = {
265 | isa = PBXReferenceProxy;
266 | fileType = archive.ar;
267 | path = openFrameworksDebug.a;
268 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */;
269 | sourceTree = BUILT_PRODUCTS_DIR;
270 | };
271 | /* End PBXReferenceProxy section */
272 |
273 | /* Begin PBXShellScriptBuildPhase section */
274 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = {
275 | isa = PBXShellScriptBuildPhase;
276 | buildActionMask = 2147483647;
277 | files = (
278 | );
279 | inputPaths = (
280 | );
281 | outputPaths = (
282 | );
283 | runOnlyForDeploymentPostprocessing = 0;
284 | shellPath = /bin/sh;
285 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";";
286 | };
287 | /* End PBXShellScriptBuildPhase section */
288 |
289 | /* Begin PBXSourcesBuildPhase section */
290 | E4B69B580A3A1756003C02F2 /* Sources */ = {
291 | isa = PBXSourcesBuildPhase;
292 | buildActionMask = 2147483647;
293 | files = (
294 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */,
295 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */,
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | };
299 | /* End PBXSourcesBuildPhase section */
300 |
301 | /* Begin PBXTargetDependency section */
302 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = {
303 | isa = PBXTargetDependency;
304 | name = openFrameworks;
305 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */;
306 | };
307 | /* End PBXTargetDependency section */
308 |
309 | /* Begin XCBuildConfiguration section */
310 | E4B69B4E0A3A1720003C02F2 /* Debug */ = {
311 | isa = XCBuildConfiguration;
312 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
313 | buildSettings = {
314 | ARCHS = "$(NATIVE_ARCH)";
315 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
316 | COPY_PHASE_STRIP = NO;
317 | DEAD_CODE_STRIPPING = YES;
318 | GCC_AUTO_VECTORIZATION = YES;
319 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
320 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
321 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
322 | GCC_OPTIMIZATION_LEVEL = 0;
323 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
324 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
325 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
326 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
327 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
328 | GCC_WARN_UNUSED_VALUE = NO;
329 | GCC_WARN_UNUSED_VARIABLE = NO;
330 | HEADER_SEARCH_PATHS = (
331 | "$(OF_CORE_HEADERS)",
332 | src,
333 | );
334 | OTHER_CPLUSPLUSFLAGS = (
335 | "-D__MACOSX_CORE__",
336 | "-lpthread",
337 | "-mtune=native",
338 | );
339 | };
340 | name = Debug;
341 | };
342 | E4B69B4F0A3A1720003C02F2 /* Release */ = {
343 | isa = XCBuildConfiguration;
344 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
345 | buildSettings = {
346 | ARCHS = "$(NATIVE_ARCH)";
347 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
348 | COPY_PHASE_STRIP = YES;
349 | DEAD_CODE_STRIPPING = YES;
350 | GCC_AUTO_VECTORIZATION = YES;
351 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
352 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
353 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
354 | GCC_OPTIMIZATION_LEVEL = 3;
355 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
356 | GCC_UNROLL_LOOPS = YES;
357 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
358 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
359 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
360 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
361 | GCC_WARN_UNUSED_VALUE = NO;
362 | GCC_WARN_UNUSED_VARIABLE = NO;
363 | HEADER_SEARCH_PATHS = (
364 | "$(OF_CORE_HEADERS)",
365 | src,
366 | );
367 | OTHER_CPLUSPLUSFLAGS = (
368 | "-D__MACOSX_CORE__",
369 | "-lpthread",
370 | "-mtune=native",
371 | );
372 | };
373 | name = Release;
374 | };
375 | E4B69B600A3A1757003C02F2 /* Debug */ = {
376 | isa = XCBuildConfiguration;
377 | buildSettings = {
378 | COPY_PHASE_STRIP = NO;
379 | FRAMEWORK_SEARCH_PATHS = (
380 | "$(inherited)",
381 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
382 | );
383 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
384 | GCC_DYNAMIC_NO_PIC = NO;
385 | GCC_ENABLE_FIX_AND_CONTINUE = YES;
386 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
387 | GCC_MODEL_TUNING = NONE;
388 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
389 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
390 | INFOPLIST_FILE = "openFrameworks-Info.plist";
391 | INSTALL_PATH = "$(HOME)/Applications";
392 | LIBRARY_SEARCH_PATHS = (
393 | "$(inherited)",
394 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
395 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
396 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
397 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
398 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
399 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
400 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
401 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
402 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
403 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
404 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
405 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
406 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
407 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
408 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
409 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
410 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
411 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
412 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
413 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
414 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
415 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
416 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
417 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
418 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
419 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
420 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
421 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
422 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
423 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
424 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
425 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
426 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
427 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
428 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
429 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
430 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
431 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
432 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
433 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
434 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
435 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
436 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
437 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
438 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
439 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
440 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
441 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
442 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
443 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
444 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
445 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
446 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
447 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
448 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
449 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
450 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
451 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
452 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
453 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
454 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)",
455 | );
456 | PREBINDING = NO;
457 | PRODUCT_NAME = "threaded-image-sequence-exampleDebug";
458 | WRAPPER_EXTENSION = app;
459 | };
460 | name = Debug;
461 | };
462 | E4B69B610A3A1757003C02F2 /* Release */ = {
463 | isa = XCBuildConfiguration;
464 | buildSettings = {
465 | COPY_PHASE_STRIP = YES;
466 | FRAMEWORK_SEARCH_PATHS = (
467 | "$(inherited)",
468 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
469 | );
470 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
471 | GCC_ENABLE_FIX_AND_CONTINUE = NO;
472 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
473 | GCC_MODEL_TUNING = NONE;
474 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
475 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
476 | INFOPLIST_FILE = "openFrameworks-Info.plist";
477 | INSTALL_PATH = "$(HOME)/Applications";
478 | LIBRARY_SEARCH_PATHS = (
479 | "$(inherited)",
480 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
481 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
482 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
483 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
484 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
485 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
486 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
487 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
488 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
489 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
490 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
491 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
492 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
493 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
494 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
495 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
496 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
497 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
498 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
499 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
500 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
501 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
502 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
503 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
504 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
505 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
506 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
507 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
508 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
509 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
510 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
511 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
512 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
513 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
514 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
515 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
516 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
517 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
518 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
519 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
520 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
521 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
522 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
523 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
524 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
525 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
526 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
527 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
528 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
529 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
530 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
531 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
532 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
533 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
534 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
535 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
536 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
537 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
538 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
539 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
540 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
541 | );
542 | PREBINDING = NO;
543 | PRODUCT_NAME = "threaded-image-sequence-example";
544 | WRAPPER_EXTENSION = app;
545 | };
546 | name = Release;
547 | };
548 | /* End XCBuildConfiguration section */
549 |
550 | /* Begin XCConfigurationList section */
551 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "threaded-image-sequence-example" */ = {
552 | isa = XCConfigurationList;
553 | buildConfigurations = (
554 | E4B69B4E0A3A1720003C02F2 /* Debug */,
555 | E4B69B4F0A3A1720003C02F2 /* Release */,
556 | );
557 | defaultConfigurationIsVisible = 0;
558 | defaultConfigurationName = Release;
559 | };
560 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "threaded-image-sequence-example" */ = {
561 | isa = XCConfigurationList;
562 | buildConfigurations = (
563 | E4B69B600A3A1757003C02F2 /* Debug */,
564 | E4B69B610A3A1757003C02F2 /* Release */,
565 | );
566 | defaultConfigurationIsVisible = 0;
567 | defaultConfigurationName = Release;
568 | };
569 | /* End XCConfigurationList section */
570 | };
571 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */;
572 | }
573 |
--------------------------------------------------------------------------------
/src/ofxImageSequenceRecorder.h:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Based on code by Memo from this thread:
4 | http://forum.openframeworks.cc/index.php?topic=1687.0
5 |
6 | */
7 |
8 | #include "ofMain.h"
9 |
10 | typedef struct {
11 | string fileName;
12 | ofPixels image;
13 | } QueuedImage;
14 |
15 | class ofxImageSequenceRecorder : public ofThread {
16 | public:
17 |
18 | int counter;
19 | queue q;
20 | string prefix;
21 | string format;
22 | int numberWidth;
23 |
24 | ofxImageSequenceRecorder(){
25 | counter=0;
26 | numberWidth=4;
27 |
28 | }
29 |
30 | void setPrefix(string pre){
31 | prefix = pre;
32 | }
33 |
34 | void setFormat(string fmt){
35 | format = fmt;
36 | }
37 |
38 | void setCounter(int count){
39 | counter = count;
40 | }
41 |
42 | void setNumberWidth(int nbwidth){
43 | numberWidth = nbwidth;
44 | }
45 |
46 | void threadedFunction() {
47 | while(isThreadRunning()) {
48 | if(!q.empty()){
49 | QueuedImage i = q.front();
50 | ofSaveImage(i.image, i.fileName);
51 | q.pop();
52 | }
53 | }
54 |
55 |
56 |
57 | }
58 |
59 | void addFrame(ofImage &img){
60 | addFrame(img.getPixelsRef());
61 | }
62 |
63 | void addFrame(ofVideoGrabber &cam){
64 | addFrame(cam.getPixelsRef());
65 | }
66 |
67 | void addFrame(ofVideoPlayer &player){
68 | addFrame(player.getPixelsRef());
69 | }
70 |
71 | void addFrame(ofPixels imageToSave) {
72 |
73 |
74 |
75 | //char fileName[100];
76 | //snprintf(fileName, "%s%.4i.%s" , prefix.c_str(), counter, format.c_str());
77 | string fileName = prefix + ofToString(counter, numberWidth, '0') + "." + format;
78 | counter++;
79 |
80 | QueuedImage qImage;
81 |
82 | qImage.fileName = fileName;
83 | qImage.image = imageToSave;
84 |
85 | q.push(qImage);
86 |
87 | }
88 | };
89 |
--------------------------------------------------------------------------------