Open Bug 1383603 Opened 3 years ago Updated 1 year ago

Assertion failure: !mDuration.IsNegative() (Frame must have non-negative duration.) [@ mozilla::VideoData::VideoData]

Categories

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

defect

Tracking

()

Tracking Status
firefox-esr52 --- wontfix
firefox-esr60 --- affected
firefox56 --- wontfix
firefox57 --- wontfix
firefox58 --- wontfix
firefox59 --- wontfix
firefox64 --- wontfix
firefox65 --- affected
firefox66 --- affected

People

(Reporter: tsmith, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, testcase)

Attachments

(1 file)

Attached video test_case.webm
Assertion failure: !mDuration.IsNegative() (Frame must have non-negative duration.), at src/dom/media/MediaData.cpp:185

#0 0x7f757dcb7578 in mozilla::VideoData::VideoData(long, mozilla::media::TimeUnit const&, mozilla::media::TimeUnit const&, bool, mozilla::media::TimeUnit const&, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits>, unsigned int) src/dom/media/MediaData.cpp:185:3
#1 0x7f757dcb8bdc in mozilla::VideoData::CreateAndCopyData(mozilla::VideoInfo const&, mozilla::layers::ImageContainer*, long, mozilla::media::TimeUnit const&, mozilla::media::TimeUnit const&, mozilla::VideoData::YCbCrBuffer const&, bool, mozilla::media::TimeUnit const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::KnowsCompositor*) src/dom/media/MediaData.cpp:331:27
#2 0x7f757e1a0dcf in mozilla::FFmpegVideoDecoder<46465650>::DoDecode(mozilla::MediaRawData*, unsigned char*, int, bool*, nsTArray<RefPtr<mozilla::MediaData> >&) src/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp:346:5
#3 0x7f757e19fc56 in mozilla::FFmpegVideoDecoder<46465650>::DoDecode(mozilla::MediaRawData*, bool*, nsTArray<RefPtr<mozilla::MediaData> >&) src/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp:214:26
#4 0x7f757e19f806 in mozilla::FFmpegVideoDecoder<46465650>::ProcessDecode(mozilla::MediaRawData*) src/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp:180:20
#5 0x7f757e1a3d92 in decltype (((*{parm#1}).*{parm#2})((((Get<0ul>)({parm#3})).PassAsParameter)())) mozilla::detail::RunnableMethodArguments<mozilla::MediaRawData*>::applyImpl<mozilla::FFmpegDataDecoder<46465650>, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*), StoreRefPtrPassByPtr<mozilla::MediaRawData>, 0ul>(mozilla::FFmpegDataDecoder<46465650>*, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*), mozilla::Tuple<StoreRefPtrPassByPtr<mozilla::MediaRawData> >&, mozilla::IndexSequence<0ul>) src/obj-firefox/dist/include/nsThreadUtils.h:1158:12
#6 0x7f757e1a3cfc in decltype (applyImpl({parm#1}, {parm#2}, (*this).mArguments, (mozilla::IndexSequence<0ul>)())) mozilla::detail::RunnableMethodArguments<mozilla::MediaRawData*>::apply<mozilla::FFmpegDataDecoder<46465650>, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*)>(mozilla::FFmpegDataDecoder<46465650>*, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*)) src/obj-firefox/dist/include/nsThreadUtils.h:1164:12
#7 0x7f757e1a3c86 in mozilla::detail::MethodCall<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true>, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*), mozilla::FFmpegDataDecoder<46465650>, mozilla::MediaRawData*>::Invoke() src/obj-firefox/dist/include/mozilla/MozPromise.h:1369:18
#8 0x7f757e1a39c6 in mozilla::detail::ProxyRunnable<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true>, RefPtr<mozilla::MozPromise<nsTArray<RefPtr<mozilla::MediaData> >, mozilla::MediaResult, true> > (mozilla::FFmpegDataDecoder<46465650>::*)(mozilla::MediaRawData*), mozilla::FFmpegDataDecoder<46465650>, mozilla::MediaRawData*>::Run() src/obj-firefox/dist/include/mozilla/MozPromise.h:1394:42
#9 0x7f7579a4a515 in mozilla::TaskQueue::Runner::Run() src/xpcom/threads/TaskQueue.cpp:246:12
#10 0x7f7579a891ae in nsThreadPool::Run() src/xpcom/threads/nsThreadPool.cpp:225:14
#11 0x7f7579a8962c in non-virtual thunk to nsThreadPool::Run() src/xpcom/threads/nsThreadPool.cpp:154:15
#12 0x7f7579a80a1c in nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1579:14
#13 0x7f7579a86780 in NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:530:10
#14 0x7f757a5f2a54 in mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:339:20
#15 0x7f757a53da87 in MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:321:10
#16 0x7f757a53d919 in MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:294:3
#17 0x7f7579a77acb in nsThread::ThreadFunc(void*) src/xpcom/threads/nsThread.cpp:507:11
#18 0x7f75953ed5ad in _pt_root src/nsprpub/pr/src/pthreads/ptthread.c:216:5
#19 0x7f75989f66b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
#20 0x7f7597a7f3dc in clone /build/glibc-bfm8X4/glibc-2.23/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:109
Since this is a fuzzy test, should we just discard frames with negative durations?
Flags: needinfo?(jyavenard)
We could handle it differently in the decoder I guess, or better in the demuxer. Returning an error instead of the frame.
Flags: needinfo?(jyavenard)
The exact assertion has changed over time, but this testcase ultimately fails as far back as a year ago (which is the furthest back mozregression can bisect debug builds). Confirmed that trunk remains affected too.
Has Regression Range: --- → no
You need to log in before you can comment on or make changes to this bug.