| 767 | } |
| 768 | |
| 769 | static int vaapi_encode_output(AVCodecContext *avctx, |
| 770 | FFHWBaseEncodePicture *base_pic, AVPacket *pkt) |
| 771 | { |
| 772 | FFHWBaseEncodeContext *base_ctx = avctx->priv_data; |
| 773 | VAAPIEncodeContext *ctx = avctx->priv_data; |
| 774 | VAAPIEncodePicture *pic = base_pic->priv; |
| 775 | AVPacket *pkt_ptr = pkt; |
| 776 | int err; |
| 777 | |
| 778 | err = vaapi_encode_wait(avctx, base_pic); |
| 779 | if (err < 0) |
| 780 | return err; |
| 781 | |
| 782 | if (pic->non_independent_frame) { |
| 783 | av_assert0(!ctx->coded_buffer_ref); |
| 784 | ctx->coded_buffer_ref = av_refstruct_ref(pic->output_buffer_ref); |
| 785 | |
| 786 | if (pic->tail_size) { |
| 787 | if (base_ctx->tail_pkt->size) { |
| 788 | err = AVERROR_BUG; |
| 789 | goto end; |
| 790 | } |
| 791 | |
| 792 | err = ff_get_encode_buffer(avctx, base_ctx->tail_pkt, pic->tail_size, 0); |
| 793 | if (err < 0) |
| 794 | goto end; |
| 795 | |
| 796 | memcpy(base_ctx->tail_pkt->data, pic->tail_data, pic->tail_size); |
| 797 | pkt_ptr = base_ctx->tail_pkt; |
| 798 | } |
| 799 | } else { |
| 800 | err = vaapi_encode_get_coded_data(avctx, pic, pkt); |
| 801 | if (err < 0) |
| 802 | goto end; |
| 803 | } |
| 804 | |
| 805 | av_log(avctx, AV_LOG_DEBUG, "Output read for pic %"PRId64"/%"PRId64".\n", |
| 806 | base_pic->display_order, base_pic->encode_order); |
| 807 | |
| 808 | ff_hw_base_encode_set_output_property(base_ctx, avctx, (FFHWBaseEncodePicture*)base_pic, pkt_ptr, |
| 809 | ctx->codec->flags & FLAG_TIMESTAMP_NO_DELAY); |
| 810 | |
| 811 | end: |
| 812 | av_refstruct_unref(&pic->output_buffer_ref); |
| 813 | pic->output_buffer = VA_INVALID_ID; |
| 814 | return err; |
| 815 | } |
| 816 | |
| 817 | static int vaapi_encode_discard(AVCodecContext *avctx, FFHWBaseEncodePicture *base_pic) |
| 818 | { |
nothing calls this directly
no test coverage detected