mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
dd9173e4d3
- Bug 1146086: use promise to Init() in PlatformDecoderModule. r=jya,r=cpearce (aed679865) - partial of Bug 1128380: Add IsHardwareAccelerated implementation for AVCC and mac decoder. r=cpearce (8b376df05) - Bug 1192675: P1. Ensure VDA/VT APIs are only ever accessed from the same thread. r=cpearce (fa9c8de6a) - Bug 1178098 - Report why DXVA initialization failed to about:support. r=cpearce (0b06a28e9) - Bug 1167690 - Part 1: Hook up NPPVpluginIsPlayingAudio to the plugin process; r=josh (30df04ca2) - Bug 1167690 - Add NPAPI:AudioControl enums to npapi.h. r=josh (5369f6fa9) - Bug 1167690 - Part 2: Integrate plugins which support the NPAPI audio extensions with the Audio Channel Service; r=BenWa (145cecdc4) - Bug 1167690 - Part 3: Hook up NPNVmuteAudioBool to the plugin process; r=josh (36558b729) - Bug 1167690 - Part 4: Add support for testing plugin audio channel integration to the test plugin; r=josh (04af51882)
105 lines
3.1 KiB
C++
105 lines
3.1 KiB
C++
/* 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 AndroidDecoderModule_h_
|
|
#define AndroidDecoderModule_h_
|
|
|
|
#include "PlatformDecoderModule.h"
|
|
#include "AndroidSurfaceTexture.h"
|
|
|
|
#include "MediaCodec.h"
|
|
#include "TimeUnits.h"
|
|
#include "mozilla/Monitor.h"
|
|
|
|
#include <queue>
|
|
|
|
namespace mozilla {
|
|
|
|
typedef std::queue<nsRefPtr<MediaRawData>> SampleQueue;
|
|
|
|
class AndroidDecoderModule : public PlatformDecoderModule {
|
|
public:
|
|
virtual already_AddRefed<MediaDataDecoder>
|
|
CreateVideoDecoder(const VideoInfo& aConfig,
|
|
layers::LayersBackend aLayersBackend,
|
|
layers::ImageContainer* aImageContainer,
|
|
FlushableTaskQueue* aVideoTaskQueue,
|
|
MediaDataDecoderCallback* aCallback) override;
|
|
|
|
virtual already_AddRefed<MediaDataDecoder>
|
|
CreateAudioDecoder(const AudioInfo& aConfig,
|
|
FlushableTaskQueue* aAudioTaskQueue,
|
|
MediaDataDecoderCallback* aCallback) override;
|
|
|
|
|
|
AndroidDecoderModule() {}
|
|
virtual ~AndroidDecoderModule() {}
|
|
|
|
virtual bool SupportsMimeType(const nsACString& aMimeType) override;
|
|
|
|
virtual ConversionRequired
|
|
DecoderNeedsConversion(const TrackInfo& aConfig) const override;
|
|
};
|
|
|
|
class MediaCodecDataDecoder : public MediaDataDecoder {
|
|
public:
|
|
|
|
MediaCodecDataDecoder(MediaData::Type aType,
|
|
const nsACString& aMimeType,
|
|
widget::sdk::MediaFormat::Param aFormat,
|
|
MediaDataDecoderCallback* aCallback);
|
|
|
|
virtual ~MediaCodecDataDecoder();
|
|
|
|
virtual nsRefPtr<MediaDataDecoder::InitPromise> Init() override;
|
|
virtual nsresult Flush() override;
|
|
virtual nsresult Drain() override;
|
|
virtual nsresult Shutdown() override;
|
|
virtual nsresult Input(MediaRawData* aSample);
|
|
|
|
protected:
|
|
friend class AndroidDecoderModule;
|
|
|
|
MediaData::Type mType;
|
|
|
|
nsAutoCString mMimeType;
|
|
widget::sdk::MediaFormat::GlobalRef mFormat;
|
|
|
|
MediaDataDecoderCallback* mCallback;
|
|
|
|
widget::sdk::MediaCodec::GlobalRef mDecoder;
|
|
|
|
jni::ObjectArray::GlobalRef mInputBuffers;
|
|
jni::ObjectArray::GlobalRef mOutputBuffers;
|
|
|
|
nsCOMPtr<nsIThread> mThread;
|
|
|
|
// Only these members are protected by mMonitor.
|
|
Monitor mMonitor;
|
|
bool mFlushing;
|
|
bool mDraining;
|
|
bool mStopping;
|
|
|
|
SampleQueue mQueue;
|
|
// Durations are stored in microseconds.
|
|
std::queue<media::TimeUnit> mDurations;
|
|
|
|
virtual nsresult InitDecoder(widget::sdk::Surface::Param aSurface);
|
|
|
|
virtual nsresult Output(widget::sdk::BufferInfo::Param aInfo, void* aBuffer, widget::sdk::MediaFormat::Param aFormat, const media::TimeUnit& aDuration) { return NS_OK; }
|
|
virtual nsresult PostOutput(widget::sdk::BufferInfo::Param aInfo, widget::sdk::MediaFormat::Param aFormat, const media::TimeUnit& aDuration) { return NS_OK; }
|
|
virtual void Cleanup() {};
|
|
|
|
nsresult ResetInputBuffers();
|
|
nsresult ResetOutputBuffers();
|
|
|
|
void DecoderLoop();
|
|
nsresult GetInputBuffer(JNIEnv* env, int index, jni::Object::LocalRef* buffer);
|
|
virtual void ClearQueue();
|
|
};
|
|
|
|
} // namwspace mozilla
|
|
|
|
#endif
|