diff options
Diffstat (limited to 'dom/media/encoder/EncodedFrame.h')
-rw-r--r-- | dom/media/encoder/EncodedFrame.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/dom/media/encoder/EncodedFrame.h b/dom/media/encoder/EncodedFrame.h new file mode 100644 index 0000000000..e76babef89 --- /dev/null +++ b/dom/media/encoder/EncodedFrame.h @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ +/* 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 EncodedFrame_h_ +#define EncodedFrame_h_ + +#include "nsISupportsImpl.h" +#include "mozilla/media/MediaUtils.h" +#include "TimeUnits.h" +#include "VideoUtils.h" + +namespace mozilla { + +// Represent an encoded frame emitted by an encoder +class EncodedFrame final { + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(EncodedFrame) + public: + enum FrameType { + VP8_I_FRAME, // VP8 intraframe + VP8_P_FRAME, // VP8 predicted frame + OPUS_AUDIO_FRAME, // Opus audio frame + UNKNOWN // FrameType not set + }; + using ConstFrameData = const media::Refcountable<nsTArray<uint8_t>>; + using FrameData = media::Refcountable<nsTArray<uint8_t>>; + EncodedFrame(const media::TimeUnit& aTime, uint64_t aDuration, + uint64_t aDurationBase, FrameType aFrameType, + RefPtr<ConstFrameData> aData) + : mTime(aTime), + mDuration(aDuration), + mDurationBase(aDurationBase), + mFrameType(aFrameType), + mFrameData(std::move(aData)) { + MOZ_ASSERT(mFrameData); + MOZ_ASSERT_IF(mFrameType == VP8_I_FRAME, mDurationBase == PR_USEC_PER_SEC); + MOZ_ASSERT_IF(mFrameType == VP8_P_FRAME, mDurationBase == PR_USEC_PER_SEC); + MOZ_ASSERT_IF(mFrameType == OPUS_AUDIO_FRAME, mDurationBase == 48000); + } + // Timestamp in microseconds + const media::TimeUnit mTime; + // The playback duration of this packet in mDurationBase. + const uint64_t mDuration; + // The time base of mDuration. + const uint64_t mDurationBase; + // Represent what is in the FrameData + const FrameType mFrameType; + // Encoded data + const RefPtr<ConstFrameData> mFrameData; + + // The end time of the frame in microseconds. + media::TimeUnit GetEndTime() const { + return mTime + media::TimeUnit(mDuration, mDurationBase); + } + + private: + // Private destructor, to discourage deletion outside of Release(): + ~EncodedFrame() = default; +}; + +} // namespace mozilla + +#endif // EncodedFrame_h_ |