8#ifndef META_OCEAN_MEDIA_MF_VIDEO_ENCODER_H
9#define META_OCEAN_MEDIA_MF_VIDEO_ENCODER_H
28namespace MediaFoundation
92 static constexpr int bitrateMbps1_ = 1000 * 1000;
95 static constexpr int bitrateMbps2_ = bitrateMbps1_ * 2;
98 static constexpr int bitrateMbps5_ = bitrateMbps1_ * 5;
101 static constexpr int bitrateMbps10_ = bitrateMbps1_ * 10;
110 BUFFER_FLAG_NONE = 0u,
112 BUFFER_FLAG_KEY_FRAME = 1u,
114 BUFFER_FLAG_CODEC_CONFIG = 2u,
116 BUFFER_FLAG_END_OF_STREAM = 4u,
118 BUFFER_FLAG_PARTIAL_FRAME = 8u
145 inline bool isValid()
const;
151 inline const std::vector<uint8_t>& data()
const;
157 inline int64_t presentationTime()
const;
163 inline bool isKeyFrame()
const;
169 inline bool isConfiguration()
const;
175 inline bool isEndOfStream()
const;
181 inline bool isPartialFrame()
const;
194 inline explicit operator bool()
const;
204 inline Sample(std::vector<uint8_t>&& data,
const int64_t presentationTime,
const BufferFlags bufferFlags);
237 static constexpr unsigned int maximalWidth_ = 1920u * 8u;
240 static constexpr unsigned int maximalHeight_ = 1080u * 8u;
243 static constexpr int maximalBitrate_ = bitrateMbps10_ * 10;
277 bool initialize(
const unsigned int width,
const unsigned int height,
const std::string& mime =
"video/avc",
const double frameRate = 30.0,
const unsigned int bitrate = bitrateMbps2_,
const int iFrameInterval = 1);
316 inline bool isInitialized()
const;
323 inline bool isStarted()
const;
370 unsigned int width_ = 0u;
373 unsigned int height_ = 0u;
376 bool isStarted_ =
false;
379 bool mfStarted_ =
false;
382 bool mftProvidesOutputSamples_ =
false;
385 DWORD outputBufferSize_ = 0u;
388 bool codecConfigEmitted_ =
false;
398 data_(std::move(data)),
399 presentationTime_(presentationTime),
400 bufferFlags_(bufferFlags)
407 *
this = std::move(sample);
412 return !data_.empty();
422 return presentationTime_;
449 data_ = std::move(sample.data_);
450 presentationTime_ = sample.presentationTime_;
451 bufferFlags_ = sample.bufferFlags_;
460inline VideoEncoder::Sample::operator bool()
const
467 *
this = std::move(videoEncoder);
488 if (
this != &videoEncoder)
492 encoder_ = std::move(videoEncoder.encoder_);
496 width_ = videoEncoder.width_;
497 videoEncoder.width_ = 0u;
499 height_ = videoEncoder.height_;
500 videoEncoder.height_ = 0u;
503 videoEncoder.isStarted_ =
false;
506 videoEncoder.mfStarted_ =
false;
509 videoEncoder.mftProvidesOutputSamples_ =
false;
512 videoEncoder.outputBufferSize_ = 0u;
515 videoEncoder.codecConfigEmitted_ =
false;
This class implements Ocean's image class.
Definition Frame.h:1879
This class implements a recursive lock object.
Definition Lock.h:31
This class provides basic numeric functionalities.
Definition Numeric.h:57
static constexpr T minValue()
Returns the min scalar value.
Definition Numeric.h:3259
This class implements a scoped lock object for recursive lock objects.
Definition Lock.h:147
This class wraps an unmanaged object (or reference) which needs to be released after usage.
Definition ScopedObject.h:166
bool isValid() const
Returns whether this scoped object holds a valid object.
Definition ScopedObject.h:460
The namespace covering the entire Ocean framework.
Definition Accessor.h:15