Is this it? :D

This commit is contained in:
Themaister 2011-02-26 01:13:52 +01:00
parent f24653768f
commit 60b0afce95
2 changed files with 20 additions and 9 deletions

19
movie.c
View File

@ -96,7 +96,9 @@ struct bsv_movie
bool playback; bool playback;
unsigned min_file_pos; unsigned min_file_pos;
bool first_rewind; bool first_rewind;
bool did_rewind;
}; };
#define BSV_MAGIC 0x42535631 #define BSV_MAGIC 0x42535631
@ -269,24 +271,33 @@ error:
void bsv_movie_set_frame_start(bsv_movie_t *handle) void bsv_movie_set_frame_start(bsv_movie_t *handle)
{ {
fprintf(stderr, "Starting frame: %u, Pos: %ld\n", (unsigned)handle->frame_ptr, ftell(handle->file)); //fprintf(stderr, "Starting frame: %u, Pos: %ld\n", (unsigned)handle->frame_ptr, ftell(handle->file));
handle->frame_pos[handle->frame_ptr] = ftell(handle->file); handle->frame_pos[handle->frame_ptr] = ftell(handle->file);
} }
void bsv_movie_set_frame_end(bsv_movie_t *handle) void bsv_movie_set_frame_end(bsv_movie_t *handle)
{ {
fprintf(stderr, "Frame++\n"); //fprintf(stderr, "Frame++\n");
handle->frame_ptr = (handle->frame_ptr + 1) & handle->frame_mask; handle->frame_ptr = (handle->frame_ptr + 1) & handle->frame_mask;
handle->first_rewind = !handle->did_rewind;
handle->did_rewind = false;
} }
void bsv_movie_frame_rewind(bsv_movie_t *handle) void bsv_movie_frame_rewind(bsv_movie_t *handle)
{ {
fprintf(stderr, "Frame--\n"); //fprintf(stderr, "Frame--\n");
handle->did_rewind = true;
if (handle->frame_ptr <= 1) if (handle->frame_ptr <= 1)
{
handle->frame_ptr = 0; handle->frame_ptr = 0;
fseek(handle->file, handle->min_file_pos, SEEK_SET);
}
else else
{ {
handle->frame_ptr = (handle->frame_ptr - 2) & handle->frame_mask; handle->frame_ptr = (handle->frame_ptr - (handle->first_rewind ? 1 : 2)) & handle->frame_mask;
fseek(handle->file, handle->frame_pos[handle->frame_ptr], SEEK_SET); fseek(handle->file, handle->frame_pos[handle->frame_ptr], SEEK_SET);
} }

View File

@ -78,11 +78,11 @@ void state_manager_free(state_manager_t *state)
bool state_manager_pop(state_manager_t *state, void **data) bool state_manager_pop(state_manager_t *state, void **data)
{ {
*data = state->tmp_state; *data = state->tmp_state;
//if (state->first_pop) if (state->first_pop)
//{ {
// state->first_pop = false; state->first_pop = false;
// return true; return true;
//} }
if (state->top_ptr == 0) if (state->top_ptr == 0)
state->top_ptr = state->buf_size - 1; state->top_ptr = state->buf_size - 1;