ogg_stream_pagein(&tf->to, &og);
}
ogg_stream_packetout(&tf->to, &op);
+ if( theora_packet_isheader(&op) ) continue;
//printf("frame %jd, key %d\n", ogg_frame_position, theora_packet_iskeyframe(&op));
if (expect_keyframe && !theora_packet_iskeyframe(&op))
{
frame->get_w());
delete temp_frame;
}
- else if( !ogg_frame_position )
- frame->clear_frame();
next_frame_position ++;
int FileOGG::move_history(int from, int to, int len)
{
- for(int i = 0; i < asset->channels; i++)
- memmove(pcm_history[i] + to, pcm_history[i] + from, sizeof(float) * len);
+ if( len > 0 ) {
+ for(int i = 0; i < asset->channels; i++)
+ memmove(pcm_history[i] + to, pcm_history[i] + from, sizeof(float) * len);
+ }
history_start = history_start + from - to;
+ if( history_start < 0 ) history_start = 0;
return 0;
}