[mythtv-commits] Ticket #5749: Internal player stutters on 720p content

MythTV mythtv at cvs.mythtv.org
Fri Oct 3 17:52:04 UTC 2008


#5749: Internal player stutters on 720p content
--------------------------------+-------------------------------------------
 Reporter:  zgeggy2k at yahoo.com  |        Owner:  janne     
     Type:  defect              |       Status:  assigned  
 Priority:  major               |    Milestone:  unknown   
Component:  Video Playback      |      Version:  0.21-fixes
 Severity:  medium              |   Resolution:            
  Mlocked:  0                   |  
--------------------------------+-------------------------------------------

Comment(by dl-mythtv at catspoiler.org):

 Replying to [comment:9 janne]:
 > The patch just increases the buffer size. it's very unlikely that it
 fixes a problem itself.

 Agreed, there is something else going on here.  This patch does work
 around the problem so that 720p material is now watchable again.

 > I can't reproduce the stuttering with unpatched trunk. both good.mpg and
 bad.mpg play perfectly fine here.
 >
 > So I suspect that your processor is not fast enough to handle spikes of
 cpu usage during decoding. More buffered frames give obviously more time
 to catch up and fixes the problem.

 I don't think it's a CPU usage problem.  I did not see this problem when I
 was running 0.21-fixes on Fedora 7 on the same hardware.  The problem only
 occurred after I upgraded to Fedora 9.  Recordings made before the upgrade
 are now unwatchable after the upgrade without this patch.  Idle time in
 top is 70% to 80% during playback.  Mythfrontend averages about 50% CPU
 time and Xorg averages about 35% CPU time.  With a 0.1 second update time,
 I only see rare spikes above 70% CPU usage for mythfrontend.  CPU usage is
 actually higher when playing 1080i material, with only about 50% idle
 time,

 In my case, it looked a lot like the speed of decoding was limited by the
 availability of available video buffers.  Take a look at the log file that
 I previously attached.  It's possible to determine from the log how many
 video frames are buffered, but the amount of buffered audio data is
 captured in the log.  The thing that caught my attention is that video
 frames were being decoded at about the right rate to match 60 fps
 playback.

 > Increasing the buffer size for everyone is obviously not the right
 solution. Since this seems to be a common problem with 720p (60 real
 frames per second) video it might make sense to make buffer time constant
 and not frame constant.

 Possibly, though it really depends on how bursty the audio data is in the
 data stream.  Is there any specification that says that transmitting
 video-only for 10 seconds followed by the matching audio is illegal?  If
 this is a valid stream, then a lot more buffering would be required for
 clean playback.

 My suspicion is that the problem has something to do with video vs. audio
 sync.  The buffered audio data is drained at a constant rate by the
 soundcard.  The buffered video data is drained at the frame rate, with
 some adjustments that are intended to maintain synchronization between the
 video being displayed and the audio data being played.  If the player
 thinks there is too much delay in the audio path, then it will slow down
 the video playback, causing decoded video data to back up in the buffers
 and slowing down the decoding thread.  That being said, it looks like sync
 would have to be off by ~500ms in the log file that I attached, but the
 playback sync looks a lot better than that.

 > Does the increasing the number of video buffers alone fixes the problem,
 i.e. only applying the libs/libmythtv/videoout_xv.cpp hunk?

 It fixes 720p playback for me, but breaks 480i and 1080i playback.
 Without the extra audio buffering, I get audio buffer overruns and the
 video looks like it is being fast forwarded.  The decoding thread will
 wait for video buffer space to become available, but if there isn't
 sufficient audio buffer space it just tosses the audio data away.

 The AUDBUFSIZE change is not sufficient on it's own.  I had to also make
 the audbuf_timecode change as well to fix the audio overrun problem.  I
 did not try the audbuf_timecode change without the AUDBUFSIZE change.

-- 
Ticket URL: <http://svn.mythtv.org/trac/ticket/5749#comment:12>
MythTV <http://www.mythtv.org/>
MythTV


More information about the mythtv-commits mailing list