1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * This file is part of FFmpeg. 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cabdff1aSopenharmony_ci * Lesser General Public License for more details. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17cabdff1aSopenharmony_ci */ 18cabdff1aSopenharmony_ci 19cabdff1aSopenharmony_ci/** 20cabdff1aSopenharmony_ci * @file 21cabdff1aSopenharmony_ci * @ingroup lavu_frame 22cabdff1aSopenharmony_ci * reference-counted frame API 23cabdff1aSopenharmony_ci */ 24cabdff1aSopenharmony_ci 25cabdff1aSopenharmony_ci#ifndef AVUTIL_FRAME_H 26cabdff1aSopenharmony_ci#define AVUTIL_FRAME_H 27cabdff1aSopenharmony_ci 28cabdff1aSopenharmony_ci#include <stddef.h> 29cabdff1aSopenharmony_ci#include <stdint.h> 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci#include "avutil.h" 32cabdff1aSopenharmony_ci#include "buffer.h" 33cabdff1aSopenharmony_ci#include "channel_layout.h" 34cabdff1aSopenharmony_ci#include "dict.h" 35cabdff1aSopenharmony_ci#include "rational.h" 36cabdff1aSopenharmony_ci#include "samplefmt.h" 37cabdff1aSopenharmony_ci#include "pixfmt.h" 38cabdff1aSopenharmony_ci#include "version.h" 39cabdff1aSopenharmony_ci 40cabdff1aSopenharmony_ci 41cabdff1aSopenharmony_ci/** 42cabdff1aSopenharmony_ci * @defgroup lavu_frame AVFrame 43cabdff1aSopenharmony_ci * @ingroup lavu_data 44cabdff1aSopenharmony_ci * 45cabdff1aSopenharmony_ci * @{ 46cabdff1aSopenharmony_ci * AVFrame is an abstraction for reference-counted raw multimedia data. 47cabdff1aSopenharmony_ci */ 48cabdff1aSopenharmony_ci 49cabdff1aSopenharmony_cienum AVFrameSideDataType { 50cabdff1aSopenharmony_ci /** 51cabdff1aSopenharmony_ci * The data is the AVPanScan struct defined in libavcodec. 52cabdff1aSopenharmony_ci */ 53cabdff1aSopenharmony_ci AV_FRAME_DATA_PANSCAN, 54cabdff1aSopenharmony_ci /** 55cabdff1aSopenharmony_ci * ATSC A53 Part 4 Closed Captions. 56cabdff1aSopenharmony_ci * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. 57cabdff1aSopenharmony_ci * The number of bytes of CC data is AVFrameSideData.size. 58cabdff1aSopenharmony_ci */ 59cabdff1aSopenharmony_ci AV_FRAME_DATA_A53_CC, 60cabdff1aSopenharmony_ci /** 61cabdff1aSopenharmony_ci * Stereoscopic 3d metadata. 62cabdff1aSopenharmony_ci * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. 63cabdff1aSopenharmony_ci */ 64cabdff1aSopenharmony_ci AV_FRAME_DATA_STEREO3D, 65cabdff1aSopenharmony_ci /** 66cabdff1aSopenharmony_ci * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. 67cabdff1aSopenharmony_ci */ 68cabdff1aSopenharmony_ci AV_FRAME_DATA_MATRIXENCODING, 69cabdff1aSopenharmony_ci /** 70cabdff1aSopenharmony_ci * Metadata relevant to a downmix procedure. 71cabdff1aSopenharmony_ci * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. 72cabdff1aSopenharmony_ci */ 73cabdff1aSopenharmony_ci AV_FRAME_DATA_DOWNMIX_INFO, 74cabdff1aSopenharmony_ci /** 75cabdff1aSopenharmony_ci * ReplayGain information in the form of the AVReplayGain struct. 76cabdff1aSopenharmony_ci */ 77cabdff1aSopenharmony_ci AV_FRAME_DATA_REPLAYGAIN, 78cabdff1aSopenharmony_ci /** 79cabdff1aSopenharmony_ci * This side data contains a 3x3 transformation matrix describing an affine 80cabdff1aSopenharmony_ci * transformation that needs to be applied to the frame for correct 81cabdff1aSopenharmony_ci * presentation. 82cabdff1aSopenharmony_ci * 83cabdff1aSopenharmony_ci * See libavutil/display.h for a detailed description of the data. 84cabdff1aSopenharmony_ci */ 85cabdff1aSopenharmony_ci AV_FRAME_DATA_DISPLAYMATRIX, 86cabdff1aSopenharmony_ci /** 87cabdff1aSopenharmony_ci * Active Format Description data consisting of a single byte as specified 88cabdff1aSopenharmony_ci * in ETSI TS 101 154 using AVActiveFormatDescription enum. 89cabdff1aSopenharmony_ci */ 90cabdff1aSopenharmony_ci AV_FRAME_DATA_AFD, 91cabdff1aSopenharmony_ci /** 92cabdff1aSopenharmony_ci * Motion vectors exported by some codecs (on demand through the export_mvs 93cabdff1aSopenharmony_ci * flag set in the libavcodec AVCodecContext flags2 option). 94cabdff1aSopenharmony_ci * The data is the AVMotionVector struct defined in 95cabdff1aSopenharmony_ci * libavutil/motion_vector.h. 96cabdff1aSopenharmony_ci */ 97cabdff1aSopenharmony_ci AV_FRAME_DATA_MOTION_VECTORS, 98cabdff1aSopenharmony_ci /** 99cabdff1aSopenharmony_ci * Recommmends skipping the specified number of samples. This is exported 100cabdff1aSopenharmony_ci * only if the "skip_manual" AVOption is set in libavcodec. 101cabdff1aSopenharmony_ci * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. 102cabdff1aSopenharmony_ci * @code 103cabdff1aSopenharmony_ci * u32le number of samples to skip from start of this packet 104cabdff1aSopenharmony_ci * u32le number of samples to skip from end of this packet 105cabdff1aSopenharmony_ci * u8 reason for start skip 106cabdff1aSopenharmony_ci * u8 reason for end skip (0=padding silence, 1=convergence) 107cabdff1aSopenharmony_ci * @endcode 108cabdff1aSopenharmony_ci */ 109cabdff1aSopenharmony_ci AV_FRAME_DATA_SKIP_SAMPLES, 110cabdff1aSopenharmony_ci /** 111cabdff1aSopenharmony_ci * This side data must be associated with an audio frame and corresponds to 112cabdff1aSopenharmony_ci * enum AVAudioServiceType defined in avcodec.h. 113cabdff1aSopenharmony_ci */ 114cabdff1aSopenharmony_ci AV_FRAME_DATA_AUDIO_SERVICE_TYPE, 115cabdff1aSopenharmony_ci /** 116cabdff1aSopenharmony_ci * Mastering display metadata associated with a video frame. The payload is 117cabdff1aSopenharmony_ci * an AVMasteringDisplayMetadata type and contains information about the 118cabdff1aSopenharmony_ci * mastering display color volume. 119cabdff1aSopenharmony_ci */ 120cabdff1aSopenharmony_ci AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, 121cabdff1aSopenharmony_ci /** 122cabdff1aSopenharmony_ci * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. 123cabdff1aSopenharmony_ci * This is set on the first frame of a GOP that has a temporal reference of 0. 124cabdff1aSopenharmony_ci */ 125cabdff1aSopenharmony_ci AV_FRAME_DATA_GOP_TIMECODE, 126cabdff1aSopenharmony_ci 127cabdff1aSopenharmony_ci /** 128cabdff1aSopenharmony_ci * The data represents the AVSphericalMapping structure defined in 129cabdff1aSopenharmony_ci * libavutil/spherical.h. 130cabdff1aSopenharmony_ci */ 131cabdff1aSopenharmony_ci AV_FRAME_DATA_SPHERICAL, 132cabdff1aSopenharmony_ci 133cabdff1aSopenharmony_ci /** 134cabdff1aSopenharmony_ci * Content light level (based on CTA-861.3). This payload contains data in 135cabdff1aSopenharmony_ci * the form of the AVContentLightMetadata struct. 136cabdff1aSopenharmony_ci */ 137cabdff1aSopenharmony_ci AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, 138cabdff1aSopenharmony_ci 139cabdff1aSopenharmony_ci /** 140cabdff1aSopenharmony_ci * The data contains an ICC profile as an opaque octet buffer following the 141cabdff1aSopenharmony_ci * format described by ISO 15076-1 with an optional name defined in the 142cabdff1aSopenharmony_ci * metadata key entry "name". 143cabdff1aSopenharmony_ci */ 144cabdff1aSopenharmony_ci AV_FRAME_DATA_ICC_PROFILE, 145cabdff1aSopenharmony_ci 146cabdff1aSopenharmony_ci /** 147cabdff1aSopenharmony_ci * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t 148cabdff1aSopenharmony_ci * where the first uint32_t describes how many (1-3) of the other timecodes are used. 149cabdff1aSopenharmony_ci * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() 150cabdff1aSopenharmony_ci * function in libavutil/timecode.h. 151cabdff1aSopenharmony_ci */ 152cabdff1aSopenharmony_ci AV_FRAME_DATA_S12M_TIMECODE, 153cabdff1aSopenharmony_ci 154cabdff1aSopenharmony_ci /** 155cabdff1aSopenharmony_ci * HDR dynamic metadata associated with a video frame. The payload is 156cabdff1aSopenharmony_ci * an AVDynamicHDRPlus type and contains information for color 157cabdff1aSopenharmony_ci * volume transform - application 4 of SMPTE 2094-40:2016 standard. 158cabdff1aSopenharmony_ci */ 159cabdff1aSopenharmony_ci AV_FRAME_DATA_DYNAMIC_HDR_PLUS, 160cabdff1aSopenharmony_ci 161cabdff1aSopenharmony_ci /** 162cabdff1aSopenharmony_ci * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of 163cabdff1aSopenharmony_ci * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. 164cabdff1aSopenharmony_ci */ 165cabdff1aSopenharmony_ci AV_FRAME_DATA_REGIONS_OF_INTEREST, 166cabdff1aSopenharmony_ci 167cabdff1aSopenharmony_ci /** 168cabdff1aSopenharmony_ci * Encoding parameters for a video frame, as described by AVVideoEncParams. 169cabdff1aSopenharmony_ci */ 170cabdff1aSopenharmony_ci AV_FRAME_DATA_VIDEO_ENC_PARAMS, 171cabdff1aSopenharmony_ci 172cabdff1aSopenharmony_ci /** 173cabdff1aSopenharmony_ci * User data unregistered metadata associated with a video frame. 174cabdff1aSopenharmony_ci * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose 175cabdff1aSopenharmony_ci * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of 176cabdff1aSopenharmony_ci * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. 177cabdff1aSopenharmony_ci */ 178cabdff1aSopenharmony_ci AV_FRAME_DATA_SEI_UNREGISTERED, 179cabdff1aSopenharmony_ci 180cabdff1aSopenharmony_ci /** 181cabdff1aSopenharmony_ci * Film grain parameters for a frame, described by AVFilmGrainParams. 182cabdff1aSopenharmony_ci * Must be present for every frame which should have film grain applied. 183cabdff1aSopenharmony_ci */ 184cabdff1aSopenharmony_ci AV_FRAME_DATA_FILM_GRAIN_PARAMS, 185cabdff1aSopenharmony_ci 186cabdff1aSopenharmony_ci /** 187cabdff1aSopenharmony_ci * Bounding boxes for object detection and classification, 188cabdff1aSopenharmony_ci * as described by AVDetectionBBoxHeader. 189cabdff1aSopenharmony_ci */ 190cabdff1aSopenharmony_ci AV_FRAME_DATA_DETECTION_BBOXES, 191cabdff1aSopenharmony_ci 192cabdff1aSopenharmony_ci /** 193cabdff1aSopenharmony_ci * Dolby Vision RPU raw data, suitable for passing to x265 194cabdff1aSopenharmony_ci * or other libraries. Array of uint8_t, with NAL emulation 195cabdff1aSopenharmony_ci * bytes intact. 196cabdff1aSopenharmony_ci */ 197cabdff1aSopenharmony_ci AV_FRAME_DATA_DOVI_RPU_BUFFER, 198cabdff1aSopenharmony_ci 199cabdff1aSopenharmony_ci /** 200cabdff1aSopenharmony_ci * Parsed Dolby Vision metadata, suitable for passing to a software 201cabdff1aSopenharmony_ci * implementation. The payload is the AVDOVIMetadata struct defined in 202cabdff1aSopenharmony_ci * libavutil/dovi_meta.h. 203cabdff1aSopenharmony_ci */ 204cabdff1aSopenharmony_ci AV_FRAME_DATA_DOVI_METADATA, 205cabdff1aSopenharmony_ci 206cabdff1aSopenharmony_ci /** 207cabdff1aSopenharmony_ci * HDR Vivid dynamic metadata associated with a video frame. The payload is 208cabdff1aSopenharmony_ci * an AVDynamicHDRVivid type and contains information for color 209cabdff1aSopenharmony_ci * volume transform - CUVA 005.1-2021. 210cabdff1aSopenharmony_ci */ 211cabdff1aSopenharmony_ci AV_FRAME_DATA_DYNAMIC_HDR_VIVID, 212cabdff1aSopenharmony_ci}; 213cabdff1aSopenharmony_ci 214cabdff1aSopenharmony_cienum AVActiveFormatDescription { 215cabdff1aSopenharmony_ci AV_AFD_SAME = 8, 216cabdff1aSopenharmony_ci AV_AFD_4_3 = 9, 217cabdff1aSopenharmony_ci AV_AFD_16_9 = 10, 218cabdff1aSopenharmony_ci AV_AFD_14_9 = 11, 219cabdff1aSopenharmony_ci AV_AFD_4_3_SP_14_9 = 13, 220cabdff1aSopenharmony_ci AV_AFD_16_9_SP_14_9 = 14, 221cabdff1aSopenharmony_ci AV_AFD_SP_4_3 = 15, 222cabdff1aSopenharmony_ci}; 223cabdff1aSopenharmony_ci 224cabdff1aSopenharmony_ci 225cabdff1aSopenharmony_ci/** 226cabdff1aSopenharmony_ci * Structure to hold side data for an AVFrame. 227cabdff1aSopenharmony_ci * 228cabdff1aSopenharmony_ci * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added 229cabdff1aSopenharmony_ci * to the end with a minor bump. 230cabdff1aSopenharmony_ci */ 231cabdff1aSopenharmony_citypedef struct AVFrameSideData { 232cabdff1aSopenharmony_ci enum AVFrameSideDataType type; 233cabdff1aSopenharmony_ci uint8_t *data; 234cabdff1aSopenharmony_ci size_t size; 235cabdff1aSopenharmony_ci AVDictionary *metadata; 236cabdff1aSopenharmony_ci AVBufferRef *buf; 237cabdff1aSopenharmony_ci} AVFrameSideData; 238cabdff1aSopenharmony_ci 239cabdff1aSopenharmony_ci/** 240cabdff1aSopenharmony_ci * Structure describing a single Region Of Interest. 241cabdff1aSopenharmony_ci * 242cabdff1aSopenharmony_ci * When multiple regions are defined in a single side-data block, they 243cabdff1aSopenharmony_ci * should be ordered from most to least important - some encoders are only 244cabdff1aSopenharmony_ci * capable of supporting a limited number of distinct regions, so will have 245cabdff1aSopenharmony_ci * to truncate the list. 246cabdff1aSopenharmony_ci * 247cabdff1aSopenharmony_ci * When overlapping regions are defined, the first region containing a given 248cabdff1aSopenharmony_ci * area of the frame applies. 249cabdff1aSopenharmony_ci */ 250cabdff1aSopenharmony_citypedef struct AVRegionOfInterest { 251cabdff1aSopenharmony_ci /** 252cabdff1aSopenharmony_ci * Must be set to the size of this data structure (that is, 253cabdff1aSopenharmony_ci * sizeof(AVRegionOfInterest)). 254cabdff1aSopenharmony_ci */ 255cabdff1aSopenharmony_ci uint32_t self_size; 256cabdff1aSopenharmony_ci /** 257cabdff1aSopenharmony_ci * Distance in pixels from the top edge of the frame to the top and 258cabdff1aSopenharmony_ci * bottom edges and from the left edge of the frame to the left and 259cabdff1aSopenharmony_ci * right edges of the rectangle defining this region of interest. 260cabdff1aSopenharmony_ci * 261cabdff1aSopenharmony_ci * The constraints on a region are encoder dependent, so the region 262cabdff1aSopenharmony_ci * actually affected may be slightly larger for alignment or other 263cabdff1aSopenharmony_ci * reasons. 264cabdff1aSopenharmony_ci */ 265cabdff1aSopenharmony_ci int top; 266cabdff1aSopenharmony_ci int bottom; 267cabdff1aSopenharmony_ci int left; 268cabdff1aSopenharmony_ci int right; 269cabdff1aSopenharmony_ci /** 270cabdff1aSopenharmony_ci * Quantisation offset. 271cabdff1aSopenharmony_ci * 272cabdff1aSopenharmony_ci * Must be in the range -1 to +1. A value of zero indicates no quality 273cabdff1aSopenharmony_ci * change. A negative value asks for better quality (less quantisation), 274cabdff1aSopenharmony_ci * while a positive value asks for worse quality (greater quantisation). 275cabdff1aSopenharmony_ci * 276cabdff1aSopenharmony_ci * The range is calibrated so that the extreme values indicate the 277cabdff1aSopenharmony_ci * largest possible offset - if the rest of the frame is encoded with the 278cabdff1aSopenharmony_ci * worst possible quality, an offset of -1 indicates that this region 279cabdff1aSopenharmony_ci * should be encoded with the best possible quality anyway. Intermediate 280cabdff1aSopenharmony_ci * values are then interpolated in some codec-dependent way. 281cabdff1aSopenharmony_ci * 282cabdff1aSopenharmony_ci * For example, in 10-bit H.264 the quantisation parameter varies between 283cabdff1aSopenharmony_ci * -12 and 51. A typical qoffset value of -1/10 therefore indicates that 284cabdff1aSopenharmony_ci * this region should be encoded with a QP around one-tenth of the full 285cabdff1aSopenharmony_ci * range better than the rest of the frame. So, if most of the frame 286cabdff1aSopenharmony_ci * were to be encoded with a QP of around 30, this region would get a QP 287cabdff1aSopenharmony_ci * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). 288cabdff1aSopenharmony_ci * An extreme value of -1 would indicate that this region should be 289cabdff1aSopenharmony_ci * encoded with the best possible quality regardless of the treatment of 290cabdff1aSopenharmony_ci * the rest of the frame - that is, should be encoded at a QP of -12. 291cabdff1aSopenharmony_ci */ 292cabdff1aSopenharmony_ci AVRational qoffset; 293cabdff1aSopenharmony_ci} AVRegionOfInterest; 294cabdff1aSopenharmony_ci 295cabdff1aSopenharmony_ci/** 296cabdff1aSopenharmony_ci * This structure describes decoded (raw) audio or video data. 297cabdff1aSopenharmony_ci * 298cabdff1aSopenharmony_ci * AVFrame must be allocated using av_frame_alloc(). Note that this only 299cabdff1aSopenharmony_ci * allocates the AVFrame itself, the buffers for the data must be managed 300cabdff1aSopenharmony_ci * through other means (see below). 301cabdff1aSopenharmony_ci * AVFrame must be freed with av_frame_free(). 302cabdff1aSopenharmony_ci * 303cabdff1aSopenharmony_ci * AVFrame is typically allocated once and then reused multiple times to hold 304cabdff1aSopenharmony_ci * different data (e.g. a single AVFrame to hold frames received from a 305cabdff1aSopenharmony_ci * decoder). In such a case, av_frame_unref() will free any references held by 306cabdff1aSopenharmony_ci * the frame and reset it to its original clean state before it 307cabdff1aSopenharmony_ci * is reused again. 308cabdff1aSopenharmony_ci * 309cabdff1aSopenharmony_ci * The data described by an AVFrame is usually reference counted through the 310cabdff1aSopenharmony_ci * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / 311cabdff1aSopenharmony_ci * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at 312cabdff1aSopenharmony_ci * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, 313cabdff1aSopenharmony_ci * every single data plane must be contained in one of the buffers in 314cabdff1aSopenharmony_ci * AVFrame.buf or AVFrame.extended_buf. 315cabdff1aSopenharmony_ci * There may be a single buffer for all the data, or one separate buffer for 316cabdff1aSopenharmony_ci * each plane, or anything in between. 317cabdff1aSopenharmony_ci * 318cabdff1aSopenharmony_ci * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added 319cabdff1aSopenharmony_ci * to the end with a minor bump. 320cabdff1aSopenharmony_ci * 321cabdff1aSopenharmony_ci * Fields can be accessed through AVOptions, the name string used, matches the 322cabdff1aSopenharmony_ci * C structure field name for fields accessible through AVOptions. The AVClass 323cabdff1aSopenharmony_ci * for AVFrame can be obtained from avcodec_get_frame_class() 324cabdff1aSopenharmony_ci */ 325cabdff1aSopenharmony_citypedef struct AVFrame { 326cabdff1aSopenharmony_ci#define AV_NUM_DATA_POINTERS 8 327cabdff1aSopenharmony_ci /** 328cabdff1aSopenharmony_ci * pointer to the picture/channel planes. 329cabdff1aSopenharmony_ci * This might be different from the first allocated byte. For video, 330cabdff1aSopenharmony_ci * it could even point to the end of the image data. 331cabdff1aSopenharmony_ci * 332cabdff1aSopenharmony_ci * All pointers in data and extended_data must point into one of the 333cabdff1aSopenharmony_ci * AVBufferRef in buf or extended_buf. 334cabdff1aSopenharmony_ci * 335cabdff1aSopenharmony_ci * Some decoders access areas outside 0,0 - width,height, please 336cabdff1aSopenharmony_ci * see avcodec_align_dimensions2(). Some filters and swscale can read 337cabdff1aSopenharmony_ci * up to 16 bytes beyond the planes, if these filters are to be used, 338cabdff1aSopenharmony_ci * then 16 extra bytes must be allocated. 339cabdff1aSopenharmony_ci * 340cabdff1aSopenharmony_ci * NOTE: Pointers not needed by the format MUST be set to NULL. 341cabdff1aSopenharmony_ci * 342cabdff1aSopenharmony_ci * @attention In case of video, the data[] pointers can point to the 343cabdff1aSopenharmony_ci * end of image data in order to reverse line order, when used in 344cabdff1aSopenharmony_ci * combination with negative values in the linesize[] array. 345cabdff1aSopenharmony_ci */ 346cabdff1aSopenharmony_ci uint8_t *data[AV_NUM_DATA_POINTERS]; 347cabdff1aSopenharmony_ci 348cabdff1aSopenharmony_ci /** 349cabdff1aSopenharmony_ci * For video, a positive or negative value, which is typically indicating 350cabdff1aSopenharmony_ci * the size in bytes of each picture line, but it can also be: 351cabdff1aSopenharmony_ci * - the negative byte size of lines for vertical flipping 352cabdff1aSopenharmony_ci * (with data[n] pointing to the end of the data 353cabdff1aSopenharmony_ci * - a positive or negative multiple of the byte size as for accessing 354cabdff1aSopenharmony_ci * even and odd fields of a frame (possibly flipped) 355cabdff1aSopenharmony_ci * 356cabdff1aSopenharmony_ci * For audio, only linesize[0] may be set. For planar audio, each channel 357cabdff1aSopenharmony_ci * plane must be the same size. 358cabdff1aSopenharmony_ci * 359cabdff1aSopenharmony_ci * For video the linesizes should be multiples of the CPUs alignment 360cabdff1aSopenharmony_ci * preference, this is 16 or 32 for modern desktop CPUs. 361cabdff1aSopenharmony_ci * Some code requires such alignment other code can be slower without 362cabdff1aSopenharmony_ci * correct alignment, for yet other it makes no difference. 363cabdff1aSopenharmony_ci * 364cabdff1aSopenharmony_ci * @note The linesize may be larger than the size of usable data -- there 365cabdff1aSopenharmony_ci * may be extra padding present for performance reasons. 366cabdff1aSopenharmony_ci * 367cabdff1aSopenharmony_ci * @attention In case of video, line size values can be negative to achieve 368cabdff1aSopenharmony_ci * a vertically inverted iteration over image lines. 369cabdff1aSopenharmony_ci */ 370cabdff1aSopenharmony_ci int linesize[AV_NUM_DATA_POINTERS]; 371cabdff1aSopenharmony_ci 372cabdff1aSopenharmony_ci /** 373cabdff1aSopenharmony_ci * pointers to the data planes/channels. 374cabdff1aSopenharmony_ci * 375cabdff1aSopenharmony_ci * For video, this should simply point to data[]. 376cabdff1aSopenharmony_ci * 377cabdff1aSopenharmony_ci * For planar audio, each channel has a separate data pointer, and 378cabdff1aSopenharmony_ci * linesize[0] contains the size of each channel buffer. 379cabdff1aSopenharmony_ci * For packed audio, there is just one data pointer, and linesize[0] 380cabdff1aSopenharmony_ci * contains the total size of the buffer for all channels. 381cabdff1aSopenharmony_ci * 382cabdff1aSopenharmony_ci * Note: Both data and extended_data should always be set in a valid frame, 383cabdff1aSopenharmony_ci * but for planar audio with more channels that can fit in data, 384cabdff1aSopenharmony_ci * extended_data must be used in order to access all channels. 385cabdff1aSopenharmony_ci */ 386cabdff1aSopenharmony_ci uint8_t **extended_data; 387cabdff1aSopenharmony_ci 388cabdff1aSopenharmony_ci /** 389cabdff1aSopenharmony_ci * @name Video dimensions 390cabdff1aSopenharmony_ci * Video frames only. The coded dimensions (in pixels) of the video frame, 391cabdff1aSopenharmony_ci * i.e. the size of the rectangle that contains some well-defined values. 392cabdff1aSopenharmony_ci * 393cabdff1aSopenharmony_ci * @note The part of the frame intended for display/presentation is further 394cabdff1aSopenharmony_ci * restricted by the @ref cropping "Cropping rectangle". 395cabdff1aSopenharmony_ci * @{ 396cabdff1aSopenharmony_ci */ 397cabdff1aSopenharmony_ci int width, height; 398cabdff1aSopenharmony_ci /** 399cabdff1aSopenharmony_ci * @} 400cabdff1aSopenharmony_ci */ 401cabdff1aSopenharmony_ci 402cabdff1aSopenharmony_ci /** 403cabdff1aSopenharmony_ci * number of audio samples (per channel) described by this frame 404cabdff1aSopenharmony_ci */ 405cabdff1aSopenharmony_ci int nb_samples; 406cabdff1aSopenharmony_ci 407cabdff1aSopenharmony_ci /** 408cabdff1aSopenharmony_ci * format of the frame, -1 if unknown or unset 409cabdff1aSopenharmony_ci * Values correspond to enum AVPixelFormat for video frames, 410cabdff1aSopenharmony_ci * enum AVSampleFormat for audio) 411cabdff1aSopenharmony_ci */ 412cabdff1aSopenharmony_ci int format; 413cabdff1aSopenharmony_ci 414cabdff1aSopenharmony_ci /** 415cabdff1aSopenharmony_ci * 1 -> keyframe, 0-> not 416cabdff1aSopenharmony_ci */ 417cabdff1aSopenharmony_ci int key_frame; 418cabdff1aSopenharmony_ci 419cabdff1aSopenharmony_ci /** 420cabdff1aSopenharmony_ci * Picture type of the frame. 421cabdff1aSopenharmony_ci */ 422cabdff1aSopenharmony_ci enum AVPictureType pict_type; 423cabdff1aSopenharmony_ci 424cabdff1aSopenharmony_ci /** 425cabdff1aSopenharmony_ci * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. 426cabdff1aSopenharmony_ci */ 427cabdff1aSopenharmony_ci AVRational sample_aspect_ratio; 428cabdff1aSopenharmony_ci 429cabdff1aSopenharmony_ci /** 430cabdff1aSopenharmony_ci * Presentation timestamp in time_base units (time when frame should be shown to user). 431cabdff1aSopenharmony_ci */ 432cabdff1aSopenharmony_ci int64_t pts; 433cabdff1aSopenharmony_ci 434cabdff1aSopenharmony_ci /** 435cabdff1aSopenharmony_ci * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) 436cabdff1aSopenharmony_ci * This is also the Presentation time of this AVFrame calculated from 437cabdff1aSopenharmony_ci * only AVPacket.dts values without pts values. 438cabdff1aSopenharmony_ci */ 439cabdff1aSopenharmony_ci int64_t pkt_dts; 440cabdff1aSopenharmony_ci 441cabdff1aSopenharmony_ci /** 442cabdff1aSopenharmony_ci * Time base for the timestamps in this frame. 443cabdff1aSopenharmony_ci * In the future, this field may be set on frames output by decoders or 444cabdff1aSopenharmony_ci * filters, but its value will be by default ignored on input to encoders 445cabdff1aSopenharmony_ci * or filters. 446cabdff1aSopenharmony_ci */ 447cabdff1aSopenharmony_ci AVRational time_base; 448cabdff1aSopenharmony_ci 449cabdff1aSopenharmony_ci /** 450cabdff1aSopenharmony_ci * picture number in bitstream order 451cabdff1aSopenharmony_ci */ 452cabdff1aSopenharmony_ci int coded_picture_number; 453cabdff1aSopenharmony_ci /** 454cabdff1aSopenharmony_ci * picture number in display order 455cabdff1aSopenharmony_ci */ 456cabdff1aSopenharmony_ci int display_picture_number; 457cabdff1aSopenharmony_ci 458cabdff1aSopenharmony_ci /** 459cabdff1aSopenharmony_ci * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) 460cabdff1aSopenharmony_ci */ 461cabdff1aSopenharmony_ci int quality; 462cabdff1aSopenharmony_ci 463cabdff1aSopenharmony_ci /** 464cabdff1aSopenharmony_ci * for some private data of the user 465cabdff1aSopenharmony_ci */ 466cabdff1aSopenharmony_ci void *opaque; 467cabdff1aSopenharmony_ci 468cabdff1aSopenharmony_ci /** 469cabdff1aSopenharmony_ci * When decoding, this signals how much the picture must be delayed. 470cabdff1aSopenharmony_ci * extra_delay = repeat_pict / (2*fps) 471cabdff1aSopenharmony_ci */ 472cabdff1aSopenharmony_ci int repeat_pict; 473cabdff1aSopenharmony_ci 474cabdff1aSopenharmony_ci /** 475cabdff1aSopenharmony_ci * The content of the picture is interlaced. 476cabdff1aSopenharmony_ci */ 477cabdff1aSopenharmony_ci int interlaced_frame; 478cabdff1aSopenharmony_ci 479cabdff1aSopenharmony_ci /** 480cabdff1aSopenharmony_ci * If the content is interlaced, is top field displayed first. 481cabdff1aSopenharmony_ci */ 482cabdff1aSopenharmony_ci int top_field_first; 483cabdff1aSopenharmony_ci 484cabdff1aSopenharmony_ci /** 485cabdff1aSopenharmony_ci * Tell user application that palette has changed from previous frame. 486cabdff1aSopenharmony_ci */ 487cabdff1aSopenharmony_ci int palette_has_changed; 488cabdff1aSopenharmony_ci 489cabdff1aSopenharmony_ci /** 490cabdff1aSopenharmony_ci * reordered opaque 64 bits (generally an integer or a double precision float 491cabdff1aSopenharmony_ci * PTS but can be anything). 492cabdff1aSopenharmony_ci * The user sets AVCodecContext.reordered_opaque to represent the input at 493cabdff1aSopenharmony_ci * that time, 494cabdff1aSopenharmony_ci * the decoder reorders values as needed and sets AVFrame.reordered_opaque 495cabdff1aSopenharmony_ci * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque 496cabdff1aSopenharmony_ci */ 497cabdff1aSopenharmony_ci int64_t reordered_opaque; 498cabdff1aSopenharmony_ci 499cabdff1aSopenharmony_ci /** 500cabdff1aSopenharmony_ci * Sample rate of the audio data. 501cabdff1aSopenharmony_ci */ 502cabdff1aSopenharmony_ci int sample_rate; 503cabdff1aSopenharmony_ci 504cabdff1aSopenharmony_ci#if FF_API_OLD_CHANNEL_LAYOUT 505cabdff1aSopenharmony_ci /** 506cabdff1aSopenharmony_ci * Channel layout of the audio data. 507cabdff1aSopenharmony_ci * @deprecated use ch_layout instead 508cabdff1aSopenharmony_ci */ 509cabdff1aSopenharmony_ci attribute_deprecated 510cabdff1aSopenharmony_ci uint64_t channel_layout; 511cabdff1aSopenharmony_ci#endif 512cabdff1aSopenharmony_ci 513cabdff1aSopenharmony_ci /** 514cabdff1aSopenharmony_ci * AVBuffer references backing the data for this frame. All the pointers in 515cabdff1aSopenharmony_ci * data and extended_data must point inside one of the buffers in buf or 516cabdff1aSopenharmony_ci * extended_buf. This array must be filled contiguously -- if buf[i] is 517cabdff1aSopenharmony_ci * non-NULL then buf[j] must also be non-NULL for all j < i. 518cabdff1aSopenharmony_ci * 519cabdff1aSopenharmony_ci * There may be at most one AVBuffer per data plane, so for video this array 520cabdff1aSopenharmony_ci * always contains all the references. For planar audio with more than 521cabdff1aSopenharmony_ci * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in 522cabdff1aSopenharmony_ci * this array. Then the extra AVBufferRef pointers are stored in the 523cabdff1aSopenharmony_ci * extended_buf array. 524cabdff1aSopenharmony_ci */ 525cabdff1aSopenharmony_ci AVBufferRef *buf[AV_NUM_DATA_POINTERS]; 526cabdff1aSopenharmony_ci 527cabdff1aSopenharmony_ci /** 528cabdff1aSopenharmony_ci * For planar audio which requires more than AV_NUM_DATA_POINTERS 529cabdff1aSopenharmony_ci * AVBufferRef pointers, this array will hold all the references which 530cabdff1aSopenharmony_ci * cannot fit into AVFrame.buf. 531cabdff1aSopenharmony_ci * 532cabdff1aSopenharmony_ci * Note that this is different from AVFrame.extended_data, which always 533cabdff1aSopenharmony_ci * contains all the pointers. This array only contains the extra pointers, 534cabdff1aSopenharmony_ci * which cannot fit into AVFrame.buf. 535cabdff1aSopenharmony_ci * 536cabdff1aSopenharmony_ci * This array is always allocated using av_malloc() by whoever constructs 537cabdff1aSopenharmony_ci * the frame. It is freed in av_frame_unref(). 538cabdff1aSopenharmony_ci */ 539cabdff1aSopenharmony_ci AVBufferRef **extended_buf; 540cabdff1aSopenharmony_ci /** 541cabdff1aSopenharmony_ci * Number of elements in extended_buf. 542cabdff1aSopenharmony_ci */ 543cabdff1aSopenharmony_ci int nb_extended_buf; 544cabdff1aSopenharmony_ci 545cabdff1aSopenharmony_ci AVFrameSideData **side_data; 546cabdff1aSopenharmony_ci int nb_side_data; 547cabdff1aSopenharmony_ci 548cabdff1aSopenharmony_ci/** 549cabdff1aSopenharmony_ci * @defgroup lavu_frame_flags AV_FRAME_FLAGS 550cabdff1aSopenharmony_ci * @ingroup lavu_frame 551cabdff1aSopenharmony_ci * Flags describing additional frame properties. 552cabdff1aSopenharmony_ci * 553cabdff1aSopenharmony_ci * @{ 554cabdff1aSopenharmony_ci */ 555cabdff1aSopenharmony_ci 556cabdff1aSopenharmony_ci/** 557cabdff1aSopenharmony_ci * The frame data may be corrupted, e.g. due to decoding errors. 558cabdff1aSopenharmony_ci */ 559cabdff1aSopenharmony_ci#define AV_FRAME_FLAG_CORRUPT (1 << 0) 560cabdff1aSopenharmony_ci/** 561cabdff1aSopenharmony_ci * A flag to mark the frames which need to be decoded, but shouldn't be output. 562cabdff1aSopenharmony_ci */ 563cabdff1aSopenharmony_ci#define AV_FRAME_FLAG_DISCARD (1 << 2) 564cabdff1aSopenharmony_ci/** 565cabdff1aSopenharmony_ci * @} 566cabdff1aSopenharmony_ci */ 567cabdff1aSopenharmony_ci 568cabdff1aSopenharmony_ci /** 569cabdff1aSopenharmony_ci * Frame flags, a combination of @ref lavu_frame_flags 570cabdff1aSopenharmony_ci */ 571cabdff1aSopenharmony_ci int flags; 572cabdff1aSopenharmony_ci 573cabdff1aSopenharmony_ci /** 574cabdff1aSopenharmony_ci * MPEG vs JPEG YUV range. 575cabdff1aSopenharmony_ci * - encoding: Set by user 576cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 577cabdff1aSopenharmony_ci */ 578cabdff1aSopenharmony_ci enum AVColorRange color_range; 579cabdff1aSopenharmony_ci 580cabdff1aSopenharmony_ci enum AVColorPrimaries color_primaries; 581cabdff1aSopenharmony_ci 582cabdff1aSopenharmony_ci enum AVColorTransferCharacteristic color_trc; 583cabdff1aSopenharmony_ci 584cabdff1aSopenharmony_ci /** 585cabdff1aSopenharmony_ci * YUV colorspace type. 586cabdff1aSopenharmony_ci * - encoding: Set by user 587cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 588cabdff1aSopenharmony_ci */ 589cabdff1aSopenharmony_ci enum AVColorSpace colorspace; 590cabdff1aSopenharmony_ci 591cabdff1aSopenharmony_ci enum AVChromaLocation chroma_location; 592cabdff1aSopenharmony_ci 593cabdff1aSopenharmony_ci /** 594cabdff1aSopenharmony_ci * frame timestamp estimated using various heuristics, in stream time base 595cabdff1aSopenharmony_ci * - encoding: unused 596cabdff1aSopenharmony_ci * - decoding: set by libavcodec, read by user. 597cabdff1aSopenharmony_ci */ 598cabdff1aSopenharmony_ci int64_t best_effort_timestamp; 599cabdff1aSopenharmony_ci 600cabdff1aSopenharmony_ci /** 601cabdff1aSopenharmony_ci * reordered pos from the last AVPacket that has been input into the decoder 602cabdff1aSopenharmony_ci * - encoding: unused 603cabdff1aSopenharmony_ci * - decoding: Read by user. 604cabdff1aSopenharmony_ci */ 605cabdff1aSopenharmony_ci int64_t pkt_pos; 606cabdff1aSopenharmony_ci 607cabdff1aSopenharmony_ci /** 608cabdff1aSopenharmony_ci * duration of the corresponding packet, expressed in 609cabdff1aSopenharmony_ci * AVStream->time_base units, 0 if unknown. 610cabdff1aSopenharmony_ci * - encoding: unused 611cabdff1aSopenharmony_ci * - decoding: Read by user. 612cabdff1aSopenharmony_ci */ 613cabdff1aSopenharmony_ci int64_t pkt_duration; 614cabdff1aSopenharmony_ci 615cabdff1aSopenharmony_ci /** 616cabdff1aSopenharmony_ci * metadata. 617cabdff1aSopenharmony_ci * - encoding: Set by user. 618cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 619cabdff1aSopenharmony_ci */ 620cabdff1aSopenharmony_ci AVDictionary *metadata; 621cabdff1aSopenharmony_ci 622cabdff1aSopenharmony_ci /** 623cabdff1aSopenharmony_ci * decode error flags of the frame, set to a combination of 624cabdff1aSopenharmony_ci * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there 625cabdff1aSopenharmony_ci * were errors during the decoding. 626cabdff1aSopenharmony_ci * - encoding: unused 627cabdff1aSopenharmony_ci * - decoding: set by libavcodec, read by user. 628cabdff1aSopenharmony_ci */ 629cabdff1aSopenharmony_ci int decode_error_flags; 630cabdff1aSopenharmony_ci#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 631cabdff1aSopenharmony_ci#define FF_DECODE_ERROR_MISSING_REFERENCE 2 632cabdff1aSopenharmony_ci#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 633cabdff1aSopenharmony_ci#define FF_DECODE_ERROR_DECODE_SLICES 8 634cabdff1aSopenharmony_ci 635cabdff1aSopenharmony_ci#if FF_API_OLD_CHANNEL_LAYOUT 636cabdff1aSopenharmony_ci /** 637cabdff1aSopenharmony_ci * number of audio channels, only used for audio. 638cabdff1aSopenharmony_ci * - encoding: unused 639cabdff1aSopenharmony_ci * - decoding: Read by user. 640cabdff1aSopenharmony_ci * @deprecated use ch_layout instead 641cabdff1aSopenharmony_ci */ 642cabdff1aSopenharmony_ci attribute_deprecated 643cabdff1aSopenharmony_ci int channels; 644cabdff1aSopenharmony_ci#endif 645cabdff1aSopenharmony_ci 646cabdff1aSopenharmony_ci /** 647cabdff1aSopenharmony_ci * size of the corresponding packet containing the compressed 648cabdff1aSopenharmony_ci * frame. 649cabdff1aSopenharmony_ci * It is set to a negative value if unknown. 650cabdff1aSopenharmony_ci * - encoding: unused 651cabdff1aSopenharmony_ci * - decoding: set by libavcodec, read by user. 652cabdff1aSopenharmony_ci */ 653cabdff1aSopenharmony_ci int pkt_size; 654cabdff1aSopenharmony_ci 655cabdff1aSopenharmony_ci /** 656cabdff1aSopenharmony_ci * For hwaccel-format frames, this should be a reference to the 657cabdff1aSopenharmony_ci * AVHWFramesContext describing the frame. 658cabdff1aSopenharmony_ci */ 659cabdff1aSopenharmony_ci AVBufferRef *hw_frames_ctx; 660cabdff1aSopenharmony_ci 661cabdff1aSopenharmony_ci /** 662cabdff1aSopenharmony_ci * AVBufferRef for free use by the API user. FFmpeg will never check the 663cabdff1aSopenharmony_ci * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when 664cabdff1aSopenharmony_ci * the frame is unreferenced. av_frame_copy_props() calls create a new 665cabdff1aSopenharmony_ci * reference with av_buffer_ref() for the target frame's opaque_ref field. 666cabdff1aSopenharmony_ci * 667cabdff1aSopenharmony_ci * This is unrelated to the opaque field, although it serves a similar 668cabdff1aSopenharmony_ci * purpose. 669cabdff1aSopenharmony_ci */ 670cabdff1aSopenharmony_ci AVBufferRef *opaque_ref; 671cabdff1aSopenharmony_ci 672cabdff1aSopenharmony_ci /** 673cabdff1aSopenharmony_ci * @anchor cropping 674cabdff1aSopenharmony_ci * @name Cropping 675cabdff1aSopenharmony_ci * Video frames only. The number of pixels to discard from the the 676cabdff1aSopenharmony_ci * top/bottom/left/right border of the frame to obtain the sub-rectangle of 677cabdff1aSopenharmony_ci * the frame intended for presentation. 678cabdff1aSopenharmony_ci * @{ 679cabdff1aSopenharmony_ci */ 680cabdff1aSopenharmony_ci size_t crop_top; 681cabdff1aSopenharmony_ci size_t crop_bottom; 682cabdff1aSopenharmony_ci size_t crop_left; 683cabdff1aSopenharmony_ci size_t crop_right; 684cabdff1aSopenharmony_ci /** 685cabdff1aSopenharmony_ci * @} 686cabdff1aSopenharmony_ci */ 687cabdff1aSopenharmony_ci 688cabdff1aSopenharmony_ci /** 689cabdff1aSopenharmony_ci * AVBufferRef for internal use by a single libav* library. 690cabdff1aSopenharmony_ci * Must not be used to transfer data between libraries. 691cabdff1aSopenharmony_ci * Has to be NULL when ownership of the frame leaves the respective library. 692cabdff1aSopenharmony_ci * 693cabdff1aSopenharmony_ci * Code outside the FFmpeg libs should never check or change the contents of the buffer ref. 694cabdff1aSopenharmony_ci * 695cabdff1aSopenharmony_ci * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. 696cabdff1aSopenharmony_ci * av_frame_copy_props() calls create a new reference with av_buffer_ref() 697cabdff1aSopenharmony_ci * for the target frame's private_ref field. 698cabdff1aSopenharmony_ci */ 699cabdff1aSopenharmony_ci AVBufferRef *private_ref; 700cabdff1aSopenharmony_ci 701cabdff1aSopenharmony_ci /** 702cabdff1aSopenharmony_ci * Channel layout of the audio data. 703cabdff1aSopenharmony_ci */ 704cabdff1aSopenharmony_ci AVChannelLayout ch_layout; 705cabdff1aSopenharmony_ci} AVFrame; 706cabdff1aSopenharmony_ci 707cabdff1aSopenharmony_ci 708cabdff1aSopenharmony_ci#if FF_API_COLORSPACE_NAME 709cabdff1aSopenharmony_ci/** 710cabdff1aSopenharmony_ci * Get the name of a colorspace. 711cabdff1aSopenharmony_ci * @return a static string identifying the colorspace; can be NULL. 712cabdff1aSopenharmony_ci * @deprecated use av_color_space_name() 713cabdff1aSopenharmony_ci */ 714cabdff1aSopenharmony_ciattribute_deprecated 715cabdff1aSopenharmony_ciconst char *av_get_colorspace_name(enum AVColorSpace val); 716cabdff1aSopenharmony_ci#endif 717cabdff1aSopenharmony_ci/** 718cabdff1aSopenharmony_ci * Allocate an AVFrame and set its fields to default values. The resulting 719cabdff1aSopenharmony_ci * struct must be freed using av_frame_free(). 720cabdff1aSopenharmony_ci * 721cabdff1aSopenharmony_ci * @return An AVFrame filled with default values or NULL on failure. 722cabdff1aSopenharmony_ci * 723cabdff1aSopenharmony_ci * @note this only allocates the AVFrame itself, not the data buffers. Those 724cabdff1aSopenharmony_ci * must be allocated through other means, e.g. with av_frame_get_buffer() or 725cabdff1aSopenharmony_ci * manually. 726cabdff1aSopenharmony_ci */ 727cabdff1aSopenharmony_ciAVFrame *av_frame_alloc(void); 728cabdff1aSopenharmony_ci 729cabdff1aSopenharmony_ci/** 730cabdff1aSopenharmony_ci * Free the frame and any dynamically allocated objects in it, 731cabdff1aSopenharmony_ci * e.g. extended_data. If the frame is reference counted, it will be 732cabdff1aSopenharmony_ci * unreferenced first. 733cabdff1aSopenharmony_ci * 734cabdff1aSopenharmony_ci * @param frame frame to be freed. The pointer will be set to NULL. 735cabdff1aSopenharmony_ci */ 736cabdff1aSopenharmony_civoid av_frame_free(AVFrame **frame); 737cabdff1aSopenharmony_ci 738cabdff1aSopenharmony_ci/** 739cabdff1aSopenharmony_ci * Set up a new reference to the data described by the source frame. 740cabdff1aSopenharmony_ci * 741cabdff1aSopenharmony_ci * Copy frame properties from src to dst and create a new reference for each 742cabdff1aSopenharmony_ci * AVBufferRef from src. 743cabdff1aSopenharmony_ci * 744cabdff1aSopenharmony_ci * If src is not reference counted, new buffers are allocated and the data is 745cabdff1aSopenharmony_ci * copied. 746cabdff1aSopenharmony_ci * 747cabdff1aSopenharmony_ci * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), 748cabdff1aSopenharmony_ci * or newly allocated with av_frame_alloc() before calling this 749cabdff1aSopenharmony_ci * function, or undefined behavior will occur. 750cabdff1aSopenharmony_ci * 751cabdff1aSopenharmony_ci * @return 0 on success, a negative AVERROR on error 752cabdff1aSopenharmony_ci */ 753cabdff1aSopenharmony_ciint av_frame_ref(AVFrame *dst, const AVFrame *src); 754cabdff1aSopenharmony_ci 755cabdff1aSopenharmony_ci/** 756cabdff1aSopenharmony_ci * Create a new frame that references the same data as src. 757cabdff1aSopenharmony_ci * 758cabdff1aSopenharmony_ci * This is a shortcut for av_frame_alloc()+av_frame_ref(). 759cabdff1aSopenharmony_ci * 760cabdff1aSopenharmony_ci * @return newly created AVFrame on success, NULL on error. 761cabdff1aSopenharmony_ci */ 762cabdff1aSopenharmony_ciAVFrame *av_frame_clone(const AVFrame *src); 763cabdff1aSopenharmony_ci 764cabdff1aSopenharmony_ci/** 765cabdff1aSopenharmony_ci * Unreference all the buffers referenced by frame and reset the frame fields. 766cabdff1aSopenharmony_ci */ 767cabdff1aSopenharmony_civoid av_frame_unref(AVFrame *frame); 768cabdff1aSopenharmony_ci 769cabdff1aSopenharmony_ci/** 770cabdff1aSopenharmony_ci * Move everything contained in src to dst and reset src. 771cabdff1aSopenharmony_ci * 772cabdff1aSopenharmony_ci * @warning: dst is not unreferenced, but directly overwritten without reading 773cabdff1aSopenharmony_ci * or deallocating its contents. Call av_frame_unref(dst) manually 774cabdff1aSopenharmony_ci * before calling this function to ensure that no memory is leaked. 775cabdff1aSopenharmony_ci */ 776cabdff1aSopenharmony_civoid av_frame_move_ref(AVFrame *dst, AVFrame *src); 777cabdff1aSopenharmony_ci 778cabdff1aSopenharmony_ci/** 779cabdff1aSopenharmony_ci * Allocate new buffer(s) for audio or video data. 780cabdff1aSopenharmony_ci * 781cabdff1aSopenharmony_ci * The following fields must be set on frame before calling this function: 782cabdff1aSopenharmony_ci * - format (pixel format for video, sample format for audio) 783cabdff1aSopenharmony_ci * - width and height for video 784cabdff1aSopenharmony_ci * - nb_samples and ch_layout for audio 785cabdff1aSopenharmony_ci * 786cabdff1aSopenharmony_ci * This function will fill AVFrame.data and AVFrame.buf arrays and, if 787cabdff1aSopenharmony_ci * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. 788cabdff1aSopenharmony_ci * For planar formats, one buffer will be allocated for each plane. 789cabdff1aSopenharmony_ci * 790cabdff1aSopenharmony_ci * @warning: if frame already has been allocated, calling this function will 791cabdff1aSopenharmony_ci * leak memory. In addition, undefined behavior can occur in certain 792cabdff1aSopenharmony_ci * cases. 793cabdff1aSopenharmony_ci * 794cabdff1aSopenharmony_ci * @param frame frame in which to store the new buffers. 795cabdff1aSopenharmony_ci * @param align Required buffer size alignment. If equal to 0, alignment will be 796cabdff1aSopenharmony_ci * chosen automatically for the current CPU. It is highly 797cabdff1aSopenharmony_ci * recommended to pass 0 here unless you know what you are doing. 798cabdff1aSopenharmony_ci * 799cabdff1aSopenharmony_ci * @return 0 on success, a negative AVERROR on error. 800cabdff1aSopenharmony_ci */ 801cabdff1aSopenharmony_ciint av_frame_get_buffer(AVFrame *frame, int align); 802cabdff1aSopenharmony_ci 803cabdff1aSopenharmony_ci/** 804cabdff1aSopenharmony_ci * Check if the frame data is writable. 805cabdff1aSopenharmony_ci * 806cabdff1aSopenharmony_ci * @return A positive value if the frame data is writable (which is true if and 807cabdff1aSopenharmony_ci * only if each of the underlying buffers has only one reference, namely the one 808cabdff1aSopenharmony_ci * stored in this frame). Return 0 otherwise. 809cabdff1aSopenharmony_ci * 810cabdff1aSopenharmony_ci * If 1 is returned the answer is valid until av_buffer_ref() is called on any 811cabdff1aSopenharmony_ci * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). 812cabdff1aSopenharmony_ci * 813cabdff1aSopenharmony_ci * @see av_frame_make_writable(), av_buffer_is_writable() 814cabdff1aSopenharmony_ci */ 815cabdff1aSopenharmony_ciint av_frame_is_writable(AVFrame *frame); 816cabdff1aSopenharmony_ci 817cabdff1aSopenharmony_ci/** 818cabdff1aSopenharmony_ci * Ensure that the frame data is writable, avoiding data copy if possible. 819cabdff1aSopenharmony_ci * 820cabdff1aSopenharmony_ci * Do nothing if the frame is writable, allocate new buffers and copy the data 821cabdff1aSopenharmony_ci * if it is not. 822cabdff1aSopenharmony_ci * 823cabdff1aSopenharmony_ci * @return 0 on success, a negative AVERROR on error. 824cabdff1aSopenharmony_ci * 825cabdff1aSopenharmony_ci * @see av_frame_is_writable(), av_buffer_is_writable(), 826cabdff1aSopenharmony_ci * av_buffer_make_writable() 827cabdff1aSopenharmony_ci */ 828cabdff1aSopenharmony_ciint av_frame_make_writable(AVFrame *frame); 829cabdff1aSopenharmony_ci 830cabdff1aSopenharmony_ci/** 831cabdff1aSopenharmony_ci * Copy the frame data from src to dst. 832cabdff1aSopenharmony_ci * 833cabdff1aSopenharmony_ci * This function does not allocate anything, dst must be already initialized and 834cabdff1aSopenharmony_ci * allocated with the same parameters as src. 835cabdff1aSopenharmony_ci * 836cabdff1aSopenharmony_ci * This function only copies the frame data (i.e. the contents of the data / 837cabdff1aSopenharmony_ci * extended data arrays), not any other properties. 838cabdff1aSopenharmony_ci * 839cabdff1aSopenharmony_ci * @return >= 0 on success, a negative AVERROR on error. 840cabdff1aSopenharmony_ci */ 841cabdff1aSopenharmony_ciint av_frame_copy(AVFrame *dst, const AVFrame *src); 842cabdff1aSopenharmony_ci 843cabdff1aSopenharmony_ci/** 844cabdff1aSopenharmony_ci * Copy only "metadata" fields from src to dst. 845cabdff1aSopenharmony_ci * 846cabdff1aSopenharmony_ci * Metadata for the purpose of this function are those fields that do not affect 847cabdff1aSopenharmony_ci * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample 848cabdff1aSopenharmony_ci * aspect ratio (for video), but not width/height or channel layout. 849cabdff1aSopenharmony_ci * Side data is also copied. 850cabdff1aSopenharmony_ci */ 851cabdff1aSopenharmony_ciint av_frame_copy_props(AVFrame *dst, const AVFrame *src); 852cabdff1aSopenharmony_ci 853cabdff1aSopenharmony_ci/** 854cabdff1aSopenharmony_ci * Get the buffer reference a given data plane is stored in. 855cabdff1aSopenharmony_ci * 856cabdff1aSopenharmony_ci * @param plane index of the data plane of interest in frame->extended_data. 857cabdff1aSopenharmony_ci * 858cabdff1aSopenharmony_ci * @return the buffer reference that contains the plane or NULL if the input 859cabdff1aSopenharmony_ci * frame is not valid. 860cabdff1aSopenharmony_ci */ 861cabdff1aSopenharmony_ciAVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); 862cabdff1aSopenharmony_ci 863cabdff1aSopenharmony_ci/** 864cabdff1aSopenharmony_ci * Add a new side data to a frame. 865cabdff1aSopenharmony_ci * 866cabdff1aSopenharmony_ci * @param frame a frame to which the side data should be added 867cabdff1aSopenharmony_ci * @param type type of the added side data 868cabdff1aSopenharmony_ci * @param size size of the side data 869cabdff1aSopenharmony_ci * 870cabdff1aSopenharmony_ci * @return newly added side data on success, NULL on error 871cabdff1aSopenharmony_ci */ 872cabdff1aSopenharmony_ciAVFrameSideData *av_frame_new_side_data(AVFrame *frame, 873cabdff1aSopenharmony_ci enum AVFrameSideDataType type, 874cabdff1aSopenharmony_ci size_t size); 875cabdff1aSopenharmony_ci 876cabdff1aSopenharmony_ci/** 877cabdff1aSopenharmony_ci * Add a new side data to a frame from an existing AVBufferRef 878cabdff1aSopenharmony_ci * 879cabdff1aSopenharmony_ci * @param frame a frame to which the side data should be added 880cabdff1aSopenharmony_ci * @param type the type of the added side data 881cabdff1aSopenharmony_ci * @param buf an AVBufferRef to add as side data. The ownership of 882cabdff1aSopenharmony_ci * the reference is transferred to the frame. 883cabdff1aSopenharmony_ci * 884cabdff1aSopenharmony_ci * @return newly added side data on success, NULL on error. On failure 885cabdff1aSopenharmony_ci * the frame is unchanged and the AVBufferRef remains owned by 886cabdff1aSopenharmony_ci * the caller. 887cabdff1aSopenharmony_ci */ 888cabdff1aSopenharmony_ciAVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, 889cabdff1aSopenharmony_ci enum AVFrameSideDataType type, 890cabdff1aSopenharmony_ci AVBufferRef *buf); 891cabdff1aSopenharmony_ci 892cabdff1aSopenharmony_ci/** 893cabdff1aSopenharmony_ci * @return a pointer to the side data of a given type on success, NULL if there 894cabdff1aSopenharmony_ci * is no side data with such type in this frame. 895cabdff1aSopenharmony_ci */ 896cabdff1aSopenharmony_ciAVFrameSideData *av_frame_get_side_data(const AVFrame *frame, 897cabdff1aSopenharmony_ci enum AVFrameSideDataType type); 898cabdff1aSopenharmony_ci 899cabdff1aSopenharmony_ci/** 900cabdff1aSopenharmony_ci * Remove and free all side data instances of the given type. 901cabdff1aSopenharmony_ci */ 902cabdff1aSopenharmony_civoid av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); 903cabdff1aSopenharmony_ci 904cabdff1aSopenharmony_ci 905cabdff1aSopenharmony_ci/** 906cabdff1aSopenharmony_ci * Flags for frame cropping. 907cabdff1aSopenharmony_ci */ 908cabdff1aSopenharmony_cienum { 909cabdff1aSopenharmony_ci /** 910cabdff1aSopenharmony_ci * Apply the maximum possible cropping, even if it requires setting the 911cabdff1aSopenharmony_ci * AVFrame.data[] entries to unaligned pointers. Passing unaligned data 912cabdff1aSopenharmony_ci * to FFmpeg API is generally not allowed, and causes undefined behavior 913cabdff1aSopenharmony_ci * (such as crashes). You can pass unaligned data only to FFmpeg APIs that 914cabdff1aSopenharmony_ci * are explicitly documented to accept it. Use this flag only if you 915cabdff1aSopenharmony_ci * absolutely know what you are doing. 916cabdff1aSopenharmony_ci */ 917cabdff1aSopenharmony_ci AV_FRAME_CROP_UNALIGNED = 1 << 0, 918cabdff1aSopenharmony_ci}; 919cabdff1aSopenharmony_ci 920cabdff1aSopenharmony_ci/** 921cabdff1aSopenharmony_ci * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ 922cabdff1aSopenharmony_ci * crop_bottom fields. If cropping is successful, the function will adjust the 923cabdff1aSopenharmony_ci * data pointers and the width/height fields, and set the crop fields to 0. 924cabdff1aSopenharmony_ci * 925cabdff1aSopenharmony_ci * In all cases, the cropping boundaries will be rounded to the inherent 926cabdff1aSopenharmony_ci * alignment of the pixel format. In some cases, such as for opaque hwaccel 927cabdff1aSopenharmony_ci * formats, the left/top cropping is ignored. The crop fields are set to 0 even 928cabdff1aSopenharmony_ci * if the cropping was rounded or ignored. 929cabdff1aSopenharmony_ci * 930cabdff1aSopenharmony_ci * @param frame the frame which should be cropped 931cabdff1aSopenharmony_ci * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. 932cabdff1aSopenharmony_ci * 933cabdff1aSopenharmony_ci * @return >= 0 on success, a negative AVERROR on error. If the cropping fields 934cabdff1aSopenharmony_ci * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. 935cabdff1aSopenharmony_ci */ 936cabdff1aSopenharmony_ciint av_frame_apply_cropping(AVFrame *frame, int flags); 937cabdff1aSopenharmony_ci 938cabdff1aSopenharmony_ci/** 939cabdff1aSopenharmony_ci * @return a string identifying the side data type 940cabdff1aSopenharmony_ci */ 941cabdff1aSopenharmony_ciconst char *av_frame_side_data_name(enum AVFrameSideDataType type); 942cabdff1aSopenharmony_ci 943cabdff1aSopenharmony_ci/** 944cabdff1aSopenharmony_ci * @} 945cabdff1aSopenharmony_ci */ 946cabdff1aSopenharmony_ci 947cabdff1aSopenharmony_ci#endif /* AVUTIL_FRAME_H */ 948