summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-06-24 14:00:30 +0100
committerComment <tim@gray.(none)>2013-06-24 14:00:30 +0100
commit631576efc4877cf665299c4544d7698bbb50e2d0 (patch)
tree54990435fe5969347b903a12c04f9a7911a43a94
parentba8a37228891c868030464b91ebb2ffe306219a7 (diff)
random node
-rwxr-xr-xffmpeg-fas/build.sh4
-rwxr-xr-xrotord/rotor.h34
2 files changed, 31 insertions, 7 deletions
diff --git a/ffmpeg-fas/build.sh b/ffmpeg-fas/build.sh
index c27bc85..0550dc7 100755
--- a/ffmpeg-fas/build.sh
+++ b/ffmpeg-fas/build.sh
@@ -1,9 +1,9 @@
cd `dirname $0`
-FFMPEG_BASEDIR=./ffmpeg/
+FFMPEG_BASEDIR=../libavstuff/ffmpeg/
rm -rf lib
mkdir lib
-gcc ffmpeg_fas.c seek_indices.c -Iffmpeg ffmpeg/libavformat/libavformat.a ffmpeg/libavcodec/libavcodec.a ffmpeg/libavutil/libavutil.a -O2 -shared -o lib/libffmpeg_fas.so
+gcc ffmpeg_fas.c seek_indices.c -I$FFMPEG_BASEDIR ffmpeg/libavformat/libavformat.a ffmpeg/libavcodec/libavcodec.a ffmpeg/libavutil/libavutil.a -O2 -shared -o lib/libffmpeg_fas.so
gcc -c ffmpeg_fas.c seek_indices.c -O2 -I$FFMPEG_BASEDIR
ar rc lib/libffmpeg_fas.a ffmpeg_fas.o seek_indices.o
diff --git a/rotord/rotor.h b/rotord/rotor.h
index ed566c7..b681e72 100755
--- a/rotord/rotor.h
+++ b/rotord/rotor.h
@@ -603,12 +603,33 @@ namespace Rotor {
//http://create.stephan-brumme.com/fnv-hash/
const uint32_t Prime = 0x01000193; // 16777619
const uint32_t Seed = 0x811C9DC5; // 2166136261
+ /// hash a byte
+ inline uint32_t fnv1a(unsigned char oneByte, uint32_t hash = Seed)
+ {
+ return (oneByte ^ hash) * Prime;
+ }
+ /// hash a short (two bytes)
+ inline uint32_t fnv1a(unsigned short twoBytes, uint32_t hash = Seed)
+ {
+ const unsigned char* ptr = (const unsigned char*) &twoBytes;
+ hash = fnv1a(*ptr++, hash);
+ return fnv1a(*ptr , hash);
+ }
+ /// hash a 32 bit integer (four bytes)
+ inline uint32_t fnv1a(uint32_t fourBytes, uint32_t hash = Seed)
+ {
+ const unsigned char* ptr = (const unsigned char*) &fourBytes;
+ hash = fnv1a(*ptr++, hash);
+ hash = fnv1a(*ptr++, hash);
+ hash = fnv1a(*ptr++, hash);
+ return fnv1a(*ptr , hash);
+ }
class Random: public Signal_node {
public:
Random(){};
Random(map<string,string> &settings) {
base_settings(settings);
- seed=ofToFloat(find_setting(settings,"amount"));
+ seed=(float)find_setting(settings,"seed",Seed);
for (auto p:parameter_inputs){
if (p->parameter=="seed") p->receiver=&seed;
}
@@ -616,16 +637,19 @@ namespace Rotor {
};
Random* clone(map<string,string> &_settings) { return new Random(_settings);};
const float output(const Time_spec &time) {
- if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml
+ if (inputs.size()) {
if (inputs[0]->connection) {
- return 0.0f;
- //return (((Signal_node*)inputs[0]->connection)->get_output(time))/divide_amount;
+ //hash the integer part and add the fractional part back on
+ float o=(((Signal_node*)inputs[0]->connection)->get_output(time));
+ uint32_t m=(int)o;
+ return ((float)fnv1a(m,(uint32_t)(seed+0.5f)))+(o-m);
}
}
return 0.0f;
}
float seed;
- uint32_t key;
+ private:
+
};
class Signal_output: public Signal_node {
public: