| 103 | } |
| 104 | |
| 105 | int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags) |
| 106 | { |
| 107 | int ret; |
| 108 | |
| 109 | if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) |
| 110 | return AVERROR(EINVAL); |
| 111 | |
| 112 | av_assert0(!avpkt->data && !avpkt->buf); |
| 113 | |
| 114 | avpkt->size = size; |
| 115 | ret = avctx->get_encode_buffer(avctx, avpkt, flags); |
| 116 | if (ret < 0) |
| 117 | goto fail; |
| 118 | |
| 119 | if (!avpkt->data || !avpkt->buf) { |
| 120 | av_log(avctx, AV_LOG_ERROR, "No buffer returned by get_encode_buffer()\n"); |
| 121 | ret = AVERROR(EINVAL); |
| 122 | goto fail; |
| 123 | } |
| 124 | memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); |
| 125 | |
| 126 | ret = 0; |
| 127 | fail: |
| 128 | if (ret < 0) { |
| 129 | av_log(avctx, AV_LOG_ERROR, "get_encode_buffer() failed\n"); |
| 130 | av_packet_unref(avpkt); |
| 131 | } |
| 132 | |
| 133 | return ret; |
| 134 | } |
| 135 | |
| 136 | static int encode_make_refcounted(AVCodecContext *avctx, AVPacket *avpkt) |
| 137 | { |
no test coverage detected