diff options
Diffstat (limited to 'dom/media/webcodecs/EncoderTypes.h')
-rw-r--r-- | dom/media/webcodecs/EncoderTypes.h | 74 |
1 files changed, 67 insertions, 7 deletions
diff --git a/dom/media/webcodecs/EncoderTypes.h b/dom/media/webcodecs/EncoderTypes.h index d58d7c54c8..39f660203b 100644 --- a/dom/media/webcodecs/EncoderTypes.h +++ b/dom/media/webcodecs/EncoderTypes.h @@ -9,13 +9,14 @@ #include "mozilla/Maybe.h" #include "mozilla/dom/EncodedVideoChunk.h" +#include "mozilla/dom/MediaRecorderBinding.h" #include "mozilla/dom/VideoEncoderBinding.h" +#include "mozilla/dom/AudioEncoderBinding.h" #include "mozilla/dom/VideoFrame.h" #include "mozilla/dom/VideoFrameBinding.h" #include "nsStringFwd.h" #include "nsTLiteralString.h" #include "VideoDecoder.h" -#include "PlatformEncoderModule.h" namespace mozilla { @@ -24,6 +25,68 @@ class MediaByteBuffer; namespace dom { +class AudioEncoderConfigInternal { + public: + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AudioEncoderConfigInternal); + explicit AudioEncoderConfigInternal(const AudioEncoderConfig& aConfig); + explicit AudioEncoderConfigInternal( + const AudioEncoderConfigInternal& aConfig); + + void SetSpecific(const EncoderConfig::CodecSpecific& aSpecific); + + nsCString ToString() const; + + bool Equals(const AudioEncoderConfigInternal& aOther) const; + bool CanReconfigure(const AudioEncoderConfigInternal& aOther) const; + + // Returns an EncoderConfig struct with as many filled members as + // possible. + EncoderConfig ToEncoderConfig() const; + + already_AddRefed<WebCodecsConfigurationChangeList> Diff( + const AudioEncoderConfigInternal& aOther) const; + + nsString mCodec; + Maybe<uint32_t> mSampleRate; + Maybe<uint32_t> mNumberOfChannels; + Maybe<uint32_t> mBitrate; + BitrateMode mBitrateMode; + Maybe<EncoderConfig::CodecSpecific> mSpecific; + + private: + AudioEncoderConfigInternal(const nsAString& aCodec, + Maybe<uint32_t> aSampleRate, + Maybe<uint32_t> aNumberOfChannels, + Maybe<uint32_t> aBitRate, + BitrateMode aBitratemode); + ~AudioEncoderConfigInternal() = default; +}; + +class AudioEncoderTraits { + public: + static constexpr nsLiteralCString Name = "AudioEncoder"_ns; + using ConfigType = AudioEncoderConfig; + using ConfigTypeInternal = AudioEncoderConfigInternal; + using InputType = dom::AudioData; + using OutputConfigType = mozilla::dom::AudioDecoderConfigInternal; + using InputTypeInternal = mozilla::AudioData; + using OutputType = EncodedAudioChunk; + using OutputCallbackType = EncodedAudioChunkOutputCallback; + using MetadataType = EncodedAudioChunkMetadata; + + static bool IsSupported(const ConfigTypeInternal& aConfig); + static Result<UniquePtr<TrackInfo>, nsresult> CreateTrackInfo( + const ConfigTypeInternal& aConfig); + static bool Validate(const ConfigType& aConfig, nsCString& aErrorMessage); + static RefPtr<ConfigTypeInternal> CreateConfigInternal( + const ConfigType& aConfig); + static RefPtr<InputTypeInternal> CreateInputInternal( + const InputType& aInput, const VideoEncoderEncodeOptions& aOptions); + static already_AddRefed<OutputConfigType> EncoderConfigToDecoderConfig( + nsIGlobalObject* aGlobal, const RefPtr<MediaRawData>& aData, + const ConfigTypeInternal& mOutputConfig); +}; + class VideoEncoderConfigInternal { public: NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoEncoderConfigInternal); @@ -40,7 +103,7 @@ class VideoEncoderConfigInternal { bool CanReconfigure(const VideoEncoderConfigInternal& aOther) const; already_AddRefed<WebCodecsConfigurationChangeList> Diff( const VideoEncoderConfigInternal& aOther) const; - nsString ToString() const; + nsCString ToString() const; nsString mCodec; uint32_t mWidth; @@ -84,17 +147,14 @@ class VideoEncoderTraits { static bool IsSupported(const ConfigTypeInternal& aConfig); static bool CanEncodeVideo(const ConfigTypeInternal& aConfig); - static Result<UniquePtr<TrackInfo>, nsresult> CreateTrackInfo( - const ConfigTypeInternal& aConfig); static bool Validate(const ConfigType& aConfig, nsCString& aErrorMessage); static RefPtr<ConfigTypeInternal> CreateConfigInternal( const ConfigType& aConfig); static RefPtr<InputTypeInternal> CreateInputInternal( const InputType& aInput, const VideoEncoderEncodeOptions& aOptions); static already_AddRefed<OutputConfigType> EncoderConfigToDecoderConfig( - nsIGlobalObject* aGlobal, - const RefPtr<MediaRawData>& aData, - const ConfigTypeInternal& mOutputConfig); + nsIGlobalObject* aGlobal, const RefPtr<MediaRawData>& aData, + const ConfigTypeInternal& mOutputConfig); }; } // namespace dom |