9 #if AVCPP_CXX_STANDARD >= 20
10 #if __has_include(<span>)
23 #include <libavutil/imgutils.h>
24 #include <libavutil/attributes.h>
37 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
38 return av_frame_get_best_effort_timestamp(frame);
40 return frame->best_effort_timestamp;
46 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
47 return static_cast<uint64_t
>(av_frame_get_channel_layout(frame));
48 #elif AVCPP_API_NEW_CHANNEL_LAYOUT
49 return frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? frame->ch_layout.u.mask : 0;
51 return frame->channel_layout;
56 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
57 av_frame_set_channel_layout(frame,
static_cast<int64_t
>(layout));
58 #elif AVCPP_API_NEW_CHANNEL_LAYOUT
59 av_channel_layout_uninit(&frame->ch_layout);
60 av_channel_layout_from_mask(&frame->ch_layout, layout);
62 frame->channel_layout = layout;
68 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
69 return av_frame_get_channels(frame);
70 #elif AVCPP_API_NEW_CHANNEL_LAYOUT
71 return frame->ch_layout.nb_channels;
73 return frame->channels;
79 #if AVCPP_API_NEW_CHANNEL_LAYOUT
80 return av_channel_layout_check(&frame->ch_layout);
82 return frame->channel_layout;
87 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
88 return av_frame_get_sample_rate(frame);
90 return frame->sample_rate;
95 #if AVCPP_AVUTIL_VERSION_MAJOR < 56
96 av_frame_set_sample_rate(frame, sampleRate);
98 frame->sample_rate = sampleRate;
111 return static_cast<T&
>(*this);
112 T(rhs).swap(
static_cast<T&
>(*
this));
113 return static_cast<T&
>(*this);
118 return static_cast<T&
>(*this);
119 T(std::move(rhs)).swap(
static_cast<T&
>(*
this));
120 return static_cast<T&
>(*this);
125 m_raw = av_frame_alloc();
126 m_raw->opaque =
this;
130 av_frame_free(&
m_raw);
135 m_raw = av_frame_alloc();
136 m_raw->opaque =
this;
137 av_frame_ref(
m_raw, frame);
149 m_raw = av_frame_alloc();
150 m_raw->opaque =
this;
151 av_frame_move_ref(
m_raw, other.m_raw);
165 #define FRAME_SWAP(x) swap(x, other.x)
185 return av_buffer_get_ref_count(
m_raw->buf[0]);
191 return m_raw ? av_frame_clone(
m_raw) :
nullptr;
198 result.m_raw->format =
m_raw->format;
199 result.m_raw->width =
m_raw->width;
200 result.m_raw->height =
m_raw->height;
201 result.m_raw->nb_samples =
m_raw->nb_samples;
205 result.copyInfoFrom(
static_cast<const T&
>(*
this));
207 av_frame_get_buffer(result.m_raw, align);
208 av_frame_copy(result.m_raw,
m_raw);
209 av_frame_copy_props(result.m_raw,
m_raw);
239 int64_t rescaledPts =
NoPts;
240 int64_t rescaledBestEffortTs =
NoPts;
249 rescaledPts =
m_raw->pts;
250 rescaledBestEffortTs =
m_raw->best_effort_timestamp;
254 m_raw->pts = rescaledPts;
255 m_raw->best_effort_timestamp = rescaledBestEffortTs;
278 ((
m_raw->format == AV_PIX_FMT_VAAPI) && ((intptr_t)
m_raw->data[3] > 0)))
284 uint8_t *
data(
size_t plane = 0) {
285 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
287 return m_raw->extended_data[plane];
290 const uint8_t *
data(
size_t plane = 0)
const {
291 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
293 return m_raw->extended_data[plane];;
296 size_t size(
size_t plane)
const {
297 if (!
m_raw || plane >=
size_t(AV_NUM_DATA_POINTERS +
m_raw->nb_extended_buf))
299 AVBufferRef *buf = plane < AV_NUM_DATA_POINTERS ?
301 m_raw->extended_buf[plane - AV_NUM_DATA_POINTERS];
304 return size_t(buf->size);
312 for (
auto i = 0; i < AV_NUM_DATA_POINTERS &&
m_raw->buf[i]; i++) {
313 total +=
m_raw->buf[i]->size;
316 for (
auto i = 0; i <
m_raw->nb_extended_buf; ++i) {
317 total +=
m_raw->extended_buf[i]->size;
319 }
else if (
m_raw->data[0]) {
321 uint8_t
data[4] = {0};
328 total = av_image_fill_pointers(
reinterpret_cast<uint8_t**
>(&
data),
329 static_cast<AVPixelFormat
>(
m_raw->format),
334 for (
auto i = 0; i <
m_raw->nb_extended_buf + AV_NUM_DATA_POINTERS &&
m_raw->extended_data[i]; ++i) {
336 total +=
m_raw->linesize[0];
347 for (
size_t i = 0; i < AV_NUM_DATA_POINTERS &&
m_raw->buf[i]; i++) {
350 }
else if (
m_raw->data[0]) {
351 av_hex_dump(stdout,
m_raw->data[0],
size());
414 #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:232
void setStreamIndex(int streamIndex)
Definition: frame.h:265
bool isReferenced() const
Definition: frame.h:179
T & moveOperator(T &&rhs)
Definition: frame.h:116
bool isValid() const
Definition: frame.h:275
size_t size(size_t plane) const
Definition: frame.h:296
Frame(const T &other)
Definition: frame.h:142
attribute_deprecated void setPts(int64_t pts, Rational ptsTimeBase)
Definition: frame.h:218
void copyInfoFrom(const T &other)
Definition: frame.h:173
int m_streamIndex
Definition: frame.h:357
bool isComplete() const
Definition: frame.h:273
T clone(size_t align=1) const
Definition: frame.h:194
int refCount() const
Definition: frame.h:183
bool m_isComplete
Definition: frame.h:358
~Frame()
Definition: frame.h:129
Timestamp pts() const
Definition: frame.h:213
size_t size() const
Definition: frame.h:307
void setPts(const Timestamp &ts)
Definition: frame.h:223
Frame(T &&other)
Definition: frame.h:147
AVFrame * makeRef() const
Definition: frame.h:190
void dump() const
Definition: frame.h:343
T & assignOperator(const T &rhs)
Definition: frame.h:109
Frame()
Definition: frame.h:124
const uint8_t * data(size_t plane=0) const
Definition: frame.h:290
void swap(Frame &other)
Definition: frame.h:163
int streamIndex() const
Definition: frame.h:261
Rational m_timeBase
Definition: frame.h:356
uint8_t * data(size_t plane=0)
Definition: frame.h:284
const Rational & timeBase() const
Definition: frame.h:230
void setComplete(bool isComplete)
Definition: frame.h:269
Frame(const AVFrame *frame)
Definition: frame.h:133
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:47
#define RAW_SET(field, val)
Definition: ffmpeg.h:48
void channel_layout_copy(AVFrame &dst, const AVFrame &src)
Definition: frame.cpp:409
static int get_sample_rate(const AVFrame *frame)
Definition: frame.h:86
static int64_t get_best_effort_timestamp(const AVFrame *frame)
Definition: frame.h:36
static int get_channels(const AVFrame *frame)
Definition: frame.h:67
static void set_sample_rate(AVFrame *frame, int sampleRate)
Definition: frame.h:94
static bool is_valid_channel_layout(const AVFrame *frame)
Definition: frame.h:77
static void set_channel_layout(AVFrame *frame, uint64_t layout)
Definition: frame.h:55
static uint64_t get_channel_layout(const AVFrame *frame)
Definition: frame.h:45
Definition: audioresampler.cpp:8
void hex_dump(FILE *f, const uint8_t *buf, std::size_t size)
Definition: avutils.cpp:319
constexpr auto NoPts
Definition: avutils.h:35
AVFrame * m_raw
Definition: ffmpeg.h:44
bool isNull() const
Definition: ffmpeg.h:30