All pastes #1960089 Raw Edit

Mine

public text v1 · immutable
#1960089 ·published 2010-10-12 13:15 UTC
rendered paste body
Index: libs/libmythtv/mythplayer.cpp
===================================================================
--- libs/libmythtv/mythplayer.cpp	(revision 26760)
+++ libs/libmythtv/mythplayer.cpp	(working copy)
@@ -3077,20 +3077,26 @@
     play_speed   = next_play_speed;
     normal_speed = next_normal_speed;
 
+    float temp_speed = (play_speed == 0.0) ? audio.GetStretchFactor() : play_speed;
+
     bool skip_changed;
-    if (play_speed > 0.0f && play_speed <= 3.0f)
+    if (play_speed >= 0.0f && play_speed <= 3.0f)
     {
         skip_changed = (ffrew_skip != 1);
+        frame_interval = (int) (1000000.0f / video_frame_rate / temp_speed);
         ffrew_skip = 1;
     }
     else
     {
         skip_changed = true;
-        int new_skip = ((uint)ceil(4.0 * fabs(play_speed) / 30)) * 30;
-        if (play_speed < 0.0)
-            new_skip = -new_skip;
-        ffrew_skip = new_skip;
+        frame_interval = 200000; // 5 fps
+        float ffw_fps = play_speed * video_frame_rate;      // ffrew fps
+        float dis_fps = 1000000.0f / (float)frame_interval; // display fps
+        ffrew_skip = ffw_fps / dis_fps; // frames to skip for each frame_interval
         ffrew_adjust = 0;
+        VERBOSE(VB_PLAYBACK, LOC + "FFW/REW : " +
+                QString("ffw_fps: %1 dis_fps: %2 ffrew_skip %4")
+                .arg(ffw_fps).arg(dis_fps).arg(ffrew_skip));
     }
 
     if (skip_changed && videoOutput)
@@ -3100,10 +3106,6 @@
         if (play_speed != 0.0f && !(last_speed == 0.0f && ffrew_skip == 1))
             DoJumpToFrame(framesPlayed);
     }
-
-    float temp_speed = (play_speed == 0.0) ? audio.GetStretchFactor() : play_speed;
-    frame_interval = (int) (1000000.0f * ffrew_skip / video_frame_rate /
-                            temp_speed);
     videosync->setFrameInterval(frame_interval);
 
     VERBOSE(VB_PLAYBACK, LOC + "Play speed: " +