2 * generic encoding-related code
4 * This file is part of FFmpeg.
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.
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.
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
21 #include "libavutil/attributes.h"
22 #include "libavutil/avassert.h"
23 #include "libavutil/channel_layout.h"
24 #include "libavutil/emms.h"
25 #include "libavutil/frame.h"
26 #include "libavutil/imgutils.h"
27 #include "libavutil/internal.h"
28 #include "libavutil/mem.h"
29 #include "libavutil/pixdesc.h"
30 #include "libavutil/samplefmt.h"
33 #include "avcodec_internal.h"
34 #include "codec_desc.h"
35 #include "codec_internal.h"
37 #include "frame_thread_encoder.h"
40 typedef struct EncodeContext
{
44 * This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only
45 * formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set).
46 * This is used to set said flag generically for said encoders.
51 * An audio frame with less than required samples has been submitted (and
52 * potentially padded with silence). Reject all subsequent frames.
57 static EncodeContext
*encode_ctx(AVCodecInternal
*avci
)
59 return (EncodeContext
*)avci
;
62 int ff_alloc_packet(AVCodecContext
*avctx
, AVPacket
*avpkt
, int64_t size
)
64 if (size
< 0 || size
> INT_MAX
- AV_INPUT_BUFFER_PADDING_SIZE
) {
65 av_log(avctx
, AV_LOG_ERROR
, "Invalid minimum required packet size %"PRId64
" (max allowed is %d)\n",
66 size
, INT_MAX
- AV_INPUT_BUFFER_PADDING_SIZE
);
67 return AVERROR(EINVAL
);
70 av_assert0(!avpkt
->data
);
72 av_fast_padded_malloc(&avctx
->internal
->byte_buffer
,
73 &avctx
->internal
->byte_buffer_size
, size
);
74 avpkt
->data
= avctx
->internal
->byte_buffer
;
76 av_log(avctx
, AV_LOG_ERROR
, "Failed to allocate packet of size %"PRId64
"\n", size
);
77 return AVERROR(ENOMEM
);
84 int avcodec_default_get_encode_buffer(AVCodecContext
*avctx
, AVPacket
*avpkt
, int flags
)
88 if (avpkt
->size
< 0 || avpkt
->size
> INT_MAX
- AV_INPUT_BUFFER_PADDING_SIZE
)
89 return AVERROR(EINVAL
);
91 if (avpkt
->data
|| avpkt
->buf
) {
92 av_log(avctx
, AV_LOG_ERROR
, "avpkt->{data,buf} != NULL in avcodec_default_get_encode_buffer()\n");
93 return AVERROR(EINVAL
);
96 ret
= av_buffer_realloc(&avpkt
->buf
, avpkt
->size
+ AV_INPUT_BUFFER_PADDING_SIZE
);
98 av_log(avctx
, AV_LOG_ERROR
, "Failed to allocate packet of size %d\n", avpkt
->size
);
101 avpkt
->data
= avpkt
->buf
->data
;
106 int ff_get_encode_buffer(AVCodecContext
*avctx
, AVPacket
*avpkt
, int64_t size
, int flags
)
110 if (size
< 0 || size
> INT_MAX
- AV_INPUT_BUFFER_PADDING_SIZE
)
111 return AVERROR(EINVAL
);
113 av_assert0(!avpkt
->data
&& !avpkt
->buf
);
116 ret
= avctx
->get_encode_buffer(avctx
, avpkt
, flags
);
120 if (!avpkt
->data
|| !avpkt
->buf
) {
121 av_log(avctx
, AV_LOG_ERROR
, "No buffer returned by get_encode_buffer()\n");
122 ret
= AVERROR(EINVAL
);
125 memset(avpkt
->data
+ avpkt
->size
, 0, AV_INPUT_BUFFER_PADDING_SIZE
);
130 av_log(avctx
, AV_LOG_ERROR
, "get_encode_buffer() failed\n");
131 av_packet_unref(avpkt
);
137 static int encode_make_refcounted(AVCodecContext
*avctx
, AVPacket
*avpkt
)
139 uint8_t *data
= avpkt
->data
;
146 ret
= ff_get_encode_buffer(avctx
, avpkt
, avpkt
->size
, 0);
149 memcpy(avpkt
->data
, data
, avpkt
->size
);
155 * Pad last frame with silence.
157 static int pad_last_frame(AVCodecContext
*s
, AVFrame
*frame
, const AVFrame
*src
, int out_samples
)
161 frame
->format
= src
->format
;
162 frame
->nb_samples
= out_samples
;
163 ret
= av_channel_layout_copy(&frame
->ch_layout
, &s
->ch_layout
);
166 ret
= av_frame_get_buffer(frame
, 0);
170 ret
= av_frame_copy_props(frame
, src
);
174 if ((ret
= av_samples_copy(frame
->extended_data
, src
->extended_data
, 0, 0,
175 src
->nb_samples
, s
->ch_layout
.nb_channels
,
178 if ((ret
= av_samples_set_silence(frame
->extended_data
, src
->nb_samples
,
179 frame
->nb_samples
- src
->nb_samples
,
180 s
->ch_layout
.nb_channels
, s
->sample_fmt
)) < 0)
186 av_frame_unref(frame
);
187 encode_ctx(s
->internal
)->last_audio_frame
= 0;
191 int avcodec_encode_subtitle(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
192 const AVSubtitle
*sub
)
195 if (sub
->start_display_time
) {
196 av_log(avctx
, AV_LOG_ERROR
, "start_display_time must be 0.\n");
200 ret
= ffcodec(avctx
->codec
)->cb
.encode_sub(avctx
, buf
, buf_size
, sub
);
205 int ff_encode_get_frame(AVCodecContext
*avctx
, AVFrame
*frame
)
207 AVCodecInternal
*avci
= avctx
->internal
;
212 if (!avci
->buffer_frame
->buf
[0])
213 return AVERROR(EAGAIN
);
215 av_frame_move_ref(frame
, avci
->buffer_frame
);
218 FF_DISABLE_DEPRECATION_WARNINGS
219 if (frame
->key_frame
)
220 frame
->flags
|= AV_FRAME_FLAG_KEY
;
221 FF_ENABLE_DEPRECATION_WARNINGS
223 #if FF_API_INTERLACED_FRAME
224 FF_DISABLE_DEPRECATION_WARNINGS
225 if (frame
->interlaced_frame
)
226 frame
->flags
|= AV_FRAME_FLAG_INTERLACED
;
227 if (frame
->top_field_first
)
228 frame
->flags
|= AV_FRAME_FLAG_TOP_FIELD_FIRST
;
229 FF_ENABLE_DEPRECATION_WARNINGS
235 int ff_encode_reordered_opaque(AVCodecContext
*avctx
,
236 AVPacket
*pkt
, const AVFrame
*frame
)
238 if (avctx
->flags
& AV_CODEC_FLAG_COPY_OPAQUE
) {
239 int ret
= av_buffer_replace(&pkt
->opaque_ref
, frame
->opaque_ref
);
242 pkt
->opaque
= frame
->opaque
;
248 int ff_encode_encode_cb(AVCodecContext
*avctx
, AVPacket
*avpkt
,
249 AVFrame
*frame
, int *got_packet
)
251 const FFCodec
*const codec
= ffcodec(avctx
->codec
);
254 ret
= codec
->cb
.encode(avctx
, avpkt
, frame
, got_packet
);
256 av_assert0(ret
<= 0);
258 if (!ret
&& *got_packet
) {
260 ret
= encode_make_refcounted(avctx
, avpkt
);
263 // Date returned by encoders must always be ref-counted
264 av_assert0(avpkt
->buf
);
267 // set the timestamps for the simple no-delay case
268 // encoders with delay have to set the timestamps themselves
269 if (!(avctx
->codec
->capabilities
& AV_CODEC_CAP_DELAY
) ||
270 (frame
&& (codec
->caps_internal
& FF_CODEC_CAP_EOF_FLUSH
))) {
271 if (avpkt
->pts
== AV_NOPTS_VALUE
)
272 avpkt
->pts
= frame
->pts
;
274 if (!avpkt
->duration
) {
276 avpkt
->duration
= frame
->duration
;
277 else if (avctx
->codec
->type
== AVMEDIA_TYPE_AUDIO
) {
278 avpkt
->duration
= ff_samples_to_time_base(avctx
,
283 ret
= ff_encode_reordered_opaque(avctx
, avpkt
, frame
);
288 // dts equals pts unless there is reordering
289 // there can be no reordering if there is no encoder delay
290 if (!(avctx
->codec_descriptor
->props
& AV_CODEC_PROP_REORDER
) ||
291 !(avctx
->codec
->capabilities
& AV_CODEC_CAP_DELAY
) ||
292 (codec
->caps_internal
& FF_CODEC_CAP_EOF_FLUSH
))
293 avpkt
->dts
= avpkt
->pts
;
296 av_packet_unref(avpkt
);
300 av_frame_unref(frame
);
305 static int encode_simple_internal(AVCodecContext
*avctx
, AVPacket
*avpkt
)
307 AVCodecInternal
*avci
= avctx
->internal
;
308 AVFrame
*frame
= avci
->in_frame
;
309 const FFCodec
*const codec
= ffcodec(avctx
->codec
);
313 if (avci
->draining_done
)
316 if (!frame
->buf
[0] && !avci
->draining
) {
317 av_frame_unref(frame
);
318 ret
= ff_encode_get_frame(avctx
, frame
);
319 if (ret
< 0 && ret
!= AVERROR_EOF
)
323 if (!frame
->buf
[0]) {
324 if (!(avctx
->codec
->capabilities
& AV_CODEC_CAP_DELAY
||
325 avci
->frame_thread_encoder
))
328 // Flushing is signaled with a NULL frame
334 av_assert0(codec
->cb_type
== FF_CODEC_CB_TYPE_ENCODE
);
336 if (CONFIG_FRAME_THREAD_ENCODER
&& avci
->frame_thread_encoder
)
337 /* This will unref frame. */
338 ret
= ff_thread_video_encode_frame(avctx
, avpkt
, frame
, &got_packet
);
340 ret
= ff_encode_encode_cb(avctx
, avpkt
, frame
, &got_packet
);
343 if (avci
->draining
&& !got_packet
)
344 avci
->draining_done
= 1;
349 static int encode_simple_receive_packet(AVCodecContext
*avctx
, AVPacket
*avpkt
)
353 while (!avpkt
->data
&& !avpkt
->side_data
) {
354 ret
= encode_simple_internal(avctx
, avpkt
);
362 static int encode_receive_packet_internal(AVCodecContext
*avctx
, AVPacket
*avpkt
)
364 AVCodecInternal
*avci
= avctx
->internal
;
367 if (avci
->draining_done
)
370 av_assert0(!avpkt
->data
&& !avpkt
->side_data
);
372 if (avctx
->codec
->type
== AVMEDIA_TYPE_VIDEO
) {
373 if ((avctx
->flags
& AV_CODEC_FLAG_PASS1
) && avctx
->stats_out
)
374 avctx
->stats_out
[0] = '\0';
375 if (av_image_check_size2(avctx
->width
, avctx
->height
, avctx
->max_pixels
, AV_PIX_FMT_NONE
, 0, avctx
))
376 return AVERROR(EINVAL
);
379 if (ffcodec(avctx
->codec
)->cb_type
== FF_CODEC_CB_TYPE_RECEIVE_PACKET
) {
380 ret
= ffcodec(avctx
->codec
)->cb
.receive_packet(avctx
, avpkt
);
382 av_packet_unref(avpkt
);
384 // Encoders must always return ref-counted buffers.
385 // Side-data only packets have no data and can be not ref-counted.
386 av_assert0(!avpkt
->data
|| avpkt
->buf
);
388 ret
= encode_simple_receive_packet(avctx
, avpkt
);
390 avpkt
->flags
|= encode_ctx(avci
)->intra_only_flag
;
392 if (ret
== AVERROR_EOF
)
393 avci
->draining_done
= 1;
399 static int encode_generate_icc_profile(AVCodecContext
*avctx
, AVFrame
*frame
)
401 enum AVColorTransferCharacteristic trc
= frame
->color_trc
;
402 enum AVColorPrimaries prim
= frame
->color_primaries
;
403 const FFCodec
*const codec
= ffcodec(avctx
->codec
);
404 AVCodecInternal
*avci
= avctx
->internal
;
408 /* don't generate ICC profiles if disabled or unsupported */
409 if (!(avctx
->flags2
& AV_CODEC_FLAG2_ICC_PROFILES
))
411 if (!(codec
->caps_internal
& FF_CODEC_CAP_ICC_PROFILES
))
414 if (trc
== AVCOL_TRC_UNSPECIFIED
)
415 trc
= avctx
->color_trc
;
416 if (prim
== AVCOL_PRI_UNSPECIFIED
)
417 prim
= avctx
->color_primaries
;
418 if (trc
== AVCOL_TRC_UNSPECIFIED
|| prim
== AVCOL_PRI_UNSPECIFIED
)
419 return 0; /* can't generate ICC profile with missing csp tags */
421 if (av_frame_get_side_data(frame
, AV_FRAME_DATA_ICC_PROFILE
))
422 return 0; /* don't overwrite existing ICC profile */
424 if (!avci
->icc
.avctx
) {
425 ret
= ff_icc_context_init(&avci
->icc
, avctx
);
430 ret
= ff_icc_profile_generate(&avci
->icc
, prim
, trc
, &profile
);
434 ret
= ff_icc_profile_attach(&avci
->icc
, profile
, frame
);
435 cmsCloseProfile(profile
);
438 #else /* !CONFIG_LCMS2 */
439 static int encode_generate_icc_profile(av_unused AVCodecContext
*c
, av_unused AVFrame
*f
)
445 static int encode_send_frame_internal(AVCodecContext
*avctx
, const AVFrame
*src
)
447 AVCodecInternal
*avci
= avctx
->internal
;
448 EncodeContext
*ec
= encode_ctx(avci
);
449 AVFrame
*dst
= avci
->buffer_frame
;
452 if (avctx
->codec
->type
== AVMEDIA_TYPE_AUDIO
) {
453 /* extract audio service type metadata */
454 AVFrameSideData
*sd
= av_frame_get_side_data(src
, AV_FRAME_DATA_AUDIO_SERVICE_TYPE
);
455 if (sd
&& sd
->size
>= sizeof(enum AVAudioServiceType
))
456 avctx
->audio_service_type
= *(enum AVAudioServiceType
*)sd
->data
;
458 /* check for valid frame size */
459 if (!(avctx
->codec
->capabilities
& AV_CODEC_CAP_VARIABLE_FRAME_SIZE
)) {
460 /* if we already got an undersized frame, that must have been the last */
461 if (ec
->last_audio_frame
) {
462 av_log(avctx
, AV_LOG_ERROR
, "frame_size (%d) was not respected for a non-last frame\n", avctx
->frame_size
);
463 return AVERROR(EINVAL
);
465 if (src
->nb_samples
> avctx
->frame_size
) {
466 av_log(avctx
, AV_LOG_ERROR
, "nb_samples (%d) > frame_size (%d)\n", src
->nb_samples
, avctx
->frame_size
);
467 return AVERROR(EINVAL
);
469 if (src
->nb_samples
< avctx
->frame_size
) {
470 ec
->last_audio_frame
= 1;
471 if (!(avctx
->codec
->capabilities
& AV_CODEC_CAP_SMALL_LAST_FRAME
)) {
472 int pad_samples
= avci
->pad_samples
? avci
->pad_samples
: avctx
->frame_size
;
473 int out_samples
= (src
->nb_samples
+ pad_samples
- 1) / pad_samples
* pad_samples
;
475 if (out_samples
!= src
->nb_samples
) {
476 ret
= pad_last_frame(avctx
, dst
, src
, out_samples
);
486 ret
= av_frame_ref(dst
, src
);
492 if (avctx
->codec
->type
== AVMEDIA_TYPE_VIDEO
) {
493 ret
= encode_generate_icc_profile(avctx
, dst
);
498 // unset frame duration unless AV_CODEC_FLAG_FRAME_DURATION is set,
499 // since otherwise we cannot be sure that whatever value it has is in the
500 // right timebase, so we would produce an incorrect value, which is worse
502 if (!(avctx
->flags
& AV_CODEC_FLAG_FRAME_DURATION
))
508 int attribute_align_arg
avcodec_send_frame(AVCodecContext
*avctx
, const AVFrame
*frame
)
510 AVCodecInternal
*avci
= avctx
->internal
;
513 if (!avcodec_is_open(avctx
) || !av_codec_is_encoder(avctx
->codec
))
514 return AVERROR(EINVAL
);
519 if (avci
->buffer_frame
->buf
[0])
520 return AVERROR(EAGAIN
);
525 ret
= encode_send_frame_internal(avctx
, frame
);
530 if (!avci
->buffer_pkt
->data
&& !avci
->buffer_pkt
->side_data
) {
531 ret
= encode_receive_packet_internal(avctx
, avci
->buffer_pkt
);
532 if (ret
< 0 && ret
!= AVERROR(EAGAIN
) && ret
!= AVERROR_EOF
)
541 int attribute_align_arg
avcodec_receive_packet(AVCodecContext
*avctx
, AVPacket
*avpkt
)
543 AVCodecInternal
*avci
= avctx
->internal
;
546 av_packet_unref(avpkt
);
548 if (!avcodec_is_open(avctx
) || !av_codec_is_encoder(avctx
->codec
))
549 return AVERROR(EINVAL
);
551 if (avci
->buffer_pkt
->data
|| avci
->buffer_pkt
->side_data
) {
552 av_packet_move_ref(avpkt
, avci
->buffer_pkt
);
554 ret
= encode_receive_packet_internal(avctx
, avpkt
);
562 static int encode_preinit_video(AVCodecContext
*avctx
)
564 const AVCodec
*c
= avctx
->codec
;
565 const AVPixFmtDescriptor
*pixdesc
= av_pix_fmt_desc_get(avctx
->pix_fmt
);
566 const enum AVPixelFormat
*pix_fmts
;
567 int ret
, i
, num_pix_fmts
;
569 if (!av_get_pix_fmt_name(avctx
->pix_fmt
)) {
570 av_log(avctx
, AV_LOG_ERROR
, "Invalid video pixel format: %d\n",
572 return AVERROR(EINVAL
);
575 ret
= avcodec_get_supported_config(avctx
, NULL
, AV_CODEC_CONFIG_PIX_FORMAT
,
576 0, (const void **) &pix_fmts
, &num_pix_fmts
);
581 for (i
= 0; i
< num_pix_fmts
; i
++)
582 if (avctx
->pix_fmt
== pix_fmts
[i
])
584 if (i
== num_pix_fmts
) {
585 av_log(avctx
, AV_LOG_ERROR
,
586 "Specified pixel format %s is not supported by the %s encoder.\n",
587 av_get_pix_fmt_name(avctx
->pix_fmt
), c
->name
);
589 av_log(avctx
, AV_LOG_ERROR
, "Supported pixel formats:\n");
590 for (int p
= 0; pix_fmts
[p
] != AV_PIX_FMT_NONE
; p
++) {
591 av_log(avctx
, AV_LOG_ERROR
, " %s\n",
592 av_get_pix_fmt_name(pix_fmts
[p
]));
595 return AVERROR(EINVAL
);
597 if (pix_fmts
[i
] == AV_PIX_FMT_YUVJ420P
||
598 pix_fmts
[i
] == AV_PIX_FMT_YUVJ411P
||
599 pix_fmts
[i
] == AV_PIX_FMT_YUVJ422P
||
600 pix_fmts
[i
] == AV_PIX_FMT_YUVJ440P
||
601 pix_fmts
[i
] == AV_PIX_FMT_YUVJ444P
)
602 avctx
->color_range
= AVCOL_RANGE_JPEG
;
605 if ( avctx
->bits_per_raw_sample
< 0
606 || (avctx
->bits_per_raw_sample
> 8 && pixdesc
->comp
[0].depth
<= 8)) {
607 av_log(avctx
, AV_LOG_WARNING
, "Specified bit depth %d not possible with the specified pixel formats depth %d\n",
608 avctx
->bits_per_raw_sample
, pixdesc
->comp
[0].depth
);
609 avctx
->bits_per_raw_sample
= pixdesc
->comp
[0].depth
;
611 if (avctx
->width
<= 0 || avctx
->height
<= 0) {
612 av_log(avctx
, AV_LOG_ERROR
, "dimensions not set\n");
613 return AVERROR(EINVAL
);
616 #if FF_API_TICKS_PER_FRAME
617 FF_DISABLE_DEPRECATION_WARNINGS
618 if (avctx
->ticks_per_frame
&& avctx
->time_base
.num
&&
619 avctx
->ticks_per_frame
> INT_MAX
/ avctx
->time_base
.num
) {
620 av_log(avctx
, AV_LOG_ERROR
,
621 "ticks_per_frame %d too large for the timebase %d/%d.",
622 avctx
->ticks_per_frame
,
623 avctx
->time_base
.num
,
624 avctx
->time_base
.den
);
625 return AVERROR(EINVAL
);
627 FF_ENABLE_DEPRECATION_WARNINGS
630 if (avctx
->hw_frames_ctx
) {
631 AVHWFramesContext
*frames_ctx
= (AVHWFramesContext
*)avctx
->hw_frames_ctx
->data
;
632 if (frames_ctx
->format
!= avctx
->pix_fmt
) {
633 av_log(avctx
, AV_LOG_ERROR
,
634 "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n");
635 return AVERROR(EINVAL
);
637 if (avctx
->sw_pix_fmt
!= AV_PIX_FMT_NONE
&&
638 avctx
->sw_pix_fmt
!= frames_ctx
->sw_format
) {
639 av_log(avctx
, AV_LOG_ERROR
,
640 "Mismatching AVCodecContext.sw_pix_fmt (%s) "
641 "and AVHWFramesContext.sw_format (%s)\n",
642 av_get_pix_fmt_name(avctx
->sw_pix_fmt
),
643 av_get_pix_fmt_name(frames_ctx
->sw_format
));
644 return AVERROR(EINVAL
);
646 avctx
->sw_pix_fmt
= frames_ctx
->sw_format
;
652 static int encode_preinit_audio(AVCodecContext
*avctx
)
654 const AVCodec
*c
= avctx
->codec
;
655 const enum AVSampleFormat
*sample_fmts
;
656 const int *supported_samplerates
;
657 const AVChannelLayout
*ch_layouts
;
658 int ret
, i
, num_sample_fmts
, num_samplerates
, num_ch_layouts
;
660 if (!av_get_sample_fmt_name(avctx
->sample_fmt
)) {
661 av_log(avctx
, AV_LOG_ERROR
, "Invalid audio sample format: %d\n",
663 return AVERROR(EINVAL
);
665 if (avctx
->sample_rate
<= 0) {
666 av_log(avctx
, AV_LOG_ERROR
, "Invalid audio sample rate: %d\n",
668 return AVERROR(EINVAL
);
671 ret
= avcodec_get_supported_config(avctx
, NULL
, AV_CODEC_CONFIG_SAMPLE_FORMAT
,
672 0, (const void **) &sample_fmts
,
677 for (i
= 0; i
< num_sample_fmts
; i
++) {
678 if (avctx
->sample_fmt
== sample_fmts
[i
])
680 if (avctx
->ch_layout
.nb_channels
== 1 &&
681 av_get_planar_sample_fmt(avctx
->sample_fmt
) ==
682 av_get_planar_sample_fmt(sample_fmts
[i
])) {
683 avctx
->sample_fmt
= sample_fmts
[i
];
687 if (i
== num_sample_fmts
) {
688 av_log(avctx
, AV_LOG_ERROR
,
689 "Specified sample format %s is not supported by the %s encoder\n",
690 av_get_sample_fmt_name(avctx
->sample_fmt
), c
->name
);
692 av_log(avctx
, AV_LOG_ERROR
, "Supported sample formats:\n");
693 for (int p
= 0; sample_fmts
[p
] != AV_SAMPLE_FMT_NONE
; p
++) {
694 av_log(avctx
, AV_LOG_ERROR
, " %s\n",
695 av_get_sample_fmt_name(sample_fmts
[p
]));
698 return AVERROR(EINVAL
);
702 ret
= avcodec_get_supported_config(avctx
, NULL
, AV_CODEC_CONFIG_SAMPLE_RATE
,
703 0, (const void **) &supported_samplerates
,
707 if (supported_samplerates
) {
708 for (i
= 0; i
< num_samplerates
; i
++)
709 if (avctx
->sample_rate
== supported_samplerates
[i
])
711 if (i
== num_samplerates
) {
712 av_log(avctx
, AV_LOG_ERROR
,
713 "Specified sample rate %d is not supported by the %s encoder\n",
714 avctx
->sample_rate
, c
->name
);
716 av_log(avctx
, AV_LOG_ERROR
, "Supported sample rates:\n");
717 for (int p
= 0; supported_samplerates
[p
]; p
++)
718 av_log(avctx
, AV_LOG_ERROR
, " %d\n", supported_samplerates
[p
]);
720 return AVERROR(EINVAL
);
723 ret
= avcodec_get_supported_config(avctx
, NULL
, AV_CODEC_CONFIG_CHANNEL_LAYOUT
,
724 0, (const void **) &ch_layouts
, &num_ch_layouts
);
728 for (i
= 0; i
< num_ch_layouts
; i
++) {
729 if (!av_channel_layout_compare(&avctx
->ch_layout
, &ch_layouts
[i
]))
732 if (i
== num_ch_layouts
) {
734 int ret
= av_channel_layout_describe(&avctx
->ch_layout
, buf
, sizeof(buf
));
735 av_log(avctx
, AV_LOG_ERROR
,
736 "Specified channel layout '%s' is not supported by the %s encoder\n",
737 ret
> 0 ? buf
: "?", c
->name
);
739 av_log(avctx
, AV_LOG_ERROR
, "Supported channel layouts:\n");
740 for (int p
= 0; ch_layouts
[p
].nb_channels
; p
++) {
741 ret
= av_channel_layout_describe(&ch_layouts
[p
], buf
, sizeof(buf
));
742 av_log(avctx
, AV_LOG_ERROR
, " %s\n", ret
> 0 ? buf
: "?");
744 return AVERROR(EINVAL
);
748 if (!avctx
->bits_per_raw_sample
)
749 avctx
->bits_per_raw_sample
= av_get_exact_bits_per_sample(avctx
->codec_id
);
750 if (!avctx
->bits_per_raw_sample
)
751 avctx
->bits_per_raw_sample
= 8 * av_get_bytes_per_sample(avctx
->sample_fmt
);
756 int ff_encode_preinit(AVCodecContext
*avctx
)
758 AVCodecInternal
*avci
= avctx
->internal
;
759 EncodeContext
*ec
= encode_ctx(avci
);
762 if (avctx
->time_base
.num
<= 0 || avctx
->time_base
.den
<= 0) {
763 av_log(avctx
, AV_LOG_ERROR
, "The encoder timebase is not set.\n");
764 return AVERROR(EINVAL
);
767 if (avctx
->bit_rate
< 0) {
768 av_log(avctx
, AV_LOG_ERROR
, "The encoder bitrate is negative.\n");
769 return AVERROR(EINVAL
);
772 if (avctx
->flags
& AV_CODEC_FLAG_COPY_OPAQUE
&&
773 !(avctx
->codec
->capabilities
& AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
)) {
774 av_log(avctx
, AV_LOG_ERROR
, "The copy_opaque flag is set, but the "
775 "encoder does not support it.\n");
776 return AVERROR(EINVAL
);
779 switch (avctx
->codec_type
) {
780 case AVMEDIA_TYPE_VIDEO
: ret
= encode_preinit_video(avctx
); break;
781 case AVMEDIA_TYPE_AUDIO
: ret
= encode_preinit_audio(avctx
); break;
786 if ( (avctx
->codec_type
== AVMEDIA_TYPE_VIDEO
|| avctx
->codec_type
== AVMEDIA_TYPE_AUDIO
)
787 && avctx
->bit_rate
>0 && avctx
->bit_rate
<1000) {
788 av_log(avctx
, AV_LOG_WARNING
, "Bitrate %"PRId64
" is extremely low, maybe you mean %"PRId64
"k\n", avctx
->bit_rate
, avctx
->bit_rate
);
791 if (!avctx
->rc_initial_buffer_occupancy
)
792 avctx
->rc_initial_buffer_occupancy
= avctx
->rc_buffer_size
* 3LL / 4;
794 if (avctx
->codec_descriptor
->props
& AV_CODEC_PROP_INTRA_ONLY
)
795 ec
->intra_only_flag
= AV_PKT_FLAG_KEY
;
797 if (ffcodec(avctx
->codec
)->cb_type
== FF_CODEC_CB_TYPE_ENCODE
) {
798 avci
->in_frame
= av_frame_alloc();
800 return AVERROR(ENOMEM
);
803 if ((avctx
->flags
& AV_CODEC_FLAG_RECON_FRAME
)) {
804 if (!(avctx
->codec
->capabilities
& AV_CODEC_CAP_ENCODER_RECON_FRAME
)) {
805 av_log(avctx
, AV_LOG_ERROR
, "Reconstructed frame output requested "
806 "from an encoder not supporting it\n");
807 return AVERROR(ENOSYS
);
810 avci
->recon_frame
= av_frame_alloc();
811 if (!avci
->recon_frame
)
812 return AVERROR(ENOMEM
);
815 for (int i
= 0; ff_sd_global_map
[i
].packet
< AV_PKT_DATA_NB
; i
++) {
816 const enum AVPacketSideDataType type_packet
= ff_sd_global_map
[i
].packet
;
817 const enum AVFrameSideDataType type_frame
= ff_sd_global_map
[i
].frame
;
818 const AVFrameSideData
*sd_frame
;
819 AVPacketSideData
*sd_packet
;
821 sd_frame
= av_frame_side_data_get(avctx
->decoded_side_data
,
822 avctx
->nb_decoded_side_data
,
825 av_packet_side_data_get(avctx
->coded_side_data
, avctx
->nb_coded_side_data
,
830 sd_packet
= av_packet_side_data_new(&avctx
->coded_side_data
, &avctx
->nb_coded_side_data
,
831 type_packet
, sd_frame
->size
, 0);
833 return AVERROR(ENOMEM
);
835 memcpy(sd_packet
->data
, sd_frame
->data
, sd_frame
->size
);
838 if (CONFIG_FRAME_THREAD_ENCODER
) {
839 ret
= ff_frame_thread_encoder_init(avctx
);
847 int ff_encode_alloc_frame(AVCodecContext
*avctx
, AVFrame
*frame
)
851 switch (avctx
->codec
->type
) {
852 case AVMEDIA_TYPE_VIDEO
:
853 frame
->format
= avctx
->pix_fmt
;
854 if (frame
->width
<= 0 || frame
->height
<= 0) {
855 frame
->width
= FFMAX(avctx
->width
, avctx
->coded_width
);
856 frame
->height
= FFMAX(avctx
->height
, avctx
->coded_height
);
860 case AVMEDIA_TYPE_AUDIO
:
861 frame
->sample_rate
= avctx
->sample_rate
;
862 frame
->format
= avctx
->sample_fmt
;
863 if (!frame
->ch_layout
.nb_channels
) {
864 ret
= av_channel_layout_copy(&frame
->ch_layout
, &avctx
->ch_layout
);
871 ret
= avcodec_default_get_buffer2(avctx
, frame
, 0);
873 av_log(avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
874 av_frame_unref(frame
);
881 int ff_encode_receive_frame(AVCodecContext
*avctx
, AVFrame
*frame
)
883 AVCodecInternal
*avci
= avctx
->internal
;
885 if (!avci
->recon_frame
)
886 return AVERROR(EINVAL
);
887 if (!avci
->recon_frame
->buf
[0])
888 return avci
->draining_done
? AVERROR_EOF
: AVERROR(EAGAIN
);
890 av_frame_move_ref(frame
, avci
->recon_frame
);
894 void ff_encode_flush_buffers(AVCodecContext
*avctx
)
896 AVCodecInternal
*avci
= avctx
->internal
;
899 av_frame_unref(avci
->in_frame
);
900 if (avci
->recon_frame
)
901 av_frame_unref(avci
->recon_frame
);
904 AVCodecInternal
*ff_encode_internal_alloc(void)
906 return av_mallocz(sizeof(EncodeContext
));
909 AVCPBProperties
*ff_encode_add_cpb_side_data(AVCodecContext
*avctx
)
911 AVPacketSideData
*tmp
;
912 AVCPBProperties
*props
;
916 for (i
= 0; i
< avctx
->nb_coded_side_data
; i
++)
917 if (avctx
->coded_side_data
[i
].type
== AV_PKT_DATA_CPB_PROPERTIES
)
918 return (AVCPBProperties
*)avctx
->coded_side_data
[i
].data
;
920 props
= av_cpb_properties_alloc(&size
);
924 tmp
= av_realloc_array(avctx
->coded_side_data
, avctx
->nb_coded_side_data
+ 1, sizeof(*tmp
));
930 avctx
->coded_side_data
= tmp
;
931 avctx
->nb_coded_side_data
++;
933 avctx
->coded_side_data
[avctx
->nb_coded_side_data
- 1].type
= AV_PKT_DATA_CPB_PROPERTIES
;
934 avctx
->coded_side_data
[avctx
->nb_coded_side_data
- 1].data
= (uint8_t*)props
;
935 avctx
->coded_side_data
[avctx
->nb_coded_side_data
- 1].size
= size
;
940 int ff_check_codec_matrices(AVCodecContext
*avctx
, unsigned types
, uint16_t min
, uint16_t max
)
942 uint16_t *matrices
[] = {avctx
->intra_matrix
, avctx
->inter_matrix
, avctx
->chroma_intra_matrix
};
943 const char *names
[] = {"Intra", "Inter", "Chroma Intra"};
944 static_assert(FF_ARRAY_ELEMS(matrices
) == FF_ARRAY_ELEMS(names
), "matrix count mismatch");
945 for (int m
= 0; m
< FF_ARRAY_ELEMS(matrices
); m
++) {
946 uint16_t *matrix
= matrices
[m
];
947 if (matrix
&& (types
& (1U << m
))) {
948 for (int i
= 0; i
< 64; i
++) {
949 if (matrix
[i
] < min
|| matrix
[i
] > max
) {
950 av_log(avctx
, AV_LOG_ERROR
, "%s matrix[%d] is %d which is out of the allowed range [%"PRIu16
"-%"PRIu16
"].\n", names
[m
], i
, matrix
[i
], min
, max
);
951 return AVERROR(EINVAL
);