1 | /* |
2 | * copyright (c) 2001 Fabrice Bellard |
3 | * |
4 | * This file is part of FFmpeg. |
5 | * |
6 | * FFmpeg is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. |
10 | * |
11 | * FFmpeg is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Lesser General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with FFmpeg; if not, write to the Free Software |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | */ |
20 | |
21 | #ifndef AVCODEC_AVCODEC_H |
22 | #define AVCODEC_AVCODEC_H |
23 | |
24 | /** |
25 | * @file |
26 | * @ingroup libavc |
27 | * Libavcodec external API header |
28 | */ |
29 | |
30 | #include <errno.h> |
31 | #include "libavutil/samplefmt.h" |
32 | #include "libavutil/attributes.h" |
33 | #include "libavutil/avutil.h" |
34 | #include "libavutil/buffer.h" |
35 | #include "libavutil/cpu.h" |
36 | #include "libavutil/channel_layout.h" |
37 | #include "libavutil/dict.h" |
38 | #include "libavutil/frame.h" |
39 | #include "libavutil/hwcontext.h" |
40 | #include "libavutil/log.h" |
41 | #include "libavutil/pixfmt.h" |
42 | #include "libavutil/rational.h" |
43 | |
44 | #include "bsf.h" |
45 | #include "codec.h" |
46 | #include "codec_desc.h" |
47 | #include "codec_par.h" |
48 | #include "codec_id.h" |
49 | #include "packet.h" |
50 | #include "version.h" |
51 | |
52 | /** |
53 | * @defgroup libavc libavcodec |
54 | * Encoding/Decoding Library |
55 | * |
56 | * @{ |
57 | * |
58 | * @defgroup lavc_decoding Decoding |
59 | * @{ |
60 | * @} |
61 | * |
62 | * @defgroup lavc_encoding Encoding |
63 | * @{ |
64 | * @} |
65 | * |
66 | * @defgroup lavc_codec Codecs |
67 | * @{ |
68 | * @defgroup lavc_codec_native Native Codecs |
69 | * @{ |
70 | * @} |
71 | * @defgroup lavc_codec_wrappers External library wrappers |
72 | * @{ |
73 | * @} |
74 | * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge |
75 | * @{ |
76 | * @} |
77 | * @} |
78 | * @defgroup lavc_internal Internal |
79 | * @{ |
80 | * @} |
81 | * @} |
82 | */ |
83 | |
84 | /** |
85 | * @ingroup libavc |
86 | * @defgroup lavc_encdec send/receive encoding and decoding API overview |
87 | * @{ |
88 | * |
89 | * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ |
90 | * avcodec_receive_packet() functions provide an encode/decode API, which |
91 | * decouples input and output. |
92 | * |
93 | * The API is very similar for encoding/decoding and audio/video, and works as |
94 | * follows: |
95 | * - Set up and open the AVCodecContext as usual. |
96 | * - Send valid input: |
97 | * - For decoding, call avcodec_send_packet() to give the decoder raw |
98 | * compressed data in an AVPacket. |
99 | * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame |
100 | * containing uncompressed audio or video. |
101 | * |
102 | * In both cases, it is recommended that AVPackets and AVFrames are |
103 | * refcounted, or libavcodec might have to copy the input data. (libavformat |
104 | * always returns refcounted AVPackets, and av_frame_get_buffer() allocates |
105 | * refcounted AVFrames.) |
106 | * - Receive output in a loop. Periodically call one of the avcodec_receive_*() |
107 | * functions and process their output: |
108 | * - For decoding, call avcodec_receive_frame(). On success, it will return |
109 | * an AVFrame containing uncompressed audio or video data. |
110 | * - For encoding, call avcodec_receive_packet(). On success, it will return |
111 | * an AVPacket with a compressed frame. |
112 | * |
113 | * Repeat this call until it returns AVERROR(EAGAIN) or an error. The |
114 | * AVERROR(EAGAIN) return value means that new input data is required to |
115 | * return new output. In this case, continue with sending input. For each |
116 | * input frame/packet, the codec will typically return 1 output frame/packet, |
117 | * but it can also be 0 or more than 1. |
118 | * |
119 | * At the beginning of decoding or encoding, the codec might accept multiple |
120 | * input frames/packets without returning a frame, until its internal buffers |
121 | * are filled. This situation is handled transparently if you follow the steps |
122 | * outlined above. |
123 | * |
124 | * In theory, sending input can result in EAGAIN - this should happen only if |
125 | * not all output was received. You can use this to structure alternative decode |
126 | * or encode loops other than the one suggested above. For example, you could |
127 | * try sending new input on each iteration, and try to receive output if that |
128 | * returns EAGAIN. |
129 | * |
130 | * End of stream situations. These require "flushing" (aka draining) the codec, |
131 | * as the codec might buffer multiple frames or packets internally for |
132 | * performance or out of necessity (consider B-frames). |
133 | * This is handled as follows: |
134 | * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) |
135 | * or avcodec_send_frame() (encoding) functions. This will enter draining |
136 | * mode. |
137 | * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() |
138 | * (encoding) in a loop until AVERROR_EOF is returned. The functions will |
139 | * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. |
140 | * - Before decoding can be resumed again, the codec has to be reset with |
141 | * avcodec_flush_buffers(). |
142 | * |
143 | * Using the API as outlined above is highly recommended. But it is also |
144 | * possible to call functions outside of this rigid schema. For example, you can |
145 | * call avcodec_send_packet() repeatedly without calling |
146 | * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed |
147 | * until the codec's internal buffer has been filled up (which is typically of |
148 | * size 1 per output frame, after initial input), and then reject input with |
149 | * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to |
150 | * read at least some output. |
151 | * |
152 | * Not all codecs will follow a rigid and predictable dataflow; the only |
153 | * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on |
154 | * one end implies that a receive/send call on the other end will succeed, or |
155 | * at least will not fail with AVERROR(EAGAIN). In general, no codec will |
156 | * permit unlimited buffering of input or output. |
157 | * |
158 | * This API replaces the following legacy functions: |
159 | * - avcodec_decode_video2() and avcodec_decode_audio4(): |
160 | * Use avcodec_send_packet() to feed input to the decoder, then use |
161 | * avcodec_receive_frame() to receive decoded frames after each packet. |
162 | * Unlike with the old video decoding API, multiple frames might result from |
163 | * a packet. For audio, splitting the input packet into frames by partially |
164 | * decoding packets becomes transparent to the API user. You never need to |
165 | * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then |
166 | * no data was read from the packet). |
167 | * Additionally, sending a flush/draining packet is required only once. |
168 | * - avcodec_encode_video2()/avcodec_encode_audio2(): |
169 | * Use avcodec_send_frame() to feed input to the encoder, then use |
170 | * avcodec_receive_packet() to receive encoded packets. |
171 | * Providing user-allocated buffers for avcodec_receive_packet() is not |
172 | * possible. |
173 | * - The new API does not handle subtitles yet. |
174 | * |
175 | * Mixing new and old function calls on the same AVCodecContext is not allowed, |
176 | * and will result in undefined behavior. |
177 | * |
178 | * Some codecs might require using the new API; using the old API will return |
179 | * an error when calling it. All codecs support the new API. |
180 | * |
181 | * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This |
182 | * would be an invalid state, which could put the codec user into an endless |
183 | * loop. The API has no concept of time either: it cannot happen that trying to |
184 | * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second |
185 | * later accepts the packet (with no other receive/flush API calls involved). |
186 | * The API is a strict state machine, and the passage of time is not supposed |
187 | * to influence it. Some timing-dependent behavior might still be deemed |
188 | * acceptable in certain cases. But it must never result in both send/receive |
189 | * returning EAGAIN at the same time at any point. It must also absolutely be |
190 | * avoided that the current state is "unstable" and can "flip-flop" between |
191 | * the send/receive APIs allowing progress. For example, it's not allowed that |
192 | * the codec randomly decides that it actually wants to consume a packet now |
193 | * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an |
194 | * avcodec_send_packet() call. |
195 | * @} |
196 | */ |
197 | |
198 | /** |
199 | * @defgroup lavc_core Core functions/structures. |
200 | * @ingroup libavc |
201 | * |
202 | * Basic definitions, functions for querying libavcodec capabilities, |
203 | * allocating core structures, etc. |
204 | * @{ |
205 | */ |
206 | |
207 | /** |
208 | * @ingroup lavc_decoding |
209 | * Required number of additionally allocated bytes at the end of the input bitstream for decoding. |
210 | * This is mainly needed because some optimized bitstream readers read |
211 | * 32 or 64 bit at once and could read over the end.<br> |
212 | * Note: If the first 23 bits of the additional bytes are not 0, then damaged |
213 | * MPEG bitstreams could cause overread and segfault. |
214 | */ |
215 | #define AV_INPUT_BUFFER_PADDING_SIZE 64 |
216 | |
217 | /** |
218 | * @ingroup lavc_encoding |
219 | * minimum encoding buffer size |
220 | * Used to avoid some checks during header writing. |
221 | */ |
222 | #define AV_INPUT_BUFFER_MIN_SIZE 16384 |
223 | |
224 | /** |
225 | * @ingroup lavc_decoding |
226 | */ |
227 | enum AVDiscard{ |
228 | /* We leave some space between them for extensions (drop some |
229 | * keyframes for intra-only or drop just some bidir frames). */ |
230 | AVDISCARD_NONE =-16, ///< discard nothing |
231 | AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi |
232 | AVDISCARD_NONREF = 8, ///< discard all non reference |
233 | AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames |
234 | AVDISCARD_NONINTRA= 24, ///< discard all non intra frames |
235 | AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes |
236 | AVDISCARD_ALL = 48, ///< discard all |
237 | }; |
238 | |
239 | enum AVAudioServiceType { |
240 | AV_AUDIO_SERVICE_TYPE_MAIN = 0, |
241 | AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, |
242 | AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, |
243 | AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, |
244 | AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, |
245 | = 5, |
246 | AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, |
247 | AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, |
248 | AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, |
249 | AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI |
250 | }; |
251 | |
252 | /** |
253 | * @ingroup lavc_encoding |
254 | */ |
255 | typedef struct RcOverride{ |
256 | int start_frame; |
257 | int end_frame; |
258 | int qscale; // If this is 0 then quality_factor will be used instead. |
259 | float quality_factor; |
260 | } RcOverride; |
261 | |
262 | /* encoding support |
263 | These flags can be passed in AVCodecContext.flags before initialization. |
264 | Note: Not everything is supported yet. |
265 | */ |
266 | |
267 | /** |
268 | * Allow decoders to produce frames with data planes that are not aligned |
269 | * to CPU requirements (e.g. due to cropping). |
270 | */ |
271 | #define AV_CODEC_FLAG_UNALIGNED (1 << 0) |
272 | /** |
273 | * Use fixed qscale. |
274 | */ |
275 | #define AV_CODEC_FLAG_QSCALE (1 << 1) |
276 | /** |
277 | * 4 MV per MB allowed / advanced prediction for H.263. |
278 | */ |
279 | #define AV_CODEC_FLAG_4MV (1 << 2) |
280 | /** |
281 | * Output even those frames that might be corrupted. |
282 | */ |
283 | #define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) |
284 | /** |
285 | * Use qpel MC. |
286 | */ |
287 | #define AV_CODEC_FLAG_QPEL (1 << 4) |
288 | /** |
289 | * Don't output frames whose parameters differ from first |
290 | * decoded frame in stream. |
291 | */ |
292 | #define AV_CODEC_FLAG_DROPCHANGED (1 << 5) |
293 | /** |
294 | * Use internal 2pass ratecontrol in first pass mode. |
295 | */ |
296 | #define AV_CODEC_FLAG_PASS1 (1 << 9) |
297 | /** |
298 | * Use internal 2pass ratecontrol in second pass mode. |
299 | */ |
300 | #define AV_CODEC_FLAG_PASS2 (1 << 10) |
301 | /** |
302 | * loop filter. |
303 | */ |
304 | #define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) |
305 | /** |
306 | * Only decode/encode grayscale. |
307 | */ |
308 | #define AV_CODEC_FLAG_GRAY (1 << 13) |
309 | /** |
310 | * error[?] variables will be set during encoding. |
311 | */ |
312 | #define AV_CODEC_FLAG_PSNR (1 << 15) |
313 | /** |
314 | * Input bitstream might be truncated at a random location |
315 | * instead of only at frame boundaries. |
316 | */ |
317 | #define AV_CODEC_FLAG_TRUNCATED (1 << 16) |
318 | /** |
319 | * Use interlaced DCT. |
320 | */ |
321 | #define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) |
322 | /** |
323 | * Force low delay. |
324 | */ |
325 | #define AV_CODEC_FLAG_LOW_DELAY (1 << 19) |
326 | /** |
327 | * Place global headers in extradata instead of every keyframe. |
328 | */ |
329 | #define (1 << 22) |
330 | /** |
331 | * Use only bitexact stuff (except (I)DCT). |
332 | */ |
333 | #define AV_CODEC_FLAG_BITEXACT (1 << 23) |
334 | /* Fx : Flag for H.263+ extra options */ |
335 | /** |
336 | * H.263 advanced intra coding / MPEG-4 AC prediction |
337 | */ |
338 | #define AV_CODEC_FLAG_AC_PRED (1 << 24) |
339 | /** |
340 | * interlaced motion estimation |
341 | */ |
342 | #define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) |
343 | #define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) |
344 | |
345 | /** |
346 | * Allow non spec compliant speedup tricks. |
347 | */ |
348 | #define AV_CODEC_FLAG2_FAST (1 << 0) |
349 | /** |
350 | * Skip bitstream encoding. |
351 | */ |
352 | #define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) |
353 | /** |
354 | * Place global headers at every keyframe instead of in extradata. |
355 | */ |
356 | #define (1 << 3) |
357 | |
358 | /** |
359 | * timecode is in drop frame format. DEPRECATED!!!! |
360 | */ |
361 | #define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) |
362 | |
363 | /** |
364 | * Input bitstream might be truncated at a packet boundaries |
365 | * instead of only at frame boundaries. |
366 | */ |
367 | #define AV_CODEC_FLAG2_CHUNKS (1 << 15) |
368 | /** |
369 | * Discard cropping information from SPS. |
370 | */ |
371 | #define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) |
372 | |
373 | /** |
374 | * Show all frames before the first keyframe |
375 | */ |
376 | #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) |
377 | /** |
378 | * Export motion vectors through frame side data |
379 | */ |
380 | #define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) |
381 | /** |
382 | * Do not skip samples and export skip information as frame side data |
383 | */ |
384 | #define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) |
385 | /** |
386 | * Do not reset ASS ReadOrder field on flush (subtitles decoding) |
387 | */ |
388 | #define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) |
389 | |
390 | /* Unsupported options : |
391 | * Syntax Arithmetic coding (SAC) |
392 | * Reference Picture Selection |
393 | * Independent Segment Decoding */ |
394 | /* /Fx */ |
395 | /* codec capabilities */ |
396 | |
397 | /* Exported side data. |
398 | These flags can be passed in AVCodecContext.export_side_data before initialization. |
399 | */ |
400 | /** |
401 | * Export motion vectors through frame side data |
402 | */ |
403 | #define AV_CODEC_EXPORT_DATA_MVS (1 << 0) |
404 | /** |
405 | * Export encoder Producer Reference Time through packet side data |
406 | */ |
407 | #define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) |
408 | /** |
409 | * Decoding only. |
410 | * Export the AVVideoEncParams structure through frame side data. |
411 | */ |
412 | #define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) |
413 | /** |
414 | * Decoding only. |
415 | * Do not apply film grain, export it instead. |
416 | */ |
417 | #define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) |
418 | |
419 | /** |
420 | * Pan Scan area. |
421 | * This specifies the area which should be displayed. |
422 | * Note there may be multiple such areas for one frame. |
423 | */ |
424 | typedef struct AVPanScan { |
425 | /** |
426 | * id |
427 | * - encoding: Set by user. |
428 | * - decoding: Set by libavcodec. |
429 | */ |
430 | int id; |
431 | |
432 | /** |
433 | * width and height in 1/16 pel |
434 | * - encoding: Set by user. |
435 | * - decoding: Set by libavcodec. |
436 | */ |
437 | int width; |
438 | int height; |
439 | |
440 | /** |
441 | * position of the top left corner in 1/16 pel for up to 3 fields/frames |
442 | * - encoding: Set by user. |
443 | * - decoding: Set by libavcodec. |
444 | */ |
445 | int16_t position[3][2]; |
446 | } AVPanScan; |
447 | |
448 | /** |
449 | * This structure describes the bitrate properties of an encoded bitstream. It |
450 | * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD |
451 | * parameters for H.264/HEVC. |
452 | */ |
453 | typedef struct AVCPBProperties { |
454 | /** |
455 | * Maximum bitrate of the stream, in bits per second. |
456 | * Zero if unknown or unspecified. |
457 | */ |
458 | #if FF_API_UNSANITIZED_BITRATES |
459 | int max_bitrate; |
460 | #else |
461 | int64_t max_bitrate; |
462 | #endif |
463 | /** |
464 | * Minimum bitrate of the stream, in bits per second. |
465 | * Zero if unknown or unspecified. |
466 | */ |
467 | #if FF_API_UNSANITIZED_BITRATES |
468 | int min_bitrate; |
469 | #else |
470 | int64_t min_bitrate; |
471 | #endif |
472 | /** |
473 | * Average bitrate of the stream, in bits per second. |
474 | * Zero if unknown or unspecified. |
475 | */ |
476 | #if FF_API_UNSANITIZED_BITRATES |
477 | int avg_bitrate; |
478 | #else |
479 | int64_t avg_bitrate; |
480 | #endif |
481 | |
482 | /** |
483 | * The size of the buffer to which the ratecontrol is applied, in bits. |
484 | * Zero if unknown or unspecified. |
485 | */ |
486 | int buffer_size; |
487 | |
488 | /** |
489 | * The delay between the time the packet this structure is associated with |
490 | * is received and the time when it should be decoded, in periods of a 27MHz |
491 | * clock. |
492 | * |
493 | * UINT64_MAX when unknown or unspecified. |
494 | */ |
495 | uint64_t vbv_delay; |
496 | } AVCPBProperties; |
497 | |
498 | /** |
499 | * This structure supplies correlation between a packet timestamp and a wall clock |
500 | * production time. The definition follows the Producer Reference Time ('prft') |
501 | * as defined in ISO/IEC 14496-12 |
502 | */ |
503 | typedef struct AVProducerReferenceTime { |
504 | /** |
505 | * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). |
506 | */ |
507 | int64_t wallclock; |
508 | int flags; |
509 | } AVProducerReferenceTime; |
510 | |
511 | /** |
512 | * The decoder will keep a reference to the frame and may reuse it later. |
513 | */ |
514 | #define AV_GET_BUFFER_FLAG_REF (1 << 0) |
515 | |
516 | /** |
517 | * The encoder will keep a reference to the packet and may reuse it later. |
518 | */ |
519 | #define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) |
520 | |
521 | struct AVCodecInternal; |
522 | |
523 | /** |
524 | * main external API structure. |
525 | * New fields can be added to the end with minor version bumps. |
526 | * Removal, reordering and changes to existing fields require a major |
527 | * version bump. |
528 | * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user |
529 | * applications. |
530 | * The name string for AVOptions options matches the associated command line |
531 | * parameter name and can be found in libavcodec/options_table.h |
532 | * The AVOption/command line parameter names differ in some cases from the C |
533 | * structure field names for historic reasons or brevity. |
534 | * sizeof(AVCodecContext) must not be used outside libav*. |
535 | */ |
536 | typedef struct AVCodecContext { |
537 | /** |
538 | * information on struct for av_log |
539 | * - set by avcodec_alloc_context3 |
540 | */ |
541 | const AVClass *av_class; |
542 | int log_level_offset; |
543 | |
544 | enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ |
545 | const struct AVCodec *codec; |
546 | enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ |
547 | |
548 | /** |
549 | * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). |
550 | * This is used to work around some encoder bugs. |
551 | * A demuxer should set this to what is stored in the field used to identify the codec. |
552 | * If there are multiple such fields in a container then the demuxer should choose the one |
553 | * which maximizes the information about the used codec. |
554 | * If the codec tag field in a container is larger than 32 bits then the demuxer should |
555 | * remap the longer ID to 32 bits with a table or other structure. Alternatively a new |
556 | * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated |
557 | * first. |
558 | * - encoding: Set by user, if not then the default based on codec_id will be used. |
559 | * - decoding: Set by user, will be converted to uppercase by libavcodec during init. |
560 | */ |
561 | unsigned int codec_tag; |
562 | |
563 | void *priv_data; |
564 | |
565 | /** |
566 | * Private context used for internal data. |
567 | * |
568 | * Unlike priv_data, this is not codec-specific. It is used in general |
569 | * libavcodec functions. |
570 | */ |
571 | struct AVCodecInternal *internal; |
572 | |
573 | /** |
574 | * Private data of the user, can be used to carry app specific stuff. |
575 | * - encoding: Set by user. |
576 | * - decoding: Set by user. |
577 | */ |
578 | void *opaque; |
579 | |
580 | /** |
581 | * the average bitrate |
582 | * - encoding: Set by user; unused for constant quantizer encoding. |
583 | * - decoding: Set by user, may be overwritten by libavcodec |
584 | * if this info is available in the stream |
585 | */ |
586 | int64_t bit_rate; |
587 | |
588 | /** |
589 | * number of bits the bitstream is allowed to diverge from the reference. |
590 | * the reference can be CBR (for CBR pass1) or VBR (for pass2) |
591 | * - encoding: Set by user; unused for constant quantizer encoding. |
592 | * - decoding: unused |
593 | */ |
594 | int bit_rate_tolerance; |
595 | |
596 | /** |
597 | * Global quality for codecs which cannot change it per frame. |
598 | * This should be proportional to MPEG-1/2/4 qscale. |
599 | * - encoding: Set by user. |
600 | * - decoding: unused |
601 | */ |
602 | int global_quality; |
603 | |
604 | /** |
605 | * - encoding: Set by user. |
606 | * - decoding: unused |
607 | */ |
608 | int compression_level; |
609 | #define FF_COMPRESSION_DEFAULT -1 |
610 | |
611 | /** |
612 | * AV_CODEC_FLAG_*. |
613 | * - encoding: Set by user. |
614 | * - decoding: Set by user. |
615 | */ |
616 | int flags; |
617 | |
618 | /** |
619 | * AV_CODEC_FLAG2_* |
620 | * - encoding: Set by user. |
621 | * - decoding: Set by user. |
622 | */ |
623 | int flags2; |
624 | |
625 | /** |
626 | * some codecs need / can use extradata like Huffman tables. |
627 | * MJPEG: Huffman tables |
628 | * rv10: additional flags |
629 | * MPEG-4: global headers (they can be in the bitstream or here) |
630 | * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger |
631 | * than extradata_size to avoid problems if it is read with the bitstream reader. |
632 | * The bytewise contents of extradata must not depend on the architecture or CPU endianness. |
633 | * Must be allocated with the av_malloc() family of functions. |
634 | * - encoding: Set/allocated/freed by libavcodec. |
635 | * - decoding: Set/allocated/freed by user. |
636 | */ |
637 | uint8_t *; |
638 | int ; |
639 | |
640 | /** |
641 | * This is the fundamental unit of time (in seconds) in terms |
642 | * of which frame timestamps are represented. For fixed-fps content, |
643 | * timebase should be 1/framerate and timestamp increments should be |
644 | * identically 1. |
645 | * This often, but not always is the inverse of the frame rate or field rate |
646 | * for video. 1/time_base is not the average frame rate if the frame rate is not |
647 | * constant. |
648 | * |
649 | * Like containers, elementary streams also can store timestamps, 1/time_base |
650 | * is the unit in which these timestamps are specified. |
651 | * As example of such codec time base see ISO/IEC 14496-2:2001(E) |
652 | * vop_time_increment_resolution and fixed_vop_rate |
653 | * (fixed_vop_rate == 0 implies that it is different from the framerate) |
654 | * |
655 | * - encoding: MUST be set by user. |
656 | * - decoding: the use of this field for decoding is deprecated. |
657 | * Use framerate instead. |
658 | */ |
659 | AVRational time_base; |
660 | |
661 | /** |
662 | * For some codecs, the time base is closer to the field rate than the frame rate. |
663 | * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration |
664 | * if no telecine is used ... |
665 | * |
666 | * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. |
667 | */ |
668 | int ticks_per_frame; |
669 | |
670 | /** |
671 | * Codec delay. |
672 | * |
673 | * Encoding: Number of frames delay there will be from the encoder input to |
674 | * the decoder output. (we assume the decoder matches the spec) |
675 | * Decoding: Number of frames delay in addition to what a standard decoder |
676 | * as specified in the spec would produce. |
677 | * |
678 | * Video: |
679 | * Number of frames the decoded output will be delayed relative to the |
680 | * encoded input. |
681 | * |
682 | * Audio: |
683 | * For encoding, this field is unused (see initial_padding). |
684 | * |
685 | * For decoding, this is the number of samples the decoder needs to |
686 | * output before the decoder's output is valid. When seeking, you should |
687 | * start decoding this many samples prior to your desired seek point. |
688 | * |
689 | * - encoding: Set by libavcodec. |
690 | * - decoding: Set by libavcodec. |
691 | */ |
692 | int delay; |
693 | |
694 | |
695 | /* video only */ |
696 | /** |
697 | * picture width / height. |
698 | * |
699 | * @note Those fields may not match the values of the last |
700 | * AVFrame output by avcodec_decode_video2 due frame |
701 | * reordering. |
702 | * |
703 | * - encoding: MUST be set by user. |
704 | * - decoding: May be set by the user before opening the decoder if known e.g. |
705 | * from the container. Some decoders will require the dimensions |
706 | * to be set by the caller. During decoding, the decoder may |
707 | * overwrite those values as required while parsing the data. |
708 | */ |
709 | int width, height; |
710 | |
711 | /** |
712 | * Bitstream width / height, may be different from width/height e.g. when |
713 | * the decoded frame is cropped before being output or lowres is enabled. |
714 | * |
715 | * @note Those field may not match the value of the last |
716 | * AVFrame output by avcodec_receive_frame() due frame |
717 | * reordering. |
718 | * |
719 | * - encoding: unused |
720 | * - decoding: May be set by the user before opening the decoder if known |
721 | * e.g. from the container. During decoding, the decoder may |
722 | * overwrite those values as required while parsing the data. |
723 | */ |
724 | int coded_width, coded_height; |
725 | |
726 | /** |
727 | * the number of pictures in a group of pictures, or 0 for intra_only |
728 | * - encoding: Set by user. |
729 | * - decoding: unused |
730 | */ |
731 | int gop_size; |
732 | |
733 | /** |
734 | * Pixel format, see AV_PIX_FMT_xxx. |
735 | * May be set by the demuxer if known from headers. |
736 | * May be overridden by the decoder if it knows better. |
737 | * |
738 | * @note This field may not match the value of the last |
739 | * AVFrame output by avcodec_receive_frame() due frame |
740 | * reordering. |
741 | * |
742 | * - encoding: Set by user. |
743 | * - decoding: Set by user if known, overridden by libavcodec while |
744 | * parsing the data. |
745 | */ |
746 | enum AVPixelFormat pix_fmt; |
747 | |
748 | /** |
749 | * If non NULL, 'draw_horiz_band' is called by the libavcodec |
750 | * decoder to draw a horizontal band. It improves cache usage. Not |
751 | * all codecs can do that. You must check the codec capabilities |
752 | * beforehand. |
753 | * When multithreading is used, it may be called from multiple threads |
754 | * at the same time; threads might draw different parts of the same AVFrame, |
755 | * or multiple AVFrames, and there is no guarantee that slices will be drawn |
756 | * in order. |
757 | * The function is also used by hardware acceleration APIs. |
758 | * It is called at least once during frame decoding to pass |
759 | * the data needed for hardware render. |
760 | * In that mode instead of pixel data, AVFrame points to |
761 | * a structure specific to the acceleration API. The application |
762 | * reads the structure and can change some fields to indicate progress |
763 | * or mark state. |
764 | * - encoding: unused |
765 | * - decoding: Set by user. |
766 | * @param height the height of the slice |
767 | * @param y the y position of the slice |
768 | * @param type 1->top field, 2->bottom field, 3->frame |
769 | * @param offset offset into the AVFrame.data from which the slice should be read |
770 | */ |
771 | void (*draw_horiz_band)(struct AVCodecContext *s, |
772 | const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], |
773 | int y, int type, int height); |
774 | |
775 | /** |
776 | * callback to negotiate the pixelFormat |
777 | * @param fmt is the list of formats which are supported by the codec, |
778 | * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. |
779 | * The first is always the native one. |
780 | * @note The callback may be called again immediately if initialization for |
781 | * the selected (hardware-accelerated) pixel format failed. |
782 | * @warning Behavior is undefined if the callback returns a value not |
783 | * in the fmt list of formats. |
784 | * @return the chosen format |
785 | * - encoding: unused |
786 | * - decoding: Set by user, if not set the native format will be chosen. |
787 | */ |
788 | enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); |
789 | |
790 | /** |
791 | * maximum number of B-frames between non-B-frames |
792 | * Note: The output will be delayed by max_b_frames+1 relative to the input. |
793 | * - encoding: Set by user. |
794 | * - decoding: unused |
795 | */ |
796 | int max_b_frames; |
797 | |
798 | /** |
799 | * qscale factor between IP and B-frames |
800 | * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). |
801 | * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). |
802 | * - encoding: Set by user. |
803 | * - decoding: unused |
804 | */ |
805 | float b_quant_factor; |
806 | |
807 | #if FF_API_PRIVATE_OPT |
808 | /** @deprecated use encoder private options instead */ |
809 | attribute_deprecated |
810 | int b_frame_strategy; |
811 | #endif |
812 | |
813 | /** |
814 | * qscale offset between IP and B-frames |
815 | * - encoding: Set by user. |
816 | * - decoding: unused |
817 | */ |
818 | float b_quant_offset; |
819 | |
820 | /** |
821 | * Size of the frame reordering buffer in the decoder. |
822 | * For MPEG-2 it is 1 IPB or 0 low delay IP. |
823 | * - encoding: Set by libavcodec. |
824 | * - decoding: Set by libavcodec. |
825 | */ |
826 | int has_b_frames; |
827 | |
828 | #if FF_API_PRIVATE_OPT |
829 | /** @deprecated use encoder private options instead */ |
830 | attribute_deprecated |
831 | int mpeg_quant; |
832 | #endif |
833 | |
834 | /** |
835 | * qscale factor between P- and I-frames |
836 | * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). |
837 | * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). |
838 | * - encoding: Set by user. |
839 | * - decoding: unused |
840 | */ |
841 | float i_quant_factor; |
842 | |
843 | /** |
844 | * qscale offset between P and I-frames |
845 | * - encoding: Set by user. |
846 | * - decoding: unused |
847 | */ |
848 | float i_quant_offset; |
849 | |
850 | /** |
851 | * luminance masking (0-> disabled) |
852 | * - encoding: Set by user. |
853 | * - decoding: unused |
854 | */ |
855 | float lumi_masking; |
856 | |
857 | /** |
858 | * temporary complexity masking (0-> disabled) |
859 | * - encoding: Set by user. |
860 | * - decoding: unused |
861 | */ |
862 | float temporal_cplx_masking; |
863 | |
864 | /** |
865 | * spatial complexity masking (0-> disabled) |
866 | * - encoding: Set by user. |
867 | * - decoding: unused |
868 | */ |
869 | float spatial_cplx_masking; |
870 | |
871 | /** |
872 | * p block masking (0-> disabled) |
873 | * - encoding: Set by user. |
874 | * - decoding: unused |
875 | */ |
876 | float p_masking; |
877 | |
878 | /** |
879 | * darkness masking (0-> disabled) |
880 | * - encoding: Set by user. |
881 | * - decoding: unused |
882 | */ |
883 | float dark_masking; |
884 | |
885 | /** |
886 | * slice count |
887 | * - encoding: Set by libavcodec. |
888 | * - decoding: Set by user (or 0). |
889 | */ |
890 | int slice_count; |
891 | |
892 | #if FF_API_PRIVATE_OPT |
893 | /** @deprecated use encoder private options instead */ |
894 | attribute_deprecated |
895 | int prediction_method; |
896 | #define FF_PRED_LEFT 0 |
897 | #define FF_PRED_PLANE 1 |
898 | #define FF_PRED_MEDIAN 2 |
899 | #endif |
900 | |
901 | /** |
902 | * slice offsets in the frame in bytes |
903 | * - encoding: Set/allocated by libavcodec. |
904 | * - decoding: Set/allocated by user (or NULL). |
905 | */ |
906 | int *slice_offset; |
907 | |
908 | /** |
909 | * sample aspect ratio (0 if unknown) |
910 | * That is the width of a pixel divided by the height of the pixel. |
911 | * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. |
912 | * - encoding: Set by user. |
913 | * - decoding: Set by libavcodec. |
914 | */ |
915 | AVRational sample_aspect_ratio; |
916 | |
917 | /** |
918 | * motion estimation comparison function |
919 | * - encoding: Set by user. |
920 | * - decoding: unused |
921 | */ |
922 | int me_cmp; |
923 | /** |
924 | * subpixel motion estimation comparison function |
925 | * - encoding: Set by user. |
926 | * - decoding: unused |
927 | */ |
928 | int me_sub_cmp; |
929 | /** |
930 | * macroblock comparison function (not supported yet) |
931 | * - encoding: Set by user. |
932 | * - decoding: unused |
933 | */ |
934 | int mb_cmp; |
935 | /** |
936 | * interlaced DCT comparison function |
937 | * - encoding: Set by user. |
938 | * - decoding: unused |
939 | */ |
940 | int ildct_cmp; |
941 | #define FF_CMP_SAD 0 |
942 | #define FF_CMP_SSE 1 |
943 | #define FF_CMP_SATD 2 |
944 | #define FF_CMP_DCT 3 |
945 | #define FF_CMP_PSNR 4 |
946 | #define FF_CMP_BIT 5 |
947 | #define FF_CMP_RD 6 |
948 | #define FF_CMP_ZERO 7 |
949 | #define FF_CMP_VSAD 8 |
950 | #define FF_CMP_VSSE 9 |
951 | #define FF_CMP_NSSE 10 |
952 | #define FF_CMP_W53 11 |
953 | #define FF_CMP_W97 12 |
954 | #define FF_CMP_DCTMAX 13 |
955 | #define FF_CMP_DCT264 14 |
956 | #define FF_CMP_MEDIAN_SAD 15 |
957 | #define FF_CMP_CHROMA 256 |
958 | |
959 | /** |
960 | * ME diamond size & shape |
961 | * - encoding: Set by user. |
962 | * - decoding: unused |
963 | */ |
964 | int dia_size; |
965 | |
966 | /** |
967 | * amount of previous MV predictors (2a+1 x 2a+1 square) |
968 | * - encoding: Set by user. |
969 | * - decoding: unused |
970 | */ |
971 | int last_predictor_count; |
972 | |
973 | #if FF_API_PRIVATE_OPT |
974 | /** @deprecated use encoder private options instead */ |
975 | attribute_deprecated |
976 | int pre_me; |
977 | #endif |
978 | |
979 | /** |
980 | * motion estimation prepass comparison function |
981 | * - encoding: Set by user. |
982 | * - decoding: unused |
983 | */ |
984 | int me_pre_cmp; |
985 | |
986 | /** |
987 | * ME prepass diamond size & shape |
988 | * - encoding: Set by user. |
989 | * - decoding: unused |
990 | */ |
991 | int pre_dia_size; |
992 | |
993 | /** |
994 | * subpel ME quality |
995 | * - encoding: Set by user. |
996 | * - decoding: unused |
997 | */ |
998 | int me_subpel_quality; |
999 | |
1000 | /** |
1001 | * maximum motion estimation search range in subpel units |
1002 | * If 0 then no limit. |
1003 | * |
1004 | * - encoding: Set by user. |
1005 | * - decoding: unused |
1006 | */ |
1007 | int me_range; |
1008 | |
1009 | /** |
1010 | * slice flags |
1011 | * - encoding: unused |
1012 | * - decoding: Set by user. |
1013 | */ |
1014 | int slice_flags; |
1015 | #define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display |
1016 | #define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) |
1017 | #define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) |
1018 | |
1019 | /** |
1020 | * macroblock decision mode |
1021 | * - encoding: Set by user. |
1022 | * - decoding: unused |
1023 | */ |
1024 | int mb_decision; |
1025 | #define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp |
1026 | #define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits |
1027 | #define FF_MB_DECISION_RD 2 ///< rate distortion |
1028 | |
1029 | /** |
1030 | * custom intra quantization matrix |
1031 | * Must be allocated with the av_malloc() family of functions, and will be freed in |
1032 | * avcodec_free_context(). |
1033 | * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. |
1034 | * - decoding: Set/allocated/freed by libavcodec. |
1035 | */ |
1036 | uint16_t *intra_matrix; |
1037 | |
1038 | /** |
1039 | * custom inter quantization matrix |
1040 | * Must be allocated with the av_malloc() family of functions, and will be freed in |
1041 | * avcodec_free_context(). |
1042 | * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. |
1043 | * - decoding: Set/allocated/freed by libavcodec. |
1044 | */ |
1045 | uint16_t *inter_matrix; |
1046 | |
1047 | #if FF_API_PRIVATE_OPT |
1048 | /** @deprecated use encoder private options instead */ |
1049 | attribute_deprecated |
1050 | int scenechange_threshold; |
1051 | |
1052 | /** @deprecated use encoder private options instead */ |
1053 | attribute_deprecated |
1054 | int noise_reduction; |
1055 | #endif |
1056 | |
1057 | /** |
1058 | * precision of the intra DC coefficient - 8 |
1059 | * - encoding: Set by user. |
1060 | * - decoding: Set by libavcodec |
1061 | */ |
1062 | int intra_dc_precision; |
1063 | |
1064 | /** |
1065 | * Number of macroblock rows at the top which are skipped. |
1066 | * - encoding: unused |
1067 | * - decoding: Set by user. |
1068 | */ |
1069 | int skip_top; |
1070 | |
1071 | /** |
1072 | * Number of macroblock rows at the bottom which are skipped. |
1073 | * - encoding: unused |
1074 | * - decoding: Set by user. |
1075 | */ |
1076 | int skip_bottom; |
1077 | |
1078 | /** |
1079 | * minimum MB Lagrange multiplier |
1080 | * - encoding: Set by user. |
1081 | * - decoding: unused |
1082 | */ |
1083 | int mb_lmin; |
1084 | |
1085 | /** |
1086 | * maximum MB Lagrange multiplier |
1087 | * - encoding: Set by user. |
1088 | * - decoding: unused |
1089 | */ |
1090 | int mb_lmax; |
1091 | |
1092 | #if FF_API_PRIVATE_OPT |
1093 | /** |
1094 | * @deprecated use encoder private options instead |
1095 | */ |
1096 | attribute_deprecated |
1097 | int me_penalty_compensation; |
1098 | #endif |
1099 | |
1100 | /** |
1101 | * - encoding: Set by user. |
1102 | * - decoding: unused |
1103 | */ |
1104 | int bidir_refine; |
1105 | |
1106 | #if FF_API_PRIVATE_OPT |
1107 | /** @deprecated use encoder private options instead */ |
1108 | attribute_deprecated |
1109 | int brd_scale; |
1110 | #endif |
1111 | |
1112 | /** |
1113 | * minimum GOP size |
1114 | * - encoding: Set by user. |
1115 | * - decoding: unused |
1116 | */ |
1117 | int keyint_min; |
1118 | |
1119 | /** |
1120 | * number of reference frames |
1121 | * - encoding: Set by user. |
1122 | * - decoding: Set by lavc. |
1123 | */ |
1124 | int refs; |
1125 | |
1126 | #if FF_API_PRIVATE_OPT |
1127 | /** @deprecated use encoder private options instead */ |
1128 | attribute_deprecated |
1129 | int chromaoffset; |
1130 | #endif |
1131 | |
1132 | /** |
1133 | * Note: Value depends upon the compare function used for fullpel ME. |
1134 | * - encoding: Set by user. |
1135 | * - decoding: unused |
1136 | */ |
1137 | int mv0_threshold; |
1138 | |
1139 | #if FF_API_PRIVATE_OPT |
1140 | /** @deprecated use encoder private options instead */ |
1141 | attribute_deprecated |
1142 | int b_sensitivity; |
1143 | #endif |
1144 | |
1145 | /** |
1146 | * Chromaticity coordinates of the source primaries. |
1147 | * - encoding: Set by user |
1148 | * - decoding: Set by libavcodec |
1149 | */ |
1150 | enum AVColorPrimaries color_primaries; |
1151 | |
1152 | /** |
1153 | * Color Transfer Characteristic. |
1154 | * - encoding: Set by user |
1155 | * - decoding: Set by libavcodec |
1156 | */ |
1157 | enum AVColorTransferCharacteristic color_trc; |
1158 | |
1159 | /** |
1160 | * YUV colorspace type. |
1161 | * - encoding: Set by user |
1162 | * - decoding: Set by libavcodec |
1163 | */ |
1164 | enum AVColorSpace colorspace; |
1165 | |
1166 | /** |
1167 | * MPEG vs JPEG YUV range. |
1168 | * - encoding: Set by user |
1169 | * - decoding: Set by libavcodec |
1170 | */ |
1171 | enum AVColorRange color_range; |
1172 | |
1173 | /** |
1174 | * This defines the location of chroma samples. |
1175 | * - encoding: Set by user |
1176 | * - decoding: Set by libavcodec |
1177 | */ |
1178 | enum AVChromaLocation chroma_sample_location; |
1179 | |
1180 | /** |
1181 | * Number of slices. |
1182 | * Indicates number of picture subdivisions. Used for parallelized |
1183 | * decoding. |
1184 | * - encoding: Set by user |
1185 | * - decoding: unused |
1186 | */ |
1187 | int slices; |
1188 | |
1189 | /** Field order |
1190 | * - encoding: set by libavcodec |
1191 | * - decoding: Set by user. |
1192 | */ |
1193 | enum AVFieldOrder field_order; |
1194 | |
1195 | /* audio only */ |
1196 | int sample_rate; ///< samples per second |
1197 | int channels; ///< number of audio channels |
1198 | |
1199 | /** |
1200 | * audio sample format |
1201 | * - encoding: Set by user. |
1202 | * - decoding: Set by libavcodec. |
1203 | */ |
1204 | enum AVSampleFormat sample_fmt; ///< sample format |
1205 | |
1206 | /* The following data should not be initialized. */ |
1207 | /** |
1208 | * Number of samples per channel in an audio frame. |
1209 | * |
1210 | * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame |
1211 | * except the last must contain exactly frame_size samples per channel. |
1212 | * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the |
1213 | * frame size is not restricted. |
1214 | * - decoding: may be set by some decoders to indicate constant frame size |
1215 | */ |
1216 | int frame_size; |
1217 | |
1218 | /** |
1219 | * Frame counter, set by libavcodec. |
1220 | * |
1221 | * - decoding: total number of frames returned from the decoder so far. |
1222 | * - encoding: total number of frames passed to the encoder so far. |
1223 | * |
1224 | * @note the counter is not incremented if encoding/decoding resulted in |
1225 | * an error. |
1226 | */ |
1227 | int frame_number; |
1228 | |
1229 | /** |
1230 | * number of bytes per packet if constant and known or 0 |
1231 | * Used by some WAV based audio codecs. |
1232 | */ |
1233 | int block_align; |
1234 | |
1235 | /** |
1236 | * Audio cutoff bandwidth (0 means "automatic") |
1237 | * - encoding: Set by user. |
1238 | * - decoding: unused |
1239 | */ |
1240 | int cutoff; |
1241 | |
1242 | /** |
1243 | * Audio channel layout. |
1244 | * - encoding: set by user. |
1245 | * - decoding: set by user, may be overwritten by libavcodec. |
1246 | */ |
1247 | uint64_t channel_layout; |
1248 | |
1249 | /** |
1250 | * Request decoder to use this channel layout if it can (0 for default) |
1251 | * - encoding: unused |
1252 | * - decoding: Set by user. |
1253 | */ |
1254 | uint64_t request_channel_layout; |
1255 | |
1256 | /** |
1257 | * Type of service that the audio stream conveys. |
1258 | * - encoding: Set by user. |
1259 | * - decoding: Set by libavcodec. |
1260 | */ |
1261 | enum AVAudioServiceType audio_service_type; |
1262 | |
1263 | /** |
1264 | * desired sample format |
1265 | * - encoding: Not used. |
1266 | * - decoding: Set by user. |
1267 | * Decoder will decode to this format if it can. |
1268 | */ |
1269 | enum AVSampleFormat request_sample_fmt; |
1270 | |
1271 | /** |
1272 | * This callback is called at the beginning of each frame to get data |
1273 | * buffer(s) for it. There may be one contiguous buffer for all the data or |
1274 | * there may be a buffer per each data plane or anything in between. What |
1275 | * this means is, you may set however many entries in buf[] you feel necessary. |
1276 | * Each buffer must be reference-counted using the AVBuffer API (see description |
1277 | * of buf[] below). |
1278 | * |
1279 | * The following fields will be set in the frame before this callback is |
1280 | * called: |
1281 | * - format |
1282 | * - width, height (video only) |
1283 | * - sample_rate, channel_layout, nb_samples (audio only) |
1284 | * Their values may differ from the corresponding values in |
1285 | * AVCodecContext. This callback must use the frame values, not the codec |
1286 | * context values, to calculate the required buffer size. |
1287 | * |
1288 | * This callback must fill the following fields in the frame: |
1289 | * - data[] |
1290 | * - linesize[] |
1291 | * - extended_data: |
1292 | * * if the data is planar audio with more than 8 channels, then this |
1293 | * callback must allocate and fill extended_data to contain all pointers |
1294 | * to all data planes. data[] must hold as many pointers as it can. |
1295 | * extended_data must be allocated with av_malloc() and will be freed in |
1296 | * av_frame_unref(). |
1297 | * * otherwise extended_data must point to data |
1298 | * - buf[] must contain one or more pointers to AVBufferRef structures. Each of |
1299 | * the frame's data and extended_data pointers must be contained in these. That |
1300 | * is, one AVBufferRef for each allocated chunk of memory, not necessarily one |
1301 | * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), |
1302 | * and av_buffer_ref(). |
1303 | * - extended_buf and nb_extended_buf must be allocated with av_malloc() by |
1304 | * this callback and filled with the extra buffers if there are more |
1305 | * buffers than buf[] can hold. extended_buf will be freed in |
1306 | * av_frame_unref(). |
1307 | * |
1308 | * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call |
1309 | * avcodec_default_get_buffer2() instead of providing buffers allocated by |
1310 | * some other means. |
1311 | * |
1312 | * Each data plane must be aligned to the maximum required by the target |
1313 | * CPU. |
1314 | * |
1315 | * @see avcodec_default_get_buffer2() |
1316 | * |
1317 | * Video: |
1318 | * |
1319 | * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused |
1320 | * (read and/or written to if it is writable) later by libavcodec. |
1321 | * |
1322 | * avcodec_align_dimensions2() should be used to find the required width and |
1323 | * height, as they normally need to be rounded up to the next multiple of 16. |
1324 | * |
1325 | * Some decoders do not support linesizes changing between frames. |
1326 | * |
1327 | * If frame multithreading is used, this callback may be called from a |
1328 | * different thread, but not from more than one at once. Does not need to be |
1329 | * reentrant. |
1330 | * |
1331 | * @see avcodec_align_dimensions2() |
1332 | * |
1333 | * Audio: |
1334 | * |
1335 | * Decoders request a buffer of a particular size by setting |
1336 | * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, |
1337 | * however, utilize only part of the buffer by setting AVFrame.nb_samples |
1338 | * to a smaller value in the output frame. |
1339 | * |
1340 | * As a convenience, av_samples_get_buffer_size() and |
1341 | * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() |
1342 | * functions to find the required data size and to fill data pointers and |
1343 | * linesize. In AVFrame.linesize, only linesize[0] may be set for audio |
1344 | * since all planes must be the same size. |
1345 | * |
1346 | * @see av_samples_get_buffer_size(), av_samples_fill_arrays() |
1347 | * |
1348 | * - encoding: unused |
1349 | * - decoding: Set by libavcodec, user can override. |
1350 | */ |
1351 | int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); |
1352 | |
1353 | #if FF_API_OLD_ENCDEC |
1354 | /** |
1355 | * If non-zero, the decoded audio and video frames returned from |
1356 | * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted |
1357 | * and are valid indefinitely. The caller must free them with |
1358 | * av_frame_unref() when they are not needed anymore. |
1359 | * Otherwise, the decoded frames must not be freed by the caller and are |
1360 | * only valid until the next decode call. |
1361 | * |
1362 | * This is always automatically enabled if avcodec_receive_frame() is used. |
1363 | * |
1364 | * - encoding: unused |
1365 | * - decoding: set by the caller before avcodec_open2(). |
1366 | */ |
1367 | attribute_deprecated |
1368 | int refcounted_frames; |
1369 | #endif |
1370 | |
1371 | /* - encoding parameters */ |
1372 | float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) |
1373 | float qblur; ///< amount of qscale smoothing over time (0.0-1.0) |
1374 | |
1375 | /** |
1376 | * minimum quantizer |
1377 | * - encoding: Set by user. |
1378 | * - decoding: unused |
1379 | */ |
1380 | int qmin; |
1381 | |
1382 | /** |
1383 | * maximum quantizer |
1384 | * - encoding: Set by user. |
1385 | * - decoding: unused |
1386 | */ |
1387 | int qmax; |
1388 | |
1389 | /** |
1390 | * maximum quantizer difference between frames |
1391 | * - encoding: Set by user. |
1392 | * - decoding: unused |
1393 | */ |
1394 | int max_qdiff; |
1395 | |
1396 | /** |
1397 | * decoder bitstream buffer size |
1398 | * - encoding: Set by user. |
1399 | * - decoding: unused |
1400 | */ |
1401 | int rc_buffer_size; |
1402 | |
1403 | /** |
1404 | * ratecontrol override, see RcOverride |
1405 | * - encoding: Allocated/set/freed by user. |
1406 | * - decoding: unused |
1407 | */ |
1408 | int rc_override_count; |
1409 | RcOverride *rc_override; |
1410 | |
1411 | /** |
1412 | * maximum bitrate |
1413 | * - encoding: Set by user. |
1414 | * - decoding: Set by user, may be overwritten by libavcodec. |
1415 | */ |
1416 | int64_t rc_max_rate; |
1417 | |
1418 | /** |
1419 | * minimum bitrate |
1420 | * - encoding: Set by user. |
1421 | * - decoding: unused |
1422 | */ |
1423 | int64_t rc_min_rate; |
1424 | |
1425 | /** |
1426 | * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. |
1427 | * - encoding: Set by user. |
1428 | * - decoding: unused. |
1429 | */ |
1430 | float rc_max_available_vbv_use; |
1431 | |
1432 | /** |
1433 | * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. |
1434 | * - encoding: Set by user. |
1435 | * - decoding: unused. |
1436 | */ |
1437 | float rc_min_vbv_overflow_use; |
1438 | |
1439 | /** |
1440 | * Number of bits which should be loaded into the rc buffer before decoding starts. |
1441 | * - encoding: Set by user. |
1442 | * - decoding: unused |
1443 | */ |
1444 | int rc_initial_buffer_occupancy; |
1445 | |
1446 | #if FF_API_CODER_TYPE |
1447 | #define FF_CODER_TYPE_VLC 0 |
1448 | #define FF_CODER_TYPE_AC 1 |
1449 | #define FF_CODER_TYPE_RAW 2 |
1450 | #define FF_CODER_TYPE_RLE 3 |
1451 | /** |
1452 | * @deprecated use encoder private options instead |
1453 | */ |
1454 | attribute_deprecated |
1455 | int coder_type; |
1456 | #endif /* FF_API_CODER_TYPE */ |
1457 | |
1458 | #if FF_API_PRIVATE_OPT |
1459 | /** @deprecated use encoder private options instead */ |
1460 | attribute_deprecated |
1461 | int context_model; |
1462 | #endif |
1463 | |
1464 | #if FF_API_PRIVATE_OPT |
1465 | /** @deprecated use encoder private options instead */ |
1466 | attribute_deprecated |
1467 | int frame_skip_threshold; |
1468 | |
1469 | /** @deprecated use encoder private options instead */ |
1470 | attribute_deprecated |
1471 | int frame_skip_factor; |
1472 | |
1473 | /** @deprecated use encoder private options instead */ |
1474 | attribute_deprecated |
1475 | int frame_skip_exp; |
1476 | |
1477 | /** @deprecated use encoder private options instead */ |
1478 | attribute_deprecated |
1479 | int frame_skip_cmp; |
1480 | #endif /* FF_API_PRIVATE_OPT */ |
1481 | |
1482 | /** |
1483 | * trellis RD quantization |
1484 | * - encoding: Set by user. |
1485 | * - decoding: unused |
1486 | */ |
1487 | int trellis; |
1488 | |
1489 | #if FF_API_PRIVATE_OPT |
1490 | /** @deprecated use encoder private options instead */ |
1491 | attribute_deprecated |
1492 | int min_prediction_order; |
1493 | |
1494 | /** @deprecated use encoder private options instead */ |
1495 | attribute_deprecated |
1496 | int max_prediction_order; |
1497 | |
1498 | /** @deprecated use encoder private options instead */ |
1499 | attribute_deprecated |
1500 | int64_t timecode_frame_start; |
1501 | #endif |
1502 | |
1503 | #if FF_API_RTP_CALLBACK |
1504 | /** |
1505 | * @deprecated unused |
1506 | */ |
1507 | /* The RTP callback: This function is called */ |
1508 | /* every time the encoder has a packet to send. */ |
1509 | /* It depends on the encoder if the data starts */ |
1510 | /* with a Start Code (it should). H.263 does. */ |
1511 | /* mb_nb contains the number of macroblocks */ |
1512 | /* encoded in the RTP payload. */ |
1513 | attribute_deprecated |
1514 | void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); |
1515 | #endif |
1516 | |
1517 | #if FF_API_PRIVATE_OPT |
1518 | /** @deprecated use encoder private options instead */ |
1519 | attribute_deprecated |
1520 | int rtp_payload_size; /* The size of the RTP payload: the coder will */ |
1521 | /* do its best to deliver a chunk with size */ |
1522 | /* below rtp_payload_size, the chunk will start */ |
1523 | /* with a start code on some codecs like H.263. */ |
1524 | /* This doesn't take account of any particular */ |
1525 | /* headers inside the transmitted RTP payload. */ |
1526 | #endif |
1527 | |
1528 | #if FF_API_STAT_BITS |
1529 | /* statistics, used for 2-pass encoding */ |
1530 | attribute_deprecated |
1531 | int mv_bits; |
1532 | attribute_deprecated |
1533 | int ; |
1534 | attribute_deprecated |
1535 | int i_tex_bits; |
1536 | attribute_deprecated |
1537 | int p_tex_bits; |
1538 | attribute_deprecated |
1539 | int i_count; |
1540 | attribute_deprecated |
1541 | int p_count; |
1542 | attribute_deprecated |
1543 | int skip_count; |
1544 | attribute_deprecated |
1545 | int misc_bits; |
1546 | |
1547 | /** @deprecated this field is unused */ |
1548 | attribute_deprecated |
1549 | int frame_bits; |
1550 | #endif |
1551 | |
1552 | /** |
1553 | * pass1 encoding statistics output buffer |
1554 | * - encoding: Set by libavcodec. |
1555 | * - decoding: unused |
1556 | */ |
1557 | char *stats_out; |
1558 | |
1559 | /** |
1560 | * pass2 encoding statistics input buffer |
1561 | * Concatenated stuff from stats_out of pass1 should be placed here. |
1562 | * - encoding: Allocated/set/freed by user. |
1563 | * - decoding: unused |
1564 | */ |
1565 | char *stats_in; |
1566 | |
1567 | /** |
1568 | * Work around bugs in encoders which sometimes cannot be detected automatically. |
1569 | * - encoding: Set by user |
1570 | * - decoding: Set by user |
1571 | */ |
1572 | int workaround_bugs; |
1573 | #define FF_BUG_AUTODETECT 1 ///< autodetection |
1574 | #define FF_BUG_XVID_ILACE 4 |
1575 | #define FF_BUG_UMP4 8 |
1576 | #define FF_BUG_NO_PADDING 16 |
1577 | #define FF_BUG_AMV 32 |
1578 | #define FF_BUG_QPEL_CHROMA 64 |
1579 | #define FF_BUG_STD_QPEL 128 |
1580 | #define FF_BUG_QPEL_CHROMA2 256 |
1581 | #define FF_BUG_DIRECT_BLOCKSIZE 512 |
1582 | #define FF_BUG_EDGE 1024 |
1583 | #define FF_BUG_HPEL_CHROMA 2048 |
1584 | #define FF_BUG_DC_CLIP 4096 |
1585 | #define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. |
1586 | #define FF_BUG_TRUNCATED 16384 |
1587 | #define FF_BUG_IEDGE 32768 |
1588 | |
1589 | /** |
1590 | * strictly follow the standard (MPEG-4, ...). |
1591 | * - encoding: Set by user. |
1592 | * - decoding: Set by user. |
1593 | * Setting this to STRICT or higher means the encoder and decoder will |
1594 | * generally do stupid things, whereas setting it to unofficial or lower |
1595 | * will mean the encoder might produce output that is not supported by all |
1596 | * spec-compliant decoders. Decoders don't differentiate between normal, |
1597 | * unofficial and experimental (that is, they always try to decode things |
1598 | * when they can) unless they are explicitly asked to behave stupidly |
1599 | * (=strictly conform to the specs) |
1600 | */ |
1601 | int strict_std_compliance; |
1602 | #define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. |
1603 | #define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. |
1604 | #define FF_COMPLIANCE_NORMAL 0 |
1605 | #define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions |
1606 | #define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. |
1607 | |
1608 | /** |
1609 | * error concealment flags |
1610 | * - encoding: unused |
1611 | * - decoding: Set by user. |
1612 | */ |
1613 | int error_concealment; |
1614 | #define FF_EC_GUESS_MVS 1 |
1615 | #define FF_EC_DEBLOCK 2 |
1616 | #define FF_EC_FAVOR_INTER 256 |
1617 | |
1618 | /** |
1619 | * debug |
1620 | * - encoding: Set by user. |
1621 | * - decoding: Set by user. |
1622 | */ |
1623 | int debug; |
1624 | #define FF_DEBUG_PICT_INFO 1 |
1625 | #define FF_DEBUG_RC 2 |
1626 | #define FF_DEBUG_BITSTREAM 4 |
1627 | #define FF_DEBUG_MB_TYPE 8 |
1628 | #define FF_DEBUG_QP 16 |
1629 | #define FF_DEBUG_DCT_COEFF 0x00000040 |
1630 | #define FF_DEBUG_SKIP 0x00000080 |
1631 | #define FF_DEBUG_STARTCODE 0x00000100 |
1632 | #define FF_DEBUG_ER 0x00000400 |
1633 | #define FF_DEBUG_MMCO 0x00000800 |
1634 | #define FF_DEBUG_BUGS 0x00001000 |
1635 | #define FF_DEBUG_BUFFERS 0x00008000 |
1636 | #define FF_DEBUG_THREADS 0x00010000 |
1637 | #define FF_DEBUG_GREEN_MD 0x00800000 |
1638 | #define FF_DEBUG_NOMC 0x01000000 |
1639 | |
1640 | /** |
1641 | * Error recognition; may misdetect some more or less valid parts as errors. |
1642 | * - encoding: Set by user. |
1643 | * - decoding: Set by user. |
1644 | */ |
1645 | int err_recognition; |
1646 | |
1647 | /** |
1648 | * Verify checksums embedded in the bitstream (could be of either encoded or |
1649 | * decoded data, depending on the codec) and print an error message on mismatch. |
1650 | * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the |
1651 | * decoder returning an error. |
1652 | */ |
1653 | #define AV_EF_CRCCHECK (1<<0) |
1654 | #define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations |
1655 | #define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length |
1656 | #define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection |
1657 | |
1658 | #define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue |
1659 | #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 |
1660 | #define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors |
1661 | #define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error |
1662 | |
1663 | |
1664 | /** |
1665 | * opaque 64-bit number (generally a PTS) that will be reordered and |
1666 | * output in AVFrame.reordered_opaque |
1667 | * - encoding: Set by libavcodec to the reordered_opaque of the input |
1668 | * frame corresponding to the last returned packet. Only |
1669 | * supported by encoders with the |
1670 | * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. |
1671 | * - decoding: Set by user. |
1672 | */ |
1673 | int64_t reordered_opaque; |
1674 | |
1675 | /** |
1676 | * Hardware accelerator in use |
1677 | * - encoding: unused. |
1678 | * - decoding: Set by libavcodec |
1679 | */ |
1680 | const struct AVHWAccel *hwaccel; |
1681 | |
1682 | /** |
1683 | * Hardware accelerator context. |
1684 | * For some hardware accelerators, a global context needs to be |
1685 | * provided by the user. In that case, this holds display-dependent |
1686 | * data FFmpeg cannot instantiate itself. Please refer to the |
1687 | * FFmpeg HW accelerator documentation to know how to fill this |
1688 | * is. e.g. for VA API, this is a struct vaapi_context. |
1689 | * - encoding: unused |
1690 | * - decoding: Set by user |
1691 | */ |
1692 | void *hwaccel_context; |
1693 | |
1694 | /** |
1695 | * error |
1696 | * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. |
1697 | * - decoding: unused |
1698 | */ |
1699 | uint64_t error[AV_NUM_DATA_POINTERS]; |
1700 | |
1701 | /** |
1702 | * DCT algorithm, see FF_DCT_* below |
1703 | * - encoding: Set by user. |
1704 | * - decoding: unused |
1705 | */ |
1706 | int dct_algo; |
1707 | #define FF_DCT_AUTO 0 |
1708 | #define FF_DCT_FASTINT 1 |
1709 | #define FF_DCT_INT 2 |
1710 | #define FF_DCT_MMX 3 |
1711 | #define FF_DCT_ALTIVEC 5 |
1712 | #define FF_DCT_FAAN 6 |
1713 | |
1714 | /** |
1715 | * IDCT algorithm, see FF_IDCT_* below. |
1716 | * - encoding: Set by user. |
1717 | * - decoding: Set by user. |
1718 | */ |
1719 | int idct_algo; |
1720 | #define FF_IDCT_AUTO 0 |
1721 | #define FF_IDCT_INT 1 |
1722 | #define FF_IDCT_SIMPLE 2 |
1723 | #define FF_IDCT_SIMPLEMMX 3 |
1724 | #define FF_IDCT_ARM 7 |
1725 | #define FF_IDCT_ALTIVEC 8 |
1726 | #define FF_IDCT_SIMPLEARM 10 |
1727 | #define FF_IDCT_XVID 14 |
1728 | #define FF_IDCT_SIMPLEARMV5TE 16 |
1729 | #define FF_IDCT_SIMPLEARMV6 17 |
1730 | #define FF_IDCT_FAAN 20 |
1731 | #define FF_IDCT_SIMPLENEON 22 |
1732 | #define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ |
1733 | #define FF_IDCT_SIMPLEAUTO 128 |
1734 | |
1735 | /** |
1736 | * bits per sample/pixel from the demuxer (needed for huffyuv). |
1737 | * - encoding: Set by libavcodec. |
1738 | * - decoding: Set by user. |
1739 | */ |
1740 | int bits_per_coded_sample; |
1741 | |
1742 | /** |
1743 | * Bits per sample/pixel of internal libavcodec pixel/sample format. |
1744 | * - encoding: set by user. |
1745 | * - decoding: set by libavcodec. |
1746 | */ |
1747 | int bits_per_raw_sample; |
1748 | |
1749 | /** |
1750 | * low resolution decoding, 1-> 1/2 size, 2->1/4 size |
1751 | * - encoding: unused |
1752 | * - decoding: Set by user. |
1753 | */ |
1754 | int lowres; |
1755 | |
1756 | #if FF_API_CODED_FRAME |
1757 | /** |
1758 | * the picture in the bitstream |
1759 | * - encoding: Set by libavcodec. |
1760 | * - decoding: unused |
1761 | * |
1762 | * @deprecated use the quality factor packet side data instead |
1763 | */ |
1764 | attribute_deprecated AVFrame *coded_frame; |
1765 | #endif |
1766 | |
1767 | /** |
1768 | * thread count |
1769 | * is used to decide how many independent tasks should be passed to execute() |
1770 | * - encoding: Set by user. |
1771 | * - decoding: Set by user. |
1772 | */ |
1773 | int thread_count; |
1774 | |
1775 | /** |
1776 | * Which multithreading methods to use. |
1777 | * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, |
1778 | * so clients which cannot provide future frames should not use it. |
1779 | * |
1780 | * - encoding: Set by user, otherwise the default is used. |
1781 | * - decoding: Set by user, otherwise the default is used. |
1782 | */ |
1783 | int thread_type; |
1784 | #define FF_THREAD_FRAME 1 ///< Decode more than one frame at once |
1785 | #define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once |
1786 | |
1787 | /** |
1788 | * Which multithreading methods are in use by the codec. |
1789 | * - encoding: Set by libavcodec. |
1790 | * - decoding: Set by libavcodec. |
1791 | */ |
1792 | int active_thread_type; |
1793 | |
1794 | #if FF_API_THREAD_SAFE_CALLBACKS |
1795 | /** |
1796 | * Set by the client if its custom get_buffer() callback can be called |
1797 | * synchronously from another thread, which allows faster multithreaded decoding. |
1798 | * draw_horiz_band() will be called from other threads regardless of this setting. |
1799 | * Ignored if the default get_buffer() is used. |
1800 | * - encoding: Set by user. |
1801 | * - decoding: Set by user. |
1802 | * |
1803 | * @deprecated the custom get_buffer2() callback should always be |
1804 | * thread-safe. Thread-unsafe get_buffer2() implementations will be |
1805 | * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, |
1806 | * libavcodec will behave as if this field was always set to 1. |
1807 | * Callers that want to be forward compatible with future libavcodec |
1808 | * versions should wrap access to this field in |
1809 | * #if LIBAVCODEC_VERSION_MAJOR < 60 |
1810 | */ |
1811 | attribute_deprecated |
1812 | int thread_safe_callbacks; |
1813 | #endif |
1814 | |
1815 | /** |
1816 | * The codec may call this to execute several independent things. |
1817 | * It will return only after finishing all tasks. |
1818 | * The user may replace this with some multithreaded implementation, |
1819 | * the default implementation will execute the parts serially. |
1820 | * @param count the number of things to execute |
1821 | * - encoding: Set by libavcodec, user can override. |
1822 | * - decoding: Set by libavcodec, user can override. |
1823 | */ |
1824 | int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); |
1825 | |
1826 | /** |
1827 | * The codec may call this to execute several independent things. |
1828 | * It will return only after finishing all tasks. |
1829 | * The user may replace this with some multithreaded implementation, |
1830 | * the default implementation will execute the parts serially. |
1831 | * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. |
1832 | * @param c context passed also to func |
1833 | * @param count the number of things to execute |
1834 | * @param arg2 argument passed unchanged to func |
1835 | * @param ret return values of executed functions, must have space for "count" values. May be NULL. |
1836 | * @param func function that will be called count times, with jobnr from 0 to count-1. |
1837 | * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no |
1838 | * two instances of func executing at the same time will have the same threadnr. |
1839 | * @return always 0 currently, but code should handle a future improvement where when any call to func |
1840 | * returns < 0 no further calls to func may be done and < 0 is returned. |
1841 | * - encoding: Set by libavcodec, user can override. |
1842 | * - decoding: Set by libavcodec, user can override. |
1843 | */ |
1844 | int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); |
1845 | |
1846 | /** |
1847 | * noise vs. sse weight for the nsse comparison function |
1848 | * - encoding: Set by user. |
1849 | * - decoding: unused |
1850 | */ |
1851 | int nsse_weight; |
1852 | |
1853 | /** |
1854 | * profile |
1855 | * - encoding: Set by user. |
1856 | * - decoding: Set by libavcodec. |
1857 | */ |
1858 | int profile; |
1859 | #define FF_PROFILE_UNKNOWN -99 |
1860 | #define FF_PROFILE_RESERVED -100 |
1861 | |
1862 | #define FF_PROFILE_AAC_MAIN 0 |
1863 | #define FF_PROFILE_AAC_LOW 1 |
1864 | #define FF_PROFILE_AAC_SSR 2 |
1865 | #define FF_PROFILE_AAC_LTP 3 |
1866 | #define FF_PROFILE_AAC_HE 4 |
1867 | #define FF_PROFILE_AAC_HE_V2 28 |
1868 | #define FF_PROFILE_AAC_LD 22 |
1869 | #define FF_PROFILE_AAC_ELD 38 |
1870 | #define FF_PROFILE_MPEG2_AAC_LOW 128 |
1871 | #define FF_PROFILE_MPEG2_AAC_HE 131 |
1872 | |
1873 | #define FF_PROFILE_DNXHD 0 |
1874 | #define FF_PROFILE_DNXHR_LB 1 |
1875 | #define FF_PROFILE_DNXHR_SQ 2 |
1876 | #define FF_PROFILE_DNXHR_HQ 3 |
1877 | #define FF_PROFILE_DNXHR_HQX 4 |
1878 | #define FF_PROFILE_DNXHR_444 5 |
1879 | |
1880 | #define FF_PROFILE_DTS 20 |
1881 | #define FF_PROFILE_DTS_ES 30 |
1882 | #define FF_PROFILE_DTS_96_24 40 |
1883 | #define FF_PROFILE_DTS_HD_HRA 50 |
1884 | #define FF_PROFILE_DTS_HD_MA 60 |
1885 | #define FF_PROFILE_DTS_EXPRESS 70 |
1886 | |
1887 | #define FF_PROFILE_MPEG2_422 0 |
1888 | #define FF_PROFILE_MPEG2_HIGH 1 |
1889 | #define FF_PROFILE_MPEG2_SS 2 |
1890 | #define FF_PROFILE_MPEG2_SNR_SCALABLE 3 |
1891 | #define FF_PROFILE_MPEG2_MAIN 4 |
1892 | #define FF_PROFILE_MPEG2_SIMPLE 5 |
1893 | |
1894 | #define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag |
1895 | #define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag |
1896 | |
1897 | #define FF_PROFILE_H264_BASELINE 66 |
1898 | #define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) |
1899 | #define FF_PROFILE_H264_MAIN 77 |
1900 | #define FF_PROFILE_H264_EXTENDED 88 |
1901 | #define FF_PROFILE_H264_HIGH 100 |
1902 | #define FF_PROFILE_H264_HIGH_10 110 |
1903 | #define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) |
1904 | #define FF_PROFILE_H264_MULTIVIEW_HIGH 118 |
1905 | #define FF_PROFILE_H264_HIGH_422 122 |
1906 | #define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) |
1907 | #define FF_PROFILE_H264_STEREO_HIGH 128 |
1908 | #define FF_PROFILE_H264_HIGH_444 144 |
1909 | #define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 |
1910 | #define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) |
1911 | #define FF_PROFILE_H264_CAVLC_444 44 |
1912 | |
1913 | #define FF_PROFILE_VC1_SIMPLE 0 |
1914 | #define FF_PROFILE_VC1_MAIN 1 |
1915 | #define FF_PROFILE_VC1_COMPLEX 2 |
1916 | #define FF_PROFILE_VC1_ADVANCED 3 |
1917 | |
1918 | #define FF_PROFILE_MPEG4_SIMPLE 0 |
1919 | #define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 |
1920 | #define FF_PROFILE_MPEG4_CORE 2 |
1921 | #define FF_PROFILE_MPEG4_MAIN 3 |
1922 | #define FF_PROFILE_MPEG4_N_BIT 4 |
1923 | #define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 |
1924 | #define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 |
1925 | #define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 |
1926 | #define FF_PROFILE_MPEG4_HYBRID 8 |
1927 | #define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 |
1928 | #define FF_PROFILE_MPEG4_CORE_SCALABLE 10 |
1929 | #define FF_PROFILE_MPEG4_ADVANCED_CODING 11 |
1930 | #define FF_PROFILE_MPEG4_ADVANCED_CORE 12 |
1931 | #define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 |
1932 | #define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 |
1933 | #define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 |
1934 | |
1935 | #define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 |
1936 | #define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 |
1937 | #define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 |
1938 | #define FF_PROFILE_JPEG2000_DCINEMA_2K 3 |
1939 | #define FF_PROFILE_JPEG2000_DCINEMA_4K 4 |
1940 | |
1941 | #define FF_PROFILE_VP9_0 0 |
1942 | #define FF_PROFILE_VP9_1 1 |
1943 | #define FF_PROFILE_VP9_2 2 |
1944 | #define FF_PROFILE_VP9_3 3 |
1945 | |
1946 | #define FF_PROFILE_HEVC_MAIN 1 |
1947 | #define FF_PROFILE_HEVC_MAIN_10 2 |
1948 | #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 |
1949 | #define FF_PROFILE_HEVC_REXT 4 |
1950 | |
1951 | #define FF_PROFILE_VVC_MAIN_10 1 |
1952 | #define FF_PROFILE_VVC_MAIN_10_444 33 |
1953 | |
1954 | #define FF_PROFILE_AV1_MAIN 0 |
1955 | #define FF_PROFILE_AV1_HIGH 1 |
1956 | #define FF_PROFILE_AV1_PROFESSIONAL 2 |
1957 | |
1958 | #define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 |
1959 | #define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 |
1960 | #define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 |
1961 | #define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 |
1962 | #define FF_PROFILE_MJPEG_JPEG_LS 0xf7 |
1963 | |
1964 | #define FF_PROFILE_SBC_MSBC 1 |
1965 | |
1966 | #define FF_PROFILE_PRORES_PROXY 0 |
1967 | #define FF_PROFILE_PRORES_LT 1 |
1968 | #define FF_PROFILE_PRORES_STANDARD 2 |
1969 | #define FF_PROFILE_PRORES_HQ 3 |
1970 | #define FF_PROFILE_PRORES_4444 4 |
1971 | #define FF_PROFILE_PRORES_XQ 5 |
1972 | |
1973 | #define FF_PROFILE_ARIB_PROFILE_A 0 |
1974 | #define FF_PROFILE_ARIB_PROFILE_C 1 |
1975 | |
1976 | #define FF_PROFILE_KLVA_SYNC 0 |
1977 | #define FF_PROFILE_KLVA_ASYNC 1 |
1978 | |
1979 | /** |
1980 | * level |
1981 | * - encoding: Set by user. |
1982 | * - decoding: Set by libavcodec. |
1983 | */ |
1984 | int level; |
1985 | #define FF_LEVEL_UNKNOWN -99 |
1986 | |
1987 | /** |
1988 | * Skip loop filtering for selected frames. |
1989 | * - encoding: unused |
1990 | * - decoding: Set by user. |
1991 | */ |
1992 | enum AVDiscard skip_loop_filter; |
1993 | |
1994 | /** |
1995 | * Skip IDCT/dequantization for selected frames. |
1996 | * - encoding: unused |
1997 | * - decoding: Set by user. |
1998 | */ |
1999 | enum AVDiscard skip_idct; |
2000 | |
2001 | /** |
2002 | * Skip decoding for selected frames. |
2003 | * - encoding: unused |
2004 | * - decoding: Set by user. |
2005 | */ |
2006 | enum AVDiscard skip_frame; |
2007 | |
2008 | /** |
2009 | * Header containing style information for text subtitles. |
2010 | * For SUBTITLE_ASS subtitle type, it should contain the whole ASS |
2011 | * [Script Info] and [V4+ Styles] section, plus the [Events] line and |
2012 | * the Format line following. It shouldn't include any Dialogue line. |
2013 | * - encoding: Set/allocated/freed by user (before avcodec_open2()) |
2014 | * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) |
2015 | */ |
2016 | uint8_t *; |
2017 | int ; |
2018 | |
2019 | #if FF_API_VBV_DELAY |
2020 | /** |
2021 | * VBV delay coded in the last frame (in periods of a 27 MHz clock). |
2022 | * Used for compliant TS muxing. |
2023 | * - encoding: Set by libavcodec. |
2024 | * - decoding: unused. |
2025 | * @deprecated this value is now exported as a part of |
2026 | * AV_PKT_DATA_CPB_PROPERTIES packet side data |
2027 | */ |
2028 | attribute_deprecated |
2029 | uint64_t vbv_delay; |
2030 | #endif |
2031 | |
2032 | #if FF_API_SIDEDATA_ONLY_PKT |
2033 | /** |
2034 | * Encoding only and set by default. Allow encoders to output packets |
2035 | * that do not contain any encoded data, only side data. |
2036 | * |
2037 | * Some encoders need to output such packets, e.g. to update some stream |
2038 | * parameters at the end of encoding. |
2039 | * |
2040 | * @deprecated this field disables the default behaviour and |
2041 | * it is kept only for compatibility. |
2042 | */ |
2043 | attribute_deprecated |
2044 | int side_data_only_packets; |
2045 | #endif |
2046 | |
2047 | /** |
2048 | * Audio only. The number of "priming" samples (padding) inserted by the |
2049 | * encoder at the beginning of the audio. I.e. this number of leading |
2050 | * decoded samples must be discarded by the caller to get the original audio |
2051 | * without leading padding. |
2052 | * |
2053 | * - decoding: unused |
2054 | * - encoding: Set by libavcodec. The timestamps on the output packets are |
2055 | * adjusted by the encoder so that they always refer to the |
2056 | * first sample of the data actually contained in the packet, |
2057 | * including any added padding. E.g. if the timebase is |
2058 | * 1/samplerate and the timestamp of the first input sample is |
2059 | * 0, the timestamp of the first output packet will be |
2060 | * -initial_padding. |
2061 | */ |
2062 | int initial_padding; |
2063 | |
2064 | /** |
2065 | * - decoding: For codecs that store a framerate value in the compressed |
2066 | * bitstream, the decoder may export it here. { 0, 1} when |
2067 | * unknown. |
2068 | * - encoding: May be used to signal the framerate of CFR content to an |
2069 | * encoder. |
2070 | */ |
2071 | AVRational framerate; |
2072 | |
2073 | /** |
2074 | * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. |
2075 | * - encoding: unused. |
2076 | * - decoding: Set by libavcodec before calling get_format() |
2077 | */ |
2078 | enum AVPixelFormat sw_pix_fmt; |
2079 | |
2080 | /** |
2081 | * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. |
2082 | * - encoding unused. |
2083 | * - decoding set by user. |
2084 | */ |
2085 | AVRational pkt_timebase; |
2086 | |
2087 | /** |
2088 | * AVCodecDescriptor |
2089 | * - encoding: unused. |
2090 | * - decoding: set by libavcodec. |
2091 | */ |
2092 | const AVCodecDescriptor *codec_descriptor; |
2093 | |
2094 | /** |
2095 | * Current statistics for PTS correction. |
2096 | * - decoding: maintained and used by libavcodec, not intended to be used by user apps |
2097 | * - encoding: unused |
2098 | */ |
2099 | int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far |
2100 | int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far |
2101 | int64_t pts_correction_last_pts; /// PTS of the last frame |
2102 | int64_t pts_correction_last_dts; /// DTS of the last frame |
2103 | |
2104 | /** |
2105 | * Character encoding of the input subtitles file. |
2106 | * - decoding: set by user |
2107 | * - encoding: unused |
2108 | */ |
2109 | char *sub_charenc; |
2110 | |
2111 | /** |
2112 | * Subtitles character encoding mode. Formats or codecs might be adjusting |
2113 | * this setting (if they are doing the conversion themselves for instance). |
2114 | * - decoding: set by libavcodec |
2115 | * - encoding: unused |
2116 | */ |
2117 | int sub_charenc_mode; |
2118 | #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) |
2119 | #define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself |
2120 | #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 |
2121 | #define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 |
2122 | |
2123 | /** |
2124 | * Skip processing alpha if supported by codec. |
2125 | * Note that if the format uses pre-multiplied alpha (common with VP6, |
2126 | * and recommended due to better video quality/compression) |
2127 | * the image will look as if alpha-blended onto a black background. |
2128 | * However for formats that do not use pre-multiplied alpha |
2129 | * there might be serious artefacts (though e.g. libswscale currently |
2130 | * assumes pre-multiplied alpha anyway). |
2131 | * |
2132 | * - decoding: set by user |
2133 | * - encoding: unused |
2134 | */ |
2135 | int skip_alpha; |
2136 | |
2137 | /** |
2138 | * Number of samples to skip after a discontinuity |
2139 | * - decoding: unused |
2140 | * - encoding: set by libavcodec |
2141 | */ |
2142 | int seek_preroll; |
2143 | |
2144 | #if FF_API_DEBUG_MV |
2145 | /** |
2146 | * @deprecated unused |
2147 | */ |
2148 | attribute_deprecated |
2149 | int debug_mv; |
2150 | #define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames |
2151 | #define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames |
2152 | #define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames |
2153 | #endif |
2154 | |
2155 | /** |
2156 | * custom intra quantization matrix |
2157 | * - encoding: Set by user, can be NULL. |
2158 | * - decoding: unused. |
2159 | */ |
2160 | uint16_t *chroma_intra_matrix; |
2161 | |
2162 | /** |
2163 | * dump format separator. |
2164 | * can be ", " or "\n " or anything else |
2165 | * - encoding: Set by user. |
2166 | * - decoding: Set by user. |
2167 | */ |
2168 | uint8_t *dump_separator; |
2169 | |
2170 | /** |
2171 | * ',' separated list of allowed decoders. |
2172 | * If NULL then all are allowed |
2173 | * - encoding: unused |
2174 | * - decoding: set by user |
2175 | */ |
2176 | char *codec_whitelist; |
2177 | |
2178 | /** |
2179 | * Properties of the stream that gets decoded |
2180 | * - encoding: unused |
2181 | * - decoding: set by libavcodec |
2182 | */ |
2183 | unsigned properties; |
2184 | #define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 |
2185 | #define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 |
2186 | |
2187 | /** |
2188 | * Additional data associated with the entire coded stream. |
2189 | * |
2190 | * - decoding: unused |
2191 | * - encoding: may be set by libavcodec after avcodec_open2(). |
2192 | */ |
2193 | AVPacketSideData *coded_side_data; |
2194 | int nb_coded_side_data; |
2195 | |
2196 | /** |
2197 | * A reference to the AVHWFramesContext describing the input (for encoding) |
2198 | * or output (decoding) frames. The reference is set by the caller and |
2199 | * afterwards owned (and freed) by libavcodec - it should never be read by |
2200 | * the caller after being set. |
2201 | * |
2202 | * - decoding: This field should be set by the caller from the get_format() |
2203 | * callback. The previous reference (if any) will always be |
2204 | * unreffed by libavcodec before the get_format() call. |
2205 | * |
2206 | * If the default get_buffer2() is used with a hwaccel pixel |
2207 | * format, then this AVHWFramesContext will be used for |
2208 | * allocating the frame buffers. |
2209 | * |
2210 | * - encoding: For hardware encoders configured to use a hwaccel pixel |
2211 | * format, this field should be set by the caller to a reference |
2212 | * to the AVHWFramesContext describing input frames. |
2213 | * AVHWFramesContext.format must be equal to |
2214 | * AVCodecContext.pix_fmt. |
2215 | * |
2216 | * This field should be set before avcodec_open2() is called. |
2217 | */ |
2218 | AVBufferRef *hw_frames_ctx; |
2219 | |
2220 | /** |
2221 | * Control the form of AVSubtitle.rects[N]->ass |
2222 | * - decoding: set by user |
2223 | * - encoding: unused |
2224 | */ |
2225 | int sub_text_format; |
2226 | #define FF_SUB_TEXT_FMT_ASS 0 |
2227 | #if FF_API_ASS_TIMING |
2228 | #define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 |
2229 | #endif |
2230 | |
2231 | /** |
2232 | * Audio only. The amount of padding (in samples) appended by the encoder to |
2233 | * the end of the audio. I.e. this number of decoded samples must be |
2234 | * discarded by the caller from the end of the stream to get the original |
2235 | * audio without any trailing padding. |
2236 | * |
2237 | * - decoding: unused |
2238 | * - encoding: unused |
2239 | */ |
2240 | int trailing_padding; |
2241 | |
2242 | /** |
2243 | * The number of pixels per image to maximally accept. |
2244 | * |
2245 | * - decoding: set by user |
2246 | * - encoding: set by user |
2247 | */ |
2248 | int64_t max_pixels; |
2249 | |
2250 | /** |
2251 | * A reference to the AVHWDeviceContext describing the device which will |
2252 | * be used by a hardware encoder/decoder. The reference is set by the |
2253 | * caller and afterwards owned (and freed) by libavcodec. |
2254 | * |
2255 | * This should be used if either the codec device does not require |
2256 | * hardware frames or any that are used are to be allocated internally by |
2257 | * libavcodec. If the user wishes to supply any of the frames used as |
2258 | * encoder input or decoder output then hw_frames_ctx should be used |
2259 | * instead. When hw_frames_ctx is set in get_format() for a decoder, this |
2260 | * field will be ignored while decoding the associated stream segment, but |
2261 | * may again be used on a following one after another get_format() call. |
2262 | * |
2263 | * For both encoders and decoders this field should be set before |
2264 | * avcodec_open2() is called and must not be written to thereafter. |
2265 | * |
2266 | * Note that some decoders may require this field to be set initially in |
2267 | * order to support hw_frames_ctx at all - in that case, all frames |
2268 | * contexts used must be created on the same device. |
2269 | */ |
2270 | AVBufferRef *hw_device_ctx; |
2271 | |
2272 | /** |
2273 | * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated |
2274 | * decoding (if active). |
2275 | * - encoding: unused |
2276 | * - decoding: Set by user (either before avcodec_open2(), or in the |
2277 | * AVCodecContext.get_format callback) |
2278 | */ |
2279 | int hwaccel_flags; |
2280 | |
2281 | /** |
2282 | * Video decoding only. Certain video codecs support cropping, meaning that |
2283 | * only a sub-rectangle of the decoded frame is intended for display. This |
2284 | * option controls how cropping is handled by libavcodec. |
2285 | * |
2286 | * When set to 1 (the default), libavcodec will apply cropping internally. |
2287 | * I.e. it will modify the output frame width/height fields and offset the |
2288 | * data pointers (only by as much as possible while preserving alignment, or |
2289 | * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that |
2290 | * the frames output by the decoder refer only to the cropped area. The |
2291 | * crop_* fields of the output frames will be zero. |
2292 | * |
2293 | * When set to 0, the width/height fields of the output frames will be set |
2294 | * to the coded dimensions and the crop_* fields will describe the cropping |
2295 | * rectangle. Applying the cropping is left to the caller. |
2296 | * |
2297 | * @warning When hardware acceleration with opaque output frames is used, |
2298 | * libavcodec is unable to apply cropping from the top/left border. |
2299 | * |
2300 | * @note when this option is set to zero, the width/height fields of the |
2301 | * AVCodecContext and output AVFrames have different meanings. The codec |
2302 | * context fields store display dimensions (with the coded dimensions in |
2303 | * coded_width/height), while the frame fields store the coded dimensions |
2304 | * (with the display dimensions being determined by the crop_* fields). |
2305 | */ |
2306 | int apply_cropping; |
2307 | |
2308 | /* |
2309 | * Video decoding only. Sets the number of extra hardware frames which |
2310 | * the decoder will allocate for use by the caller. This must be set |
2311 | * before avcodec_open2() is called. |
2312 | * |
2313 | * Some hardware decoders require all frames that they will use for |
2314 | * output to be defined in advance before decoding starts. For such |
2315 | * decoders, the hardware frame pool must therefore be of a fixed size. |
2316 | * The extra frames set here are on top of any number that the decoder |
2317 | * needs internally in order to operate normally (for example, frames |
2318 | * used as reference pictures). |
2319 | */ |
2320 | int ; |
2321 | |
2322 | /** |
2323 | * The percentage of damaged samples to discard a frame. |
2324 | * |
2325 | * - decoding: set by user |
2326 | * - encoding: unused |
2327 | */ |
2328 | int discard_damaged_percentage; |
2329 | |
2330 | /** |
2331 | * The number of samples per frame to maximally accept. |
2332 | * |
2333 | * - decoding: set by user |
2334 | * - encoding: set by user |
2335 | */ |
2336 | int64_t max_samples; |
2337 | |
2338 | /** |
2339 | * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of |
2340 | * metadata exported in frame, packet, or coded stream side data by |
2341 | * decoders and encoders. |
2342 | * |
2343 | * - decoding: set by user |
2344 | * - encoding: set by user |
2345 | */ |
2346 | int export_side_data; |
2347 | |
2348 | /** |
2349 | * This callback is called at the beginning of each packet to get a data |
2350 | * buffer for it. |
2351 | * |
2352 | * The following field will be set in the packet before this callback is |
2353 | * called: |
2354 | * - size |
2355 | * This callback must use the above value to calculate the required buffer size, |
2356 | * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. |
2357 | * |
2358 | * This callback must fill the following fields in the packet: |
2359 | * - data: alignment requirements for AVPacket apply, if any. Some architectures and |
2360 | * encoders may benefit from having aligned data. |
2361 | * - buf: must contain a pointer to an AVBufferRef structure. The packet's |
2362 | * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), |
2363 | * and av_buffer_ref(). |
2364 | * |
2365 | * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call |
2366 | * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by |
2367 | * some other means. |
2368 | * |
2369 | * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. |
2370 | * They may be used for example to hint what use the buffer may get after being |
2371 | * created. |
2372 | * Implementations of this callback may ignore flags they don't understand. |
2373 | * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused |
2374 | * (read and/or written to if it is writable) later by libavcodec. |
2375 | * |
2376 | * This callback must be thread-safe, as when frame threading is used, it may |
2377 | * be called from multiple threads simultaneously. |
2378 | * |
2379 | * @see avcodec_default_get_encode_buffer() |
2380 | * |
2381 | * - encoding: Set by libavcodec, user can override. |
2382 | * - decoding: unused |
2383 | */ |
2384 | int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); |
2385 | } AVCodecContext; |
2386 | |
2387 | #if FF_API_CODEC_GET_SET |
2388 | /** |
2389 | * Accessors for some AVCodecContext fields. These used to be provided for ABI |
2390 | * compatibility, and do not need to be used anymore. |
2391 | */ |
2392 | attribute_deprecated |
2393 | AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); |
2394 | attribute_deprecated |
2395 | void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); |
2396 | |
2397 | attribute_deprecated |
2398 | const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); |
2399 | attribute_deprecated |
2400 | void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); |
2401 | |
2402 | attribute_deprecated |
2403 | unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); |
2404 | |
2405 | attribute_deprecated |
2406 | int av_codec_get_lowres(const AVCodecContext *avctx); |
2407 | attribute_deprecated |
2408 | void av_codec_set_lowres(AVCodecContext *avctx, int val); |
2409 | |
2410 | attribute_deprecated |
2411 | int av_codec_get_seek_preroll(const AVCodecContext *avctx); |
2412 | attribute_deprecated |
2413 | void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); |
2414 | |
2415 | attribute_deprecated |
2416 | uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); |
2417 | attribute_deprecated |
2418 | void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); |
2419 | #endif |
2420 | |
2421 | struct AVSubtitle; |
2422 | |
2423 | #if FF_API_CODEC_GET_SET |
2424 | attribute_deprecated |
2425 | int av_codec_get_max_lowres(const AVCodec *codec); |
2426 | #endif |
2427 | |
2428 | struct MpegEncContext; |
2429 | |
2430 | /** |
2431 | * @defgroup lavc_hwaccel AVHWAccel |
2432 | * |
2433 | * @note Nothing in this structure should be accessed by the user. At some |
2434 | * point in future it will not be externally visible at all. |
2435 | * |
2436 | * @{ |
2437 | */ |
2438 | typedef struct AVHWAccel { |
2439 | /** |
2440 | * Name of the hardware accelerated codec. |
2441 | * The name is globally unique among encoders and among decoders (but an |
2442 | * encoder and a decoder can share the same name). |
2443 | */ |
2444 | const char *name; |
2445 | |
2446 | /** |
2447 | * Type of codec implemented by the hardware accelerator. |
2448 | * |
2449 | * See AVMEDIA_TYPE_xxx |
2450 | */ |
2451 | enum AVMediaType type; |
2452 | |
2453 | /** |
2454 | * Codec implemented by the hardware accelerator. |
2455 | * |
2456 | * See AV_CODEC_ID_xxx |
2457 | */ |
2458 | enum AVCodecID id; |
2459 | |
2460 | /** |
2461 | * Supported pixel format. |
2462 | * |
2463 | * Only hardware accelerated formats are supported here. |
2464 | */ |
2465 | enum AVPixelFormat pix_fmt; |
2466 | |
2467 | /** |
2468 | * Hardware accelerated codec capabilities. |
2469 | * see AV_HWACCEL_CODEC_CAP_* |
2470 | */ |
2471 | int capabilities; |
2472 | |
2473 | /***************************************************************** |
2474 | * No fields below this line are part of the public API. They |
2475 | * may not be used outside of libavcodec and can be changed and |
2476 | * removed at will. |
2477 | * New public fields should be added right above. |
2478 | ***************************************************************** |
2479 | */ |
2480 | |
2481 | /** |
2482 | * Allocate a custom buffer |
2483 | */ |
2484 | int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); |
2485 | |
2486 | /** |
2487 | * Called at the beginning of each frame or field picture. |
2488 | * |
2489 | * Meaningful frame information (codec specific) is guaranteed to |
2490 | * be parsed at this point. This function is mandatory. |
2491 | * |
2492 | * Note that buf can be NULL along with buf_size set to 0. |
2493 | * Otherwise, this means the whole frame is available at this point. |
2494 | * |
2495 | * @param avctx the codec context |
2496 | * @param buf the frame data buffer base |
2497 | * @param buf_size the size of the frame in bytes |
2498 | * @return zero if successful, a negative value otherwise |
2499 | */ |
2500 | int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); |
2501 | |
2502 | /** |
2503 | * Callback for parameter data (SPS/PPS/VPS etc). |
2504 | * |
2505 | * Useful for hardware decoders which keep persistent state about the |
2506 | * video parameters, and need to receive any changes to update that state. |
2507 | * |
2508 | * @param avctx the codec context |
2509 | * @param type the nal unit type |
2510 | * @param buf the nal unit data buffer |
2511 | * @param buf_size the size of the nal unit in bytes |
2512 | * @return zero if successful, a negative value otherwise |
2513 | */ |
2514 | int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); |
2515 | |
2516 | /** |
2517 | * Callback for each slice. |
2518 | * |
2519 | * Meaningful slice information (codec specific) is guaranteed to |
2520 | * be parsed at this point. This function is mandatory. |
2521 | * The only exception is XvMC, that works on MB level. |
2522 | * |
2523 | * @param avctx the codec context |
2524 | * @param buf the slice data buffer base |
2525 | * @param buf_size the size of the slice in bytes |
2526 | * @return zero if successful, a negative value otherwise |
2527 | */ |
2528 | int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); |
2529 | |
2530 | /** |
2531 | * Called at the end of each frame or field picture. |
2532 | * |
2533 | * The whole picture is parsed at this point and can now be sent |
2534 | * to the hardware accelerator. This function is mandatory. |
2535 | * |
2536 | * @param avctx the codec context |
2537 | * @return zero if successful, a negative value otherwise |
2538 | */ |
2539 | int (*end_frame)(AVCodecContext *avctx); |
2540 | |
2541 | /** |
2542 | * Size of per-frame hardware accelerator private data. |
2543 | * |
2544 | * Private data is allocated with av_mallocz() before |
2545 | * AVCodecContext.get_buffer() and deallocated after |
2546 | * AVCodecContext.release_buffer(). |
2547 | */ |
2548 | int frame_priv_data_size; |
2549 | |
2550 | /** |
2551 | * Called for every Macroblock in a slice. |
2552 | * |
2553 | * XvMC uses it to replace the ff_mpv_reconstruct_mb(). |
2554 | * Instead of decoding to raw picture, MB parameters are |
2555 | * stored in an array provided by the video driver. |
2556 | * |
2557 | * @param s the mpeg context |
2558 | */ |
2559 | void (*decode_mb)(struct MpegEncContext *s); |
2560 | |
2561 | /** |
2562 | * Initialize the hwaccel private data. |
2563 | * |
2564 | * This will be called from ff_get_format(), after hwaccel and |
2565 | * hwaccel_context are set and the hwaccel private data in AVCodecInternal |
2566 | * is allocated. |
2567 | */ |
2568 | int (*init)(AVCodecContext *avctx); |
2569 | |
2570 | /** |
2571 | * Uninitialize the hwaccel private data. |
2572 | * |
2573 | * This will be called from get_format() or avcodec_close(), after hwaccel |
2574 | * and hwaccel_context are already uninitialized. |
2575 | */ |
2576 | int (*uninit)(AVCodecContext *avctx); |
2577 | |
2578 | /** |
2579 | * Size of the private data to allocate in |
2580 | * AVCodecInternal.hwaccel_priv_data. |
2581 | */ |
2582 | int priv_data_size; |
2583 | |
2584 | /** |
2585 | * Internal hwaccel capabilities. |
2586 | */ |
2587 | int caps_internal; |
2588 | |
2589 | /** |
2590 | * Fill the given hw_frames context with current codec parameters. Called |
2591 | * from get_format. Refer to avcodec_get_hw_frames_parameters() for |
2592 | * details. |
2593 | * |
2594 | * This CAN be called before AVHWAccel.init is called, and you must assume |
2595 | * that avctx->hwaccel_priv_data is invalid. |
2596 | */ |
2597 | int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); |
2598 | } AVHWAccel; |
2599 | |
2600 | /** |
2601 | * HWAccel is experimental and is thus avoided in favor of non experimental |
2602 | * codecs |
2603 | */ |
2604 | #define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 |
2605 | |
2606 | /** |
2607 | * Hardware acceleration should be used for decoding even if the codec level |
2608 | * used is unknown or higher than the maximum supported level reported by the |
2609 | * hardware driver. |
2610 | * |
2611 | * It's generally a good idea to pass this flag unless you have a specific |
2612 | * reason not to, as hardware tends to under-report supported levels. |
2613 | */ |
2614 | #define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) |
2615 | |
2616 | /** |
2617 | * Hardware acceleration can output YUV pixel formats with a different chroma |
2618 | * sampling than 4:2:0 and/or other than 8 bits per component. |
2619 | */ |
2620 | #define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) |
2621 | |
2622 | /** |
2623 | * Hardware acceleration should still be attempted for decoding when the |
2624 | * codec profile does not match the reported capabilities of the hardware. |
2625 | * |
2626 | * For example, this can be used to try to decode baseline profile H.264 |
2627 | * streams in hardware - it will often succeed, because many streams marked |
2628 | * as baseline profile actually conform to constrained baseline profile. |
2629 | * |
2630 | * @warning If the stream is actually not supported then the behaviour is |
2631 | * undefined, and may include returning entirely incorrect output |
2632 | * while indicating success. |
2633 | */ |
2634 | #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) |
2635 | |
2636 | /** |
2637 | * @} |
2638 | */ |
2639 | |
2640 | #if FF_API_AVPICTURE |
2641 | /** |
2642 | * @defgroup lavc_picture AVPicture |
2643 | * |
2644 | * Functions for working with AVPicture |
2645 | * @{ |
2646 | */ |
2647 | |
2648 | /** |
2649 | * Picture data structure. |
2650 | * |
2651 | * Up to four components can be stored into it, the last component is |
2652 | * alpha. |
2653 | * @deprecated use AVFrame or imgutils functions instead |
2654 | */ |
2655 | typedef struct AVPicture { |
2656 | attribute_deprecated |
2657 | uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes |
2658 | attribute_deprecated |
2659 | int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line |
2660 | } AVPicture; |
2661 | |
2662 | /** |
2663 | * @} |
2664 | */ |
2665 | #endif |
2666 | |
2667 | enum AVSubtitleType { |
2668 | SUBTITLE_NONE, |
2669 | |
2670 | SUBTITLE_BITMAP, ///< A bitmap, pict will be set |
2671 | |
2672 | /** |
2673 | * Plain text, the text field must be set by the decoder and is |
2674 | * authoritative. ass and pict fields may contain approximations. |
2675 | */ |
2676 | SUBTITLE_TEXT, |
2677 | |
2678 | /** |
2679 | * Formatted text, the ass field must be set by the decoder and is |
2680 | * authoritative. pict and text fields may contain approximations. |
2681 | */ |
2682 | SUBTITLE_ASS, |
2683 | }; |
2684 | |
2685 | #define AV_SUBTITLE_FLAG_FORCED 0x00000001 |
2686 | |
2687 | typedef struct AVSubtitleRect { |
2688 | int x; ///< top left corner of pict, undefined when pict is not set |
2689 | int y; ///< top left corner of pict, undefined when pict is not set |
2690 | int w; ///< width of pict, undefined when pict is not set |
2691 | int h; ///< height of pict, undefined when pict is not set |
2692 | int nb_colors; ///< number of colors in pict, undefined when pict is not set |
2693 | |
2694 | #if FF_API_AVPICTURE |
2695 | /** |
2696 | * @deprecated unused |
2697 | */ |
2698 | attribute_deprecated |
2699 | AVPicture pict; |
2700 | #endif |
2701 | /** |
2702 | * data+linesize for the bitmap of this subtitle. |
2703 | * Can be set for text/ass as well once they are rendered. |
2704 | */ |
2705 | uint8_t *data[4]; |
2706 | int linesize[4]; |
2707 | |
2708 | enum AVSubtitleType type; |
2709 | |
2710 | char *text; ///< 0 terminated plain UTF-8 text |
2711 | |
2712 | /** |
2713 | * 0 terminated ASS/SSA compatible event line. |
2714 | * The presentation of this is unaffected by the other values in this |
2715 | * struct. |
2716 | */ |
2717 | char *ass; |
2718 | |
2719 | int flags; |
2720 | } AVSubtitleRect; |
2721 | |
2722 | typedef struct AVSubtitle { |
2723 | uint16_t format; /* 0 = graphics */ |
2724 | uint32_t start_display_time; /* relative to packet pts, in ms */ |
2725 | uint32_t end_display_time; /* relative to packet pts, in ms */ |
2726 | unsigned num_rects; |
2727 | AVSubtitleRect **rects; |
2728 | int64_t pts; ///< Same as packet pts, in AV_TIME_BASE |
2729 | } AVSubtitle; |
2730 | |
2731 | #if FF_API_NEXT |
2732 | /** |
2733 | * If c is NULL, returns the first registered codec, |
2734 | * if c is non-NULL, returns the next registered codec after c, |
2735 | * or NULL if c is the last one. |
2736 | */ |
2737 | attribute_deprecated |
2738 | AVCodec *av_codec_next(const AVCodec *c); |
2739 | #endif |
2740 | |
2741 | /** |
2742 | * Return the LIBAVCODEC_VERSION_INT constant. |
2743 | */ |
2744 | unsigned avcodec_version(void); |
2745 | |
2746 | /** |
2747 | * Return the libavcodec build-time configuration. |
2748 | */ |
2749 | const char *avcodec_configuration(void); |
2750 | |
2751 | /** |
2752 | * Return the libavcodec license. |
2753 | */ |
2754 | const char *avcodec_license(void); |
2755 | |
2756 | #if FF_API_NEXT |
2757 | /** |
2758 | * @deprecated Calling this function is unnecessary. |
2759 | */ |
2760 | attribute_deprecated |
2761 | void avcodec_register(AVCodec *codec); |
2762 | |
2763 | /** |
2764 | * @deprecated Calling this function is unnecessary. |
2765 | */ |
2766 | attribute_deprecated |
2767 | void avcodec_register_all(void); |
2768 | #endif |
2769 | |
2770 | /** |
2771 | * Allocate an AVCodecContext and set its fields to default values. The |
2772 | * resulting struct should be freed with avcodec_free_context(). |
2773 | * |
2774 | * @param codec if non-NULL, allocate private data and initialize defaults |
2775 | * for the given codec. It is illegal to then call avcodec_open2() |
2776 | * with a different codec. |
2777 | * If NULL, then the codec-specific defaults won't be initialized, |
2778 | * which may result in suboptimal default settings (this is |
2779 | * important mainly for encoders, e.g. libx264). |
2780 | * |
2781 | * @return An AVCodecContext filled with default values or NULL on failure. |
2782 | */ |
2783 | AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); |
2784 | |
2785 | /** |
2786 | * Free the codec context and everything associated with it and write NULL to |
2787 | * the provided pointer. |
2788 | */ |
2789 | void avcodec_free_context(AVCodecContext **avctx); |
2790 | |
2791 | #if FF_API_GET_CONTEXT_DEFAULTS |
2792 | /** |
2793 | * @deprecated This function should not be used, as closing and opening a codec |
2794 | * context multiple time is not supported. A new codec context should be |
2795 | * allocated for each new use. |
2796 | */ |
2797 | int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); |
2798 | #endif |
2799 | |
2800 | /** |
2801 | * Get the AVClass for AVCodecContext. It can be used in combination with |
2802 | * AV_OPT_SEARCH_FAKE_OBJ for examining options. |
2803 | * |
2804 | * @see av_opt_find(). |
2805 | */ |
2806 | const AVClass *avcodec_get_class(void); |
2807 | |
2808 | #if FF_API_GET_FRAME_CLASS |
2809 | /** |
2810 | * @deprecated This function should not be used. |
2811 | */ |
2812 | attribute_deprecated |
2813 | const AVClass *avcodec_get_frame_class(void); |
2814 | #endif |
2815 | |
2816 | /** |
2817 | * Get the AVClass for AVSubtitleRect. It can be used in combination with |
2818 | * AV_OPT_SEARCH_FAKE_OBJ for examining options. |
2819 | * |
2820 | * @see av_opt_find(). |
2821 | */ |
2822 | const AVClass *avcodec_get_subtitle_rect_class(void); |
2823 | |
2824 | #if FF_API_COPY_CONTEXT |
2825 | /** |
2826 | * Copy the settings of the source AVCodecContext into the destination |
2827 | * AVCodecContext. The resulting destination codec context will be |
2828 | * unopened, i.e. you are required to call avcodec_open2() before you |
2829 | * can use this AVCodecContext to decode/encode video/audio data. |
2830 | * |
2831 | * @param dest target codec context, should be initialized with |
2832 | * avcodec_alloc_context3(NULL), but otherwise uninitialized |
2833 | * @param src source codec context |
2834 | * @return AVERROR() on error (e.g. memory allocation error), 0 on success |
2835 | * |
2836 | * @deprecated The semantics of this function are ill-defined and it should not |
2837 | * be used. If you need to transfer the stream parameters from one codec context |
2838 | * to another, use an intermediate AVCodecParameters instance and the |
2839 | * avcodec_parameters_from_context() / avcodec_parameters_to_context() |
2840 | * functions. |
2841 | */ |
2842 | attribute_deprecated |
2843 | int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); |
2844 | #endif |
2845 | |
2846 | /** |
2847 | * Fill the parameters struct based on the values from the supplied codec |
2848 | * context. Any allocated fields in par are freed and replaced with duplicates |
2849 | * of the corresponding fields in codec. |
2850 | * |
2851 | * @return >= 0 on success, a negative AVERROR code on failure |
2852 | */ |
2853 | int avcodec_parameters_from_context(AVCodecParameters *par, |
2854 | const AVCodecContext *codec); |
2855 | |
2856 | /** |
2857 | * Fill the codec context based on the values from the supplied codec |
2858 | * parameters. Any allocated fields in codec that have a corresponding field in |
2859 | * par are freed and replaced with duplicates of the corresponding field in par. |
2860 | * Fields in codec that do not have a counterpart in par are not touched. |
2861 | * |
2862 | * @return >= 0 on success, a negative AVERROR code on failure. |
2863 | */ |
2864 | int avcodec_parameters_to_context(AVCodecContext *codec, |
2865 | const AVCodecParameters *par); |
2866 | |
2867 | /** |
2868 | * Initialize the AVCodecContext to use the given AVCodec. Prior to using this |
2869 | * function the context has to be allocated with avcodec_alloc_context3(). |
2870 | * |
2871 | * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), |
2872 | * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for |
2873 | * retrieving a codec. |
2874 | * |
2875 | * @warning This function is not thread safe! |
2876 | * |
2877 | * @note Always call this function before using decoding routines (such as |
2878 | * @ref avcodec_receive_frame()). |
2879 | * |
2880 | * @code |
2881 | * av_dict_set(&opts, "b", "2.5M", 0); |
2882 | * codec = avcodec_find_decoder(AV_CODEC_ID_H264); |
2883 | * if (!codec) |
2884 | * exit(1); |
2885 | * |
2886 | * context = avcodec_alloc_context3(codec); |
2887 | * |
2888 | * if (avcodec_open2(context, codec, opts) < 0) |
2889 | * exit(1); |
2890 | * @endcode |
2891 | * |
2892 | * @param avctx The context to initialize. |
2893 | * @param codec The codec to open this context for. If a non-NULL codec has been |
2894 | * previously passed to avcodec_alloc_context3() or |
2895 | * for this context, then this parameter MUST be either NULL or |
2896 | * equal to the previously passed codec. |
2897 | * @param options A dictionary filled with AVCodecContext and codec-private options. |
2898 | * On return this object will be filled with options that were not found. |
2899 | * |
2900 | * @return zero on success, a negative value on error |
2901 | * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), |
2902 | * av_dict_set(), av_opt_find(). |
2903 | */ |
2904 | int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); |
2905 | |
2906 | /** |
2907 | * Close a given AVCodecContext and free all the data associated with it |
2908 | * (but not the AVCodecContext itself). |
2909 | * |
2910 | * Calling this function on an AVCodecContext that hasn't been opened will free |
2911 | * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL |
2912 | * codec. Subsequent calls will do nothing. |
2913 | * |
2914 | * @note Do not use this function. Use avcodec_free_context() to destroy a |
2915 | * codec context (either open or closed). Opening and closing a codec context |
2916 | * multiple times is not supported anymore -- use multiple codec contexts |
2917 | * instead. |
2918 | */ |
2919 | int avcodec_close(AVCodecContext *avctx); |
2920 | |
2921 | /** |
2922 | * Free all allocated data in the given subtitle struct. |
2923 | * |
2924 | * @param sub AVSubtitle to free. |
2925 | */ |
2926 | void avsubtitle_free(AVSubtitle *sub); |
2927 | |
2928 | /** |
2929 | * @} |
2930 | */ |
2931 | |
2932 | /** |
2933 | * @addtogroup lavc_decoding |
2934 | * @{ |
2935 | */ |
2936 | |
2937 | /** |
2938 | * The default callback for AVCodecContext.get_buffer2(). It is made public so |
2939 | * it can be called by custom get_buffer2() implementations for decoders without |
2940 | * AV_CODEC_CAP_DR1 set. |
2941 | */ |
2942 | int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); |
2943 | |
2944 | /** |
2945 | * The default callback for AVCodecContext.get_encode_buffer(). It is made public so |
2946 | * it can be called by custom get_encode_buffer() implementations for encoders without |
2947 | * AV_CODEC_CAP_DR1 set. |
2948 | */ |
2949 | int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); |
2950 | |
2951 | /** |
2952 | * Modify width and height values so that they will result in a memory |
2953 | * buffer that is acceptable for the codec if you do not use any horizontal |
2954 | * padding. |
2955 | * |
2956 | * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. |
2957 | */ |
2958 | void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); |
2959 | |
2960 | /** |
2961 | * Modify width and height values so that they will result in a memory |
2962 | * buffer that is acceptable for the codec if you also ensure that all |
2963 | * line sizes are a multiple of the respective linesize_align[i]. |
2964 | * |
2965 | * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. |
2966 | */ |
2967 | void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, |
2968 | int linesize_align[AV_NUM_DATA_POINTERS]); |
2969 | |
2970 | /** |
2971 | * Converts AVChromaLocation to swscale x/y chroma position. |
2972 | * |
2973 | * The positions represent the chroma (0,0) position in a coordinates system |
2974 | * with luma (0,0) representing the origin and luma(1,1) representing 256,256 |
2975 | * |
2976 | * @param xpos horizontal chroma sample position |
2977 | * @param ypos vertical chroma sample position |
2978 | */ |
2979 | int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); |
2980 | |
2981 | /** |
2982 | * Converts swscale x/y chroma position to AVChromaLocation. |
2983 | * |
2984 | * The positions represent the chroma (0,0) position in a coordinates system |
2985 | * with luma (0,0) representing the origin and luma(1,1) representing 256,256 |
2986 | * |
2987 | * @param xpos horizontal chroma sample position |
2988 | * @param ypos vertical chroma sample position |
2989 | */ |
2990 | enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); |
2991 | |
2992 | #if FF_API_OLD_ENCDEC |
2993 | /** |
2994 | * Decode the audio frame of size avpkt->size from avpkt->data into frame. |
2995 | * |
2996 | * Some decoders may support multiple frames in a single AVPacket. Such |
2997 | * decoders would then just decode the first frame and the return value would be |
2998 | * less than the packet size. In this case, avcodec_decode_audio4 has to be |
2999 | * called again with an AVPacket containing the remaining data in order to |
3000 | * decode the second frame, etc... Even if no frames are returned, the packet |
3001 | * needs to be fed to the decoder with remaining data until it is completely |
3002 | * consumed or an error occurs. |
3003 | * |
3004 | * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input |
3005 | * and output. This means that for some packets they will not immediately |
3006 | * produce decoded output and need to be flushed at the end of decoding to get |
3007 | * all the decoded data. Flushing is done by calling this function with packets |
3008 | * with avpkt->data set to NULL and avpkt->size set to 0 until it stops |
3009 | * returning samples. It is safe to flush even those decoders that are not |
3010 | * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. |
3011 | * |
3012 | * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE |
3013 | * larger than the actual read bytes because some optimized bitstream |
3014 | * readers read 32 or 64 bits at once and could read over the end. |
3015 | * |
3016 | * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() |
3017 | * before packets may be fed to the decoder. |
3018 | * |
3019 | * @param avctx the codec context |
3020 | * @param[out] frame The AVFrame in which to store decoded audio samples. |
3021 | * The decoder will allocate a buffer for the decoded frame by |
3022 | * calling the AVCodecContext.get_buffer2() callback. |
3023 | * When AVCodecContext.refcounted_frames is set to 1, the frame is |
3024 | * reference counted and the returned reference belongs to the |
3025 | * caller. The caller must release the frame using av_frame_unref() |
3026 | * when the frame is no longer needed. The caller may safely write |
3027 | * to the frame if av_frame_is_writable() returns 1. |
3028 | * When AVCodecContext.refcounted_frames is set to 0, the returned |
3029 | * reference belongs to the decoder and is valid only until the |
3030 | * next call to this function or until closing or flushing the |
3031 | * decoder. The caller may not write to it. |
3032 | * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is |
3033 | * non-zero. Note that this field being set to zero |
3034 | * does not mean that an error has occurred. For |
3035 | * decoders with AV_CODEC_CAP_DELAY set, no given decode |
3036 | * call is guaranteed to produce a frame. |
3037 | * @param[in] avpkt The input AVPacket containing the input buffer. |
3038 | * At least avpkt->data and avpkt->size should be set. Some |
3039 | * decoders might also require additional fields to be set. |
3040 | * @return A negative error code is returned if an error occurred during |
3041 | * decoding, otherwise the number of bytes consumed from the input |
3042 | * AVPacket is returned. |
3043 | * |
3044 | * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). |
3045 | */ |
3046 | attribute_deprecated |
3047 | int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, |
3048 | int *got_frame_ptr, const AVPacket *avpkt); |
3049 | |
3050 | /** |
3051 | * Decode the video frame of size avpkt->size from avpkt->data into picture. |
3052 | * Some decoders may support multiple frames in a single AVPacket, such |
3053 | * decoders would then just decode the first frame. |
3054 | * |
3055 | * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than |
3056 | * the actual read bytes because some optimized bitstream readers read 32 or 64 |
3057 | * bits at once and could read over the end. |
3058 | * |
3059 | * @warning The end of the input buffer buf should be set to 0 to ensure that |
3060 | * no overreading happens for damaged MPEG streams. |
3061 | * |
3062 | * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay |
3063 | * between input and output, these need to be fed with avpkt->data=NULL, |
3064 | * avpkt->size=0 at the end to return the remaining frames. |
3065 | * |
3066 | * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() |
3067 | * before packets may be fed to the decoder. |
3068 | * |
3069 | * @param avctx the codec context |
3070 | * @param[out] picture The AVFrame in which the decoded video frame will be stored. |
3071 | * Use av_frame_alloc() to get an AVFrame. The codec will |
3072 | * allocate memory for the actual bitmap by calling the |
3073 | * AVCodecContext.get_buffer2() callback. |
3074 | * When AVCodecContext.refcounted_frames is set to 1, the frame is |
3075 | * reference counted and the returned reference belongs to the |
3076 | * caller. The caller must release the frame using av_frame_unref() |
3077 | * when the frame is no longer needed. The caller may safely write |
3078 | * to the frame if av_frame_is_writable() returns 1. |
3079 | * When AVCodecContext.refcounted_frames is set to 0, the returned |
3080 | * reference belongs to the decoder and is valid only until the |
3081 | * next call to this function or until closing or flushing the |
3082 | * decoder. The caller may not write to it. |
3083 | * |
3084 | * @param[in] avpkt The input AVPacket containing the input buffer. |
3085 | * You can create such packet with av_init_packet() and by then setting |
3086 | * data and size, some decoders might in addition need other fields like |
3087 | * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least |
3088 | * fields possible. |
3089 | * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. |
3090 | * @return On error a negative value is returned, otherwise the number of bytes |
3091 | * used or zero if no frame could be decompressed. |
3092 | * |
3093 | * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). |
3094 | */ |
3095 | attribute_deprecated |
3096 | int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, |
3097 | int *got_picture_ptr, |
3098 | const AVPacket *avpkt); |
3099 | #endif |
3100 | |
3101 | /** |
3102 | * Decode a subtitle message. |
3103 | * Return a negative value on error, otherwise return the number of bytes used. |
3104 | * If no subtitle could be decompressed, got_sub_ptr is zero. |
3105 | * Otherwise, the subtitle is stored in *sub. |
3106 | * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for |
3107 | * simplicity, because the performance difference is expected to be negligible |
3108 | * and reusing a get_buffer written for video codecs would probably perform badly |
3109 | * due to a potentially very different allocation pattern. |
3110 | * |
3111 | * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input |
3112 | * and output. This means that for some packets they will not immediately |
3113 | * produce decoded output and need to be flushed at the end of decoding to get |
3114 | * all the decoded data. Flushing is done by calling this function with packets |
3115 | * with avpkt->data set to NULL and avpkt->size set to 0 until it stops |
3116 | * returning subtitles. It is safe to flush even those decoders that are not |
3117 | * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. |
3118 | * |
3119 | * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() |
3120 | * before packets may be fed to the decoder. |
3121 | * |
3122 | * @param avctx the codec context |
3123 | * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, |
3124 | * must be freed with avsubtitle_free if *got_sub_ptr is set. |
3125 | * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. |
3126 | * @param[in] avpkt The input AVPacket containing the input buffer. |
3127 | */ |
3128 | int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, |
3129 | int *got_sub_ptr, |
3130 | AVPacket *avpkt); |
3131 | |
3132 | /** |
3133 | * Supply raw packet data as input to a decoder. |
3134 | * |
3135 | * Internally, this call will copy relevant AVCodecContext fields, which can |
3136 | * influence decoding per-packet, and apply them when the packet is actually |
3137 | * decoded. (For example AVCodecContext.skip_frame, which might direct the |
3138 | * decoder to drop the frame contained by the packet sent with this function.) |
3139 | * |
3140 | * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE |
3141 | * larger than the actual read bytes because some optimized bitstream |
3142 | * readers read 32 or 64 bits at once and could read over the end. |
3143 | * |
3144 | * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) |
3145 | * on the same AVCodecContext. It will return unexpected results now |
3146 | * or in future libavcodec versions. |
3147 | * |
3148 | * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() |
3149 | * before packets may be fed to the decoder. |
3150 | * |
3151 | * @param avctx codec context |
3152 | * @param[in] avpkt The input AVPacket. Usually, this will be a single video |
3153 | * frame, or several complete audio frames. |
3154 | * Ownership of the packet remains with the caller, and the |
3155 | * decoder will not write to the packet. The decoder may create |
3156 | * a reference to the packet data (or copy it if the packet is |
3157 | * not reference-counted). |
3158 | * Unlike with older APIs, the packet is always fully consumed, |
3159 | * and if it contains multiple frames (e.g. some audio codecs), |
3160 | * will require you to call avcodec_receive_frame() multiple |
3161 | * times afterwards before you can send a new packet. |
3162 | * It can be NULL (or an AVPacket with data set to NULL and |
3163 | * size set to 0); in this case, it is considered a flush |
3164 | * packet, which signals the end of the stream. Sending the |
3165 | * first flush packet will return success. Subsequent ones are |
3166 | * unnecessary and will return AVERROR_EOF. If the decoder |
3167 | * still has frames buffered, it will return them after sending |
3168 | * a flush packet. |
3169 | * |
3170 | * @return 0 on success, otherwise negative error code: |
3171 | * AVERROR(EAGAIN): input is not accepted in the current state - user |
3172 | * must read output with avcodec_receive_frame() (once |
3173 | * all output is read, the packet should be resent, and |
3174 | * the call will not fail with EAGAIN). |
3175 | * AVERROR_EOF: the decoder has been flushed, and no new packets can |
3176 | * be sent to it (also returned if more than 1 flush |
3177 | * packet is sent) |
3178 | * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush |
3179 | * AVERROR(ENOMEM): failed to add packet to internal queue, or similar |
3180 | * other errors: legitimate decoding errors |
3181 | */ |
3182 | int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); |
3183 | |
3184 | /** |
3185 | * Return decoded output data from a decoder. |
3186 | * |
3187 | * @param avctx codec context |
3188 | * @param frame This will be set to a reference-counted video or audio |
3189 | * frame (depending on the decoder type) allocated by the |
3190 | * decoder. Note that the function will always call |
3191 | * av_frame_unref(frame) before doing anything else. |
3192 | * |
3193 | * @return |
3194 | * 0: success, a frame was returned |
3195 | * AVERROR(EAGAIN): output is not available in this state - user must try |
3196 | * to send new input |
3197 | * AVERROR_EOF: the decoder has been fully flushed, and there will be |
3198 | * no more output frames |
3199 | * AVERROR(EINVAL): codec not opened, or it is an encoder |
3200 | * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters |
3201 | * with respect to first decoded frame. Applicable |
3202 | * when flag AV_CODEC_FLAG_DROPCHANGED is set. |
3203 | * other negative values: legitimate decoding errors |
3204 | */ |
3205 | int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); |
3206 | |
3207 | /** |
3208 | * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() |
3209 | * to retrieve buffered output packets. |
3210 | * |
3211 | * @param avctx codec context |
3212 | * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. |
3213 | * Ownership of the frame remains with the caller, and the |
3214 | * encoder will not write to the frame. The encoder may create |
3215 | * a reference to the frame data (or copy it if the frame is |
3216 | * not reference-counted). |
3217 | * It can be NULL, in which case it is considered a flush |
3218 | * packet. This signals the end of the stream. If the encoder |
3219 | * still has packets buffered, it will return them after this |
3220 | * call. Once flushing mode has been entered, additional flush |
3221 | * packets are ignored, and sending frames will return |
3222 | * AVERROR_EOF. |
3223 | * |
3224 | * For audio: |
3225 | * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame |
3226 | * can have any number of samples. |
3227 | * If it is not set, frame->nb_samples must be equal to |
3228 | * avctx->frame_size for all frames except the last. |
3229 | * The final frame may be smaller than avctx->frame_size. |
3230 | * @return 0 on success, otherwise negative error code: |
3231 | * AVERROR(EAGAIN): input is not accepted in the current state - user |
3232 | * must read output with avcodec_receive_packet() (once |
3233 | * all output is read, the packet should be resent, and |
3234 | * the call will not fail with EAGAIN). |
3235 | * AVERROR_EOF: the encoder has been flushed, and no new frames can |
3236 | * be sent to it |
3237 | * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a |
3238 | * decoder, or requires flush |
3239 | * AVERROR(ENOMEM): failed to add packet to internal queue, or similar |
3240 | * other errors: legitimate encoding errors |
3241 | */ |
3242 | int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); |
3243 | |
3244 | /** |
3245 | * Read encoded data from the encoder. |
3246 | * |
3247 | * @param avctx codec context |
3248 | * @param avpkt This will be set to a reference-counted packet allocated by the |
3249 | * encoder. Note that the function will always call |
3250 | * av_packet_unref(avpkt) before doing anything else. |
3251 | * @return 0 on success, otherwise negative error code: |
3252 | * AVERROR(EAGAIN): output is not available in the current state - user |
3253 | * must try to send input |
3254 | * AVERROR_EOF: the encoder has been fully flushed, and there will be |
3255 | * no more output packets |
3256 | * AVERROR(EINVAL): codec not opened, or it is a decoder |
3257 | * other errors: legitimate encoding errors |
3258 | */ |
3259 | int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); |
3260 | |
3261 | /** |
3262 | * Create and return a AVHWFramesContext with values adequate for hardware |
3263 | * decoding. This is meant to get called from the get_format callback, and is |
3264 | * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. |
3265 | * This API is for decoding with certain hardware acceleration modes/APIs only. |
3266 | * |
3267 | * The returned AVHWFramesContext is not initialized. The caller must do this |
3268 | * with av_hwframe_ctx_init(). |
3269 | * |
3270 | * Calling this function is not a requirement, but makes it simpler to avoid |
3271 | * codec or hardware API specific details when manually allocating frames. |
3272 | * |
3273 | * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, |
3274 | * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes |
3275 | * it unnecessary to call this function or having to care about |
3276 | * AVHWFramesContext initialization at all. |
3277 | * |
3278 | * There are a number of requirements for calling this function: |
3279 | * |
3280 | * - It must be called from get_format with the same avctx parameter that was |
3281 | * passed to get_format. Calling it outside of get_format is not allowed, and |
3282 | * can trigger undefined behavior. |
3283 | * - The function is not always supported (see description of return values). |
3284 | * Even if this function returns successfully, hwaccel initialization could |
3285 | * fail later. (The degree to which implementations check whether the stream |
3286 | * is actually supported varies. Some do this check only after the user's |
3287 | * get_format callback returns.) |
3288 | * - The hw_pix_fmt must be one of the choices suggested by get_format. If the |
3289 | * user decides to use a AVHWFramesContext prepared with this API function, |
3290 | * the user must return the same hw_pix_fmt from get_format. |
3291 | * - The device_ref passed to this function must support the given hw_pix_fmt. |
3292 | * - After calling this API function, it is the user's responsibility to |
3293 | * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), |
3294 | * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done |
3295 | * before returning from get_format (this is implied by the normal |
3296 | * AVCodecContext.hw_frames_ctx API rules). |
3297 | * - The AVHWFramesContext parameters may change every time time get_format is |
3298 | * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So |
3299 | * you are inherently required to go through this process again on every |
3300 | * get_format call. |
3301 | * - It is perfectly possible to call this function without actually using |
3302 | * the resulting AVHWFramesContext. One use-case might be trying to reuse a |
3303 | * previously initialized AVHWFramesContext, and calling this API function |
3304 | * only to test whether the required frame parameters have changed. |
3305 | * - Fields that use dynamically allocated values of any kind must not be set |
3306 | * by the user unless setting them is explicitly allowed by the documentation. |
3307 | * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, |
3308 | * the new free callback must call the potentially set previous free callback. |
3309 | * This API call may set any dynamically allocated fields, including the free |
3310 | * callback. |
3311 | * |
3312 | * The function will set at least the following fields on AVHWFramesContext |
3313 | * (potentially more, depending on hwaccel API): |
3314 | * |
3315 | * - All fields set by av_hwframe_ctx_alloc(). |
3316 | * - Set the format field to hw_pix_fmt. |
3317 | * - Set the sw_format field to the most suited and most versatile format. (An |
3318 | * implication is that this will prefer generic formats over opaque formats |
3319 | * with arbitrary restrictions, if possible.) |
3320 | * - Set the width/height fields to the coded frame size, rounded up to the |
3321 | * API-specific minimum alignment. |
3322 | * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size |
3323 | * field to the number of maximum reference surfaces possible with the codec, |
3324 | * plus 1 surface for the user to work (meaning the user can safely reference |
3325 | * at most 1 decoded surface at a time), plus additional buffering introduced |
3326 | * by frame threading. If the hwaccel does not require pre-allocation, the |
3327 | * field is left to 0, and the decoder will allocate new surfaces on demand |
3328 | * during decoding. |
3329 | * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying |
3330 | * hardware API. |
3331 | * |
3332 | * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but |
3333 | * with basic frame parameters set. |
3334 | * |
3335 | * The function is stateless, and does not change the AVCodecContext or the |
3336 | * device_ref AVHWDeviceContext. |
3337 | * |
3338 | * @param avctx The context which is currently calling get_format, and which |
3339 | * implicitly contains all state needed for filling the returned |
3340 | * AVHWFramesContext properly. |
3341 | * @param device_ref A reference to the AVHWDeviceContext describing the device |
3342 | * which will be used by the hardware decoder. |
3343 | * @param hw_pix_fmt The hwaccel format you are going to return from get_format. |
3344 | * @param out_frames_ref On success, set to a reference to an _uninitialized_ |
3345 | * AVHWFramesContext, created from the given device_ref. |
3346 | * Fields will be set to values required for decoding. |
3347 | * Not changed if an error is returned. |
3348 | * @return zero on success, a negative value on error. The following error codes |
3349 | * have special semantics: |
3350 | * AVERROR(ENOENT): the decoder does not support this functionality. Setup |
3351 | * is always manual, or it is a decoder which does not |
3352 | * support setting AVCodecContext.hw_frames_ctx at all, |
3353 | * or it is a software format. |
3354 | * AVERROR(EINVAL): it is known that hardware decoding is not supported for |
3355 | * this configuration, or the device_ref is not supported |
3356 | * for the hwaccel referenced by hw_pix_fmt. |
3357 | */ |
3358 | int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, |
3359 | AVBufferRef *device_ref, |
3360 | enum AVPixelFormat hw_pix_fmt, |
3361 | AVBufferRef **out_frames_ref); |
3362 | |
3363 | |
3364 | |
3365 | /** |
3366 | * @defgroup lavc_parsing Frame parsing |
3367 | * @{ |
3368 | */ |
3369 | |
3370 | enum AVPictureStructure { |
3371 | AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown |
3372 | AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field |
3373 | AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field |
3374 | AV_PICTURE_STRUCTURE_FRAME, //< coded as frame |
3375 | }; |
3376 | |
3377 | typedef struct AVCodecParserContext { |
3378 | void *priv_data; |
3379 | struct AVCodecParser *parser; |
3380 | int64_t frame_offset; /* offset of the current frame */ |
3381 | int64_t cur_offset; /* current offset |
3382 | (incremented by each av_parser_parse()) */ |
3383 | int64_t next_frame_offset; /* offset of the next frame */ |
3384 | /* video info */ |
3385 | int pict_type; /* XXX: Put it back in AVCodecContext. */ |
3386 | /** |
3387 | * This field is used for proper frame duration computation in lavf. |
3388 | * It signals, how much longer the frame duration of the current frame |
3389 | * is compared to normal frame duration. |
3390 | * |
3391 | * frame_duration = (1 + repeat_pict) * time_base |
3392 | * |
3393 | * It is used by codecs like H.264 to display telecined material. |
3394 | */ |
3395 | int repeat_pict; /* XXX: Put it back in AVCodecContext. */ |
3396 | int64_t pts; /* pts of the current frame */ |
3397 | int64_t dts; /* dts of the current frame */ |
3398 | |
3399 | /* private data */ |
3400 | int64_t last_pts; |
3401 | int64_t last_dts; |
3402 | int fetch_timestamp; |
3403 | |
3404 | #define AV_PARSER_PTS_NB 4 |
3405 | int cur_frame_start_index; |
3406 | int64_t cur_frame_offset[AV_PARSER_PTS_NB]; |
3407 | int64_t cur_frame_pts[AV_PARSER_PTS_NB]; |
3408 | int64_t cur_frame_dts[AV_PARSER_PTS_NB]; |
3409 | |
3410 | int flags; |
3411 | #define PARSER_FLAG_COMPLETE_FRAMES 0x0001 |
3412 | #define PARSER_FLAG_ONCE 0x0002 |
3413 | /// Set if the parser has a valid file offset |
3414 | #define PARSER_FLAG_FETCHED_OFFSET 0x0004 |
3415 | #define PARSER_FLAG_USE_CODEC_TS 0x1000 |
3416 | |
3417 | int64_t offset; ///< byte offset from starting packet start |
3418 | int64_t cur_frame_end[AV_PARSER_PTS_NB]; |
3419 | |
3420 | /** |
3421 | * Set by parser to 1 for key frames and 0 for non-key frames. |
3422 | * It is initialized to -1, so if the parser doesn't set this flag, |
3423 | * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames |
3424 | * will be used. |
3425 | */ |
3426 | int key_frame; |
3427 | |
3428 | #if FF_API_CONVERGENCE_DURATION |
3429 | /** |
3430 | * @deprecated unused |
3431 | */ |
3432 | attribute_deprecated |
3433 | int64_t convergence_duration; |
3434 | #endif |
3435 | |
3436 | // Timestamp generation support: |
3437 | /** |
3438 | * Synchronization point for start of timestamp generation. |
3439 | * |
3440 | * Set to >0 for sync point, 0 for no sync point and <0 for undefined |
3441 | * (default). |
3442 | * |
3443 | * For example, this corresponds to presence of H.264 buffering period |
3444 | * SEI message. |
3445 | */ |
3446 | int dts_sync_point; |
3447 | |
3448 | /** |
3449 | * Offset of the current timestamp against last timestamp sync point in |
3450 | * units of AVCodecContext.time_base. |
3451 | * |
3452 | * Set to INT_MIN when dts_sync_point unused. Otherwise, it must |
3453 | * contain a valid timestamp offset. |
3454 | * |
3455 | * Note that the timestamp of sync point has usually a nonzero |
3456 | * dts_ref_dts_delta, which refers to the previous sync point. Offset of |
3457 | * the next frame after timestamp sync point will be usually 1. |
3458 | * |
3459 | * For example, this corresponds to H.264 cpb_removal_delay. |
3460 | */ |
3461 | int dts_ref_dts_delta; |
3462 | |
3463 | /** |
3464 | * Presentation delay of current frame in units of AVCodecContext.time_base. |
3465 | * |
3466 | * Set to INT_MIN when dts_sync_point unused. Otherwise, it must |
3467 | * contain valid non-negative timestamp delta (presentation time of a frame |
3468 | * must not lie in the past). |
3469 | * |
3470 | * This delay represents the difference between decoding and presentation |
3471 | * time of the frame. |
3472 | * |
3473 | * For example, this corresponds to H.264 dpb_output_delay. |
3474 | */ |
3475 | int pts_dts_delta; |
3476 | |
3477 | /** |
3478 | * Position of the packet in file. |
3479 | * |
3480 | * Analogous to cur_frame_pts/dts |
3481 | */ |
3482 | int64_t cur_frame_pos[AV_PARSER_PTS_NB]; |
3483 | |
3484 | /** |
3485 | * Byte position of currently parsed frame in stream. |
3486 | */ |
3487 | int64_t pos; |
3488 | |
3489 | /** |
3490 | * Previous frame byte position. |
3491 | */ |
3492 | int64_t last_pos; |
3493 | |
3494 | /** |
3495 | * Duration of the current frame. |
3496 | * For audio, this is in units of 1 / AVCodecContext.sample_rate. |
3497 | * For all other types, this is in units of AVCodecContext.time_base. |
3498 | */ |
3499 | int duration; |
3500 | |
3501 | enum AVFieldOrder field_order; |
3502 | |
3503 | /** |
3504 | * Indicate whether a picture is coded as a frame, top field or bottom field. |
3505 | * |
3506 | * For example, H.264 field_pic_flag equal to 0 corresponds to |
3507 | * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag |
3508 | * equal to 1 and bottom_field_flag equal to 0 corresponds to |
3509 | * AV_PICTURE_STRUCTURE_TOP_FIELD. |
3510 | */ |
3511 | enum AVPictureStructure picture_structure; |
3512 | |
3513 | /** |
3514 | * Picture number incremented in presentation or output order. |
3515 | * This field may be reinitialized at the first picture of a new sequence. |
3516 | * |
3517 | * For example, this corresponds to H.264 PicOrderCnt. |
3518 | */ |
3519 | int output_picture_number; |
3520 | |
3521 | /** |
3522 | * Dimensions of the decoded video intended for presentation. |
3523 | */ |
3524 | int width; |
3525 | int height; |
3526 | |
3527 | /** |
3528 | * Dimensions of the coded video. |
3529 | */ |
3530 | int coded_width; |
3531 | int coded_height; |
3532 | |
3533 | /** |
3534 | * The format of the coded data, corresponds to enum AVPixelFormat for video |
3535 | * and for enum AVSampleFormat for audio. |
3536 | * |
3537 | * Note that a decoder can have considerable freedom in how exactly it |
3538 | * decodes the data, so the format reported here might be different from the |
3539 | * one returned by a decoder. |
3540 | */ |
3541 | int format; |
3542 | } AVCodecParserContext; |
3543 | |
3544 | typedef struct AVCodecParser { |
3545 | int codec_ids[5]; /* several codec IDs are permitted */ |
3546 | int priv_data_size; |
3547 | int (*parser_init)(AVCodecParserContext *s); |
3548 | /* This callback never returns an error, a negative value means that |
3549 | * the frame start was in a previous packet. */ |
3550 | int (*parser_parse)(AVCodecParserContext *s, |
3551 | AVCodecContext *avctx, |
3552 | const uint8_t **poutbuf, int *poutbuf_size, |
3553 | const uint8_t *buf, int buf_size); |
3554 | void (*parser_close)(AVCodecParserContext *s); |
3555 | int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); |
3556 | #if FF_API_NEXT |
3557 | attribute_deprecated |
3558 | struct AVCodecParser *next; |
3559 | #endif |
3560 | } AVCodecParser; |
3561 | |
3562 | /** |
3563 | * Iterate over all registered codec parsers. |
3564 | * |
3565 | * @param opaque a pointer where libavcodec will store the iteration state. Must |
3566 | * point to NULL to start the iteration. |
3567 | * |
3568 | * @return the next registered codec parser or NULL when the iteration is |
3569 | * finished |
3570 | */ |
3571 | const AVCodecParser *av_parser_iterate(void **opaque); |
3572 | |
3573 | #if FF_API_NEXT |
3574 | attribute_deprecated |
3575 | AVCodecParser *av_parser_next(const AVCodecParser *c); |
3576 | |
3577 | attribute_deprecated |
3578 | void av_register_codec_parser(AVCodecParser *parser); |
3579 | #endif |
3580 | AVCodecParserContext *av_parser_init(int codec_id); |
3581 | |
3582 | /** |
3583 | * Parse a packet. |
3584 | * |
3585 | * @param s parser context. |
3586 | * @param avctx codec context. |
3587 | * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. |
3588 | * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. |
3589 | * @param buf input buffer. |
3590 | * @param buf_size buffer size in bytes without the padding. I.e. the full buffer |
3591 | size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. |
3592 | To signal EOF, this should be 0 (so that the last frame |
3593 | can be output). |
3594 | * @param pts input presentation timestamp. |
3595 | * @param dts input decoding timestamp. |
3596 | * @param pos input byte position in stream. |
3597 | * @return the number of bytes of the input bitstream used. |
3598 | * |
3599 | * Example: |
3600 | * @code |
3601 | * while(in_len){ |
3602 | * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, |
3603 | * in_data, in_len, |
3604 | * pts, dts, pos); |
3605 | * in_data += len; |
3606 | * in_len -= len; |
3607 | * |
3608 | * if(size) |
3609 | * decode_frame(data, size); |
3610 | * } |
3611 | * @endcode |
3612 | */ |
3613 | int av_parser_parse2(AVCodecParserContext *s, |
3614 | AVCodecContext *avctx, |
3615 | uint8_t **poutbuf, int *poutbuf_size, |
3616 | const uint8_t *buf, int buf_size, |
3617 | int64_t pts, int64_t dts, |
3618 | int64_t pos); |
3619 | |
3620 | #if FF_API_PARSER_CHANGE |
3621 | /** |
3622 | * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed |
3623 | * @deprecated Use dump_extradata, remove_extra or extract_extradata |
3624 | * bitstream filters instead. |
3625 | */ |
3626 | attribute_deprecated |
3627 | int av_parser_change(AVCodecParserContext *s, |
3628 | AVCodecContext *avctx, |
3629 | uint8_t **poutbuf, int *poutbuf_size, |
3630 | const uint8_t *buf, int buf_size, int keyframe); |
3631 | #endif |
3632 | void av_parser_close(AVCodecParserContext *s); |
3633 | |
3634 | /** |
3635 | * @} |
3636 | * @} |
3637 | */ |
3638 | |
3639 | /** |
3640 | * @addtogroup lavc_encoding |
3641 | * @{ |
3642 | */ |
3643 | |
3644 | #if FF_API_OLD_ENCDEC |
3645 | /** |
3646 | * Encode a frame of audio. |
3647 | * |
3648 | * Takes input samples from frame and writes the next output packet, if |
3649 | * available, to avpkt. The output packet does not necessarily contain data for |
3650 | * the most recent frame, as encoders can delay, split, and combine input frames |
3651 | * internally as needed. |
3652 | * |
3653 | * @param avctx codec context |
3654 | * @param avpkt output AVPacket. |
3655 | * The user can supply an output buffer by setting |
3656 | * avpkt->data and avpkt->size prior to calling the |
3657 | * function, but if the size of the user-provided data is not |
3658 | * large enough, encoding will fail. If avpkt->data and |
3659 | * avpkt->size are set, avpkt->destruct must also be set. All |
3660 | * other AVPacket fields will be reset by the encoder using |
3661 | * av_init_packet(). If avpkt->data is NULL, the encoder will |
3662 | * allocate it. The encoder will set avpkt->size to the size |
3663 | * of the output packet. |
3664 | * |
3665 | * If this function fails or produces no output, avpkt will be |
3666 | * freed using av_packet_unref(). |
3667 | * @param[in] frame AVFrame containing the raw audio data to be encoded. |
3668 | * May be NULL when flushing an encoder that has the |
3669 | * AV_CODEC_CAP_DELAY capability set. |
3670 | * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame |
3671 | * can have any number of samples. |
3672 | * If it is not set, frame->nb_samples must be equal to |
3673 | * avctx->frame_size for all frames except the last. |
3674 | * The final frame may be smaller than avctx->frame_size. |
3675 | * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the |
3676 | * output packet is non-empty, and to 0 if it is |
3677 | * empty. If the function returns an error, the |
3678 | * packet can be assumed to be invalid, and the |
3679 | * value of got_packet_ptr is undefined and should |
3680 | * not be used. |
3681 | * @return 0 on success, negative error code on failure |
3682 | * |
3683 | * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. |
3684 | * If allowed and required, set AVCodecContext.get_encode_buffer to |
3685 | * a custom function to pass user supplied output buffers. |
3686 | */ |
3687 | attribute_deprecated |
3688 | int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, |
3689 | const AVFrame *frame, int *got_packet_ptr); |
3690 | |
3691 | /** |
3692 | * Encode a frame of video. |
3693 | * |
3694 | * Takes input raw video data from frame and writes the next output packet, if |
3695 | * available, to avpkt. The output packet does not necessarily contain data for |
3696 | * the most recent frame, as encoders can delay and reorder input frames |
3697 | * internally as needed. |
3698 | * |
3699 | * @param avctx codec context |
3700 | * @param avpkt output AVPacket. |
3701 | * The user can supply an output buffer by setting |
3702 | * avpkt->data and avpkt->size prior to calling the |
3703 | * function, but if the size of the user-provided data is not |
3704 | * large enough, encoding will fail. All other AVPacket fields |
3705 | * will be reset by the encoder using av_init_packet(). If |
3706 | * avpkt->data is NULL, the encoder will allocate it. |
3707 | * The encoder will set avpkt->size to the size of the |
3708 | * output packet. The returned data (if any) belongs to the |
3709 | * caller, he is responsible for freeing it. |
3710 | * |
3711 | * If this function fails or produces no output, avpkt will be |
3712 | * freed using av_packet_unref(). |
3713 | * @param[in] frame AVFrame containing the raw video data to be encoded. |
3714 | * May be NULL when flushing an encoder that has the |
3715 | * AV_CODEC_CAP_DELAY capability set. |
3716 | * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the |
3717 | * output packet is non-empty, and to 0 if it is |
3718 | * empty. If the function returns an error, the |
3719 | * packet can be assumed to be invalid, and the |
3720 | * value of got_packet_ptr is undefined and should |
3721 | * not be used. |
3722 | * @return 0 on success, negative error code on failure |
3723 | * |
3724 | * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. |
3725 | * If allowed and required, set AVCodecContext.get_encode_buffer to |
3726 | * a custom function to pass user supplied output buffers. |
3727 | */ |
3728 | attribute_deprecated |
3729 | int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, |
3730 | const AVFrame *frame, int *got_packet_ptr); |
3731 | #endif |
3732 | |
3733 | int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
3734 | const AVSubtitle *sub); |
3735 | |
3736 | |
3737 | /** |
3738 | * @} |
3739 | */ |
3740 | |
3741 | #if FF_API_AVPICTURE |
3742 | /** |
3743 | * @addtogroup lavc_picture |
3744 | * @{ |
3745 | */ |
3746 | |
3747 | /** |
3748 | * @deprecated unused |
3749 | */ |
3750 | attribute_deprecated |
3751 | int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); |
3752 | |
3753 | /** |
3754 | * @deprecated unused |
3755 | */ |
3756 | attribute_deprecated |
3757 | void avpicture_free(AVPicture *picture); |
3758 | |
3759 | /** |
3760 | * @deprecated use av_image_fill_arrays() instead. |
3761 | */ |
3762 | attribute_deprecated |
3763 | int avpicture_fill(AVPicture *picture, const uint8_t *ptr, |
3764 | enum AVPixelFormat pix_fmt, int width, int height); |
3765 | |
3766 | /** |
3767 | * @deprecated use av_image_copy_to_buffer() instead. |
3768 | */ |
3769 | attribute_deprecated |
3770 | int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, |
3771 | int width, int height, |
3772 | unsigned char *dest, int dest_size); |
3773 | |
3774 | /** |
3775 | * @deprecated use av_image_get_buffer_size() instead. |
3776 | */ |
3777 | attribute_deprecated |
3778 | int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); |
3779 | |
3780 | /** |
3781 | * @deprecated av_image_copy() instead. |
3782 | */ |
3783 | attribute_deprecated |
3784 | void av_picture_copy(AVPicture *dst, const AVPicture *src, |
3785 | enum AVPixelFormat pix_fmt, int width, int height); |
3786 | |
3787 | /** |
3788 | * @deprecated unused |
3789 | */ |
3790 | attribute_deprecated |
3791 | int av_picture_crop(AVPicture *dst, const AVPicture *src, |
3792 | enum AVPixelFormat pix_fmt, int top_band, int left_band); |
3793 | |
3794 | /** |
3795 | * @deprecated unused |
3796 | */ |
3797 | attribute_deprecated |
3798 | int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, |
3799 | int padtop, int padbottom, int padleft, int padright, int *color); |
3800 | |
3801 | /** |
3802 | * @} |
3803 | */ |
3804 | #endif |
3805 | |
3806 | /** |
3807 | * @defgroup lavc_misc Utility functions |
3808 | * @ingroup libavc |
3809 | * |
3810 | * Miscellaneous utility functions related to both encoding and decoding |
3811 | * (or neither). |
3812 | * @{ |
3813 | */ |
3814 | |
3815 | /** |
3816 | * @defgroup lavc_misc_pixfmt Pixel formats |
3817 | * |
3818 | * Functions for working with pixel formats. |
3819 | * @{ |
3820 | */ |
3821 | |
3822 | #if FF_API_GETCHROMA |
3823 | /** |
3824 | * @deprecated Use av_pix_fmt_get_chroma_sub_sample |
3825 | */ |
3826 | |
3827 | attribute_deprecated |
3828 | void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); |
3829 | #endif |
3830 | |
3831 | /** |
3832 | * Return a value representing the fourCC code associated to the |
3833 | * pixel format pix_fmt, or 0 if no associated fourCC code can be |
3834 | * found. |
3835 | */ |
3836 | unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); |
3837 | |
3838 | /** |
3839 | * Find the best pixel format to convert to given a certain source pixel |
3840 | * format. When converting from one pixel format to another, information loss |
3841 | * may occur. For example, when converting from RGB24 to GRAY, the color |
3842 | * information will be lost. Similarly, other losses occur when converting from |
3843 | * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of |
3844 | * the given pixel formats should be used to suffer the least amount of loss. |
3845 | * The pixel formats from which it chooses one, are determined by the |
3846 | * pix_fmt_list parameter. |
3847 | * |
3848 | * |
3849 | * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from |
3850 | * @param[in] src_pix_fmt source pixel format |
3851 | * @param[in] has_alpha Whether the source pixel format alpha channel is used. |
3852 | * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. |
3853 | * @return The best pixel format to convert to or -1 if none was found. |
3854 | */ |
3855 | enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, |
3856 | enum AVPixelFormat src_pix_fmt, |
3857 | int has_alpha, int *loss_ptr); |
3858 | |
3859 | #if FF_API_AVCODEC_PIX_FMT |
3860 | /** |
3861 | * @deprecated see av_get_pix_fmt_loss() |
3862 | */ |
3863 | attribute_deprecated |
3864 | int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, |
3865 | int has_alpha); |
3866 | /** |
3867 | * @deprecated see av_find_best_pix_fmt_of_2() |
3868 | */ |
3869 | attribute_deprecated |
3870 | enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, |
3871 | enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); |
3872 | |
3873 | attribute_deprecated |
3874 | enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, |
3875 | enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); |
3876 | #endif |
3877 | |
3878 | enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); |
3879 | |
3880 | /** |
3881 | * @} |
3882 | */ |
3883 | |
3884 | #if FF_API_TAG_STRING |
3885 | /** |
3886 | * Put a string representing the codec tag codec_tag in buf. |
3887 | * |
3888 | * @param buf buffer to place codec tag in |
3889 | * @param buf_size size in bytes of buf |
3890 | * @param codec_tag codec tag to assign |
3891 | * @return the length of the string that would have been generated if |
3892 | * enough space had been available, excluding the trailing null |
3893 | * |
3894 | * @deprecated see av_fourcc_make_string() and av_fourcc2str(). |
3895 | */ |
3896 | attribute_deprecated |
3897 | size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); |
3898 | #endif |
3899 | |
3900 | void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); |
3901 | |
3902 | /** |
3903 | * Return a name for the specified profile, if available. |
3904 | * |
3905 | * @param codec the codec that is searched for the given profile |
3906 | * @param profile the profile value for which a name is requested |
3907 | * @return A name for the profile if found, NULL otherwise. |
3908 | */ |
3909 | const char *av_get_profile_name(const AVCodec *codec, int profile); |
3910 | |
3911 | /** |
3912 | * Return a name for the specified profile, if available. |
3913 | * |
3914 | * @param codec_id the ID of the codec to which the requested profile belongs |
3915 | * @param profile the profile value for which a name is requested |
3916 | * @return A name for the profile if found, NULL otherwise. |
3917 | * |
3918 | * @note unlike av_get_profile_name(), which searches a list of profiles |
3919 | * supported by a specific decoder or encoder implementation, this |
3920 | * function searches the list of profiles from the AVCodecDescriptor |
3921 | */ |
3922 | const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); |
3923 | |
3924 | int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); |
3925 | int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); |
3926 | //FIXME func typedef |
3927 | |
3928 | /** |
3929 | * Fill AVFrame audio data and linesize pointers. |
3930 | * |
3931 | * The buffer buf must be a preallocated buffer with a size big enough |
3932 | * to contain the specified samples amount. The filled AVFrame data |
3933 | * pointers will point to this buffer. |
3934 | * |
3935 | * AVFrame extended_data channel pointers are allocated if necessary for |
3936 | * planar audio. |
3937 | * |
3938 | * @param frame the AVFrame |
3939 | * frame->nb_samples must be set prior to calling the |
3940 | * function. This function fills in frame->data, |
3941 | * frame->extended_data, frame->linesize[0]. |
3942 | * @param nb_channels channel count |
3943 | * @param sample_fmt sample format |
3944 | * @param buf buffer to use for frame data |
3945 | * @param buf_size size of buffer |
3946 | * @param align plane size sample alignment (0 = default) |
3947 | * @return >=0 on success, negative error code on failure |
3948 | * @todo return the size in bytes required to store the samples in |
3949 | * case of success, at the next libavutil bump |
3950 | */ |
3951 | int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, |
3952 | enum AVSampleFormat sample_fmt, const uint8_t *buf, |
3953 | int buf_size, int align); |
3954 | |
3955 | /** |
3956 | * Reset the internal codec state / flush internal buffers. Should be called |
3957 | * e.g. when seeking or when switching to a different stream. |
3958 | * |
3959 | * @note for decoders, when refcounted frames are not used |
3960 | * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously |
3961 | * returned from the decoder. When refcounted frames are used, the decoder just |
3962 | * releases any references it might keep internally, but the caller's reference |
3963 | * remains valid. |
3964 | * |
3965 | * @note for encoders, this function will only do something if the encoder |
3966 | * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder |
3967 | * will drain any remaining packets, and can then be re-used for a different |
3968 | * stream (as opposed to sending a null frame which will leave the encoder |
3969 | * in a permanent EOF state after draining). This can be desirable if the |
3970 | * cost of tearing down and replacing the encoder instance is high. |
3971 | */ |
3972 | void avcodec_flush_buffers(AVCodecContext *avctx); |
3973 | |
3974 | /** |
3975 | * Return codec bits per sample. |
3976 | * |
3977 | * @param[in] codec_id the codec |
3978 | * @return Number of bits per sample or zero if unknown for the given codec. |
3979 | */ |
3980 | int av_get_bits_per_sample(enum AVCodecID codec_id); |
3981 | |
3982 | /** |
3983 | * Return the PCM codec associated with a sample format. |
3984 | * @param be endianness, 0 for little, 1 for big, |
3985 | * -1 (or anything else) for native |
3986 | * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE |
3987 | */ |
3988 | enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); |
3989 | |
3990 | /** |
3991 | * Return codec bits per sample. |
3992 | * Only return non-zero if the bits per sample is exactly correct, not an |
3993 | * approximation. |
3994 | * |
3995 | * @param[in] codec_id the codec |
3996 | * @return Number of bits per sample or zero if unknown for the given codec. |
3997 | */ |
3998 | int av_get_exact_bits_per_sample(enum AVCodecID codec_id); |
3999 | |
4000 | /** |
4001 | * Return audio frame duration. |
4002 | * |
4003 | * @param avctx codec context |
4004 | * @param frame_bytes size of the frame, or 0 if unknown |
4005 | * @return frame duration, in samples, if known. 0 if not able to |
4006 | * determine. |
4007 | */ |
4008 | int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); |
4009 | |
4010 | /** |
4011 | * This function is the same as av_get_audio_frame_duration(), except it works |
4012 | * with AVCodecParameters instead of an AVCodecContext. |
4013 | */ |
4014 | int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); |
4015 | |
4016 | #if FF_API_OLD_BSF |
4017 | typedef struct AVBitStreamFilterContext { |
4018 | void *priv_data; |
4019 | const struct AVBitStreamFilter *filter; |
4020 | AVCodecParserContext *parser; |
4021 | struct AVBitStreamFilterContext *next; |
4022 | /** |
4023 | * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). |
4024 | * Not for access by library users. |
4025 | */ |
4026 | char *args; |
4027 | } AVBitStreamFilterContext; |
4028 | |
4029 | /** |
4030 | * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) |
4031 | * is deprecated. Use the new bitstream filtering API (using AVBSFContext). |
4032 | */ |
4033 | attribute_deprecated |
4034 | void av_register_bitstream_filter(AVBitStreamFilter *bsf); |
4035 | /** |
4036 | * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) |
4037 | * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() |
4038 | * from the new bitstream filtering API (using AVBSFContext). |
4039 | */ |
4040 | attribute_deprecated |
4041 | AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); |
4042 | /** |
4043 | * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) |
4044 | * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the |
4045 | * new bitstream filtering API (using AVBSFContext). |
4046 | */ |
4047 | attribute_deprecated |
4048 | int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, |
4049 | AVCodecContext *avctx, const char *args, |
4050 | uint8_t **poutbuf, int *poutbuf_size, |
4051 | const uint8_t *buf, int buf_size, int keyframe); |
4052 | /** |
4053 | * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) |
4054 | * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using |
4055 | * AVBSFContext). |
4056 | */ |
4057 | attribute_deprecated |
4058 | void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); |
4059 | /** |
4060 | * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) |
4061 | * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using |
4062 | * AVBSFContext). |
4063 | */ |
4064 | attribute_deprecated |
4065 | const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); |
4066 | #endif |
4067 | |
4068 | #if FF_API_NEXT |
4069 | attribute_deprecated |
4070 | const AVBitStreamFilter *av_bsf_next(void **opaque); |
4071 | #endif |
4072 | |
4073 | /* memory */ |
4074 | |
4075 | /** |
4076 | * Same behaviour av_fast_malloc but the buffer has additional |
4077 | * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. |
4078 | * |
4079 | * In addition the whole buffer will initially and after resizes |
4080 | * be 0-initialized so that no uninitialized data will ever appear. |
4081 | */ |
4082 | void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); |
4083 | |
4084 | /** |
4085 | * Same behaviour av_fast_padded_malloc except that buffer will always |
4086 | * be 0-initialized after call. |
4087 | */ |
4088 | void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); |
4089 | |
4090 | /** |
4091 | * Encode extradata length to a buffer. Used by xiph codecs. |
4092 | * |
4093 | * @param s buffer to write to; must be at least (v/255+1) bytes long |
4094 | * @param v size of extradata in bytes |
4095 | * @return number of bytes written to the buffer. |
4096 | */ |
4097 | unsigned int av_xiphlacing(unsigned char *s, unsigned int v); |
4098 | |
4099 | #if FF_API_USER_VISIBLE_AVHWACCEL |
4100 | /** |
4101 | * Register the hardware accelerator hwaccel. |
4102 | * |
4103 | * @deprecated This function doesn't do anything. |
4104 | */ |
4105 | attribute_deprecated |
4106 | void av_register_hwaccel(AVHWAccel *hwaccel); |
4107 | |
4108 | /** |
4109 | * If hwaccel is NULL, returns the first registered hardware accelerator, |
4110 | * if hwaccel is non-NULL, returns the next registered hardware accelerator |
4111 | * after hwaccel, or NULL if hwaccel is the last one. |
4112 | * |
4113 | * @deprecated AVHWaccel structures contain no user-serviceable parts, so |
4114 | * this function should not be used. |
4115 | */ |
4116 | attribute_deprecated |
4117 | AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); |
4118 | #endif |
4119 | |
4120 | #if FF_API_LOCKMGR |
4121 | /** |
4122 | * Lock operation used by lockmgr |
4123 | * |
4124 | * @deprecated Deprecated together with av_lockmgr_register(). |
4125 | */ |
4126 | enum AVLockOp { |
4127 | AV_LOCK_CREATE, ///< Create a mutex |
4128 | AV_LOCK_OBTAIN, ///< Lock the mutex |
4129 | AV_LOCK_RELEASE, ///< Unlock the mutex |
4130 | AV_LOCK_DESTROY, ///< Free mutex resources |
4131 | }; |
4132 | |
4133 | /** |
4134 | * Register a user provided lock manager supporting the operations |
4135 | * specified by AVLockOp. The "mutex" argument to the function points |
4136 | * to a (void *) where the lockmgr should store/get a pointer to a user |
4137 | * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the |
4138 | * value left by the last call for all other ops. If the lock manager is |
4139 | * unable to perform the op then it should leave the mutex in the same |
4140 | * state as when it was called and return a non-zero value. However, |
4141 | * when called with AV_LOCK_DESTROY the mutex will always be assumed to |
4142 | * have been successfully destroyed. If av_lockmgr_register succeeds |
4143 | * it will return a non-negative value, if it fails it will return a |
4144 | * negative value and destroy all mutex and unregister all callbacks. |
4145 | * av_lockmgr_register is not thread-safe, it must be called from a |
4146 | * single thread before any calls which make use of locking are used. |
4147 | * |
4148 | * @param cb User defined callback. av_lockmgr_register invokes calls |
4149 | * to this callback and the previously registered callback. |
4150 | * The callback will be used to create more than one mutex |
4151 | * each of which must be backed by its own underlying locking |
4152 | * mechanism (i.e. do not use a single static object to |
4153 | * implement your lock manager). If cb is set to NULL the |
4154 | * lockmgr will be unregistered. |
4155 | * |
4156 | * @deprecated This function does nothing, and always returns 0. Be sure to |
4157 | * build with thread support to get basic thread safety. |
4158 | */ |
4159 | attribute_deprecated |
4160 | int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); |
4161 | #endif |
4162 | |
4163 | /** |
4164 | * @return a positive value if s is open (i.e. avcodec_open2() was called on it |
4165 | * with no corresponding avcodec_close()), 0 otherwise. |
4166 | */ |
4167 | int avcodec_is_open(AVCodecContext *s); |
4168 | |
4169 | /** |
4170 | * Allocate a CPB properties structure and initialize its fields to default |
4171 | * values. |
4172 | * |
4173 | * @param size if non-NULL, the size of the allocated struct will be written |
4174 | * here. This is useful for embedding it in side data. |
4175 | * |
4176 | * @return the newly allocated struct or NULL on failure |
4177 | */ |
4178 | AVCPBProperties *av_cpb_properties_alloc(size_t *size); |
4179 | |
4180 | /** |
4181 | * @} |
4182 | */ |
4183 | |
4184 | #endif /* AVCODEC_AVCODEC_H */ |
4185 | |