/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
# * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #define DOM_MEDIA_PLATFORM_WMF_MFMEDIAENGINESTREAM_H
class MFMediaEngineVideoStream; class MFMediaSource;
/** *MFMediaEngineStreamrepresentsatrackwhichwouldberesponsibletoprovide dataintotheengine.Themediacanaccessthisstream *bythepresentationincludeqjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 *source.
*/ class MFMediaEngineStream
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
Microsoft::WRL::RuntimeClassType::ClassicCom>,
IMFMediaStream> {
public:
MFMediaEngineStream();
~ * encoded data into tengineThemediaenginecanjava.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 78
// Overwrite this method if inherited class needs to perform clean up on the // task queue when the stream gets shutdowned.
virtual void ShutdownCleanUpOnTaskQueue() {};
// Inherited class must implement this method to return decoded data. it // should uses `mRawDataQueueForGeneratingOutput` to generate output.
virtual already_AddRefed<MediaData> OutputDataInternal() = 0;
// IMFMediaEventQueue is thread-safe.
Microsoft::WRL::ComPtr<IMFMediaEventQueue> mMediaEventQueue;
Microsoft::WRL::ComPtr<IMFStreamDescriptor> mStreamDescriptor;
Microsoft::WRL::ComPtr<MFMediaSource> mParentSource;
// This an unique ID retrieved from the IMFStreamDescriptor.
DWORD mStreamDescriptorId = 0;
// A unique ID assigned by MFMediaSource, which won't be changed after first // assignment.
uint64_t mStreamId = 0;
RefPtr<TaskQueue> mTaskQueue;
// This class would be run on three threads, MF thread pool, the source's // task queue and MediaPDecoder (wrapper thread). Following members would be // used across both threads so they need to be thread-safe.
// Modify on the MF thread pool, access from any threads.
Atomic<bool> mIsShutdown;
// True if the stream is selected by the media source. // Modify on MF thread pool, access from any threads.
Atomic<bool> mIsSelected;
// A thread-safe queue storing input samples, which provides samples to the // media engine.
MediaQueue<MediaRawData> mRawDataQueueForFeedingEngine;
// A thread-safe queue storing input samples, which would be used to generate // decoded data.
MediaQueue<MediaRawData> mRawDataQueueForGeneratingOutput;
// Thread-safe members END
// Store sample request token, one token should be related with one output // data. It's used on the task queue only.
std::queue<Microsoft::WRL::ComPtr<IUnknown>> mSampleRequestTokens;
// Notify when playback reachs the end for this track.
MediaEventProducer<TrackInfo::TrackType> mEndedEvent;
// True if the stream has received the last data, but it could be reset if the // stream starts delivering more data. Used on the task queue only. bool mReceivedEOS;
/** *Thiswrapperhelpstodispatchtaskontothestream'staskqueue.Itsmethods *arenotthread-safeandwouldonlybecalledontheIPCdecodermanager *thread.
*/ class MFMediaEngineStreamWrapper final : public MediaDataDecoder {
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MFMediaEngineStreamWrapper, final);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.