![]() |
Miam-Player
0.8.0
A nice music player
|
#include <frame.h>
This structure describes decoded (raw) audio or video data.
AVFrame must be allocated using av_frame_alloc(). Note that this only allocates the AVFrame itself, the buffers for the data must be managed through other means (see below). AVFrame must be freed with av_frame_free().
AVFrame is typically allocated once and then reused multiple times to hold different data (e.g. a single AVFrame to hold frames received from a decoder). In such a case, av_frame_unref() will free any references held by the frame and reset it to its original clean state before it is reused again.
The data described by an AVFrame is usually reference counted through the AVBuffer API. The underlying buffer references are stored in AVFrame.buf / AVFrame.extended_buf. An AVFrame is considered to be reference counted if at least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, every single data plane must be contained in one of the buffers in AVFrame.buf or AVFrame.extended_buf. There may be a single buffer for all the data, or one separate buffer for each plane, or anything in between.
sizeof(AVFrame) is not a part of the public ABI, so new fields may be added to the end with a minor bump. Similarly fields that are marked as to be only accessed by av_opt_ptr() can be reordered. This allows 2 forks to add fields without breaking compatibility with each other.
Fields can be accessed through AVOptions, the name string used, matches the C structure field name for fields accessible through AVOptions. The AVClass for AVFrame can be obtained from avcodec_get_frame_class()
int64_t AVFrame::best_effort_timestamp |
frame timestamp estimated using various heuristics, in stream time base Code outside libavutil should access this field using: av_frame_get_best_effort_timestamp(frame)
AVBufferRef* AVFrame::buf[AV_NUM_DATA_POINTERS] |
AVBuffer references backing the data for this frame. If all elements of this array are NULL, then this frame is not reference counted. This array must be filled contiguously – if buf[i] is non-NULL then buf[j] must also be non-NULL for all j < i.
There may be at most one AVBuffer per data plane, so for video this array always contains all the references. For planar audio with more than AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in this array. Then the extra AVBufferRef pointers are stored in the extended_buf array.
uint64_t AVFrame::channel_layout |
Channel layout of the audio data.
int AVFrame::channels |
number of audio channels, only used for audio. Code outside libavutil should access this field using: av_frame_get_channels(frame)
enum AVChromaLocation AVFrame::chroma_location |
int AVFrame::coded_picture_number |
picture number in bitstream order
enum AVColorPrimaries AVFrame::color_primaries |
enum AVColorRange AVFrame::color_range |
MPEG vs JPEG YUV range. It must be accessed using av_frame_get_color_range() and av_frame_set_color_range().
enum AVColorTransferCharacteristic AVFrame::color_trc |
enum AVColorSpace AVFrame::colorspace |
YUV colorspace type. It must be accessed using av_frame_get_colorspace() and av_frame_set_colorspace().
uint8_t* AVFrame::data[AV_NUM_DATA_POINTERS] |
pointer to the picture/channel planes. This might be different from the first allocated byte
Some decoders access areas outside 0,0 - width,height, please see avcodec_align_dimensions2(). Some filters and swscale can read up to 16 bytes beyond the planes, if these filters are to be used, then 16 extra bytes must be allocated.
NOTE: Except for hwaccel formats, pointers not needed by the format MUST be set to NULL.
int AVFrame::decode_error_flags |
decode error flags of the frame, set to a combination of FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there were errors during the decoding. Code outside libavutil should access this field using: av_frame_get_decode_error_flags(frame)
int AVFrame::display_picture_number |
picture number in display order
attribute_deprecated uint64_t AVFrame::error[AV_NUM_DATA_POINTERS] |
AVBufferRef** AVFrame::extended_buf |
For planar audio which requires more than AV_NUM_DATA_POINTERS AVBufferRef pointers, this array will hold all the references which cannot fit into AVFrame.buf.
Note that this is different from AVFrame.extended_data, which always contains all the pointers. This array only contains the extra pointers, which cannot fit into AVFrame.buf.
This array is always allocated using av_malloc() by whoever constructs the frame. It is freed in av_frame_unref().
uint8_t** AVFrame::extended_data |
pointers to the data planes/channels.
For video, this should simply point to data[].
For planar audio, each channel has a separate data pointer, and linesize[0] contains the size of each channel buffer. For packed audio, there is just one data pointer, and linesize[0] contains the total size of the buffer for all channels.
Note: Both data and extended_data should always be set in a valid frame, but for planar audio with more channels that can fit in data, extended_data must be used in order to access all channels.
int AVFrame::flags |
Frame flags, a combination of AV_FRAME_FLAGS
int AVFrame::format |
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames, enum AVSampleFormat for audio)
int AVFrame::height |
AVBufferRef* AVFrame::hw_frames_ctx |
For hwaccel-format frames, this should be a reference to the AVHWFramesContext describing the frame.
int AVFrame::interlaced_frame |
The content of the picture is interlaced.
int AVFrame::key_frame |
1 -> keyframe, 0-> not
int AVFrame::linesize[AV_NUM_DATA_POINTERS] |
For video, size in bytes of each picture line. For audio, size in bytes of each plane.
For audio, only linesize[0] may be set. For planar audio, each channel plane must be the same size.
For video the linesizes should be multiples of the CPUs alignment preference, this is 16 or 32 for modern desktop CPUs. Some code requires such alignment other code can be slower without correct alignment, for yet other it makes no difference.
AVDictionary* AVFrame::metadata |
metadata. Code outside libavutil should access this field using: av_frame_get_metadata(frame)
int AVFrame::nb_extended_buf |
Number of elements in extended_buf.
int AVFrame::nb_samples |
number of audio samples (per channel) described by this frame
int AVFrame::nb_side_data |
void* AVFrame::opaque |
for some private data of the user
int AVFrame::palette_has_changed |
Tell user application that palette has changed from previous frame.
enum AVPictureType AVFrame::pict_type |
Picture type of the frame.
int64_t AVFrame::pkt_dts |
DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) This is also the Presentation time of this AVFrame calculated from only AVPacket.dts values without pts values.
int64_t AVFrame::pkt_duration |
duration of the corresponding packet, expressed in AVStream->time_base units, 0 if unknown. Code outside libavutil should access this field using: av_frame_get_pkt_duration(frame)
int64_t AVFrame::pkt_pos |
reordered pos from the last AVPacket that has been input into the decoder Code outside libavutil should access this field using: av_frame_get_pkt_pos(frame)
attribute_deprecated int64_t AVFrame::pkt_pts |
PTS copied from the AVPacket that was decoded to produce this frame.
int AVFrame::pkt_size |
size of the corresponding packet containing the compressed frame. It must be accessed using av_frame_get_pkt_size() and av_frame_set_pkt_size(). It is set to a negative value if unknown.
int64_t AVFrame::pts |
Presentation timestamp in time_base units (time when frame should be shown to user).
AVBufferRef* AVFrame::qp_table_buf |
Not to be accessed directly from outside libavutil
attribute_deprecated int8_t* AVFrame::qscale_table |
QP table Not to be accessed directly from outside libavutil
attribute_deprecated int AVFrame::qscale_type |
attribute_deprecated int AVFrame::qstride |
QP store stride Not to be accessed directly from outside libavutil
int AVFrame::quality |
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
int64_t AVFrame::reordered_opaque |
reordered opaque 64 bits (generally an integer or a double precision float PTS but can be anything). The user sets AVCodecContext.reordered_opaque to represent the input at that time, the decoder reorders values as needed and sets AVFrame.reordered_opaque to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
int AVFrame::repeat_pict |
When decoding, this signals how much the picture must be delayed. extra_delay = repeat_pict / (2*fps)
AVRational AVFrame::sample_aspect_ratio |
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
int AVFrame::sample_rate |
Sample rate of the audio data.
AVFrameSideData** AVFrame::side_data |
int AVFrame::top_field_first |
If the content is interlaced, is top field displayed first.
int AVFrame::width |
width and height of the video frame