[mythtv-commits] mythtv commit: r8350 by danielk

mythtv at cvs.mythtv.org mythtv at cvs.mythtv.org
Thu Dec 22 09:33:29 EST 2005


      Author: danielk
        Date: 2005-12-22 14:33:28 +0000 (Thu, 22 Dec 2005)
New Revision: 8350
   Changeset: http://cvs.mythtv.org/trac/changeset/8350

Modified:

   trunk/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
   trunk/mythtv/libs/libmythtv/NuppelVideoPlayer.h
   trunk/mythtv/libs/libmythtv/avformatdecoder.cpp
   trunk/mythtv/libs/libmythtv/avformatdecoder.h
   trunk/mythtv/libs/libmythtv/decoderbase.cpp
   trunk/mythtv/libs/libmythtv/decoderbase.h
   trunk/mythtv/libs/libmythtv/ivtvdecoder.cpp
   trunk/mythtv/libs/libmythtv/ivtvdecoder.h
   trunk/mythtv/libs/libmythtv/nuppeldecoder.cpp
   trunk/mythtv/libs/libmythtv/nuppeldecoder.h
   trunk/mythtv/libs/libmythtv/videobuffers.cpp
   trunk/mythtv/libs/libmythtv/videobuffers.h
   trunk/mythtv/libs/libmythtv/videooutbase.h

Log:

Fixes #827. This fixes two major problems with FF/REW > 3x, and some minor problems.

The two major problems had to do with not throwing away some cached
data after a seek, and leaving frames in limbo.

The first resulted in ffmpeg/libmpeg2 decoding errors; which we generally
recovered from, but left a lot of junk in the debugging output and
slowed down the decoding. This was fixed by decoupling freeing bogus
data and freeing frames (the bogus data was being freed after a regular
seek.) Basically a new param 'discardFrames' has been added to SeekReset().

The second major problem left a frame in limbo after each seek, this
caused major problems for XvMC and some less serious problems for XVideo
output. This was fixed by adding a new method to VideoBuffers, 
DeLimboFrame() which is called when av_release_frame releases a frame,
which is now called after a SeekReset for partially decoded frame.
This frame leaves frames we've already put in 'U'sed alone, but moves
'L'imboed frames to 'A'vailable.

This fix does not fix libmpeg2 leaking frames, only ffmpeg; I don't quite
understand how libmpeg2 is supposed to be freeing frames. The lack of this
call in the proper place may be the reason why preview screen grabs don't
work with libmpeg2. libmpeg2 appears to still basically work with 
FF/REW > 3x, but doesn't fully decode the frames and pauses whenever the
limbo frames add up too much, but they eventually get purged.

There were also some minor problems with non-exact seeking sometimes 
jumping backward in FF mode, and with frame-by-frame seeking grabbing
frames and actually decoding the video when it didn't have to. These
are also fixed by this commit. And 'Normal' and 'FFREW' GetFrame has
been seperated in the NVP for better readability, and simpler logic.






More information about the mythtv-commits mailing list