7 #if __has_include(<span>)
19 #include <libavutil/imgutils.h>
20 #include <libavutil/attributes.h>
33 #if LIBAVUTIL_VERSION_MAJOR < 56
34 return av_frame_get_best_effort_timestamp(frame);
36 return frame->best_effort_timestamp;
42 #if LIBAVUTIL_VERSION_MAJOR < 56
43 return static_cast<uint64_t
>(av_frame_get_channel_layout(frame));
44 #elif API_NEW_CHANNEL_LAYOUT
45 return frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? frame->ch_layout.u.mask : 0;
47 return frame->channel_layout;
52 #if LIBAVUTIL_VERSION_MAJOR < 56
53 av_frame_set_channel_layout(frame,
static_cast<int64_t
>(layout));
54 #elif API_NEW_CHANNEL_LAYOUT
55 av_channel_layout_uninit(&frame->ch_layout);
56 av_channel_layout_from_mask(&frame->ch_layout, layout);
58 frame->channel_layout = layout;
64 #if LIBAVUTIL_VERSION_MAJOR < 56
65 return av_frame_get_channels(frame);
66 #elif API_NEW_CHANNEL_LAYOUT
67 return frame->ch_layout.nb_channels;
69 return frame->channels;
75 #if API_NEW_CHANNEL_LAYOUT
76 return av_channel_layout_check(&frame->ch_layout);
78 return frame->channel_layout;
83 #if LIBAVUTIL_VERSION_MAJOR < 56
84 return av_frame_get_sample_rate(frame);
86 return frame->sample_rate;
91 #if LIBAVUTIL_VERSION_MAJOR < 56
92 av_frame_set_sample_rate(frame, sampleRate);
94 frame->sample_rate = sampleRate;
107 return static_cast<T&
>(*this);
108 T(rhs).swap(
static_cast<T&
>(*
this));
109 return static_cast<T&
>(*this);
114 return static_cast<T&
>(*this);
115 T(std::move(rhs)).swap(
static_cast<T&
>(*
this));
116 return static_cast<T&
>(*this);
121 m_raw = av_frame_alloc();
122 m_raw->opaque =
this;
126 av_frame_free(&
m_raw);
131 m_raw = av_frame_alloc();
132 m_raw->opaque =
this;
133 av_frame_ref(
m_raw, frame);
145 m_raw = av_frame_alloc();
146 m_raw->opaque =
this;
147 av_frame_move_ref(
m_raw, other.m_raw);
161 #define FRAME_SWAP(x) swap(x, other.x)
181 return av_buffer_get_ref_count(
m_raw->buf[0]);
187 return m_raw ? av_frame_clone(
m_raw) :
nullptr;
194 result.m_raw->format =
m_raw->format;
195 result.m_raw->width =
m_raw->width;
196 result.m_raw->height =
m_raw->height;
197 result.m_raw->nb_samples =
m_raw->nb_samples;
201 result.copyInfoFrom(
static_cast<const T&
>(*
this));
203 av_frame_get_buffer(result.m_raw, align);
204 av_frame_copy(result.m_raw,
m_raw);
205 av_frame_copy_props(result.m_raw,
m_raw);
235 int64_t rescaledPts =
NoPts;
236 int64_t rescaledBestEffortTs =
NoPts;
245 rescaledPts =
m_raw->pts;
246 rescaledBestEffortTs =
m_raw->best_effort_timestamp;
250 m_raw->pts = rescaledPts;
251 m_raw->best_effort_timestamp = rescaledBestEffortTs;
274 ((
m_raw->format == AV_PIX_FMT_VAAPI) && ((intptr_t)
m_raw->data[3] > 0)))
280 uint8_t *
data(
size_t plane = 0) {
281 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
283 return m_raw->extended_data[plane];
286 const uint8_t *
data(
size_t plane = 0)
const {
287 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
289 return m_raw->extended_data[plane];;
292 size_t size(
size_t plane)
const {
293 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
295 AVBufferRef *buf = plane < AV_NUM_DATA_POINTERS ?
297 m_raw->extended_buf[plane - AV_NUM_DATA_POINTERS];
300 return size_t(buf->size);
308 for (
auto i = 0; i < AV_NUM_DATA_POINTERS &&
m_raw->buf[i]; i++) {
309 total +=
m_raw->buf[i]->size;
312 for (
auto i = 0; i <
m_raw->nb_extended_buf; ++i) {
313 total +=
m_raw->extended_buf[i]->size;
315 }
else if (
m_raw->data[0]) {
317 uint8_t
data[4] = {0};
324 total = av_image_fill_pointers(
reinterpret_cast<uint8_t**
>(&
data),
325 static_cast<AVPixelFormat
>(
m_raw->format),
330 for (
auto i = 0; i <
m_raw->nb_extended_buf + AV_NUM_DATA_POINTERS &&
m_raw->extended_data[i]; ++i) {
332 total +=
m_raw->linesize[0];
343 for (
size_t i = 0; i < AV_NUM_DATA_POINTERS &&
m_raw->buf[i]; i++) {
344 av_hex_dump(stdout,
m_raw->buf[i]->data,
m_raw->buf[i]->size);
346 }
else if (
m_raw->data[0]) {
347 av_hex_dump(stdout,
m_raw->data[0],
size());
410 #ifdef __cpp_lib_span
uint64_t channelsLayout() const
Definition: frame.cpp:371
SampleFormat sampleFormat() const
Definition: frame.cpp:356
size_t sampleBitDepth(OptionalErrorCode ec=throws()) const
Definition: frame.cpp:381
int channelsCount() const
Definition: frame.cpp:366
int sampleRate() const
Definition: frame.cpp:376
std::string channelsLayoutString() const
Definition: frame.cpp:393
bool isPlanar() const
Definition: frame.cpp:388
int samplesCount() const
Definition: frame.cpp:361
AudioSamples & operator=(const AudioSamples &rhs)
Definition: frame.cpp:346
int init(SampleFormat sampleFormat, int samplesCount, uint64_t channelLayout, int sampleRate, int align=SampleFormat::AlignDefault)
Definition: frame.cpp:287
void setTimeBase(const Rational &value)
Definition: frame.h:228
void setStreamIndex(int streamIndex)
Definition: frame.h:261
bool isReferenced() const
Definition: frame.h:175
T & moveOperator(T &&rhs)
Definition: frame.h:112
bool isValid() const
Definition: frame.h:271
size_t size(size_t plane) const
Definition: frame.h:292
Frame(const T &other)
Definition: frame.h:138
attribute_deprecated void setPts(int64_t pts, Rational ptsTimeBase)
Definition: frame.h:214
void copyInfoFrom(const T &other)
Definition: frame.h:169
int m_streamIndex
Definition: frame.h:353
bool isComplete() const
Definition: frame.h:269
T clone(size_t align=1) const
Definition: frame.h:190
int refCount() const
Definition: frame.h:179
bool m_isComplete
Definition: frame.h:354
~Frame()
Definition: frame.h:125
Timestamp pts() const
Definition: frame.h:209
size_t size() const
Definition: frame.h:303
void setPts(const Timestamp &ts)
Definition: frame.h:219
Frame(T &&other)
Definition: frame.h:143
AVFrame * makeRef() const
Definition: frame.h:186
void dump() const
Definition: frame.h:339
T & assignOperator(const T &rhs)
Definition: frame.h:105
Frame()
Definition: frame.h:120
const uint8_t * data(size_t plane=0) const
Definition: frame.h:286
void swap(Frame &other)
Definition: frame.h:159
int streamIndex() const
Definition: frame.h:257
Rational m_timeBase
Definition: frame.h:352
uint8_t * data(size_t plane=0)
Definition: frame.h:280
const Rational & timeBase() const
Definition: frame.h:226
void setComplete(bool isComplete)
Definition: frame.h:265
Frame(const AVFrame *frame)
Definition: frame.h:129
void operator=(const Frame &)=delete
Definition: rational.h:26
int64_t rescale(int64_t srcValue, const Rational &dstBase) const noexcept
Definition: rational.cpp:36
The Timestamp class represents timestamp value and it timebase.
Definition: timestamp.h:14
int64_t timestamp() const noexcept
Definition: timestamp.cpp:19
const Rational & timebase() const noexcept
Definition: timestamp.cpp:29
bool isKeyFrame() const
Definition: frame.cpp:153
VideoFrame & operator=(const VideoFrame &rhs)
Definition: frame.cpp:128
void setQuality(int quality)
Definition: frame.cpp:182
Rational sampleAspectRatio() const
Definition: frame.cpp:197
void setSampleAspectRatio(const Rational &sampleAspectRatio)
Definition: frame.cpp:202
size_t bufferSize(int align=1, OptionalErrorCode ec=throws()) const
Definition: frame.cpp:207
bool copyToBuffer(uint8_t *dst, size_t size, int align=1, OptionalErrorCode ec=throws())
Definition: frame.cpp:218
int height() const
Definition: frame.cpp:148
int width() const
Definition: frame.cpp:143
static VideoFrame wrap(const void *data, size_t size, PixelFormat pixelFormat, int width, int height, int align=1)
Wrap external data into VideoFrame object ready to use with FFmpeg/AvCpp.
Definition: frame.cpp:264
void setPictureType(AVPictureType type=AV_PICTURE_TYPE_NONE)
Definition: frame.cpp:192
PixelFormat pixelFormat() const
Definition: frame.cpp:138
void setKeyFrame(bool isKey)
Definition: frame.cpp:162
int quality() const
Definition: frame.cpp:177
AVPictureType pictureType() const
Definition: frame.cpp:187
#define RAW_GET(field, def)
Definition: ffmpeg.h:92
#define RAW_SET(field, val)
Definition: ffmpeg.h:93
void channel_layout_copy(AVFrame &dst, const AVFrame &src)
Definition: frame.cpp:409
static int get_sample_rate(const AVFrame *frame)
Definition: frame.h:82
static int64_t get_best_effort_timestamp(const AVFrame *frame)
Definition: frame.h:32
static int get_channels(const AVFrame *frame)
Definition: frame.h:63
static void set_sample_rate(AVFrame *frame, int sampleRate)
Definition: frame.h:90
static bool is_valid_channel_layout(const AVFrame *frame)
Definition: frame.h:73
static void set_channel_layout(AVFrame *frame, uint64_t layout)
Definition: frame.h:51
static uint64_t get_channel_layout(const AVFrame *frame)
Definition: frame.h:41
Definition: audioresampler.cpp:8
constexpr auto NoPts
Definition: avutils.h:69
AVFrame * m_raw
Definition: ffmpeg.h:89
bool isNull() const
Definition: ffmpeg.h:75