[mythtv] FF/Rew Repositioning

David Engel dlengel at attbi.com
Thu Jul 24 18:34:28 EDT 2003


This patch adds repositioning to allow for reaction time when exiting
fast-forward and rewind mode.  The fudge factors may need some
tweaking but it works acceptably for me.

David
-- 
David Engel
dlengel at attbi.com

Index: libs/libmythtv/tv_play.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/tv_play.cpp,v
retrieving revision 1.81
diff -u -r1.81 tv_play.cpp
--- libs/libmythtv/tv_play.cpp	21 Jul 2003 15:46:50 -0000	1.81
+++ libs/libmythtv/tv_play.cpp	24 Jul 2003 20:57:01 -0000
@@ -904,7 +904,7 @@
         }
         case Key_Z:
         {
-            doing_ff_rew = 0;
+            StopFFRew();
             DoSkipCommercials(1);
             break;
         }
@@ -915,13 +915,13 @@
         }
         case Key_Q:
         {
-            doing_ff_rew = 0;
+            StopFFRew();;
             DoSkipCommercials(-1);
             break;
         }
         case Key_S: case Key_P: 
         {
-            doing_ff_rew = 0;
+            StopFFRew();;
             DoPause();
             break;
         }
@@ -929,8 +929,7 @@
         {
             if (!stickykeys)
             {
-                doing_ff_rew = 0;
-                ff_rew_index = SSPEED_NORMAL;
+                StopFFRew();;
                 DoFF(fftime); 
                 break;
             }
@@ -952,8 +951,7 @@
         {
             if (!stickykeys)
             {
-                doing_ff_rew = 0;
-                ff_rew_index = SSPEED_NORMAL;
+                StopFFRew();;
                 DoRew(rewtime);
                 break;
             }
@@ -1031,7 +1029,7 @@
                     case Key_9: ff_rew_index = SSPEED_FAST_6; break;
 
                     default:
-                       doing_ff_rew = 0;
+                       StopFFRew();;
                        was_doing_ff_rew = true;
                        break;
                 }
@@ -1423,6 +1421,38 @@
         keyRepeat = false;
         keyrepeatTimer->start(300, true);
     }
+}
+
+void TV::StopFFRew(void)
+{
+    if (!doing_ff_rew)
+        return;
+
+    const double ff_offset = 7.00;
+    const double ff_scale = 6.00;
+    const double rew_offset = 0.00;
+    const double rew_scale = 6.00;
+
+    bool muted = false;
+
+    if (volumeControl && !volumeControl->GetMute())
+    {
+        volumeControl->ToggleMute();
+        muted = true;
+    }
+
+    ff_rew_scaling = seek_speed_array[ff_rew_index].scaling;
+    if (doing_ff_rew > 0)
+	activenvp->Rewind(ff_offset + ff_scale * ff_rew_scaling);
+    else
+	activenvp->FastForward(rew_offset + rew_scale * ff_rew_scaling);
+
+    if (muted) 
+        muteTimer->start(600, true);
+
+    doing_ff_rew = 0;
+    ff_rew_index = SSPEED_NORMAL;
+    ff_rew_scaling = 1.0;
 }
 
 void TV::DoJumpAhead(void)
Index: libs/libmythtv/tv_play.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/tv_play.h,v
retrieving revision 1.38
diff -u -r1.38 tv_play.h
--- libs/libmythtv/tv_play.h	21 Jul 2003 15:46:50 -0000	1.38
+++ libs/libmythtv/tv_play.h	24 Jul 2003 20:57:02 -0000
@@ -119,6 +119,7 @@
     void DoInfo(void);
     void DoPause(void);
     void DoFF(int time);
+    void StopFFRew(void);
     void DoRew(int time);
     void DoJumpAhead(void);
     void DoJumpBack(void);


More information about the mythtv-dev mailing list