From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7E7044595F for ; Tue, 28 Mar 2023 21:26:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DC3AB68CC8A; Wed, 29 Mar 2023 00:26:13 +0300 (EEST) Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 739F668CC84 for ; Wed, 29 Mar 2023 00:26:07 +0300 (EEST) Received: by mail-oi1-f179.google.com with SMTP id bm2so10102804oib.4 for ; Tue, 28 Mar 2023 14:26:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680038765; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=bPy8duI8Jj6gPsapEzrVO/tzYa2RMZYoS8dPLYoRT5I=; b=ZVA6xEGmABLU058x4qhQWLj4+zDiTia6ECmW+J1KVN8VUvmhct1Y3I2GVSc7civAG0 x4w6upy4xNpJCWRi4qwTiPbVcyK0JUk23MLXFNt/U0IC45iw/qnTE6lztaAQu/rumAfZ +duyLRWXjOJ6fh5LsSITNIzRj0v2AbiH0waAhaTe2I0GwkFB+hKY8Omxvq86soGL8cp+ Ds60nyvcV4ixBFBl+tUKG99XxTUQlru3urzTEZ2eimQA3dyW1bcEUjJsofOgrwkEh/3k YnkZAV4QC/Ahg+ZEGRaaUmNiWPA2u5CpqQWtEpZBcg9ohwDlRUPBy6FEvCJ82jswh7we GUpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680038765; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bPy8duI8Jj6gPsapEzrVO/tzYa2RMZYoS8dPLYoRT5I=; b=gW5/bMBaiXKDwpO5Hn4gI1Hy+FjaXRp+EUKheDhZfXBZEjbnCe6gP4oVz6I9jRu/jB JPbULGJg9Ji2XzuQolwF0hXH3t0mUc9eD3Kjh8lFek8WWdVgsWWhmBBuSrRy7XoNRS4L vdVFaN6jTrSr+w6rPm88teFN/un0w0lDAjyWM3XwiCTfG9AU71Zv8tBheOwddpeG79ST DwR7nt+2yX6osp6TPE3iZlK0SSHPqzjCuhKNdA65Y9CGWJqaE6QRqqmRCTk57H9io4sM /OtISxMLlnQr/pLiN6c8Boi+wlj9+D6vOIcY+kJCTsftCKC6MiPgOotqvz/ocBOHqxgt ZTWg== X-Gm-Message-State: AAQBX9doriMGYfjsT6+QtlUFTm/wB6z+dPy60CXtPL6bPaQWriINzrYD 8b1D81iE4RBXCbv2u1UBlRfsmMm0bcc= X-Google-Smtp-Source: AKy350aMOfRT/UBxun4sMXbrdS2zEZojErDQHP+F2Ln9aYphY5nt1TeaN5umQ8Ngdr0RHdEtGJ8V4w== X-Received: by 2002:a05:6808:4093:b0:389:4ecf:20ab with SMTP id db19-20020a056808409300b003894ecf20abmr2018013oib.49.1680038765257; Tue, 28 Mar 2023 14:26:05 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id w2-20020acadf02000000b00383e0bec93bsm12887915oig.49.2023.03.28.14.26.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Mar 2023 14:26:04 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Mar 2023 18:25:31 -0300 Message-Id: <20230328212531.3460-1-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230328211243.GC375355@pb2> References: <20230328211243.GC375355@pb2> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/2] avcodec/libx264: add a flush callback X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Signed-off-by: James Almer --- libavcodec/libx264.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 92828fabc3..cfdd422236 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -151,7 +151,7 @@ static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, { X264Context *x4 = ctx->priv_data; uint8_t *p; - uint64_t size = x4->sei_size; + uint64_t size = FFMAX(x4->sei_size, 0); int ret; if (!nnal) @@ -178,8 +178,8 @@ static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, memcpy(p, x4->sei, x4->sei_size); p += x4->sei_size; size -= x4->sei_size; - x4->sei_size = 0; - av_freep(&x4->sei); + /* Keep the value around in case of flush */ + x4->sei_size = -x4->sei_size; } /* x264 guarantees the payloads of the NALs @@ -648,6 +648,24 @@ FF_ENABLE_DEPRECATION_WARNINGS return 0; } +static void X264_flush(AVCodecContext *avctx) +{ + X264Context *x4 = avctx->priv_data; + x264_nal_t *nal; + int nnal, ret; + x264_picture_t pic_out = {0}; + + do { + ret = x264_encoder_encode(x4->enc, &nal, &nnal, NULL, &pic_out); + } while (ret > 0 && x264_encoder_delayed_frames(x4->enc)); + + for (int i = 0; i < x4->nb_reordered_opaque; i++) + opaque_uninit(&x4->reordered_opaque[i]); + + if (x4->sei_size < 0) + x4->sei_size = -x4->sei_size; +} + static av_cold int X264_close(AVCodecContext *avctx) { X264Context *x4 = avctx->priv_data; @@ -1335,12 +1353,14 @@ FFCodec ff_libx264_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.priv_class = &x264_class, .p.wrapper_name = "libx264", .priv_data_size = sizeof(X264Context), .init = X264_init, FF_CODEC_ENCODE_CB(X264_frame), + .flush = X264_flush, .close = X264_close, .defaults = x264_defaults, #if X264_BUILD < 153 -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".