15 #include "inkblotVideoCursor.h" 16 #include "config_movies.h" 29 static color colormap[17] = {
58 _size_x = src->_specified_x;
59 _size_y = src->_specified_y;
61 _fps = src->_specified_fps;
62 int padx = _size_x + 2;
63 int pady = _size_y + 2;
64 _cells =
new unsigned char[padx * pady];
65 _cells2 =
new unsigned char[padx * pady];
66 memset(_cells, 255, padx * pady);
67 memset(_cells2, 255, padx * pady);
69 _can_seek_fast =
false;
80 ~InkblotVideoCursor() {
92 int frame = (int)(time / _fps);
93 if (frame == _current_frame) {
97 _current_frame = frame;
108 PT(
Buffer) buffer = get_standard_buffer();
110 int padx = size_x() + 2;
111 int pady = size_y() + 2;
113 if (_current_frame < _last_frame) {
115 memset(_cells, 255, padx * pady);
116 memset(_cells2, 255, padx * pady);
120 while (_last_frame <= _current_frame) {
122 for (
int y=1; y<pady-1; y++) {
123 for (
int x=1; x<padx-1; x++) {
125 _cells[(x+1)+(y+1)*padx] +
126 _cells[(x+1)+(y+0)*padx] +
127 _cells[(x+1)+(y-1)*padx] +
128 _cells[(x+0)+(y+1)*padx] +
129 _cells[(x+0)+(y+0)*padx] +
130 _cells[(x+0)+(y-1)*padx] +
131 _cells[(x-1)+(y+1)*padx] +
132 _cells[(x-1)+(y+0)*padx] +
133 _cells[(x-1)+(y-1)*padx];
134 _cells2[x + y*padx] = (tot/9)+3;
137 unsigned char *t = _cells;
142 unsigned char *data = buffer->_block;
143 for (
int y=1; y<pady - 1; y++) {
144 for (
int x=1; x<padx - 1; x++) {
145 int val = _cells[x + y*padx];
146 color &c1 = colormap[(val>>4)+0];
147 color &c2 = colormap[(val>>4)+1];
149 data[0] = (c1.b * (16-lerp) + c2.b * lerp) / 16;
150 data[1] = (c1.g * (16-lerp) + c2.g * lerp) / 16;
151 data[2] = (c1.r * (16-lerp) + c2.r * lerp) / 16;
InkblotVideoCursor(InkblotVideo *src)
xxx
virtual bool set_time(double time, int loop_count)
See MovieVideoCursor::set_time().
A MovieVideo is actually any source that provides a sequence of video frames.
A cellular automaton that generates an amusing pattern of swirling colors.
TypeHandle is the identifier used to differentiate C++ class types.