1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * copyright (c) 2001 Fabrice Bellard 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVCODEC_AVCODEC_H 22cabdff1aSopenharmony_ci#define AVCODEC_AVCODEC_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci/** 25cabdff1aSopenharmony_ci * @file 26cabdff1aSopenharmony_ci * @ingroup libavc 27cabdff1aSopenharmony_ci * Libavcodec external API header 28cabdff1aSopenharmony_ci */ 29cabdff1aSopenharmony_ci 30cabdff1aSopenharmony_ci#include "libavutil/samplefmt.h" 31cabdff1aSopenharmony_ci#include "libavutil/attributes.h" 32cabdff1aSopenharmony_ci#include "libavutil/avutil.h" 33cabdff1aSopenharmony_ci#include "libavutil/buffer.h" 34cabdff1aSopenharmony_ci#include "libavutil/dict.h" 35cabdff1aSopenharmony_ci#include "libavutil/frame.h" 36cabdff1aSopenharmony_ci#include "libavutil/log.h" 37cabdff1aSopenharmony_ci#include "libavutil/pixfmt.h" 38cabdff1aSopenharmony_ci#include "libavutil/rational.h" 39cabdff1aSopenharmony_ci 40cabdff1aSopenharmony_ci#include "codec.h" 41cabdff1aSopenharmony_ci#include "codec_desc.h" 42cabdff1aSopenharmony_ci#include "codec_par.h" 43cabdff1aSopenharmony_ci#include "codec_id.h" 44cabdff1aSopenharmony_ci#include "defs.h" 45cabdff1aSopenharmony_ci#include "packet.h" 46cabdff1aSopenharmony_ci#include "version_major.h" 47cabdff1aSopenharmony_ci#ifndef HAVE_AV_CONFIG_H 48cabdff1aSopenharmony_ci/* When included as part of the ffmpeg build, only include the major version 49cabdff1aSopenharmony_ci * to avoid unnecessary rebuilds. When included externally, keep including 50cabdff1aSopenharmony_ci * the full version information. */ 51cabdff1aSopenharmony_ci#include "version.h" 52cabdff1aSopenharmony_ci#endif 53cabdff1aSopenharmony_ci 54cabdff1aSopenharmony_ci/** 55cabdff1aSopenharmony_ci * @defgroup libavc libavcodec 56cabdff1aSopenharmony_ci * Encoding/Decoding Library 57cabdff1aSopenharmony_ci * 58cabdff1aSopenharmony_ci * @{ 59cabdff1aSopenharmony_ci * 60cabdff1aSopenharmony_ci * @defgroup lavc_decoding Decoding 61cabdff1aSopenharmony_ci * @{ 62cabdff1aSopenharmony_ci * @} 63cabdff1aSopenharmony_ci * 64cabdff1aSopenharmony_ci * @defgroup lavc_encoding Encoding 65cabdff1aSopenharmony_ci * @{ 66cabdff1aSopenharmony_ci * @} 67cabdff1aSopenharmony_ci * 68cabdff1aSopenharmony_ci * @defgroup lavc_codec Codecs 69cabdff1aSopenharmony_ci * @{ 70cabdff1aSopenharmony_ci * @defgroup lavc_codec_native Native Codecs 71cabdff1aSopenharmony_ci * @{ 72cabdff1aSopenharmony_ci * @} 73cabdff1aSopenharmony_ci * @defgroup lavc_codec_wrappers External library wrappers 74cabdff1aSopenharmony_ci * @{ 75cabdff1aSopenharmony_ci * @} 76cabdff1aSopenharmony_ci * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge 77cabdff1aSopenharmony_ci * @{ 78cabdff1aSopenharmony_ci * @} 79cabdff1aSopenharmony_ci * @} 80cabdff1aSopenharmony_ci * @defgroup lavc_internal Internal 81cabdff1aSopenharmony_ci * @{ 82cabdff1aSopenharmony_ci * @} 83cabdff1aSopenharmony_ci * @} 84cabdff1aSopenharmony_ci */ 85cabdff1aSopenharmony_ci 86cabdff1aSopenharmony_ci/** 87cabdff1aSopenharmony_ci * @ingroup libavc 88cabdff1aSopenharmony_ci * @defgroup lavc_encdec send/receive encoding and decoding API overview 89cabdff1aSopenharmony_ci * @{ 90cabdff1aSopenharmony_ci * 91cabdff1aSopenharmony_ci * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ 92cabdff1aSopenharmony_ci * avcodec_receive_packet() functions provide an encode/decode API, which 93cabdff1aSopenharmony_ci * decouples input and output. 94cabdff1aSopenharmony_ci * 95cabdff1aSopenharmony_ci * The API is very similar for encoding/decoding and audio/video, and works as 96cabdff1aSopenharmony_ci * follows: 97cabdff1aSopenharmony_ci * - Set up and open the AVCodecContext as usual. 98cabdff1aSopenharmony_ci * - Send valid input: 99cabdff1aSopenharmony_ci * - For decoding, call avcodec_send_packet() to give the decoder raw 100cabdff1aSopenharmony_ci * compressed data in an AVPacket. 101cabdff1aSopenharmony_ci * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame 102cabdff1aSopenharmony_ci * containing uncompressed audio or video. 103cabdff1aSopenharmony_ci * 104cabdff1aSopenharmony_ci * In both cases, it is recommended that AVPackets and AVFrames are 105cabdff1aSopenharmony_ci * refcounted, or libavcodec might have to copy the input data. (libavformat 106cabdff1aSopenharmony_ci * always returns refcounted AVPackets, and av_frame_get_buffer() allocates 107cabdff1aSopenharmony_ci * refcounted AVFrames.) 108cabdff1aSopenharmony_ci * - Receive output in a loop. Periodically call one of the avcodec_receive_*() 109cabdff1aSopenharmony_ci * functions and process their output: 110cabdff1aSopenharmony_ci * - For decoding, call avcodec_receive_frame(). On success, it will return 111cabdff1aSopenharmony_ci * an AVFrame containing uncompressed audio or video data. 112cabdff1aSopenharmony_ci * - For encoding, call avcodec_receive_packet(). On success, it will return 113cabdff1aSopenharmony_ci * an AVPacket with a compressed frame. 114cabdff1aSopenharmony_ci * 115cabdff1aSopenharmony_ci * Repeat this call until it returns AVERROR(EAGAIN) or an error. The 116cabdff1aSopenharmony_ci * AVERROR(EAGAIN) return value means that new input data is required to 117cabdff1aSopenharmony_ci * return new output. In this case, continue with sending input. For each 118cabdff1aSopenharmony_ci * input frame/packet, the codec will typically return 1 output frame/packet, 119cabdff1aSopenharmony_ci * but it can also be 0 or more than 1. 120cabdff1aSopenharmony_ci * 121cabdff1aSopenharmony_ci * At the beginning of decoding or encoding, the codec might accept multiple 122cabdff1aSopenharmony_ci * input frames/packets without returning a frame, until its internal buffers 123cabdff1aSopenharmony_ci * are filled. This situation is handled transparently if you follow the steps 124cabdff1aSopenharmony_ci * outlined above. 125cabdff1aSopenharmony_ci * 126cabdff1aSopenharmony_ci * In theory, sending input can result in EAGAIN - this should happen only if 127cabdff1aSopenharmony_ci * not all output was received. You can use this to structure alternative decode 128cabdff1aSopenharmony_ci * or encode loops other than the one suggested above. For example, you could 129cabdff1aSopenharmony_ci * try sending new input on each iteration, and try to receive output if that 130cabdff1aSopenharmony_ci * returns EAGAIN. 131cabdff1aSopenharmony_ci * 132cabdff1aSopenharmony_ci * End of stream situations. These require "flushing" (aka draining) the codec, 133cabdff1aSopenharmony_ci * as the codec might buffer multiple frames or packets internally for 134cabdff1aSopenharmony_ci * performance or out of necessity (consider B-frames). 135cabdff1aSopenharmony_ci * This is handled as follows: 136cabdff1aSopenharmony_ci * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) 137cabdff1aSopenharmony_ci * or avcodec_send_frame() (encoding) functions. This will enter draining 138cabdff1aSopenharmony_ci * mode. 139cabdff1aSopenharmony_ci * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() 140cabdff1aSopenharmony_ci * (encoding) in a loop until AVERROR_EOF is returned. The functions will 141cabdff1aSopenharmony_ci * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. 142cabdff1aSopenharmony_ci * - Before decoding can be resumed again, the codec has to be reset with 143cabdff1aSopenharmony_ci * avcodec_flush_buffers(). 144cabdff1aSopenharmony_ci * 145cabdff1aSopenharmony_ci * Using the API as outlined above is highly recommended. But it is also 146cabdff1aSopenharmony_ci * possible to call functions outside of this rigid schema. For example, you can 147cabdff1aSopenharmony_ci * call avcodec_send_packet() repeatedly without calling 148cabdff1aSopenharmony_ci * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed 149cabdff1aSopenharmony_ci * until the codec's internal buffer has been filled up (which is typically of 150cabdff1aSopenharmony_ci * size 1 per output frame, after initial input), and then reject input with 151cabdff1aSopenharmony_ci * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to 152cabdff1aSopenharmony_ci * read at least some output. 153cabdff1aSopenharmony_ci * 154cabdff1aSopenharmony_ci * Not all codecs will follow a rigid and predictable dataflow; the only 155cabdff1aSopenharmony_ci * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on 156cabdff1aSopenharmony_ci * one end implies that a receive/send call on the other end will succeed, or 157cabdff1aSopenharmony_ci * at least will not fail with AVERROR(EAGAIN). In general, no codec will 158cabdff1aSopenharmony_ci * permit unlimited buffering of input or output. 159cabdff1aSopenharmony_ci * 160cabdff1aSopenharmony_ci * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This 161cabdff1aSopenharmony_ci * would be an invalid state, which could put the codec user into an endless 162cabdff1aSopenharmony_ci * loop. The API has no concept of time either: it cannot happen that trying to 163cabdff1aSopenharmony_ci * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second 164cabdff1aSopenharmony_ci * later accepts the packet (with no other receive/flush API calls involved). 165cabdff1aSopenharmony_ci * The API is a strict state machine, and the passage of time is not supposed 166cabdff1aSopenharmony_ci * to influence it. Some timing-dependent behavior might still be deemed 167cabdff1aSopenharmony_ci * acceptable in certain cases. But it must never result in both send/receive 168cabdff1aSopenharmony_ci * returning EAGAIN at the same time at any point. It must also absolutely be 169cabdff1aSopenharmony_ci * avoided that the current state is "unstable" and can "flip-flop" between 170cabdff1aSopenharmony_ci * the send/receive APIs allowing progress. For example, it's not allowed that 171cabdff1aSopenharmony_ci * the codec randomly decides that it actually wants to consume a packet now 172cabdff1aSopenharmony_ci * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an 173cabdff1aSopenharmony_ci * avcodec_send_packet() call. 174cabdff1aSopenharmony_ci * @} 175cabdff1aSopenharmony_ci */ 176cabdff1aSopenharmony_ci 177cabdff1aSopenharmony_ci/** 178cabdff1aSopenharmony_ci * @defgroup lavc_core Core functions/structures. 179cabdff1aSopenharmony_ci * @ingroup libavc 180cabdff1aSopenharmony_ci * 181cabdff1aSopenharmony_ci * Basic definitions, functions for querying libavcodec capabilities, 182cabdff1aSopenharmony_ci * allocating core structures, etc. 183cabdff1aSopenharmony_ci * @{ 184cabdff1aSopenharmony_ci */ 185cabdff1aSopenharmony_ci 186cabdff1aSopenharmony_ci/** 187cabdff1aSopenharmony_ci * @ingroup lavc_encoding 188cabdff1aSopenharmony_ci * minimum encoding buffer size 189cabdff1aSopenharmony_ci * Used to avoid some checks during header writing. 190cabdff1aSopenharmony_ci */ 191cabdff1aSopenharmony_ci#define AV_INPUT_BUFFER_MIN_SIZE 16384 192cabdff1aSopenharmony_ci 193cabdff1aSopenharmony_ci/** 194cabdff1aSopenharmony_ci * @ingroup lavc_encoding 195cabdff1aSopenharmony_ci */ 196cabdff1aSopenharmony_citypedef struct RcOverride{ 197cabdff1aSopenharmony_ci int start_frame; 198cabdff1aSopenharmony_ci int end_frame; 199cabdff1aSopenharmony_ci int qscale; // If this is 0 then quality_factor will be used instead. 200cabdff1aSopenharmony_ci float quality_factor; 201cabdff1aSopenharmony_ci} RcOverride; 202cabdff1aSopenharmony_ci 203cabdff1aSopenharmony_ci/* encoding support 204cabdff1aSopenharmony_ci These flags can be passed in AVCodecContext.flags before initialization. 205cabdff1aSopenharmony_ci Note: Not everything is supported yet. 206cabdff1aSopenharmony_ci*/ 207cabdff1aSopenharmony_ci 208cabdff1aSopenharmony_ci/** 209cabdff1aSopenharmony_ci * Allow decoders to produce frames with data planes that are not aligned 210cabdff1aSopenharmony_ci * to CPU requirements (e.g. due to cropping). 211cabdff1aSopenharmony_ci */ 212cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_UNALIGNED (1 << 0) 213cabdff1aSopenharmony_ci/** 214cabdff1aSopenharmony_ci * Use fixed qscale. 215cabdff1aSopenharmony_ci */ 216cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_QSCALE (1 << 1) 217cabdff1aSopenharmony_ci/** 218cabdff1aSopenharmony_ci * 4 MV per MB allowed / advanced prediction for H.263. 219cabdff1aSopenharmony_ci */ 220cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_4MV (1 << 2) 221cabdff1aSopenharmony_ci/** 222cabdff1aSopenharmony_ci * Output even those frames that might be corrupted. 223cabdff1aSopenharmony_ci */ 224cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) 225cabdff1aSopenharmony_ci/** 226cabdff1aSopenharmony_ci * Use qpel MC. 227cabdff1aSopenharmony_ci */ 228cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_QPEL (1 << 4) 229cabdff1aSopenharmony_ci/** 230cabdff1aSopenharmony_ci * Don't output frames whose parameters differ from first 231cabdff1aSopenharmony_ci * decoded frame in stream. 232cabdff1aSopenharmony_ci */ 233cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) 234cabdff1aSopenharmony_ci/** 235cabdff1aSopenharmony_ci * Use internal 2pass ratecontrol in first pass mode. 236cabdff1aSopenharmony_ci */ 237cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_PASS1 (1 << 9) 238cabdff1aSopenharmony_ci/** 239cabdff1aSopenharmony_ci * Use internal 2pass ratecontrol in second pass mode. 240cabdff1aSopenharmony_ci */ 241cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_PASS2 (1 << 10) 242cabdff1aSopenharmony_ci/** 243cabdff1aSopenharmony_ci * loop filter. 244cabdff1aSopenharmony_ci */ 245cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) 246cabdff1aSopenharmony_ci/** 247cabdff1aSopenharmony_ci * Only decode/encode grayscale. 248cabdff1aSopenharmony_ci */ 249cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_GRAY (1 << 13) 250cabdff1aSopenharmony_ci/** 251cabdff1aSopenharmony_ci * error[?] variables will be set during encoding. 252cabdff1aSopenharmony_ci */ 253cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_PSNR (1 << 15) 254cabdff1aSopenharmony_ci#if FF_API_FLAG_TRUNCATED 255cabdff1aSopenharmony_ci/** 256cabdff1aSopenharmony_ci * Input bitstream might be truncated at a random location 257cabdff1aSopenharmony_ci * instead of only at frame boundaries. 258cabdff1aSopenharmony_ci * 259cabdff1aSopenharmony_ci * @deprecated use codec parsers for packetizing input 260cabdff1aSopenharmony_ci */ 261cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_TRUNCATED (1 << 16) 262cabdff1aSopenharmony_ci#endif 263cabdff1aSopenharmony_ci/** 264cabdff1aSopenharmony_ci * Use interlaced DCT. 265cabdff1aSopenharmony_ci */ 266cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) 267cabdff1aSopenharmony_ci/** 268cabdff1aSopenharmony_ci * Force low delay. 269cabdff1aSopenharmony_ci */ 270cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) 271cabdff1aSopenharmony_ci/** 272cabdff1aSopenharmony_ci * Place global headers in extradata instead of every keyframe. 273cabdff1aSopenharmony_ci */ 274cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) 275cabdff1aSopenharmony_ci/** 276cabdff1aSopenharmony_ci * Use only bitexact stuff (except (I)DCT). 277cabdff1aSopenharmony_ci */ 278cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_BITEXACT (1 << 23) 279cabdff1aSopenharmony_ci/* Fx : Flag for H.263+ extra options */ 280cabdff1aSopenharmony_ci/** 281cabdff1aSopenharmony_ci * H.263 advanced intra coding / MPEG-4 AC prediction 282cabdff1aSopenharmony_ci */ 283cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_AC_PRED (1 << 24) 284cabdff1aSopenharmony_ci/** 285cabdff1aSopenharmony_ci * interlaced motion estimation 286cabdff1aSopenharmony_ci */ 287cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) 288cabdff1aSopenharmony_ci#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) 289cabdff1aSopenharmony_ci 290cabdff1aSopenharmony_ci/** 291cabdff1aSopenharmony_ci * Allow non spec compliant speedup tricks. 292cabdff1aSopenharmony_ci */ 293cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_FAST (1 << 0) 294cabdff1aSopenharmony_ci/** 295cabdff1aSopenharmony_ci * Skip bitstream encoding. 296cabdff1aSopenharmony_ci */ 297cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) 298cabdff1aSopenharmony_ci/** 299cabdff1aSopenharmony_ci * Place global headers at every keyframe instead of in extradata. 300cabdff1aSopenharmony_ci */ 301cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) 302cabdff1aSopenharmony_ci 303cabdff1aSopenharmony_ci/** 304cabdff1aSopenharmony_ci * timecode is in drop frame format. DEPRECATED!!!! 305cabdff1aSopenharmony_ci */ 306cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) 307cabdff1aSopenharmony_ci 308cabdff1aSopenharmony_ci/** 309cabdff1aSopenharmony_ci * Input bitstream might be truncated at a packet boundaries 310cabdff1aSopenharmony_ci * instead of only at frame boundaries. 311cabdff1aSopenharmony_ci */ 312cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_CHUNKS (1 << 15) 313cabdff1aSopenharmony_ci/** 314cabdff1aSopenharmony_ci * Discard cropping information from SPS. 315cabdff1aSopenharmony_ci */ 316cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) 317cabdff1aSopenharmony_ci 318cabdff1aSopenharmony_ci/** 319cabdff1aSopenharmony_ci * Show all frames before the first keyframe 320cabdff1aSopenharmony_ci */ 321cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) 322cabdff1aSopenharmony_ci/** 323cabdff1aSopenharmony_ci * Export motion vectors through frame side data 324cabdff1aSopenharmony_ci */ 325cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) 326cabdff1aSopenharmony_ci/** 327cabdff1aSopenharmony_ci * Do not skip samples and export skip information as frame side data 328cabdff1aSopenharmony_ci */ 329cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) 330cabdff1aSopenharmony_ci/** 331cabdff1aSopenharmony_ci * Do not reset ASS ReadOrder field on flush (subtitles decoding) 332cabdff1aSopenharmony_ci */ 333cabdff1aSopenharmony_ci#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) 334cabdff1aSopenharmony_ci 335cabdff1aSopenharmony_ci/* Unsupported options : 336cabdff1aSopenharmony_ci * Syntax Arithmetic coding (SAC) 337cabdff1aSopenharmony_ci * Reference Picture Selection 338cabdff1aSopenharmony_ci * Independent Segment Decoding */ 339cabdff1aSopenharmony_ci/* /Fx */ 340cabdff1aSopenharmony_ci/* codec capabilities */ 341cabdff1aSopenharmony_ci 342cabdff1aSopenharmony_ci/* Exported side data. 343cabdff1aSopenharmony_ci These flags can be passed in AVCodecContext.export_side_data before initialization. 344cabdff1aSopenharmony_ci*/ 345cabdff1aSopenharmony_ci/** 346cabdff1aSopenharmony_ci * Export motion vectors through frame side data 347cabdff1aSopenharmony_ci */ 348cabdff1aSopenharmony_ci#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) 349cabdff1aSopenharmony_ci/** 350cabdff1aSopenharmony_ci * Export encoder Producer Reference Time through packet side data 351cabdff1aSopenharmony_ci */ 352cabdff1aSopenharmony_ci#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) 353cabdff1aSopenharmony_ci/** 354cabdff1aSopenharmony_ci * Decoding only. 355cabdff1aSopenharmony_ci * Export the AVVideoEncParams structure through frame side data. 356cabdff1aSopenharmony_ci */ 357cabdff1aSopenharmony_ci#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) 358cabdff1aSopenharmony_ci/** 359cabdff1aSopenharmony_ci * Decoding only. 360cabdff1aSopenharmony_ci * Do not apply film grain, export it instead. 361cabdff1aSopenharmony_ci */ 362cabdff1aSopenharmony_ci#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) 363cabdff1aSopenharmony_ci 364cabdff1aSopenharmony_ci/** 365cabdff1aSopenharmony_ci * The decoder will keep a reference to the frame and may reuse it later. 366cabdff1aSopenharmony_ci */ 367cabdff1aSopenharmony_ci#define AV_GET_BUFFER_FLAG_REF (1 << 0) 368cabdff1aSopenharmony_ci 369cabdff1aSopenharmony_ci/** 370cabdff1aSopenharmony_ci * The encoder will keep a reference to the packet and may reuse it later. 371cabdff1aSopenharmony_ci */ 372cabdff1aSopenharmony_ci#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) 373cabdff1aSopenharmony_ci 374cabdff1aSopenharmony_cistruct AVCodecInternal; 375cabdff1aSopenharmony_ci 376cabdff1aSopenharmony_ci/** 377cabdff1aSopenharmony_ci * main external API structure. 378cabdff1aSopenharmony_ci * New fields can be added to the end with minor version bumps. 379cabdff1aSopenharmony_ci * Removal, reordering and changes to existing fields require a major 380cabdff1aSopenharmony_ci * version bump. 381cabdff1aSopenharmony_ci * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user 382cabdff1aSopenharmony_ci * applications. 383cabdff1aSopenharmony_ci * The name string for AVOptions options matches the associated command line 384cabdff1aSopenharmony_ci * parameter name and can be found in libavcodec/options_table.h 385cabdff1aSopenharmony_ci * The AVOption/command line parameter names differ in some cases from the C 386cabdff1aSopenharmony_ci * structure field names for historic reasons or brevity. 387cabdff1aSopenharmony_ci * sizeof(AVCodecContext) must not be used outside libav*. 388cabdff1aSopenharmony_ci */ 389cabdff1aSopenharmony_citypedef struct AVCodecContext { 390cabdff1aSopenharmony_ci /** 391cabdff1aSopenharmony_ci * information on struct for av_log 392cabdff1aSopenharmony_ci * - set by avcodec_alloc_context3 393cabdff1aSopenharmony_ci */ 394cabdff1aSopenharmony_ci const AVClass *av_class; 395cabdff1aSopenharmony_ci int log_level_offset; 396cabdff1aSopenharmony_ci 397cabdff1aSopenharmony_ci enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ 398cabdff1aSopenharmony_ci const struct AVCodec *codec; 399cabdff1aSopenharmony_ci enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ 400cabdff1aSopenharmony_ci 401cabdff1aSopenharmony_ci /** 402cabdff1aSopenharmony_ci * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). 403cabdff1aSopenharmony_ci * This is used to work around some encoder bugs. 404cabdff1aSopenharmony_ci * A demuxer should set this to what is stored in the field used to identify the codec. 405cabdff1aSopenharmony_ci * If there are multiple such fields in a container then the demuxer should choose the one 406cabdff1aSopenharmony_ci * which maximizes the information about the used codec. 407cabdff1aSopenharmony_ci * If the codec tag field in a container is larger than 32 bits then the demuxer should 408cabdff1aSopenharmony_ci * remap the longer ID to 32 bits with a table or other structure. Alternatively a new 409cabdff1aSopenharmony_ci * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated 410cabdff1aSopenharmony_ci * first. 411cabdff1aSopenharmony_ci * - encoding: Set by user, if not then the default based on codec_id will be used. 412cabdff1aSopenharmony_ci * - decoding: Set by user, will be converted to uppercase by libavcodec during init. 413cabdff1aSopenharmony_ci */ 414cabdff1aSopenharmony_ci unsigned int codec_tag; 415cabdff1aSopenharmony_ci 416cabdff1aSopenharmony_ci void *priv_data; 417cabdff1aSopenharmony_ci 418cabdff1aSopenharmony_ci /** 419cabdff1aSopenharmony_ci * Private context used for internal data. 420cabdff1aSopenharmony_ci * 421cabdff1aSopenharmony_ci * Unlike priv_data, this is not codec-specific. It is used in general 422cabdff1aSopenharmony_ci * libavcodec functions. 423cabdff1aSopenharmony_ci */ 424cabdff1aSopenharmony_ci struct AVCodecInternal *internal; 425cabdff1aSopenharmony_ci 426cabdff1aSopenharmony_ci /** 427cabdff1aSopenharmony_ci * Private data of the user, can be used to carry app specific stuff. 428cabdff1aSopenharmony_ci * - encoding: Set by user. 429cabdff1aSopenharmony_ci * - decoding: Set by user. 430cabdff1aSopenharmony_ci */ 431cabdff1aSopenharmony_ci void *opaque; 432cabdff1aSopenharmony_ci 433cabdff1aSopenharmony_ci /** 434cabdff1aSopenharmony_ci * the average bitrate 435cabdff1aSopenharmony_ci * - encoding: Set by user; unused for constant quantizer encoding. 436cabdff1aSopenharmony_ci * - decoding: Set by user, may be overwritten by libavcodec 437cabdff1aSopenharmony_ci * if this info is available in the stream 438cabdff1aSopenharmony_ci */ 439cabdff1aSopenharmony_ci int64_t bit_rate; 440cabdff1aSopenharmony_ci 441cabdff1aSopenharmony_ci /** 442cabdff1aSopenharmony_ci * number of bits the bitstream is allowed to diverge from the reference. 443cabdff1aSopenharmony_ci * the reference can be CBR (for CBR pass1) or VBR (for pass2) 444cabdff1aSopenharmony_ci * - encoding: Set by user; unused for constant quantizer encoding. 445cabdff1aSopenharmony_ci * - decoding: unused 446cabdff1aSopenharmony_ci */ 447cabdff1aSopenharmony_ci int bit_rate_tolerance; 448cabdff1aSopenharmony_ci 449cabdff1aSopenharmony_ci /** 450cabdff1aSopenharmony_ci * Global quality for codecs which cannot change it per frame. 451cabdff1aSopenharmony_ci * This should be proportional to MPEG-1/2/4 qscale. 452cabdff1aSopenharmony_ci * - encoding: Set by user. 453cabdff1aSopenharmony_ci * - decoding: unused 454cabdff1aSopenharmony_ci */ 455cabdff1aSopenharmony_ci int global_quality; 456cabdff1aSopenharmony_ci 457cabdff1aSopenharmony_ci /** 458cabdff1aSopenharmony_ci * - encoding: Set by user. 459cabdff1aSopenharmony_ci * - decoding: unused 460cabdff1aSopenharmony_ci */ 461cabdff1aSopenharmony_ci int compression_level; 462cabdff1aSopenharmony_ci#define FF_COMPRESSION_DEFAULT -1 463cabdff1aSopenharmony_ci 464cabdff1aSopenharmony_ci /** 465cabdff1aSopenharmony_ci * AV_CODEC_FLAG_*. 466cabdff1aSopenharmony_ci * - encoding: Set by user. 467cabdff1aSopenharmony_ci * - decoding: Set by user. 468cabdff1aSopenharmony_ci */ 469cabdff1aSopenharmony_ci int flags; 470cabdff1aSopenharmony_ci 471cabdff1aSopenharmony_ci /** 472cabdff1aSopenharmony_ci * AV_CODEC_FLAG2_* 473cabdff1aSopenharmony_ci * - encoding: Set by user. 474cabdff1aSopenharmony_ci * - decoding: Set by user. 475cabdff1aSopenharmony_ci */ 476cabdff1aSopenharmony_ci int flags2; 477cabdff1aSopenharmony_ci 478cabdff1aSopenharmony_ci /** 479cabdff1aSopenharmony_ci * some codecs need / can use extradata like Huffman tables. 480cabdff1aSopenharmony_ci * MJPEG: Huffman tables 481cabdff1aSopenharmony_ci * rv10: additional flags 482cabdff1aSopenharmony_ci * MPEG-4: global headers (they can be in the bitstream or here) 483cabdff1aSopenharmony_ci * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger 484cabdff1aSopenharmony_ci * than extradata_size to avoid problems if it is read with the bitstream reader. 485cabdff1aSopenharmony_ci * The bytewise contents of extradata must not depend on the architecture or CPU endianness. 486cabdff1aSopenharmony_ci * Must be allocated with the av_malloc() family of functions. 487cabdff1aSopenharmony_ci * - encoding: Set/allocated/freed by libavcodec. 488cabdff1aSopenharmony_ci * - decoding: Set/allocated/freed by user. 489cabdff1aSopenharmony_ci */ 490cabdff1aSopenharmony_ci uint8_t *extradata; 491cabdff1aSopenharmony_ci int extradata_size; 492cabdff1aSopenharmony_ci 493cabdff1aSopenharmony_ci /** 494cabdff1aSopenharmony_ci * This is the fundamental unit of time (in seconds) in terms 495cabdff1aSopenharmony_ci * of which frame timestamps are represented. For fixed-fps content, 496cabdff1aSopenharmony_ci * timebase should be 1/framerate and timestamp increments should be 497cabdff1aSopenharmony_ci * identically 1. 498cabdff1aSopenharmony_ci * This often, but not always is the inverse of the frame rate or field rate 499cabdff1aSopenharmony_ci * for video. 1/time_base is not the average frame rate if the frame rate is not 500cabdff1aSopenharmony_ci * constant. 501cabdff1aSopenharmony_ci * 502cabdff1aSopenharmony_ci * Like containers, elementary streams also can store timestamps, 1/time_base 503cabdff1aSopenharmony_ci * is the unit in which these timestamps are specified. 504cabdff1aSopenharmony_ci * As example of such codec time base see ISO/IEC 14496-2:2001(E) 505cabdff1aSopenharmony_ci * vop_time_increment_resolution and fixed_vop_rate 506cabdff1aSopenharmony_ci * (fixed_vop_rate == 0 implies that it is different from the framerate) 507cabdff1aSopenharmony_ci * 508cabdff1aSopenharmony_ci * - encoding: MUST be set by user. 509cabdff1aSopenharmony_ci * - decoding: the use of this field for decoding is deprecated. 510cabdff1aSopenharmony_ci * Use framerate instead. 511cabdff1aSopenharmony_ci */ 512cabdff1aSopenharmony_ci AVRational time_base; 513cabdff1aSopenharmony_ci 514cabdff1aSopenharmony_ci /** 515cabdff1aSopenharmony_ci * For some codecs, the time base is closer to the field rate than the frame rate. 516cabdff1aSopenharmony_ci * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration 517cabdff1aSopenharmony_ci * if no telecine is used ... 518cabdff1aSopenharmony_ci * 519cabdff1aSopenharmony_ci * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. 520cabdff1aSopenharmony_ci */ 521cabdff1aSopenharmony_ci int ticks_per_frame; 522cabdff1aSopenharmony_ci 523cabdff1aSopenharmony_ci /** 524cabdff1aSopenharmony_ci * Codec delay. 525cabdff1aSopenharmony_ci * 526cabdff1aSopenharmony_ci * Encoding: Number of frames delay there will be from the encoder input to 527cabdff1aSopenharmony_ci * the decoder output. (we assume the decoder matches the spec) 528cabdff1aSopenharmony_ci * Decoding: Number of frames delay in addition to what a standard decoder 529cabdff1aSopenharmony_ci * as specified in the spec would produce. 530cabdff1aSopenharmony_ci * 531cabdff1aSopenharmony_ci * Video: 532cabdff1aSopenharmony_ci * Number of frames the decoded output will be delayed relative to the 533cabdff1aSopenharmony_ci * encoded input. 534cabdff1aSopenharmony_ci * 535cabdff1aSopenharmony_ci * Audio: 536cabdff1aSopenharmony_ci * For encoding, this field is unused (see initial_padding). 537cabdff1aSopenharmony_ci * 538cabdff1aSopenharmony_ci * For decoding, this is the number of samples the decoder needs to 539cabdff1aSopenharmony_ci * output before the decoder's output is valid. When seeking, you should 540cabdff1aSopenharmony_ci * start decoding this many samples prior to your desired seek point. 541cabdff1aSopenharmony_ci * 542cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 543cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 544cabdff1aSopenharmony_ci */ 545cabdff1aSopenharmony_ci int delay; 546cabdff1aSopenharmony_ci 547cabdff1aSopenharmony_ci 548cabdff1aSopenharmony_ci /* video only */ 549cabdff1aSopenharmony_ci /** 550cabdff1aSopenharmony_ci * picture width / height. 551cabdff1aSopenharmony_ci * 552cabdff1aSopenharmony_ci * @note Those fields may not match the values of the last 553cabdff1aSopenharmony_ci * AVFrame output by avcodec_receive_frame() due frame 554cabdff1aSopenharmony_ci * reordering. 555cabdff1aSopenharmony_ci * 556cabdff1aSopenharmony_ci * - encoding: MUST be set by user. 557cabdff1aSopenharmony_ci * - decoding: May be set by the user before opening the decoder if known e.g. 558cabdff1aSopenharmony_ci * from the container. Some decoders will require the dimensions 559cabdff1aSopenharmony_ci * to be set by the caller. During decoding, the decoder may 560cabdff1aSopenharmony_ci * overwrite those values as required while parsing the data. 561cabdff1aSopenharmony_ci */ 562cabdff1aSopenharmony_ci int width, height; 563cabdff1aSopenharmony_ci 564cabdff1aSopenharmony_ci /** 565cabdff1aSopenharmony_ci * Bitstream width / height, may be different from width/height e.g. when 566cabdff1aSopenharmony_ci * the decoded frame is cropped before being output or lowres is enabled. 567cabdff1aSopenharmony_ci * 568cabdff1aSopenharmony_ci * @note Those field may not match the value of the last 569cabdff1aSopenharmony_ci * AVFrame output by avcodec_receive_frame() due frame 570cabdff1aSopenharmony_ci * reordering. 571cabdff1aSopenharmony_ci * 572cabdff1aSopenharmony_ci * - encoding: unused 573cabdff1aSopenharmony_ci * - decoding: May be set by the user before opening the decoder if known 574cabdff1aSopenharmony_ci * e.g. from the container. During decoding, the decoder may 575cabdff1aSopenharmony_ci * overwrite those values as required while parsing the data. 576cabdff1aSopenharmony_ci */ 577cabdff1aSopenharmony_ci int coded_width, coded_height; 578cabdff1aSopenharmony_ci 579cabdff1aSopenharmony_ci /** 580cabdff1aSopenharmony_ci * the number of pictures in a group of pictures, or 0 for intra_only 581cabdff1aSopenharmony_ci * - encoding: Set by user. 582cabdff1aSopenharmony_ci * - decoding: unused 583cabdff1aSopenharmony_ci */ 584cabdff1aSopenharmony_ci int gop_size; 585cabdff1aSopenharmony_ci 586cabdff1aSopenharmony_ci /** 587cabdff1aSopenharmony_ci * Pixel format, see AV_PIX_FMT_xxx. 588cabdff1aSopenharmony_ci * May be set by the demuxer if known from headers. 589cabdff1aSopenharmony_ci * May be overridden by the decoder if it knows better. 590cabdff1aSopenharmony_ci * 591cabdff1aSopenharmony_ci * @note This field may not match the value of the last 592cabdff1aSopenharmony_ci * AVFrame output by avcodec_receive_frame() due frame 593cabdff1aSopenharmony_ci * reordering. 594cabdff1aSopenharmony_ci * 595cabdff1aSopenharmony_ci * - encoding: Set by user. 596cabdff1aSopenharmony_ci * - decoding: Set by user if known, overridden by libavcodec while 597cabdff1aSopenharmony_ci * parsing the data. 598cabdff1aSopenharmony_ci */ 599cabdff1aSopenharmony_ci enum AVPixelFormat pix_fmt; 600cabdff1aSopenharmony_ci 601cabdff1aSopenharmony_ci /** 602cabdff1aSopenharmony_ci * If non NULL, 'draw_horiz_band' is called by the libavcodec 603cabdff1aSopenharmony_ci * decoder to draw a horizontal band. It improves cache usage. Not 604cabdff1aSopenharmony_ci * all codecs can do that. You must check the codec capabilities 605cabdff1aSopenharmony_ci * beforehand. 606cabdff1aSopenharmony_ci * When multithreading is used, it may be called from multiple threads 607cabdff1aSopenharmony_ci * at the same time; threads might draw different parts of the same AVFrame, 608cabdff1aSopenharmony_ci * or multiple AVFrames, and there is no guarantee that slices will be drawn 609cabdff1aSopenharmony_ci * in order. 610cabdff1aSopenharmony_ci * The function is also used by hardware acceleration APIs. 611cabdff1aSopenharmony_ci * It is called at least once during frame decoding to pass 612cabdff1aSopenharmony_ci * the data needed for hardware render. 613cabdff1aSopenharmony_ci * In that mode instead of pixel data, AVFrame points to 614cabdff1aSopenharmony_ci * a structure specific to the acceleration API. The application 615cabdff1aSopenharmony_ci * reads the structure and can change some fields to indicate progress 616cabdff1aSopenharmony_ci * or mark state. 617cabdff1aSopenharmony_ci * - encoding: unused 618cabdff1aSopenharmony_ci * - decoding: Set by user. 619cabdff1aSopenharmony_ci * @param height the height of the slice 620cabdff1aSopenharmony_ci * @param y the y position of the slice 621cabdff1aSopenharmony_ci * @param type 1->top field, 2->bottom field, 3->frame 622cabdff1aSopenharmony_ci * @param offset offset into the AVFrame.data from which the slice should be read 623cabdff1aSopenharmony_ci */ 624cabdff1aSopenharmony_ci void (*draw_horiz_band)(struct AVCodecContext *s, 625cabdff1aSopenharmony_ci const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], 626cabdff1aSopenharmony_ci int y, int type, int height); 627cabdff1aSopenharmony_ci 628cabdff1aSopenharmony_ci /** 629cabdff1aSopenharmony_ci * Callback to negotiate the pixel format. Decoding only, may be set by the 630cabdff1aSopenharmony_ci * caller before avcodec_open2(). 631cabdff1aSopenharmony_ci * 632cabdff1aSopenharmony_ci * Called by some decoders to select the pixel format that will be used for 633cabdff1aSopenharmony_ci * the output frames. This is mainly used to set up hardware acceleration, 634cabdff1aSopenharmony_ci * then the provided format list contains the corresponding hwaccel pixel 635cabdff1aSopenharmony_ci * formats alongside the "software" one. The software pixel format may also 636cabdff1aSopenharmony_ci * be retrieved from \ref sw_pix_fmt. 637cabdff1aSopenharmony_ci * 638cabdff1aSopenharmony_ci * This callback will be called when the coded frame properties (such as 639cabdff1aSopenharmony_ci * resolution, pixel format, etc.) change and more than one output format is 640cabdff1aSopenharmony_ci * supported for those new properties. If a hardware pixel format is chosen 641cabdff1aSopenharmony_ci * and initialization for it fails, the callback may be called again 642cabdff1aSopenharmony_ci * immediately. 643cabdff1aSopenharmony_ci * 644cabdff1aSopenharmony_ci * This callback may be called from different threads if the decoder is 645cabdff1aSopenharmony_ci * multi-threaded, but not from more than one thread simultaneously. 646cabdff1aSopenharmony_ci * 647cabdff1aSopenharmony_ci * @param fmt list of formats which may be used in the current 648cabdff1aSopenharmony_ci * configuration, terminated by AV_PIX_FMT_NONE. 649cabdff1aSopenharmony_ci * @warning Behavior is undefined if the callback returns a value other 650cabdff1aSopenharmony_ci * than one of the formats in fmt or AV_PIX_FMT_NONE. 651cabdff1aSopenharmony_ci * @return the chosen format or AV_PIX_FMT_NONE 652cabdff1aSopenharmony_ci */ 653cabdff1aSopenharmony_ci enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); 654cabdff1aSopenharmony_ci 655cabdff1aSopenharmony_ci /** 656cabdff1aSopenharmony_ci * maximum number of B-frames between non-B-frames 657cabdff1aSopenharmony_ci * Note: The output will be delayed by max_b_frames+1 relative to the input. 658cabdff1aSopenharmony_ci * - encoding: Set by user. 659cabdff1aSopenharmony_ci * - decoding: unused 660cabdff1aSopenharmony_ci */ 661cabdff1aSopenharmony_ci int max_b_frames; 662cabdff1aSopenharmony_ci 663cabdff1aSopenharmony_ci /** 664cabdff1aSopenharmony_ci * qscale factor between IP and B-frames 665cabdff1aSopenharmony_ci * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). 666cabdff1aSopenharmony_ci * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 667cabdff1aSopenharmony_ci * - encoding: Set by user. 668cabdff1aSopenharmony_ci * - decoding: unused 669cabdff1aSopenharmony_ci */ 670cabdff1aSopenharmony_ci float b_quant_factor; 671cabdff1aSopenharmony_ci 672cabdff1aSopenharmony_ci /** 673cabdff1aSopenharmony_ci * qscale offset between IP and B-frames 674cabdff1aSopenharmony_ci * - encoding: Set by user. 675cabdff1aSopenharmony_ci * - decoding: unused 676cabdff1aSopenharmony_ci */ 677cabdff1aSopenharmony_ci float b_quant_offset; 678cabdff1aSopenharmony_ci 679cabdff1aSopenharmony_ci /** 680cabdff1aSopenharmony_ci * Size of the frame reordering buffer in the decoder. 681cabdff1aSopenharmony_ci * For MPEG-2 it is 1 IPB or 0 low delay IP. 682cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 683cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 684cabdff1aSopenharmony_ci */ 685cabdff1aSopenharmony_ci int has_b_frames; 686cabdff1aSopenharmony_ci 687cabdff1aSopenharmony_ci /** 688cabdff1aSopenharmony_ci * qscale factor between P- and I-frames 689cabdff1aSopenharmony_ci * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). 690cabdff1aSopenharmony_ci * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 691cabdff1aSopenharmony_ci * - encoding: Set by user. 692cabdff1aSopenharmony_ci * - decoding: unused 693cabdff1aSopenharmony_ci */ 694cabdff1aSopenharmony_ci float i_quant_factor; 695cabdff1aSopenharmony_ci 696cabdff1aSopenharmony_ci /** 697cabdff1aSopenharmony_ci * qscale offset between P and I-frames 698cabdff1aSopenharmony_ci * - encoding: Set by user. 699cabdff1aSopenharmony_ci * - decoding: unused 700cabdff1aSopenharmony_ci */ 701cabdff1aSopenharmony_ci float i_quant_offset; 702cabdff1aSopenharmony_ci 703cabdff1aSopenharmony_ci /** 704cabdff1aSopenharmony_ci * luminance masking (0-> disabled) 705cabdff1aSopenharmony_ci * - encoding: Set by user. 706cabdff1aSopenharmony_ci * - decoding: unused 707cabdff1aSopenharmony_ci */ 708cabdff1aSopenharmony_ci float lumi_masking; 709cabdff1aSopenharmony_ci 710cabdff1aSopenharmony_ci /** 711cabdff1aSopenharmony_ci * temporary complexity masking (0-> disabled) 712cabdff1aSopenharmony_ci * - encoding: Set by user. 713cabdff1aSopenharmony_ci * - decoding: unused 714cabdff1aSopenharmony_ci */ 715cabdff1aSopenharmony_ci float temporal_cplx_masking; 716cabdff1aSopenharmony_ci 717cabdff1aSopenharmony_ci /** 718cabdff1aSopenharmony_ci * spatial complexity masking (0-> disabled) 719cabdff1aSopenharmony_ci * - encoding: Set by user. 720cabdff1aSopenharmony_ci * - decoding: unused 721cabdff1aSopenharmony_ci */ 722cabdff1aSopenharmony_ci float spatial_cplx_masking; 723cabdff1aSopenharmony_ci 724cabdff1aSopenharmony_ci /** 725cabdff1aSopenharmony_ci * p block masking (0-> disabled) 726cabdff1aSopenharmony_ci * - encoding: Set by user. 727cabdff1aSopenharmony_ci * - decoding: unused 728cabdff1aSopenharmony_ci */ 729cabdff1aSopenharmony_ci float p_masking; 730cabdff1aSopenharmony_ci 731cabdff1aSopenharmony_ci /** 732cabdff1aSopenharmony_ci * darkness masking (0-> disabled) 733cabdff1aSopenharmony_ci * - encoding: Set by user. 734cabdff1aSopenharmony_ci * - decoding: unused 735cabdff1aSopenharmony_ci */ 736cabdff1aSopenharmony_ci float dark_masking; 737cabdff1aSopenharmony_ci 738cabdff1aSopenharmony_ci /** 739cabdff1aSopenharmony_ci * slice count 740cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 741cabdff1aSopenharmony_ci * - decoding: Set by user (or 0). 742cabdff1aSopenharmony_ci */ 743cabdff1aSopenharmony_ci int slice_count; 744cabdff1aSopenharmony_ci 745cabdff1aSopenharmony_ci /** 746cabdff1aSopenharmony_ci * slice offsets in the frame in bytes 747cabdff1aSopenharmony_ci * - encoding: Set/allocated by libavcodec. 748cabdff1aSopenharmony_ci * - decoding: Set/allocated by user (or NULL). 749cabdff1aSopenharmony_ci */ 750cabdff1aSopenharmony_ci int *slice_offset; 751cabdff1aSopenharmony_ci 752cabdff1aSopenharmony_ci /** 753cabdff1aSopenharmony_ci * sample aspect ratio (0 if unknown) 754cabdff1aSopenharmony_ci * That is the width of a pixel divided by the height of the pixel. 755cabdff1aSopenharmony_ci * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. 756cabdff1aSopenharmony_ci * - encoding: Set by user. 757cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 758cabdff1aSopenharmony_ci */ 759cabdff1aSopenharmony_ci AVRational sample_aspect_ratio; 760cabdff1aSopenharmony_ci 761cabdff1aSopenharmony_ci /** 762cabdff1aSopenharmony_ci * motion estimation comparison function 763cabdff1aSopenharmony_ci * - encoding: Set by user. 764cabdff1aSopenharmony_ci * - decoding: unused 765cabdff1aSopenharmony_ci */ 766cabdff1aSopenharmony_ci int me_cmp; 767cabdff1aSopenharmony_ci /** 768cabdff1aSopenharmony_ci * subpixel motion estimation comparison function 769cabdff1aSopenharmony_ci * - encoding: Set by user. 770cabdff1aSopenharmony_ci * - decoding: unused 771cabdff1aSopenharmony_ci */ 772cabdff1aSopenharmony_ci int me_sub_cmp; 773cabdff1aSopenharmony_ci /** 774cabdff1aSopenharmony_ci * macroblock comparison function (not supported yet) 775cabdff1aSopenharmony_ci * - encoding: Set by user. 776cabdff1aSopenharmony_ci * - decoding: unused 777cabdff1aSopenharmony_ci */ 778cabdff1aSopenharmony_ci int mb_cmp; 779cabdff1aSopenharmony_ci /** 780cabdff1aSopenharmony_ci * interlaced DCT comparison function 781cabdff1aSopenharmony_ci * - encoding: Set by user. 782cabdff1aSopenharmony_ci * - decoding: unused 783cabdff1aSopenharmony_ci */ 784cabdff1aSopenharmony_ci int ildct_cmp; 785cabdff1aSopenharmony_ci#define FF_CMP_SAD 0 786cabdff1aSopenharmony_ci#define FF_CMP_SSE 1 787cabdff1aSopenharmony_ci#define FF_CMP_SATD 2 788cabdff1aSopenharmony_ci#define FF_CMP_DCT 3 789cabdff1aSopenharmony_ci#define FF_CMP_PSNR 4 790cabdff1aSopenharmony_ci#define FF_CMP_BIT 5 791cabdff1aSopenharmony_ci#define FF_CMP_RD 6 792cabdff1aSopenharmony_ci#define FF_CMP_ZERO 7 793cabdff1aSopenharmony_ci#define FF_CMP_VSAD 8 794cabdff1aSopenharmony_ci#define FF_CMP_VSSE 9 795cabdff1aSopenharmony_ci#define FF_CMP_NSSE 10 796cabdff1aSopenharmony_ci#define FF_CMP_W53 11 797cabdff1aSopenharmony_ci#define FF_CMP_W97 12 798cabdff1aSopenharmony_ci#define FF_CMP_DCTMAX 13 799cabdff1aSopenharmony_ci#define FF_CMP_DCT264 14 800cabdff1aSopenharmony_ci#define FF_CMP_MEDIAN_SAD 15 801cabdff1aSopenharmony_ci#define FF_CMP_CHROMA 256 802cabdff1aSopenharmony_ci 803cabdff1aSopenharmony_ci /** 804cabdff1aSopenharmony_ci * ME diamond size & shape 805cabdff1aSopenharmony_ci * - encoding: Set by user. 806cabdff1aSopenharmony_ci * - decoding: unused 807cabdff1aSopenharmony_ci */ 808cabdff1aSopenharmony_ci int dia_size; 809cabdff1aSopenharmony_ci 810cabdff1aSopenharmony_ci /** 811cabdff1aSopenharmony_ci * amount of previous MV predictors (2a+1 x 2a+1 square) 812cabdff1aSopenharmony_ci * - encoding: Set by user. 813cabdff1aSopenharmony_ci * - decoding: unused 814cabdff1aSopenharmony_ci */ 815cabdff1aSopenharmony_ci int last_predictor_count; 816cabdff1aSopenharmony_ci 817cabdff1aSopenharmony_ci /** 818cabdff1aSopenharmony_ci * motion estimation prepass comparison function 819cabdff1aSopenharmony_ci * - encoding: Set by user. 820cabdff1aSopenharmony_ci * - decoding: unused 821cabdff1aSopenharmony_ci */ 822cabdff1aSopenharmony_ci int me_pre_cmp; 823cabdff1aSopenharmony_ci 824cabdff1aSopenharmony_ci /** 825cabdff1aSopenharmony_ci * ME prepass diamond size & shape 826cabdff1aSopenharmony_ci * - encoding: Set by user. 827cabdff1aSopenharmony_ci * - decoding: unused 828cabdff1aSopenharmony_ci */ 829cabdff1aSopenharmony_ci int pre_dia_size; 830cabdff1aSopenharmony_ci 831cabdff1aSopenharmony_ci /** 832cabdff1aSopenharmony_ci * subpel ME quality 833cabdff1aSopenharmony_ci * - encoding: Set by user. 834cabdff1aSopenharmony_ci * - decoding: unused 835cabdff1aSopenharmony_ci */ 836cabdff1aSopenharmony_ci int me_subpel_quality; 837cabdff1aSopenharmony_ci 838cabdff1aSopenharmony_ci /** 839cabdff1aSopenharmony_ci * maximum motion estimation search range in subpel units 840cabdff1aSopenharmony_ci * If 0 then no limit. 841cabdff1aSopenharmony_ci * 842cabdff1aSopenharmony_ci * - encoding: Set by user. 843cabdff1aSopenharmony_ci * - decoding: unused 844cabdff1aSopenharmony_ci */ 845cabdff1aSopenharmony_ci int me_range; 846cabdff1aSopenharmony_ci 847cabdff1aSopenharmony_ci /** 848cabdff1aSopenharmony_ci * slice flags 849cabdff1aSopenharmony_ci * - encoding: unused 850cabdff1aSopenharmony_ci * - decoding: Set by user. 851cabdff1aSopenharmony_ci */ 852cabdff1aSopenharmony_ci int slice_flags; 853cabdff1aSopenharmony_ci#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display 854cabdff1aSopenharmony_ci#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) 855cabdff1aSopenharmony_ci#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) 856cabdff1aSopenharmony_ci 857cabdff1aSopenharmony_ci /** 858cabdff1aSopenharmony_ci * macroblock decision mode 859cabdff1aSopenharmony_ci * - encoding: Set by user. 860cabdff1aSopenharmony_ci * - decoding: unused 861cabdff1aSopenharmony_ci */ 862cabdff1aSopenharmony_ci int mb_decision; 863cabdff1aSopenharmony_ci#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp 864cabdff1aSopenharmony_ci#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits 865cabdff1aSopenharmony_ci#define FF_MB_DECISION_RD 2 ///< rate distortion 866cabdff1aSopenharmony_ci 867cabdff1aSopenharmony_ci /** 868cabdff1aSopenharmony_ci * custom intra quantization matrix 869cabdff1aSopenharmony_ci * Must be allocated with the av_malloc() family of functions, and will be freed in 870cabdff1aSopenharmony_ci * avcodec_free_context(). 871cabdff1aSopenharmony_ci * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. 872cabdff1aSopenharmony_ci * - decoding: Set/allocated/freed by libavcodec. 873cabdff1aSopenharmony_ci */ 874cabdff1aSopenharmony_ci uint16_t *intra_matrix; 875cabdff1aSopenharmony_ci 876cabdff1aSopenharmony_ci /** 877cabdff1aSopenharmony_ci * custom inter quantization matrix 878cabdff1aSopenharmony_ci * Must be allocated with the av_malloc() family of functions, and will be freed in 879cabdff1aSopenharmony_ci * avcodec_free_context(). 880cabdff1aSopenharmony_ci * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. 881cabdff1aSopenharmony_ci * - decoding: Set/allocated/freed by libavcodec. 882cabdff1aSopenharmony_ci */ 883cabdff1aSopenharmony_ci uint16_t *inter_matrix; 884cabdff1aSopenharmony_ci 885cabdff1aSopenharmony_ci /** 886cabdff1aSopenharmony_ci * precision of the intra DC coefficient - 8 887cabdff1aSopenharmony_ci * - encoding: Set by user. 888cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 889cabdff1aSopenharmony_ci */ 890cabdff1aSopenharmony_ci int intra_dc_precision; 891cabdff1aSopenharmony_ci 892cabdff1aSopenharmony_ci /** 893cabdff1aSopenharmony_ci * Number of macroblock rows at the top which are skipped. 894cabdff1aSopenharmony_ci * - encoding: unused 895cabdff1aSopenharmony_ci * - decoding: Set by user. 896cabdff1aSopenharmony_ci */ 897cabdff1aSopenharmony_ci int skip_top; 898cabdff1aSopenharmony_ci 899cabdff1aSopenharmony_ci /** 900cabdff1aSopenharmony_ci * Number of macroblock rows at the bottom which are skipped. 901cabdff1aSopenharmony_ci * - encoding: unused 902cabdff1aSopenharmony_ci * - decoding: Set by user. 903cabdff1aSopenharmony_ci */ 904cabdff1aSopenharmony_ci int skip_bottom; 905cabdff1aSopenharmony_ci 906cabdff1aSopenharmony_ci /** 907cabdff1aSopenharmony_ci * minimum MB Lagrange multiplier 908cabdff1aSopenharmony_ci * - encoding: Set by user. 909cabdff1aSopenharmony_ci * - decoding: unused 910cabdff1aSopenharmony_ci */ 911cabdff1aSopenharmony_ci int mb_lmin; 912cabdff1aSopenharmony_ci 913cabdff1aSopenharmony_ci /** 914cabdff1aSopenharmony_ci * maximum MB Lagrange multiplier 915cabdff1aSopenharmony_ci * - encoding: Set by user. 916cabdff1aSopenharmony_ci * - decoding: unused 917cabdff1aSopenharmony_ci */ 918cabdff1aSopenharmony_ci int mb_lmax; 919cabdff1aSopenharmony_ci 920cabdff1aSopenharmony_ci /** 921cabdff1aSopenharmony_ci * - encoding: Set by user. 922cabdff1aSopenharmony_ci * - decoding: unused 923cabdff1aSopenharmony_ci */ 924cabdff1aSopenharmony_ci int bidir_refine; 925cabdff1aSopenharmony_ci 926cabdff1aSopenharmony_ci /** 927cabdff1aSopenharmony_ci * minimum GOP size 928cabdff1aSopenharmony_ci * - encoding: Set by user. 929cabdff1aSopenharmony_ci * - decoding: unused 930cabdff1aSopenharmony_ci */ 931cabdff1aSopenharmony_ci int keyint_min; 932cabdff1aSopenharmony_ci 933cabdff1aSopenharmony_ci /** 934cabdff1aSopenharmony_ci * number of reference frames 935cabdff1aSopenharmony_ci * - encoding: Set by user. 936cabdff1aSopenharmony_ci * - decoding: Set by lavc. 937cabdff1aSopenharmony_ci */ 938cabdff1aSopenharmony_ci int refs; 939cabdff1aSopenharmony_ci 940cabdff1aSopenharmony_ci /** 941cabdff1aSopenharmony_ci * Note: Value depends upon the compare function used for fullpel ME. 942cabdff1aSopenharmony_ci * - encoding: Set by user. 943cabdff1aSopenharmony_ci * - decoding: unused 944cabdff1aSopenharmony_ci */ 945cabdff1aSopenharmony_ci int mv0_threshold; 946cabdff1aSopenharmony_ci 947cabdff1aSopenharmony_ci /** 948cabdff1aSopenharmony_ci * Chromaticity coordinates of the source primaries. 949cabdff1aSopenharmony_ci * - encoding: Set by user 950cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 951cabdff1aSopenharmony_ci */ 952cabdff1aSopenharmony_ci enum AVColorPrimaries color_primaries; 953cabdff1aSopenharmony_ci 954cabdff1aSopenharmony_ci /** 955cabdff1aSopenharmony_ci * Color Transfer Characteristic. 956cabdff1aSopenharmony_ci * - encoding: Set by user 957cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 958cabdff1aSopenharmony_ci */ 959cabdff1aSopenharmony_ci enum AVColorTransferCharacteristic color_trc; 960cabdff1aSopenharmony_ci 961cabdff1aSopenharmony_ci /** 962cabdff1aSopenharmony_ci * YUV colorspace type. 963cabdff1aSopenharmony_ci * - encoding: Set by user 964cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 965cabdff1aSopenharmony_ci */ 966cabdff1aSopenharmony_ci enum AVColorSpace colorspace; 967cabdff1aSopenharmony_ci 968cabdff1aSopenharmony_ci /** 969cabdff1aSopenharmony_ci * MPEG vs JPEG YUV range. 970cabdff1aSopenharmony_ci * - encoding: Set by user 971cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 972cabdff1aSopenharmony_ci */ 973cabdff1aSopenharmony_ci enum AVColorRange color_range; 974cabdff1aSopenharmony_ci 975cabdff1aSopenharmony_ci /** 976cabdff1aSopenharmony_ci * This defines the location of chroma samples. 977cabdff1aSopenharmony_ci * - encoding: Set by user 978cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 979cabdff1aSopenharmony_ci */ 980cabdff1aSopenharmony_ci enum AVChromaLocation chroma_sample_location; 981cabdff1aSopenharmony_ci 982cabdff1aSopenharmony_ci /** 983cabdff1aSopenharmony_ci * Number of slices. 984cabdff1aSopenharmony_ci * Indicates number of picture subdivisions. Used for parallelized 985cabdff1aSopenharmony_ci * decoding. 986cabdff1aSopenharmony_ci * - encoding: Set by user 987cabdff1aSopenharmony_ci * - decoding: unused 988cabdff1aSopenharmony_ci */ 989cabdff1aSopenharmony_ci int slices; 990cabdff1aSopenharmony_ci 991cabdff1aSopenharmony_ci /** Field order 992cabdff1aSopenharmony_ci * - encoding: set by libavcodec 993cabdff1aSopenharmony_ci * - decoding: Set by user. 994cabdff1aSopenharmony_ci */ 995cabdff1aSopenharmony_ci enum AVFieldOrder field_order; 996cabdff1aSopenharmony_ci 997cabdff1aSopenharmony_ci /* audio only */ 998cabdff1aSopenharmony_ci int sample_rate; ///< samples per second 999cabdff1aSopenharmony_ci 1000cabdff1aSopenharmony_ci#if FF_API_OLD_CHANNEL_LAYOUT 1001cabdff1aSopenharmony_ci /** 1002cabdff1aSopenharmony_ci * number of audio channels 1003cabdff1aSopenharmony_ci * @deprecated use ch_layout.nb_channels 1004cabdff1aSopenharmony_ci */ 1005cabdff1aSopenharmony_ci attribute_deprecated 1006cabdff1aSopenharmony_ci int channels; 1007cabdff1aSopenharmony_ci#endif 1008cabdff1aSopenharmony_ci 1009cabdff1aSopenharmony_ci /** 1010cabdff1aSopenharmony_ci * audio sample format 1011cabdff1aSopenharmony_ci * - encoding: Set by user. 1012cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 1013cabdff1aSopenharmony_ci */ 1014cabdff1aSopenharmony_ci enum AVSampleFormat sample_fmt; ///< sample format 1015cabdff1aSopenharmony_ci 1016cabdff1aSopenharmony_ci /* The following data should not be initialized. */ 1017cabdff1aSopenharmony_ci /** 1018cabdff1aSopenharmony_ci * Number of samples per channel in an audio frame. 1019cabdff1aSopenharmony_ci * 1020cabdff1aSopenharmony_ci * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame 1021cabdff1aSopenharmony_ci * except the last must contain exactly frame_size samples per channel. 1022cabdff1aSopenharmony_ci * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the 1023cabdff1aSopenharmony_ci * frame size is not restricted. 1024cabdff1aSopenharmony_ci * - decoding: may be set by some decoders to indicate constant frame size 1025cabdff1aSopenharmony_ci */ 1026cabdff1aSopenharmony_ci int frame_size; 1027cabdff1aSopenharmony_ci 1028cabdff1aSopenharmony_ci /** 1029cabdff1aSopenharmony_ci * Frame counter, set by libavcodec. 1030cabdff1aSopenharmony_ci * 1031cabdff1aSopenharmony_ci * - decoding: total number of frames returned from the decoder so far. 1032cabdff1aSopenharmony_ci * - encoding: total number of frames passed to the encoder so far. 1033cabdff1aSopenharmony_ci * 1034cabdff1aSopenharmony_ci * @note the counter is not incremented if encoding/decoding resulted in 1035cabdff1aSopenharmony_ci * an error. 1036cabdff1aSopenharmony_ci */ 1037cabdff1aSopenharmony_ci int frame_number; 1038cabdff1aSopenharmony_ci 1039cabdff1aSopenharmony_ci /** 1040cabdff1aSopenharmony_ci * number of bytes per packet if constant and known or 0 1041cabdff1aSopenharmony_ci * Used by some WAV based audio codecs. 1042cabdff1aSopenharmony_ci */ 1043cabdff1aSopenharmony_ci int block_align; 1044cabdff1aSopenharmony_ci 1045cabdff1aSopenharmony_ci /** 1046cabdff1aSopenharmony_ci * Audio cutoff bandwidth (0 means "automatic") 1047cabdff1aSopenharmony_ci * - encoding: Set by user. 1048cabdff1aSopenharmony_ci * - decoding: unused 1049cabdff1aSopenharmony_ci */ 1050cabdff1aSopenharmony_ci int cutoff; 1051cabdff1aSopenharmony_ci 1052cabdff1aSopenharmony_ci#if FF_API_OLD_CHANNEL_LAYOUT 1053cabdff1aSopenharmony_ci /** 1054cabdff1aSopenharmony_ci * Audio channel layout. 1055cabdff1aSopenharmony_ci * - encoding: set by user. 1056cabdff1aSopenharmony_ci * - decoding: set by user, may be overwritten by libavcodec. 1057cabdff1aSopenharmony_ci * @deprecated use ch_layout 1058cabdff1aSopenharmony_ci */ 1059cabdff1aSopenharmony_ci attribute_deprecated 1060cabdff1aSopenharmony_ci uint64_t channel_layout; 1061cabdff1aSopenharmony_ci 1062cabdff1aSopenharmony_ci /** 1063cabdff1aSopenharmony_ci * Request decoder to use this channel layout if it can (0 for default) 1064cabdff1aSopenharmony_ci * - encoding: unused 1065cabdff1aSopenharmony_ci * - decoding: Set by user. 1066cabdff1aSopenharmony_ci * @deprecated use "downmix" codec private option 1067cabdff1aSopenharmony_ci */ 1068cabdff1aSopenharmony_ci attribute_deprecated 1069cabdff1aSopenharmony_ci uint64_t request_channel_layout; 1070cabdff1aSopenharmony_ci#endif 1071cabdff1aSopenharmony_ci 1072cabdff1aSopenharmony_ci /** 1073cabdff1aSopenharmony_ci * Type of service that the audio stream conveys. 1074cabdff1aSopenharmony_ci * - encoding: Set by user. 1075cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 1076cabdff1aSopenharmony_ci */ 1077cabdff1aSopenharmony_ci enum AVAudioServiceType audio_service_type; 1078cabdff1aSopenharmony_ci 1079cabdff1aSopenharmony_ci /** 1080cabdff1aSopenharmony_ci * desired sample format 1081cabdff1aSopenharmony_ci * - encoding: Not used. 1082cabdff1aSopenharmony_ci * - decoding: Set by user. 1083cabdff1aSopenharmony_ci * Decoder will decode to this format if it can. 1084cabdff1aSopenharmony_ci */ 1085cabdff1aSopenharmony_ci enum AVSampleFormat request_sample_fmt; 1086cabdff1aSopenharmony_ci 1087cabdff1aSopenharmony_ci /** 1088cabdff1aSopenharmony_ci * This callback is called at the beginning of each frame to get data 1089cabdff1aSopenharmony_ci * buffer(s) for it. There may be one contiguous buffer for all the data or 1090cabdff1aSopenharmony_ci * there may be a buffer per each data plane or anything in between. What 1091cabdff1aSopenharmony_ci * this means is, you may set however many entries in buf[] you feel necessary. 1092cabdff1aSopenharmony_ci * Each buffer must be reference-counted using the AVBuffer API (see description 1093cabdff1aSopenharmony_ci * of buf[] below). 1094cabdff1aSopenharmony_ci * 1095cabdff1aSopenharmony_ci * The following fields will be set in the frame before this callback is 1096cabdff1aSopenharmony_ci * called: 1097cabdff1aSopenharmony_ci * - format 1098cabdff1aSopenharmony_ci * - width, height (video only) 1099cabdff1aSopenharmony_ci * - sample_rate, channel_layout, nb_samples (audio only) 1100cabdff1aSopenharmony_ci * Their values may differ from the corresponding values in 1101cabdff1aSopenharmony_ci * AVCodecContext. This callback must use the frame values, not the codec 1102cabdff1aSopenharmony_ci * context values, to calculate the required buffer size. 1103cabdff1aSopenharmony_ci * 1104cabdff1aSopenharmony_ci * This callback must fill the following fields in the frame: 1105cabdff1aSopenharmony_ci * - data[] 1106cabdff1aSopenharmony_ci * - linesize[] 1107cabdff1aSopenharmony_ci * - extended_data: 1108cabdff1aSopenharmony_ci * * if the data is planar audio with more than 8 channels, then this 1109cabdff1aSopenharmony_ci * callback must allocate and fill extended_data to contain all pointers 1110cabdff1aSopenharmony_ci * to all data planes. data[] must hold as many pointers as it can. 1111cabdff1aSopenharmony_ci * extended_data must be allocated with av_malloc() and will be freed in 1112cabdff1aSopenharmony_ci * av_frame_unref(). 1113cabdff1aSopenharmony_ci * * otherwise extended_data must point to data 1114cabdff1aSopenharmony_ci * - buf[] must contain one or more pointers to AVBufferRef structures. Each of 1115cabdff1aSopenharmony_ci * the frame's data and extended_data pointers must be contained in these. That 1116cabdff1aSopenharmony_ci * is, one AVBufferRef for each allocated chunk of memory, not necessarily one 1117cabdff1aSopenharmony_ci * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), 1118cabdff1aSopenharmony_ci * and av_buffer_ref(). 1119cabdff1aSopenharmony_ci * - extended_buf and nb_extended_buf must be allocated with av_malloc() by 1120cabdff1aSopenharmony_ci * this callback and filled with the extra buffers if there are more 1121cabdff1aSopenharmony_ci * buffers than buf[] can hold. extended_buf will be freed in 1122cabdff1aSopenharmony_ci * av_frame_unref(). 1123cabdff1aSopenharmony_ci * 1124cabdff1aSopenharmony_ci * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call 1125cabdff1aSopenharmony_ci * avcodec_default_get_buffer2() instead of providing buffers allocated by 1126cabdff1aSopenharmony_ci * some other means. 1127cabdff1aSopenharmony_ci * 1128cabdff1aSopenharmony_ci * Each data plane must be aligned to the maximum required by the target 1129cabdff1aSopenharmony_ci * CPU. 1130cabdff1aSopenharmony_ci * 1131cabdff1aSopenharmony_ci * @see avcodec_default_get_buffer2() 1132cabdff1aSopenharmony_ci * 1133cabdff1aSopenharmony_ci * Video: 1134cabdff1aSopenharmony_ci * 1135cabdff1aSopenharmony_ci * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused 1136cabdff1aSopenharmony_ci * (read and/or written to if it is writable) later by libavcodec. 1137cabdff1aSopenharmony_ci * 1138cabdff1aSopenharmony_ci * avcodec_align_dimensions2() should be used to find the required width and 1139cabdff1aSopenharmony_ci * height, as they normally need to be rounded up to the next multiple of 16. 1140cabdff1aSopenharmony_ci * 1141cabdff1aSopenharmony_ci * Some decoders do not support linesizes changing between frames. 1142cabdff1aSopenharmony_ci * 1143cabdff1aSopenharmony_ci * If frame multithreading is used, this callback may be called from a 1144cabdff1aSopenharmony_ci * different thread, but not from more than one at once. Does not need to be 1145cabdff1aSopenharmony_ci * reentrant. 1146cabdff1aSopenharmony_ci * 1147cabdff1aSopenharmony_ci * @see avcodec_align_dimensions2() 1148cabdff1aSopenharmony_ci * 1149cabdff1aSopenharmony_ci * Audio: 1150cabdff1aSopenharmony_ci * 1151cabdff1aSopenharmony_ci * Decoders request a buffer of a particular size by setting 1152cabdff1aSopenharmony_ci * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, 1153cabdff1aSopenharmony_ci * however, utilize only part of the buffer by setting AVFrame.nb_samples 1154cabdff1aSopenharmony_ci * to a smaller value in the output frame. 1155cabdff1aSopenharmony_ci * 1156cabdff1aSopenharmony_ci * As a convenience, av_samples_get_buffer_size() and 1157cabdff1aSopenharmony_ci * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() 1158cabdff1aSopenharmony_ci * functions to find the required data size and to fill data pointers and 1159cabdff1aSopenharmony_ci * linesize. In AVFrame.linesize, only linesize[0] may be set for audio 1160cabdff1aSopenharmony_ci * since all planes must be the same size. 1161cabdff1aSopenharmony_ci * 1162cabdff1aSopenharmony_ci * @see av_samples_get_buffer_size(), av_samples_fill_arrays() 1163cabdff1aSopenharmony_ci * 1164cabdff1aSopenharmony_ci * - encoding: unused 1165cabdff1aSopenharmony_ci * - decoding: Set by libavcodec, user can override. 1166cabdff1aSopenharmony_ci */ 1167cabdff1aSopenharmony_ci int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); 1168cabdff1aSopenharmony_ci 1169cabdff1aSopenharmony_ci /* - encoding parameters */ 1170cabdff1aSopenharmony_ci float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) 1171cabdff1aSopenharmony_ci float qblur; ///< amount of qscale smoothing over time (0.0-1.0) 1172cabdff1aSopenharmony_ci 1173cabdff1aSopenharmony_ci /** 1174cabdff1aSopenharmony_ci * minimum quantizer 1175cabdff1aSopenharmony_ci * - encoding: Set by user. 1176cabdff1aSopenharmony_ci * - decoding: unused 1177cabdff1aSopenharmony_ci */ 1178cabdff1aSopenharmony_ci int qmin; 1179cabdff1aSopenharmony_ci 1180cabdff1aSopenharmony_ci /** 1181cabdff1aSopenharmony_ci * maximum quantizer 1182cabdff1aSopenharmony_ci * - encoding: Set by user. 1183cabdff1aSopenharmony_ci * - decoding: unused 1184cabdff1aSopenharmony_ci */ 1185cabdff1aSopenharmony_ci int qmax; 1186cabdff1aSopenharmony_ci 1187cabdff1aSopenharmony_ci /** 1188cabdff1aSopenharmony_ci * maximum quantizer difference between frames 1189cabdff1aSopenharmony_ci * - encoding: Set by user. 1190cabdff1aSopenharmony_ci * - decoding: unused 1191cabdff1aSopenharmony_ci */ 1192cabdff1aSopenharmony_ci int max_qdiff; 1193cabdff1aSopenharmony_ci 1194cabdff1aSopenharmony_ci /** 1195cabdff1aSopenharmony_ci * decoder bitstream buffer size 1196cabdff1aSopenharmony_ci * - encoding: Set by user. 1197cabdff1aSopenharmony_ci * - decoding: unused 1198cabdff1aSopenharmony_ci */ 1199cabdff1aSopenharmony_ci int rc_buffer_size; 1200cabdff1aSopenharmony_ci 1201cabdff1aSopenharmony_ci /** 1202cabdff1aSopenharmony_ci * ratecontrol override, see RcOverride 1203cabdff1aSopenharmony_ci * - encoding: Allocated/set/freed by user. 1204cabdff1aSopenharmony_ci * - decoding: unused 1205cabdff1aSopenharmony_ci */ 1206cabdff1aSopenharmony_ci int rc_override_count; 1207cabdff1aSopenharmony_ci RcOverride *rc_override; 1208cabdff1aSopenharmony_ci 1209cabdff1aSopenharmony_ci /** 1210cabdff1aSopenharmony_ci * maximum bitrate 1211cabdff1aSopenharmony_ci * - encoding: Set by user. 1212cabdff1aSopenharmony_ci * - decoding: Set by user, may be overwritten by libavcodec. 1213cabdff1aSopenharmony_ci */ 1214cabdff1aSopenharmony_ci int64_t rc_max_rate; 1215cabdff1aSopenharmony_ci 1216cabdff1aSopenharmony_ci /** 1217cabdff1aSopenharmony_ci * minimum bitrate 1218cabdff1aSopenharmony_ci * - encoding: Set by user. 1219cabdff1aSopenharmony_ci * - decoding: unused 1220cabdff1aSopenharmony_ci */ 1221cabdff1aSopenharmony_ci int64_t rc_min_rate; 1222cabdff1aSopenharmony_ci 1223cabdff1aSopenharmony_ci /** 1224cabdff1aSopenharmony_ci * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. 1225cabdff1aSopenharmony_ci * - encoding: Set by user. 1226cabdff1aSopenharmony_ci * - decoding: unused. 1227cabdff1aSopenharmony_ci */ 1228cabdff1aSopenharmony_ci float rc_max_available_vbv_use; 1229cabdff1aSopenharmony_ci 1230cabdff1aSopenharmony_ci /** 1231cabdff1aSopenharmony_ci * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. 1232cabdff1aSopenharmony_ci * - encoding: Set by user. 1233cabdff1aSopenharmony_ci * - decoding: unused. 1234cabdff1aSopenharmony_ci */ 1235cabdff1aSopenharmony_ci float rc_min_vbv_overflow_use; 1236cabdff1aSopenharmony_ci 1237cabdff1aSopenharmony_ci /** 1238cabdff1aSopenharmony_ci * Number of bits which should be loaded into the rc buffer before decoding starts. 1239cabdff1aSopenharmony_ci * - encoding: Set by user. 1240cabdff1aSopenharmony_ci * - decoding: unused 1241cabdff1aSopenharmony_ci */ 1242cabdff1aSopenharmony_ci int rc_initial_buffer_occupancy; 1243cabdff1aSopenharmony_ci 1244cabdff1aSopenharmony_ci /** 1245cabdff1aSopenharmony_ci * trellis RD quantization 1246cabdff1aSopenharmony_ci * - encoding: Set by user. 1247cabdff1aSopenharmony_ci * - decoding: unused 1248cabdff1aSopenharmony_ci */ 1249cabdff1aSopenharmony_ci int trellis; 1250cabdff1aSopenharmony_ci 1251cabdff1aSopenharmony_ci /** 1252cabdff1aSopenharmony_ci * pass1 encoding statistics output buffer 1253cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 1254cabdff1aSopenharmony_ci * - decoding: unused 1255cabdff1aSopenharmony_ci */ 1256cabdff1aSopenharmony_ci char *stats_out; 1257cabdff1aSopenharmony_ci 1258cabdff1aSopenharmony_ci /** 1259cabdff1aSopenharmony_ci * pass2 encoding statistics input buffer 1260cabdff1aSopenharmony_ci * Concatenated stuff from stats_out of pass1 should be placed here. 1261cabdff1aSopenharmony_ci * - encoding: Allocated/set/freed by user. 1262cabdff1aSopenharmony_ci * - decoding: unused 1263cabdff1aSopenharmony_ci */ 1264cabdff1aSopenharmony_ci char *stats_in; 1265cabdff1aSopenharmony_ci 1266cabdff1aSopenharmony_ci /** 1267cabdff1aSopenharmony_ci * Work around bugs in encoders which sometimes cannot be detected automatically. 1268cabdff1aSopenharmony_ci * - encoding: Set by user 1269cabdff1aSopenharmony_ci * - decoding: Set by user 1270cabdff1aSopenharmony_ci */ 1271cabdff1aSopenharmony_ci int workaround_bugs; 1272cabdff1aSopenharmony_ci#define FF_BUG_AUTODETECT 1 ///< autodetection 1273cabdff1aSopenharmony_ci#define FF_BUG_XVID_ILACE 4 1274cabdff1aSopenharmony_ci#define FF_BUG_UMP4 8 1275cabdff1aSopenharmony_ci#define FF_BUG_NO_PADDING 16 1276cabdff1aSopenharmony_ci#define FF_BUG_AMV 32 1277cabdff1aSopenharmony_ci#define FF_BUG_QPEL_CHROMA 64 1278cabdff1aSopenharmony_ci#define FF_BUG_STD_QPEL 128 1279cabdff1aSopenharmony_ci#define FF_BUG_QPEL_CHROMA2 256 1280cabdff1aSopenharmony_ci#define FF_BUG_DIRECT_BLOCKSIZE 512 1281cabdff1aSopenharmony_ci#define FF_BUG_EDGE 1024 1282cabdff1aSopenharmony_ci#define FF_BUG_HPEL_CHROMA 2048 1283cabdff1aSopenharmony_ci#define FF_BUG_DC_CLIP 4096 1284cabdff1aSopenharmony_ci#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. 1285cabdff1aSopenharmony_ci#define FF_BUG_TRUNCATED 16384 1286cabdff1aSopenharmony_ci#define FF_BUG_IEDGE 32768 1287cabdff1aSopenharmony_ci 1288cabdff1aSopenharmony_ci /** 1289cabdff1aSopenharmony_ci * strictly follow the standard (MPEG-4, ...). 1290cabdff1aSopenharmony_ci * - encoding: Set by user. 1291cabdff1aSopenharmony_ci * - decoding: Set by user. 1292cabdff1aSopenharmony_ci * Setting this to STRICT or higher means the encoder and decoder will 1293cabdff1aSopenharmony_ci * generally do stupid things, whereas setting it to unofficial or lower 1294cabdff1aSopenharmony_ci * will mean the encoder might produce output that is not supported by all 1295cabdff1aSopenharmony_ci * spec-compliant decoders. Decoders don't differentiate between normal, 1296cabdff1aSopenharmony_ci * unofficial and experimental (that is, they always try to decode things 1297cabdff1aSopenharmony_ci * when they can) unless they are explicitly asked to behave stupidly 1298cabdff1aSopenharmony_ci * (=strictly conform to the specs) 1299cabdff1aSopenharmony_ci */ 1300cabdff1aSopenharmony_ci int strict_std_compliance; 1301cabdff1aSopenharmony_ci#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. 1302cabdff1aSopenharmony_ci#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. 1303cabdff1aSopenharmony_ci#define FF_COMPLIANCE_NORMAL 0 1304cabdff1aSopenharmony_ci#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions 1305cabdff1aSopenharmony_ci#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. 1306cabdff1aSopenharmony_ci 1307cabdff1aSopenharmony_ci /** 1308cabdff1aSopenharmony_ci * error concealment flags 1309cabdff1aSopenharmony_ci * - encoding: unused 1310cabdff1aSopenharmony_ci * - decoding: Set by user. 1311cabdff1aSopenharmony_ci */ 1312cabdff1aSopenharmony_ci int error_concealment; 1313cabdff1aSopenharmony_ci#define FF_EC_GUESS_MVS 1 1314cabdff1aSopenharmony_ci#define FF_EC_DEBLOCK 2 1315cabdff1aSopenharmony_ci#define FF_EC_FAVOR_INTER 256 1316cabdff1aSopenharmony_ci 1317cabdff1aSopenharmony_ci /** 1318cabdff1aSopenharmony_ci * debug 1319cabdff1aSopenharmony_ci * - encoding: Set by user. 1320cabdff1aSopenharmony_ci * - decoding: Set by user. 1321cabdff1aSopenharmony_ci */ 1322cabdff1aSopenharmony_ci int debug; 1323cabdff1aSopenharmony_ci#define FF_DEBUG_PICT_INFO 1 1324cabdff1aSopenharmony_ci#define FF_DEBUG_RC 2 1325cabdff1aSopenharmony_ci#define FF_DEBUG_BITSTREAM 4 1326cabdff1aSopenharmony_ci#define FF_DEBUG_MB_TYPE 8 1327cabdff1aSopenharmony_ci#define FF_DEBUG_QP 16 1328cabdff1aSopenharmony_ci#define FF_DEBUG_DCT_COEFF 0x00000040 1329cabdff1aSopenharmony_ci#define FF_DEBUG_SKIP 0x00000080 1330cabdff1aSopenharmony_ci#define FF_DEBUG_STARTCODE 0x00000100 1331cabdff1aSopenharmony_ci#define FF_DEBUG_ER 0x00000400 1332cabdff1aSopenharmony_ci#define FF_DEBUG_MMCO 0x00000800 1333cabdff1aSopenharmony_ci#define FF_DEBUG_BUGS 0x00001000 1334cabdff1aSopenharmony_ci#define FF_DEBUG_BUFFERS 0x00008000 1335cabdff1aSopenharmony_ci#define FF_DEBUG_THREADS 0x00010000 1336cabdff1aSopenharmony_ci#define FF_DEBUG_GREEN_MD 0x00800000 1337cabdff1aSopenharmony_ci#define FF_DEBUG_NOMC 0x01000000 1338cabdff1aSopenharmony_ci 1339cabdff1aSopenharmony_ci /** 1340cabdff1aSopenharmony_ci * Error recognition; may misdetect some more or less valid parts as errors. 1341cabdff1aSopenharmony_ci * - encoding: Set by user. 1342cabdff1aSopenharmony_ci * - decoding: Set by user. 1343cabdff1aSopenharmony_ci */ 1344cabdff1aSopenharmony_ci int err_recognition; 1345cabdff1aSopenharmony_ci 1346cabdff1aSopenharmony_ci/** 1347cabdff1aSopenharmony_ci * Verify checksums embedded in the bitstream (could be of either encoded or 1348cabdff1aSopenharmony_ci * decoded data, depending on the codec) and print an error message on mismatch. 1349cabdff1aSopenharmony_ci * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the 1350cabdff1aSopenharmony_ci * decoder returning an error. 1351cabdff1aSopenharmony_ci */ 1352cabdff1aSopenharmony_ci#define AV_EF_CRCCHECK (1<<0) 1353cabdff1aSopenharmony_ci#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations 1354cabdff1aSopenharmony_ci#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length 1355cabdff1aSopenharmony_ci#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection 1356cabdff1aSopenharmony_ci 1357cabdff1aSopenharmony_ci#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue 1358cabdff1aSopenharmony_ci#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors 1359cabdff1aSopenharmony_ci#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors 1360cabdff1aSopenharmony_ci#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error 1361cabdff1aSopenharmony_ci 1362cabdff1aSopenharmony_ci 1363cabdff1aSopenharmony_ci /** 1364cabdff1aSopenharmony_ci * opaque 64-bit number (generally a PTS) that will be reordered and 1365cabdff1aSopenharmony_ci * output in AVFrame.reordered_opaque 1366cabdff1aSopenharmony_ci * - encoding: Set by libavcodec to the reordered_opaque of the input 1367cabdff1aSopenharmony_ci * frame corresponding to the last returned packet. Only 1368cabdff1aSopenharmony_ci * supported by encoders with the 1369cabdff1aSopenharmony_ci * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. 1370cabdff1aSopenharmony_ci * - decoding: Set by user. 1371cabdff1aSopenharmony_ci */ 1372cabdff1aSopenharmony_ci int64_t reordered_opaque; 1373cabdff1aSopenharmony_ci 1374cabdff1aSopenharmony_ci /** 1375cabdff1aSopenharmony_ci * Hardware accelerator in use 1376cabdff1aSopenharmony_ci * - encoding: unused. 1377cabdff1aSopenharmony_ci * - decoding: Set by libavcodec 1378cabdff1aSopenharmony_ci */ 1379cabdff1aSopenharmony_ci const struct AVHWAccel *hwaccel; 1380cabdff1aSopenharmony_ci 1381cabdff1aSopenharmony_ci /** 1382cabdff1aSopenharmony_ci * Hardware accelerator context. 1383cabdff1aSopenharmony_ci * For some hardware accelerators, a global context needs to be 1384cabdff1aSopenharmony_ci * provided by the user. In that case, this holds display-dependent 1385cabdff1aSopenharmony_ci * data FFmpeg cannot instantiate itself. Please refer to the 1386cabdff1aSopenharmony_ci * FFmpeg HW accelerator documentation to know how to fill this. 1387cabdff1aSopenharmony_ci * - encoding: unused 1388cabdff1aSopenharmony_ci * - decoding: Set by user 1389cabdff1aSopenharmony_ci */ 1390cabdff1aSopenharmony_ci void *hwaccel_context; 1391cabdff1aSopenharmony_ci 1392cabdff1aSopenharmony_ci /** 1393cabdff1aSopenharmony_ci * error 1394cabdff1aSopenharmony_ci * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. 1395cabdff1aSopenharmony_ci * - decoding: unused 1396cabdff1aSopenharmony_ci */ 1397cabdff1aSopenharmony_ci uint64_t error[AV_NUM_DATA_POINTERS]; 1398cabdff1aSopenharmony_ci 1399cabdff1aSopenharmony_ci /** 1400cabdff1aSopenharmony_ci * DCT algorithm, see FF_DCT_* below 1401cabdff1aSopenharmony_ci * - encoding: Set by user. 1402cabdff1aSopenharmony_ci * - decoding: unused 1403cabdff1aSopenharmony_ci */ 1404cabdff1aSopenharmony_ci int dct_algo; 1405cabdff1aSopenharmony_ci#define FF_DCT_AUTO 0 1406cabdff1aSopenharmony_ci#define FF_DCT_FASTINT 1 1407cabdff1aSopenharmony_ci#define FF_DCT_INT 2 1408cabdff1aSopenharmony_ci#define FF_DCT_MMX 3 1409cabdff1aSopenharmony_ci#define FF_DCT_ALTIVEC 5 1410cabdff1aSopenharmony_ci#define FF_DCT_FAAN 6 1411cabdff1aSopenharmony_ci 1412cabdff1aSopenharmony_ci /** 1413cabdff1aSopenharmony_ci * IDCT algorithm, see FF_IDCT_* below. 1414cabdff1aSopenharmony_ci * - encoding: Set by user. 1415cabdff1aSopenharmony_ci * - decoding: Set by user. 1416cabdff1aSopenharmony_ci */ 1417cabdff1aSopenharmony_ci int idct_algo; 1418cabdff1aSopenharmony_ci#define FF_IDCT_AUTO 0 1419cabdff1aSopenharmony_ci#define FF_IDCT_INT 1 1420cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLE 2 1421cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLEMMX 3 1422cabdff1aSopenharmony_ci#define FF_IDCT_ARM 7 1423cabdff1aSopenharmony_ci#define FF_IDCT_ALTIVEC 8 1424cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLEARM 10 1425cabdff1aSopenharmony_ci#define FF_IDCT_XVID 14 1426cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLEARMV5TE 16 1427cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLEARMV6 17 1428cabdff1aSopenharmony_ci#define FF_IDCT_FAAN 20 1429cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLENEON 22 1430cabdff1aSopenharmony_ci#if FF_API_IDCT_NONE 1431cabdff1aSopenharmony_ci// formerly used by xvmc 1432cabdff1aSopenharmony_ci#define FF_IDCT_NONE 24 1433cabdff1aSopenharmony_ci#endif 1434cabdff1aSopenharmony_ci#define FF_IDCT_SIMPLEAUTO 128 1435cabdff1aSopenharmony_ci 1436cabdff1aSopenharmony_ci /** 1437cabdff1aSopenharmony_ci * bits per sample/pixel from the demuxer (needed for huffyuv). 1438cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 1439cabdff1aSopenharmony_ci * - decoding: Set by user. 1440cabdff1aSopenharmony_ci */ 1441cabdff1aSopenharmony_ci int bits_per_coded_sample; 1442cabdff1aSopenharmony_ci 1443cabdff1aSopenharmony_ci /** 1444cabdff1aSopenharmony_ci * Bits per sample/pixel of internal libavcodec pixel/sample format. 1445cabdff1aSopenharmony_ci * - encoding: set by user. 1446cabdff1aSopenharmony_ci * - decoding: set by libavcodec. 1447cabdff1aSopenharmony_ci */ 1448cabdff1aSopenharmony_ci int bits_per_raw_sample; 1449cabdff1aSopenharmony_ci 1450cabdff1aSopenharmony_ci /** 1451cabdff1aSopenharmony_ci * low resolution decoding, 1-> 1/2 size, 2->1/4 size 1452cabdff1aSopenharmony_ci * - encoding: unused 1453cabdff1aSopenharmony_ci * - decoding: Set by user. 1454cabdff1aSopenharmony_ci */ 1455cabdff1aSopenharmony_ci int lowres; 1456cabdff1aSopenharmony_ci 1457cabdff1aSopenharmony_ci /** 1458cabdff1aSopenharmony_ci * thread count 1459cabdff1aSopenharmony_ci * is used to decide how many independent tasks should be passed to execute() 1460cabdff1aSopenharmony_ci * - encoding: Set by user. 1461cabdff1aSopenharmony_ci * - decoding: Set by user. 1462cabdff1aSopenharmony_ci */ 1463cabdff1aSopenharmony_ci int thread_count; 1464cabdff1aSopenharmony_ci 1465cabdff1aSopenharmony_ci /** 1466cabdff1aSopenharmony_ci * Which multithreading methods to use. 1467cabdff1aSopenharmony_ci * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, 1468cabdff1aSopenharmony_ci * so clients which cannot provide future frames should not use it. 1469cabdff1aSopenharmony_ci * 1470cabdff1aSopenharmony_ci * - encoding: Set by user, otherwise the default is used. 1471cabdff1aSopenharmony_ci * - decoding: Set by user, otherwise the default is used. 1472cabdff1aSopenharmony_ci */ 1473cabdff1aSopenharmony_ci int thread_type; 1474cabdff1aSopenharmony_ci#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once 1475cabdff1aSopenharmony_ci#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once 1476cabdff1aSopenharmony_ci 1477cabdff1aSopenharmony_ci /** 1478cabdff1aSopenharmony_ci * Which multithreading methods are in use by the codec. 1479cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. 1480cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 1481cabdff1aSopenharmony_ci */ 1482cabdff1aSopenharmony_ci int active_thread_type; 1483cabdff1aSopenharmony_ci 1484cabdff1aSopenharmony_ci#if FF_API_THREAD_SAFE_CALLBACKS 1485cabdff1aSopenharmony_ci /** 1486cabdff1aSopenharmony_ci * Set by the client if its custom get_buffer() callback can be called 1487cabdff1aSopenharmony_ci * synchronously from another thread, which allows faster multithreaded decoding. 1488cabdff1aSopenharmony_ci * draw_horiz_band() will be called from other threads regardless of this setting. 1489cabdff1aSopenharmony_ci * Ignored if the default get_buffer() is used. 1490cabdff1aSopenharmony_ci * - encoding: Set by user. 1491cabdff1aSopenharmony_ci * - decoding: Set by user. 1492cabdff1aSopenharmony_ci * 1493cabdff1aSopenharmony_ci * @deprecated the custom get_buffer2() callback should always be 1494cabdff1aSopenharmony_ci * thread-safe. Thread-unsafe get_buffer2() implementations will be 1495cabdff1aSopenharmony_ci * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, 1496cabdff1aSopenharmony_ci * libavcodec will behave as if this field was always set to 1. 1497cabdff1aSopenharmony_ci * Callers that want to be forward compatible with future libavcodec 1498cabdff1aSopenharmony_ci * versions should wrap access to this field in 1499cabdff1aSopenharmony_ci * #if LIBAVCODEC_VERSION_MAJOR < 60 1500cabdff1aSopenharmony_ci */ 1501cabdff1aSopenharmony_ci attribute_deprecated 1502cabdff1aSopenharmony_ci int thread_safe_callbacks; 1503cabdff1aSopenharmony_ci#endif 1504cabdff1aSopenharmony_ci 1505cabdff1aSopenharmony_ci /** 1506cabdff1aSopenharmony_ci * The codec may call this to execute several independent things. 1507cabdff1aSopenharmony_ci * It will return only after finishing all tasks. 1508cabdff1aSopenharmony_ci * The user may replace this with some multithreaded implementation, 1509cabdff1aSopenharmony_ci * the default implementation will execute the parts serially. 1510cabdff1aSopenharmony_ci * @param count the number of things to execute 1511cabdff1aSopenharmony_ci * - encoding: Set by libavcodec, user can override. 1512cabdff1aSopenharmony_ci * - decoding: Set by libavcodec, user can override. 1513cabdff1aSopenharmony_ci */ 1514cabdff1aSopenharmony_ci int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); 1515cabdff1aSopenharmony_ci 1516cabdff1aSopenharmony_ci /** 1517cabdff1aSopenharmony_ci * The codec may call this to execute several independent things. 1518cabdff1aSopenharmony_ci * It will return only after finishing all tasks. 1519cabdff1aSopenharmony_ci * The user may replace this with some multithreaded implementation, 1520cabdff1aSopenharmony_ci * the default implementation will execute the parts serially. 1521cabdff1aSopenharmony_ci * @param c context passed also to func 1522cabdff1aSopenharmony_ci * @param count the number of things to execute 1523cabdff1aSopenharmony_ci * @param arg2 argument passed unchanged to func 1524cabdff1aSopenharmony_ci * @param ret return values of executed functions, must have space for "count" values. May be NULL. 1525cabdff1aSopenharmony_ci * @param func function that will be called count times, with jobnr from 0 to count-1. 1526cabdff1aSopenharmony_ci * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no 1527cabdff1aSopenharmony_ci * two instances of func executing at the same time will have the same threadnr. 1528cabdff1aSopenharmony_ci * @return always 0 currently, but code should handle a future improvement where when any call to func 1529cabdff1aSopenharmony_ci * returns < 0 no further calls to func may be done and < 0 is returned. 1530cabdff1aSopenharmony_ci * - encoding: Set by libavcodec, user can override. 1531cabdff1aSopenharmony_ci * - decoding: Set by libavcodec, user can override. 1532cabdff1aSopenharmony_ci */ 1533cabdff1aSopenharmony_ci int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); 1534cabdff1aSopenharmony_ci 1535cabdff1aSopenharmony_ci /** 1536cabdff1aSopenharmony_ci * noise vs. sse weight for the nsse comparison function 1537cabdff1aSopenharmony_ci * - encoding: Set by user. 1538cabdff1aSopenharmony_ci * - decoding: unused 1539cabdff1aSopenharmony_ci */ 1540cabdff1aSopenharmony_ci int nsse_weight; 1541cabdff1aSopenharmony_ci 1542cabdff1aSopenharmony_ci /** 1543cabdff1aSopenharmony_ci * profile 1544cabdff1aSopenharmony_ci * - encoding: Set by user. 1545cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 1546cabdff1aSopenharmony_ci */ 1547cabdff1aSopenharmony_ci int profile; 1548cabdff1aSopenharmony_ci#define FF_PROFILE_UNKNOWN -99 1549cabdff1aSopenharmony_ci#define FF_PROFILE_RESERVED -100 1550cabdff1aSopenharmony_ci 1551cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_MAIN 0 1552cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_LOW 1 1553cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_SSR 2 1554cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_LTP 3 1555cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_HE 4 1556cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_HE_V2 28 1557cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_LD 22 1558cabdff1aSopenharmony_ci#define FF_PROFILE_AAC_ELD 38 1559cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_AAC_LOW 128 1560cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_AAC_HE 131 1561cabdff1aSopenharmony_ci 1562cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHD 0 1563cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHR_LB 1 1564cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHR_SQ 2 1565cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHR_HQ 3 1566cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHR_HQX 4 1567cabdff1aSopenharmony_ci#define FF_PROFILE_DNXHR_444 5 1568cabdff1aSopenharmony_ci 1569cabdff1aSopenharmony_ci#define FF_PROFILE_DTS 20 1570cabdff1aSopenharmony_ci#define FF_PROFILE_DTS_ES 30 1571cabdff1aSopenharmony_ci#define FF_PROFILE_DTS_96_24 40 1572cabdff1aSopenharmony_ci#define FF_PROFILE_DTS_HD_HRA 50 1573cabdff1aSopenharmony_ci#define FF_PROFILE_DTS_HD_MA 60 1574cabdff1aSopenharmony_ci#define FF_PROFILE_DTS_EXPRESS 70 1575cabdff1aSopenharmony_ci 1576cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_422 0 1577cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_HIGH 1 1578cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_SS 2 1579cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 1580cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_MAIN 4 1581cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG2_SIMPLE 5 1582cabdff1aSopenharmony_ci 1583cabdff1aSopenharmony_ci#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag 1584cabdff1aSopenharmony_ci#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag 1585cabdff1aSopenharmony_ci 1586cabdff1aSopenharmony_ci#define FF_PROFILE_H264_BASELINE 66 1587cabdff1aSopenharmony_ci#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) 1588cabdff1aSopenharmony_ci#define FF_PROFILE_H264_MAIN 77 1589cabdff1aSopenharmony_ci#define FF_PROFILE_H264_EXTENDED 88 1590cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH 100 1591cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_10 110 1592cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) 1593cabdff1aSopenharmony_ci#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 1594cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_422 122 1595cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) 1596cabdff1aSopenharmony_ci#define FF_PROFILE_H264_STEREO_HIGH 128 1597cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_444 144 1598cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 1599cabdff1aSopenharmony_ci#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) 1600cabdff1aSopenharmony_ci#define FF_PROFILE_H264_CAVLC_444 44 1601cabdff1aSopenharmony_ci 1602cabdff1aSopenharmony_ci#define FF_PROFILE_VC1_SIMPLE 0 1603cabdff1aSopenharmony_ci#define FF_PROFILE_VC1_MAIN 1 1604cabdff1aSopenharmony_ci#define FF_PROFILE_VC1_COMPLEX 2 1605cabdff1aSopenharmony_ci#define FF_PROFILE_VC1_ADVANCED 3 1606cabdff1aSopenharmony_ci 1607cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_SIMPLE 0 1608cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 1609cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_CORE 2 1610cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_MAIN 3 1611cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_N_BIT 4 1612cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 1613cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 1614cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 1615cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_HYBRID 8 1616cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 1617cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 1618cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 1619cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 1620cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 1621cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 1622cabdff1aSopenharmony_ci#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 1623cabdff1aSopenharmony_ci 1624cabdff1aSopenharmony_ci#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 1625cabdff1aSopenharmony_ci#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 1626cabdff1aSopenharmony_ci#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 1627cabdff1aSopenharmony_ci#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 1628cabdff1aSopenharmony_ci#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 1629cabdff1aSopenharmony_ci 1630cabdff1aSopenharmony_ci#define FF_PROFILE_VP9_0 0 1631cabdff1aSopenharmony_ci#define FF_PROFILE_VP9_1 1 1632cabdff1aSopenharmony_ci#define FF_PROFILE_VP9_2 2 1633cabdff1aSopenharmony_ci#define FF_PROFILE_VP9_3 3 1634cabdff1aSopenharmony_ci 1635cabdff1aSopenharmony_ci#define FF_PROFILE_HEVC_MAIN 1 1636cabdff1aSopenharmony_ci#define FF_PROFILE_HEVC_MAIN_10 2 1637cabdff1aSopenharmony_ci#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 1638cabdff1aSopenharmony_ci#define FF_PROFILE_HEVC_REXT 4 1639cabdff1aSopenharmony_ci 1640cabdff1aSopenharmony_ci#define FF_PROFILE_VVC_MAIN_10 1 1641cabdff1aSopenharmony_ci#define FF_PROFILE_VVC_MAIN_10_444 33 1642cabdff1aSopenharmony_ci 1643cabdff1aSopenharmony_ci#define FF_PROFILE_AV1_MAIN 0 1644cabdff1aSopenharmony_ci#define FF_PROFILE_AV1_HIGH 1 1645cabdff1aSopenharmony_ci#define FF_PROFILE_AV1_PROFESSIONAL 2 1646cabdff1aSopenharmony_ci 1647cabdff1aSopenharmony_ci#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 1648cabdff1aSopenharmony_ci#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 1649cabdff1aSopenharmony_ci#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 1650cabdff1aSopenharmony_ci#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 1651cabdff1aSopenharmony_ci#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 1652cabdff1aSopenharmony_ci 1653cabdff1aSopenharmony_ci#define FF_PROFILE_SBC_MSBC 1 1654cabdff1aSopenharmony_ci 1655cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_PROXY 0 1656cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_LT 1 1657cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_STANDARD 2 1658cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_HQ 3 1659cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_4444 4 1660cabdff1aSopenharmony_ci#define FF_PROFILE_PRORES_XQ 5 1661cabdff1aSopenharmony_ci 1662cabdff1aSopenharmony_ci#define FF_PROFILE_ARIB_PROFILE_A 0 1663cabdff1aSopenharmony_ci#define FF_PROFILE_ARIB_PROFILE_C 1 1664cabdff1aSopenharmony_ci 1665cabdff1aSopenharmony_ci#define FF_PROFILE_KLVA_SYNC 0 1666cabdff1aSopenharmony_ci#define FF_PROFILE_KLVA_ASYNC 1 1667cabdff1aSopenharmony_ci 1668cabdff1aSopenharmony_ci /** 1669cabdff1aSopenharmony_ci * level 1670cabdff1aSopenharmony_ci * - encoding: Set by user. 1671cabdff1aSopenharmony_ci * - decoding: Set by libavcodec. 1672cabdff1aSopenharmony_ci */ 1673cabdff1aSopenharmony_ci int level; 1674cabdff1aSopenharmony_ci#define FF_LEVEL_UNKNOWN -99 1675cabdff1aSopenharmony_ci 1676cabdff1aSopenharmony_ci /** 1677cabdff1aSopenharmony_ci * Skip loop filtering for selected frames. 1678cabdff1aSopenharmony_ci * - encoding: unused 1679cabdff1aSopenharmony_ci * - decoding: Set by user. 1680cabdff1aSopenharmony_ci */ 1681cabdff1aSopenharmony_ci enum AVDiscard skip_loop_filter; 1682cabdff1aSopenharmony_ci 1683cabdff1aSopenharmony_ci /** 1684cabdff1aSopenharmony_ci * Skip IDCT/dequantization for selected frames. 1685cabdff1aSopenharmony_ci * - encoding: unused 1686cabdff1aSopenharmony_ci * - decoding: Set by user. 1687cabdff1aSopenharmony_ci */ 1688cabdff1aSopenharmony_ci enum AVDiscard skip_idct; 1689cabdff1aSopenharmony_ci 1690cabdff1aSopenharmony_ci /** 1691cabdff1aSopenharmony_ci * Skip decoding for selected frames. 1692cabdff1aSopenharmony_ci * - encoding: unused 1693cabdff1aSopenharmony_ci * - decoding: Set by user. 1694cabdff1aSopenharmony_ci */ 1695cabdff1aSopenharmony_ci enum AVDiscard skip_frame; 1696cabdff1aSopenharmony_ci 1697cabdff1aSopenharmony_ci /** 1698cabdff1aSopenharmony_ci * Header containing style information for text subtitles. 1699cabdff1aSopenharmony_ci * For SUBTITLE_ASS subtitle type, it should contain the whole ASS 1700cabdff1aSopenharmony_ci * [Script Info] and [V4+ Styles] section, plus the [Events] line and 1701cabdff1aSopenharmony_ci * the Format line following. It shouldn't include any Dialogue line. 1702cabdff1aSopenharmony_ci * - encoding: Set/allocated/freed by user (before avcodec_open2()) 1703cabdff1aSopenharmony_ci * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) 1704cabdff1aSopenharmony_ci */ 1705cabdff1aSopenharmony_ci uint8_t *subtitle_header; 1706cabdff1aSopenharmony_ci int subtitle_header_size; 1707cabdff1aSopenharmony_ci 1708cabdff1aSopenharmony_ci /** 1709cabdff1aSopenharmony_ci * Audio only. The number of "priming" samples (padding) inserted by the 1710cabdff1aSopenharmony_ci * encoder at the beginning of the audio. I.e. this number of leading 1711cabdff1aSopenharmony_ci * decoded samples must be discarded by the caller to get the original audio 1712cabdff1aSopenharmony_ci * without leading padding. 1713cabdff1aSopenharmony_ci * 1714cabdff1aSopenharmony_ci * - decoding: unused 1715cabdff1aSopenharmony_ci * - encoding: Set by libavcodec. The timestamps on the output packets are 1716cabdff1aSopenharmony_ci * adjusted by the encoder so that they always refer to the 1717cabdff1aSopenharmony_ci * first sample of the data actually contained in the packet, 1718cabdff1aSopenharmony_ci * including any added padding. E.g. if the timebase is 1719cabdff1aSopenharmony_ci * 1/samplerate and the timestamp of the first input sample is 1720cabdff1aSopenharmony_ci * 0, the timestamp of the first output packet will be 1721cabdff1aSopenharmony_ci * -initial_padding. 1722cabdff1aSopenharmony_ci */ 1723cabdff1aSopenharmony_ci int initial_padding; 1724cabdff1aSopenharmony_ci 1725cabdff1aSopenharmony_ci /** 1726cabdff1aSopenharmony_ci * - decoding: For codecs that store a framerate value in the compressed 1727cabdff1aSopenharmony_ci * bitstream, the decoder may export it here. { 0, 1} when 1728cabdff1aSopenharmony_ci * unknown. 1729cabdff1aSopenharmony_ci * - encoding: May be used to signal the framerate of CFR content to an 1730cabdff1aSopenharmony_ci * encoder. 1731cabdff1aSopenharmony_ci */ 1732cabdff1aSopenharmony_ci AVRational framerate; 1733cabdff1aSopenharmony_ci 1734cabdff1aSopenharmony_ci /** 1735cabdff1aSopenharmony_ci * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. 1736cabdff1aSopenharmony_ci * - encoding: unused. 1737cabdff1aSopenharmony_ci * - decoding: Set by libavcodec before calling get_format() 1738cabdff1aSopenharmony_ci */ 1739cabdff1aSopenharmony_ci enum AVPixelFormat sw_pix_fmt; 1740cabdff1aSopenharmony_ci 1741cabdff1aSopenharmony_ci /** 1742cabdff1aSopenharmony_ci * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. 1743cabdff1aSopenharmony_ci * - encoding unused. 1744cabdff1aSopenharmony_ci * - decoding set by user. 1745cabdff1aSopenharmony_ci */ 1746cabdff1aSopenharmony_ci AVRational pkt_timebase; 1747cabdff1aSopenharmony_ci 1748cabdff1aSopenharmony_ci /** 1749cabdff1aSopenharmony_ci * AVCodecDescriptor 1750cabdff1aSopenharmony_ci * - encoding: unused. 1751cabdff1aSopenharmony_ci * - decoding: set by libavcodec. 1752cabdff1aSopenharmony_ci */ 1753cabdff1aSopenharmony_ci const AVCodecDescriptor *codec_descriptor; 1754cabdff1aSopenharmony_ci 1755cabdff1aSopenharmony_ci /** 1756cabdff1aSopenharmony_ci * Current statistics for PTS correction. 1757cabdff1aSopenharmony_ci * - decoding: maintained and used by libavcodec, not intended to be used by user apps 1758cabdff1aSopenharmony_ci * - encoding: unused 1759cabdff1aSopenharmony_ci */ 1760cabdff1aSopenharmony_ci int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far 1761cabdff1aSopenharmony_ci int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far 1762cabdff1aSopenharmony_ci int64_t pts_correction_last_pts; /// PTS of the last frame 1763cabdff1aSopenharmony_ci int64_t pts_correction_last_dts; /// DTS of the last frame 1764cabdff1aSopenharmony_ci 1765cabdff1aSopenharmony_ci /** 1766cabdff1aSopenharmony_ci * Character encoding of the input subtitles file. 1767cabdff1aSopenharmony_ci * - decoding: set by user 1768cabdff1aSopenharmony_ci * - encoding: unused 1769cabdff1aSopenharmony_ci */ 1770cabdff1aSopenharmony_ci char *sub_charenc; 1771cabdff1aSopenharmony_ci 1772cabdff1aSopenharmony_ci /** 1773cabdff1aSopenharmony_ci * Subtitles character encoding mode. Formats or codecs might be adjusting 1774cabdff1aSopenharmony_ci * this setting (if they are doing the conversion themselves for instance). 1775cabdff1aSopenharmony_ci * - decoding: set by libavcodec 1776cabdff1aSopenharmony_ci * - encoding: unused 1777cabdff1aSopenharmony_ci */ 1778cabdff1aSopenharmony_ci int sub_charenc_mode; 1779cabdff1aSopenharmony_ci#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) 1780cabdff1aSopenharmony_ci#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself 1781cabdff1aSopenharmony_ci#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv 1782cabdff1aSopenharmony_ci#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 1783cabdff1aSopenharmony_ci 1784cabdff1aSopenharmony_ci /** 1785cabdff1aSopenharmony_ci * Skip processing alpha if supported by codec. 1786cabdff1aSopenharmony_ci * Note that if the format uses pre-multiplied alpha (common with VP6, 1787cabdff1aSopenharmony_ci * and recommended due to better video quality/compression) 1788cabdff1aSopenharmony_ci * the image will look as if alpha-blended onto a black background. 1789cabdff1aSopenharmony_ci * However for formats that do not use pre-multiplied alpha 1790cabdff1aSopenharmony_ci * there might be serious artefacts (though e.g. libswscale currently 1791cabdff1aSopenharmony_ci * assumes pre-multiplied alpha anyway). 1792cabdff1aSopenharmony_ci * 1793cabdff1aSopenharmony_ci * - decoding: set by user 1794cabdff1aSopenharmony_ci * - encoding: unused 1795cabdff1aSopenharmony_ci */ 1796cabdff1aSopenharmony_ci int skip_alpha; 1797cabdff1aSopenharmony_ci 1798cabdff1aSopenharmony_ci /** 1799cabdff1aSopenharmony_ci * Number of samples to skip after a discontinuity 1800cabdff1aSopenharmony_ci * - decoding: unused 1801cabdff1aSopenharmony_ci * - encoding: set by libavcodec 1802cabdff1aSopenharmony_ci */ 1803cabdff1aSopenharmony_ci int seek_preroll; 1804cabdff1aSopenharmony_ci 1805cabdff1aSopenharmony_ci#if FF_API_DEBUG_MV 1806cabdff1aSopenharmony_ci /** 1807cabdff1aSopenharmony_ci * @deprecated unused 1808cabdff1aSopenharmony_ci */ 1809cabdff1aSopenharmony_ci attribute_deprecated 1810cabdff1aSopenharmony_ci int debug_mv; 1811cabdff1aSopenharmony_ci#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames 1812cabdff1aSopenharmony_ci#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames 1813cabdff1aSopenharmony_ci#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames 1814cabdff1aSopenharmony_ci#endif 1815cabdff1aSopenharmony_ci 1816cabdff1aSopenharmony_ci /** 1817cabdff1aSopenharmony_ci * custom intra quantization matrix 1818cabdff1aSopenharmony_ci * - encoding: Set by user, can be NULL. 1819cabdff1aSopenharmony_ci * - decoding: unused. 1820cabdff1aSopenharmony_ci */ 1821cabdff1aSopenharmony_ci uint16_t *chroma_intra_matrix; 1822cabdff1aSopenharmony_ci 1823cabdff1aSopenharmony_ci /** 1824cabdff1aSopenharmony_ci * dump format separator. 1825cabdff1aSopenharmony_ci * can be ", " or "\n " or anything else 1826cabdff1aSopenharmony_ci * - encoding: Set by user. 1827cabdff1aSopenharmony_ci * - decoding: Set by user. 1828cabdff1aSopenharmony_ci */ 1829cabdff1aSopenharmony_ci uint8_t *dump_separator; 1830cabdff1aSopenharmony_ci 1831cabdff1aSopenharmony_ci /** 1832cabdff1aSopenharmony_ci * ',' separated list of allowed decoders. 1833cabdff1aSopenharmony_ci * If NULL then all are allowed 1834cabdff1aSopenharmony_ci * - encoding: unused 1835cabdff1aSopenharmony_ci * - decoding: set by user 1836cabdff1aSopenharmony_ci */ 1837cabdff1aSopenharmony_ci char *codec_whitelist; 1838cabdff1aSopenharmony_ci 1839cabdff1aSopenharmony_ci /** 1840cabdff1aSopenharmony_ci * Properties of the stream that gets decoded 1841cabdff1aSopenharmony_ci * - encoding: unused 1842cabdff1aSopenharmony_ci * - decoding: set by libavcodec 1843cabdff1aSopenharmony_ci */ 1844cabdff1aSopenharmony_ci unsigned properties; 1845cabdff1aSopenharmony_ci#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 1846cabdff1aSopenharmony_ci#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 1847cabdff1aSopenharmony_ci#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 1848cabdff1aSopenharmony_ci 1849cabdff1aSopenharmony_ci /** 1850cabdff1aSopenharmony_ci * Additional data associated with the entire coded stream. 1851cabdff1aSopenharmony_ci * 1852cabdff1aSopenharmony_ci * - decoding: unused 1853cabdff1aSopenharmony_ci * - encoding: may be set by libavcodec after avcodec_open2(). 1854cabdff1aSopenharmony_ci */ 1855cabdff1aSopenharmony_ci AVPacketSideData *coded_side_data; 1856cabdff1aSopenharmony_ci int nb_coded_side_data; 1857cabdff1aSopenharmony_ci 1858cabdff1aSopenharmony_ci /** 1859cabdff1aSopenharmony_ci * A reference to the AVHWFramesContext describing the input (for encoding) 1860cabdff1aSopenharmony_ci * or output (decoding) frames. The reference is set by the caller and 1861cabdff1aSopenharmony_ci * afterwards owned (and freed) by libavcodec - it should never be read by 1862cabdff1aSopenharmony_ci * the caller after being set. 1863cabdff1aSopenharmony_ci * 1864cabdff1aSopenharmony_ci * - decoding: This field should be set by the caller from the get_format() 1865cabdff1aSopenharmony_ci * callback. The previous reference (if any) will always be 1866cabdff1aSopenharmony_ci * unreffed by libavcodec before the get_format() call. 1867cabdff1aSopenharmony_ci * 1868cabdff1aSopenharmony_ci * If the default get_buffer2() is used with a hwaccel pixel 1869cabdff1aSopenharmony_ci * format, then this AVHWFramesContext will be used for 1870cabdff1aSopenharmony_ci * allocating the frame buffers. 1871cabdff1aSopenharmony_ci * 1872cabdff1aSopenharmony_ci * - encoding: For hardware encoders configured to use a hwaccel pixel 1873cabdff1aSopenharmony_ci * format, this field should be set by the caller to a reference 1874cabdff1aSopenharmony_ci * to the AVHWFramesContext describing input frames. 1875cabdff1aSopenharmony_ci * AVHWFramesContext.format must be equal to 1876cabdff1aSopenharmony_ci * AVCodecContext.pix_fmt. 1877cabdff1aSopenharmony_ci * 1878cabdff1aSopenharmony_ci * This field should be set before avcodec_open2() is called. 1879cabdff1aSopenharmony_ci */ 1880cabdff1aSopenharmony_ci AVBufferRef *hw_frames_ctx; 1881cabdff1aSopenharmony_ci 1882cabdff1aSopenharmony_ci#if FF_API_SUB_TEXT_FORMAT 1883cabdff1aSopenharmony_ci /** 1884cabdff1aSopenharmony_ci * @deprecated unused 1885cabdff1aSopenharmony_ci */ 1886cabdff1aSopenharmony_ci attribute_deprecated 1887cabdff1aSopenharmony_ci int sub_text_format; 1888cabdff1aSopenharmony_ci#define FF_SUB_TEXT_FMT_ASS 0 1889cabdff1aSopenharmony_ci#endif 1890cabdff1aSopenharmony_ci 1891cabdff1aSopenharmony_ci /** 1892cabdff1aSopenharmony_ci * Audio only. The amount of padding (in samples) appended by the encoder to 1893cabdff1aSopenharmony_ci * the end of the audio. I.e. this number of decoded samples must be 1894cabdff1aSopenharmony_ci * discarded by the caller from the end of the stream to get the original 1895cabdff1aSopenharmony_ci * audio without any trailing padding. 1896cabdff1aSopenharmony_ci * 1897cabdff1aSopenharmony_ci * - decoding: unused 1898cabdff1aSopenharmony_ci * - encoding: unused 1899cabdff1aSopenharmony_ci */ 1900cabdff1aSopenharmony_ci int trailing_padding; 1901cabdff1aSopenharmony_ci 1902cabdff1aSopenharmony_ci /** 1903cabdff1aSopenharmony_ci * The number of pixels per image to maximally accept. 1904cabdff1aSopenharmony_ci * 1905cabdff1aSopenharmony_ci * - decoding: set by user 1906cabdff1aSopenharmony_ci * - encoding: set by user 1907cabdff1aSopenharmony_ci */ 1908cabdff1aSopenharmony_ci int64_t max_pixels; 1909cabdff1aSopenharmony_ci 1910cabdff1aSopenharmony_ci /** 1911cabdff1aSopenharmony_ci * A reference to the AVHWDeviceContext describing the device which will 1912cabdff1aSopenharmony_ci * be used by a hardware encoder/decoder. The reference is set by the 1913cabdff1aSopenharmony_ci * caller and afterwards owned (and freed) by libavcodec. 1914cabdff1aSopenharmony_ci * 1915cabdff1aSopenharmony_ci * This should be used if either the codec device does not require 1916cabdff1aSopenharmony_ci * hardware frames or any that are used are to be allocated internally by 1917cabdff1aSopenharmony_ci * libavcodec. If the user wishes to supply any of the frames used as 1918cabdff1aSopenharmony_ci * encoder input or decoder output then hw_frames_ctx should be used 1919cabdff1aSopenharmony_ci * instead. When hw_frames_ctx is set in get_format() for a decoder, this 1920cabdff1aSopenharmony_ci * field will be ignored while decoding the associated stream segment, but 1921cabdff1aSopenharmony_ci * may again be used on a following one after another get_format() call. 1922cabdff1aSopenharmony_ci * 1923cabdff1aSopenharmony_ci * For both encoders and decoders this field should be set before 1924cabdff1aSopenharmony_ci * avcodec_open2() is called and must not be written to thereafter. 1925cabdff1aSopenharmony_ci * 1926cabdff1aSopenharmony_ci * Note that some decoders may require this field to be set initially in 1927cabdff1aSopenharmony_ci * order to support hw_frames_ctx at all - in that case, all frames 1928cabdff1aSopenharmony_ci * contexts used must be created on the same device. 1929cabdff1aSopenharmony_ci */ 1930cabdff1aSopenharmony_ci AVBufferRef *hw_device_ctx; 1931cabdff1aSopenharmony_ci 1932cabdff1aSopenharmony_ci /** 1933cabdff1aSopenharmony_ci * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated 1934cabdff1aSopenharmony_ci * decoding (if active). 1935cabdff1aSopenharmony_ci * - encoding: unused 1936cabdff1aSopenharmony_ci * - decoding: Set by user (either before avcodec_open2(), or in the 1937cabdff1aSopenharmony_ci * AVCodecContext.get_format callback) 1938cabdff1aSopenharmony_ci */ 1939cabdff1aSopenharmony_ci int hwaccel_flags; 1940cabdff1aSopenharmony_ci 1941cabdff1aSopenharmony_ci /** 1942cabdff1aSopenharmony_ci * Video decoding only. Certain video codecs support cropping, meaning that 1943cabdff1aSopenharmony_ci * only a sub-rectangle of the decoded frame is intended for display. This 1944cabdff1aSopenharmony_ci * option controls how cropping is handled by libavcodec. 1945cabdff1aSopenharmony_ci * 1946cabdff1aSopenharmony_ci * When set to 1 (the default), libavcodec will apply cropping internally. 1947cabdff1aSopenharmony_ci * I.e. it will modify the output frame width/height fields and offset the 1948cabdff1aSopenharmony_ci * data pointers (only by as much as possible while preserving alignment, or 1949cabdff1aSopenharmony_ci * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that 1950cabdff1aSopenharmony_ci * the frames output by the decoder refer only to the cropped area. The 1951cabdff1aSopenharmony_ci * crop_* fields of the output frames will be zero. 1952cabdff1aSopenharmony_ci * 1953cabdff1aSopenharmony_ci * When set to 0, the width/height fields of the output frames will be set 1954cabdff1aSopenharmony_ci * to the coded dimensions and the crop_* fields will describe the cropping 1955cabdff1aSopenharmony_ci * rectangle. Applying the cropping is left to the caller. 1956cabdff1aSopenharmony_ci * 1957cabdff1aSopenharmony_ci * @warning When hardware acceleration with opaque output frames is used, 1958cabdff1aSopenharmony_ci * libavcodec is unable to apply cropping from the top/left border. 1959cabdff1aSopenharmony_ci * 1960cabdff1aSopenharmony_ci * @note when this option is set to zero, the width/height fields of the 1961cabdff1aSopenharmony_ci * AVCodecContext and output AVFrames have different meanings. The codec 1962cabdff1aSopenharmony_ci * context fields store display dimensions (with the coded dimensions in 1963cabdff1aSopenharmony_ci * coded_width/height), while the frame fields store the coded dimensions 1964cabdff1aSopenharmony_ci * (with the display dimensions being determined by the crop_* fields). 1965cabdff1aSopenharmony_ci */ 1966cabdff1aSopenharmony_ci int apply_cropping; 1967cabdff1aSopenharmony_ci 1968cabdff1aSopenharmony_ci /* 1969cabdff1aSopenharmony_ci * Video decoding only. Sets the number of extra hardware frames which 1970cabdff1aSopenharmony_ci * the decoder will allocate for use by the caller. This must be set 1971cabdff1aSopenharmony_ci * before avcodec_open2() is called. 1972cabdff1aSopenharmony_ci * 1973cabdff1aSopenharmony_ci * Some hardware decoders require all frames that they will use for 1974cabdff1aSopenharmony_ci * output to be defined in advance before decoding starts. For such 1975cabdff1aSopenharmony_ci * decoders, the hardware frame pool must therefore be of a fixed size. 1976cabdff1aSopenharmony_ci * The extra frames set here are on top of any number that the decoder 1977cabdff1aSopenharmony_ci * needs internally in order to operate normally (for example, frames 1978cabdff1aSopenharmony_ci * used as reference pictures). 1979cabdff1aSopenharmony_ci */ 1980cabdff1aSopenharmony_ci int extra_hw_frames; 1981cabdff1aSopenharmony_ci 1982cabdff1aSopenharmony_ci /** 1983cabdff1aSopenharmony_ci * The percentage of damaged samples to discard a frame. 1984cabdff1aSopenharmony_ci * 1985cabdff1aSopenharmony_ci * - decoding: set by user 1986cabdff1aSopenharmony_ci * - encoding: unused 1987cabdff1aSopenharmony_ci */ 1988cabdff1aSopenharmony_ci int discard_damaged_percentage; 1989cabdff1aSopenharmony_ci 1990cabdff1aSopenharmony_ci /** 1991cabdff1aSopenharmony_ci * The number of samples per frame to maximally accept. 1992cabdff1aSopenharmony_ci * 1993cabdff1aSopenharmony_ci * - decoding: set by user 1994cabdff1aSopenharmony_ci * - encoding: set by user 1995cabdff1aSopenharmony_ci */ 1996cabdff1aSopenharmony_ci int64_t max_samples; 1997cabdff1aSopenharmony_ci 1998cabdff1aSopenharmony_ci /** 1999cabdff1aSopenharmony_ci * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of 2000cabdff1aSopenharmony_ci * metadata exported in frame, packet, or coded stream side data by 2001cabdff1aSopenharmony_ci * decoders and encoders. 2002cabdff1aSopenharmony_ci * 2003cabdff1aSopenharmony_ci * - decoding: set by user 2004cabdff1aSopenharmony_ci * - encoding: set by user 2005cabdff1aSopenharmony_ci */ 2006cabdff1aSopenharmony_ci int export_side_data; 2007cabdff1aSopenharmony_ci 2008cabdff1aSopenharmony_ci /** 2009cabdff1aSopenharmony_ci * This callback is called at the beginning of each packet to get a data 2010cabdff1aSopenharmony_ci * buffer for it. 2011cabdff1aSopenharmony_ci * 2012cabdff1aSopenharmony_ci * The following field will be set in the packet before this callback is 2013cabdff1aSopenharmony_ci * called: 2014cabdff1aSopenharmony_ci * - size 2015cabdff1aSopenharmony_ci * This callback must use the above value to calculate the required buffer size, 2016cabdff1aSopenharmony_ci * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. 2017cabdff1aSopenharmony_ci * 2018cabdff1aSopenharmony_ci * In some specific cases, the encoder may not use the entire buffer allocated by this 2019cabdff1aSopenharmony_ci * callback. This will be reflected in the size value in the packet once returned by 2020cabdff1aSopenharmony_ci * avcodec_receive_packet(). 2021cabdff1aSopenharmony_ci * 2022cabdff1aSopenharmony_ci * This callback must fill the following fields in the packet: 2023cabdff1aSopenharmony_ci * - data: alignment requirements for AVPacket apply, if any. Some architectures and 2024cabdff1aSopenharmony_ci * encoders may benefit from having aligned data. 2025cabdff1aSopenharmony_ci * - buf: must contain a pointer to an AVBufferRef structure. The packet's 2026cabdff1aSopenharmony_ci * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), 2027cabdff1aSopenharmony_ci * and av_buffer_ref(). 2028cabdff1aSopenharmony_ci * 2029cabdff1aSopenharmony_ci * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call 2030cabdff1aSopenharmony_ci * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by 2031cabdff1aSopenharmony_ci * some other means. 2032cabdff1aSopenharmony_ci * 2033cabdff1aSopenharmony_ci * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. 2034cabdff1aSopenharmony_ci * They may be used for example to hint what use the buffer may get after being 2035cabdff1aSopenharmony_ci * created. 2036cabdff1aSopenharmony_ci * Implementations of this callback may ignore flags they don't understand. 2037cabdff1aSopenharmony_ci * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused 2038cabdff1aSopenharmony_ci * (read and/or written to if it is writable) later by libavcodec. 2039cabdff1aSopenharmony_ci * 2040cabdff1aSopenharmony_ci * This callback must be thread-safe, as when frame threading is used, it may 2041cabdff1aSopenharmony_ci * be called from multiple threads simultaneously. 2042cabdff1aSopenharmony_ci * 2043cabdff1aSopenharmony_ci * @see avcodec_default_get_encode_buffer() 2044cabdff1aSopenharmony_ci * 2045cabdff1aSopenharmony_ci * - encoding: Set by libavcodec, user can override. 2046cabdff1aSopenharmony_ci * - decoding: unused 2047cabdff1aSopenharmony_ci */ 2048cabdff1aSopenharmony_ci int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); 2049cabdff1aSopenharmony_ci 2050cabdff1aSopenharmony_ci /** 2051cabdff1aSopenharmony_ci * Audio channel layout. 2052cabdff1aSopenharmony_ci * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. 2053cabdff1aSopenharmony_ci * - decoding: may be set by the caller if known e.g. from the container. 2054cabdff1aSopenharmony_ci * The decoder can then override during decoding as needed. 2055cabdff1aSopenharmony_ci */ 2056cabdff1aSopenharmony_ci AVChannelLayout ch_layout; 2057cabdff1aSopenharmony_ci} AVCodecContext; 2058cabdff1aSopenharmony_ci 2059cabdff1aSopenharmony_ci/** 2060cabdff1aSopenharmony_ci * @defgroup lavc_hwaccel AVHWAccel 2061cabdff1aSopenharmony_ci * 2062cabdff1aSopenharmony_ci * @note Nothing in this structure should be accessed by the user. At some 2063cabdff1aSopenharmony_ci * point in future it will not be externally visible at all. 2064cabdff1aSopenharmony_ci * 2065cabdff1aSopenharmony_ci * @{ 2066cabdff1aSopenharmony_ci */ 2067cabdff1aSopenharmony_citypedef struct AVHWAccel { 2068cabdff1aSopenharmony_ci /** 2069cabdff1aSopenharmony_ci * Name of the hardware accelerated codec. 2070cabdff1aSopenharmony_ci * The name is globally unique among encoders and among decoders (but an 2071cabdff1aSopenharmony_ci * encoder and a decoder can share the same name). 2072cabdff1aSopenharmony_ci */ 2073cabdff1aSopenharmony_ci const char *name; 2074cabdff1aSopenharmony_ci 2075cabdff1aSopenharmony_ci /** 2076cabdff1aSopenharmony_ci * Type of codec implemented by the hardware accelerator. 2077cabdff1aSopenharmony_ci * 2078cabdff1aSopenharmony_ci * See AVMEDIA_TYPE_xxx 2079cabdff1aSopenharmony_ci */ 2080cabdff1aSopenharmony_ci enum AVMediaType type; 2081cabdff1aSopenharmony_ci 2082cabdff1aSopenharmony_ci /** 2083cabdff1aSopenharmony_ci * Codec implemented by the hardware accelerator. 2084cabdff1aSopenharmony_ci * 2085cabdff1aSopenharmony_ci * See AV_CODEC_ID_xxx 2086cabdff1aSopenharmony_ci */ 2087cabdff1aSopenharmony_ci enum AVCodecID id; 2088cabdff1aSopenharmony_ci 2089cabdff1aSopenharmony_ci /** 2090cabdff1aSopenharmony_ci * Supported pixel format. 2091cabdff1aSopenharmony_ci * 2092cabdff1aSopenharmony_ci * Only hardware accelerated formats are supported here. 2093cabdff1aSopenharmony_ci */ 2094cabdff1aSopenharmony_ci enum AVPixelFormat pix_fmt; 2095cabdff1aSopenharmony_ci 2096cabdff1aSopenharmony_ci /** 2097cabdff1aSopenharmony_ci * Hardware accelerated codec capabilities. 2098cabdff1aSopenharmony_ci * see AV_HWACCEL_CODEC_CAP_* 2099cabdff1aSopenharmony_ci */ 2100cabdff1aSopenharmony_ci int capabilities; 2101cabdff1aSopenharmony_ci 2102cabdff1aSopenharmony_ci /***************************************************************** 2103cabdff1aSopenharmony_ci * No fields below this line are part of the public API. They 2104cabdff1aSopenharmony_ci * may not be used outside of libavcodec and can be changed and 2105cabdff1aSopenharmony_ci * removed at will. 2106cabdff1aSopenharmony_ci * New public fields should be added right above. 2107cabdff1aSopenharmony_ci ***************************************************************** 2108cabdff1aSopenharmony_ci */ 2109cabdff1aSopenharmony_ci 2110cabdff1aSopenharmony_ci /** 2111cabdff1aSopenharmony_ci * Allocate a custom buffer 2112cabdff1aSopenharmony_ci */ 2113cabdff1aSopenharmony_ci int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); 2114cabdff1aSopenharmony_ci 2115cabdff1aSopenharmony_ci /** 2116cabdff1aSopenharmony_ci * Called at the beginning of each frame or field picture. 2117cabdff1aSopenharmony_ci * 2118cabdff1aSopenharmony_ci * Meaningful frame information (codec specific) is guaranteed to 2119cabdff1aSopenharmony_ci * be parsed at this point. This function is mandatory. 2120cabdff1aSopenharmony_ci * 2121cabdff1aSopenharmony_ci * Note that buf can be NULL along with buf_size set to 0. 2122cabdff1aSopenharmony_ci * Otherwise, this means the whole frame is available at this point. 2123cabdff1aSopenharmony_ci * 2124cabdff1aSopenharmony_ci * @param avctx the codec context 2125cabdff1aSopenharmony_ci * @param buf the frame data buffer base 2126cabdff1aSopenharmony_ci * @param buf_size the size of the frame in bytes 2127cabdff1aSopenharmony_ci * @return zero if successful, a negative value otherwise 2128cabdff1aSopenharmony_ci */ 2129cabdff1aSopenharmony_ci int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); 2130cabdff1aSopenharmony_ci 2131cabdff1aSopenharmony_ci /** 2132cabdff1aSopenharmony_ci * Callback for parameter data (SPS/PPS/VPS etc). 2133cabdff1aSopenharmony_ci * 2134cabdff1aSopenharmony_ci * Useful for hardware decoders which keep persistent state about the 2135cabdff1aSopenharmony_ci * video parameters, and need to receive any changes to update that state. 2136cabdff1aSopenharmony_ci * 2137cabdff1aSopenharmony_ci * @param avctx the codec context 2138cabdff1aSopenharmony_ci * @param type the nal unit type 2139cabdff1aSopenharmony_ci * @param buf the nal unit data buffer 2140cabdff1aSopenharmony_ci * @param buf_size the size of the nal unit in bytes 2141cabdff1aSopenharmony_ci * @return zero if successful, a negative value otherwise 2142cabdff1aSopenharmony_ci */ 2143cabdff1aSopenharmony_ci int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); 2144cabdff1aSopenharmony_ci 2145cabdff1aSopenharmony_ci /** 2146cabdff1aSopenharmony_ci * Callback for each slice. 2147cabdff1aSopenharmony_ci * 2148cabdff1aSopenharmony_ci * Meaningful slice information (codec specific) is guaranteed to 2149cabdff1aSopenharmony_ci * be parsed at this point. This function is mandatory. 2150cabdff1aSopenharmony_ci * 2151cabdff1aSopenharmony_ci * @param avctx the codec context 2152cabdff1aSopenharmony_ci * @param buf the slice data buffer base 2153cabdff1aSopenharmony_ci * @param buf_size the size of the slice in bytes 2154cabdff1aSopenharmony_ci * @return zero if successful, a negative value otherwise 2155cabdff1aSopenharmony_ci */ 2156cabdff1aSopenharmony_ci int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); 2157cabdff1aSopenharmony_ci 2158cabdff1aSopenharmony_ci /** 2159cabdff1aSopenharmony_ci * Called at the end of each frame or field picture. 2160cabdff1aSopenharmony_ci * 2161cabdff1aSopenharmony_ci * The whole picture is parsed at this point and can now be sent 2162cabdff1aSopenharmony_ci * to the hardware accelerator. This function is mandatory. 2163cabdff1aSopenharmony_ci * 2164cabdff1aSopenharmony_ci * @param avctx the codec context 2165cabdff1aSopenharmony_ci * @return zero if successful, a negative value otherwise 2166cabdff1aSopenharmony_ci */ 2167cabdff1aSopenharmony_ci int (*end_frame)(AVCodecContext *avctx); 2168cabdff1aSopenharmony_ci 2169cabdff1aSopenharmony_ci /** 2170cabdff1aSopenharmony_ci * Size of per-frame hardware accelerator private data. 2171cabdff1aSopenharmony_ci * 2172cabdff1aSopenharmony_ci * Private data is allocated with av_mallocz() before 2173cabdff1aSopenharmony_ci * AVCodecContext.get_buffer() and deallocated after 2174cabdff1aSopenharmony_ci * AVCodecContext.release_buffer(). 2175cabdff1aSopenharmony_ci */ 2176cabdff1aSopenharmony_ci int frame_priv_data_size; 2177cabdff1aSopenharmony_ci 2178cabdff1aSopenharmony_ci /** 2179cabdff1aSopenharmony_ci * Initialize the hwaccel private data. 2180cabdff1aSopenharmony_ci * 2181cabdff1aSopenharmony_ci * This will be called from ff_get_format(), after hwaccel and 2182cabdff1aSopenharmony_ci * hwaccel_context are set and the hwaccel private data in AVCodecInternal 2183cabdff1aSopenharmony_ci * is allocated. 2184cabdff1aSopenharmony_ci */ 2185cabdff1aSopenharmony_ci int (*init)(AVCodecContext *avctx); 2186cabdff1aSopenharmony_ci 2187cabdff1aSopenharmony_ci /** 2188cabdff1aSopenharmony_ci * Uninitialize the hwaccel private data. 2189cabdff1aSopenharmony_ci * 2190cabdff1aSopenharmony_ci * This will be called from get_format() or avcodec_close(), after hwaccel 2191cabdff1aSopenharmony_ci * and hwaccel_context are already uninitialized. 2192cabdff1aSopenharmony_ci */ 2193cabdff1aSopenharmony_ci int (*uninit)(AVCodecContext *avctx); 2194cabdff1aSopenharmony_ci 2195cabdff1aSopenharmony_ci /** 2196cabdff1aSopenharmony_ci * Size of the private data to allocate in 2197cabdff1aSopenharmony_ci * AVCodecInternal.hwaccel_priv_data. 2198cabdff1aSopenharmony_ci */ 2199cabdff1aSopenharmony_ci int priv_data_size; 2200cabdff1aSopenharmony_ci 2201cabdff1aSopenharmony_ci /** 2202cabdff1aSopenharmony_ci * Internal hwaccel capabilities. 2203cabdff1aSopenharmony_ci */ 2204cabdff1aSopenharmony_ci int caps_internal; 2205cabdff1aSopenharmony_ci 2206cabdff1aSopenharmony_ci /** 2207cabdff1aSopenharmony_ci * Fill the given hw_frames context with current codec parameters. Called 2208cabdff1aSopenharmony_ci * from get_format. Refer to avcodec_get_hw_frames_parameters() for 2209cabdff1aSopenharmony_ci * details. 2210cabdff1aSopenharmony_ci * 2211cabdff1aSopenharmony_ci * This CAN be called before AVHWAccel.init is called, and you must assume 2212cabdff1aSopenharmony_ci * that avctx->hwaccel_priv_data is invalid. 2213cabdff1aSopenharmony_ci */ 2214cabdff1aSopenharmony_ci int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); 2215cabdff1aSopenharmony_ci} AVHWAccel; 2216cabdff1aSopenharmony_ci 2217cabdff1aSopenharmony_ci/** 2218cabdff1aSopenharmony_ci * HWAccel is experimental and is thus avoided in favor of non experimental 2219cabdff1aSopenharmony_ci * codecs 2220cabdff1aSopenharmony_ci */ 2221cabdff1aSopenharmony_ci#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 2222cabdff1aSopenharmony_ci 2223cabdff1aSopenharmony_ci/** 2224cabdff1aSopenharmony_ci * Hardware acceleration should be used for decoding even if the codec level 2225cabdff1aSopenharmony_ci * used is unknown or higher than the maximum supported level reported by the 2226cabdff1aSopenharmony_ci * hardware driver. 2227cabdff1aSopenharmony_ci * 2228cabdff1aSopenharmony_ci * It's generally a good idea to pass this flag unless you have a specific 2229cabdff1aSopenharmony_ci * reason not to, as hardware tends to under-report supported levels. 2230cabdff1aSopenharmony_ci */ 2231cabdff1aSopenharmony_ci#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) 2232cabdff1aSopenharmony_ci 2233cabdff1aSopenharmony_ci/** 2234cabdff1aSopenharmony_ci * Hardware acceleration can output YUV pixel formats with a different chroma 2235cabdff1aSopenharmony_ci * sampling than 4:2:0 and/or other than 8 bits per component. 2236cabdff1aSopenharmony_ci */ 2237cabdff1aSopenharmony_ci#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) 2238cabdff1aSopenharmony_ci 2239cabdff1aSopenharmony_ci/** 2240cabdff1aSopenharmony_ci * Hardware acceleration should still be attempted for decoding when the 2241cabdff1aSopenharmony_ci * codec profile does not match the reported capabilities of the hardware. 2242cabdff1aSopenharmony_ci * 2243cabdff1aSopenharmony_ci * For example, this can be used to try to decode baseline profile H.264 2244cabdff1aSopenharmony_ci * streams in hardware - it will often succeed, because many streams marked 2245cabdff1aSopenharmony_ci * as baseline profile actually conform to constrained baseline profile. 2246cabdff1aSopenharmony_ci * 2247cabdff1aSopenharmony_ci * @warning If the stream is actually not supported then the behaviour is 2248cabdff1aSopenharmony_ci * undefined, and may include returning entirely incorrect output 2249cabdff1aSopenharmony_ci * while indicating success. 2250cabdff1aSopenharmony_ci */ 2251cabdff1aSopenharmony_ci#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) 2252cabdff1aSopenharmony_ci 2253cabdff1aSopenharmony_ci/** 2254cabdff1aSopenharmony_ci * @} 2255cabdff1aSopenharmony_ci */ 2256cabdff1aSopenharmony_ci 2257cabdff1aSopenharmony_cienum AVSubtitleType { 2258cabdff1aSopenharmony_ci SUBTITLE_NONE, 2259cabdff1aSopenharmony_ci 2260cabdff1aSopenharmony_ci SUBTITLE_BITMAP, ///< A bitmap, pict will be set 2261cabdff1aSopenharmony_ci 2262cabdff1aSopenharmony_ci /** 2263cabdff1aSopenharmony_ci * Plain text, the text field must be set by the decoder and is 2264cabdff1aSopenharmony_ci * authoritative. ass and pict fields may contain approximations. 2265cabdff1aSopenharmony_ci */ 2266cabdff1aSopenharmony_ci SUBTITLE_TEXT, 2267cabdff1aSopenharmony_ci 2268cabdff1aSopenharmony_ci /** 2269cabdff1aSopenharmony_ci * Formatted text, the ass field must be set by the decoder and is 2270cabdff1aSopenharmony_ci * authoritative. pict and text fields may contain approximations. 2271cabdff1aSopenharmony_ci */ 2272cabdff1aSopenharmony_ci SUBTITLE_ASS, 2273cabdff1aSopenharmony_ci}; 2274cabdff1aSopenharmony_ci 2275cabdff1aSopenharmony_ci#define AV_SUBTITLE_FLAG_FORCED 0x00000001 2276cabdff1aSopenharmony_ci 2277cabdff1aSopenharmony_citypedef struct AVSubtitleRect { 2278cabdff1aSopenharmony_ci int x; ///< top left corner of pict, undefined when pict is not set 2279cabdff1aSopenharmony_ci int y; ///< top left corner of pict, undefined when pict is not set 2280cabdff1aSopenharmony_ci int w; ///< width of pict, undefined when pict is not set 2281cabdff1aSopenharmony_ci int h; ///< height of pict, undefined when pict is not set 2282cabdff1aSopenharmony_ci int nb_colors; ///< number of colors in pict, undefined when pict is not set 2283cabdff1aSopenharmony_ci 2284cabdff1aSopenharmony_ci /** 2285cabdff1aSopenharmony_ci * data+linesize for the bitmap of this subtitle. 2286cabdff1aSopenharmony_ci * Can be set for text/ass as well once they are rendered. 2287cabdff1aSopenharmony_ci */ 2288cabdff1aSopenharmony_ci uint8_t *data[4]; 2289cabdff1aSopenharmony_ci int linesize[4]; 2290cabdff1aSopenharmony_ci 2291cabdff1aSopenharmony_ci enum AVSubtitleType type; 2292cabdff1aSopenharmony_ci 2293cabdff1aSopenharmony_ci char *text; ///< 0 terminated plain UTF-8 text 2294cabdff1aSopenharmony_ci 2295cabdff1aSopenharmony_ci /** 2296cabdff1aSopenharmony_ci * 0 terminated ASS/SSA compatible event line. 2297cabdff1aSopenharmony_ci * The presentation of this is unaffected by the other values in this 2298cabdff1aSopenharmony_ci * struct. 2299cabdff1aSopenharmony_ci */ 2300cabdff1aSopenharmony_ci char *ass; 2301cabdff1aSopenharmony_ci 2302cabdff1aSopenharmony_ci int flags; 2303cabdff1aSopenharmony_ci} AVSubtitleRect; 2304cabdff1aSopenharmony_ci 2305cabdff1aSopenharmony_citypedef struct AVSubtitle { 2306cabdff1aSopenharmony_ci uint16_t format; /* 0 = graphics */ 2307cabdff1aSopenharmony_ci uint32_t start_display_time; /* relative to packet pts, in ms */ 2308cabdff1aSopenharmony_ci uint32_t end_display_time; /* relative to packet pts, in ms */ 2309cabdff1aSopenharmony_ci unsigned num_rects; 2310cabdff1aSopenharmony_ci AVSubtitleRect **rects; 2311cabdff1aSopenharmony_ci int64_t pts; ///< Same as packet pts, in AV_TIME_BASE 2312cabdff1aSopenharmony_ci} AVSubtitle; 2313cabdff1aSopenharmony_ci 2314cabdff1aSopenharmony_ci/** 2315cabdff1aSopenharmony_ci * Return the LIBAVCODEC_VERSION_INT constant. 2316cabdff1aSopenharmony_ci */ 2317cabdff1aSopenharmony_ciunsigned avcodec_version(void); 2318cabdff1aSopenharmony_ci 2319cabdff1aSopenharmony_ci/** 2320cabdff1aSopenharmony_ci * Return the libavcodec build-time configuration. 2321cabdff1aSopenharmony_ci */ 2322cabdff1aSopenharmony_ciconst char *avcodec_configuration(void); 2323cabdff1aSopenharmony_ci 2324cabdff1aSopenharmony_ci/** 2325cabdff1aSopenharmony_ci * Return the libavcodec license. 2326cabdff1aSopenharmony_ci */ 2327cabdff1aSopenharmony_ciconst char *avcodec_license(void); 2328cabdff1aSopenharmony_ci 2329cabdff1aSopenharmony_ci/** 2330cabdff1aSopenharmony_ci * Allocate an AVCodecContext and set its fields to default values. The 2331cabdff1aSopenharmony_ci * resulting struct should be freed with avcodec_free_context(). 2332cabdff1aSopenharmony_ci * 2333cabdff1aSopenharmony_ci * @param codec if non-NULL, allocate private data and initialize defaults 2334cabdff1aSopenharmony_ci * for the given codec. It is illegal to then call avcodec_open2() 2335cabdff1aSopenharmony_ci * with a different codec. 2336cabdff1aSopenharmony_ci * If NULL, then the codec-specific defaults won't be initialized, 2337cabdff1aSopenharmony_ci * which may result in suboptimal default settings (this is 2338cabdff1aSopenharmony_ci * important mainly for encoders, e.g. libx264). 2339cabdff1aSopenharmony_ci * 2340cabdff1aSopenharmony_ci * @return An AVCodecContext filled with default values or NULL on failure. 2341cabdff1aSopenharmony_ci */ 2342cabdff1aSopenharmony_ciAVCodecContext *avcodec_alloc_context3(const AVCodec *codec); 2343cabdff1aSopenharmony_ci 2344cabdff1aSopenharmony_ci/** 2345cabdff1aSopenharmony_ci * Free the codec context and everything associated with it and write NULL to 2346cabdff1aSopenharmony_ci * the provided pointer. 2347cabdff1aSopenharmony_ci */ 2348cabdff1aSopenharmony_civoid avcodec_free_context(AVCodecContext **avctx); 2349cabdff1aSopenharmony_ci 2350cabdff1aSopenharmony_ci/** 2351cabdff1aSopenharmony_ci * Get the AVClass for AVCodecContext. It can be used in combination with 2352cabdff1aSopenharmony_ci * AV_OPT_SEARCH_FAKE_OBJ for examining options. 2353cabdff1aSopenharmony_ci * 2354cabdff1aSopenharmony_ci * @see av_opt_find(). 2355cabdff1aSopenharmony_ci */ 2356cabdff1aSopenharmony_ciconst AVClass *avcodec_get_class(void); 2357cabdff1aSopenharmony_ci 2358cabdff1aSopenharmony_ci#if FF_API_GET_FRAME_CLASS 2359cabdff1aSopenharmony_ci/** 2360cabdff1aSopenharmony_ci * @deprecated This function should not be used. 2361cabdff1aSopenharmony_ci */ 2362cabdff1aSopenharmony_ciattribute_deprecated 2363cabdff1aSopenharmony_ciconst AVClass *avcodec_get_frame_class(void); 2364cabdff1aSopenharmony_ci#endif 2365cabdff1aSopenharmony_ci 2366cabdff1aSopenharmony_ci/** 2367cabdff1aSopenharmony_ci * Get the AVClass for AVSubtitleRect. It can be used in combination with 2368cabdff1aSopenharmony_ci * AV_OPT_SEARCH_FAKE_OBJ for examining options. 2369cabdff1aSopenharmony_ci * 2370cabdff1aSopenharmony_ci * @see av_opt_find(). 2371cabdff1aSopenharmony_ci */ 2372cabdff1aSopenharmony_ciconst AVClass *avcodec_get_subtitle_rect_class(void); 2373cabdff1aSopenharmony_ci 2374cabdff1aSopenharmony_ci/** 2375cabdff1aSopenharmony_ci * Fill the parameters struct based on the values from the supplied codec 2376cabdff1aSopenharmony_ci * context. Any allocated fields in par are freed and replaced with duplicates 2377cabdff1aSopenharmony_ci * of the corresponding fields in codec. 2378cabdff1aSopenharmony_ci * 2379cabdff1aSopenharmony_ci * @return >= 0 on success, a negative AVERROR code on failure 2380cabdff1aSopenharmony_ci */ 2381cabdff1aSopenharmony_ciint avcodec_parameters_from_context(AVCodecParameters *par, 2382cabdff1aSopenharmony_ci const AVCodecContext *codec); 2383cabdff1aSopenharmony_ci 2384cabdff1aSopenharmony_ci/** 2385cabdff1aSopenharmony_ci * Fill the codec context based on the values from the supplied codec 2386cabdff1aSopenharmony_ci * parameters. Any allocated fields in codec that have a corresponding field in 2387cabdff1aSopenharmony_ci * par are freed and replaced with duplicates of the corresponding field in par. 2388cabdff1aSopenharmony_ci * Fields in codec that do not have a counterpart in par are not touched. 2389cabdff1aSopenharmony_ci * 2390cabdff1aSopenharmony_ci * @return >= 0 on success, a negative AVERROR code on failure. 2391cabdff1aSopenharmony_ci */ 2392cabdff1aSopenharmony_ciint avcodec_parameters_to_context(AVCodecContext *codec, 2393cabdff1aSopenharmony_ci const AVCodecParameters *par); 2394cabdff1aSopenharmony_ci 2395cabdff1aSopenharmony_ci/** 2396cabdff1aSopenharmony_ci * Initialize the AVCodecContext to use the given AVCodec. Prior to using this 2397cabdff1aSopenharmony_ci * function the context has to be allocated with avcodec_alloc_context3(). 2398cabdff1aSopenharmony_ci * 2399cabdff1aSopenharmony_ci * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), 2400cabdff1aSopenharmony_ci * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for 2401cabdff1aSopenharmony_ci * retrieving a codec. 2402cabdff1aSopenharmony_ci * 2403cabdff1aSopenharmony_ci * @note Always call this function before using decoding routines (such as 2404cabdff1aSopenharmony_ci * @ref avcodec_receive_frame()). 2405cabdff1aSopenharmony_ci * 2406cabdff1aSopenharmony_ci * @code 2407cabdff1aSopenharmony_ci * av_dict_set(&opts, "b", "2.5M", 0); 2408cabdff1aSopenharmony_ci * codec = avcodec_find_decoder(AV_CODEC_ID_H264); 2409cabdff1aSopenharmony_ci * if (!codec) 2410cabdff1aSopenharmony_ci * exit(1); 2411cabdff1aSopenharmony_ci * 2412cabdff1aSopenharmony_ci * context = avcodec_alloc_context3(codec); 2413cabdff1aSopenharmony_ci * 2414cabdff1aSopenharmony_ci * if (avcodec_open2(context, codec, opts) < 0) 2415cabdff1aSopenharmony_ci * exit(1); 2416cabdff1aSopenharmony_ci * @endcode 2417cabdff1aSopenharmony_ci * 2418cabdff1aSopenharmony_ci * @param avctx The context to initialize. 2419cabdff1aSopenharmony_ci * @param codec The codec to open this context for. If a non-NULL codec has been 2420cabdff1aSopenharmony_ci * previously passed to avcodec_alloc_context3() or 2421cabdff1aSopenharmony_ci * for this context, then this parameter MUST be either NULL or 2422cabdff1aSopenharmony_ci * equal to the previously passed codec. 2423cabdff1aSopenharmony_ci * @param options A dictionary filled with AVCodecContext and codec-private options. 2424cabdff1aSopenharmony_ci * On return this object will be filled with options that were not found. 2425cabdff1aSopenharmony_ci * 2426cabdff1aSopenharmony_ci * @return zero on success, a negative value on error 2427cabdff1aSopenharmony_ci * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), 2428cabdff1aSopenharmony_ci * av_dict_set(), av_opt_find(). 2429cabdff1aSopenharmony_ci */ 2430cabdff1aSopenharmony_ciint avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); 2431cabdff1aSopenharmony_ci 2432cabdff1aSopenharmony_ci/** 2433cabdff1aSopenharmony_ci * Close a given AVCodecContext and free all the data associated with it 2434cabdff1aSopenharmony_ci * (but not the AVCodecContext itself). 2435cabdff1aSopenharmony_ci * 2436cabdff1aSopenharmony_ci * Calling this function on an AVCodecContext that hasn't been opened will free 2437cabdff1aSopenharmony_ci * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL 2438cabdff1aSopenharmony_ci * codec. Subsequent calls will do nothing. 2439cabdff1aSopenharmony_ci * 2440cabdff1aSopenharmony_ci * @note Do not use this function. Use avcodec_free_context() to destroy a 2441cabdff1aSopenharmony_ci * codec context (either open or closed). Opening and closing a codec context 2442cabdff1aSopenharmony_ci * multiple times is not supported anymore -- use multiple codec contexts 2443cabdff1aSopenharmony_ci * instead. 2444cabdff1aSopenharmony_ci */ 2445cabdff1aSopenharmony_ciint avcodec_close(AVCodecContext *avctx); 2446cabdff1aSopenharmony_ci 2447cabdff1aSopenharmony_ci/** 2448cabdff1aSopenharmony_ci * Free all allocated data in the given subtitle struct. 2449cabdff1aSopenharmony_ci * 2450cabdff1aSopenharmony_ci * @param sub AVSubtitle to free. 2451cabdff1aSopenharmony_ci */ 2452cabdff1aSopenharmony_civoid avsubtitle_free(AVSubtitle *sub); 2453cabdff1aSopenharmony_ci 2454cabdff1aSopenharmony_ci/** 2455cabdff1aSopenharmony_ci * @} 2456cabdff1aSopenharmony_ci */ 2457cabdff1aSopenharmony_ci 2458cabdff1aSopenharmony_ci/** 2459cabdff1aSopenharmony_ci * @addtogroup lavc_decoding 2460cabdff1aSopenharmony_ci * @{ 2461cabdff1aSopenharmony_ci */ 2462cabdff1aSopenharmony_ci 2463cabdff1aSopenharmony_ci/** 2464cabdff1aSopenharmony_ci * The default callback for AVCodecContext.get_buffer2(). It is made public so 2465cabdff1aSopenharmony_ci * it can be called by custom get_buffer2() implementations for decoders without 2466cabdff1aSopenharmony_ci * AV_CODEC_CAP_DR1 set. 2467cabdff1aSopenharmony_ci */ 2468cabdff1aSopenharmony_ciint avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); 2469cabdff1aSopenharmony_ci 2470cabdff1aSopenharmony_ci/** 2471cabdff1aSopenharmony_ci * The default callback for AVCodecContext.get_encode_buffer(). It is made public so 2472cabdff1aSopenharmony_ci * it can be called by custom get_encode_buffer() implementations for encoders without 2473cabdff1aSopenharmony_ci * AV_CODEC_CAP_DR1 set. 2474cabdff1aSopenharmony_ci */ 2475cabdff1aSopenharmony_ciint avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); 2476cabdff1aSopenharmony_ci 2477cabdff1aSopenharmony_ci/** 2478cabdff1aSopenharmony_ci * Modify width and height values so that they will result in a memory 2479cabdff1aSopenharmony_ci * buffer that is acceptable for the codec if you do not use any horizontal 2480cabdff1aSopenharmony_ci * padding. 2481cabdff1aSopenharmony_ci * 2482cabdff1aSopenharmony_ci * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. 2483cabdff1aSopenharmony_ci */ 2484cabdff1aSopenharmony_civoid avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); 2485cabdff1aSopenharmony_ci 2486cabdff1aSopenharmony_ci/** 2487cabdff1aSopenharmony_ci * Modify width and height values so that they will result in a memory 2488cabdff1aSopenharmony_ci * buffer that is acceptable for the codec if you also ensure that all 2489cabdff1aSopenharmony_ci * line sizes are a multiple of the respective linesize_align[i]. 2490cabdff1aSopenharmony_ci * 2491cabdff1aSopenharmony_ci * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. 2492cabdff1aSopenharmony_ci */ 2493cabdff1aSopenharmony_civoid avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, 2494cabdff1aSopenharmony_ci int linesize_align[AV_NUM_DATA_POINTERS]); 2495cabdff1aSopenharmony_ci 2496cabdff1aSopenharmony_ci/** 2497cabdff1aSopenharmony_ci * Converts AVChromaLocation to swscale x/y chroma position. 2498cabdff1aSopenharmony_ci * 2499cabdff1aSopenharmony_ci * The positions represent the chroma (0,0) position in a coordinates system 2500cabdff1aSopenharmony_ci * with luma (0,0) representing the origin and luma(1,1) representing 256,256 2501cabdff1aSopenharmony_ci * 2502cabdff1aSopenharmony_ci * @param xpos horizontal chroma sample position 2503cabdff1aSopenharmony_ci * @param ypos vertical chroma sample position 2504cabdff1aSopenharmony_ci */ 2505cabdff1aSopenharmony_ciint avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); 2506cabdff1aSopenharmony_ci 2507cabdff1aSopenharmony_ci/** 2508cabdff1aSopenharmony_ci * Converts swscale x/y chroma position to AVChromaLocation. 2509cabdff1aSopenharmony_ci * 2510cabdff1aSopenharmony_ci * The positions represent the chroma (0,0) position in a coordinates system 2511cabdff1aSopenharmony_ci * with luma (0,0) representing the origin and luma(1,1) representing 256,256 2512cabdff1aSopenharmony_ci * 2513cabdff1aSopenharmony_ci * @param xpos horizontal chroma sample position 2514cabdff1aSopenharmony_ci * @param ypos vertical chroma sample position 2515cabdff1aSopenharmony_ci */ 2516cabdff1aSopenharmony_cienum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); 2517cabdff1aSopenharmony_ci 2518cabdff1aSopenharmony_ci/** 2519cabdff1aSopenharmony_ci * Decode a subtitle message. 2520cabdff1aSopenharmony_ci * Return a negative value on error, otherwise return the number of bytes used. 2521cabdff1aSopenharmony_ci * If no subtitle could be decompressed, got_sub_ptr is zero. 2522cabdff1aSopenharmony_ci * Otherwise, the subtitle is stored in *sub. 2523cabdff1aSopenharmony_ci * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for 2524cabdff1aSopenharmony_ci * simplicity, because the performance difference is expected to be negligible 2525cabdff1aSopenharmony_ci * and reusing a get_buffer written for video codecs would probably perform badly 2526cabdff1aSopenharmony_ci * due to a potentially very different allocation pattern. 2527cabdff1aSopenharmony_ci * 2528cabdff1aSopenharmony_ci * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input 2529cabdff1aSopenharmony_ci * and output. This means that for some packets they will not immediately 2530cabdff1aSopenharmony_ci * produce decoded output and need to be flushed at the end of decoding to get 2531cabdff1aSopenharmony_ci * all the decoded data. Flushing is done by calling this function with packets 2532cabdff1aSopenharmony_ci * with avpkt->data set to NULL and avpkt->size set to 0 until it stops 2533cabdff1aSopenharmony_ci * returning subtitles. It is safe to flush even those decoders that are not 2534cabdff1aSopenharmony_ci * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. 2535cabdff1aSopenharmony_ci * 2536cabdff1aSopenharmony_ci * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 2537cabdff1aSopenharmony_ci * before packets may be fed to the decoder. 2538cabdff1aSopenharmony_ci * 2539cabdff1aSopenharmony_ci * @param avctx the codec context 2540cabdff1aSopenharmony_ci * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, 2541cabdff1aSopenharmony_ci * must be freed with avsubtitle_free if *got_sub_ptr is set. 2542cabdff1aSopenharmony_ci * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. 2543cabdff1aSopenharmony_ci * @param[in] avpkt The input AVPacket containing the input buffer. 2544cabdff1aSopenharmony_ci */ 2545cabdff1aSopenharmony_ciint avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, 2546cabdff1aSopenharmony_ci int *got_sub_ptr, 2547cabdff1aSopenharmony_ci AVPacket *avpkt); 2548cabdff1aSopenharmony_ci 2549cabdff1aSopenharmony_ci/** 2550cabdff1aSopenharmony_ci * Supply raw packet data as input to a decoder. 2551cabdff1aSopenharmony_ci * 2552cabdff1aSopenharmony_ci * Internally, this call will copy relevant AVCodecContext fields, which can 2553cabdff1aSopenharmony_ci * influence decoding per-packet, and apply them when the packet is actually 2554cabdff1aSopenharmony_ci * decoded. (For example AVCodecContext.skip_frame, which might direct the 2555cabdff1aSopenharmony_ci * decoder to drop the frame contained by the packet sent with this function.) 2556cabdff1aSopenharmony_ci * 2557cabdff1aSopenharmony_ci * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE 2558cabdff1aSopenharmony_ci * larger than the actual read bytes because some optimized bitstream 2559cabdff1aSopenharmony_ci * readers read 32 or 64 bits at once and could read over the end. 2560cabdff1aSopenharmony_ci * 2561cabdff1aSopenharmony_ci * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 2562cabdff1aSopenharmony_ci * before packets may be fed to the decoder. 2563cabdff1aSopenharmony_ci * 2564cabdff1aSopenharmony_ci * @param avctx codec context 2565cabdff1aSopenharmony_ci * @param[in] avpkt The input AVPacket. Usually, this will be a single video 2566cabdff1aSopenharmony_ci * frame, or several complete audio frames. 2567cabdff1aSopenharmony_ci * Ownership of the packet remains with the caller, and the 2568cabdff1aSopenharmony_ci * decoder will not write to the packet. The decoder may create 2569cabdff1aSopenharmony_ci * a reference to the packet data (or copy it if the packet is 2570cabdff1aSopenharmony_ci * not reference-counted). 2571cabdff1aSopenharmony_ci * Unlike with older APIs, the packet is always fully consumed, 2572cabdff1aSopenharmony_ci * and if it contains multiple frames (e.g. some audio codecs), 2573cabdff1aSopenharmony_ci * will require you to call avcodec_receive_frame() multiple 2574cabdff1aSopenharmony_ci * times afterwards before you can send a new packet. 2575cabdff1aSopenharmony_ci * It can be NULL (or an AVPacket with data set to NULL and 2576cabdff1aSopenharmony_ci * size set to 0); in this case, it is considered a flush 2577cabdff1aSopenharmony_ci * packet, which signals the end of the stream. Sending the 2578cabdff1aSopenharmony_ci * first flush packet will return success. Subsequent ones are 2579cabdff1aSopenharmony_ci * unnecessary and will return AVERROR_EOF. If the decoder 2580cabdff1aSopenharmony_ci * still has frames buffered, it will return them after sending 2581cabdff1aSopenharmony_ci * a flush packet. 2582cabdff1aSopenharmony_ci * 2583cabdff1aSopenharmony_ci * @return 0 on success, otherwise negative error code: 2584cabdff1aSopenharmony_ci * AVERROR(EAGAIN): input is not accepted in the current state - user 2585cabdff1aSopenharmony_ci * must read output with avcodec_receive_frame() (once 2586cabdff1aSopenharmony_ci * all output is read, the packet should be resent, and 2587cabdff1aSopenharmony_ci * the call will not fail with EAGAIN). 2588cabdff1aSopenharmony_ci * AVERROR_EOF: the decoder has been flushed, and no new packets can 2589cabdff1aSopenharmony_ci * be sent to it (also returned if more than 1 flush 2590cabdff1aSopenharmony_ci * packet is sent) 2591cabdff1aSopenharmony_ci * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush 2592cabdff1aSopenharmony_ci * AVERROR(ENOMEM): failed to add packet to internal queue, or similar 2593cabdff1aSopenharmony_ci * other errors: legitimate decoding errors 2594cabdff1aSopenharmony_ci */ 2595cabdff1aSopenharmony_ciint avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); 2596cabdff1aSopenharmony_ci 2597cabdff1aSopenharmony_ci/** 2598cabdff1aSopenharmony_ci * Return decoded output data from a decoder. 2599cabdff1aSopenharmony_ci * 2600cabdff1aSopenharmony_ci * @param avctx codec context 2601cabdff1aSopenharmony_ci * @param frame This will be set to a reference-counted video or audio 2602cabdff1aSopenharmony_ci * frame (depending on the decoder type) allocated by the 2603cabdff1aSopenharmony_ci * decoder. Note that the function will always call 2604cabdff1aSopenharmony_ci * av_frame_unref(frame) before doing anything else. 2605cabdff1aSopenharmony_ci * 2606cabdff1aSopenharmony_ci * @return 2607cabdff1aSopenharmony_ci * 0: success, a frame was returned 2608cabdff1aSopenharmony_ci * AVERROR(EAGAIN): output is not available in this state - user must try 2609cabdff1aSopenharmony_ci * to send new input 2610cabdff1aSopenharmony_ci * AVERROR_EOF: the decoder has been fully flushed, and there will be 2611cabdff1aSopenharmony_ci * no more output frames 2612cabdff1aSopenharmony_ci * AVERROR(EINVAL): codec not opened, or it is an encoder 2613cabdff1aSopenharmony_ci * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters 2614cabdff1aSopenharmony_ci * with respect to first decoded frame. Applicable 2615cabdff1aSopenharmony_ci * when flag AV_CODEC_FLAG_DROPCHANGED is set. 2616cabdff1aSopenharmony_ci * other negative values: legitimate decoding errors 2617cabdff1aSopenharmony_ci */ 2618cabdff1aSopenharmony_ciint avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); 2619cabdff1aSopenharmony_ci 2620cabdff1aSopenharmony_ci/** 2621cabdff1aSopenharmony_ci * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() 2622cabdff1aSopenharmony_ci * to retrieve buffered output packets. 2623cabdff1aSopenharmony_ci * 2624cabdff1aSopenharmony_ci * @param avctx codec context 2625cabdff1aSopenharmony_ci * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. 2626cabdff1aSopenharmony_ci * Ownership of the frame remains with the caller, and the 2627cabdff1aSopenharmony_ci * encoder will not write to the frame. The encoder may create 2628cabdff1aSopenharmony_ci * a reference to the frame data (or copy it if the frame is 2629cabdff1aSopenharmony_ci * not reference-counted). 2630cabdff1aSopenharmony_ci * It can be NULL, in which case it is considered a flush 2631cabdff1aSopenharmony_ci * packet. This signals the end of the stream. If the encoder 2632cabdff1aSopenharmony_ci * still has packets buffered, it will return them after this 2633cabdff1aSopenharmony_ci * call. Once flushing mode has been entered, additional flush 2634cabdff1aSopenharmony_ci * packets are ignored, and sending frames will return 2635cabdff1aSopenharmony_ci * AVERROR_EOF. 2636cabdff1aSopenharmony_ci * 2637cabdff1aSopenharmony_ci * For audio: 2638cabdff1aSopenharmony_ci * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame 2639cabdff1aSopenharmony_ci * can have any number of samples. 2640cabdff1aSopenharmony_ci * If it is not set, frame->nb_samples must be equal to 2641cabdff1aSopenharmony_ci * avctx->frame_size for all frames except the last. 2642cabdff1aSopenharmony_ci * The final frame may be smaller than avctx->frame_size. 2643cabdff1aSopenharmony_ci * @return 0 on success, otherwise negative error code: 2644cabdff1aSopenharmony_ci * AVERROR(EAGAIN): input is not accepted in the current state - user 2645cabdff1aSopenharmony_ci * must read output with avcodec_receive_packet() (once 2646cabdff1aSopenharmony_ci * all output is read, the packet should be resent, and 2647cabdff1aSopenharmony_ci * the call will not fail with EAGAIN). 2648cabdff1aSopenharmony_ci * AVERROR_EOF: the encoder has been flushed, and no new frames can 2649cabdff1aSopenharmony_ci * be sent to it 2650cabdff1aSopenharmony_ci * AVERROR(EINVAL): codec not opened, it is a decoder, or requires flush 2651cabdff1aSopenharmony_ci * AVERROR(ENOMEM): failed to add packet to internal queue, or similar 2652cabdff1aSopenharmony_ci * other errors: legitimate encoding errors 2653cabdff1aSopenharmony_ci */ 2654cabdff1aSopenharmony_ciint avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); 2655cabdff1aSopenharmony_ci 2656cabdff1aSopenharmony_ci/** 2657cabdff1aSopenharmony_ci * Read encoded data from the encoder. 2658cabdff1aSopenharmony_ci * 2659cabdff1aSopenharmony_ci * @param avctx codec context 2660cabdff1aSopenharmony_ci * @param avpkt This will be set to a reference-counted packet allocated by the 2661cabdff1aSopenharmony_ci * encoder. Note that the function will always call 2662cabdff1aSopenharmony_ci * av_packet_unref(avpkt) before doing anything else. 2663cabdff1aSopenharmony_ci * @return 0 on success, otherwise negative error code: 2664cabdff1aSopenharmony_ci * AVERROR(EAGAIN): output is not available in the current state - user 2665cabdff1aSopenharmony_ci * must try to send input 2666cabdff1aSopenharmony_ci * AVERROR_EOF: the encoder has been fully flushed, and there will be 2667cabdff1aSopenharmony_ci * no more output packets 2668cabdff1aSopenharmony_ci * AVERROR(EINVAL): codec not opened, or it is a decoder 2669cabdff1aSopenharmony_ci * other errors: legitimate encoding errors 2670cabdff1aSopenharmony_ci */ 2671cabdff1aSopenharmony_ciint avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); 2672cabdff1aSopenharmony_ci 2673cabdff1aSopenharmony_ci/** 2674cabdff1aSopenharmony_ci * Create and return a AVHWFramesContext with values adequate for hardware 2675cabdff1aSopenharmony_ci * decoding. This is meant to get called from the get_format callback, and is 2676cabdff1aSopenharmony_ci * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. 2677cabdff1aSopenharmony_ci * This API is for decoding with certain hardware acceleration modes/APIs only. 2678cabdff1aSopenharmony_ci * 2679cabdff1aSopenharmony_ci * The returned AVHWFramesContext is not initialized. The caller must do this 2680cabdff1aSopenharmony_ci * with av_hwframe_ctx_init(). 2681cabdff1aSopenharmony_ci * 2682cabdff1aSopenharmony_ci * Calling this function is not a requirement, but makes it simpler to avoid 2683cabdff1aSopenharmony_ci * codec or hardware API specific details when manually allocating frames. 2684cabdff1aSopenharmony_ci * 2685cabdff1aSopenharmony_ci * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, 2686cabdff1aSopenharmony_ci * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes 2687cabdff1aSopenharmony_ci * it unnecessary to call this function or having to care about 2688cabdff1aSopenharmony_ci * AVHWFramesContext initialization at all. 2689cabdff1aSopenharmony_ci * 2690cabdff1aSopenharmony_ci * There are a number of requirements for calling this function: 2691cabdff1aSopenharmony_ci * 2692cabdff1aSopenharmony_ci * - It must be called from get_format with the same avctx parameter that was 2693cabdff1aSopenharmony_ci * passed to get_format. Calling it outside of get_format is not allowed, and 2694cabdff1aSopenharmony_ci * can trigger undefined behavior. 2695cabdff1aSopenharmony_ci * - The function is not always supported (see description of return values). 2696cabdff1aSopenharmony_ci * Even if this function returns successfully, hwaccel initialization could 2697cabdff1aSopenharmony_ci * fail later. (The degree to which implementations check whether the stream 2698cabdff1aSopenharmony_ci * is actually supported varies. Some do this check only after the user's 2699cabdff1aSopenharmony_ci * get_format callback returns.) 2700cabdff1aSopenharmony_ci * - The hw_pix_fmt must be one of the choices suggested by get_format. If the 2701cabdff1aSopenharmony_ci * user decides to use a AVHWFramesContext prepared with this API function, 2702cabdff1aSopenharmony_ci * the user must return the same hw_pix_fmt from get_format. 2703cabdff1aSopenharmony_ci * - The device_ref passed to this function must support the given hw_pix_fmt. 2704cabdff1aSopenharmony_ci * - After calling this API function, it is the user's responsibility to 2705cabdff1aSopenharmony_ci * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), 2706cabdff1aSopenharmony_ci * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done 2707cabdff1aSopenharmony_ci * before returning from get_format (this is implied by the normal 2708cabdff1aSopenharmony_ci * AVCodecContext.hw_frames_ctx API rules). 2709cabdff1aSopenharmony_ci * - The AVHWFramesContext parameters may change every time time get_format is 2710cabdff1aSopenharmony_ci * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So 2711cabdff1aSopenharmony_ci * you are inherently required to go through this process again on every 2712cabdff1aSopenharmony_ci * get_format call. 2713cabdff1aSopenharmony_ci * - It is perfectly possible to call this function without actually using 2714cabdff1aSopenharmony_ci * the resulting AVHWFramesContext. One use-case might be trying to reuse a 2715cabdff1aSopenharmony_ci * previously initialized AVHWFramesContext, and calling this API function 2716cabdff1aSopenharmony_ci * only to test whether the required frame parameters have changed. 2717cabdff1aSopenharmony_ci * - Fields that use dynamically allocated values of any kind must not be set 2718cabdff1aSopenharmony_ci * by the user unless setting them is explicitly allowed by the documentation. 2719cabdff1aSopenharmony_ci * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, 2720cabdff1aSopenharmony_ci * the new free callback must call the potentially set previous free callback. 2721cabdff1aSopenharmony_ci * This API call may set any dynamically allocated fields, including the free 2722cabdff1aSopenharmony_ci * callback. 2723cabdff1aSopenharmony_ci * 2724cabdff1aSopenharmony_ci * The function will set at least the following fields on AVHWFramesContext 2725cabdff1aSopenharmony_ci * (potentially more, depending on hwaccel API): 2726cabdff1aSopenharmony_ci * 2727cabdff1aSopenharmony_ci * - All fields set by av_hwframe_ctx_alloc(). 2728cabdff1aSopenharmony_ci * - Set the format field to hw_pix_fmt. 2729cabdff1aSopenharmony_ci * - Set the sw_format field to the most suited and most versatile format. (An 2730cabdff1aSopenharmony_ci * implication is that this will prefer generic formats over opaque formats 2731cabdff1aSopenharmony_ci * with arbitrary restrictions, if possible.) 2732cabdff1aSopenharmony_ci * - Set the width/height fields to the coded frame size, rounded up to the 2733cabdff1aSopenharmony_ci * API-specific minimum alignment. 2734cabdff1aSopenharmony_ci * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size 2735cabdff1aSopenharmony_ci * field to the number of maximum reference surfaces possible with the codec, 2736cabdff1aSopenharmony_ci * plus 1 surface for the user to work (meaning the user can safely reference 2737cabdff1aSopenharmony_ci * at most 1 decoded surface at a time), plus additional buffering introduced 2738cabdff1aSopenharmony_ci * by frame threading. If the hwaccel does not require pre-allocation, the 2739cabdff1aSopenharmony_ci * field is left to 0, and the decoder will allocate new surfaces on demand 2740cabdff1aSopenharmony_ci * during decoding. 2741cabdff1aSopenharmony_ci * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying 2742cabdff1aSopenharmony_ci * hardware API. 2743cabdff1aSopenharmony_ci * 2744cabdff1aSopenharmony_ci * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but 2745cabdff1aSopenharmony_ci * with basic frame parameters set. 2746cabdff1aSopenharmony_ci * 2747cabdff1aSopenharmony_ci * The function is stateless, and does not change the AVCodecContext or the 2748cabdff1aSopenharmony_ci * device_ref AVHWDeviceContext. 2749cabdff1aSopenharmony_ci * 2750cabdff1aSopenharmony_ci * @param avctx The context which is currently calling get_format, and which 2751cabdff1aSopenharmony_ci * implicitly contains all state needed for filling the returned 2752cabdff1aSopenharmony_ci * AVHWFramesContext properly. 2753cabdff1aSopenharmony_ci * @param device_ref A reference to the AVHWDeviceContext describing the device 2754cabdff1aSopenharmony_ci * which will be used by the hardware decoder. 2755cabdff1aSopenharmony_ci * @param hw_pix_fmt The hwaccel format you are going to return from get_format. 2756cabdff1aSopenharmony_ci * @param out_frames_ref On success, set to a reference to an _uninitialized_ 2757cabdff1aSopenharmony_ci * AVHWFramesContext, created from the given device_ref. 2758cabdff1aSopenharmony_ci * Fields will be set to values required for decoding. 2759cabdff1aSopenharmony_ci * Not changed if an error is returned. 2760cabdff1aSopenharmony_ci * @return zero on success, a negative value on error. The following error codes 2761cabdff1aSopenharmony_ci * have special semantics: 2762cabdff1aSopenharmony_ci * AVERROR(ENOENT): the decoder does not support this functionality. Setup 2763cabdff1aSopenharmony_ci * is always manual, or it is a decoder which does not 2764cabdff1aSopenharmony_ci * support setting AVCodecContext.hw_frames_ctx at all, 2765cabdff1aSopenharmony_ci * or it is a software format. 2766cabdff1aSopenharmony_ci * AVERROR(EINVAL): it is known that hardware decoding is not supported for 2767cabdff1aSopenharmony_ci * this configuration, or the device_ref is not supported 2768cabdff1aSopenharmony_ci * for the hwaccel referenced by hw_pix_fmt. 2769cabdff1aSopenharmony_ci */ 2770cabdff1aSopenharmony_ciint avcodec_get_hw_frames_parameters(AVCodecContext *avctx, 2771cabdff1aSopenharmony_ci AVBufferRef *device_ref, 2772cabdff1aSopenharmony_ci enum AVPixelFormat hw_pix_fmt, 2773cabdff1aSopenharmony_ci AVBufferRef **out_frames_ref); 2774cabdff1aSopenharmony_ci 2775cabdff1aSopenharmony_ci 2776cabdff1aSopenharmony_ci 2777cabdff1aSopenharmony_ci/** 2778cabdff1aSopenharmony_ci * @defgroup lavc_parsing Frame parsing 2779cabdff1aSopenharmony_ci * @{ 2780cabdff1aSopenharmony_ci */ 2781cabdff1aSopenharmony_ci 2782cabdff1aSopenharmony_cienum AVPictureStructure { 2783cabdff1aSopenharmony_ci AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown 2784cabdff1aSopenharmony_ci AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field 2785cabdff1aSopenharmony_ci AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field 2786cabdff1aSopenharmony_ci AV_PICTURE_STRUCTURE_FRAME, //< coded as frame 2787cabdff1aSopenharmony_ci}; 2788cabdff1aSopenharmony_ci 2789cabdff1aSopenharmony_citypedef struct AVCodecParserContext { 2790cabdff1aSopenharmony_ci void *priv_data; 2791cabdff1aSopenharmony_ci const struct AVCodecParser *parser; 2792cabdff1aSopenharmony_ci int64_t frame_offset; /* offset of the current frame */ 2793cabdff1aSopenharmony_ci int64_t cur_offset; /* current offset 2794cabdff1aSopenharmony_ci (incremented by each av_parser_parse()) */ 2795cabdff1aSopenharmony_ci int64_t next_frame_offset; /* offset of the next frame */ 2796cabdff1aSopenharmony_ci /* video info */ 2797cabdff1aSopenharmony_ci int pict_type; /* XXX: Put it back in AVCodecContext. */ 2798cabdff1aSopenharmony_ci /** 2799cabdff1aSopenharmony_ci * This field is used for proper frame duration computation in lavf. 2800cabdff1aSopenharmony_ci * It signals, how much longer the frame duration of the current frame 2801cabdff1aSopenharmony_ci * is compared to normal frame duration. 2802cabdff1aSopenharmony_ci * 2803cabdff1aSopenharmony_ci * frame_duration = (1 + repeat_pict) * time_base 2804cabdff1aSopenharmony_ci * 2805cabdff1aSopenharmony_ci * It is used by codecs like H.264 to display telecined material. 2806cabdff1aSopenharmony_ci */ 2807cabdff1aSopenharmony_ci int repeat_pict; /* XXX: Put it back in AVCodecContext. */ 2808cabdff1aSopenharmony_ci int64_t pts; /* pts of the current frame */ 2809cabdff1aSopenharmony_ci int64_t dts; /* dts of the current frame */ 2810cabdff1aSopenharmony_ci 2811cabdff1aSopenharmony_ci /* private data */ 2812cabdff1aSopenharmony_ci int64_t last_pts; 2813cabdff1aSopenharmony_ci int64_t last_dts; 2814cabdff1aSopenharmony_ci int fetch_timestamp; 2815cabdff1aSopenharmony_ci 2816cabdff1aSopenharmony_ci#define AV_PARSER_PTS_NB 4 2817cabdff1aSopenharmony_ci int cur_frame_start_index; 2818cabdff1aSopenharmony_ci int64_t cur_frame_offset[AV_PARSER_PTS_NB]; 2819cabdff1aSopenharmony_ci int64_t cur_frame_pts[AV_PARSER_PTS_NB]; 2820cabdff1aSopenharmony_ci int64_t cur_frame_dts[AV_PARSER_PTS_NB]; 2821cabdff1aSopenharmony_ci 2822cabdff1aSopenharmony_ci int flags; 2823cabdff1aSopenharmony_ci#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 2824cabdff1aSopenharmony_ci#define PARSER_FLAG_ONCE 0x0002 2825cabdff1aSopenharmony_ci/// Set if the parser has a valid file offset 2826cabdff1aSopenharmony_ci#define PARSER_FLAG_FETCHED_OFFSET 0x0004 2827cabdff1aSopenharmony_ci#define PARSER_FLAG_USE_CODEC_TS 0x1000 2828cabdff1aSopenharmony_ci 2829cabdff1aSopenharmony_ci int64_t offset; ///< byte offset from starting packet start 2830cabdff1aSopenharmony_ci int64_t cur_frame_end[AV_PARSER_PTS_NB]; 2831cabdff1aSopenharmony_ci 2832cabdff1aSopenharmony_ci /** 2833cabdff1aSopenharmony_ci * Set by parser to 1 for key frames and 0 for non-key frames. 2834cabdff1aSopenharmony_ci * It is initialized to -1, so if the parser doesn't set this flag, 2835cabdff1aSopenharmony_ci * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames 2836cabdff1aSopenharmony_ci * will be used. 2837cabdff1aSopenharmony_ci */ 2838cabdff1aSopenharmony_ci int key_frame; 2839cabdff1aSopenharmony_ci 2840cabdff1aSopenharmony_ci // Timestamp generation support: 2841cabdff1aSopenharmony_ci /** 2842cabdff1aSopenharmony_ci * Synchronization point for start of timestamp generation. 2843cabdff1aSopenharmony_ci * 2844cabdff1aSopenharmony_ci * Set to >0 for sync point, 0 for no sync point and <0 for undefined 2845cabdff1aSopenharmony_ci * (default). 2846cabdff1aSopenharmony_ci * 2847cabdff1aSopenharmony_ci * For example, this corresponds to presence of H.264 buffering period 2848cabdff1aSopenharmony_ci * SEI message. 2849cabdff1aSopenharmony_ci */ 2850cabdff1aSopenharmony_ci int dts_sync_point; 2851cabdff1aSopenharmony_ci 2852cabdff1aSopenharmony_ci /** 2853cabdff1aSopenharmony_ci * Offset of the current timestamp against last timestamp sync point in 2854cabdff1aSopenharmony_ci * units of AVCodecContext.time_base. 2855cabdff1aSopenharmony_ci * 2856cabdff1aSopenharmony_ci * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 2857cabdff1aSopenharmony_ci * contain a valid timestamp offset. 2858cabdff1aSopenharmony_ci * 2859cabdff1aSopenharmony_ci * Note that the timestamp of sync point has usually a nonzero 2860cabdff1aSopenharmony_ci * dts_ref_dts_delta, which refers to the previous sync point. Offset of 2861cabdff1aSopenharmony_ci * the next frame after timestamp sync point will be usually 1. 2862cabdff1aSopenharmony_ci * 2863cabdff1aSopenharmony_ci * For example, this corresponds to H.264 cpb_removal_delay. 2864cabdff1aSopenharmony_ci */ 2865cabdff1aSopenharmony_ci int dts_ref_dts_delta; 2866cabdff1aSopenharmony_ci 2867cabdff1aSopenharmony_ci /** 2868cabdff1aSopenharmony_ci * Presentation delay of current frame in units of AVCodecContext.time_base. 2869cabdff1aSopenharmony_ci * 2870cabdff1aSopenharmony_ci * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 2871cabdff1aSopenharmony_ci * contain valid non-negative timestamp delta (presentation time of a frame 2872cabdff1aSopenharmony_ci * must not lie in the past). 2873cabdff1aSopenharmony_ci * 2874cabdff1aSopenharmony_ci * This delay represents the difference between decoding and presentation 2875cabdff1aSopenharmony_ci * time of the frame. 2876cabdff1aSopenharmony_ci * 2877cabdff1aSopenharmony_ci * For example, this corresponds to H.264 dpb_output_delay. 2878cabdff1aSopenharmony_ci */ 2879cabdff1aSopenharmony_ci int pts_dts_delta; 2880cabdff1aSopenharmony_ci 2881cabdff1aSopenharmony_ci /** 2882cabdff1aSopenharmony_ci * Position of the packet in file. 2883cabdff1aSopenharmony_ci * 2884cabdff1aSopenharmony_ci * Analogous to cur_frame_pts/dts 2885cabdff1aSopenharmony_ci */ 2886cabdff1aSopenharmony_ci int64_t cur_frame_pos[AV_PARSER_PTS_NB]; 2887cabdff1aSopenharmony_ci 2888cabdff1aSopenharmony_ci /** 2889cabdff1aSopenharmony_ci * Byte position of currently parsed frame in stream. 2890cabdff1aSopenharmony_ci */ 2891cabdff1aSopenharmony_ci int64_t pos; 2892cabdff1aSopenharmony_ci 2893cabdff1aSopenharmony_ci /** 2894cabdff1aSopenharmony_ci * Previous frame byte position. 2895cabdff1aSopenharmony_ci */ 2896cabdff1aSopenharmony_ci int64_t last_pos; 2897cabdff1aSopenharmony_ci 2898cabdff1aSopenharmony_ci /** 2899cabdff1aSopenharmony_ci * Duration of the current frame. 2900cabdff1aSopenharmony_ci * For audio, this is in units of 1 / AVCodecContext.sample_rate. 2901cabdff1aSopenharmony_ci * For all other types, this is in units of AVCodecContext.time_base. 2902cabdff1aSopenharmony_ci */ 2903cabdff1aSopenharmony_ci int duration; 2904cabdff1aSopenharmony_ci 2905cabdff1aSopenharmony_ci enum AVFieldOrder field_order; 2906cabdff1aSopenharmony_ci 2907cabdff1aSopenharmony_ci /** 2908cabdff1aSopenharmony_ci * Indicate whether a picture is coded as a frame, top field or bottom field. 2909cabdff1aSopenharmony_ci * 2910cabdff1aSopenharmony_ci * For example, H.264 field_pic_flag equal to 0 corresponds to 2911cabdff1aSopenharmony_ci * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag 2912cabdff1aSopenharmony_ci * equal to 1 and bottom_field_flag equal to 0 corresponds to 2913cabdff1aSopenharmony_ci * AV_PICTURE_STRUCTURE_TOP_FIELD. 2914cabdff1aSopenharmony_ci */ 2915cabdff1aSopenharmony_ci enum AVPictureStructure picture_structure; 2916cabdff1aSopenharmony_ci 2917cabdff1aSopenharmony_ci /** 2918cabdff1aSopenharmony_ci * Picture number incremented in presentation or output order. 2919cabdff1aSopenharmony_ci * This field may be reinitialized at the first picture of a new sequence. 2920cabdff1aSopenharmony_ci * 2921cabdff1aSopenharmony_ci * For example, this corresponds to H.264 PicOrderCnt. 2922cabdff1aSopenharmony_ci */ 2923cabdff1aSopenharmony_ci int output_picture_number; 2924cabdff1aSopenharmony_ci 2925cabdff1aSopenharmony_ci /** 2926cabdff1aSopenharmony_ci * Dimensions of the decoded video intended for presentation. 2927cabdff1aSopenharmony_ci */ 2928cabdff1aSopenharmony_ci int width; 2929cabdff1aSopenharmony_ci int height; 2930cabdff1aSopenharmony_ci 2931cabdff1aSopenharmony_ci /** 2932cabdff1aSopenharmony_ci * Dimensions of the coded video. 2933cabdff1aSopenharmony_ci */ 2934cabdff1aSopenharmony_ci int coded_width; 2935cabdff1aSopenharmony_ci int coded_height; 2936cabdff1aSopenharmony_ci 2937cabdff1aSopenharmony_ci /** 2938cabdff1aSopenharmony_ci * The format of the coded data, corresponds to enum AVPixelFormat for video 2939cabdff1aSopenharmony_ci * and for enum AVSampleFormat for audio. 2940cabdff1aSopenharmony_ci * 2941cabdff1aSopenharmony_ci * Note that a decoder can have considerable freedom in how exactly it 2942cabdff1aSopenharmony_ci * decodes the data, so the format reported here might be different from the 2943cabdff1aSopenharmony_ci * one returned by a decoder. 2944cabdff1aSopenharmony_ci */ 2945cabdff1aSopenharmony_ci int format; 2946cabdff1aSopenharmony_ci} AVCodecParserContext; 2947cabdff1aSopenharmony_ci 2948cabdff1aSopenharmony_citypedef struct AVCodecParser { 2949cabdff1aSopenharmony_ci int codec_ids[7]; /* several codec IDs are permitted */ 2950cabdff1aSopenharmony_ci int priv_data_size; 2951cabdff1aSopenharmony_ci int (*parser_init)(AVCodecParserContext *s); 2952cabdff1aSopenharmony_ci /* This callback never returns an error, a negative value means that 2953cabdff1aSopenharmony_ci * the frame start was in a previous packet. */ 2954cabdff1aSopenharmony_ci int (*parser_parse)(AVCodecParserContext *s, 2955cabdff1aSopenharmony_ci AVCodecContext *avctx, 2956cabdff1aSopenharmony_ci const uint8_t **poutbuf, int *poutbuf_size, 2957cabdff1aSopenharmony_ci const uint8_t *buf, int buf_size); 2958cabdff1aSopenharmony_ci void (*parser_close)(AVCodecParserContext *s); 2959cabdff1aSopenharmony_ci int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); 2960cabdff1aSopenharmony_ci} AVCodecParser; 2961cabdff1aSopenharmony_ci 2962cabdff1aSopenharmony_ci/** 2963cabdff1aSopenharmony_ci * Iterate over all registered codec parsers. 2964cabdff1aSopenharmony_ci * 2965cabdff1aSopenharmony_ci * @param opaque a pointer where libavcodec will store the iteration state. Must 2966cabdff1aSopenharmony_ci * point to NULL to start the iteration. 2967cabdff1aSopenharmony_ci * 2968cabdff1aSopenharmony_ci * @return the next registered codec parser or NULL when the iteration is 2969cabdff1aSopenharmony_ci * finished 2970cabdff1aSopenharmony_ci */ 2971cabdff1aSopenharmony_ciconst AVCodecParser *av_parser_iterate(void **opaque); 2972cabdff1aSopenharmony_ci 2973cabdff1aSopenharmony_ciAVCodecParserContext *av_parser_init(int codec_id); 2974cabdff1aSopenharmony_ci 2975cabdff1aSopenharmony_ci/** 2976cabdff1aSopenharmony_ci * Parse a packet. 2977cabdff1aSopenharmony_ci * 2978cabdff1aSopenharmony_ci * @param s parser context. 2979cabdff1aSopenharmony_ci * @param avctx codec context. 2980cabdff1aSopenharmony_ci * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. 2981cabdff1aSopenharmony_ci * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. 2982cabdff1aSopenharmony_ci * @param buf input buffer. 2983cabdff1aSopenharmony_ci * @param buf_size buffer size in bytes without the padding. I.e. the full buffer 2984cabdff1aSopenharmony_ci size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. 2985cabdff1aSopenharmony_ci To signal EOF, this should be 0 (so that the last frame 2986cabdff1aSopenharmony_ci can be output). 2987cabdff1aSopenharmony_ci * @param pts input presentation timestamp. 2988cabdff1aSopenharmony_ci * @param dts input decoding timestamp. 2989cabdff1aSopenharmony_ci * @param pos input byte position in stream. 2990cabdff1aSopenharmony_ci * @return the number of bytes of the input bitstream used. 2991cabdff1aSopenharmony_ci * 2992cabdff1aSopenharmony_ci * Example: 2993cabdff1aSopenharmony_ci * @code 2994cabdff1aSopenharmony_ci * while(in_len){ 2995cabdff1aSopenharmony_ci * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, 2996cabdff1aSopenharmony_ci * in_data, in_len, 2997cabdff1aSopenharmony_ci * pts, dts, pos); 2998cabdff1aSopenharmony_ci * in_data += len; 2999cabdff1aSopenharmony_ci * in_len -= len; 3000cabdff1aSopenharmony_ci * 3001cabdff1aSopenharmony_ci * if(size) 3002cabdff1aSopenharmony_ci * decode_frame(data, size); 3003cabdff1aSopenharmony_ci * } 3004cabdff1aSopenharmony_ci * @endcode 3005cabdff1aSopenharmony_ci */ 3006cabdff1aSopenharmony_ciint av_parser_parse2(AVCodecParserContext *s, 3007cabdff1aSopenharmony_ci AVCodecContext *avctx, 3008cabdff1aSopenharmony_ci uint8_t **poutbuf, int *poutbuf_size, 3009cabdff1aSopenharmony_ci const uint8_t *buf, int buf_size, 3010cabdff1aSopenharmony_ci int64_t pts, int64_t dts, 3011cabdff1aSopenharmony_ci int64_t pos); 3012cabdff1aSopenharmony_ci 3013cabdff1aSopenharmony_civoid av_parser_close(AVCodecParserContext *s); 3014cabdff1aSopenharmony_ci 3015cabdff1aSopenharmony_ci/** 3016cabdff1aSopenharmony_ci * @} 3017cabdff1aSopenharmony_ci * @} 3018cabdff1aSopenharmony_ci */ 3019cabdff1aSopenharmony_ci 3020cabdff1aSopenharmony_ci/** 3021cabdff1aSopenharmony_ci * @addtogroup lavc_encoding 3022cabdff1aSopenharmony_ci * @{ 3023cabdff1aSopenharmony_ci */ 3024cabdff1aSopenharmony_ci 3025cabdff1aSopenharmony_ciint avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, 3026cabdff1aSopenharmony_ci const AVSubtitle *sub); 3027cabdff1aSopenharmony_ci 3028cabdff1aSopenharmony_ci 3029cabdff1aSopenharmony_ci/** 3030cabdff1aSopenharmony_ci * @} 3031cabdff1aSopenharmony_ci */ 3032cabdff1aSopenharmony_ci 3033cabdff1aSopenharmony_ci/** 3034cabdff1aSopenharmony_ci * @defgroup lavc_misc Utility functions 3035cabdff1aSopenharmony_ci * @ingroup libavc 3036cabdff1aSopenharmony_ci * 3037cabdff1aSopenharmony_ci * Miscellaneous utility functions related to both encoding and decoding 3038cabdff1aSopenharmony_ci * (or neither). 3039cabdff1aSopenharmony_ci * @{ 3040cabdff1aSopenharmony_ci */ 3041cabdff1aSopenharmony_ci 3042cabdff1aSopenharmony_ci/** 3043cabdff1aSopenharmony_ci * @defgroup lavc_misc_pixfmt Pixel formats 3044cabdff1aSopenharmony_ci * 3045cabdff1aSopenharmony_ci * Functions for working with pixel formats. 3046cabdff1aSopenharmony_ci * @{ 3047cabdff1aSopenharmony_ci */ 3048cabdff1aSopenharmony_ci 3049cabdff1aSopenharmony_ci/** 3050cabdff1aSopenharmony_ci * Return a value representing the fourCC code associated to the 3051cabdff1aSopenharmony_ci * pixel format pix_fmt, or 0 if no associated fourCC code can be 3052cabdff1aSopenharmony_ci * found. 3053cabdff1aSopenharmony_ci */ 3054cabdff1aSopenharmony_ciunsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); 3055cabdff1aSopenharmony_ci 3056cabdff1aSopenharmony_ci/** 3057cabdff1aSopenharmony_ci * Find the best pixel format to convert to given a certain source pixel 3058cabdff1aSopenharmony_ci * format. When converting from one pixel format to another, information loss 3059cabdff1aSopenharmony_ci * may occur. For example, when converting from RGB24 to GRAY, the color 3060cabdff1aSopenharmony_ci * information will be lost. Similarly, other losses occur when converting from 3061cabdff1aSopenharmony_ci * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of 3062cabdff1aSopenharmony_ci * the given pixel formats should be used to suffer the least amount of loss. 3063cabdff1aSopenharmony_ci * The pixel formats from which it chooses one, are determined by the 3064cabdff1aSopenharmony_ci * pix_fmt_list parameter. 3065cabdff1aSopenharmony_ci * 3066cabdff1aSopenharmony_ci * 3067cabdff1aSopenharmony_ci * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from 3068cabdff1aSopenharmony_ci * @param[in] src_pix_fmt source pixel format 3069cabdff1aSopenharmony_ci * @param[in] has_alpha Whether the source pixel format alpha channel is used. 3070cabdff1aSopenharmony_ci * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. 3071cabdff1aSopenharmony_ci * @return The best pixel format to convert to or -1 if none was found. 3072cabdff1aSopenharmony_ci */ 3073cabdff1aSopenharmony_cienum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, 3074cabdff1aSopenharmony_ci enum AVPixelFormat src_pix_fmt, 3075cabdff1aSopenharmony_ci int has_alpha, int *loss_ptr); 3076cabdff1aSopenharmony_ci 3077cabdff1aSopenharmony_cienum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); 3078cabdff1aSopenharmony_ci 3079cabdff1aSopenharmony_ci/** 3080cabdff1aSopenharmony_ci * @} 3081cabdff1aSopenharmony_ci */ 3082cabdff1aSopenharmony_ci 3083cabdff1aSopenharmony_civoid avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); 3084cabdff1aSopenharmony_ci 3085cabdff1aSopenharmony_ciint avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); 3086cabdff1aSopenharmony_ciint avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); 3087cabdff1aSopenharmony_ci//FIXME func typedef 3088cabdff1aSopenharmony_ci 3089cabdff1aSopenharmony_ci/** 3090cabdff1aSopenharmony_ci * Fill AVFrame audio data and linesize pointers. 3091cabdff1aSopenharmony_ci * 3092cabdff1aSopenharmony_ci * The buffer buf must be a preallocated buffer with a size big enough 3093cabdff1aSopenharmony_ci * to contain the specified samples amount. The filled AVFrame data 3094cabdff1aSopenharmony_ci * pointers will point to this buffer. 3095cabdff1aSopenharmony_ci * 3096cabdff1aSopenharmony_ci * AVFrame extended_data channel pointers are allocated if necessary for 3097cabdff1aSopenharmony_ci * planar audio. 3098cabdff1aSopenharmony_ci * 3099cabdff1aSopenharmony_ci * @param frame the AVFrame 3100cabdff1aSopenharmony_ci * frame->nb_samples must be set prior to calling the 3101cabdff1aSopenharmony_ci * function. This function fills in frame->data, 3102cabdff1aSopenharmony_ci * frame->extended_data, frame->linesize[0]. 3103cabdff1aSopenharmony_ci * @param nb_channels channel count 3104cabdff1aSopenharmony_ci * @param sample_fmt sample format 3105cabdff1aSopenharmony_ci * @param buf buffer to use for frame data 3106cabdff1aSopenharmony_ci * @param buf_size size of buffer 3107cabdff1aSopenharmony_ci * @param align plane size sample alignment (0 = default) 3108cabdff1aSopenharmony_ci * @return >=0 on success, negative error code on failure 3109cabdff1aSopenharmony_ci * @todo return the size in bytes required to store the samples in 3110cabdff1aSopenharmony_ci * case of success, at the next libavutil bump 3111cabdff1aSopenharmony_ci */ 3112cabdff1aSopenharmony_ciint avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, 3113cabdff1aSopenharmony_ci enum AVSampleFormat sample_fmt, const uint8_t *buf, 3114cabdff1aSopenharmony_ci int buf_size, int align); 3115cabdff1aSopenharmony_ci 3116cabdff1aSopenharmony_ci/** 3117cabdff1aSopenharmony_ci * Reset the internal codec state / flush internal buffers. Should be called 3118cabdff1aSopenharmony_ci * e.g. when seeking or when switching to a different stream. 3119cabdff1aSopenharmony_ci * 3120cabdff1aSopenharmony_ci * @note for decoders, this function just releases any references the decoder 3121cabdff1aSopenharmony_ci * might keep internally, but the caller's references remain valid. 3122cabdff1aSopenharmony_ci * 3123cabdff1aSopenharmony_ci * @note for encoders, this function will only do something if the encoder 3124cabdff1aSopenharmony_ci * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder 3125cabdff1aSopenharmony_ci * will drain any remaining packets, and can then be re-used for a different 3126cabdff1aSopenharmony_ci * stream (as opposed to sending a null frame which will leave the encoder 3127cabdff1aSopenharmony_ci * in a permanent EOF state after draining). This can be desirable if the 3128cabdff1aSopenharmony_ci * cost of tearing down and replacing the encoder instance is high. 3129cabdff1aSopenharmony_ci */ 3130cabdff1aSopenharmony_civoid avcodec_flush_buffers(AVCodecContext *avctx); 3131cabdff1aSopenharmony_ci 3132cabdff1aSopenharmony_ci/** 3133cabdff1aSopenharmony_ci * Return audio frame duration. 3134cabdff1aSopenharmony_ci * 3135cabdff1aSopenharmony_ci * @param avctx codec context 3136cabdff1aSopenharmony_ci * @param frame_bytes size of the frame, or 0 if unknown 3137cabdff1aSopenharmony_ci * @return frame duration, in samples, if known. 0 if not able to 3138cabdff1aSopenharmony_ci * determine. 3139cabdff1aSopenharmony_ci */ 3140cabdff1aSopenharmony_ciint av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); 3141cabdff1aSopenharmony_ci 3142cabdff1aSopenharmony_ci/* memory */ 3143cabdff1aSopenharmony_ci 3144cabdff1aSopenharmony_ci/** 3145cabdff1aSopenharmony_ci * Same behaviour av_fast_malloc but the buffer has additional 3146cabdff1aSopenharmony_ci * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. 3147cabdff1aSopenharmony_ci * 3148cabdff1aSopenharmony_ci * In addition the whole buffer will initially and after resizes 3149cabdff1aSopenharmony_ci * be 0-initialized so that no uninitialized data will ever appear. 3150cabdff1aSopenharmony_ci */ 3151cabdff1aSopenharmony_civoid av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); 3152cabdff1aSopenharmony_ci 3153cabdff1aSopenharmony_ci/** 3154cabdff1aSopenharmony_ci * Same behaviour av_fast_padded_malloc except that buffer will always 3155cabdff1aSopenharmony_ci * be 0-initialized after call. 3156cabdff1aSopenharmony_ci */ 3157cabdff1aSopenharmony_civoid av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); 3158cabdff1aSopenharmony_ci 3159cabdff1aSopenharmony_ci/** 3160cabdff1aSopenharmony_ci * @return a positive value if s is open (i.e. avcodec_open2() was called on it 3161cabdff1aSopenharmony_ci * with no corresponding avcodec_close()), 0 otherwise. 3162cabdff1aSopenharmony_ci */ 3163cabdff1aSopenharmony_ciint avcodec_is_open(AVCodecContext *s); 3164cabdff1aSopenharmony_ci 3165cabdff1aSopenharmony_ci/** 3166cabdff1aSopenharmony_ci * @} 3167cabdff1aSopenharmony_ci */ 3168cabdff1aSopenharmony_ci 3169cabdff1aSopenharmony_ci#endif /* AVCODEC_AVCODEC_H */ 3170