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: " +