1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 #if !defined(AndroidMediaReader_h_) 7 #define AndroidMediaReader_h_ 8 9 #include "mozilla/Attributes.h" 10 #include "MediaResource.h" 11 #include "MediaDecoderReader.h" 12 #include "ImageContainer.h" 13 #include "mozilla/layers/SharedRGBImage.h" 14 15 #include "MPAPI.h" 16 17 class nsACString; 18 19 namespace mozilla { 20 21 class AbstractMediaDecoder; 22 23 namespace layers { 24 class ImageContainer; 25 } 26 27 class AndroidMediaReader : public MediaDecoderReader 28 { 29 nsCString mType; 30 MPAPI::Decoder *mPlugin; 31 bool mHasAudio; 32 bool mHasVideo; 33 nsIntRect mPicture; 34 nsIntSize mInitialFrame; 35 int64_t mVideoSeekTimeUs; 36 int64_t mAudioSeekTimeUs; 37 RefPtr<VideoData> mLastVideoFrame; 38 MozPromiseHolder<MediaDecoderReader::SeekPromise> mSeekPromise; 39 MozPromiseRequestHolder<MediaDecoderReader::MediaDataPromise> mSeekRequest; 40 public: 41 AndroidMediaReader(AbstractMediaDecoder* aDecoder, 42 const nsACString& aContentType); 43 44 nsresult ResetDecode(TrackSet aTracks = TrackSet(TrackInfo::kAudioTrack, 45 TrackInfo::kVideoTrack)) override; 46 47 bool DecodeAudioData() override; 48 bool DecodeVideoFrame(bool &aKeyframeSkip, int64_t aTimeThreshold) override; 49 50 nsresult ReadMetadata(MediaInfo* aInfo, MetadataTags** aTags) override; 51 RefPtr<SeekPromise> Seek(SeekTarget aTarget, int64_t aEndTime) override; 52 53 RefPtr<ShutdownPromise> Shutdown() override; 54 55 class ImageBufferCallback : public MPAPI::BufferCallback { 56 typedef mozilla::layers::Image Image; 57 58 public: 59 ImageBufferCallback(mozilla::layers::ImageContainer *aImageContainer); 60 void *operator()(size_t aWidth, size_t aHeight, 61 MPAPI::ColorFormat aColorFormat) override; 62 already_AddRefed<Image> GetImage(); 63 64 private: 65 uint8_t *CreateI420Image(size_t aWidth, size_t aHeight); 66 67 mozilla::layers::ImageContainer *mImageContainer; 68 RefPtr<Image> mImage; 69 }; 70 71 }; 72 73 } // namespace mozilla 74 75 #endif 76