On Fri, 2004-12-10 at 21:18, Mario L wrote:
> I can vouch for having this issue too.  I upgraded to CVS to try and
> fix other problems as well as this.  It seems that this will happen
> less frequently, but will still occur for at least 1 of the commercial
> breaks during an one hour episode, or every few half hour episodes.
> 
> ______________________________________________________________________
> 
> _______________________________________________
> mythtv-users mailing list
> [EMAIL PROTECTED]
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-users

I use cutlists for skipping commercials rather than auto skip, but was
having similar problems with commercial skipping if there was a bookmark
or if the start of the program was cut. 

The attached patch of NuppelVideoPlayer.cpp (from current CVS) works for
me.

The important parts are around lines 1740 and 1905.

I've never used auto skip, so YMMV

  Jack
Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp,v
retrieving revision 1.401
diff -u -r1.401 NuppelVideoPlayer.cpp
--- libs/libmythtv/NuppelVideoPlayer.cpp	8 Dec 2004 04:23:16 -0000	1.401
+++ libs/libmythtv/NuppelVideoPlayer.cpp	11 Dec 2004 20:25:27 -0000
@@ -474,7 +474,7 @@
             scan = newScan;
     };
 
-    VERBOSE(VB_PLAYBACK, dbg+toQString(scan));
+    VERBOSE(VB_NONE, dbg+toQString(scan));
 
     return scan;
 }
@@ -506,7 +506,7 @@
         ReinitVideo();
 
     m_scan = detectInterlace(scan, m_scan, video_frame_rate, video_height);
-    VERBOSE(VB_PLAYBACK, QString("Interlaced: %1  video_height: %2  fps: %3")
+    VERBOSE(VB_NONE, QString("Interlaced: %1  video_height: %2  fps: %3")
                                 .arg(toQString(m_scan)).arg(video_height).arg(fps));
     // Set up deinterlacing in the video output method
     m_double_framerate = false;
@@ -1413,9 +1413,13 @@
 
     usevideotimebase = gContext->GetNumSetting("UseVideoTimebase", 0);
 
+/* jmw start */
+#if 0
     if ((print_verbose_messages & VB_PLAYBACK) != 0)
         output_jmeter = new Jitterometer("video_output", 100);
     else
+#endif
+/* jmw end */
         output_jmeter = NULL;
 
     refreshrate = frame_interval;
@@ -1736,21 +1740,49 @@
     {
         GetFrame(audioOutput == NULL || !normal_speed);
 
+/* jmw start */
+#if 0
         bool seeks = exactseeks;
 
         decoder->setExactSeeks(false);
 
         fftime = bookmarkseek;
+        VERBOSE(VB_PLAYBACK, QString("bookmark: %1").arg(bookmarkseek));
         DoFastForward();
         fftime = 0;
 
         decoder->setExactSeeks(seeks);
+#else
 
+        VERBOSE(VB_NONE, QString("bookmark: %1 framesPlayed: %2")
+                                     .arg(bookmarkseek)
+                                     .arg(framesPlayed));
+        JumpToFrame(bookmarkseek);
+        VERBOSE(VB_NONE, QString("after: framesPlayed: %2")
+                                         .arg(framesPlayed));
+#endif
         QMutexLocker lockit(m_db->mutex());
 
         if (gContext->GetNumSetting("ClearSavedPosition", 1))
             m_playbackinfo->SetBookmark(0, m_db->db());
+    } 
+    else if (hasdeletetable && 
+            (deleteIter.data() == 1) &&
+            (deleteIter.key() == 0)) 
+    {
+        /* if the start is deleted, do the first jump now before the display 
+         * starts to prevent the annoying flash at the start 
+         */
+        ++deleteIter;
+        VERBOSE(VB_NONE, QString("pre jump deleteIter.data: %1 deleteIter.key: %2")
+                                             .arg(deleteIter.data())
+                                             .arg(deleteIter.key()));
+        JumpToFrame(deleteIter.key());
+        VERBOSE(VB_NONE, QString("post jump deleteIter.data: %1 deleteIter.key: %2")
+                                             .arg(deleteIter.data())
+                                             .arg(deleteIter.key()));
     }
+/* jmw end */
 
     LoadBlankList();
     if (!blankMap.isEmpty())
@@ -1904,10 +1936,24 @@
             ++deleteIter;
             if (deleteIter.key() == totalFrames)
                 eof = 1;
-            else
-            {
+            else {
                 PauseVideo();
-                JumpToFrame(deleteIter.key());
+/* jmw start */
+                VERBOSE(VB_NONE, QString("commercial skip at %1 to %2")
+                                         .arg(framesPlayed)
+                                         .arg(deleteIter.key())
+                                         );
+                if (deleteIter.key() > framesPlayed) {
+                    JumpToFrame(deleteIter.key());
+                    VERBOSE(VB_NONE, QString("commercial skip jumped to %1")
+                                                 .arg(framesPlayed));
+                } else if (0 == deleteIter.data()) {
+                    ++deleteIter;
+                }
+                VERBOSE(VB_NONE, QString("commercial skip done deleteIter.data %1 deleteIter.key %2")
+                                             .arg(deleteIter.data())
+                                             .arg(deleteIter.key()));
+/* jmw end */
                 UnpauseVideo();
                 while (GetVideoPause())
                     usleep(50);
@@ -2730,7 +2776,13 @@
         case 3: text = QObject::tr("0.5 seconds"); seekamount = fps / 2; break;
         case 4: text = QObject::tr("1 second"); seekamount = fps; break;
         case 5: text = QObject::tr("5 seconds"); seekamount = fps * 5; break;
+/* jmw start */
+#if 0
         case 6: text = QObject::tr("20 seconds"); seekamount = fps * 20; break;
+#else
+        case 6: text = QObject::tr("30 seconds"); seekamount = fps * 30; break;
+#endif
+/* jmw end */
         case 7: text = QObject::tr("1 minute"); seekamount = fps * 60; break;
         case 8: text = QObject::tr("5 minutes"); seekamount = fps * 300; break;
         case 9: text = QObject::tr("10 minutes"); seekamount = fps * 600; break;
@@ -2908,7 +2960,13 @@
         {
             for (; i != deleteMap.end(); ++i)
             {
+/* jmw start */
+#if 0
                 if (i.key() > framesPlayed)
+#else
+                if (i.key() > (framesPlayed + video_frame_rate))
+#endif
+/* jmw end */
                 {
                     framenum = i.key();
                     break;
_______________________________________________
mythtv-users mailing list
[EMAIL PROTECTED]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-users

Reply via email to