From patchwork Fri Mar 5 16:32:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 26123 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2B12F44B9E2 for ; Fri, 5 Mar 2021 18:35:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 09F8268AB25; Fri, 5 Mar 2021 18:35:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F107068AA93 for ; Fri, 5 Mar 2021 18:35:34 +0200 (EET) Received: by mail-qk1-f181.google.com with SMTP id t4so2583378qkp.1 for ; Fri, 05 Mar 2021 08:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=MCVrLVkgss5FKW5OwL99Bq1BlLCZ5BiUwVa666Wt11c=; b=LjjIMbTWNrvepyonjsEUEpKippA7+IcF3xPO13IvxvZLplhV9V0srO8LSdb1G+zz7p hf9XO+jZJ5lQXp9ZGUBNm+yBquP3kWVikGD0WxBPb0n1e06jEHXymm8AjrGyowLNgvCy PNCjUAItlxtmkMxrvGWiLauJFb+g2NoukbS/JMlIdYhAHqB03HYT8naPM0G7PG/iB0kx qJEy/6oz6U/ofo8FqN/s3u5nURcLBTIVxtbUHZozSzDQrSj5eGJ80LWacIejFtNCPuUj vi/dWsEmZT5KEV4gxIP9OuZqaaQ4wB/WS6Xrs9PDkKNpIUdd0h+HuLDwbl6OwDC02a4j OZjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MCVrLVkgss5FKW5OwL99Bq1BlLCZ5BiUwVa666Wt11c=; b=IVXc3/FrLDj4B3oEz56YapPQlkFhIw498xDm9v9YefdBYEe7LRP7G+rqLQ6NR9Y6X3 hff7BGXqJHGaWtTBB2K2Xl4ZPVUctxMeHUtJAXQ/+7+Kc/Kal0e4c32sJ8LYWZj4FBSf VboMh8K3pL23GNBemFODqg/XZkX1a4vxax4oPLsrWXjMyBM3Iaxnt6MSa0arEYbZmGVZ KrttoeTTL9388fN9YkM2dEZW0Pjc9DM5AeFWU8Fsf2Xzk+lLB2WFXkEQtxpEmXwVuhTF 6gSJdPxsXUfNFCJeYDhdNvz9FBfIXWEoOrKNK86sbiAfF53evpXEOwXwHRdmU4lQtZvm QtCA== X-Gm-Message-State: AOAM531OALChAtBQVLQ/3YSMDWbYYhpRy7OFTf9BXtSGglcb6MuaQ+6J tx9I1QhLHfQRHgUyBJ6WIgKkHF0q7o/P7w== X-Google-Smtp-Source: ABdhPJxd1VzirG7GhhkaIIyTsx0tJW7QfB7MJ30MGdf6XSTuBvGdC+tAY40zrIYZVcAeL0drTUxVXA== X-Received: by 2002:a05:620a:204d:: with SMTP id d13mr9692800qka.347.1614962133455; Fri, 05 Mar 2021 08:35:33 -0800 (PST) Received: from localhost.localdomain ([181.23.89.132]) by smtp.gmail.com with ESMTPSA id b10sm2168494qtt.23.2021.03.05.08.35.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 08:35:33 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 Mar 2021 13:32:57 -0300 Message-Id: <20210305163339.63164-7-jamrial@gmail.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210305163339.63164-1-jamrial@gmail.com> References: <20210305163339.63164-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/48] avcodec/mpegvideo_enc: use av_packet_alloc() to allocate packets X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavcodec/mpegvideo_enc.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 34dcf8c313..355e14a71b 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1366,23 +1366,20 @@ static int skip_check(MpegEncContext *s, Picture *p, Picture *ref) return 0; } -static int encode_frame(AVCodecContext *c, AVFrame *frame) +static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt) { - AVPacket pkt = { 0 }; int ret; int size = 0; - av_init_packet(&pkt); - ret = avcodec_send_frame(c, frame); if (ret < 0) return ret; do { - ret = avcodec_receive_packet(c, &pkt); + ret = avcodec_receive_packet(c, pkt); if (ret >= 0) { - size += pkt.size; - av_packet_unref(&pkt); + size += pkt->size; + av_packet_unref(pkt); } else if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) return ret; } while (ret >= 0); @@ -1393,6 +1390,7 @@ static int encode_frame(AVCodecContext *c, AVFrame *frame) static int estimate_best_b_count(MpegEncContext *s) { const AVCodec *codec = avcodec_find_encoder(s->avctx->codec_id); + AVPacket *pkt; const int scale = s->brd_scale; int width = s->width >> scale; int height = s->height >> scale; @@ -1403,6 +1401,10 @@ static int estimate_best_b_count(MpegEncContext *s) av_assert0(scale >= 0 && scale <= 3); + pkt = av_packet_alloc(); + if (!pkt) + return AVERROR(ENOMEM); + //emms_c(); //s->next_picture_ptr->quality; p_lambda = s->last_lambda_for[AV_PICTURE_TYPE_P]; @@ -1454,8 +1456,10 @@ static int estimate_best_b_count(MpegEncContext *s) break; c = avcodec_alloc_context3(NULL); - if (!c) - return AVERROR(ENOMEM); + if (!c) { + ret = AVERROR(ENOMEM); + goto fail; + } c->width = width; c->height = height; @@ -1473,10 +1477,11 @@ static int estimate_best_b_count(MpegEncContext *s) if (ret < 0) goto fail; + s->tmp_frames[0]->pict_type = AV_PICTURE_TYPE_I; s->tmp_frames[0]->quality = 1 * FF_QP2LAMBDA; - out_size = encode_frame(c, s->tmp_frames[0]); + out_size = encode_frame(c, s->tmp_frames[0], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1491,7 +1496,7 @@ static int estimate_best_b_count(MpegEncContext *s) AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_B; s->tmp_frames[i + 1]->quality = is_p ? p_lambda : b_lambda; - out_size = encode_frame(c, s->tmp_frames[i + 1]); + out_size = encode_frame(c, s->tmp_frames[i + 1], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1501,7 +1506,7 @@ static int estimate_best_b_count(MpegEncContext *s) } /* get the delayed frames */ - out_size = encode_frame(c, NULL); + out_size = encode_frame(c, NULL, pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1517,10 +1522,15 @@ static int estimate_best_b_count(MpegEncContext *s) fail: avcodec_free_context(&c); - if (ret < 0) - return ret; + av_packet_unref(pkt); + if (ret < 0) { + best_b_count = ret; + break; + } } + av_packet_free(&pkt); + return best_b_count; }