mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
76c2cfb906
- Bug 1232902. Update ANGLE to chromium/2592 (89d3d3cfad) - Bug 1251375. Update to ANGLE/2653 (98691dfd84) - bits of Bug 1225280. Update ANGLE to chromium/2572. (b5eeadcb4e) - Bug 1251375 - Cross compilation fixup. r=upstream (737d8f8554) - rename back (e1ef46b16a) - Bug 1261129: Make VP9 sample data const. r=kentuckyfriedtakahe (811eead31b) - Bug 1263839 - WebM is now actually a VP9 sample; r=me (c6568d6d98) - Bug 1263839: P2. Force re-run of VP9 benchmark based on a version check. r=kentuckyfriedtakahe (358409a235) - Bug 1235503 - Fix -Wunreachable-code warnings in dom/media/. r=jya (dc6bebb141) - Bug 1251184: [quicktime] P1. Report video/quicktime mimetype when sniffing. r=cpearce (056dda066a) - Bug 1251184: [quicktime] P2. Use external plugin if available over native playback. r=cpearce (6f34c09ab6) - Bug 1255050 - [1.1] Restrict media plugin decoder usage to Android ICS. r=snorp (ae801e040c) - Bug 1229657: [MSE] Returns NotSupportedError if mimetype is invalid or not supported. r=gerald (a81df7babf) - change errors returns (18b81f684e) - rearrange to match gecko code (333c4c5f3a) - Bug 1239607 - Let platform layer decide which codec to support and how to configure it. r=sotaro (63812a44d1) - Bug 1248507 - p1. Pass DecoderDoctorDiagnostics to PDMs&more - r=jya (4175551833) - Bug 1248507 - p2. DecoderDoctorDiagnostics boilerplate - r=jya (cb25b71956) - Bug 1208371 - Forward declare DOMMediaStream in HTMLMediaElement.h. r=jesup (896080a020) - Bug 1248507 - p3. Use DecoderDoctorDiagnostics - r=jya,bz (181966589e) - Bug 1248507 - p4. DecoderDoctor base console message - r=bz (c5704ad2fe) - Bug 1055776 - Move namespaceURI, prefix, localName from Node to Element; r=bz (ba7a18385d) - Bug 842818 - Expose WebCrypto API to workers r=baku (966e5f3e75) - Bug 1227790 - Update MediaKeyStatuses to include "released", "output-restricted" and "status-pending". r=bz (d9e7ddb298) - Bug 1256046 - Hide MozPowerManager from the Web; r=khuey,bzbarsky (ec1da24251) - Bug 1259581: Remove MOZ_MEDIA_NAVIGATOR. r=jesup (023a114462) - Bug 1254956 - Implement Node.rootNode. r=Ms2ger,smaug (0133a41059) - Bug 1264409 - Make last transaction ID available via nsIDOMWindowUtils, and pass transaction ID through MozAfterPaint. r=mattwoodrow,mrbkap (51184de1af)
145 lines
4.0 KiB
C++
145 lines
4.0 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<RefPtr<MediaRawData>> SampleQueue;
|
|
|
|
class AndroidDecoderModule : public PlatformDecoderModule {
|
|
public:
|
|
already_AddRefed<MediaDataDecoder>
|
|
CreateVideoDecoder(const VideoInfo& aConfig,
|
|
layers::LayersBackend aLayersBackend,
|
|
layers::ImageContainer* aImageContainer,
|
|
FlushableTaskQueue* aVideoTaskQueue,
|
|
MediaDataDecoderCallback* aCallback,
|
|
DecoderDoctorDiagnostics* aDiagnostics) override;
|
|
|
|
already_AddRefed<MediaDataDecoder>
|
|
CreateAudioDecoder(const AudioInfo& aConfig,
|
|
FlushableTaskQueue* aAudioTaskQueue,
|
|
MediaDataDecoderCallback* aCallback,
|
|
DecoderDoctorDiagnostics* aDiagnostics) override;
|
|
|
|
|
|
AndroidDecoderModule() {}
|
|
virtual ~AndroidDecoderModule() {}
|
|
|
|
bool SupportsMimeType(const nsACString& aMimeType,
|
|
DecoderDoctorDiagnostics* aDiagnostics) const override;
|
|
|
|
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();
|
|
|
|
RefPtr<MediaDataDecoder::InitPromise> Init() override;
|
|
nsresult Flush() override;
|
|
nsresult Drain() override;
|
|
nsresult Shutdown() override;
|
|
nsresult Input(MediaRawData* aSample) override;
|
|
const char* GetDescriptionName() const override
|
|
{
|
|
return "android decoder";
|
|
}
|
|
|
|
protected:
|
|
enum ModuleState {
|
|
kDecoding = 0,
|
|
kFlushing,
|
|
kDrainQueue,
|
|
kDrainDecoder,
|
|
kDrainWaitEOS,
|
|
kStopping,
|
|
kShutdown
|
|
};
|
|
|
|
friend class AndroidDecoderModule;
|
|
|
|
static const char* ModuleStateStr(ModuleState aState);
|
|
|
|
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();
|
|
|
|
nsresult GetInputBuffer(JNIEnv* env, int index, jni::Object::LocalRef* buffer);
|
|
bool WaitForInput();
|
|
MediaRawData* PeekNextSample();
|
|
nsresult QueueSample(const MediaRawData* aSample);
|
|
nsresult QueueEOS();
|
|
void HandleEOS(int32_t aOutputStatus);
|
|
media::TimeUnit GetOutputDuration();
|
|
nsresult ProcessOutput(widget::sdk::BufferInfo::Param aInfo,
|
|
widget::sdk::MediaFormat::Param aFormat,
|
|
int32_t aStatus);
|
|
ModuleState State() const;
|
|
void State(ModuleState aState);
|
|
void DecoderLoop();
|
|
|
|
virtual void ClearQueue();
|
|
|
|
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;
|
|
|
|
ModuleState mState;
|
|
|
|
SampleQueue mQueue;
|
|
// Durations are stored in microseconds.
|
|
std::queue<media::TimeUnit> mDurations;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif
|