Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp,v
retrieving revision 1.444
diff -u -w -r1.444 NuppelVideoPlayer.cpp
--- libs/libmythtv/NuppelVideoPlayer.cpp	6 Mar 2005 18:41:34 -0000	1.444
+++ libs/libmythtv/NuppelVideoPlayer.cpp	19 Mar 2005 16:40:14 -0000
@@ -3289,6 +3289,86 @@
     m_playbackinfo->GetCommBreakList(commBreakMap);
 }
 
+int NuppelVideoPlayer::IncreaeOffsetForComms(int offset)
+{
+    if (  (m_playbackinfo != NULL) && (m_playbackinfo->IsCommFlagged())  )
+    {
+        // Recording is commercial flagged.  Increase offset to compensate.
+
+        LoadCommBreakList();
+        if (commBreakMap.isEmpty())
+        {
+            // No commercials flagged, just use the offset.
+            return offset;
+        }
+
+        // Find the first commercial mark after the offset.
+        for (commBreakIter = commBreakMap.begin();
+            commBreakIter != commBreakMap.end();
+            ++commBreakIter)
+        {
+            if (commBreakIter.key() > offset)
+                break;
+        }
+
+        if (  (commBreakIter == commBreakMap.end())
+            ||(commBreakIter.data() != MARK_COMM_END)  )
+        {
+            // Offset is not in a commercial, so use it.
+            return offset;
+        }
+
+        hascommbreaktable = true;
+        commBreakIter = commBreakMap.begin();
+
+        int original = offset;
+        int showtime = offset;
+        int currentcommercialtime = 0;
+        int lastcommercialtime = 0;
+        int breaklength;
+
+        commBreakIter = commBreakMap.begin();
+        if (commBreakIter.data() == MARK_COMM_END)
+        {
+            // First commercial mark is the end of a commercial.
+            breaklength = commBreakIter.key();
+            lastcommercialtime = breaklength;
+            offset += breaklength;
+            ++commBreakIter;
+        }
+
+        for (; commBreakIter != commBreakMap.end(); ++commBreakIter)
+        {
+            if (commBreakIter.data() == MARK_COMM_START)
+            {
+                currentcommercialtime = commBreakIter.key();
+                showtime -= currentcommercialtime - lastcommercialtime;
+                if (showtime < 0)
+                {
+                    // We have skipped enough commercials.
+                    return offset;
+                }
+
+                // We must skip this commercial break.
+                ++commBreakIter;
+                if (  (commBreakIter == commBreakMap.end())
+                    ||(commBreakIter.data() == MARK_COMM_START)  )
+                {
+                    // Problem, we couldn't find a valid break end.
+                    return original;
+                } else {
+                    lastcommercialtime = commBreakIter.key();
+                    breaklength =
+                        lastcommercialtime - currentcommercialtime;
+                    offset += breaklength;
+                }
+            }
+        }
+    }
+
+    return offset;
+}
+
 char *NuppelVideoPlayer::GetScreenGrab(int secondsin, int &bufflen, int &vw,
                                        int &vh)
 {
@@ -3312,7 +3392,8 @@
 
     ClearAfterSeek();
 
-    int number = (int)(secondsin * video_frame_rate);
+    int number = 
+        IncreaeOffsetForComms((int)(secondsin * video_frame_rate));
     if (number >= totalFrames)
         number = totalFrames / 2;
 
Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/NuppelVideoPlayer.h,v
retrieving revision 1.172
diff -u -w -r1.172 NuppelVideoPlayer.h
--- libs/libmythtv/NuppelVideoPlayer.h	27 Feb 2005 21:54:36 -0000	1.172
+++ libs/libmythtv/NuppelVideoPlayer.h	19 Mar 2005 16:40:15 -0000
@@ -102,6 +102,8 @@
 
     OSD *GetOSD(void) { return osd; }
 
+    int IncreaeOffsetForComms(int offset);
+
     // don't use this on something you're playing
     char *GetScreenGrab(int secondsin, int &buflen, int &vw, int &vh);
 
