Open Bug 1414444 Opened 2 years ago Updated 1 year ago

Assertion failure: aTime >= 0.0 (Cannot seek to a negative value.) [@ mozilla::MediaDecoder::Seek]

Categories

(Core :: Audio/Video: Playback, defect, P3)

58 Branch
defect

Tracking

()

Tracking Status
firefox-esr52 --- unaffected
firefox-esr60 --- affected
firefox56 --- unaffected
firefox57 --- unaffected
firefox58 --- wontfix
firefox66 --- wontfix
firefox67 --- affected
firefox68 --- affected

People

(Reporter: tsmith, Assigned: ayang)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, testcase)

Attachments

(2 files)

Attached video testcase.mp4
Assertion failure: aTime >= 0.0 (Cannot seek to a negative value.), at /src/dom/media/MediaDecoder.cpp:693

#0 mozilla::MediaDecoder::Seek(double, mozilla::SeekTarget::Type) /src/dom/media/MediaDecoder.cpp:690:3
#1 mozilla::MediaDecoder::DurationChanged() /src/dom/media/MediaDecoder.cpp:1075:5
#2 mozilla::ChannelMediaDecoder::DurationChanged() /src/dom/media/ChannelMediaDecoder.cpp:396:17
#3 mozilla::WatchManager<mozilla::MediaDecoder>::PerCallbackWatcher::DoNotify() /src/obj-firefox/dist/include/mozilla/StateWatching.h:279:9
#4 mozilla::detail::RunnableMethodImpl<mozilla::WatchManager<mozilla::MediaDecoder>::PerCallbackWatcher*, void (mozilla::WatchManager<mozilla::MediaDecoder>::PerCallbackWatcher::*)(), true, (mozilla::RunnableKind)0>::Run() /src/obj-firefox/dist/include/nsThreadUtils.h:1192:13
#5 mozilla::AutoTaskDispatcher::DrainDirectTasks() /src/obj-firefox/dist/include/mozilla/TaskDispatcher.h:105:10
#6 mozilla::AutoTaskDispatcher::TaskGroupRunnable::Run() /src/obj-firefox/dist/include/mozilla/TaskDispatcher.h:206:9
#7 mozilla::EventTargetWrapper::Runner::Run() /src/xpcom/threads/AbstractThread.cpp:154:32
#8 nsThread::ProcessNextEvent(bool, bool*) /src/xpcom/threads/nsThread.cpp:1037:14
#9 NS_ProcessNextEvent(nsIThread*, bool) /src/xpcom/threads/nsThreadUtils.cpp:513:10
#10 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) /src/ipc/glue/MessagePump.cpp:97:21
#11 MessageLoop::RunInternal() /src/ipc/chromium/src/base/message_loop.cc:326:10
#12 MessageLoop::Run() /src/ipc/chromium/src/base/message_loop.cc:299:3
#13 nsBaseAppShell::Run() /src/widget/nsBaseAppShell.cpp:158:27
#14 nsAppStartup::Run() /src/toolkit/components/startup/nsAppStartup.cpp:288:30
#15 XREMain::XRE_mainRun() /src/toolkit/xre/nsAppRunner.cpp:4675:22
#16 XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) /src/toolkit/xre/nsAppRunner.cpp:4837:8
#17 XRE_main(int, char**, mozilla::BootstrapConfig const&) /src/toolkit/xre/nsAppRunner.cpp:4932:21
#18 do_main(int, char**, char**) /src/browser/app/nsBrowserApp.cpp:231:22
#19 main /src/browser/app/nsBrowserApp.cpp:304:16
#20 __libc_start_main /build/glibc-bfm8X4/glibc-2.23/csu/../csu/libc-start.c:291
#21 _start (firefox+0x41ebe4)
Flags: in-testsuite?
INFO: Last good revision: aecaa85bb1d9d8b7d2cbd9ab84eb6dbc0ed9eee8
INFO: First bad revision: 4e892b27c2f112e61a74d1bd75cc1d73ff91e2b2
INFO: Pushlog:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=aecaa85bb1d9d8b7d2cbd9ab84eb6dbc0ed9eee8&tochange=4e892b27c2f112e61a74d1bd75cc1d73ff91e2b2
Blocks: 1387798
Has Regression Range: --- → yes
Flags: needinfo?(ayang)
Invalid 'trun' table.
Assignee: nobody → ayang
Flags: needinfo?(ayang)
(In reply to Ryan VanderMeulen [:RyanVM] from comment #1)
> INFO: Last good revision: aecaa85bb1d9d8b7d2cbd9ab84eb6dbc0ed9eee8
> INFO: First bad revision: 4e892b27c2f112e61a74d1bd75cc1d73ff91e2b2
> INFO: Pushlog:
> https://hg.mozilla.org/integration/autoland/
> pushloghtml?fromchange=aecaa85bb1d9d8b7d2cbd9ab84eb6dbc0ed9eee8&tochange=4e89
> 2b27c2f112e61a74d1bd75cc1d73ff91e2b2

It's because ByteReader doesn't return any error before that changeset. It just uses zero when failing to read anything.
Incorrect 'trun' flag '0xFFFF' causes this problem.
Comment on attachment 8926219 [details]
Bug 1414444 - add moof only when it is valid.

https://reviewboard.mozilla.org/r/197474/#review202764

::: media/libstagefright/binding/MoofParser.cpp:67
(Diff revision 1)
>        mInitRange = MediaByteRange(0, box.Range().mEnd);
>        ParseMoov(box);
>      } else if (box.IsType("moof")) {
>        Moof moof(box, mTrex, mMvhd, mMdhd, mEdts, mSinf, &mLastDecodeTime, mIsAudio);
>  
>        if (!moof.IsValid() && !box.Next().IsAvailable()) {

change the test here if it isnt valid.

and if it's complete, but invalid, somehow it would be nice to have the error reported than just ignoree.
Attachment #8926219 - Flags: review?(jyavenard) → review-
You need to log in before you can comment on or make changes to this bug.