FFmpeg
decode.c
Go to the documentation of this file.
1 /*
2  * generic decoding-related code
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 #include <stdint.h>
22 #include <string.h>
23 
24 #include "config.h"
25 
26 #if CONFIG_ICONV
27 # include <iconv.h>
28 #endif
29 
30 #include "libavutil/avassert.h"
31 #include "libavutil/avstring.h"
32 #include "libavutil/bprint.h"
34 #include "libavutil/common.h"
35 #include "libavutil/fifo.h"
36 #include "libavutil/frame.h"
37 #include "libavutil/hwcontext.h"
38 #include "libavutil/imgutils.h"
39 #include "libavutil/internal.h"
40 #include "libavutil/intmath.h"
41 #include "libavutil/opt.h"
42 
43 #include "avcodec.h"
44 #include "bytestream.h"
45 #include "bsf.h"
46 #include "codec_internal.h"
47 #include "decode.h"
48 #include "hwconfig.h"
49 #include "internal.h"
50 #include "thread.h"
51 
52 static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt)
53 {
54  int ret;
55  size_t size;
56  const uint8_t *data;
57  uint32_t flags;
58  int64_t val;
59 
61  if (!data)
62  return 0;
63 
64  if (!(avctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE)) {
65  av_log(avctx, AV_LOG_ERROR, "This decoder does not support parameter "
66  "changes, but PARAM_CHANGE side data was sent to it.\n");
67  ret = AVERROR(EINVAL);
68  goto fail2;
69  }
70 
71  if (size < 4)
72  goto fail;
73 
74  flags = bytestream_get_le32(&data);
75  size -= 4;
76 
77 #if FF_API_OLD_CHANNEL_LAYOUT
79  if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
80  if (size < 4)
81  goto fail;
82  val = bytestream_get_le32(&data);
83  if (val <= 0 || val > INT_MAX) {
84  av_log(avctx, AV_LOG_ERROR, "Invalid channel count");
86  goto fail2;
87  }
88  avctx->channels = val;
89  size -= 4;
90  }
91  if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
92  if (size < 8)
93  goto fail;
94  avctx->channel_layout = bytestream_get_le64(&data);
95  size -= 8;
96  }
98 #endif
100  if (size < 4)
101  goto fail;
102  val = bytestream_get_le32(&data);
103  if (val <= 0 || val > INT_MAX) {
104  av_log(avctx, AV_LOG_ERROR, "Invalid sample rate");
106  goto fail2;
107  }
108  avctx->sample_rate = val;
109  size -= 4;
110  }
112  if (size < 8)
113  goto fail;
114  avctx->width = bytestream_get_le32(&data);
115  avctx->height = bytestream_get_le32(&data);
116  size -= 8;
117  ret = ff_set_dimensions(avctx, avctx->width, avctx->height);
118  if (ret < 0)
119  goto fail2;
120  }
121 
122  return 0;
123 fail:
124  av_log(avctx, AV_LOG_ERROR, "PARAM_CHANGE side data too small.\n");
126 fail2:
127  if (ret < 0) {
128  av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
129  if (avctx->err_recognition & AV_EF_EXPLODE)
130  return ret;
131  }
132  return 0;
133 }
134 
136 {
137  int ret = 0;
138 
140  if (pkt) {
142  if (!ret)
143  avci->last_pkt_props->opaque = (void *)(intptr_t)pkt->size; // Needed for ff_decode_frame_props().
144  }
145  return ret;
146 }
147 
149 {
150  AVCodecInternal *avci = avctx->internal;
151  const FFCodec *const codec = ffcodec(avctx->codec);
152  int ret;
153 
154  if (avci->bsf)
155  return 0;
156 
157  ret = av_bsf_list_parse_str(codec->bsfs, &avci->bsf);
158  if (ret < 0) {
159  av_log(avctx, AV_LOG_ERROR, "Error parsing decoder bitstream filters '%s': %s\n", codec->bsfs, av_err2str(ret));
160  if (ret != AVERROR(ENOMEM))
161  ret = AVERROR_BUG;
162  goto fail;
163  }
164 
165  /* We do not currently have an API for passing the input timebase into decoders,
166  * but no filters used here should actually need it.
167  * So we make up some plausible-looking number (the MPEG 90kHz timebase) */
168  avci->bsf->time_base_in = (AVRational){ 1, 90000 };
170  if (ret < 0)
171  goto fail;
172 
173  ret = av_bsf_init(avci->bsf);
174  if (ret < 0)
175  goto fail;
176 
177  return 0;
178 fail:
179  av_bsf_free(&avci->bsf);
180  return ret;
181 }
182 
184 {
185  AVCodecInternal *avci = avctx->internal;
186  int ret;
187 
188  if (avci->draining)
189  return AVERROR_EOF;
190 
191  ret = av_bsf_receive_packet(avci->bsf, pkt);
192  if (ret == AVERROR_EOF)
193  avci->draining = 1;
194  if (ret < 0)
195  return ret;
196 
199  if (ret < 0)
200  goto finish;
201  }
202 
203  ret = apply_param_change(avctx, pkt);
204  if (ret < 0)
205  goto finish;
206 
207  return 0;
208 finish:
210  return ret;
211 }
212 
213 /**
214  * Attempt to guess proper monotonic timestamps for decoded video frames
215  * which might have incorrect times. Input timestamps may wrap around, in
216  * which case the output will as well.
217  *
218  * @param pts the pts field of the decoded AVPacket, as passed through
219  * AVFrame.pts
220  * @param dts the dts field of the decoded AVPacket
221  * @return one of the input values, may be AV_NOPTS_VALUE
222  */
224  int64_t reordered_pts, int64_t dts)
225 {
226  int64_t pts = AV_NOPTS_VALUE;
227 
228  if (dts != AV_NOPTS_VALUE) {
229  ctx->pts_correction_num_faulty_dts += dts <= ctx->pts_correction_last_dts;
230  ctx->pts_correction_last_dts = dts;
231  } else if (reordered_pts != AV_NOPTS_VALUE)
232  ctx->pts_correction_last_dts = reordered_pts;
233 
234  if (reordered_pts != AV_NOPTS_VALUE) {
235  ctx->pts_correction_num_faulty_pts += reordered_pts <= ctx->pts_correction_last_pts;
236  ctx->pts_correction_last_pts = reordered_pts;
237  } else if(dts != AV_NOPTS_VALUE)
238  ctx->pts_correction_last_pts = dts;
239 
240  if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE)
241  && reordered_pts != AV_NOPTS_VALUE)
242  pts = reordered_pts;
243  else
244  pts = dts;
245 
246  return pts;
247 }
248 
249 /*
250  * The core of the receive_frame_wrapper for the decoders implementing
251  * the simple API. Certain decoders might consume partial packets without
252  * returning any output, so this function needs to be called in a loop until it
253  * returns EAGAIN.
254  **/
255 static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, int64_t *discarded_samples)
256 {
257  AVCodecInternal *avci = avctx->internal;
258  AVPacket *const pkt = avci->in_pkt;
259  const FFCodec *const codec = ffcodec(avctx->codec);
260  int got_frame, actual_got_frame;
261  int ret;
262 
263  if (!pkt->data && !avci->draining) {
265  ret = ff_decode_get_packet(avctx, pkt);
266  if (ret < 0 && ret != AVERROR_EOF)
267  return ret;
268  }
269 
270  // Some codecs (at least wma lossless) will crash when feeding drain packets
271  // after EOF was signaled.
272  if (avci->draining_done)
273  return AVERROR_EOF;
274 
275  if (!pkt->data &&
276  !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY ||
278  return AVERROR_EOF;
279 
280  got_frame = 0;
281 
282  if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) {
283  ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt);
284  } else {
285  ret = codec->cb.decode(avctx, frame, &got_frame, pkt);
286 
288  frame->pkt_dts = pkt->dts;
289  if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
290  if(!avctx->has_b_frames)
291  frame->pkt_pos = pkt->pos;
292  //FIXME these should be under if(!avctx->has_b_frames)
293  /* get_buffer is supposed to set frame parameters */
294  if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) {
295  if (!frame->sample_aspect_ratio.num) frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
296  if (!frame->width) frame->width = avctx->width;
297  if (!frame->height) frame->height = avctx->height;
298  if (frame->format == AV_PIX_FMT_NONE) frame->format = avctx->pix_fmt;
299  }
300  }
301  }
302  emms_c();
303  actual_got_frame = got_frame;
304 
305  if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
306  if (frame->flags & AV_FRAME_FLAG_DISCARD)
307  got_frame = 0;
308  } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) {
309  uint8_t *side;
310  size_t side_size;
311  uint32_t discard_padding = 0;
312  uint8_t skip_reason = 0;
313  uint8_t discard_reason = 0;
314 
315  if (ret >= 0 && got_frame) {
316  if (frame->format == AV_SAMPLE_FMT_NONE)
317  frame->format = avctx->sample_fmt;
318  if (!frame->ch_layout.nb_channels) {
319  int ret2 = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout);
320  if (ret2 < 0) {
321  ret = ret2;
322  got_frame = 0;
323  }
324  }
325 #if FF_API_OLD_CHANNEL_LAYOUT
327  if (!frame->channel_layout)
328  frame->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
329  avctx->ch_layout.u.mask : 0;
330  if (!frame->channels)
331  frame->channels = avctx->ch_layout.nb_channels;
333 #endif
334  if (!frame->sample_rate)
335  frame->sample_rate = avctx->sample_rate;
336  }
337 
339  if(side && side_size>=10) {
340  avci->skip_samples = AV_RL32(side);
341  avci->skip_samples = FFMAX(0, avci->skip_samples);
342  discard_padding = AV_RL32(side + 4);
343  av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n",
344  avci->skip_samples, (int)discard_padding);
345  skip_reason = AV_RL8(side + 8);
346  discard_reason = AV_RL8(side + 9);
347  }
348 
349  if ((frame->flags & AV_FRAME_FLAG_DISCARD) && got_frame &&
350  !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
351  avci->skip_samples = FFMAX(0, avci->skip_samples - frame->nb_samples);
352  got_frame = 0;
353  *discarded_samples += frame->nb_samples;
354  }
355 
356  if (avci->skip_samples > 0 && got_frame &&
357  !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
358  if(frame->nb_samples <= avci->skip_samples){
359  got_frame = 0;
360  *discarded_samples += frame->nb_samples;
361  avci->skip_samples -= frame->nb_samples;
362  av_log(avctx, AV_LOG_DEBUG, "skip whole frame, skip left: %d\n",
363  avci->skip_samples);
364  } else {
365  av_samples_copy(frame->extended_data, frame->extended_data, 0, avci->skip_samples,
366  frame->nb_samples - avci->skip_samples, avctx->ch_layout.nb_channels, frame->format);
367  if(avctx->pkt_timebase.num && avctx->sample_rate) {
368  int64_t diff_ts = av_rescale_q(avci->skip_samples,
369  (AVRational){1, avctx->sample_rate},
370  avctx->pkt_timebase);
371  if(frame->pts!=AV_NOPTS_VALUE)
372  frame->pts += diff_ts;
373  if(frame->pkt_dts!=AV_NOPTS_VALUE)
374  frame->pkt_dts += diff_ts;
375  if (frame->duration >= diff_ts)
376  frame->duration -= diff_ts;
377  } else {
378  av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n");
379  }
380  av_log(avctx, AV_LOG_DEBUG, "skip %d/%d samples\n",
381  avci->skip_samples, frame->nb_samples);
382  *discarded_samples += avci->skip_samples;
383  frame->nb_samples -= avci->skip_samples;
384  avci->skip_samples = 0;
385  }
386  }
387 
388  if (discard_padding > 0 && discard_padding <= frame->nb_samples && got_frame &&
389  !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
390  if (discard_padding == frame->nb_samples) {
391  *discarded_samples += frame->nb_samples;
392  got_frame = 0;
393  } else {
394  if(avctx->pkt_timebase.num && avctx->sample_rate) {
395  int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding,
396  (AVRational){1, avctx->sample_rate},
397  avctx->pkt_timebase);
398  frame->duration = diff_ts;
399  } else {
400  av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n");
401  }
402  av_log(avctx, AV_LOG_DEBUG, "discard %d/%d samples\n",
403  (int)discard_padding, frame->nb_samples);
404  frame->nb_samples -= discard_padding;
405  }
406  }
407 
408  if ((avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL) && got_frame) {
410  if (fside) {
411  AV_WL32(fside->data, avci->skip_samples);
412  AV_WL32(fside->data + 4, discard_padding);
413  AV_WL8(fside->data + 8, skip_reason);
414  AV_WL8(fside->data + 9, discard_reason);
415  avci->skip_samples = 0;
416  }
417  }
418  }
419 
420  if (avctx->codec->type == AVMEDIA_TYPE_AUDIO &&
422  ret >= 0 && ret != pkt->size && !(avctx->codec->capabilities & AV_CODEC_CAP_SUBFRAMES)) {
423  av_log(avctx, AV_LOG_WARNING, "Multiple frames in a packet.\n");
424  avci->showed_multi_packet_warning = 1;
425  }
426 
427  if (!got_frame)
429 
430  if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO)
431  ret = pkt->size;
432 
433  /* do not stop draining when actual_got_frame != 0 or ret < 0 */
434  /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */
435  if (avci->draining && !actual_got_frame) {
436  if (ret < 0) {
437  /* prevent infinite loop if a decoder wrongly always return error on draining */
438  /* reasonable nb_errors_max = maximum b frames + thread count */
439  int nb_errors_max = 20 + (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME ?
440  avctx->thread_count : 1);
441 
442  if (avci->nb_draining_errors++ >= nb_errors_max) {
443  av_log(avctx, AV_LOG_ERROR, "Too many errors when draining, this is a bug. "
444  "Stop draining and force EOF.\n");
445  avci->draining_done = 1;
446  ret = AVERROR_BUG;
447  }
448  } else {
449  avci->draining_done = 1;
450  }
451  }
452 
453  if (ret >= pkt->size || ret < 0) {
455  } else {
456  int consumed = ret;
457 
458  pkt->data += consumed;
459  pkt->size -= consumed;
463  // See extract_packet_props() comment.
464  avci->last_pkt_props->opaque = (void *)((intptr_t)avci->last_pkt_props->opaque - consumed);
467  }
468  }
469 
470  if (got_frame)
471  av_assert0(frame->buf[0]);
472 
473  return ret < 0 ? ret : 0;
474 }
475 
476 #if CONFIG_LCMS2
477 static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame)
478 {
479  AVCodecInternal *avci = avctx->internal;
481  AVColorPrimariesDesc coeffs;
482  enum AVColorPrimaries prim;
483  cmsHPROFILE profile;
484  AVFrameSideData *sd;
485  int ret;
486  if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES))
487  return 0;
488 
490  if (!sd || !sd->size)
491  return 0;
492 
493  if (!avci->icc.avctx) {
494  ret = ff_icc_context_init(&avci->icc, avctx);
495  if (ret < 0)
496  return ret;
497  }
498 
499  profile = cmsOpenProfileFromMemTHR(avci->icc.ctx, sd->data, sd->size);
500  if (!profile)
501  return AVERROR_INVALIDDATA;
502 
503  ret = ff_icc_profile_read_primaries(&avci->icc, profile, &coeffs);
504  if (!ret)
505  ret = ff_icc_profile_detect_transfer(&avci->icc, profile, &trc);
506  cmsCloseProfile(profile);
507  if (ret < 0)
508  return ret;
509 
510  prim = av_csp_primaries_id_from_desc(&coeffs);
511  if (prim != AVCOL_PRI_UNSPECIFIED)
512  frame->color_primaries = prim;
513  if (trc != AVCOL_TRC_UNSPECIFIED)
514  frame->color_trc = trc;
515  return 0;
516 }
517 #else /* !CONFIG_LCMS2 */
519 {
520  return 0;
521 }
522 #endif
523 
525 {
526  int ret;
527  int64_t discarded_samples = 0;
528 
529  while (!frame->buf[0]) {
530  if (discarded_samples > avctx->max_samples)
531  return AVERROR(EAGAIN);
532  ret = decode_simple_internal(avctx, frame, &discarded_samples);
533  if (ret < 0)
534  return ret;
535  }
536 
537  return 0;
538 }
539 
541 {
542  AVCodecInternal *avci = avctx->internal;
543  const FFCodec *const codec = ffcodec(avctx->codec);
544  int ret, ok;
545 
546  av_assert0(!frame->buf[0]);
547 
548  if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) {
549  ret = codec->cb.receive_frame(avctx, frame);
550  } else
552 
553  if (ret == AVERROR_EOF)
554  avci->draining_done = 1;
555 
556  /* preserve ret */
557  ok = detect_colorspace(avctx, frame);
558  if (ok < 0) {
560  return ok;
561  }
562 
563  if (!ret) {
564  frame->best_effort_timestamp = guess_correct_pts(avctx,
565  frame->pts,
566  frame->pkt_dts);
567 
568 #if FF_API_PKT_DURATION
570  frame->pkt_duration = frame->duration;
572 #endif
573 
574  /* the only case where decode data is not set should be decoders
575  * that do not call ff_get_buffer() */
576  av_assert0((frame->private_ref && frame->private_ref->size == sizeof(FrameDecodeData)) ||
577  !(avctx->codec->capabilities & AV_CODEC_CAP_DR1));
578 
579  if (frame->private_ref) {
580  FrameDecodeData *fdd = (FrameDecodeData*)frame->private_ref->data;
581 
582  if (fdd->post_process) {
583  ret = fdd->post_process(avctx, frame);
584  if (ret < 0) {
586  return ret;
587  }
588  }
589  }
590  }
591 
592  /* free the per-frame decode data */
593  av_buffer_unref(&frame->private_ref);
594 
595  return ret;
596 }
597 
598 int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
599 {
600  AVCodecInternal *avci = avctx->internal;
601  int ret;
602 
603  if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec))
604  return AVERROR(EINVAL);
605 
606  if (avctx->internal->draining)
607  return AVERROR_EOF;
608 
609  if (avpkt && !avpkt->size && avpkt->data)
610  return AVERROR(EINVAL);
611 
613  if (avpkt && (avpkt->data || avpkt->side_data_elems)) {
614  ret = av_packet_ref(avci->buffer_pkt, avpkt);
615  if (ret < 0)
616  return ret;
617  }
618 
619  ret = av_bsf_send_packet(avci->bsf, avci->buffer_pkt);
620  if (ret < 0) {
622  return ret;
623  }
624 
625  if (!avci->buffer_frame->buf[0]) {
627  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
628  return ret;
629  }
630 
631  return 0;
632 }
633 
635 {
636  /* make sure we are noisy about decoders returning invalid cropping data */
637  if (frame->crop_left >= INT_MAX - frame->crop_right ||
638  frame->crop_top >= INT_MAX - frame->crop_bottom ||
639  (frame->crop_left + frame->crop_right) >= frame->width ||
640  (frame->crop_top + frame->crop_bottom) >= frame->height) {
641  av_log(avctx, AV_LOG_WARNING,
642  "Invalid cropping information set by a decoder: "
644  "(frame size %dx%d). This is a bug, please report it\n",
645  frame->crop_left, frame->crop_right, frame->crop_top, frame->crop_bottom,
646  frame->width, frame->height);
647  frame->crop_left = 0;
648  frame->crop_right = 0;
649  frame->crop_top = 0;
650  frame->crop_bottom = 0;
651  return 0;
652  }
653 
654  if (!avctx->apply_cropping)
655  return 0;
656 
659 }
660 
661 // make sure frames returned to the caller are valid
663 {
664  if (!frame->buf[0] || frame->format < 0)
665  goto fail;
666 
667  switch (avctx->codec_type) {
668  case AVMEDIA_TYPE_VIDEO:
669  if (frame->width <= 0 || frame->height <= 0)
670  goto fail;
671  break;
672  case AVMEDIA_TYPE_AUDIO:
673  if (!av_channel_layout_check(&frame->ch_layout) ||
674  frame->sample_rate <= 0)
675  goto fail;
676 
677  break;
678  default: av_assert0(0);
679  }
680 
681  return 0;
682 fail:
683  av_log(avctx, AV_LOG_ERROR, "An invalid frame was output by a decoder. "
684  "This is a bug, please report it.\n");
685  return AVERROR_BUG;
686 }
687 
689 {
690  AVCodecInternal *avci = avctx->internal;
691  int ret, changed;
692 
693  if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec))
694  return AVERROR(EINVAL);
695 
696  if (avci->buffer_frame->buf[0]) {
698  } else {
700  if (ret < 0)
701  return ret;
702  }
703 
704  ret = frame_validate(avctx, frame);
705  if (ret < 0)
706  goto fail;
707 
708  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
709  ret = apply_cropping(avctx, frame);
710  if (ret < 0)
711  goto fail;
712  }
713 
714  avctx->frame_num++;
715 #if FF_API_AVCTX_FRAME_NUMBER
717  avctx->frame_number = avctx->frame_num;
719 #endif
720 
721  if (avctx->flags & AV_CODEC_FLAG_DROPCHANGED) {
722 
723  if (avctx->frame_num == 1) {
724  avci->initial_format = frame->format;
725  switch(avctx->codec_type) {
726  case AVMEDIA_TYPE_VIDEO:
727  avci->initial_width = frame->width;
728  avci->initial_height = frame->height;
729  break;
730  case AVMEDIA_TYPE_AUDIO:
731  avci->initial_sample_rate = frame->sample_rate ? frame->sample_rate :
732  avctx->sample_rate;
733  ret = av_channel_layout_copy(&avci->initial_ch_layout, &frame->ch_layout);
734  if (ret < 0)
735  goto fail;
736  break;
737  }
738  }
739 
740  if (avctx->frame_num > 1) {
741  changed = avci->initial_format != frame->format;
742 
743  switch(avctx->codec_type) {
744  case AVMEDIA_TYPE_VIDEO:
745  changed |= avci->initial_width != frame->width ||
746  avci->initial_height != frame->height;
747  break;
748  case AVMEDIA_TYPE_AUDIO:
749  changed |= avci->initial_sample_rate != frame->sample_rate ||
750  avci->initial_sample_rate != avctx->sample_rate ||
752  break;
753  }
754 
755  if (changed) {
756  avci->changed_frames_dropped++;
757  av_log(avctx, AV_LOG_INFO, "dropped changed frame #%"PRId64" pts %"PRId64
758  " drop count: %d \n",
759  avctx->frame_num, frame->pts,
760  avci->changed_frames_dropped);
762  goto fail;
763  }
764  }
765  }
766  return 0;
767 fail:
769  return ret;
770 }
771 
773 {
774  memset(sub, 0, sizeof(*sub));
775  sub->pts = AV_NOPTS_VALUE;
776 }
777 
778 #define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */
779 static int recode_subtitle(AVCodecContext *avctx, const AVPacket **outpkt,
780  const AVPacket *inpkt, AVPacket *buf_pkt)
781 {
782 #if CONFIG_ICONV
783  iconv_t cd = (iconv_t)-1;
784  int ret = 0;
785  char *inb, *outb;
786  size_t inl, outl;
787 #endif
788 
789  if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER || inpkt->size == 0) {
790  *outpkt = inpkt;
791  return 0;
792  }
793 
794 #if CONFIG_ICONV
795  inb = inpkt->data;
796  inl = inpkt->size;
797 
798  if (inl >= INT_MAX / UTF8_MAX_BYTES - AV_INPUT_BUFFER_PADDING_SIZE) {
799  av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n");
800  return AVERROR(ERANGE);
801  }
802 
803  cd = iconv_open("UTF-8", avctx->sub_charenc);
804  av_assert0(cd != (iconv_t)-1);
805 
806  ret = av_new_packet(buf_pkt, inl * UTF8_MAX_BYTES);
807  if (ret < 0)
808  goto end;
809  ret = av_packet_copy_props(buf_pkt, inpkt);
810  if (ret < 0)
811  goto end;
812  outb = buf_pkt->data;
813  outl = buf_pkt->size;
814 
815  if (iconv(cd, &inb, &inl, &outb, &outl) == (size_t)-1 ||
816  iconv(cd, NULL, NULL, &outb, &outl) == (size_t)-1 ||
817  outl >= buf_pkt->size || inl != 0) {
818  ret = FFMIN(AVERROR(errno), -1);
819  av_log(avctx, AV_LOG_ERROR, "Unable to recode subtitle event \"%s\" "
820  "from %s to UTF-8\n", inpkt->data, avctx->sub_charenc);
821  goto end;
822  }
823  buf_pkt->size -= outl;
824  memset(buf_pkt->data + buf_pkt->size, 0, outl);
825  *outpkt = buf_pkt;
826 
827  ret = 0;
828 end:
829  if (ret < 0)
830  av_packet_unref(buf_pkt);
831  if (cd != (iconv_t)-1)
832  iconv_close(cd);
833  return ret;
834 #else
835  av_log(avctx, AV_LOG_ERROR, "requesting subtitles recoding without iconv");
836  return AVERROR(EINVAL);
837 #endif
838 }
839 
840 static int utf8_check(const uint8_t *str)
841 {
842  const uint8_t *byte;
843  uint32_t codepoint, min;
844 
845  while (*str) {
846  byte = str;
847  GET_UTF8(codepoint, *(byte++), return 0;);
848  min = byte - str == 1 ? 0 : byte - str == 2 ? 0x80 :
849  1 << (5 * (byte - str) - 4);
850  if (codepoint < min || codepoint >= 0x110000 ||
851  codepoint == 0xFFFE /* BOM */ ||
852  codepoint >= 0xD800 && codepoint <= 0xDFFF /* surrogates */)
853  return 0;
854  str = byte;
855  }
856  return 1;
857 }
858 
860  int *got_sub_ptr, const AVPacket *avpkt)
861 {
862  int ret = 0;
863 
864  if (!avpkt->data && avpkt->size) {
865  av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
866  return AVERROR(EINVAL);
867  }
868  if (!avctx->codec)
869  return AVERROR(EINVAL);
870  if (avctx->codec->type != AVMEDIA_TYPE_SUBTITLE) {
871  av_log(avctx, AV_LOG_ERROR, "Invalid media type for subtitles\n");
872  return AVERROR(EINVAL);
873  }
874 
875  *got_sub_ptr = 0;
877 
878  if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {
879  AVCodecInternal *avci = avctx->internal;
880  const AVPacket *pkt;
881 
882  ret = recode_subtitle(avctx, &pkt, avpkt, avci->buffer_pkt);
883  if (ret < 0)
884  return ret;
885 
886  if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE)
887  sub->pts = av_rescale_q(avpkt->pts,
888  avctx->pkt_timebase, AV_TIME_BASE_Q);
889  ret = ffcodec(avctx->codec)->cb.decode_sub(avctx, sub, got_sub_ptr, pkt);
890  if (pkt == avci->buffer_pkt) // did we recode?
892  if (ret < 0) {
893  *got_sub_ptr = 0;
895  return ret;
896  }
897  av_assert1(!sub->num_rects || *got_sub_ptr);
898 
899  if (sub->num_rects && !sub->end_display_time && avpkt->duration &&
900  avctx->pkt_timebase.num) {
901  AVRational ms = { 1, 1000 };
902  sub->end_display_time = av_rescale_q(avpkt->duration,
903  avctx->pkt_timebase, ms);
904  }
905 
907  sub->format = 0;
908  else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB)
909  sub->format = 1;
910 
911  for (unsigned i = 0; i < sub->num_rects; i++) {
913  sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) {
914  av_log(avctx, AV_LOG_ERROR,
915  "Invalid UTF-8 in decoded subtitles text; "
916  "maybe missing -sub_charenc option\n");
918  *got_sub_ptr = 0;
919  return AVERROR_INVALIDDATA;
920  }
921  }
922 
923  if (*got_sub_ptr)
924  avctx->frame_num++;
925 #if FF_API_AVCTX_FRAME_NUMBER
927  avctx->frame_number = avctx->frame_num;
929 #endif
930  }
931 
932  return ret;
933 }
934 
936  const enum AVPixelFormat *fmt)
937 {
938  const AVPixFmtDescriptor *desc;
939  const AVCodecHWConfig *config;
940  int i, n;
941 
942  // If a device was supplied when the codec was opened, assume that the
943  // user wants to use it.
944  if (avctx->hw_device_ctx && ffcodec(avctx->codec)->hw_configs) {
945  AVHWDeviceContext *device_ctx =
947  for (i = 0;; i++) {
948  config = &ffcodec(avctx->codec)->hw_configs[i]->public;
949  if (!config)
950  break;
951  if (!(config->methods &
953  continue;
954  if (device_ctx->type != config->device_type)
955  continue;
956  for (n = 0; fmt[n] != AV_PIX_FMT_NONE; n++) {
957  if (config->pix_fmt == fmt[n])
958  return fmt[n];
959  }
960  }
961  }
962  // No device or other setup, so we have to choose from things which
963  // don't any other external information.
964 
965  // If the last element of the list is a software format, choose it
966  // (this should be best software format if any exist).
967  for (n = 0; fmt[n] != AV_PIX_FMT_NONE; n++);
968  desc = av_pix_fmt_desc_get(fmt[n - 1]);
969  if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL))
970  return fmt[n - 1];
971 
972  // Finally, traverse the list in order and choose the first entry
973  // with no external dependencies (if there is no hardware configuration
974  // information available then this just picks the first entry).
975  for (n = 0; fmt[n] != AV_PIX_FMT_NONE; n++) {
976  for (i = 0;; i++) {
977  config = avcodec_get_hw_config(avctx->codec, i);
978  if (!config)
979  break;
980  if (config->pix_fmt == fmt[n])
981  break;
982  }
983  if (!config) {
984  // No specific config available, so the decoder must be able
985  // to handle this format without any additional setup.
986  return fmt[n];
987  }
989  // Usable with only internal setup.
990  return fmt[n];
991  }
992  }
993 
994  // Nothing is usable, give up.
995  return AV_PIX_FMT_NONE;
996 }
997 
999  enum AVHWDeviceType dev_type)
1000 {
1001  AVHWDeviceContext *device_ctx;
1002  AVHWFramesContext *frames_ctx;
1003  int ret;
1004 
1005  if (!avctx->hwaccel)
1006  return AVERROR(ENOSYS);
1007 
1008  if (avctx->hw_frames_ctx)
1009  return 0;
1010  if (!avctx->hw_device_ctx) {
1011  av_log(avctx, AV_LOG_ERROR, "A hardware frames or device context is "
1012  "required for hardware accelerated decoding.\n");
1013  return AVERROR(EINVAL);
1014  }
1015 
1016  device_ctx = (AVHWDeviceContext *)avctx->hw_device_ctx->data;
1017  if (device_ctx->type != dev_type) {
1018  av_log(avctx, AV_LOG_ERROR, "Device type %s expected for hardware "
1019  "decoding, but got %s.\n", av_hwdevice_get_type_name(dev_type),
1020  av_hwdevice_get_type_name(device_ctx->type));
1021  return AVERROR(EINVAL);
1022  }
1023 
1025  avctx->hw_device_ctx,
1026  avctx->hwaccel->pix_fmt,
1027  &avctx->hw_frames_ctx);
1028  if (ret < 0)
1029  return ret;
1030 
1031  frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
1032 
1033 
1034  if (frames_ctx->initial_pool_size) {
1035  // We guarantee 4 base work surfaces. The function above guarantees 1
1036  // (the absolute minimum), so add the missing count.
1037  frames_ctx->initial_pool_size += 3;
1038  }
1039 
1041  if (ret < 0) {
1042  av_buffer_unref(&avctx->hw_frames_ctx);
1043  return ret;
1044  }
1045 
1046  return 0;
1047 }
1048 
1050  AVBufferRef *device_ref,
1052  AVBufferRef **out_frames_ref)
1053 {
1054  AVBufferRef *frames_ref = NULL;
1055  const AVCodecHWConfigInternal *hw_config;
1056  const AVHWAccel *hwa;
1057  int i, ret;
1058 
1059  for (i = 0;; i++) {
1060  hw_config = ffcodec(avctx->codec)->hw_configs[i];
1061  if (!hw_config)
1062  return AVERROR(ENOENT);
1063  if (hw_config->public.pix_fmt == hw_pix_fmt)
1064  break;
1065  }
1066 
1067  hwa = hw_config->hwaccel;
1068  if (!hwa || !hwa->frame_params)
1069  return AVERROR(ENOENT);
1070 
1071  frames_ref = av_hwframe_ctx_alloc(device_ref);
1072  if (!frames_ref)
1073  return AVERROR(ENOMEM);
1074 
1075  ret = hwa->frame_params(avctx, frames_ref);
1076  if (ret >= 0) {
1077  AVHWFramesContext *frames_ctx = (AVHWFramesContext*)frames_ref->data;
1078 
1079  if (frames_ctx->initial_pool_size) {
1080  // If the user has requested that extra output surfaces be
1081  // available then add them here.
1082  if (avctx->extra_hw_frames > 0)
1083  frames_ctx->initial_pool_size += avctx->extra_hw_frames;
1084 
1085  // If frame threading is enabled then an extra surface per thread
1086  // is also required.
1087  if (avctx->active_thread_type & FF_THREAD_FRAME)
1088  frames_ctx->initial_pool_size += avctx->thread_count;
1089  }
1090 
1091  *out_frames_ref = frames_ref;
1092  } else {
1093  av_buffer_unref(&frames_ref);
1094  }
1095  return ret;
1096 }
1097 
1098 static int hwaccel_init(AVCodecContext *avctx,
1099  const AVCodecHWConfigInternal *hw_config)
1100 {
1101  const AVHWAccel *hwaccel;
1102  int err;
1103 
1104  hwaccel = hw_config->hwaccel;
1107  av_log(avctx, AV_LOG_WARNING, "Ignoring experimental hwaccel: %s\n",
1108  hwaccel->name);
1109  return AVERROR_PATCHWELCOME;
1110  }
1111 
1112  if (hwaccel->priv_data_size) {
1113  avctx->internal->hwaccel_priv_data =
1114  av_mallocz(hwaccel->priv_data_size);
1115  if (!avctx->internal->hwaccel_priv_data)
1116  return AVERROR(ENOMEM);
1117  }
1118 
1119  avctx->hwaccel = hwaccel;
1120  if (hwaccel->init) {
1121  err = hwaccel->init(avctx);
1122  if (err < 0) {
1123  av_log(avctx, AV_LOG_ERROR, "Failed setup for format %s: "
1124  "hwaccel initialisation returned error.\n",
1125  av_get_pix_fmt_name(hw_config->public.pix_fmt));
1127  avctx->hwaccel = NULL;
1128  return err;
1129  }
1130  }
1131 
1132  return 0;
1133 }
1134 
1135 static void hwaccel_uninit(AVCodecContext *avctx)
1136 {
1137  if (avctx->hwaccel && avctx->hwaccel->uninit)
1138  avctx->hwaccel->uninit(avctx);
1139 
1141 
1142  avctx->hwaccel = NULL;
1143 
1144  av_buffer_unref(&avctx->hw_frames_ctx);
1145 }
1146 
1147 int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
1148 {
1149  const AVPixFmtDescriptor *desc;
1150  enum AVPixelFormat *choices;
1151  enum AVPixelFormat ret, user_choice;
1152  const AVCodecHWConfigInternal *hw_config;
1153  const AVCodecHWConfig *config;
1154  int i, n, err;
1155 
1156  // Find end of list.
1157  for (n = 0; fmt[n] != AV_PIX_FMT_NONE; n++);
1158  // Must contain at least one entry.
1159  av_assert0(n >= 1);
1160  // If a software format is available, it must be the last entry.
1161  desc = av_pix_fmt_desc_get(fmt[n - 1]);
1162  if (desc->flags & AV_PIX_FMT_FLAG_HWACCEL) {
1163  // No software format is available.
1164  } else {
1165  avctx->sw_pix_fmt = fmt[n - 1];
1166  }
1167 
1168  choices = av_memdup(fmt, (n + 1) * sizeof(*choices));
1169  if (!choices)
1170  return AV_PIX_FMT_NONE;
1171 
1172  for (;;) {
1173  // Remove the previous hwaccel, if there was one.
1174  hwaccel_uninit(avctx);
1175 
1176  user_choice = avctx->get_format(avctx, choices);
1177  if (user_choice == AV_PIX_FMT_NONE) {
1178  // Explicitly chose nothing, give up.
1179  ret = AV_PIX_FMT_NONE;
1180  break;
1181  }
1182 
1183  desc = av_pix_fmt_desc_get(user_choice);
1184  if (!desc) {
1185  av_log(avctx, AV_LOG_ERROR, "Invalid format returned by "
1186  "get_format() callback.\n");
1187  ret = AV_PIX_FMT_NONE;
1188  break;
1189  }
1190  av_log(avctx, AV_LOG_DEBUG, "Format %s chosen by get_format().\n",
1191  desc->name);
1192 
1193  for (i = 0; i < n; i++) {
1194  if (choices[i] == user_choice)
1195  break;
1196  }
1197  if (i == n) {
1198  av_log(avctx, AV_LOG_ERROR, "Invalid return from get_format(): "
1199  "%s not in possible list.\n", desc->name);
1200  ret = AV_PIX_FMT_NONE;
1201  break;
1202  }
1203 
1204  if (ffcodec(avctx->codec)->hw_configs) {
1205  for (i = 0;; i++) {
1206  hw_config = ffcodec(avctx->codec)->hw_configs[i];
1207  if (!hw_config)
1208  break;
1209  if (hw_config->public.pix_fmt == user_choice)
1210  break;
1211  }
1212  } else {
1213  hw_config = NULL;
1214  }
1215 
1216  if (!hw_config) {
1217  // No config available, so no extra setup required.
1218  ret = user_choice;
1219  break;
1220  }
1221  config = &hw_config->public;
1222 
1223  if (config->methods &
1225  avctx->hw_frames_ctx) {
1226  const AVHWFramesContext *frames_ctx =
1228  if (frames_ctx->format != user_choice) {
1229  av_log(avctx, AV_LOG_ERROR, "Invalid setup for format %s: "
1230  "does not match the format of the provided frames "
1231  "context.\n", desc->name);
1232  goto try_again;
1233  }
1234  } else if (config->methods &
1236  avctx->hw_device_ctx) {
1237  const AVHWDeviceContext *device_ctx =
1239  if (device_ctx->type != config->device_type) {
1240  av_log(avctx, AV_LOG_ERROR, "Invalid setup for format %s: "
1241  "does not match the type of the provided device "
1242  "context.\n", desc->name);
1243  goto try_again;
1244  }
1245  } else if (config->methods &
1247  // Internal-only setup, no additional configuration.
1248  } else if (config->methods &
1250  // Some ad-hoc configuration we can't see and can't check.
1251  } else {
1252  av_log(avctx, AV_LOG_ERROR, "Invalid setup for format %s: "
1253  "missing configuration.\n", desc->name);
1254  goto try_again;
1255  }
1256  if (hw_config->hwaccel) {
1257  av_log(avctx, AV_LOG_DEBUG, "Format %s requires hwaccel "
1258  "initialisation.\n", desc->name);
1259  err = hwaccel_init(avctx, hw_config);
1260  if (err < 0)
1261  goto try_again;
1262  }
1263  ret = user_choice;
1264  break;
1265 
1266  try_again:
1267  av_log(avctx, AV_LOG_DEBUG, "Format %s not usable, retrying "
1268  "get_format() without it.\n", desc->name);
1269  for (i = 0; i < n; i++) {
1270  if (choices[i] == user_choice)
1271  break;
1272  }
1273  for (; i + 1 < n; i++)
1274  choices[i] = choices[i + 1];
1275  --n;
1276  }
1277 
1278  av_freep(&choices);
1279  return ret;
1280 }
1281 
1283 {
1284  size_t size;
1285  const uint8_t *side_metadata;
1286 
1287  AVDictionary **frame_md = &frame->metadata;
1288 
1289  side_metadata = av_packet_get_side_data(avpkt,
1291  return av_packet_unpack_dictionary(side_metadata, size, frame_md);
1292 }
1293 
1295  AVFrame *frame, const AVPacket *pkt)
1296 {
1297  static const struct {
1298  enum AVPacketSideDataType packet;
1300  } sd[] = {
1312  };
1313 
1314  frame->pts = pkt->pts;
1315  frame->pkt_pos = pkt->pos;
1316  frame->duration = pkt->duration;
1317  frame->pkt_size = pkt->size;
1318 
1319  for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) {
1320  size_t size;
1321  uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size);
1322  if (packet_sd) {
1324  sd[i].frame,
1325  size);
1326  if (!frame_sd)
1327  return AVERROR(ENOMEM);
1328 
1329  memcpy(frame_sd->data, packet_sd, size);
1330  }
1331  }
1333 
1334  if (pkt->flags & AV_PKT_FLAG_DISCARD) {
1335  frame->flags |= AV_FRAME_FLAG_DISCARD;
1336  } else {
1337  frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD);
1338  }
1339 
1340  if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
1341  int ret = av_buffer_replace(&frame->opaque_ref, pkt->opaque_ref);
1342  if (ret < 0)
1343  return ret;
1344  frame->opaque = pkt->opaque;
1345  }
1346 
1347  return 0;
1348 }
1349 
1351 {
1352  const AVPacket *pkt = avctx->internal->last_pkt_props;
1353 
1356  if (ret < 0)
1357  return ret;
1358  frame->pkt_size = (int)(intptr_t)pkt->opaque;
1359  }
1360 #if FF_API_REORDERED_OPAQUE
1362  frame->reordered_opaque = avctx->reordered_opaque;
1364 #endif
1365 
1366  if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED)
1367  frame->color_primaries = avctx->color_primaries;
1368  if (frame->color_trc == AVCOL_TRC_UNSPECIFIED)
1369  frame->color_trc = avctx->color_trc;
1370  if (frame->colorspace == AVCOL_SPC_UNSPECIFIED)
1371  frame->colorspace = avctx->colorspace;
1372  if (frame->color_range == AVCOL_RANGE_UNSPECIFIED)
1373  frame->color_range = avctx->color_range;
1374  if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED)
1375  frame->chroma_location = avctx->chroma_sample_location;
1376 
1377  switch (avctx->codec->type) {
1378  case AVMEDIA_TYPE_VIDEO:
1379  frame->format = avctx->pix_fmt;
1380  if (!frame->sample_aspect_ratio.num)
1381  frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
1382 
1383  if (frame->width && frame->height &&
1384  av_image_check_sar(frame->width, frame->height,
1385  frame->sample_aspect_ratio) < 0) {
1386  av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
1387  frame->sample_aspect_ratio.num,
1388  frame->sample_aspect_ratio.den);
1389  frame->sample_aspect_ratio = (AVRational){ 0, 1 };
1390  }
1391 
1392  break;
1393  case AVMEDIA_TYPE_AUDIO:
1394  if (!frame->sample_rate)
1395  frame->sample_rate = avctx->sample_rate;
1396  if (frame->format < 0)
1397  frame->format = avctx->sample_fmt;
1398  if (!frame->ch_layout.nb_channels) {
1399  int ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout);
1400  if (ret < 0)
1401  return ret;
1402  }
1403 #if FF_API_OLD_CHANNEL_LAYOUT
1405  frame->channels = frame->ch_layout.nb_channels;
1406  frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
1407  frame->ch_layout.u.mask : 0;
1409 #endif
1410  break;
1411  }
1412  return 0;
1413 }
1414 
1416 {
1417  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
1418  int i;
1419  int num_planes = av_pix_fmt_count_planes(frame->format);
1421  int flags = desc ? desc->flags : 0;
1422  if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL))
1423  num_planes = 2;
1424  for (i = 0; i < num_planes; i++) {
1425  av_assert0(frame->data[i]);
1426  }
1427  // For formats without data like hwaccel allow unused pointers to be non-NULL.
1428  for (i = num_planes; num_planes > 0 && i < FF_ARRAY_ELEMS(frame->data); i++) {
1429  if (frame->data[i])
1430  av_log(avctx, AV_LOG_ERROR, "Buffer returned by get_buffer2() did not zero unused plane pointers\n");
1431  frame->data[i] = NULL;
1432  }
1433  }
1434 }
1435 
1436 static void decode_data_free(void *opaque, uint8_t *data)
1437 {
1439 
1440  if (fdd->post_process_opaque_free)
1442 
1443  if (fdd->hwaccel_priv_free)
1444  fdd->hwaccel_priv_free(fdd->hwaccel_priv);
1445 
1446  av_freep(&fdd);
1447 }
1448 
1450 {
1451  AVBufferRef *fdd_buf;
1452  FrameDecodeData *fdd;
1453 
1454  av_assert1(!frame->private_ref);
1455  av_buffer_unref(&frame->private_ref);
1456 
1457  fdd = av_mallocz(sizeof(*fdd));
1458  if (!fdd)
1459  return AVERROR(ENOMEM);
1460 
1461  fdd_buf = av_buffer_create((uint8_t*)fdd, sizeof(*fdd), decode_data_free,
1463  if (!fdd_buf) {
1464  av_freep(&fdd);
1465  return AVERROR(ENOMEM);
1466  }
1467 
1468  frame->private_ref = fdd_buf;
1469 
1470  return 0;
1471 }
1472 
1474 {
1475  const AVHWAccel *hwaccel = avctx->hwaccel;
1476  int override_dimensions = 1;
1477  int ret;
1478 
1480 
1481  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
1482  if ((unsigned)avctx->width > INT_MAX - STRIDE_ALIGN ||
1483  (ret = av_image_check_size2(FFALIGN(avctx->width, STRIDE_ALIGN), avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx)) < 0 || avctx->pix_fmt<0) {
1484  av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n");
1485  ret = AVERROR(EINVAL);
1486  goto fail;
1487  }
1488 
1489  if (frame->width <= 0 || frame->height <= 0) {
1490  frame->width = FFMAX(avctx->width, AV_CEIL_RSHIFT(avctx->coded_width, avctx->lowres));
1491  frame->height = FFMAX(avctx->height, AV_CEIL_RSHIFT(avctx->coded_height, avctx->lowres));
1492  override_dimensions = 0;
1493  }
1494 
1495  if (frame->data[0] || frame->data[1] || frame->data[2] || frame->data[3]) {
1496  av_log(avctx, AV_LOG_ERROR, "pic->data[*]!=NULL in get_buffer_internal\n");
1497  ret = AVERROR(EINVAL);
1498  goto fail;
1499  }
1500  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
1501 #if FF_API_OLD_CHANNEL_LAYOUT
1503  /* compat layer for old-style get_buffer() implementations */
1504  avctx->channels = avctx->ch_layout.nb_channels;
1505  avctx->channel_layout = (avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) ?
1506  avctx->ch_layout.u.mask : 0;
1508 #endif
1509 
1510  if (frame->nb_samples * (int64_t)avctx->ch_layout.nb_channels > avctx->max_samples) {
1511  av_log(avctx, AV_LOG_ERROR, "samples per frame %d, exceeds max_samples %"PRId64"\n", frame->nb_samples, avctx->max_samples);
1512  ret = AVERROR(EINVAL);
1513  goto fail;
1514  }
1515  }
1516  ret = ff_decode_frame_props(avctx, frame);
1517  if (ret < 0)
1518  goto fail;
1519 
1520  if (hwaccel) {
1521  if (hwaccel->alloc_frame) {
1522  ret = hwaccel->alloc_frame(avctx, frame);
1523  goto end;
1524  }
1525  } else
1526  avctx->sw_pix_fmt = avctx->pix_fmt;
1527 
1528  ret = avctx->get_buffer2(avctx, frame, flags);
1529  if (ret < 0)
1530  goto fail;
1531 
1533 
1535  if (ret < 0)
1536  goto fail;
1537 
1538 end:
1539  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions &&
1541  frame->width = avctx->width;
1542  frame->height = avctx->height;
1543  }
1544 
1545 fail:
1546  if (ret < 0) {
1547  av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1549  }
1550 
1551  return ret;
1552 }
1553 
1555 {
1556  AVFrame *tmp;
1557  int ret;
1558 
1560 
1561  if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) {
1562  av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n",
1563  frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt));
1565  }
1566 
1567  if (!frame->data[0])
1568  return ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF);
1569 
1571  return ff_decode_frame_props(avctx, frame);
1572 
1573  tmp = av_frame_alloc();
1574  if (!tmp)
1575  return AVERROR(ENOMEM);
1576 
1578 
1580  if (ret < 0) {
1581  av_frame_free(&tmp);
1582  return ret;
1583  }
1584 
1586  av_frame_free(&tmp);
1587 
1588  return 0;
1589 }
1590 
1592 {
1593  int ret = reget_buffer_internal(avctx, frame, flags);
1594  if (ret < 0)
1595  av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
1596  return ret;
1597 }
1598 
1600 {
1601  AVCodecInternal *avci = avctx->internal;
1602  int ret = 0;
1603 
1604  /* if the decoder init function was already called previously,
1605  * free the already allocated subtitle_header before overwriting it */
1606  av_freep(&avctx->subtitle_header);
1607 
1608  if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) {
1609  av_log(avctx, AV_LOG_WARNING, "The maximum value for lowres supported by the decoder is %d\n",
1610  avctx->codec->max_lowres);
1611  avctx->lowres = avctx->codec->max_lowres;
1612  }
1613  if (avctx->sub_charenc) {
1614  if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) {
1615  av_log(avctx, AV_LOG_ERROR, "Character encoding is only "
1616  "supported with subtitles codecs\n");
1617  return AVERROR(EINVAL);
1618  } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) {
1619  av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, "
1620  "subtitles character encoding will be ignored\n",
1621  avctx->codec_descriptor->name);
1623  } else {
1624  /* input character encoding is set for a text based subtitle
1625  * codec at this point */
1628 
1630 #if CONFIG_ICONV
1631  iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc);
1632  if (cd == (iconv_t)-1) {
1633  ret = AVERROR(errno);
1634  av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context "
1635  "with input character encoding \"%s\"\n", avctx->sub_charenc);
1636  return ret;
1637  }
1638  iconv_close(cd);
1639 #else
1640  av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles "
1641  "conversion needs a libavcodec built with iconv support "
1642  "for this codec\n");
1643  return AVERROR(ENOSYS);
1644 #endif
1645  }
1646  }
1647  }
1648 
1650  avctx->pts_correction_num_faulty_dts = 0;
1651  avctx->pts_correction_last_pts =
1652  avctx->pts_correction_last_dts = INT64_MIN;
1653 
1654  if ( !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
1656  av_log(avctx, AV_LOG_WARNING,
1657  "gray decoding requested but not enabled at configuration time\n");
1658  if (avctx->flags2 & AV_CODEC_FLAG2_EXPORT_MVS) {
1660  }
1661 
1662  avci->in_pkt = av_packet_alloc();
1663  avci->last_pkt_props = av_packet_alloc();
1664  if (!avci->in_pkt || !avci->last_pkt_props)
1665  return AVERROR(ENOMEM);
1666 
1667  ret = decode_bsfs_init(avctx);
1668  if (ret < 0)
1669  return ret;
1670 
1671  return 0;
1672 }
1673 
1674 int ff_copy_palette(void *dst, const AVPacket *src, void *logctx)
1675 {
1676  size_t size;
1677  const void *pal = av_packet_get_side_data(src, AV_PKT_DATA_PALETTE, &size);
1678 
1679  if (pal && size == AVPALETTE_SIZE) {
1680  memcpy(dst, pal, AVPALETTE_SIZE);
1681  return 1;
1682  } else if (pal) {
1683  av_log(logctx, AV_LOG_ERROR,
1684  "Palette size %"SIZE_SPECIFIER" is wrong\n", size);
1685  }
1686  return 0;
1687 }
AVSubtitle
Definition: avcodec.h:2330
AVCodecInternal::initial_sample_rate
int initial_sample_rate
Definition: internal.h:160
hwconfig.h
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: avpacket.c:422
AVCodecContext::hwaccel
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:1405
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:82
FFCodec::receive_frame
int(* receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame)
Decode API with decoupled packet/frame dataflow.
Definition: codec_internal.h:210
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:204
AVBSFContext::par_in
AVCodecParameters * par_in
Parameters of the input stream.
Definition: bsf.h:90
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
ff_decode_get_packet
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
Called by decoders to get the next packet for decoding.
Definition: decode.c:183
hw_pix_fmt
static enum AVPixelFormat hw_pix_fmt
Definition: hw_decode.c:45
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
AVCodecContext::get_format
enum AVPixelFormat(* get_format)(struct AVCodecContext *s, const enum AVPixelFormat *fmt)
Callback to negotiate the pixel format.
Definition: avcodec.h:689
ff_icc_profile_read_primaries
int ff_icc_profile_read_primaries(FFIccContext *s, cmsHPROFILE profile, AVColorPrimariesDesc *out_primaries)
Read the color primaries and white point coefficients encoded by an ICC profile, and return the raw v...
Definition: fflcms2.c:204
AV_WL32
#define AV_WL32(p, v)
Definition: intreadwrite.h:426
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:1002
AVColorTransferCharacteristic
AVColorTransferCharacteristic
Color Transfer Characteristic.
Definition: pixfmt.h:558
ff_get_format
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition: decode.c:1147
apply_cropping
static int apply_cropping(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:634
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1034
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:682
av_frame_new_side_data
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, size_t size)
Add a new side data to a frame.
Definition: frame.c:670
AV_PKT_DATA_PARAM_CHANGE
@ AV_PKT_DATA_PARAM_CHANGE
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
Definition: packet.h:73
AVColorPrimariesDesc
Struct that contains both white point location and primaries location, providing the complete descrip...
Definition: csp.h:78
sub
static float sub(float src0, float src1)
Definition: dnn_backend_native_layer_mathbinary.c:31
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2888
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition: error.h:57
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
AV_HWACCEL_CODEC_CAP_EXPERIMENTAL
#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL
HWAccel is experimental and is thus avoided in favor of non experimental codecs.
Definition: avcodec.h:2230
AV_FRAME_DATA_A53_CC
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:59
AV_CODEC_HW_CONFIG_METHOD_INTERNAL
@ AV_CODEC_HW_CONFIG_METHOD_INTERNAL
The codec supports this format by some internal method.
Definition: codec.h:326
avcodec_parameters_from_context
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
Definition: codec_par.c:99
AV_PKT_FLAG_DISCARD
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
Definition: packet.h:436
AVHWFramesContext::format
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
Definition: hwcontext.h:209
AVCodecInternal::skip_samples
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:132
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1382
AV_CODEC_FLAG_UNALIGNED
#define AV_CODEC_FLAG_UNALIGNED
Allow decoders to produce frames with data planes that are not aligned to CPU requirements (e....
Definition: avcodec.h:212
AV_TIME_BASE_Q
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:260
AVCodecDescriptor::name
const char * name
Name of the codec described by this descriptor.
Definition: codec_desc.h:46
AV_WL8
#define AV_WL8(p, d)
Definition: intreadwrite.h:399
av_unused
#define av_unused
Definition: attributes.h:131
decode_simple_receive_frame
static int decode_simple_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:524
AV_FRAME_DATA_S12M_TIMECODE
@ AV_FRAME_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1.
Definition: frame.h:152
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:99
FrameDecodeData
This struct stores per-frame lavc-internal data and is attached to it via private_ref.
Definition: decode.h:34
av_hwframe_ctx_init
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use.
Definition: hwcontext.c:334
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:330
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:995
AVCodec::capabilities
int capabilities
Codec capabilities.
Definition: codec.h:203
av_hwframe_ctx_alloc
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context.
Definition: hwcontext.c:248
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:374
AVHWAccel::capabilities
int capabilities
Hardware accelerated codec capabilities.
Definition: avcodec.h:2109
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:561
AV_PKT_DATA_PALETTE
@ AV_PKT_DATA_PALETTE
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette.
Definition: packet.h:47
data
const char data[16]
Definition: mxf.c:146
AVHWAccel::init
int(* init)(AVCodecContext *avctx)
Initialize the hwaccel private data.
Definition: avcodec.h:2194
FFCodec
Definition: codec_internal.h:127
AVCodecContext::subtitle_header
uint8_t * subtitle_header
Header containing style information for text subtitles.
Definition: avcodec.h:1723
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
@ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
Definition: packet.h:458
FrameDecodeData::hwaccel_priv_free
void(* hwaccel_priv_free)(void *priv)
Definition: decode.h:53
AV_FRAME_DATA_DISPLAYMATRIX
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: frame.h:85
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:392
FF_COMPLIANCE_EXPERIMENTAL
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
Definition: defs.h:62
FF_SUB_CHARENC_MODE_PRE_DECODER
#define FF_SUB_CHARENC_MODE_PRE_DECODER
the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
Definition: avcodec.h:1799
AVDictionary
Definition: dict.c:32
AVChannelLayout::order
enum AVChannelOrder order
Channel order used in this layout.
Definition: channel_layout.h:306
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AVColorPrimaries
AVColorPrimaries
Chromaticity coordinates of the source primaries.
Definition: pixfmt.h:533
avcodec_default_get_format
enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Definition: decode.c:935
avcodec_is_open
int avcodec_is_open(AVCodecContext *s)
Definition: avcodec.c:704
AVChannelLayout::mask
uint64_t mask
This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used for AV_CHANNEL_ORDER_AMBISONIC ...
Definition: channel_layout.h:333
AV_PKT_DATA_SPHERICAL
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
Definition: packet.h:229
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:311
AVFrame::buf
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
Definition: frame.h:539
AV_RL8
#define AV_RL8(x)
Definition: intreadwrite.h:398
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
Definition: utils.c:91
av_bsf_free
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition: bsf.c:53
FF_SUB_CHARENC_MODE_AUTOMATIC
#define FF_SUB_CHARENC_MODE_AUTOMATIC
libavcodec will select the mode itself
Definition: avcodec.h:1798
tf_sess_config.config
config
Definition: tf_sess_config.py:33
thread.h
av_frame_apply_cropping
int av_frame_apply_cropping(AVFrame *frame, int flags)
Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ crop_bottom fields.
Definition: frame.c:862
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:302
AVCodec::max_lowres
uint8_t max_lowres
maximum value for lowres supported by the decoder
Definition: codec.h:204
av_pix_fmt_count_planes
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2928
AVHWAccel
Definition: avcodec.h:2076
AV_CODEC_FLAG_COPY_OPAQUE
#define AV_CODEC_FLAG_COPY_OPAQUE
Definition: avcodec.h:278
fifo.h
finish
static void finish(void)
Definition: movenc.c:342
bsf.h
AVCodecContext::codec
const struct AVCodec * codec
Definition: avcodec.h:435
AVPacket::opaque_ref
AVBufferRef * opaque_ref
AVBufferRef for free use by the API user.
Definition: packet.h:410
STRIDE_ALIGN
#define STRIDE_ALIGN
Definition: internal.h:49
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:2054
fail
#define fail()
Definition: checkasm.h:134
AVCodecInternal::showed_multi_packet_warning
int showed_multi_packet_warning
Definition: internal.h:151
ff_icc_context_init
int ff_icc_context_init(FFIccContext *s, void *avctx)
Initializes an FFIccContext.
Definition: fflcms2.c:30
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1502
AV_PIX_FMT_FLAG_HWACCEL
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
Definition: pixdesc.h:128
FF_SUB_CHARENC_MODE_DO_NOTHING
#define FF_SUB_CHARENC_MODE_DO_NOTHING
do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for inst...
Definition: avcodec.h:1797
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:506
val
static double val(void *priv, double ch)
Definition: aeval.c:77
FrameDecodeData::post_process_opaque_free
void(* post_process_opaque_free)(void *opaque)
Definition: decode.h:47
ff_decode_frame_props_from_pkt
int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt)
Set various frame properties from the provided packet.
Definition: decode.c:1294
pts
static int64_t pts
Definition: transcode_aac.c:653
add_metadata_from_side_data
static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
Definition: decode.c:1282
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:613
AV_PKT_DATA_DISPLAYMATRIX
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: packet.h:109
guess_correct_pts
static int64_t guess_correct_pts(AVCodecContext *ctx, int64_t reordered_pts, int64_t dts)
Attempt to guess proper monotonic timestamps for decoded video frames which might have incorrect time...
Definition: decode.c:223
AVCodecContext::max_samples
int64_t max_samples
The number of samples per frame to maximally accept.
Definition: avcodec.h:1994
AVRational::num
int num
Numerator.
Definition: rational.h:59
AVFrameSideDataType
AVFrameSideDataType
Definition: frame.h:49
AVHWAccel::priv_data_size
int priv_data_size
Size of the private data to allocate in AVCodecInternal.hwaccel_priv_data.
Definition: avcodec.h:2208
av_image_check_size2
int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of a plane of an image with...
Definition: imgutils.c:289
avsubtitle_free
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition: avcodec.c:409
AVHWDeviceContext
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.
Definition: hwcontext.h:61
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:87
AV_PKT_DATA_STRINGS_METADATA
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
Definition: packet.h:173
AV_PKT_DATA_REPLAYGAIN
@ AV_PKT_DATA_REPLAYGAIN
This side data should be associated with an audio stream and contains ReplayGain information in form ...
Definition: packet.h:100
AVCodecContext::get_buffer2
int(* get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags)
This callback is called at the beginning of each frame to get data buffer(s) for it.
Definition: avcodec.h:1207
GET_UTF8
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
Definition: common.h:469
avcodec_decode_subtitle2
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Decode a subtitle message.
Definition: decode.c:859
AV_CODEC_FLAG_DROPCHANGED
#define AV_CODEC_FLAG_DROPCHANGED
Don't output frames whose parameters differ from first decoded frame in stream.
Definition: avcodec.h:233
avassert.h
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:988
pkt
AVPacket * pkt
Definition: movenc.c:59
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
AVFrameSideData::size
size_t size
Definition: frame.h:239
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AVCodecContext::pts_correction_num_faulty_pts
int64_t pts_correction_num_faulty_pts
Current statistics for PTS correction.
Definition: avcodec.h:1778
ff_decode_receive_frame
int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame)
avcodec_receive_frame() implementation for decoders.
Definition: decode.c:688
hwaccel_uninit
static void hwaccel_uninit(AVCodecContext *avctx)
Definition: decode.c:1135
AVHWAccel::alloc_frame
int(* alloc_frame)(AVCodecContext *avctx, AVFrame *frame)
Allocate a custom buffer.
Definition: avcodec.h:2122
AV_PKT_DATA_AUDIO_SERVICE_TYPE
@ AV_PKT_DATA_AUDIO_SERVICE_TYPE
This side data should be associated with an audio stream and corresponds to enum AVAudioServiceType.
Definition: packet.h:121
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:721
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
@ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
Definition: packet.h:459
AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX
@ AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX
The codec supports this format via the hw_frames_ctx interface.
Definition: codec.h:319
get_subtitle_defaults
static void get_subtitle_defaults(AVSubtitle *sub)
Definition: decode.c:772
FrameDecodeData::post_process_opaque
void * post_process_opaque
Definition: decode.h:46
av_new_packet
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
Definition: avpacket.c:97
validate_avframe_allocation
static void validate_avframe_allocation(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:1415
AV_PKT_DATA_STEREO3D
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
Definition: packet.h:115
AVCodecInternal::buffer_pkt
AVPacket * buffer_pkt
Temporary buffers for newly received or not yet output packets/frames.
Definition: internal.h:147
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:50
AV_BUFFER_FLAG_READONLY
#define AV_BUFFER_FLAG_READONLY
Always treat the buffer as read-only, even when it has only one reference.
Definition: buffer.h:114
AV_PKT_DATA_MASTERING_DISPLAY_METADATA
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
Definition: packet.h:223
AVHWAccel::uninit
int(* uninit)(AVCodecContext *avctx)
Uninitialize the hwaccel private data.
Definition: avcodec.h:2202
AV_GET_BUFFER_FLAG_REF
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
Definition: avcodec.h:404
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AVERROR_INPUT_CHANGED
#define AVERROR_INPUT_CHANGED
Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED)
Definition: error.h:75
AV_FRAME_DATA_AUDIO_SERVICE_TYPE
@ AV_FRAME_DATA_AUDIO_SERVICE_TYPE
This side data must be associated with an audio frame and corresponds to enum AVAudioServiceType defi...
Definition: frame.h:114
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
AVHWDeviceType
AVHWDeviceType
Definition: hwcontext.h:27
AVCodecDescriptor::type
enum AVMediaType type
Definition: codec_desc.h:40
AV_PKT_DATA_ICC_PROFILE
@ AV_PKT_DATA_ICC_PROFILE
ICC profile data consisting of an opaque octet buffer following the format described by ISO 15076-1.
Definition: packet.h:275
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
ctx
AVFormatContext * ctx
Definition: movenc.c:48
decode.h
AVBSFContext::time_base_in
AVRational time_base_in
The timebase used for the timestamps of the input packets.
Definition: bsf.h:102
AV_PKT_DATA_DYNAMIC_HDR10_PLUS
@ AV_PKT_DATA_DYNAMIC_HDR10_PLUS
HDR10+ dynamic metadata associated with a video frame.
Definition: packet.h:300
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
AVCodecHWConfig::pix_fmt
enum AVPixelFormat pix_fmt
For decoders, a hardware pixel format which that decoder may be able to decode to if suitable hardwar...
Definition: codec.h:347
av_csp_primaries_id_from_desc
enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc *prm)
Detects which enum AVColorPrimaries constant corresponds to the given complete gamut description.
Definition: csp.c:110
AVCodecContext::max_pixels
int64_t max_pixels
The number of pixels per image to maximally accept.
Definition: avcodec.h:1906
av_hwdevice_get_type_name
const char * av_hwdevice_get_type_name(enum AVHWDeviceType type)
Get the string name of an AVHWDeviceType.
Definition: hwcontext.c:93
AVPacket::opaque
void * opaque
for some private data of the user
Definition: packet.h:399
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:536
FFCodec::decode
int(* decode)(struct AVCodecContext *avctx, struct AVFrame *frame, int *got_frame_ptr, struct AVPacket *avpkt)
Decode to an AVFrame.
Definition: codec_internal.h:193
decode_data_free
static void decode_data_free(void *opaque, uint8_t *data)
Definition: decode.c:1436
ff_decode_get_hw_frames_ctx
int ff_decode_get_hw_frames_ctx(AVCodecContext *avctx, enum AVHWDeviceType dev_type)
Make sure avctx.hw_frames_ctx is set.
Definition: decode.c:998
AVCodecDescriptor::props
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition: codec_desc.h:54
if
if(ret)
Definition: filter_design.txt:179
AVCodecInternal::changed_frames_dropped
int changed_frames_dropped
Definition: internal.h:157
AVCodecContext::sub_charenc
char * sub_charenc
DTS of the last frame.
Definition: avcodec.h:1788
AV_CODEC_FLAG2_SKIP_MANUAL
#define AV_CODEC_FLAG2_SKIP_MANUAL
Do not skip samples and export skip information as frame side data.
Definition: avcodec.h:367
av_bsf_init
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Definition: bsf.c:150
utf8_check
static int utf8_check(const uint8_t *str)
Definition: decode.c:840
AV_FRAME_DATA_SPHERICAL
@ AV_FRAME_DATA_SPHERICAL
The data represents the AVSphericalMapping structure defined in libavutil/spherical....
Definition: frame.h:131
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AVCodecContext::apply_cropping
int apply_cropping
Video decoding only.
Definition: avcodec.h:1964
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:1009
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:139
av_bsf_receive_packet
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
Definition: bsf.c:231
AVCodec::type
enum AVMediaType type
Definition: codec.h:197
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:461
AVPALETTE_SIZE
#define AVPALETTE_SIZE
Definition: pixfmt.h:32
AV_CODEC_PROP_BITMAP_SUB
#define AV_CODEC_PROP_BITMAP_SUB
Subtitle codec is bitmap based Decoded AVSubtitle data can be read from the AVSubtitleRect->pict fiel...
Definition: codec_desc.h:97
AV_FRAME_DATA_ICC_PROFILE
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
Definition: frame.h:144
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:120
AVCodecInternal::initial_height
int initial_height
Definition: internal.h:159
AV_CODEC_FLAG2_ICC_PROFILES
#define AV_CODEC_FLAG2_ICC_PROFILES
Generate/parse ICC profiles on encode/decode, as appropriate for the type of file.
Definition: avcodec.h:377
ff_icc_profile_detect_transfer
int ff_icc_profile_detect_transfer(FFIccContext *s, cmsHPROFILE profile, enum AVColorTransferCharacteristic *out_trc)
Attempt detecting the transfer characteristic that best approximates the transfer function encoded by...
Definition: fflcms2.c:251
av_packet_ref
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: avpacket.c:430
AVCodecInternal::draining_done
int draining_done
Definition: internal.h:149
UTF8_MAX_BYTES
#define UTF8_MAX_BYTES
Definition: decode.c:778
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:627
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
AVCodecInternal::last_pkt_props
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:90
av_buffer_create
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:55
FFCodec::cb
union FFCodec::@50 cb
av_codec_is_decoder
int av_codec_is_decoder(const AVCodec *codec)
Definition: utils.c:83
AVCodecContext::lowres
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
Definition: avcodec.h:1494
f
f
Definition: af_crystalizer.c:122
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:513
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1473
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_FRAME_DATA_REPLAYGAIN
@ AV_FRAME_DATA_REPLAYGAIN
ReplayGain information in the form of the AVReplayGain struct.
Definition: frame.h:77
AV_CODEC_FLAG_GRAY
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Definition: avcodec.h:301
AVPacket::size
int size
Definition: packet.h:375
ff_thread_decode_frame
int ff_thread_decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPacket *avpkt)
Submit a new frame to a decoding thread.
Definition: pthread_frame.c:459
byte
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_WB16 unsigned int_TMPL byte
Definition: bytestream.h:99
AVCodecContext::extra_hw_frames
int extra_hw_frames
Definition: avcodec.h:1978
codec_internal.h
FrameDecodeData::post_process
int(* post_process)(void *logctx, AVFrame *frame)
The callback to perform some delayed processing on the frame right before it is returned to the calle...
Definition: decode.h:45
AVCodecInternal::hwaccel_priv_data
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:137
av_frame_copy
int av_frame_copy(AVFrame *dst, const AVFrame *src)
Copy the frame data from src to dst.
Definition: frame.c:762
av_bsf_send_packet
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
Definition: bsf.c:203
av_err2str
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:121
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
FF_CODEC_CAP_SETS_FRAME_PROPS
#define FF_CODEC_CAP_SETS_FRAME_PROPS
Codec handles output frame properties internally instead of letting the internal logic derive them fr...
Definition: codec_internal.h:78
AVCodecInternal::initial_format
int initial_format
Definition: internal.h:158
AVCodecInternal::bsf
struct AVBSFContext * bsf
Definition: internal.h:84
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1050
AVCodecContext::pkt_timebase
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
Definition: avcodec.h:1764
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:56
FF_CODEC_CAP_EXPORTS_CROPPING
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually.
Definition: codec_internal.h:60
size
int size
Definition: twinvq_data.h:10344
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
frame_validate
static int frame_validate(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:662
AVFrameSideData::data
uint8_t * data
Definition: frame.h:238
ffcodec
static const av_always_inline FFCodec * ffcodec(const AVCodec *codec)
Definition: codec_internal.h:325
av_frame_is_writable
int av_frame_is_writable(AVFrame *frame)
Check if the frame data is writable.
Definition: frame.c:524
AVCHROMA_LOC_UNSPECIFIED
@ AVCHROMA_LOC_UNSPECIFIED
Definition: pixfmt.h:681
AVCodecHWConfigInternal
Definition: hwconfig.h:29
frame.h
av_packet_unpack_dictionary
int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict)
Unpack a dictionary from side_data.
Definition: avpacket.c:342
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:373
AVCodecContext::pts_correction_num_faulty_dts
int64_t pts_correction_num_faulty_dts
Number of incorrect PTS values so far.
Definition: avcodec.h:1779
AVCodecContext::pts_correction_last_pts
int64_t pts_correction_last_pts
Number of incorrect DTS values so far.
Definition: avcodec.h:1780
hwaccel_init
static int hwaccel_init(AVCodecContext *avctx, const AVCodecHWConfigInternal *hw_config)
Definition: decode.c:1098
AVPacketSideDataType
AVPacketSideDataType
Definition: packet.h:41
AV_PKT_DATA_CONTENT_LIGHT_LEVEL
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: packet.h:236
AV_CHANNEL_ORDER_NATIVE
@ AV_CHANNEL_ORDER_NATIVE
The native channel order, i.e.
Definition: channel_layout.h:118
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:380
av_packet_alloc
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
Definition: avpacket.c:62
AVCodecInternal
Definition: internal.h:52
FFCodec::hw_configs
const struct AVCodecHWConfigInternal *const * hw_configs
Array of pointers to hardware configurations supported by the codec, or NULL if no hardware supported...
Definition: codec_internal.h:261
detect_colorspace
static int detect_colorspace(av_unused AVCodecContext *c, av_unused AVFrame *f)
Definition: decode.c:518
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:932
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:191
FF_THREAD_FRAME
#define FF_THREAD_FRAME
Decode more than one frame at once.
Definition: avcodec.h:1513
AV_FRAME_DATA_SKIP_SAMPLES
@ AV_FRAME_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
Definition: frame.h:109
AVHWAccel::name
const char * name
Name of the hardware accelerated codec.
Definition: avcodec.h:2082
avcodec_send_packet
int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition: decode.c:598
av_samples_copy
int av_samples_copy(uint8_t **dst, uint8_t *const *src, int dst_offset, int src_offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt)
Copy samples from src to dst.
Definition: samplefmt.c:222
FFCodec::caps_internal
unsigned caps_internal
Internal codec capabilities FF_CODEC_CAP_*.
Definition: codec_internal.h:136
extract_packet_props
static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt)
Definition: decode.c:135
av_packet_copy_props
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
Copy only "properties" fields from src to dst.
Definition: avpacket.c:385
bprint.h
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:367
AVCodecInternal::initial_width
int initial_width
Definition: internal.h:159
reget_buffer_internal
static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
Definition: decode.c:1554
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition: avpacket.c:251
decode_receive_frame_internal
static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:540
internal.h
common.h
AVCodecInternal::in_pkt
AVPacket * in_pkt
This packet is used to hold the packet given to decoders implementing the .decode API; it is unused b...
Definition: internal.h:83
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
AV_PKT_DATA_A53_CC
@ AV_PKT_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: packet.h:243
AVCodecContext::pts_correction_last_dts
int64_t pts_correction_last_dts
PTS of the last frame.
Definition: avcodec.h:1781
ff_decode_preinit
int ff_decode_preinit(AVCodecContext *avctx)
Perform decoder initialization and validation.
Definition: decode.c:1599
AV_FRAME_DATA_STEREO3D
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition: frame.h:64
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
av_frame_move_ref
void av_frame_move_ref(AVFrame *dst, AVFrame *src)
Move everything contained in src to dst and reset src.
Definition: frame.c:507
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:478
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:254
AVCodecContext::hw_device_ctx
AVBufferRef * hw_device_ctx
A reference to the AVHWDeviceContext describing the device which will be used by a hardware encoder/d...
Definition: avcodec.h:1928
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
AV_PKT_DATA_SKIP_SAMPLES
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
Definition: packet.h:157
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:1016
FF_CODEC_CAP_SETS_PKT_DTS
#define FF_CODEC_CAP_SETS_PKT_DTS
Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set AVFrame.pkt_dts manually.
Definition: codec_internal.h:49
profile
int profile
Definition: mxfenc.c:2009
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:590
AVCodecContext::height
int height
Definition: avcodec.h:598
decode_simple_internal
static int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, int64_t *discarded_samples)
Definition: decode.c:255
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:635
AVCodecInternal::nb_draining_errors
int nb_draining_errors
Definition: internal.h:154
AVCodecContext::hw_frames_ctx
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames.
Definition: avcodec.h:1887
avcodec.h
FFCodec::decode_sub
int(* decode_sub)(struct AVCodecContext *avctx, struct AVSubtitle *sub, int *got_frame_ptr, const struct AVPacket *avpkt)
Decode subtitle data to an AVSubtitle.
Definition: codec_internal.h:201
AVCodecContext::sub_charenc_mode
int sub_charenc_mode
Subtitles character encoding mode.
Definition: avcodec.h:1796
AVHWFramesContext
This struct describes a set or pool of "hardware" frames (i.e.
Definition: hwcontext.h:124
AVCodecContext::frame_num
int64_t frame_num
Frame counter, set by libavcodec.
Definition: avcodec.h:2065
avcodec_get_hw_frames_parameters
int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, AVBufferRef *device_ref, enum AVPixelFormat hw_pix_fmt, AVBufferRef **out_frames_ref)
Create and return a AVHWFramesContext with values adequate for hardware decoding.
Definition: decode.c:1049
ff_reget_buffer
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Identical in function to ff_get_buffer(), except it reuses the existing buffer if available.
Definition: decode.c:1591
ret
ret
Definition: filter_design.txt:187
AVHWDeviceContext::type
enum AVHWDeviceType type
This field identifies the underlying API used for hardware access.
Definition: hwcontext.h:79
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AV_CODEC_HW_CONFIG_METHOD_AD_HOC
@ AV_CODEC_HW_CONFIG_METHOD_AD_HOC
The codec supports this format by some ad-hoc method.
Definition: codec.h:335
AVCodecContext::strict_std_compliance
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition: avcodec.h:1341
AV_CODEC_PROP_TEXT_SUB
#define AV_CODEC_PROP_TEXT_SUB
Subtitle codec is text based.
Definition: codec_desc.h:102
av_channel_layout_check
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
Definition: channel_layout.c:906
AV_PKT_DATA_S12M_TIMECODE
@ AV_PKT_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1:2014.
Definition: packet.h:292
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
SIZE_SPECIFIER
#define SIZE_SPECIFIER
Definition: internal.h:150
apply_param_change
static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt)
Definition: decode.c:52
ff_decode_frame_props
int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
Set various frame properties from the codec context / packet data.
Definition: decode.c:1350
AV_FRAME_DATA_DYNAMIC_HDR_PLUS
@ AV_FRAME_DATA_DYNAMIC_HDR_PLUS
HDR dynamic metadata associated with a video frame.
Definition: frame.h:159
AVCodecContext
main external API structure.
Definition: avcodec.h:426
AVCodecContext::active_thread_type
int active_thread_type
Which multithreading methods are in use by the codec.
Definition: avcodec.h:1521
AVCodecContext::codec_descriptor
const AVCodecDescriptor * codec_descriptor
AVCodecDescriptor.
Definition: avcodec.h:1771
recode_subtitle
static int recode_subtitle(AVCodecContext *avctx, const AVPacket **outpkt, const AVPacket *inpkt, AVPacket *buf_pkt)
Definition: decode.c:779
channel_layout.h
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AVCodecContext::export_side_data
int export_side_data
Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of metadata exported in frame,...
Definition: avcodec.h:2004
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:76
FF_CODEC_CB_TYPE_RECEIVE_FRAME
@ FF_CODEC_CB_TYPE_RECEIVE_FRAME
Definition: codec_internal.h:115
FFCodec::cb_type
unsigned cb_type
This field determines the type of the codec (decoder/encoder) and also the exact callback cb implemen...
Definition: codec_internal.h:143
avcodec_get_hw_config
const AVCodecHWConfig * avcodec_get_hw_config(const AVCodec *codec, int index)
Retrieve supported hardware configurations for a codec.
Definition: utils.c:884
AVCodecInternal::buffer_frame
AVFrame * buffer_frame
Definition: internal.h:148
AV_CODEC_CAP_PARAM_CHANGE
#define AV_CODEC_CAP_PARAM_CHANGE
Codec supports changed parameters at any point.
Definition: codec.h:115
av_channel_layout_copy
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
Definition: channel_layout.c:639
AVCodecInternal::draining
int draining
checks API usage: after codec draining, flush is required to resume operation
Definition: internal.h:142
FFCodec::bsfs
const char * bsfs
Decoding only, a comma-separated list of bitstream filters to apply to packets before decoding.
Definition: codec_internal.h:252
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:81
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:613
AVHWFramesContext::initial_pool_size
int initial_pool_size
Initial size of the frame pool.
Definition: hwcontext.h:199
AVCodecContext::codec_type
enum AVMediaType codec_type
Definition: avcodec.h:434
AV_FRAME_FLAG_DISCARD
#define AV_FRAME_FLAG_DISCARD
A flag to mark the frames which need to be decoded, but shouldn't be output.
Definition: frame.h:577
desc
const char * desc
Definition: libsvtav1.c:83
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
av_bsf_list_parse_str
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
Parse string describing list of bitstream filters and create single AVBSFContext describing the whole...
Definition: bsf.c:527
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AV_CODEC_EXPORT_DATA_MVS
#define AV_CODEC_EXPORT_DATA_MVS
Export motion vectors through frame side data.
Definition: avcodec.h:385
AV_CODEC_CAP_SUBFRAMES
#define AV_CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time,...
Definition: codec.h:94
ff_attach_decode_data
int ff_attach_decode_data(AVFrame *frame)
Definition: decode.c:1449
AV_FRAME_CROP_UNALIGNED
@ AV_FRAME_CROP_UNALIGNED
Apply the maximum possible cropping, even if it requires setting the AVFrame.data[] entries to unalig...
Definition: frame.h:934
AVCodecInternal::initial_ch_layout
AVChannelLayout initial_ch_layout
Definition: internal.h:161
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:236
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
AV_CODEC_FLAG2_EXPORT_MVS
#define AV_CODEC_FLAG2_EXPORT_MVS
Export motion vectors through frame side data.
Definition: avcodec.h:363
FFALIGN
#define FFALIGN(x, a)
Definition: macros.h:78
AVPacket
This structure stores compressed data.
Definition: packet.h:351
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AVHWAccel::frame_params
int(* frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
Fill the given hw_frames context with current codec parameters.
Definition: avcodec.h:2223
AVPacket::pos
int64_t pos
byte position in stream, -1 if unknown
Definition: packet.h:394
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:598
bytestream.h
convert_header.str
string str
Definition: convert_header.py:20
FrameDecodeData::hwaccel_priv
void * hwaccel_priv
Per-frame private data for hwaccels.
Definition: decode.h:52
imgutils.h
AVCodecContext::frame_number
attribute_deprecated int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1076
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:561
AVChannelLayout::u
union AVChannelLayout::@314 u
Details about which channels are present in this layout.
hwcontext.h
AVERROR_BUG
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:52
AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX
@ AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX
The codec supports this format via the hw_device_ctx interface.
Definition: codec.h:306
AVCodecHWConfigInternal::hwaccel
const AVHWAccel * hwaccel
If this configuration uses a hwaccel, a pointer to it.
Definition: hwconfig.h:39
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
AVCodecHWConfig
Definition: codec.h:338
AVCodecContext::sw_pix_fmt
enum AVPixelFormat sw_pix_fmt
Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1757
av_image_check_sar
int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar)
Check if the given sample aspect ratio of an image is valid.
Definition: imgutils.c:323
avstring.h
ff_copy_palette
int ff_copy_palette(void *dst, const AVPacket *src, void *logctx)
Check whether the side-data of src contains a palette of size AVPALETTE_SIZE; if so,...
Definition: decode.c:1674
AVCodecHWConfigInternal::public
AVCodecHWConfig public
This is the structure which will be returned to the user by avcodec_get_hw_config().
Definition: hwconfig.h:34
decode_bsfs_init
static int decode_bsfs_init(AVCodecContext *avctx)
Definition: decode.c:148
int
int
Definition: ffmpeg_filter.c:156
AV_PIX_FMT_FLAG_PAL
#define AV_PIX_FMT_FLAG_PAL
Pixel format has a palette in data[1], values are indexes in this palette.
Definition: pixdesc.h:120
AVHWAccel::pix_fmt
enum AVPixelFormat pix_fmt
Supported pixel format.
Definition: avcodec.h:2103
AVCodecContext::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition: avcodec.h:795
FF_REGET_BUFFER_FLAG_READONLY
#define FF_REGET_BUFFER_FLAG_READONLY
the returned buffer does not need to be writable
Definition: decode.h:140
AVPacket::side_data_elems
int side_data_elems
Definition: packet.h:386
av_get_pix_fmt_name
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:2808
FF_SUB_CHARENC_MODE_IGNORE
#define FF_SUB_CHARENC_MODE_IGNORE
neither convert the subtitles, nor check them for valid UTF-8
Definition: avcodec.h:1800
min
float min
Definition: vorbis_enc_data.h:429
intmath.h