rendered paste bodyIndex: 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: " +