mirror of
https://github.com/SrIzan10/makesweet-api.git
synced 2026-05-01 10:55:14 +00:00
give control over starting point
This commit is contained in:
@@ -126,12 +126,12 @@ void GifAnim::apply() {
|
||||
blocks.push_back(Bytes((char*)mem,(size_t)sz));
|
||||
|
||||
int accum_delay = 0;
|
||||
// bool have_r = false;
|
||||
//Render *r_prev = NULL;
|
||||
//Render *r_pre_prev = NULL;
|
||||
int emit_ct = 0;
|
||||
int step_pending = 0;
|
||||
for (int i=0; i<frames; i++) {
|
||||
int pending_frame_number = pal_index;
|
||||
int pending_count = 0;
|
||||
for (int base=0; base<frames; base++) {
|
||||
int i = (base + ((first_frame >= 0) ? first_frame : 0)) % frames;
|
||||
step_pending += step;
|
||||
dbg_printf("Working on frame %d\n", i);
|
||||
|
||||
@@ -150,13 +150,16 @@ void GifAnim::apply() {
|
||||
renders->remove_render(i);
|
||||
|
||||
bool change = false;
|
||||
if (i>0) {
|
||||
int emitting_frame_number = -1;
|
||||
if (base>0) {
|
||||
for (int x=0; x<ww && !change; x++) {
|
||||
for (int y=0; y<hh; y++) {
|
||||
int p0 = gd_prev->pixels[y][x];
|
||||
int p1 = gd_curr->pixels[y][x];
|
||||
if (p0!=p1) {
|
||||
change = true;
|
||||
emitting_frame_number = pending_frame_number;
|
||||
pending_frame_number = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -167,16 +170,17 @@ void GifAnim::apply() {
|
||||
mem = gdImageGifAnimAddPtr(gd_prev,&sz,
|
||||
local_color?1:0,
|
||||
0,0,
|
||||
step_pending,1,
|
||||
step_pending-step,1,
|
||||
(emit_ct>=1)?gd_pre_prev:NULL);
|
||||
dbg_printf(" Generated frame, %d ticks\n", step_pending);
|
||||
step_pending = 0;
|
||||
dbg_printf(" Generated frame %d (%d), %d ticks\n", emitting_frame_number,
|
||||
pending_count, step_pending-step);
|
||||
step_pending = step;
|
||||
pending_count = 0;
|
||||
emit_ct++;
|
||||
blocks.push_back(Bytes((char*)mem,(size_t)sz));
|
||||
}
|
||||
|
||||
if (change) {
|
||||
//r_pre_prev = r_prev;
|
||||
gdImagePtr tmp = gd_pre_prev;
|
||||
gd_pre_prev = gd_prev;
|
||||
gd_prev = gd_curr;
|
||||
@@ -185,16 +189,17 @@ void GifAnim::apply() {
|
||||
gdImagePtr tmp = gd_prev;
|
||||
gd_prev = gd_curr;
|
||||
gd_curr = tmp;
|
||||
pending_frame_number = i;
|
||||
pending_count++;
|
||||
}
|
||||
//r_prev = r;
|
||||
|
||||
// ...
|
||||
//renders->remove_render(i);
|
||||
//renders->remove_mapping(i);
|
||||
if (i == frames - 1) {
|
||||
step_pending += last_step;
|
||||
}
|
||||
}
|
||||
|
||||
step_pending += step;
|
||||
step_pending += last_step;
|
||||
// step_pending += step;
|
||||
// step_pending += last_step;
|
||||
if (frames) {
|
||||
mem = gdImageGifAnimAddPtr(gd_prev,&sz,
|
||||
local_color?1:0,
|
||||
@@ -203,7 +208,8 @@ void GifAnim::apply() {
|
||||
(emit_ct>=1)?gd_pre_prev:NULL);
|
||||
emit_ct++;
|
||||
blocks.push_back(Bytes((char*)mem,(size_t)sz));
|
||||
dbg_printf(" Generated final frame, %d ticks\n",
|
||||
dbg_printf(" Generated final frame, %d (%d), %d ticks\n",
|
||||
pending_frame_number, pending_count,
|
||||
step_pending);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ private:
|
||||
double period;
|
||||
double hold;
|
||||
bool early_release;
|
||||
int first_frame;
|
||||
|
||||
public:
|
||||
|
||||
@@ -23,6 +24,7 @@ public:
|
||||
period = 0.1;
|
||||
hold = 5;
|
||||
early_release = true;
|
||||
first_frame = -1;
|
||||
}
|
||||
|
||||
~GifAnim();
|
||||
@@ -42,6 +44,10 @@ public:
|
||||
palette_frames = palette;
|
||||
}
|
||||
|
||||
void set_first_frame(int index) {
|
||||
first_frame = index;
|
||||
}
|
||||
|
||||
void apply();
|
||||
|
||||
void save(const char *fname);
|
||||
|
||||
@@ -40,6 +40,7 @@ int main(int argc, char *argv[]) {
|
||||
fprintf(stderr, "reanimator ... --last 4\n");
|
||||
fprintf(stderr, "reanimator ... --single\n");
|
||||
fprintf(stderr, "reanimator ... --auto_zoom\n");
|
||||
fprintf(stderr, "reanimator ... --start 10 # frame to start at\n");
|
||||
fprintf(stderr, "reanimator ... --save \"frame_%%06d.jpg\"\n");
|
||||
fprintf(stderr, "reanimator ... --gif example.gif\n");
|
||||
fprintf(stderr, "reanimator ... --stats\n");
|
||||
@@ -99,6 +100,9 @@ int main(int argc, char *argv[]) {
|
||||
anim.attach_renders(&renders);
|
||||
anim.set_palette(repo.get_palette());
|
||||
anim.set_timing(repo.get_period(),repo.get_hold());
|
||||
if (options.check("start")) {
|
||||
anim.set_first_frame(options.check("start",Value(0)).asInt());
|
||||
}
|
||||
anim.apply();
|
||||
anim.save(options.find("gif").asString().c_str());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user