Closed
Bug 1231855
Opened 9 years ago
Closed 9 years ago
Assertion failure: aStart <= aEnd, at ../../../dist/include/Intervals.h:56
Categories
(Core :: Audio/Video: Playback, defect, P2)
Tracking
()
RESOLVED
FIXED
mozilla46
People
(Reporter: bc, Assigned: kinetik)
References
()
Details
(Keywords: assertion, reproducible)
Attachments
(2 files)
152.17 KB,
text/plain
|
Details | |
4.05 KB,
patch
|
jya
:
review+
|
Details | Diff | Splinter Review |
1. http://free.txu.com/
2. Assertion failure: aStart <= aEnd, at ../../../dist/include/Intervals.h:56
Beta/43, Aurora/44, Nightly/45 Linux, OS X, Windows
Reporter | ||
Comment 1•9 years ago
|
||
forgot to mention similar though different issue with mp4_demuxer
See Also: → 1081931
Comment 2•9 years ago
|
||
could you please provide a backtrace or link to the crash report?
Reporter | ||
Comment 3•9 years ago
|
||
sorry, I forgot.
Comment 4•9 years ago
|
||
I can reproduce it with this video: http://free.txu.com/videos/TXU_HOLIDAY_GIF-WREATH_990x557.webm
It doesn't always happen.
Playing the video 2,3 times sometimes cause the assertion to occur. If not, I clear the cache and history and reload the video.
the issue arises in
WebMBufferedState::CalculateBufferedForRange as duration is negative:
(lldb) print mTimeMapping[end].mTimecode
(uint64_t) $0 = 32013000000
(lldb) print mTimeMapping[end-1].mTimecode
(uint64_t) $1 = 32074000000
Now, we could always return false if the previous cluster time is > the next one time
Matthew is this something you could look into?
Flags: needinfo?(kinetik)
Comment 5•9 years ago
|
||
note that i had to disable media.mp4.enabled to reproduce it
Assignee | ||
Comment 6•9 years ago
|
||
Yep, I'll take a look tomorrow.
Assignee: nobody → kinetik
Flags: needinfo?(kinetik)
Updated•9 years ago
|
status-firefox43:
--- → affected
status-firefox44:
--- → affected
status-firefox45:
--- → affected
Keywords: assertion
OS: Unspecified → All
Priority: -- → P2
Assignee | ||
Comment 7•9 years ago
|
||
(In reply to Jean-Yves Avenard [:jya] from comment #4)
> I can reproduce it with this video:
> http://free.txu.com/videos/TXU_HOLIDAY_GIF-WREATH_990x557.webm
That had me confused for a while. That video above is only 4 second long, but the timestamps in the debug output are around 32s. The timestamps in the video above are also consecutive and the file appears to be well formed.
It's actually *this* video: http://free.txu.com/videos/holiday.webm
And, indeed, this file is not well formed:
|+ Cluster at 6238473
| + Cluster timecode: 32.000s at 6238478
| + SimpleBlock (track number 1, 1 frame(s), timecode 32.032s = 00:00:32.032) at 6238482
| + SimpleBlock (track number 2, 1 frame(s), timecode 31.990s = 00:00:31.990) at 6238515
| + SimpleBlock (track number 1, 1 frame(s), timecode 32.074s = 00:00:32.074) at 6238522
| + SimpleBlock (track number 2, 1 frame(s), timecode 32.013s = 00:00:32.013) at 6238555
...with timestamps matching the debug output.
Anyway, we obviously shouldn't fatally assert here, so I'll post a fix tomorrow.
Assignee | ||
Comment 8•9 years ago
|
||
The file was produced with:
| + Muxing application: WonderShare Matroska Muxer at 4177
And the timecodes throughout the file are like this (not just the blocks I quoted earlier), where track 2 (A_VORBIS) has blocks after track 1 (V_VP8) but with timecodes before preceding blocks.
This file also violates the spec in another way, e.g.:
| + SimpleBlock (track number 1, 1 frame(s), timecode 31.990s = 00:00:31.990) at 6238440
|+ Cluster at 6238473
| + Cluster timecode: 32.000s at 6238478
[...]
| + SimpleBlock (track number 2, 1 frame(s), timecode 31.990s = 00:00:31.990) at 6238515
...where it has placed the audio for timecode 31.990 in a later Cluster than the corresponding video.
From the spec (note SHOULD is interpreted as MUST for muxers):
- All absolute (block + cluster) timecodes MUST be monotonically increasing.
- All timecodes are associated with the start time of the block.
- Audio blocks that contain the video key frame's timecode SHOULD be in the same cluster as the video key frame block.
- Audio blocks that have same absolute timecode as video blocks SHOULD be written before the video blocks.
FWIW, remuxing with "ffmpeg -i holiday.webm -vcodec copy -acodec copy holidayff.webm" produces a file that looks valid, with correctly ordered blocks.
Assignee | ||
Comment 9•9 years ago
|
||
Assignee | ||
Comment 10•9 years ago
|
||
Avoid inserting entries into the buffered parser's mappings if they violate the mapping's ordering invariants (and the WebM spec).
Attachment #8701333 -
Flags: review?(jyavenard)
Comment 11•9 years ago
|
||
Comment on attachment 8701333 [details] [diff] [review]
v0
Review of attachment 8701333 [details] [diff] [review]:
-----------------------------------------------------------------
I'm assuming not having the cluster in the cache has no consequences...
Attachment #8701333 -
Flags: review?(jyavenard) → review+
Assignee | ||
Comment 12•9 years ago
|
||
Assignee | ||
Comment 13•9 years ago
|
||
(In reply to Jean-Yves Avenard [:jya] from comment #11)
> I'm assuming not having the cluster in the cache has no consequences...
The parser only tracks blocks, not clusters, and this change causes out-of-order blocks to be excluded.
With an invalid file like this the behaviour was wrong with the old code and remains wrong with the new code, but it now tries to preserve the assumptions made by the parser (and required by the spec). I'm not sure what else we can do other than flat-out reject the file, but that could happen at an arbitrary point as you may need to parse the entire file before you detect that it's invalid.
(In reply to Matthew Gregan [:kinetik] from comment #12)
> https://treeherder.mozilla.org/#/jobs?repo=try&revision=f2952f6d3bcb
The change to WebMBufferedParser breaks dom/media/gtest/TestWebMBuffered.cpp because the file used in the test contains two out-of-order blocks. This push updates the test to exclude the out-of-order blocks.
Assignee | ||
Comment 14•9 years ago
|
||
https://hg.mozilla.org/integration/mozilla-inbound/rev/1fc8fc0fa9f4a040e11329a1b2d9330294dc5376
Bug 1231855 - Avoid inserting out of (timecode) order entries in WebMBufferedParser. r=jya
Comment 15•9 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 9 years ago
status-firefox46:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla46
You need to log in
before you can comment on or make changes to this bug.
Description
•