encode.c (30567B)
1 /* 2 * generic encoding-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 "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" 31 32 #include "avcodec.h" 33 #include "avcodec_internal.h" 34 #include "codec_desc.h" 35 #include "codec_internal.h" 36 #include "encode.h" 37 #include "frame_thread_encoder.h" 38 #include "internal.h" 39 40 typedef struct EncodeContext { 41 AVCodecInternal avci; 42 43 /** 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. 47 */ 48 int intra_only_flag; 49 50 /** 51 * An audio frame with less than required samples has been submitted (and 52 * potentially padded with silence). Reject all subsequent frames. 53 */ 54 int last_audio_frame; 55 } EncodeContext; 56 57 static EncodeContext *encode_ctx(AVCodecInternal *avci) 58 { 59 return (EncodeContext*)avci; 60 } 61 62 int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size) 63 { 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); 68 } 69 70 av_assert0(!avpkt->data); 71 72 av_fast_padded_malloc(&avctx->internal->byte_buffer, 73 &avctx->internal->byte_buffer_size, size); 74 avpkt->data = avctx->internal->byte_buffer; 75 if (!avpkt->data) { 76 av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); 77 return AVERROR(ENOMEM); 78 } 79 avpkt->size = size; 80 81 return 0; 82 } 83 84 int avcodec_default_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int flags) 85 { 86 int ret; 87 88 if (avpkt->size < 0 || avpkt->size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) 89 return AVERROR(EINVAL); 90 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); 94 } 95 96 ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE); 97 if (ret < 0) { 98 av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %d\n", avpkt->size); 99 return ret; 100 } 101 avpkt->data = avpkt->buf->data; 102 103 return 0; 104 } 105 106 int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags) 107 { 108 int ret; 109 110 if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) 111 return AVERROR(EINVAL); 112 113 av_assert0(!avpkt->data && !avpkt->buf); 114 115 avpkt->size = size; 116 ret = avctx->get_encode_buffer(avctx, avpkt, flags); 117 if (ret < 0) 118 goto fail; 119 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); 123 goto fail; 124 } 125 memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); 126 127 ret = 0; 128 fail: 129 if (ret < 0) { 130 av_log(avctx, AV_LOG_ERROR, "get_encode_buffer() failed\n"); 131 av_packet_unref(avpkt); 132 } 133 134 return ret; 135 } 136 137 static int encode_make_refcounted(AVCodecContext *avctx, AVPacket *avpkt) 138 { 139 uint8_t *data = avpkt->data; 140 int ret; 141 142 if (avpkt->buf) 143 return 0; 144 145 avpkt->data = NULL; 146 ret = ff_get_encode_buffer(avctx, avpkt, avpkt->size, 0); 147 if (ret < 0) 148 return ret; 149 memcpy(avpkt->data, data, avpkt->size); 150 151 return 0; 152 } 153 154 /** 155 * Pad last frame with silence. 156 */ 157 static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src, int out_samples) 158 { 159 int ret; 160 161 frame->format = src->format; 162 frame->nb_samples = out_samples; 163 ret = av_channel_layout_copy(&frame->ch_layout, &s->ch_layout); 164 if (ret < 0) 165 goto fail; 166 ret = av_frame_get_buffer(frame, 0); 167 if (ret < 0) 168 goto fail; 169 170 ret = av_frame_copy_props(frame, src); 171 if (ret < 0) 172 goto fail; 173 174 if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0, 175 src->nb_samples, s->ch_layout.nb_channels, 176 s->sample_fmt)) < 0) 177 goto fail; 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) 181 goto fail; 182 183 return 0; 184 185 fail: 186 av_frame_unref(frame); 187 encode_ctx(s->internal)->last_audio_frame = 0; 188 return ret; 189 } 190 191 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, 192 const AVSubtitle *sub) 193 { 194 int ret; 195 if (sub->start_display_time) { 196 av_log(avctx, AV_LOG_ERROR, "start_display_time must be 0.\n"); 197 return -1; 198 } 199 200 ret = ffcodec(avctx->codec)->cb.encode_sub(avctx, buf, buf_size, sub); 201 avctx->frame_num++; 202 return ret; 203 } 204 205 int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame) 206 { 207 AVCodecInternal *avci = avctx->internal; 208 209 if (avci->draining) 210 return AVERROR_EOF; 211 212 if (!avci->buffer_frame->buf[0]) 213 return AVERROR(EAGAIN); 214 215 av_frame_move_ref(frame, avci->buffer_frame); 216 217 #if FF_API_FRAME_KEY 218 FF_DISABLE_DEPRECATION_WARNINGS 219 if (frame->key_frame) 220 frame->flags |= AV_FRAME_FLAG_KEY; 221 FF_ENABLE_DEPRECATION_WARNINGS 222 #endif 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 230 #endif 231 232 return 0; 233 } 234 235 int ff_encode_reordered_opaque(AVCodecContext *avctx, 236 AVPacket *pkt, const AVFrame *frame) 237 { 238 if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { 239 int ret = av_buffer_replace(&pkt->opaque_ref, frame->opaque_ref); 240 if (ret < 0) 241 return ret; 242 pkt->opaque = frame->opaque; 243 } 244 245 return 0; 246 } 247 248 int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, 249 AVFrame *frame, int *got_packet) 250 { 251 const FFCodec *const codec = ffcodec(avctx->codec); 252 int ret; 253 254 ret = codec->cb.encode(avctx, avpkt, frame, got_packet); 255 emms_c(); 256 av_assert0(ret <= 0); 257 258 if (!ret && *got_packet) { 259 if (avpkt->data) { 260 ret = encode_make_refcounted(avctx, avpkt); 261 if (ret < 0) 262 goto unref; 263 // Date returned by encoders must always be ref-counted 264 av_assert0(avpkt->buf); 265 } 266 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; 273 274 if (!avpkt->duration) { 275 if (frame->duration) 276 avpkt->duration = frame->duration; 277 else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { 278 avpkt->duration = ff_samples_to_time_base(avctx, 279 frame->nb_samples); 280 } 281 } 282 283 ret = ff_encode_reordered_opaque(avctx, avpkt, frame); 284 if (ret < 0) 285 goto unref; 286 } 287 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; 294 } else { 295 unref: 296 av_packet_unref(avpkt); 297 } 298 299 if (frame) 300 av_frame_unref(frame); 301 302 return ret; 303 } 304 305 static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt) 306 { 307 AVCodecInternal *avci = avctx->internal; 308 AVFrame *frame = avci->in_frame; 309 const FFCodec *const codec = ffcodec(avctx->codec); 310 int got_packet; 311 int ret; 312 313 if (avci->draining_done) 314 return AVERROR_EOF; 315 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) 320 return ret; 321 } 322 323 if (!frame->buf[0]) { 324 if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY || 325 avci->frame_thread_encoder)) 326 return AVERROR_EOF; 327 328 // Flushing is signaled with a NULL frame 329 frame = NULL; 330 } 331 332 got_packet = 0; 333 334 av_assert0(codec->cb_type == FF_CODEC_CB_TYPE_ENCODE); 335 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); 339 else { 340 ret = ff_encode_encode_cb(avctx, avpkt, frame, &got_packet); 341 } 342 343 if (avci->draining && !got_packet) 344 avci->draining_done = 1; 345 346 return ret; 347 } 348 349 static int encode_simple_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) 350 { 351 int ret; 352 353 while (!avpkt->data && !avpkt->side_data) { 354 ret = encode_simple_internal(avctx, avpkt); 355 if (ret < 0) 356 return ret; 357 } 358 359 return 0; 360 } 361 362 static int encode_receive_packet_internal(AVCodecContext *avctx, AVPacket *avpkt) 363 { 364 AVCodecInternal *avci = avctx->internal; 365 int ret; 366 367 if (avci->draining_done) 368 return AVERROR_EOF; 369 370 av_assert0(!avpkt->data && !avpkt->side_data); 371 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); 377 } 378 379 if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_RECEIVE_PACKET) { 380 ret = ffcodec(avctx->codec)->cb.receive_packet(avctx, avpkt); 381 if (ret < 0) 382 av_packet_unref(avpkt); 383 else 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); 387 } else 388 ret = encode_simple_receive_packet(avctx, avpkt); 389 if (ret >= 0) 390 avpkt->flags |= encode_ctx(avci)->intra_only_flag; 391 392 if (ret == AVERROR_EOF) 393 avci->draining_done = 1; 394 395 return ret; 396 } 397 398 #if CONFIG_LCMS2 399 static int encode_generate_icc_profile(AVCodecContext *avctx, AVFrame *frame) 400 { 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; 405 cmsHPROFILE profile; 406 int ret; 407 408 /* don't generate ICC profiles if disabled or unsupported */ 409 if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES)) 410 return 0; 411 if (!(codec->caps_internal & FF_CODEC_CAP_ICC_PROFILES)) 412 return 0; 413 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 */ 420 421 if (av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE)) 422 return 0; /* don't overwrite existing ICC profile */ 423 424 if (!avci->icc.avctx) { 425 ret = ff_icc_context_init(&avci->icc, avctx); 426 if (ret < 0) 427 return ret; 428 } 429 430 ret = ff_icc_profile_generate(&avci->icc, prim, trc, &profile); 431 if (ret < 0) 432 return ret; 433 434 ret = ff_icc_profile_attach(&avci->icc, profile, frame); 435 cmsCloseProfile(profile); 436 return ret; 437 } 438 #else /* !CONFIG_LCMS2 */ 439 static int encode_generate_icc_profile(av_unused AVCodecContext *c, av_unused AVFrame *f) 440 { 441 return 0; 442 } 443 #endif 444 445 static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src) 446 { 447 AVCodecInternal *avci = avctx->internal; 448 EncodeContext *ec = encode_ctx(avci); 449 AVFrame *dst = avci->buffer_frame; 450 int ret; 451 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; 457 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); 464 } 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); 468 } 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; 474 475 if (out_samples != src->nb_samples) { 476 ret = pad_last_frame(avctx, dst, src, out_samples); 477 if (ret < 0) 478 return ret; 479 goto finish; 480 } 481 } 482 } 483 } 484 } 485 486 ret = av_frame_ref(dst, src); 487 if (ret < 0) 488 return ret; 489 490 finish: 491 492 if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { 493 ret = encode_generate_icc_profile(avctx, dst); 494 if (ret < 0) 495 return ret; 496 } 497 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 501 // than none at all 502 if (!(avctx->flags & AV_CODEC_FLAG_FRAME_DURATION)) 503 dst->duration = 0; 504 505 return 0; 506 } 507 508 int attribute_align_arg avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame) 509 { 510 AVCodecInternal *avci = avctx->internal; 511 int ret; 512 513 if (!avcodec_is_open(avctx) || !av_codec_is_encoder(avctx->codec)) 514 return AVERROR(EINVAL); 515 516 if (avci->draining) 517 return AVERROR_EOF; 518 519 if (avci->buffer_frame->buf[0]) 520 return AVERROR(EAGAIN); 521 522 if (!frame) { 523 avci->draining = 1; 524 } else { 525 ret = encode_send_frame_internal(avctx, frame); 526 if (ret < 0) 527 return ret; 528 } 529 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) 533 return ret; 534 } 535 536 avctx->frame_num++; 537 538 return 0; 539 } 540 541 int attribute_align_arg avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) 542 { 543 AVCodecInternal *avci = avctx->internal; 544 int ret; 545 546 av_packet_unref(avpkt); 547 548 if (!avcodec_is_open(avctx) || !av_codec_is_encoder(avctx->codec)) 549 return AVERROR(EINVAL); 550 551 if (avci->buffer_pkt->data || avci->buffer_pkt->side_data) { 552 av_packet_move_ref(avpkt, avci->buffer_pkt); 553 } else { 554 ret = encode_receive_packet_internal(avctx, avpkt); 555 if (ret < 0) 556 return ret; 557 } 558 559 return 0; 560 } 561 562 static int encode_preinit_video(AVCodecContext *avctx) 563 { 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; 568 569 if (!av_get_pix_fmt_name(avctx->pix_fmt)) { 570 av_log(avctx, AV_LOG_ERROR, "Invalid video pixel format: %d\n", 571 avctx->pix_fmt); 572 return AVERROR(EINVAL); 573 } 574 575 ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, 576 0, (const void **) &pix_fmts, &num_pix_fmts); 577 if (ret < 0) 578 return ret; 579 580 if (pix_fmts) { 581 for (i = 0; i < num_pix_fmts; i++) 582 if (avctx->pix_fmt == pix_fmts[i]) 583 break; 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); 588 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])); 593 } 594 595 return AVERROR(EINVAL); 596 } 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; 603 } 604 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; 610 } 611 if (avctx->width <= 0 || avctx->height <= 0) { 612 av_log(avctx, AV_LOG_ERROR, "dimensions not set\n"); 613 return AVERROR(EINVAL); 614 } 615 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); 626 } 627 FF_ENABLE_DEPRECATION_WARNINGS 628 #endif 629 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); 636 } 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); 645 } 646 avctx->sw_pix_fmt = frames_ctx->sw_format; 647 } 648 649 return 0; 650 } 651 652 static int encode_preinit_audio(AVCodecContext *avctx) 653 { 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; 659 660 if (!av_get_sample_fmt_name(avctx->sample_fmt)) { 661 av_log(avctx, AV_LOG_ERROR, "Invalid audio sample format: %d\n", 662 avctx->sample_fmt); 663 return AVERROR(EINVAL); 664 } 665 if (avctx->sample_rate <= 0) { 666 av_log(avctx, AV_LOG_ERROR, "Invalid audio sample rate: %d\n", 667 avctx->sample_rate); 668 return AVERROR(EINVAL); 669 } 670 671 ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_SAMPLE_FORMAT, 672 0, (const void **) &sample_fmts, 673 &num_sample_fmts); 674 if (ret < 0) 675 return ret; 676 if (sample_fmts) { 677 for (i = 0; i < num_sample_fmts; i++) { 678 if (avctx->sample_fmt == sample_fmts[i]) 679 break; 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]; 684 break; 685 } 686 } 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); 691 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])); 696 } 697 698 return AVERROR(EINVAL); 699 } 700 } 701 702 ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_SAMPLE_RATE, 703 0, (const void **) &supported_samplerates, 704 &num_samplerates); 705 if (ret < 0) 706 return ret; 707 if (supported_samplerates) { 708 for (i = 0; i < num_samplerates; i++) 709 if (avctx->sample_rate == supported_samplerates[i]) 710 break; 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); 715 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]); 719 720 return AVERROR(EINVAL); 721 } 722 } 723 ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 724 0, (const void **) &ch_layouts, &num_ch_layouts); 725 if (ret < 0) 726 return ret; 727 if (ch_layouts) { 728 for (i = 0; i < num_ch_layouts; i++) { 729 if (!av_channel_layout_compare(&avctx->ch_layout, &ch_layouts[i])) 730 break; 731 } 732 if (i == num_ch_layouts) { 733 char buf[512]; 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); 738 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 : "?"); 743 } 744 return AVERROR(EINVAL); 745 } 746 } 747 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); 752 753 return 0; 754 } 755 756 int ff_encode_preinit(AVCodecContext *avctx) 757 { 758 AVCodecInternal *avci = avctx->internal; 759 EncodeContext *ec = encode_ctx(avci); 760 int ret = 0; 761 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); 765 } 766 767 if (avctx->bit_rate < 0) { 768 av_log(avctx, AV_LOG_ERROR, "The encoder bitrate is negative.\n"); 769 return AVERROR(EINVAL); 770 } 771 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); 777 } 778 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; 782 } 783 if (ret < 0) 784 return ret; 785 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); 789 } 790 791 if (!avctx->rc_initial_buffer_occupancy) 792 avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4; 793 794 if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY) 795 ec->intra_only_flag = AV_PKT_FLAG_KEY; 796 797 if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_ENCODE) { 798 avci->in_frame = av_frame_alloc(); 799 if (!avci->in_frame) 800 return AVERROR(ENOMEM); 801 } 802 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); 808 } 809 810 avci->recon_frame = av_frame_alloc(); 811 if (!avci->recon_frame) 812 return AVERROR(ENOMEM); 813 } 814 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; 820 821 sd_frame = av_frame_side_data_get(avctx->decoded_side_data, 822 avctx->nb_decoded_side_data, 823 type_frame); 824 if (!sd_frame || 825 av_packet_side_data_get(avctx->coded_side_data, avctx->nb_coded_side_data, 826 type_packet)) 827 828 continue; 829 830 sd_packet = av_packet_side_data_new(&avctx->coded_side_data, &avctx->nb_coded_side_data, 831 type_packet, sd_frame->size, 0); 832 if (!sd_packet) 833 return AVERROR(ENOMEM); 834 835 memcpy(sd_packet->data, sd_frame->data, sd_frame->size); 836 } 837 838 if (CONFIG_FRAME_THREAD_ENCODER) { 839 ret = ff_frame_thread_encoder_init(avctx); 840 if (ret < 0) 841 return ret; 842 } 843 844 return 0; 845 } 846 847 int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame) 848 { 849 int ret; 850 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); 857 } 858 859 break; 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); 865 if (ret < 0) 866 return ret; 867 } 868 break; 869 } 870 871 ret = avcodec_default_get_buffer2(avctx, frame, 0); 872 if (ret < 0) { 873 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); 874 av_frame_unref(frame); 875 return ret; 876 } 877 878 return 0; 879 } 880 881 int ff_encode_receive_frame(AVCodecContext *avctx, AVFrame *frame) 882 { 883 AVCodecInternal *avci = avctx->internal; 884 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); 889 890 av_frame_move_ref(frame, avci->recon_frame); 891 return 0; 892 } 893 894 void ff_encode_flush_buffers(AVCodecContext *avctx) 895 { 896 AVCodecInternal *avci = avctx->internal; 897 898 if (avci->in_frame) 899 av_frame_unref(avci->in_frame); 900 if (avci->recon_frame) 901 av_frame_unref(avci->recon_frame); 902 } 903 904 AVCodecInternal *ff_encode_internal_alloc(void) 905 { 906 return av_mallocz(sizeof(EncodeContext)); 907 } 908 909 AVCPBProperties *ff_encode_add_cpb_side_data(AVCodecContext *avctx) 910 { 911 AVPacketSideData *tmp; 912 AVCPBProperties *props; 913 size_t size; 914 int i; 915 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; 919 920 props = av_cpb_properties_alloc(&size); 921 if (!props) 922 return NULL; 923 924 tmp = av_realloc_array(avctx->coded_side_data, avctx->nb_coded_side_data + 1, sizeof(*tmp)); 925 if (!tmp) { 926 av_freep(&props); 927 return NULL; 928 } 929 930 avctx->coded_side_data = tmp; 931 avctx->nb_coded_side_data++; 932 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; 936 937 return props; 938 }