9 #if AVCPP_CXX_STANDARD >= 20
10 #if __has_include(<span>)
22 #include <libavutil/imgutils.h>
23 #include <libavutil/attributes.h>
36 #if AVCPP_HAS_FRAME_SIDE_DATA
40 class FrameSideData :
public FFWrapperPtr<AVFrameSideData>
45 std::string_view name() const noexcept;
46 AVFrameSideDataType type() const noexcept;
47 std::span<const uint8_t> span() const noexcept;
48 std::span<uint8_t> span() noexcept;
50 BufferRefView buffer() const noexcept;
56 Dictionary metadata() const noexcept;
58 static
std::string_view name(AVFrameSideDataType type) noexcept;
60 #if AVCPP_API_HAS_AVSIDEDATADESCRIPTOR
61 std::optional<AVSideDataDescriptor> descriptor() const noexcept;
62 static
std::optional<AVSideDataDescriptor> descriptor(AVFrameSideDataType type) noexcept;
65 bool empty() const noexcept;
66 operator
bool() const noexcept;
92 bool isReferenced()
const;
94 AVFrame* makeRef()
const;
97 attribute_deprecated
void setPts(int64_t pts,
Rational ptsTimeBase);
101 void setTimeBase(
const Rational &value);
103 int streamIndex()
const;
104 void setStreamIndex(
int streamIndex);
106 void setComplete(
bool isComplete);
107 bool isComplete()
const;
109 bool isValid()
const;
111 operator bool()
const;
113 uint8_t *data(
size_t plane = 0);
114 const uint8_t *data(
size_t plane = 0)
const;
116 size_t size(
size_t plane)
const;
126 #if AVCPP_HAS_FRAME_SIDE_DATA
133 const FrameSideData sideData(AVFrameSideDataType type)
const;
134 FrameSideData sideData(AVFrameSideDataType type);
140 std::size_t sideDataCount() const noexcept;
147 FrameSideData sideDataIndex(
std::
size_t index) noexcept;
156 ArrayView<AVFrameSideData*, FrameSideData,
std::
size_t> sideData() noexcept;
157 ArrayView<const AVFrameSideData*, FrameSideData,
std::
size_t> sideData() const noexcept;
164 void sideDataRemove(AVFrameSideDataType type) noexcept;
215 void clone(
FrameCommon& dst,
size_t align = 1)
const;
219 int m_streamIndex {-1};
220 bool m_isComplete {
false};
229 return static_cast<T&
>(*this);
230 T(rhs).swap(
static_cast<T&
>(*
this));
231 return static_cast<T&
>(*this);
236 return static_cast<T&
>(*this);
237 T(std::move(rhs)).swap(
static_cast<T&
>(*
this));
238 return static_cast<T&
>(*this);
255 static_assert(std::is_copy_assignable_v<FrameCommon> ==
false);
256 static_assert(std::is_copy_constructible_v<FrameCommon> ==
true);
257 static_assert(std::is_move_assignable_v<FrameCommon> ==
false);
258 static_assert(std::is_move_constructible_v<FrameCommon> ==
true);
267 VideoFrame(
const uint8_t *data,
size_t size,
PixelFormat pixelFormat,
int width,
int height,
int align = 1);
298 bool isKeyFrame()
const;
299 void setKeyFrame(
bool isKey);
302 void setQuality(
int quality);
304 AVPictureType pictureType()
const;
305 void setPictureType(AVPictureType type = AV_PICTURE_TYPE_NONE);
308 void setSampleAspectRatio(
const Rational& sampleAspectRatio);
311 bool copyToBuffer(uint8_t *dst,
size_t size,
int align = 1,
OptionalErrorCode ec =
throws());
312 bool copyToBuffer(std::vector<uint8_t>& dst,
int align = 1,
OptionalErrorCode ec =
throws());
329 static VideoFrame wrap(
const void *data,
size_t size,
PixelFormat pixelFormat,
int width,
int height,
int align = 1);
331 #if AVCPP_CXX_STANDARD >= 20
344 static VideoFrame wrap(std::span<const std::byte> data,
PixelFormat pixelFormat,
int width,
int height,
int align = 1);
360 static VideoFrame wrap(std::span<const std::byte> data,
void (*deleter)(
void *opaque, uint8_t *data),
361 void *opaque,
PixelFormat pixelFormat,
int width,
int height,
int align = 1);
365 static_assert(std::is_copy_assignable_v<VideoFrame> ==
true);
366 static_assert(std::is_copy_constructible_v<VideoFrame> ==
true);
367 static_assert(std::is_move_assignable_v<VideoFrame> ==
true);
368 static_assert(std::is_move_constructible_v<VideoFrame> ==
true);
389 int samplesCount()
const;
390 int channelsCount()
const;
391 uint64_t channelsLayout()
const;
392 int sampleRate()
const;
394 bool isPlanar()
const;
396 std::string channelsLayoutString()
const;
399 static_assert(std::is_copy_assignable_v<AudioSamples> ==
true);
400 static_assert(std::is_copy_constructible_v<AudioSamples> ==
true);
401 static_assert(std::is_move_assignable_v<AudioSamples> ==
true);
402 static_assert(std::is_move_constructible_v<AudioSamples> ==
true);
Light weight wrapper for the FFmpeg AVBufferRef functionality.
Definition: buffer.h:119
FrameCommon()
Definition: frame.cpp:538
void operator=(const FrameCommon &)=delete
void clone(FrameCommon &dst, size_t align=1) const
Definition: frame.cpp:845
T & moveOperator(T &&rhs)
Definition: frame.h:234
T clone(size_t align=1) const
Definition: frame.h:248
T & assignOperator(const T &rhs)
Definition: frame.h:227
Definition: rational.h:26
The Timestamp class represents timestamp value and it timebase.
Definition: timestamp.h:14
int64_t get_best_effort_timestamp(const AVFrame *frame)
Definition: frame.cpp:95
void set_channel_layout(AVFrame *frame, uint64_t layout)
Definition: frame.cpp:114
uint64_t get_channel_layout(const AVFrame *frame)
Definition: frame.cpp:104
Definition: audioresampler.cpp:8
OptionalErrorCode throws()
Helper to construct null OptionalErrorCode object.
Definition: averror.h:181
void init()
Init all subsustems needed by avcpp.
Definition: avutils.cpp:175
Definition: averror.h:230
Wrap static data, do not owning and free.
Definition: frame.h:81
Wrap data and take owning.
Definition: frame.h:76