gecko-dev/dom/media/mediasource/MediaSourceDecoder.h
JW Wang d201fcefe3 Bug 1427931. P1 - remove MediaDecoder::PinForSeek/UnpinForSeek. r=bechen,gerald
PinForSeek() is called only when playback reaches the end. In other words,
it is not called for most cases of seeking. It should be OK not to call it at
all during seeking.

MozReview-Commit-ID: 1xXX1321bO7

--HG--
extra : rebase_source : df8ba3f59da2a337b456546af4b54abaddfe38a9
extra : intermediate-source : 0a70419f9ce639ac0784a0632db4598d6be511f8
extra : source : bfddad9b922386c91fcfa7657a7ac274991d15f4
2017-12-19 17:56:52 +08:00

95 lines
2.5 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef MOZILLA_MEDIASOURCEDECODER_H_
#define MOZILLA_MEDIASOURCEDECODER_H_
#include "MediaDecoder.h"
#include "mozilla/RefPtr.h"
namespace mozilla {
class MediaDecoderStateMachine;
class MediaSourceDemuxer;
namespace dom {
class MediaSource;
} // namespace dom
DDLoggedTypeDeclNameAndBase(MediaSourceDecoder, MediaDecoder);
class MediaSourceDecoder
: public MediaDecoder
, public DecoderDoctorLifeLogger<MediaSourceDecoder>
{
public:
explicit MediaSourceDecoder(MediaDecoderInit& aInit);
nsresult Load(nsIPrincipal* aPrincipal);
media::TimeIntervals GetSeekable() override;
media::TimeIntervals GetBuffered() override;
void Shutdown() override;
void AttachMediaSource(dom::MediaSource* aMediaSource);
void DetachMediaSource();
void Ended(bool aEnded);
// Return the duration of the video in seconds.
double GetDuration() override;
void SetInitialDuration(int64_t aDuration);
void SetMediaSourceDuration(double aDuration);
MediaSourceDemuxer* GetDemuxer()
{
return mDemuxer;
}
already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override;
bool IsTransportSeekable() override { return true; }
// Returns a string describing the state of the MediaSource internal
// buffered data. Used for debugging purposes.
void GetMozDebugReaderData(nsACString& aString) override;
void AddSizeOfResources(ResourceSizes* aSizes) override;
MediaDecoderOwner::NextFrameStatus NextFrameBufferedStatus() override;
bool IsMSE() const override { return true; }
void NotifyInitDataArrived();
// Called as data appended to the source buffer or EOS is called on the media
// source. Main thread only.
void NotifyDataArrived();
private:
MediaDecoderStateMachine* CreateStateMachine();
void DoSetMediaSourceDuration(double aDuration);
media::TimeInterval ClampIntervalToEnd(const media::TimeInterval& aInterval);
bool CanPlayThroughImpl() override;
RefPtr<nsIPrincipal> mPrincipal;
// The owning MediaSource holds a strong reference to this decoder, and
// calls Attach/DetachMediaSource on this decoder to set and clear
// mMediaSource.
dom::MediaSource* mMediaSource;
RefPtr<MediaSourceDemuxer> mDemuxer;
bool mEnded;
};
} // namespace mozilla
#endif /* MOZILLA_MEDIASOURCEDECODER_H_ */