oggz calculates granulepos incorrectly for duplicate frames

RESOLVED FIXED

Status

()

Core
Audio/Video
RESOLVED FIXED
8 years ago
8 years ago

People

(Reporter: cajbir, Assigned: kinetik)

Tracking

({verified1.9.1})

Trunk
x86
Linux
verified1.9.1
Points:
---
Bug Flags:
wanted1.9.2 +

Firefox Tracking Flags

(status1.9.2 beta1-fixed, status1.9.1 .6-fixed)

Details

(URL)

Attachments

(1 attachment, 1 obsolete attachment)

(Reporter)

Description

8 years ago
TinyVid recently moved to using the thusnelda encoder to encode the Theora videos. This encoder is more aggressive at marking duplicate frames so decoders don't need to do so much work decoding them.

Unfortunately liboggplay based players (Firefox being one) don't seem to handle this well. The first ten seconds of the video in the URL don't play correctly. The time skips and it misses some of the frames that contain different content.

Steps to reproduce:

1) Visit URL
2) Play

What happens:

1) Watch the time in the controls skip from 1 to 3 to 10 seconds. 
2) Notice the first ten seconds of the video are all black.

What should happen:

1) Time increases in a sane manner
2) The first ten seconds show the title information (Crazy G, U900 text).

Note that this video crashes Firefox 3.5.3 so you'll need to test on trunk or Firefox 3.5.4pre.
(Assignee)

Comment 1

8 years ago
Looks like this is to do with the granulepos/presentation time calculation in oggz and oggplay.

Starting at the first data packet, I see the following granulepos from oggz_tell_granulepos (DF == duplicate frame):

256
512 (DF)
768 (DF)
259 (DF)
...
264 (DF)
2560 (DF)
2816 (DF)
3072 (DF)
268 (DF)

oggplay_callback_theora has the following early exit:
94	  if ( (granulepos > 0) && (common->last_granulepos > granulepos)) {

So we end up skipping the decode and frame enqueue of a large number of frames.
Assignee: nobody → kinetik
Summary: Thusnelda encoded videos with duplicate frames don't play back correctly → Videos with duplicate frames don't play back correctly
(Assignee)

Comment 2

8 years ago
Created attachment 400954 [details] [diff] [review]
patch v0

oggz's auto granulepos calculation does not handle zero-byte (duplicate frame) packets correctly.  When the packet size is zero, it reads a byte of random garbage from the heap.
(Assignee)

Updated

8 years ago
Summary: Videos with duplicate frames don't play back correctly → oggz calculates granulepos incorrectly for duplicate frames
(Assignee)

Comment 3

8 years ago
Created attachment 400955 [details] [diff] [review]
patch v0 with update.sh etc.
Attachment #400954 - Attachment is obsolete: true
Attachment #400955 - Flags: review?(chris.double)
(Assignee)

Comment 4

8 years ago
It's tricky to get this with mochitest, I think.  We could check the currentTime when timeupdate fires to ensure it's advancing sanely, but I suspect this sort of test will be prone to random orange due to timing dependencies.
(Reporter)

Updated

8 years ago
Attachment #400955 - Flags: review?(chris.double) → review+
(Assignee)

Comment 5

8 years ago
http://hg.mozilla.org/mozilla-central/rev/30dc0db2b136
Status: NEW → RESOLVED
Last Resolved: 8 years ago
Resolution: --- → FIXED
(Assignee)

Updated

8 years ago
Attachment #400955 - Flags: approval1.9.2?
Attachment #400955 - Flags: approval1.9.1.5?
(Assignee)

Comment 6

8 years ago
Comment on attachment 400955 [details] [diff] [review]
patch v0 with update.sh etc.

Simple patch that fixes poor playback with duplicate frames caused by reading outside the bounds of a buffer.

I wonder if we want to take this for 1.9.1.5, too, since duplicate frames are going to become significantly more common once the Theora 1.1 (Thusnelda) decoder is released.

Comment 7

8 years ago
Applied to liboggz upstream, commit 5405282442397372897cd6d148820eb518ffaf83
(Assignee)

Updated

8 years ago
Duplicate of this bug: 498279
(Assignee)

Updated

8 years ago
status1.9.1: --- → ?
(Assignee)

Updated

8 years ago
Flags: wanted1.9.2?
Attachment #400955 - Flags: approval1.9.2? → approval1.9.2+
Flags: wanted1.9.2? → wanted1.9.2+
http://hg.mozilla.org/releases/mozilla-1.9.2/rev/46421ae80897
status1.9.2: --- → beta1-fixed
Comment on attachment 400955 [details] [diff] [review]
patch v0 with update.sh etc.

Approved for 1.9.1.5, a=dveditz for release-drivers
Attachment #400955 - Flags: approval1.9.1.5? → approval1.9.1.5+
(Assignee)

Comment 11

8 years ago
http://hg.mozilla.org/releases/mozilla-1.9.1/rev/8754481f4c53
status1.9.1: ? → .5-fixed
Verified for 1.9.1.6 using video url. Video plays back smoothly with 1.9.1.6 where it jumps around for 1.9.1.5.

 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6pre) Gecko/20091119 Shiretoko/3.5.6pre (.NET CLR 3.5.30729)
Keywords: verified1.9.1
You need to log in before you can comment on or make changes to this bug.