Modify
Warning Please read the Ticket HowTo before creating or commenting on a ticket. Failure to do so may cause your ticket to be rejected or result in a slower response.

Opened 14 months ago

Closed 14 months ago

Last modified 14 months ago

#11432 closed Bug Report - General (fixed)

5cced61dd causes stuttering on UK Channel 4 HD recordings

Reported by: mythtv@… Owned by: stichnot
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.

Attachments (0)

Change History (5)

comment:1 Changed 14 months 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 14 months 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 14 months ago by stichnot

  • Component changed from MythTV - General to MythTV - Video Playback
  • Milestone changed from unknown to 0.27
  • Owner set to stichnot
  • Status changed from new to accepted

comment:4 Changed 14 months ago by Jim Stichnoth <jstichnoth@…>

  • Resolution set to fixed
  • Status changed from accepted to closed

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 14 months 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.

Add Comment

Modify Ticket

Action
as closed .
The resolution will be deleted. Next status will be 'new'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.