Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#11432 closed Bug Report - General (fixed)

5cced61dd causes stuttering on UK Channel 4 HD recordings

Reported by: mythtv@… Owned by: Jim Stichnoth
Priority: minor Milestone: 0.27
Component: MythTV - Video Playback Version: Master Head
Severity: medium Keywords:
Cc: Ticket locked: no

Description

Since updating past https://github.com/MythTV/mythtv/commit/5ccedb61ddd2fa87b426cd1c0fbc43d2645cb9a5 recordings from channel 4 HD have become unwatchable. It plays about half a second of video + audio, then freezes for a second etc.

There was a frontend error message about not being enough video frames buffered - I will grab a frontend log when I get a chance.

I built latest master with this one commit removed (using git rebase) and playback performs normally once again.

Change History (5)

comment:1 Changed 11 years ago by mythtv@…

I have also tried rebuilding the seektable of a broken recording, which doesn't seem to fix the issue.

comment:2 Changed 11 years ago by mythtv@…

I'm not sure if this is relevant, but part of the patch doesn't look consistent with itself.

In dtvrecorder.cpp, there is a frameRateMap array, which is initialized using the FrameRate? constructor. For fractional values, these are initialised as FrameRate?(24000, 1001), FrameRate?(30000, 1001) and FrameRate?(60000, 1001). The prototype for this constructor is FrameRate?(uint n, uint d=1).

Elsewhere in the code, AVRational is initialised with a similar constructor AVRational AVRationalInit(int num, int den = 1), and it is called in avformatdecoder.cpp with pkt_dur = AVRationalInit(1001, 60000);

I am not entirely sure of the usage of AVRational, but it would seem that the arguments are swapped (den = 1001 in the FrameRate? constructor, num = 1001 in the AVRational one). Looking at the code I suspect that the FrameRate? constructor is being called incorrectly, but I can't be sure.

comment:3 Changed 11 years ago by Jim Stichnoth

Component: MythTV - GeneralMythTV - Video Playback
Milestone: unknown0.27
Owner: set to Jim Stichnoth
Status: newaccepted

comment:4 Changed 11 years ago by Jim Stichnoth <jstichnoth@…>

Resolution: fixed
Status: acceptedclosed

In b174418db53559939cad7b8f9642c0b298849bcf/mythtv:

Fixes #11432. Remove a now-unnecessary scaling operation.

H264Parser::frameRate() was modified in
5ccedb61ddd2fa87b426cd1c0fbc43d2645cb9a55ccedb61ddd2fa87b426 to return
frames per second instead of frames per thousand seconds, but the one
remaining call to frameRate() was still trying to convert to frames
per second. This caused big problems in the AVSync mechanism.

comment:5 Changed 11 years ago by Jim Stichnoth <jstichnoth@…>

In 444e8ee017acc4cf0fa6a04a1bc8e350430108e4/mythtv:

Fixes #11432. Remove a now-unnecessary scaling operation.

H264Parser::frameRate() was modified in
5ccedb61ddd2fa87b426cd1c0fbc43d2645cb9a55ccedb61ddd2fa87b426 to return
frames per second instead of frames per thousand seconds, but the one
remaining call to frameRate() was still trying to convert to frames
per second. This caused big problems in the AVSync mechanism.

Note: See TracTickets for help on using tickets.