Closed Bug 1496474 Opened 6 years ago Closed 6 years ago

The seekbar doesn't jump back the the beginning while looping

Categories

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

defect

Tracking

()

RESOLVED DUPLICATE of bug 1498440
Tracking Status
geckoview62 --- wontfix
firefox-esr60 --- wontfix
firefox62 --- wontfix
firefox63 --- wontfix
firefox64 --- wontfix
firefox65 --- fixed

People

(Reporter: chunmin, Assigned: chunmin)

References

(Blocks 1 open bug)

Details

(Keywords: regression)

Attachments

(2 files, 4 obsolete files)

I occasionally saw that the seekbar doesn't jump back the the beginning while looping. I cannot reproduce it every time, but it happens.

step to reproduce:
1. Access the https://goo.gl/tuporf
2. Activate the loop option.
3. Play the audio.
4. Seek the audio to 2:52 and let it finish

expect:
The seekbar will jump back to the beginning while the audio keeps playing/looping

Actual:
The seekbar stays at the end while the audio keeps playing/looping
Assignee: nobody → cchang
Blocks: 654787
Keywords: regression
See Also: → 1487797
URL: 1413576
URL: 1413576
See Also: → 1413576
Rank: 15
Priority: -- → P2
QA Contact: drno
QA Contact: drno
Attached patch log.diffSplinter Review
For the log[0], I guess this happens when we seek to EOS directly.
When ReaderProxy::Seek is called, the mLastAudioEndTime is reset to 0[1]. When seeking to EOS directly, mAudioDuration is set to mLastAudioEndTime, which is 0. Therefore, ReaderProxy::AdjustByLooping doesn't work and the time in MDSM cannot be corrected[4].

[1] https://searchfox.org/mozilla-central/rev/c56977420df7a1b692ce0f7e499ddb364d9fd7b2/dom/media/ReaderProxy.cpp#174
[2] https://searchfox.org/mozilla-central/rev/c56977420df7a1b692ce0f7e499ddb364d9fd7b2/dom/media/ReaderProxy.cpp#90
[3] https://searchfox.org/mozilla-central/rev/c56977420df7a1b692ce0f7e499ddb364d9fd7b2/dom/media/ReaderProxy.cpp#316-318
[4] https://searchfox.org/mozilla-central/rev/c56977420df7a1b692ce0f7e499ddb364d9fd7b2/dom/media/MediaDecoderStateMachine.cpp#3555,3565

[0] log
-------------------------------------------------------------------------------------------------------------------
## RefPtr<ReaderProxy::SeekPromise> mozilla::ReaderProxy::Seek(const mozilla::SeekTarget &) >> 174.660000
[Child 28510: MediaPDecoder #2]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] Reset()
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] Reset()
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FastSeek(174.660000) avgFrameLen=84038.122994 mParsedFramesDuration=174.602448 offset=261066
[Child 28510, MediaPDecoder #3] WARNING: We should have found a point: file /Users/cchang/Work/gecko/dom/media/flac/FlacDemuxer.cpp, line 773
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] ScanUntil(174.660000 avgFrameLen=84038.122994 mParsedFramesDuration=174.602448 offset=0
[Child 28510: MediaPDecoder #3]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() Begin offset=14939164 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
## RefPtr<ReaderProxy::AudioDataPromise> mozilla::ReaderProxy::RequestAudioData()
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples(1) Begin offset=14939164 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() Begin offset=14939164 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #1]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetNextFrame() EOS
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples() End mSamples.Length=0 aNumSamples=0 offset=14939164 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
## RefPtr<ReaderProxy::AudioDataPromise> mozilla::ReaderProxy::OnAudioDataRequestFailed(const mozilla::MediaResult &) >> aError: -2140274680
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] Reset()
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] Reset()
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FastSeek(0.000000) avgFrameLen=84038.122994 mParsedFramesDuration=174.602448 offset=261066
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] ScanUntil(0.000000 avgFrameLen=84038.122994 mParsedFramesDuration=174.602448 offset=0
[Child 28510: MediaPDecoder #3]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FastSeek(0.000000) avgFrameLen=84038.122994 mParsedFramesDuration=174.602448 offset=261066
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples(1) Begin offset=261066 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() Begin offset=261066 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() End time=0.000000 offset=264217 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #1]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetNextFrame() Begin(time=0.000000 offset=261066 size=3145)
[Child 28510: MediaPDecoder #1]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples() End mSamples.Length=1 aNumSamples=-1 offset=264217 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
## RefPtr<ReaderProxy::AudioDataPromise> mozilla::ReaderProxy::OnAudioDataRequestCompleted(RefPtr<mozilla::AudioData>) >> aAudio: 0.000000
## RefPtr<ReaderProxy::AudioDataPromise> mozilla::ReaderProxy::RequestAudioData()
[Child 28510: MediaPDecoder #2]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples(1) Begin offset=264217 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #2]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() Begin offset=264217 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #2]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] FindNext() End time=0.104489 offset=267387 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
[Child 28510: MediaPDecoder #2]: D/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetNextFrame() Begin(time=0.104489 offset=264211 size=3170)
[Child 28510: MediaPDecoder #2]: V/MediaDemuxer FlacTrackDemuxer[0x1820c2740] GetSamples() End mSamples.Length=1 aNumSamples=-1 offset=267387 mParsedFramesDuration=174.602448 mTotalFrameLen=14673262
## RefPtr<ReaderProxy::AudioDataPromise> mozilla::ReaderProxy::OnAudioDataRequestCompleted(RefPtr<mozilla::AudioData>) >> aAudio: 0.104489
Attachment #9018462 - Attachment is obsolete: true
Attachment #9018462 - Attachment is obsolete: false
Attachment #9018463 - Attachment is obsolete: true
Attachment #9018463 - Attachment is obsolete: false
Attachment #9018462 - Attachment description: Bug 1497629 - Part 2: Split the logic to adjust the start-time and looping offset for audio data. , alwu → Bug 1496474 - P1. Split the logic to adjust the start-time and looping offset for audio data.
Attachment #9018463 - Attachment description: Bug 1497629 - Part 3: Make sure the looping offset is zero when the duration of the audio track is unset. , alwu → Bug 1496474 - P2. Make sure the looping offset is zero when the duration of the audio track is unset.
Depends on D8602
Depends on D9179
I think this won't happen when we move the looping mechanism to MDSM. 

If we seeks to EOS directly, MDSM will complete the seek and back to decoding state [0,1,2,3]. After entering to decoding state, we will move to complete state if the decoding is finished [4]. If looping is enabled, the normal looping works then after ending the play.

Since we are about to move the looping mechanism to MDSM(bug 1498440), I think this problem can be solved then.

[0] https://searchfox.org/mozilla-central/rev/c56977420df7a1b692ce0f7e499ddb364d9fd7b2/dom/media/MediaDecoderStateMachine.cpp#996
[1] https://searchfox.org/mozilla-central/rev/9cb3e241502a2d47e2d5057ca771324a446b6695/dom/media/MediaDecoderStateMachine.cpp#1323
[2] https://searchfox.org/mozilla-central/rev/9cb3e241502a2d47e2d5057ca771324a446b6695/dom/media/MediaDecoderStateMachine.cpp#2488
[3] https://searchfox.org/mozilla-central/rev/9cb3e241502a2d47e2d5057ca771324a446b6695/dom/media/MediaDecoderStateMachine.cpp#900
[4] https://searchfox.org/mozilla-central/rev/9cb3e241502a2d47e2d5057ca771324a446b6695/dom/media/MediaDecoderStateMachine.cpp#2305
Attached file seek_to_eos.zip
It's not easy to reproduce this problem in a reliable way. Since we need to seek to EOS directly, it depends on how we implement "seek" in different demuxers.

The test page attached can reproduce this problem on my laptop now. The times for seeking to EOS directly varies on different audio files and formats. If the audio source is changed, it needs to find another specific time as the seek point.

I am going to stop fixing the problem in ReaderProxy since we are about to move the looping mechanism to MDSM. Simply upload a test page for further checking.
I think bug1498440 also fixed this problem, now I can't reproduce this issue on the latest Nightly.
Free feel to reopen if you see this issue again.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → DUPLICATE
Attachment #9018464 - Attachment is obsolete: true
Attachment #9018465 - Attachment is obsolete: true
Attachment #9018463 - Attachment is obsolete: true
Attachment #9018462 - Attachment is obsolete: true
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: