summaryrefslogtreecommitdiff
path: root/NT/src/rendercontext.h
blob: 097af3f53d7fdc53b5e788add15349284ed1f3bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#ifndef RENDERCONTEXT_H
#define RENDERCONTEXT_H

/*------------------------

Render context manages a rotor graph as a web service, and renders out linear movies


TJR Jan 2014

-------------------------*/

#include "Poco/Task.h"

#include "rotor.h"
#include "graph.h"

//
// When rendering, where do duration etc come from?
//
// It should come from:
// a) a specified duration
// b) the duration of the song being worked on
// c) a default duration
//
// graph.get_duration()

namespace Rotor {
	#define IDLE 0
	#define ANALYSING_AUDIO 1
	#define AUDIO_READY 2
	#define CREATING_PREVIEW 3
	#define PREVIEW_READY 4
	#define RENDERING 5
	#define RENDER_READY 6
	#define FAILED 7
	#define NOT_FOUND 8
	#define CANCELLED 9
	#define LOADING_GRAPH 10

	#define ANALYSE_AUDIO 1
	#define PREVIEW 2
	#define RENDER 3
	#define LOAD_GRAPH 4

	class Render_status {
		public:
			Render_status():status(0),progress(0.0){};
			Render_status(int _status):status(_status),progress(0.0){};
			int status;
			double progress;
	};
	class Render_context: public Poco::Task {
		public:
			Render_context(const std::string& _id): Task(_id)  {
				id=_id;
				graph.init(id);
				//set up log
				AutoPtr<SplitterChannel> splitterChannel(new SplitterChannel());
			    AutoPtr<Channel> consoleChannel(new ConsoleChannel());
			    AutoPtr<Channel> fileChannel(new FileChannel("Rotord_"+id+".log"));
			    splitterChannel->addChannel(consoleChannel);
			    splitterChannel->addChannel(fileChannel);
			    AutoPtr<Formatter> formatter(new PatternFormatter("%d-%m-%Y %H:%M:%S %s: %t"));
			    AutoPtr<Channel> formattingChannel(new FormattingChannel(formatter, splitterChannel));
			    Logger& logger = Logger::create(id, formattingChannel, Message::PRIO_TRACE);
				logger.information("started thread");
			}
			~Render_context(){
				Logger& logger = Logger::get(id);
				cancel();
				logger.information("stopped thread");
			}
			void runTask() {
				while (!isCancelled()) {
					sleep(100);
				}
			}
			Render_status get_render_status(const string &uid){
				if (renders.find(uid)!=renders.end()){
					if (renders[uid].status==RENDERING){
						renders[uid].progress=graph.progress;
					}
					return renders[uid];
				}	
				return Render_status(NOT_FOUND);
			};
			std::string text_render(std::string node_id="");
			Graph graph;
		private:
			std::string id;
			std::unordered_map<string,Render_status> renders;
	};
	
};



#endif //RENDERCONTEXT_H