diff options
Diffstat (limited to 'dom/media/android/AndroidMediaReader.h')
-rw-r--r-- | dom/media/android/AndroidMediaReader.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/dom/media/android/AndroidMediaReader.h b/dom/media/android/AndroidMediaReader.h new file mode 100644 index 000000000..def85a343 --- /dev/null +++ b/dom/media/android/AndroidMediaReader.h @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ +#if !defined(AndroidMediaReader_h_) +#define AndroidMediaReader_h_ + +#include "mozilla/Attributes.h" +#include "MediaResource.h" +#include "MediaDecoderReader.h" +#include "ImageContainer.h" +#include "mozilla/layers/SharedRGBImage.h" + +#include "MPAPI.h" + +class nsACString; + +namespace mozilla { + +class AbstractMediaDecoder; + +namespace layers { +class ImageContainer; +} + +class AndroidMediaReader : public MediaDecoderReader +{ + nsCString mType; + MPAPI::Decoder *mPlugin; + bool mHasAudio; + bool mHasVideo; + nsIntRect mPicture; + nsIntSize mInitialFrame; + int64_t mVideoSeekTimeUs; + int64_t mAudioSeekTimeUs; + RefPtr<VideoData> mLastVideoFrame; + MozPromiseHolder<MediaDecoderReader::SeekPromise> mSeekPromise; + MozPromiseRequestHolder<MediaDecoderReader::MediaDataPromise> mSeekRequest; +public: + AndroidMediaReader(AbstractMediaDecoder* aDecoder, + const nsACString& aContentType); + + nsresult ResetDecode(TrackSet aTracks = TrackSet(TrackInfo::kAudioTrack, + TrackInfo::kVideoTrack)) override; + + bool DecodeAudioData() override; + bool DecodeVideoFrame(bool &aKeyframeSkip, int64_t aTimeThreshold) override; + + nsresult ReadMetadata(MediaInfo* aInfo, MetadataTags** aTags) override; + RefPtr<SeekPromise> Seek(SeekTarget aTarget, int64_t aEndTime) override; + + RefPtr<ShutdownPromise> Shutdown() override; + + class ImageBufferCallback : public MPAPI::BufferCallback { + typedef mozilla::layers::Image Image; + + public: + ImageBufferCallback(mozilla::layers::ImageContainer *aImageContainer); + void *operator()(size_t aWidth, size_t aHeight, + MPAPI::ColorFormat aColorFormat) override; + already_AddRefed<Image> GetImage(); + + private: + uint8_t *CreateI420Image(size_t aWidth, size_t aHeight); + + mozilla::layers::ImageContainer *mImageContainer; + RefPtr<Image> mImage; + }; + +}; + +} // namespace mozilla + +#endif |