From patchwork Fri Mar 24 09:14:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40792 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434468pzb; Fri, 24 Mar 2023 02:16:15 -0700 (PDT) X-Google-Smtp-Source: AKy350ZUXKFkhgunfw7UljfnfUj8b9HzoQfvieHLCZXvCG/mOBxZlY+2GrZiA64hIrWsHXD5b0Hq X-Received: by 2002:a17:906:1c4:b0:931:5145:c51f with SMTP id 4-20020a17090601c400b009315145c51fmr1125636ejj.4.1679649375717; Fri, 24 Mar 2023 02:16:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649375; cv=none; d=google.com; s=arc-20160816; b=n5FSfHCDfPg9c5RtHtHqNm/1/HSdK2v45N/k1s3dWIUrwPSH+9KQhkfSQM7h70X1Od lU0915QTY/ViNDlEmcR9qtX4T4+Im/AMfDIb+tH6t6tsTikLk3kjhibey0y+v8zISiV2 oy4ODOy1yEoswR3CdNOn04HxXBAsk0hDR+kUdMXS1oH7ROn6ZbUcSSEMvR6SczEY0ql2 N9S5rZQ27snbirVFsOHOvgpc6dEYjQLpz/HCQ+qREq6a/xd7XR9Pdh1nXaBYK8XvIfFq DG5F7WdOoaF3j0+iUz6lzS2OpGC9L1KL77fXNRvHhFz67iEcl162KzAeowiR8EBmSzdT qMEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=UCGYIuDRFjD/1Kwe25S2Ve8vU28Tumv3F74ylMZ2ZUA=; b=pi0wPCeQzwidQv5j+30Jj63+iI146yjvm69PvRzLfrEB25rRnGPSmnA6fjEXJy8nc9 xr6cMq7JXC4PyKGMVGiIam0CMRJDwTxjOOncosfha2+uCunGBgNJ5XKRKWyzHNmqW7H1 j3eRS/Pb2JvCqEW8itWPK5kmlR34SNQZFJwQpfpErC0sfY8t5h7uufImp2hnB7nX25Ej U1Y7RnOeM/oAusMkNfhuY/sV2KFP5b2ZxMPDKu8XWcISr7A3Y7n/3ApSpKR7Yygkzxn2 OKroLSH2USbuAdP38CI052gd7Qfjxckq32ruRkgFyt6Vk4+L2j0lvtmSW0pWLHckFvdo y6qA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t3-20020a056402020300b00502238699b5si682182edv.670.2023.03.24.02.16.14; Fri, 24 Mar 2023 02:16:15 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0D0A268C65B; Fri, 24 Mar 2023 11:16:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 10C6C68C662 for ; Fri, 24 Mar 2023 11:15:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id CADB52405EC for ; Fri, 24 Mar 2023 10:15:57 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id YZP0yuSjSWrz for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 62554240178 for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 7EB183A038E for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:45 +0100 Message-Id: <20230324091451.20895-1-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [RFC PATCH 1/7] lavc/mpegvideo_enc: support AV_CODEC_CAP_ENCODER_RECON_FRAME 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2Is+Suy6DtBs --- Last time I tested this, the frames did not actually match when using B-frames. As I'm not particularly interested in these encoders, I don't want to spend time debugging the issue, so I don't intend to push this patch with the rest. Volunteers welcome. --- libavcodec/flvenc.c | 1 + libavcodec/h261enc.c | 1 + libavcodec/ituh263enc.c | 7 +++++-- libavcodec/mjpegenc.c | 6 ++++-- libavcodec/mpeg12enc.c | 6 ++++-- libavcodec/mpeg4videoenc.c | 3 ++- libavcodec/mpegvideo_enc.c | 8 ++++++++ libavcodec/msmpeg4enc.c | 9 ++++++--- libavcodec/rv10enc.c | 1 + libavcodec/rv20enc.c | 1 + libavcodec/speedhqenc.c | 1 + libavcodec/wmv2enc.c | 1 + 12 files changed, 35 insertions(+), 10 deletions(-) diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 6a96cb0f2f..53878722af 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -103,6 +103,7 @@ const FFCodec ff_flv_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index 438ebb63d9..04dc34d08c 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -411,6 +411,7 @@ const FFCodec ff_h261_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index c30ecad438..78c041b2cf 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -903,7 +903,8 @@ const FFCodec ff_h263_encoder = { .p.id = AV_CODEC_ID_H263, .p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, .p.priv_class = &h263_class, - .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, @@ -934,7 +935,9 @@ const FFCodec ff_h263p_encoder = { .p.id = AV_CODEC_ID_H263P, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &h263p_class, - .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 508772987f..47b3ca3141 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -652,7 +652,8 @@ const FFCodec ff_mjpeg_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = mjpeg_encode_close, .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | - AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_ICC_PROFILES, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, @@ -686,6 +687,7 @@ const FFCodec ff_amv_encoder = { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE }, .p.priv_class = &amv_class, - .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, }; #endif diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index a932b59678..b120174efb 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -1246,7 +1246,8 @@ const FFCodec ff_mpeg1video_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | - AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &mpeg1_class, }; @@ -1265,7 +1266,8 @@ const FFCodec ff_mpeg2video_encoder = { AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE }, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | - AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &mpeg2_class, }; diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index c3e9ebea45..93b92867a8 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -1404,7 +1404,8 @@ const FFCodec ff_mpeg4_encoder = { .close = ff_mpv_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | - AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &mpeg4enc_class, }; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 7d3c8875f2..ca3495fc8f 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1865,6 +1865,14 @@ vbv_retry: (avctx->flags&AV_CODEC_FLAG_PSNR) ? MPEGVIDEO_MAX_PLANES : 0, s->pict_type); + if (avctx->flags & AV_CODEC_FLAG_RECON_FRAME) { + AVCodecInternal *avci = avctx->internal; + av_frame_unref(avci->recon_frame); + ret = av_frame_ref(avci->recon_frame, s->current_picture.f); + if (ret < 0) + return ret; + } + if (avctx->flags & AV_CODEC_FLAG_PASS1) assert(put_bits_count(&s->pb) == s->header_bits + s->mv_bits + s->misc_bits + s->i_tex_bits + diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 54121438a0..85b76c889f 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -684,7 +684,8 @@ const FFCodec ff_msmpeg4v2_encoder = { .p.id = AV_CODEC_ID_MSMPEG4V2, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &ff_mpv_enc_class, - .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, @@ -699,7 +700,8 @@ const FFCodec ff_msmpeg4v3_encoder = { .p.id = AV_CODEC_ID_MSMPEG4V3, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &ff_mpv_enc_class, - .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, @@ -714,7 +716,8 @@ const FFCodec ff_wmv1_encoder = { .p.id = AV_CODEC_ID_WMV1, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &ff_mpv_enc_class, - .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_ENCODER_RECON_FRAME, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 8a405b8686..90ba4c0a0b 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -77,5 +77,6 @@ const FFCodec ff_rv10_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, }; diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index dc26877d5e..aeea557e89 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -74,5 +74,6 @@ const FFCodec ff_rv20_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, }; diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index 5b4ff4c139..162bb77508 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -294,6 +294,7 @@ const FFCodec ff_speedhq_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 8eb56444a3..1a1df73ec2 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -248,6 +248,7 @@ const FFCodec ff_wmv2_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .p.capabilities = AV_CODEC_CAP_ENCODER_RECON_FRAME, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, }; From patchwork Fri Mar 24 09:14:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40797 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp435081pzb; Fri, 24 Mar 2023 02:16:59 -0700 (PDT) X-Google-Smtp-Source: AKy350brDPC8cBZWnF7ejOCJ2bRewBzj20Hm4peMvlXRDgTHFtm2ozzrox21CLr5qNG2lNKyMqyP X-Received: by 2002:a17:906:8398:b0:8f6:88b7:73a7 with SMTP id p24-20020a170906839800b008f688b773a7mr2068839ejx.7.1679649418879; Fri, 24 Mar 2023 02:16:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649418; cv=none; d=google.com; s=arc-20160816; b=0eeGQtAB+LiKUnxKYC5nY3LY2vXbCeNjyNzFn0raPCD5U9+oTrwft4uUBOstJxu2t5 uNCLBbK3KpucWOcwCbY2tzqRzSL8hEGdQTxgaw93Wuh2WdIu3cpSlYCl92IMDKBRToRh xNcQzMDVwtniOq9Z4lnZubK8ZOK9i6dlvwzSE2AsGWcN4s5S5QNCOgYwhbscnysVtW8B x2hU0lH9m9GDMIuqxFEuqZAMO6SS+zL32efbZl1ToyPhNTvupfnSkolqBWljY4jMVZDw 25HVsl1WEiemdRpjTacx5kV+g7iDSiQzq4n5Pn6kIUl5RPoaz7HFnKYg/rL349FSnUs4 G98Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=NMQs3V/mNBc3qHqSrx91xynaDfymVRpWFwSOlHCwfc4=; b=BYJttzaTQKpeiHNSxUztG8NWdZggN4vo5zngtavkDdCXh28d/hw/IsRta0DuC6dD5k /NDCuhQBqK9MoWmM/QgOBhjDCygNsxz9Jkr84F1E0eS3pDINNtrmLEyqX4n56YbrBnL1 HvZxTf72yt7wVx4GB3wljU0snT2QsP20oBsPIEKQUbogUXn7cB6Nyz3Od9/mguoLGohJ 0Un/0fcdrRIaSpJBW0bWXxpwPj03CLpkpT0uFU1IUIskHZCs5OkAmoUAt5YqHAv2tUq9 5m4n9G+EYzJSE5uFPrbdg2rRjZazVv4vZthov6at5GYljdGb3qjrPuu+M33/twLMOX4Y KHjA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i14-20020a170906a28e00b00930e86db8fdsi20698522ejz.938.2023.03.24.02.16.58; Fri, 24 Mar 2023 02:16:58 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCC2268C6ED; Fri, 24 Mar 2023 11:16:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 60B6B68C6B7 for ; Fri, 24 Mar 2023 11:16:02 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A3E222405B5 for ; Fri, 24 Mar 2023 10:16:00 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ZAAkmXk9N8sr for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 687F92404EA for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 8BFBE3A039B for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:46 +0100 Message-Id: <20230324091451.20895-2-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] tools/decode_simple: always call process_frame(NULL) at the end 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: rWQ6DxIwuuc1 Currently this would not be done if max_frames is triggered. Makes no difference in either of the tools currently using decode_simple, but may be important in future tools. --- tools/decode_simple.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/decode_simple.c b/tools/decode_simple.c index e02323064d..8a9e7c5f71 100644 --- a/tools/decode_simple.c +++ b/tools/decode_simple.c @@ -73,7 +73,7 @@ int ds_run(DecodeContext *dc) while (ret >= 0) { ret = av_read_frame(dc->demuxer, dc->pkt); if (ret < 0) - goto flush; + break; if (dc->pkt->stream_index != dc->stream->index) { av_packet_unref(dc->pkt); continue; @@ -91,10 +91,9 @@ int ds_run(DecodeContext *dc) fprintf(stderr, "Error decoding: %d\n", ret); return ret; } else if (ret > 0) - return 0; + goto finish; } -flush: avcodec_send_packet(dc->decoder, NULL); ret = decode_read(dc, 1); if (ret < 0) { @@ -102,7 +101,8 @@ flush: return ret; } - return 0; +finish: + return dc->process_frame(dc, NULL); } void ds_free(DecodeContext *dc) From patchwork Fri Mar 24 09:14:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40791 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434345pzb; Fri, 24 Mar 2023 02:16:06 -0700 (PDT) X-Google-Smtp-Source: AKy350aVbulsVEdi62in0GvrHnWCppHk8rosOE5upfidtAG2EoQuEfdOKv1yavD+sIn3ph03tkjV X-Received: by 2002:a17:907:c25:b0:895:58be:957 with SMTP id ga37-20020a1709070c2500b0089558be0957mr2489748ejc.2.1679649365863; Fri, 24 Mar 2023 02:16:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649365; cv=none; d=google.com; s=arc-20160816; b=a5omLY6vcrTZoodo7nCTet3byt6GZbPYYPWruoGI5CLAtEHXIH0WA4MQh4UgkMLe9a QSbP1OYjOC0GR7AT2HyDfWxwIMsJrBRQZqZosGg2TrbdG6+ZfCvUfesY5EtJr4nS+TTI KzHI9+3ea0ur5TsFccQb9ToXvNHRharDeVwBC+rayurHxUtjfLPXPpmBJce43GIzBr8h qUHYZE/UOxWmPGiViYPZ8GQ1sQM15ZqJJNa5aUyMsXXAgCR49RdMRc1rrrm3kGd92SpB 7geF2IkeZbxDQvb4y6za28s4W56ChoRVjLl41E1P7+8JDV/hkUIWWMGC8FgDquj70r+e G50g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=LudW1hK60eJb9huftoz46SPadQ6CgAK2RqVUmZAXyHY=; b=WAdZ59qH0pMUTx8g9sV6NEIfTk9qOfcLBcZDhRH6Reja9gWTvbuzJ+5nIPgYFvUC7M wvAJmmtP13vbgy7GDYcl8IpYitZBA7DZ8/k4JyerwZeRIWOzZFFG1L5O6irqTG3Fwaku 6wQVrpAF+1g9q6jWqBHrO1IwsstdE933/EH7jPh1ty9zoxxONLNUdpvMV30kVEdXxyVD gnWI9ZJb9yeVK7IeV4h00t1rtpIyX2n2m3PcEWo3f3OZ4hxwY9V0uoqdtZSvVrUog7vC It72oj8pKSyNdBvr4DC+WiABe6C68rwyv9RgCSwFeYFWb47Cuw7bL52tz+hrrb2kgMfY fSIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ce2-20020a170906b24200b00931354bad79si18032713ejb.95.2023.03.24.02.16.05; Fri, 24 Mar 2023 02:16:05 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 229E668C674; Fri, 24 Mar 2023 11:16:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1FACA68C155 for ; Fri, 24 Mar 2023 11:15:57 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id DCCE3240591 for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id e-BCiqjzbwUc for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6A74A2404EE for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 9798A3A03E5 for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:47 +0100 Message-Id: <20230324091451.20895-3-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] tools/decode_simple: initialize decoder parameters with container info 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ed2aPNgfwdpn --- tools/decode_simple.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/decode_simple.c b/tools/decode_simple.c index 8a9e7c5f71..6532e368d4 100644 --- a/tools/decode_simple.c +++ b/tools/decode_simple.c @@ -149,6 +149,10 @@ int ds_open(DecodeContext *dc, const char *url, int stream_idx) if (!dc->decoder) return AVERROR(ENOMEM); + ret = avcodec_parameters_to_context(dc->decoder, dc->stream->codecpar); + if (ret < 0) + goto fail; + return 0; fail: From patchwork Fri Mar 24 09:14:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40796 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434960pzb; Fri, 24 Mar 2023 02:16:50 -0700 (PDT) X-Google-Smtp-Source: AKy350YPeTXiqTus/9mO/P/3u7GZ6T7lcUSCUejLwEG5xkk37fdPWz/lRFIMe+yvVu4a7HafRF2U X-Received: by 2002:a17:906:214:b0:933:23c4:820b with SMTP id 20-20020a170906021400b0093323c4820bmr1715587ejd.4.1679649410275; Fri, 24 Mar 2023 02:16:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649410; cv=none; d=google.com; s=arc-20160816; b=AGLfjzD0aawLfH7dvLj4JsAWg+Yxzwtmtdx1RHypFbES2nhxlNIUVQFJN/rs1W+Njr VoRsEF6VU+IMWMZtGFgJIyn/5H8ONDfK2+vx72gvjjwbsy6+jXw8xPXa4XNxtCnMzI1W REhcx8jbvB1nFAKSTOQ01o54shDWG8xVtA4ZdK2e0pewujsB9EO2mwe0yCjZQaRP6Ja6 e86LArDCyXGZvccIknbFKIybPrsyZ9Ab++EsStENvmGk98GED+LRWkFs7WQflpavQ80O Mnap5VdMsvUmFdFk/5jHFRs2Zi6LiDxo1+/pBl9AUJxa2J60tGHS3WBT1eFx5/tvo4aW +Qkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=7O4Vau1LBPYZbcRiadMdfPNmJeHzqAybpFORG+jPb/8=; b=jl0SG4Bd/LFiKWV0X3Cz9cYDv4MwmhO/nk8W4bCg0zRxVBkr23GBFnjJtyJpxdhL17 XHROkAY2l0LpgPxrXro12z6SluUSY//WN+tnHsUlELPBOSLcl/9W73Cvf3O0jPfo+645 jlOAc5syato9L5SLDL2kvNiXLYJ+yisCfXq9C7pMwmB9ubVXxXEw1wvfeYjJPRzl6vcv U15UohwPx1Kp7m6eA2lEPn1P0JFy5Y8m1EsyF9AzqUKqxiHqYahnkLLa9o3Nn5fkGh8z JH2erjA+LwWkFysoslt6IIKTNXo2p5+6XIpeLkMlamYVoqgaxAtRvqNh098GYvZ2zv3Z i24A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k16-20020a170906579000b00933433c48bbsi14581810ejq.572.2023.03.24.02.16.49; Fri, 24 Mar 2023 02:16:50 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EEC1968C6E2; Fri, 24 Mar 2023 11:16:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 576A368C6B6 for ; Fri, 24 Mar 2023 11:16:02 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 6DFC62404EE for ; Fri, 24 Mar 2023 10:16:00 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id XfIn7N9RPV-6 for ; Fri, 24 Mar 2023 10:15:59 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6E26F2405B5 for ; Fri, 24 Mar 2023 10:15:57 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A33A53A0404 for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:48 +0100 Message-Id: <20230324091451.20895-4-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] tools: add an AV_CODEC_CAP_ENCODER_RECON_FRAME test tool 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: suipLK9mtJ0i --- Makefile | 2 + tools/Makefile | 3 +- tools/enc_recon_frame_test.c | 393 +++++++++++++++++++++++++++++++++++ 3 files changed, 397 insertions(+), 1 deletion(-) create mode 100644 tools/enc_recon_frame_test.c diff --git a/Makefile b/Makefile index 1fb742f390..bf1b69f96b 100644 --- a/Makefile +++ b/Makefile @@ -67,6 +67,8 @@ tools/target_io_dem_fuzzer$(EXESUF): tools/target_io_dem_fuzzer.o $(FF_DEP_LIBS) tools/enum_options$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/enum_options$(EXESUF): $(FF_DEP_LIBS) +tools/enc_recon_frame_test$(EXESUF): $(FF_DEP_LIBS) +tools/enc_recon_frame_test$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/scale_slice_test$(EXESUF): $(FF_DEP_LIBS) tools/scale_slice_test$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/sofa2wavs$(EXESUF): ELIBS = $(FF_EXTRALIBS) diff --git a/tools/Makefile b/tools/Makefile index 4afa23342d..dee6a41668 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,4 +1,4 @@ -TOOLS = enum_options qt-faststart scale_slice_test trasher uncoded_frame +TOOLS = enc_recon_frame_test enum_options qt-faststart scale_slice_test trasher uncoded_frame TOOLS-$(CONFIG_LIBMYSOFA) += sofa2wavs TOOLS-$(CONFIG_ZLIB) += cws2fws @@ -17,6 +17,7 @@ tools/target_dem_fuzzer.o: tools/target_dem_fuzzer.c tools/target_io_dem_fuzzer.o: tools/target_dem_fuzzer.c $(COMPILE_C) -DIO_FLAT=0 +tools/enc_recon_frame_test$(EXESUF): tools/decode_simple.o tools/venc_data_dump$(EXESUF): tools/decode_simple.o tools/scale_slice_test$(EXESUF): tools/decode_simple.o diff --git a/tools/enc_recon_frame_test.c b/tools/enc_recon_frame_test.c new file mode 100644 index 0000000000..d23accd49d --- /dev/null +++ b/tools/enc_recon_frame_test.c @@ -0,0 +1,393 @@ +/* + * copyright (c) 2022 Anton Khirnov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* A test for AV_CODEC_FLAG_RECON_FRAME + * TODO: dump reconstructed frames to disk */ + +#include +#include +#include + +#include "decode_simple.h" + +#include "libavutil/adler32.h" +#include "libavutil/common.h" +#include "libavutil/error.h" +#include "libavutil/frame.h" +#include "libavutil/imgutils.h" +#include "libavutil/opt.h" + +#include "libavformat/avformat.h" + +#include "libavcodec/avcodec.h" +#include "libavcodec/codec.h" + +#include "libswscale/swscale.h" + +typedef struct FrameChecksum { + int64_t ts; + uint32_t checksum[4]; +} FrameChecksum; + +typedef struct PrivData { + AVCodecContext *enc; + AVCodecContext *dec; + + int64_t pts_in; + + AVPacket *pkt; + AVFrame *frame, *frame_recon; + + struct SwsContext *scaler; + + FrameChecksum *checksums_decoded; + size_t nb_checksums_decoded; + FrameChecksum *checksums_recon; + size_t nb_checksums_recon; +} PrivData; + +static int frame_hash(FrameChecksum **pc, size_t *nb_c, int64_t ts, + const AVFrame *frame) +{ + FrameChecksum *c; + int shift_h[4] = { 0 }, shift_v[4] = { 0 }; + + c = av_realloc_array(*pc, *nb_c + 1, sizeof(*c)); + if (!c) + return AVERROR(ENOMEM); + *pc = c; + (*nb_c)++; + + c += *nb_c - 1; + memset(c, 0, sizeof(*c)); + + av_pix_fmt_get_chroma_sub_sample(frame->format, &shift_h[1], &shift_v[1]); + shift_h[2] = shift_h[1]; + shift_v[2] = shift_v[1]; + + c->ts = ts; + for (int p = 0; frame->data[p]; p++) { + const uint8_t *data = frame->data[p]; + int linesize = av_image_get_linesize(frame->format, frame->width, p); + uint32_t checksum = 0; + + for (int j = 0; j < frame->height >> shift_v[p]; j++) { + checksum = av_adler32_update(checksum, data, linesize); + data += frame->linesize[p]; + } + + c->checksum[p] = checksum; + } + + return 0; +} + +static int recon_frame_process(PrivData *pd, const AVPacket *pkt) +{ + AVFrame *f = pd->frame_recon; + int ret; + + ret = avcodec_receive_frame(pd->enc, f); + if (ret < 0) { + fprintf(stderr, "Error retrieving a reconstructed frame\n"); + return ret; + } + + // the encoder's internal format (in which the reconsturcted frames are + // exported) may be different from the user-facing pixel format + if (f->format != pd->enc->pix_fmt) { + if (!pd->scaler) { + pd->scaler = sws_getContext(f->width, f->height, f->format, + f->width, f->height, pd->enc->pix_fmt, + SWS_BITEXACT, NULL, NULL, NULL); + if (!pd->scaler) + return AVERROR(ENOMEM); + } + + ret = sws_scale_frame(pd->scaler, pd->frame, f); + if (ret < 0) { + fprintf(stderr, "Error converting pixel formats\n"); + return ret; + } + + av_frame_unref(f); + f = pd->frame; + } + + ret = frame_hash(&pd->checksums_recon, &pd->nb_checksums_recon, + pkt->pts, f); + av_frame_unref(f); + + return 0; +} + +static int process_frame(DecodeContext *dc, AVFrame *frame) +{ + PrivData *pd = dc->opaque; + int ret; + + if (!avcodec_is_open(pd->enc)) { + if (!frame) { + fprintf(stderr, "No input frames were decoded\n"); + return AVERROR_INVALIDDATA; + } + + pd->enc->width = frame->width; + pd->enc->height = frame->height; + pd->enc->pix_fmt = frame->format; + pd->enc->thread_count = dc->decoder->thread_count; + pd->enc->thread_type = dc->decoder->thread_type; + + // real timestamps do not matter for this test, so we just + // pretend the input is 25fps CFR to avoid any timestamp issues + pd->enc->time_base = (AVRational){ 1, 25 }; + + ret = avcodec_open2(pd->enc, NULL, NULL); + if (ret < 0) { + fprintf(stderr, "Error opening the encoder\n"); + return ret; + } + } + + if (frame) { + frame->pts = pd->pts_in++; + + // avoid forcing coded frame type + frame->pict_type = AV_PICTURE_TYPE_NONE; + } + + ret = avcodec_send_frame(pd->enc, frame); + if (ret < 0) { + fprintf(stderr, "Error submitting a frame for encoding\n"); + return ret; + } + + while (1) { + AVPacket *pkt = pd->pkt; + + ret = avcodec_receive_packet(pd->enc, pkt); + if (ret == AVERROR(EAGAIN)) + break; + else if (ret == AVERROR_EOF) + pkt = NULL; + else if (ret < 0) { + fprintf(stderr, "Error receiving a frame from the encoder\n"); + return ret; + } + + if (pkt) { + ret = recon_frame_process(pd, pkt); + if (ret < 0) + return ret; + } + + if (!avcodec_is_open(pd->dec)) { + if (!pkt) { + fprintf(stderr, "No packets were received from the encoder\n"); + return AVERROR(EINVAL); + } + + pd->dec->width = pd->enc->width; + pd->dec->height = pd->enc->height; + pd->dec->pix_fmt = pd->enc->pix_fmt; + pd->dec->thread_count = dc->decoder->thread_count; + pd->dec->thread_type = dc->decoder->thread_type; + if (pd->enc->extradata_size) { + pd->dec->extradata = av_memdup(pd->enc->extradata, + pd->enc->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!pd->dec->extradata) + return AVERROR(ENOMEM); + } + + ret = avcodec_open2(pd->dec, NULL, NULL); + if (ret < 0) { + fprintf(stderr, "Error opening the decoder\n"); + return ret; + } + } + + ret = avcodec_send_packet(pd->dec, pkt); + if (ret < 0) { + fprintf(stderr, "Error sending a packet to decoder\n"); + return ret; + } + + while (1) { + ret = avcodec_receive_frame(pd->dec, pd->frame); + if (ret == AVERROR(EAGAIN)) + break; + else if (ret == AVERROR_EOF) + return 0; + else if (ret < 0) { + fprintf(stderr, "Error receving a frame from decoder\n"); + return ret; + } + + ret = frame_hash(&pd->checksums_decoded, &pd->nb_checksums_decoded, + pd->frame->pts, pd->frame); + av_frame_unref(pd->frame); + if (ret < 0) + return ret; + } + + } + + return 0; +} + +static int frame_checksum_compare(const void *a, const void *b) +{ + const FrameChecksum *ca = a; + const FrameChecksum *cb = b; + if (ca->ts == cb->ts) + return 0; + return FFSIGN(ca->ts - cb->ts); +} + +int main(int argc, char **argv) +{ + PrivData pd; + DecodeContext dc; + + const char *filename, *enc_name, *enc_opts, *thread_type = NULL, *nb_threads = NULL; + const AVCodec *enc, *dec; + int ret = 0, max_frames = 0; + + if (argc < 4) { + fprintf(stderr, + "Usage: %s " + "[ [ ]\n", + argv[0]); + return 0; + } + + filename = argv[1]; + enc_name = argv[2]; + enc_opts = argv[3]; + if (argc >= 5) + max_frames = strtol(argv[4], NULL, 0); + if (argc >= 6) + nb_threads = argv[5]; + if (argc >= 7) + thread_type = argv[6]; + + memset(&dc, 0, sizeof(dc)); + memset(&pd, 0, sizeof(pd)); + + enc = avcodec_find_encoder_by_name(enc_name); + if (!enc) { + fprintf(stderr, "No such encoder: %s\n", enc_name); + return 1; + } + if (!(enc->capabilities & AV_CODEC_CAP_ENCODER_RECON_FRAME)) { + fprintf(stderr, "Encoder '%s' cannot ouput reconstructed frames\n", + enc->name); + return 1; + } + + dec = avcodec_find_decoder(enc->id); + if (!dec) { + fprintf(stderr, "No decoder for: %s\n", avcodec_get_name(enc->id)); + return 1; + } + + pd.enc = avcodec_alloc_context3(enc); + if (!pd.enc) { + fprintf(stderr, "Error allocating encoder\n"); + return 1; + } + + ret = av_set_options_string(pd.enc, enc_opts, "=", ","); + if (ret < 0) { + fprintf(stderr, "Error setting encoder options\n"); + goto fail; + } + pd.enc->flags |= AV_CODEC_FLAG_RECON_FRAME | AV_CODEC_FLAG_BITEXACT; + + pd.dec = avcodec_alloc_context3(dec); + if (!pd.dec) { + fprintf(stderr, "Error allocating decoder\n"); + goto fail; + } + + pd.dec->flags |= AV_CODEC_FLAG_BITEXACT; + pd.dec->err_recognition |= AV_EF_CRCCHECK; + + pd.frame = av_frame_alloc(); + pd.frame_recon = av_frame_alloc(); + pd.pkt = av_packet_alloc(); + if (!pd.frame ||!pd.frame_recon || !pd.pkt) { + ret = 1; + goto fail; + } + + ret = ds_open(&dc, filename, 0); + if (ret < 0) { + fprintf(stderr, "Error opening the file\n"); + goto fail; + } + + dc.process_frame = process_frame; + dc.opaque = &pd; + dc.max_frames = max_frames; + + ret = av_dict_set(&dc.decoder_opts, "threads", nb_threads, 0); + ret |= av_dict_set(&dc.decoder_opts, "thread_type", thread_type, 0); + + ret = ds_run(&dc); + if (ret < 0) + goto fail; + + if (pd.nb_checksums_decoded != pd.nb_checksums_recon) { + fprintf(stderr, "Mismatching frame counts: recon=%zu decoded=%zu\n", + pd.nb_checksums_recon, pd.nb_checksums_decoded); + ret = 1; + goto fail; + } + + // reconstructed frames are in coded order, sort them by pts into presentation order + qsort(pd.checksums_recon, pd.nb_checksums_recon, sizeof(*pd.checksums_recon), + frame_checksum_compare); + + for (size_t i = 0; i < pd.nb_checksums_decoded; i++) { + const FrameChecksum *d = &pd.checksums_decoded[i]; + const FrameChecksum *r = &pd.checksums_recon[i]; + + for (int p = 0; p < FF_ARRAY_ELEMS(d->checksum); p++) + if (d->checksum[p] != r->checksum[p]) { + fprintf(stderr, "Checksum mismatch in frame ts=%"PRId64", plane %d\n", + d->ts, p); + ret = 1; + goto fail; + } + } + fprintf(stderr, "All %zu encoded frames match\n", pd.nb_checksums_decoded); + +fail: + avcodec_free_context(&pd.enc); + avcodec_free_context(&pd.dec); + av_freep(&pd.checksums_decoded); + av_freep(&pd.checksums_recon); + av_frame_free(&pd.frame); + av_frame_free(&pd.frame_recon); + av_packet_free(&pd.pkt); + ds_free(&dc); + return !!ret; +} From patchwork Fri Mar 24 09:14:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40795 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434809pzb; Fri, 24 Mar 2023 02:16:41 -0700 (PDT) X-Google-Smtp-Source: AKy350a8EjCJGQGSRVEdj6YGro9RDVcfS8ngcDFrkU58cN0m+DAX4cW+Xt4glATZ9XP5vypN1khr X-Received: by 2002:aa7:c548:0:b0:4fb:98e2:3df8 with SMTP id s8-20020aa7c548000000b004fb98e23df8mr2108194edr.27.1679649401300; Fri, 24 Mar 2023 02:16:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649401; cv=none; d=google.com; s=arc-20160816; b=C6cRV21dz0znM46yV0wJrnIsgETZbEpKMmkoDnwooMQ1IwCCNYEo3HY+P04OM+ARJD nqQJNs+fnWu6kRXhk4m3BQbSSh9r8AQ5rRn2+KTFfzzJp00Is/1HYq0XM8kArqysLcg2 Xitmm2oVxbLdSFWgzhG9vNdcEGs5ewmGhbUrae1gY3tRmEFKoEWaZ/Z5PcXTIHS2TuBk VRVmqUqM1BfzVAbo/SDYzSSfH7Rm0+qeWzZ3Yup20iQdZ0GBdxnxdakk17QvzB6FMDAt ThsynDxJ20eAUPvd5DRboTG8GQ/sVdUaruNaRl6bsK9EU+PyhU8EDII+qjls33TRL65q JQiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=0VfDTe3sjYG+Wa5+B05O2y+IfdRVMnozhKpqlICMRcU=; b=QX+AaqKUZBJpBqSZ+2mjalysCL5YR7USzWx5LUSCHTGEqZsb3g9c8oGJZ7j6l4cE11 g8vSOWtzt8VJ1CjT8+pUddIo2EV0S4TmiIc4uh9TCq3Cu3NgPDwv07stc6DU+i8y/e4v xBKeBLcE+Yma0b9AfyxzurgHrYnp+4joso0lnGn4ThrAiK6e2tAaH0y0XMmSgt/KqRQ4 RLxOSSyJhCZzUtlR47+Uwso2IMKCwtzOAhwuYgHqBTM/iRs3LumPhW8D9JKLNhePEXg3 HkImcxQ7xfA9NxrfaoqTakUYzO+mLRDmZ2lhHJDuNkp+OSE6bmjXa+9qmdhEBNwLwOmA rqWQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x11-20020aa7d38b000000b00502246a8d98si316569edq.524.2023.03.24.02.16.40; Fri, 24 Mar 2023 02:16:41 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E628368C6D9; Fri, 24 Mar 2023 11:16:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8421E68C655 for ; Fri, 24 Mar 2023 11:15:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4C51B2404F8 for ; Fri, 24 Mar 2023 10:15:59 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id kqkffnYihqYI for ; Fri, 24 Mar 2023 10:15:58 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6C8B72404EE for ; Fri, 24 Mar 2023 10:15:57 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id AFD973A042D for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:49 +0100 Message-Id: <20230324091451.20895-5-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] lavc/avcodec: fix documentation typo 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /dhaAy4INfu9 --- libavcodec/avcodec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 30f1d312f4..d1bcb3026c 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -243,7 +243,7 @@ typedef struct RcOverride{ #define AV_CODEC_FLAG_RECON_FRAME (1 << 6) /** * @par decoding - * Request the decoder to propagate each packets AVPacket.opaque and + * Request the decoder to propagate each packet's AVPacket.opaque and * AVPacket.opaque_ref to its corresponding output AVFrame. * * @par encoding: From patchwork Fri Mar 24 09:14:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40793 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434569pzb; Fri, 24 Mar 2023 02:16:24 -0700 (PDT) X-Google-Smtp-Source: AKy350Yq4FXXahy63BYCDC7kI/ziElAbd5zcHxhaM5wwz6N7B6LYA4EPnUA/w/qtaQS/pMLh1iko X-Received: by 2002:a17:906:9442:b0:8aa:c090:a9ef with SMTP id z2-20020a170906944200b008aac090a9efmr1781709ejx.55.1679649384243; Fri, 24 Mar 2023 02:16:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649384; cv=none; d=google.com; s=arc-20160816; b=CBtpQ08IqEZUfeiR7MTF+Abai8c/ZPm4XoXqW2JH7OC0GCj12J6AX10zHLOxOHcrnw Tkpe3H7L5vY0PF/yyuQmTxAGmNBZe4cCkF8Iu6pfOIETKeybAd+9QxfFKKqLdYpC12ft k+FM3oFSxqwjecK6X0tGOFnmjwZWAKTR36/q42wkRxxwJ85OwDkr/A3KplmyM9cWTUxi 7RUEgHTRBk4pITM4rU/RIfXMLnEWZMRMTYo2NqkvIUstOwHyFJYocfhfD/yg771d2Qhe Bp5KgmaX99DAJGhsY2tXSJNMXpEwWYxtmtFhxG7r/Cn3SbfvqExKJbNz8kPeYhYAuOUK FudQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=gGgW6TR/Fio0Z/N7rqEZl9RS5cW6+34tywZ4984+ZFI=; b=eH4IZr2VMJBTVOBPvdp5DDN8Yz///7lDsVG/ksYVZ15RH4QxFXTY2jQLeE7FU9SQbC 4uVB+814YSwmLnxAU2tHDD9zvU556LlCE5a31Gg2XIoa7PMH8UDl7ZBexolfW0x2xXOz hSte6nTBsUoJ6zHd8dlHB6wQmSGIIeuiXfoltS4EiTyK3f52oSsgSqUo16TzV4x0UKdg 2xOli1F0dqFRhV314OczQEf4S4kfyC82rsPJheFHUQtMi2ZleX+1hgeFD80Eu6nHAhSp JKw0CCd3xfNZs8ToQwYNTGJKdkHZTRSvZs/Rmc76fMWl2Bjbxd++HDP4zNS5Kr+kdsi9 gUPQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b7-20020a056402138700b0050224598663si394715edv.648.2023.03.24.02.16.23; Fri, 24 Mar 2023 02:16:24 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0F78368C6A9; Fri, 24 Mar 2023 11:16:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8579968C687 for ; Fri, 24 Mar 2023 11:15:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4BC59240178 for ; Fri, 24 Mar 2023 10:15:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ufYt3vj3T9Nb for ; Fri, 24 Mar 2023 10:15:57 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 750812404F5 for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id BA87F3A0567 for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:50 +0100 Message-Id: <20230324091451.20895-6-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] lavc: expand doxy for AV_CODEC_FLAG_RECON_FRAME 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1FrUbb/KE92v --- libavcodec/avcodec.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index d1bcb3026c..7a6eb4c0e2 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -239,6 +239,15 @@ typedef struct RcOverride{ * * Should only be used with encoders flagged with the * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. + * + * @note + * Each reconstructed frame returned by the encoder corresponds to the last + * encoded packet, i.e. the frames are returned in coded order rather than + * presentation order. + * + * @note + * Frame parameters (like pixel format or dimensions) do not have to match the + * AVCodecContext values. Make sure to use the values from the returned frame. */ #define AV_CODEC_FLAG_RECON_FRAME (1 << 6) /** From patchwork Fri Mar 24 09:14:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 40794 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp434698pzb; Fri, 24 Mar 2023 02:16:32 -0700 (PDT) X-Google-Smtp-Source: AKy350Yy4s6ixrIXWMm4Fz0bjZTXDLf5X0fAChompaQExOsOPDQJbzWAcG6ENMK4p1RuwB7pNqQy X-Received: by 2002:a17:906:7193:b0:931:7adf:547e with SMTP id h19-20020a170906719300b009317adf547emr2099112ejk.70.1679649392645; Fri, 24 Mar 2023 02:16:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679649392; cv=none; d=google.com; s=arc-20160816; b=e/KcQ7nLZ1AyBjmgq/lD32W+PqJjI3gW5g9st5Jko5ILzO/YQpboQ2ad7NGK7W4qTM QssB0sbEYorehvMZlwo4HtK6zhRrRNZddMYJMYkYrk0FUAGEeHZjqhUSVBEFbZLSTSV1 8HV/eEw8B2nkigGQsftdq4uSJcYQ5WrP0a5QEJEPKXoer70JLytGPCrphcvQuJ9CkcFE 3URu7aRDb9JcDeItli8pXGXCUdmpoQ8F23ght2ySvnBVxfrTHxonGQAmHt+K/p9aP6at 7ixFIJ4acAYn9GJC+2oj+5uGHMH8M5ZtmImhOz5XknB52sqDbe4kbobV5LS/DOAWQW81 NesA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=X3UAwstoZ2Jp8sIlJp0uYQ7tg2x2IldT4lhtY8NwCPo=; b=lsjAVjSb+iXShnK35SlCtyazUeYDvvHMzhxbYNNeD0fDHWstT4BDVr+vcXnyoLxs26 OPDGNZqxnt3xkfMZndE161CFEatb8v8whJAPZ/bWT7k4RNEEvi0BXMO0QifK3cHySjIC NElNzN0IgHCB03c1EAX0c+a9l8+QqoeNmzTI1M243O81WqHAUFL0uRwMTnXE2GQGR+Ip httxrakU6Lga+LnKCx3o2uRVFcpu0slSLukuHCov9S+ceYfQiQsJ4lnIEXM7kd+i5B7R YI1e9TUcpMhhOhLDj+SQKNMyK1xwDPOejkyBnR4l7QxRcWrIxZ2L8FH336LA3Cxm6FaD wKVg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f7-20020a170906084700b00909a2cb1cb3si70262ejd.63.2023.03.24.02.16.32; Fri, 24 Mar 2023 02:16:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8E1A68C69D; Fri, 24 Mar 2023 11:16:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 119CE68C687 for ; Fri, 24 Mar 2023 11:15:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id CBF962404F5 for ; Fri, 24 Mar 2023 10:15:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id kfF5HznrhdcP for ; Fri, 24 Mar 2023 10:15:58 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 752DB2404F8 for ; Fri, 24 Mar 2023 10:15:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C57D73A0586 for ; Fri, 24 Mar 2023 10:15:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Mar 2023 10:14:51 +0100 Message-Id: <20230324091451.20895-7-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230324091451.20895-1-anton@khirnov.net> References: <20230324091451.20895-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] lavc: turn mentions of AV_CODEC_FLAG_RECON_FRAME in doxy into links 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /HnknI3/DYu4 --- libavcodec/avcodec.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 7a6eb4c0e2..18ca0e2494 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2665,7 +2665,7 @@ int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); /** * Return decoded output data from a decoder or encoder (when the - * AV_CODEC_FLAG_RECON_FRAME flag is used). + * @ref AV_CODEC_FLAG_RECON_FRAME flag is used). * * @param avctx codec context * @param frame This will be set to a reference-counted video or audio @@ -2679,7 +2679,7 @@ int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); * @retval AVERROR_EOF the codec has been fully flushed, and there will be * no more output frames * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the - * AV_CODEC_FLAG_RECON_FRAME flag enabled + * @ref AV_CODEC_FLAG_RECON_FRAME flag enabled * @retval AVERROR_INPUT_CHANGED current decoded frame has changed parameters with * respect to first decoded frame. Applicable when flag * AV_CODEC_FLAG_DROPCHANGED is set.