merge hv v6, rework trace methods
[goodguy/history.git] / cinelerra-5.1 / cinelerra / fileogg.C
index 8f1a9d3df6898e3d413ec7b19b8449bd18b566e6..6c789b39100fd14c3e21c03708157b894c575588 100644 (file)
@@ -1472,6 +1472,7 @@ int FileOGG::read_frame(VFrame *frame)
                        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))
                {
@@ -1534,8 +1535,6 @@ int FileOGG::read_frame(VFrame *frame)
                        frame->get_w());
                delete temp_frame;
        }
-       else if( !ogg_frame_position )
-               frame->clear_frame();
 
        next_frame_position ++;
 
@@ -1578,9 +1577,12 @@ int FileOGG::set_audio_position(int64_t x)
 
 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;
 }