[mythtv] Android mediacodec woes

John Pilkington johnpilk222 at gmail.com
Tue Jun 26 21:27:43 UTC 2018


On 26/06/18 21:11, Peter Bennett wrote:
> The double framerate that I am getting from mediacodec is proving to be 
> a rather complicated problem to solve. With the situation the way it is 
> now, the display of elapsed time is wrong and jumps are very wrong. For 
> example after watching for 5 minutes, the OSD shows 10 minutes, and 
> doing a forward jump of 1 minute jumps to the real 11 minutes, i.e. 
> jumps forward 6 minutes instead of jumping forward 1 minute. Jumping 
> back a minute  actually jumps forward 4 minutes.
> 
> Detecting the condition is easy enough. Fixing it, not so easy.
> 
> I first thought that I could simply double the fps value stored in 
> AVFormatDecoder and MythPlayer. That does not work. I found that the 
> MpegPreProcess is resetting it back to 29.97 on the next frame. Why do 
> we parse the Mpeg input? Maybe that should be eliminated. We could get 
> framerate from the decoded timestamps.
> 
> I then realized that the whole approach of changing the fps is flawed 
> because the code uses framecount all over the place for calculating 
> positions in the file. If the frame count from the demultiplexer 
> (avformat) is half the frame count from the decoder, all sorts of 
> calculations go wrong.
> 
> There is a feature in MythPlayer for m_double_framerate for double 
> framerate deinterlacers. I am now thinking I should extend that to 
> support this new situation of double framerate interlacer that is built 
> into the decoder. It will need a number of changes, currently 
> m_double_framerate is disabled as soon as it sees a non-deinterlaced 
> frame. Currently m_double_framerate indicator causes the same frame to 
> be passed to the video output twice, now it will need two consecutive 
> frames passed to the video output.
> 
> Another option is just drop every second frame. This would be easiest 
> but that will surely reduce the quality, which is not what we want.
> 
> Peter

Some years ago the seektables (getmarkup) were changed to store a direct 
relationship between frame number snd timestamp, in order to allow for 
varying framerates.  I don't know how many formats this affects now, but 
it seems worth mentioning.

John P



More information about the mythtv-dev mailing list