MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_hw_base_encode_receive_packet

Function ff_hw_base_encode_receive_packet

libavcodec/hw_base_encode.c:558–660  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

556}
557
558int ff_hw_base_encode_receive_packet(FFHWBaseEncodeContext *ctx,
559 AVCodecContext *avctx, AVPacket *pkt)
560{
561 FFHWBaseEncodePicture *pic = NULL;
562 AVFrame *frame = ctx->frame;
563 int err;
564
565 av_assert0(ctx->op && ctx->op->init && ctx->op->issue &&
566 ctx->op->output && ctx->op->free);
567
568start:
569 /** if no B frame before repeat P frame, sent repeat P frame out. */
570 if (ctx->tail_pkt->size) {
571 for (FFHWBaseEncodePicture *tmp = ctx->pic_start; tmp; tmp = tmp->next) {
572 if (tmp->type == FF_HW_PICTURE_TYPE_B && tmp->pts < ctx->tail_pkt->pts)
573 break;
574 else if (!tmp->next) {
575 av_packet_move_ref(pkt, ctx->tail_pkt);
576 goto end;
577 }
578 }
579 }
580
581 err = ff_encode_get_frame(avctx, frame);
582 if (err == AVERROR_EOF) {
583 frame = NULL;
584 } else if (err < 0)
585 return err;
586
587 err = hw_base_encode_send_frame(avctx, ctx, frame);
588 if (err < 0)
589 return err;
590
591 if (!ctx->pic_start) {
592 if (ctx->end_of_stream)
593 return AVERROR_EOF;
594 else
595 return AVERROR(EAGAIN);
596 }
597
598 if (ctx->async_encode) {
599 if (av_fifo_can_write(ctx->encode_fifo)) {
600 err = hw_base_encode_pick_next(avctx, ctx, &pic);
601 if (!err) {
602 av_assert0(pic);
603 pic->encode_order = ctx->encode_order +
604 av_fifo_can_read(ctx->encode_fifo);
605 err = ctx->op->issue(avctx, pic);
606 if (err < 0) {
607 av_log(avctx, AV_LOG_ERROR, "Encode failed: %s.\n", av_err2str(err));
608 return err;
609 }
610 pic->encode_issued = 1;
611 av_fifo_write(ctx->encode_fifo, &pic, 1);
612 }
613 }
614
615 if (!av_fifo_can_read(ctx->encode_fifo))

Calls 10

av_packet_move_refFunction · 0.85
ff_encode_get_frameFunction · 0.85
av_fifo_can_writeFunction · 0.85
hw_base_encode_pick_nextFunction · 0.85
av_fifo_can_readFunction · 0.85
av_logFunction · 0.85
av_fifo_writeFunction · 0.85
av_fifo_readFunction · 0.85
hw_base_encode_clear_oldFunction · 0.85

Tested by

no test coverage detected