From patchwork Sun Nov 27 17:03:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39492 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959046pzb; Sun, 27 Nov 2022 09:06:03 -0800 (PST) X-Google-Smtp-Source: AA0mqf7jCNsrA0FF/SfNcjeefCpGca8mTTpMmSbc+rGqc+R0XY/TYitu49v84k1kZ6hi42VxC4YS X-Received: by 2002:a17:906:1412:b0:7a0:3313:a775 with SMTP id p18-20020a170906141200b007a03313a775mr30468426ejc.474.1669568763612; Sun, 27 Nov 2022 09:06:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568763; cv=none; d=google.com; s=arc-20160816; b=r8lHDqKgtVT0PiDF9ZjKbQ79Mn/cIuiuAg5InpoBg1I25YVivz6f7Pmg1VCJetWhX0 9g00vHv4bdpPUzSpl6ruQPSMPo09ASyIHfwA7tg1hO4uvoCpYZtSYQOajlSljFZf2mYU 6Le8ug2CsmHu3IPnS9Z06mqojyjlCwxbdRtXQ1ebMNc8FHrrTi2SeB1XbwchXseIfk5O V7hnGAG4AdUSoCRjKssphyIanpezPZ+YvOBIZC28tTHdyThejTzG2mudUuhAPDgrbXOM qxusfXUYgOHqadIRR2gxhpp4rvDDynee/K0JQ1akMZ8Ca1Y3zaTZHvJpPCykL2QXDGpr c42A== 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=F+rrUV0a0YT15G3deF8EYjGPEkC2cp9PTYca0kimLoc=; b=oRf5U93iPiQkleoJFjTL0/VDmbtLzGKMw0leSQoy/R5+xHpl9QFIqikjMFs+94BlnS f4CAI3le+BWuAHJL21SzhXggnkteuMZo59LF5p8jcsTpoxEctjy9zce6oCUrNsICN8Ou gXZmgq6n0490cmOR0dThdR7lPI2fPrNbXnoeuCfbwPGaaPxMqMjyBbys0L4+UHDyzHoB dJpYIPfKcNxfSFCHQ4PNsbIqvEs9qHGQk+0kY8TLSqxa7uMjjRqqKtNzhOjZ0jljbTR0 D2Tk/z+fXFqDCdu7qubkCu+qR3L4cq7K6xk5z8ZnBLCbWgx8lUVSLT58RXx4p8Q2bjeE Af0Q== 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 sc34-20020a1709078a2200b007808f3f4cbcsi9706843ejc.239.2022.11.27.09.06.03; Sun, 27 Nov 2022 09:06:03 -0800 (PST) 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 5E7EC68B724; Sun, 27 Nov 2022 19:05:59 +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 3D87D6808AB for ; Sun, 27 Nov 2022 19:05:53 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4A4F0240D23 for ; Sun, 27 Nov 2022 18:05:52 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id b9rpZf8mRurn for ; Sun, 27 Nov 2022 18:05:51 +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 5E2AF2400F5 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C60313A0D91 for ; Sun, 27 Nov 2022 18:05:45 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:22 +0100 Message-Id: <20221127170351.11477-1-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/30] lavc/libx264: factor out setting up the input 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: HPLk+fwbAGUq X264_frame() is currently too large and complex. --- libavcodec/libx264.c | 45 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index ca0b5a145b..009cad4bdf 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -333,19 +333,20 @@ static enum AVPixelFormat csp_to_pixfmt(int csp) return AV_PIX_FMT_NONE; } -static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, - int *got_packet) +static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, + x264_picture_t **ppic) { X264Context *x4 = ctx->priv_data; - x264_nal_t *nal; - int nnal, i, ret; - x264_picture_t pic_out = {0}; - int pict_type; - int bit_depth; + x264_sei_t *sei = &x4->pic.extra_sei; + unsigned int sei_data_size = 0; int64_t wallclock = 0; - X264Opaque *out_opaque; + int bit_depth, ret; AVFrameSideData *sd; + *ppic = NULL; + if (!frame) + return 0; + x264_picture_init( &x4->pic ); x4->pic.img.i_csp = x4->params.i_csp; #if X264_BUILD >= 153 @@ -357,11 +358,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, x4->pic.img.i_csp |= X264_CSP_HIGH_DEPTH; x4->pic.img.i_plane = avfmt2_num_planes(ctx->pix_fmt); - if (frame) { - x264_sei_t *sei = &x4->pic.extra_sei; - unsigned int sei_data_size = 0; - - for (i = 0; i < x4->pic.img.i_plane; i++) { + for (int i = 0; i < x4->pic.img.i_plane; i++) { x4->pic.img.plane[i] = frame->data[i]; x4->pic.img.i_stride[i] = frame->linesize[i]; } @@ -512,10 +509,28 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, sei->num_payloads++; } } - } + + *ppic = &x4->pic; + return 0; +} + +static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, + int *got_packet) +{ + X264Context *x4 = ctx->priv_data; + x264_nal_t *nal; + int nnal, ret; + x264_picture_t pic_out = {0}, *pic_in; + int pict_type; + int64_t wallclock = 0; + X264Opaque *out_opaque; + + ret = setup_frame(ctx, frame, &pic_in); + if (ret < 0) + return ret; do { - if (x264_encoder_encode(x4->enc, &nal, &nnal, frame? &x4->pic: NULL, &pic_out) < 0) + if (x264_encoder_encode(x4->enc, &nal, &nnal, pic_in, &pic_out) < 0) return AVERROR_EXTERNAL; if (nnal && (ctx->flags & AV_CODEC_FLAG_RECON_FRAME)) { From patchwork Sun Nov 27 17:03:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39494 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959259pzb; Sun, 27 Nov 2022 09:06:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf5YgyqzfXExaKl0fvwRKtIvk77Bz6XU+ItS7IfyzXbztYnpMNveLRplvpw2cDkiRkGwYObL X-Received: by 2002:a05:6402:528f:b0:461:9cbd:8fba with SMTP id en15-20020a056402528f00b004619cbd8fbamr20655747edb.19.1669568783373; Sun, 27 Nov 2022 09:06:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568783; cv=none; d=google.com; s=arc-20160816; b=GU84W/pKHsKp3BNiFso26qqKcj9bOt9mVfCvSK4diACEckAJ53eS1jShJXTH2OB1O8 1z/vhTltilnys2jA+otPRKF6vxBUcYathO9dq8zfalONa0hKMATF6JO+orYOoQQC6z3x x+U0MLV+Ahc9yjjJcuFZdszOF0RlmF4OLGBx5KhZo3CO5UdiRkzKZYKTZK7svq38hhGN pQDNFfKlf0G2/YYGeJiJ9R0nHaLP+Ep1JYX9TGuv+vKmipATC8b+mKlrTHM3A0/f79yf W+YZ8HI2o/iBtCK8CqJNQIVNTL+j1vyF8hFz0mj1IoELDhxakrVM0V5ty2HyGAiHMs5i 98uA== 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=Q9rrOpR9pjhiTaOBC18aCqjvG11Cwo1xUVErkmUW0vg=; b=PfTDkwDlgHkU2qRRnZWew4nYT0HOiY5vvopf1T1N6xGAc2GjOJ16n31ypEBry+PGsi GA5RJAk0jqhh7rxaBfmH8vrdgTZvuZYePjg/GEvsMx8m6afMAr0u/WT1ZTQ+HTGbhaXr TmX+G8tiD0TX2JI3ph/vDXv5kUFupRkVTtDTGjTnNJ6awtw5LIgpGgMeuB9RJ/aqzQrD VTbJJkbnamb5d23qnvLkBJ0xTh710eSNdsNJkGH5DkVlVheHsu0MkFYu0R++u419alxk EdnxVEBiSCRgpuQ18MQWeEJVuY5Q8F9c5LACydSAEN98vFtqB4Cu3TY3RAMm6lscIwSi b8+w== 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 eq10-20020a056402298a00b00469e712cba8si8153915edb.558.2022.11.27.09.06.23; Sun, 27 Nov 2022 09:06:23 -0800 (PST) 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 4A3F168B8F3; Sun, 27 Nov 2022 19:06:01 +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 9160D6808AB for ; Sun, 27 Nov 2022 19:05:53 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 57215240D27 for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id AV_zyI-WTDBK for ; Sun, 27 Nov 2022 18:05:51 +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 60201240499 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D36DE3A1943 for ; Sun, 27 Nov 2022 18:05:45 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:23 +0100 Message-Id: <20221127170351.11477-2-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/30] lavc/libx264: reindent after previous commit 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: gh53FwASAlCQ --- libavcodec/libx264.c | 260 +++++++++++++++++++++---------------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 009cad4bdf..36c36d0e09 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -358,157 +358,157 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, x4->pic.img.i_csp |= X264_CSP_HIGH_DEPTH; x4->pic.img.i_plane = avfmt2_num_planes(ctx->pix_fmt); - for (int i = 0; i < x4->pic.img.i_plane; i++) { - x4->pic.img.plane[i] = frame->data[i]; - x4->pic.img.i_stride[i] = frame->linesize[i]; - } - - x4->pic.i_pts = frame->pts; - - x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque; - x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock; - if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) - x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); - x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; - x4->next_reordered_opaque++; - x4->next_reordered_opaque %= x4->nb_reordered_opaque; + for (int i = 0; i < x4->pic.img.i_plane; i++) { + x4->pic.img.plane[i] = frame->data[i]; + x4->pic.img.i_stride[i] = frame->linesize[i]; + } - switch (frame->pict_type) { - case AV_PICTURE_TYPE_I: - x4->pic.i_type = x4->forced_idr > 0 ? X264_TYPE_IDR - : X264_TYPE_KEYFRAME; - break; - case AV_PICTURE_TYPE_P: - x4->pic.i_type = X264_TYPE_P; - break; - case AV_PICTURE_TYPE_B: - x4->pic.i_type = X264_TYPE_B; - break; - default: - x4->pic.i_type = X264_TYPE_AUTO; - break; - } - reconfig_encoder(ctx, frame); + x4->pic.i_pts = frame->pts; - if (x4->a53_cc) { - void *sei_data; - size_t sei_size; + x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque; + x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock; + if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) + x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); + x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; + x4->next_reordered_opaque++; + x4->next_reordered_opaque %= x4->nb_reordered_opaque; - ret = ff_alloc_a53_sei(frame, 0, &sei_data, &sei_size); - if (ret < 0) { + switch (frame->pict_type) { + case AV_PICTURE_TYPE_I: + x4->pic.i_type = x4->forced_idr > 0 ? X264_TYPE_IDR + : X264_TYPE_KEYFRAME; + break; + case AV_PICTURE_TYPE_P: + x4->pic.i_type = X264_TYPE_P; + break; + case AV_PICTURE_TYPE_B: + x4->pic.i_type = X264_TYPE_B; + break; + default: + x4->pic.i_type = X264_TYPE_AUTO; + break; + } + reconfig_encoder(ctx, frame); + + if (x4->a53_cc) { + void *sei_data; + size_t sei_size; + + ret = ff_alloc_a53_sei(frame, 0, &sei_data, &sei_size); + if (ret < 0) { + av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); + } else if (sei_data) { + x4->pic.extra_sei.payloads = av_mallocz(sizeof(x4->pic.extra_sei.payloads[0])); + if (x4->pic.extra_sei.payloads == NULL) { av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - } else if (sei_data) { - x4->pic.extra_sei.payloads = av_mallocz(sizeof(x4->pic.extra_sei.payloads[0])); - if (x4->pic.extra_sei.payloads == NULL) { - av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - av_free(sei_data); - } else { - x4->pic.extra_sei.sei_free = av_free; - - x4->pic.extra_sei.payloads[0].payload_size = sei_size; - x4->pic.extra_sei.payloads[0].payload = sei_data; - x4->pic.extra_sei.num_payloads = 1; - x4->pic.extra_sei.payloads[0].payload_type = 4; - } + av_free(sei_data); + } else { + x4->pic.extra_sei.sei_free = av_free; + + x4->pic.extra_sei.payloads[0].payload_size = sei_size; + x4->pic.extra_sei.payloads[0].payload = sei_data; + x4->pic.extra_sei.num_payloads = 1; + x4->pic.extra_sei.payloads[0].payload_type = 4; } } + } - sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); - if (sd) { - if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); + if (sd) { + if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + } + } else { + if (frame->interlaced_frame == 0) { + int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; + int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; + int qp_range = 51 + 6 * (bit_depth - 8); + int nb_rois; + const AVRegionOfInterest *roi; + uint32_t roi_size; + float *qoffsets; + + roi = (const AVRegionOfInterest*)sd->data; + roi_size = roi->self_size; + if (!roi_size || sd->size % roi_size != 0) { + free_picture(ctx); + av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); + return AVERROR(EINVAL); } - } else { - if (frame->interlaced_frame == 0) { - int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; - int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; - int qp_range = 51 + 6 * (bit_depth - 8); - int nb_rois; - const AVRegionOfInterest *roi; - uint32_t roi_size; - float *qoffsets; - - roi = (const AVRegionOfInterest*)sd->data; - roi_size = roi->self_size; - if (!roi_size || sd->size % roi_size != 0) { - free_picture(ctx); - av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); - return AVERROR(EINVAL); - } - nb_rois = sd->size / roi_size; + nb_rois = sd->size / roi_size; + + qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); + if (!qoffsets) { + free_picture(ctx); + return AVERROR(ENOMEM); + } + // This list must be iterated in reverse because the first + // region in the list applies when regions overlap. + for (int i = nb_rois - 1; i >= 0; i--) { + int startx, endx, starty, endy; + float qoffset; - qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); - if (!qoffsets) { + roi = (const AVRegionOfInterest*)(sd->data + roi_size * i); + + starty = FFMIN(mby, roi->top / MB_SIZE); + endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); + startx = FFMIN(mbx, roi->left / MB_SIZE); + endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); + + if (roi->qoffset.den == 0) { + av_free(qoffsets); free_picture(ctx); - return AVERROR(ENOMEM); + av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); + return AVERROR(EINVAL); } - // This list must be iterated in reverse because the first - // region in the list applies when regions overlap. - for (int i = nb_rois - 1; i >= 0; i--) { - int startx, endx, starty, endy; - float qoffset; - - roi = (const AVRegionOfInterest*)(sd->data + roi_size * i); - - starty = FFMIN(mby, roi->top / MB_SIZE); - endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); - startx = FFMIN(mbx, roi->left / MB_SIZE); - endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); - - if (roi->qoffset.den == 0) { - av_free(qoffsets); - free_picture(ctx); - av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); - return AVERROR(EINVAL); - } - qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; - qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); + qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; + qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); - for (int y = starty; y < endy; y++) { - for (int x = startx; x < endx; x++) { - qoffsets[x + y*mbx] = qoffset; - } + for (int y = starty; y < endy; y++) { + for (int x = startx; x < endx; x++) { + qoffsets[x + y*mbx] = qoffset; } } + } - x4->pic.prop.quant_offsets = qoffsets; - x4->pic.prop.quant_offsets_free = av_free; - } else { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); - } + x4->pic.prop.quant_offsets = qoffsets; + x4->pic.prop.quant_offsets_free = av_free; + } else { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); } } } + } - if (x4->udu_sei) { - for (int j = 0; j < frame->nb_side_data; j++) { - AVFrameSideData *side_data = frame->side_data[j]; - void *tmp; - x264_sei_payload_t *sei_payload; - if (side_data->type != AV_FRAME_DATA_SEI_UNREGISTERED) - continue; - tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload)); - if (!tmp) { - free_picture(ctx); - return AVERROR(ENOMEM); - } - sei->payloads = tmp; - sei->sei_free = av_free; - sei_payload = &sei->payloads[sei->num_payloads]; - sei_payload->payload = av_memdup(side_data->data, side_data->size); - if (!sei_payload->payload) { - free_picture(ctx); - return AVERROR(ENOMEM); - } - sei_payload->payload_size = side_data->size; - sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED; - sei->num_payloads++; + if (x4->udu_sei) { + for (int j = 0; j < frame->nb_side_data; j++) { + AVFrameSideData *side_data = frame->side_data[j]; + void *tmp; + x264_sei_payload_t *sei_payload; + if (side_data->type != AV_FRAME_DATA_SEI_UNREGISTERED) + continue; + tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload)); + if (!tmp) { + free_picture(ctx); + return AVERROR(ENOMEM); + } + sei->payloads = tmp; + sei->sei_free = av_free; + sei_payload = &sei->payloads[sei->num_payloads]; + sei_payload->payload = av_memdup(side_data->data, side_data->size); + if (!sei_payload->payload) { + free_picture(ctx); + return AVERROR(ENOMEM); } + sei_payload->payload_size = side_data->size; + sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED; + sei->num_payloads++; } + } *ppic = &x4->pic; return 0; From patchwork Sun Nov 27 17:03:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39493 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959157pzb; Sun, 27 Nov 2022 09:06:13 -0800 (PST) X-Google-Smtp-Source: AA0mqf5cniSRAyRG2BKvQlyQEKtsbtGfa2ZkvjE/rnElHqTy2F/qJF3kzu9V5GV0ZPU85K6veSsQ X-Received: by 2002:a05:6402:3644:b0:45f:c7f2:297d with SMTP id em4-20020a056402364400b0045fc7f2297dmr45067920edb.266.1669568773730; Sun, 27 Nov 2022 09:06:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568773; cv=none; d=google.com; s=arc-20160816; b=eFveP2AH4dq9A42k9Y1TA9vncFR+4CCwxCTsmTZ0GPwZI/7DxWvBFyrct7Hn1Av3Wa /a50dz7oLvfE2uLb6U8LnC5XHtPt1J/KDiAbEzyPMwP/aJOALZ9DAeDbiMKtnShINtgW E8ut53+mNs0DMok2k0MMUBIYIYYlCPEYjXmQyoV27PJ+0gPCndX8/yVClE9oWqssUjWg 5Zz+wJFWbetu9hdKJ1Pz2QyFxMVVKc4e+J+uRjp8KYiRv+Q6+mEl6XRQqCHzakkhz8bK PQDfR4wMz4YcZwZuDIt9jxhza4cp8AJ73F1yoZf6WO8VtIeG2WvNa420jH4zVOlV29mx rfpA== 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=++xfF4WMcZqpnLPDgAN7H6B9hrowiYSO5NKm46d3Y7s=; b=m5CM+lrjv2Ru2h2E67hSPXfMOJZwzzU5igvIeXh/+NO7pJKis0qgE6h8m388NZCZAT uaqhqSuhBn8j24L424jTbom8L1cP+rQnjy63J9tq3m5pbxhyNairAgf5IU6+N0xBCNJU lGZJnBO4kY7aLYl68zy6kzBG1uhSNK2UgjY9JntqRHvZTAmn0oXIwoK2L2C8AP6LovKg /pcP+z6r2QzCUgJHqy+ItvnXYzHagpNXEhJchvYt6omyZY3Cvh/WfwAGgToeVzD2Bc2L 5yVeUKnYpCW1Mk6GG5TZM+oLpCNtsvx4K55TwPTYVBL9OjK+eCO0a6cgBw/2Ulx2vf3c XAgA== 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 xe14-20020a170907318e00b00781df60a2c8si8556906ejb.342.2022.11.27.09.06.13; Sun, 27 Nov 2022 09:06:13 -0800 (PST) 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 58EF868B0A7; Sun, 27 Nov 2022 19:06:00 +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 48B9068AE59 for ; Sun, 27 Nov 2022 19:05:53 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 059622400F5 for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id yb9agdCkUbi1 for ; Sun, 27 Nov 2022 18:05:52 +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 621AF2404F7 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id DEF7B3A1A3B for ; Sun, 27 Nov 2022 18:05:45 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:24 +0100 Message-Id: <20221127170351.11477-3-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/30] lavc/libx264: use a local variable for input frame in setup_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: wwK+Ne0XeWgz --- libavcodec/libx264.c | 50 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 36c36d0e09..8f03eecabf 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -337,7 +337,8 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, x264_picture_t **ppic) { X264Context *x4 = ctx->priv_data; - x264_sei_t *sei = &x4->pic.extra_sei; + x264_picture_t *pic = &x4->pic; + x264_sei_t *sei = &pic->extra_sei; unsigned int sei_data_size = 0; int64_t wallclock = 0; int bit_depth, ret; @@ -347,45 +348,44 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, if (!frame) return 0; - x264_picture_init( &x4->pic ); - x4->pic.img.i_csp = x4->params.i_csp; + x264_picture_init(pic); + pic->img.i_csp = x4->params.i_csp; #if X264_BUILD >= 153 bit_depth = x4->params.i_bitdepth; #else bit_depth = x264_bit_depth; #endif if (bit_depth > 8) - x4->pic.img.i_csp |= X264_CSP_HIGH_DEPTH; - x4->pic.img.i_plane = avfmt2_num_planes(ctx->pix_fmt); + pic->img.i_csp |= X264_CSP_HIGH_DEPTH; + pic->img.i_plane = avfmt2_num_planes(ctx->pix_fmt); - for (int i = 0; i < x4->pic.img.i_plane; i++) { - x4->pic.img.plane[i] = frame->data[i]; - x4->pic.img.i_stride[i] = frame->linesize[i]; + for (int i = 0; i < pic->img.i_plane; i++) { + pic->img.plane[i] = frame->data[i]; + pic->img.i_stride[i] = frame->linesize[i]; } - x4->pic.i_pts = frame->pts; + pic->i_pts = frame->pts; x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque; x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock; if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); - x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; + pic->opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; x4->next_reordered_opaque++; x4->next_reordered_opaque %= x4->nb_reordered_opaque; switch (frame->pict_type) { case AV_PICTURE_TYPE_I: - x4->pic.i_type = x4->forced_idr > 0 ? X264_TYPE_IDR - : X264_TYPE_KEYFRAME; + pic->i_type = x4->forced_idr > 0 ? X264_TYPE_IDR : X264_TYPE_KEYFRAME; break; case AV_PICTURE_TYPE_P: - x4->pic.i_type = X264_TYPE_P; + pic->i_type = X264_TYPE_P; break; case AV_PICTURE_TYPE_B: - x4->pic.i_type = X264_TYPE_B; + pic->i_type = X264_TYPE_B; break; default: - x4->pic.i_type = X264_TYPE_AUTO; + pic->i_type = X264_TYPE_AUTO; break; } reconfig_encoder(ctx, frame); @@ -398,17 +398,17 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, if (ret < 0) { av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); } else if (sei_data) { - x4->pic.extra_sei.payloads = av_mallocz(sizeof(x4->pic.extra_sei.payloads[0])); - if (x4->pic.extra_sei.payloads == NULL) { + pic->extra_sei.payloads = av_mallocz(sizeof(pic->extra_sei.payloads[0])); + if (pic->extra_sei.payloads == NULL) { av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); av_free(sei_data); } else { - x4->pic.extra_sei.sei_free = av_free; + pic->extra_sei.sei_free = av_free; - x4->pic.extra_sei.payloads[0].payload_size = sei_size; - x4->pic.extra_sei.payloads[0].payload = sei_data; - x4->pic.extra_sei.num_payloads = 1; - x4->pic.extra_sei.payloads[0].payload_type = 4; + pic->extra_sei.payloads[0].payload_size = sei_size; + pic->extra_sei.payloads[0].payload = sei_data; + pic->extra_sei.num_payloads = 1; + pic->extra_sei.payloads[0].payload_type = 4; } } } @@ -473,8 +473,8 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, } } - x4->pic.prop.quant_offsets = qoffsets; - x4->pic.prop.quant_offsets_free = av_free; + pic->prop.quant_offsets = qoffsets; + pic->prop.quant_offsets_free = av_free; } else { if (!x4->roi_warned) { x4->roi_warned = 1; @@ -510,7 +510,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, } } - *ppic = &x4->pic; + *ppic = pic; return 0; } From patchwork Sun Nov 27 17:03:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39513 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6961784pzb; Sun, 27 Nov 2022 09:10:18 -0800 (PST) X-Google-Smtp-Source: AA0mqf6+UR2EQQG8dtZFyJN+dAALRTTixRFd9bXR0y0xfVVp1mmHUlIfNDtITGqfMtYefeY5ydEt X-Received: by 2002:a17:907:3117:b0:7ae:6746:f26b with SMTP id wl23-20020a170907311700b007ae6746f26bmr40219586ejb.171.1669569018346; Sun, 27 Nov 2022 09:10:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669569018; cv=none; d=google.com; s=arc-20160816; b=lOLe7wDw62F+g/YmMBDxnBE7cJeXJhS28jonwnIlaBEXGLCRzDx+EdE7063qPzjA/1 Vj0SMprsoSPj/AoIRjt9bKOtdb0/m+N3yiDSQmO7L0kHSG1Qfm6ANLGUslpI2bk8HUtH 2wT/7p3JoCbhsmZXpIDrEigjROpCgKTxjOmbK66pAOm5Bxb/A/ounqV6Vz/HDFIrlYds nTv1wrlk2cQX0R1krMhm/zwAbDzgEprnmqud1ASlUG+7y30a6QOgtetX8EjDvuKAYIU4 Ctp2EhtQvdyqPNZingPnx1CNPgyKzimk1JrWtcQxoFlg8UIQ1KYVmsa69HisYOGbNDLm E/kg== 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=RlJs2a7AxPREqaVoI8YQj5oo5SiwVAxsm/vk1SxGWrA=; b=E7acaW3nscRFmf5FDg8XHBhTvDuUBV6M1/wYvksGEasBzKwoYuqtQzUO4q7cwg3oex IQxZVCs3TfN1ZCmtG8/dc1DmpikpmWz0kseFYIMdfMNsIRfiBEyNTM4CzQfzCLRamMEv gRaca90fXRoM8bNY4Ydv4VoQyA2wWgCQpY0KYbzvrV15TtQhk7P8fvc9YLBaygnijXSK GOKXdFWz+pahHcITUyfzwYDFdyldwejDQ6nv1WefklMY04ZcXktI+z2sY+sPRf4aIN3G Y/BqSqSDAlsYARaHaSLNJqs2WgJj8b+Va+pExc6+8d5I2kUYfjs3wvELKX141RvZ8Qh8 8FLA== 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 tc24-20020a1709078d1800b00781f51771b6si6971004ejc.900.2022.11.27.09.10.17; Sun, 27 Nov 2022 09:10:18 -0800 (PST) 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 7463068BCD5; Sun, 27 Nov 2022 19:06:28 +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 8AAC468BA98 for ; Sun, 27 Nov 2022 19:06:06 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E6818240499 for ; Sun, 27 Nov 2022 18:06:05 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id FDovhHfY061W for ; Sun, 27 Nov 2022 18:06:04 +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 16C792404F7 for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id EAEE83A1B73 for ; Sun, 27 Nov 2022 18:05:45 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:25 +0100 Message-Id: <20221127170351.11477-4-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/30] lavc/libx264: factor out setting up ROI 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: 1DIi0NL6vauj --- libavcodec/libx264.c | 143 +++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 8f03eecabf..470e9bc8c7 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -333,6 +333,79 @@ static enum AVPixelFormat csp_to_pixfmt(int csp) return AV_PIX_FMT_NONE; } +static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, + const AVFrame *frame, const uint8_t *data, size_t size) +{ + X264Context *x4 = ctx->priv_data; + + if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + } + } else { + if (frame->interlaced_frame == 0) { + int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; + int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; + int qp_range = 51 + 6 * (bit_depth - 8); + int nb_rois; + const AVRegionOfInterest *roi; + uint32_t roi_size; + float *qoffsets; + + roi = (const AVRegionOfInterest*)data; + roi_size = roi->self_size; + if (!roi_size || size % roi_size != 0) { + av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); + return AVERROR(EINVAL); + } + nb_rois = size / roi_size; + + qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); + if (!qoffsets) + return AVERROR(ENOMEM); + + // This list must be iterated in reverse because the first + // region in the list applies when regions overlap. + for (int i = nb_rois - 1; i >= 0; i--) { + int startx, endx, starty, endy; + float qoffset; + + roi = (const AVRegionOfInterest*)(data + roi_size * i); + + starty = FFMIN(mby, roi->top / MB_SIZE); + endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); + startx = FFMIN(mbx, roi->left / MB_SIZE); + endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); + + if (roi->qoffset.den == 0) { + av_free(qoffsets); + av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); + return AVERROR(EINVAL); + } + qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; + qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); + + for (int y = starty; y < endy; y++) { + for (int x = startx; x < endx; x++) { + qoffsets[x + y*mbx] = qoffset; + } + } + } + + pic->prop.quant_offsets = qoffsets; + pic->prop.quant_offsets_free = av_free; + } else { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); + } + } + } + + return 0; +} + static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, x264_picture_t **ppic) { @@ -415,72 +488,10 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); if (sd) { - if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); - } - } else { - if (frame->interlaced_frame == 0) { - int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; - int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; - int qp_range = 51 + 6 * (bit_depth - 8); - int nb_rois; - const AVRegionOfInterest *roi; - uint32_t roi_size; - float *qoffsets; - - roi = (const AVRegionOfInterest*)sd->data; - roi_size = roi->self_size; - if (!roi_size || sd->size % roi_size != 0) { - free_picture(ctx); - av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); - return AVERROR(EINVAL); - } - nb_rois = sd->size / roi_size; - - qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); - if (!qoffsets) { - free_picture(ctx); - return AVERROR(ENOMEM); - } - // This list must be iterated in reverse because the first - // region in the list applies when regions overlap. - for (int i = nb_rois - 1; i >= 0; i--) { - int startx, endx, starty, endy; - float qoffset; - - roi = (const AVRegionOfInterest*)(sd->data + roi_size * i); - - starty = FFMIN(mby, roi->top / MB_SIZE); - endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); - startx = FFMIN(mbx, roi->left / MB_SIZE); - endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); - - if (roi->qoffset.den == 0) { - av_free(qoffsets); - free_picture(ctx); - av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); - return AVERROR(EINVAL); - } - qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; - qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); - - for (int y = starty; y < endy; y++) { - for (int x = startx; x < endx; x++) { - qoffsets[x + y*mbx] = qoffset; - } - } - } - - pic->prop.quant_offsets = qoffsets; - pic->prop.quant_offsets_free = av_free; - } else { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); - } - } + ret = setup_roi(ctx, pic, bit_depth, frame, sd->data, sd->size); + if (ret < 0) { + free_picture(ctx); + return ret; } } From patchwork Sun Nov 27 17:03:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39512 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6961719pzb; Sun, 27 Nov 2022 09:10:10 -0800 (PST) X-Google-Smtp-Source: AA0mqf5MdEoE5jtTNRTkcuHoTDxq1MVd0pXozhfp3GwjiWanT4qT44jzDCqr+dGO9LTzaBuXimh1 X-Received: by 2002:a17:906:160b:b0:78d:dddb:3974 with SMTP id m11-20020a170906160b00b0078ddddb3974mr39885258ejd.411.1669569010023; Sun, 27 Nov 2022 09:10:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669569010; cv=none; d=google.com; s=arc-20160816; b=EpESVFYX1Erbc/x37fhkjBkFf/SutYPS8VPDLj2l7W9XTYicjJnur6NEwCw5a7/02E pSExWeYn3gEOnfAJxitVGTGNKjZddqOl7ro3iqWwFT0D4gs9ccDJG9ZWe/4g0n4EHzTC fyy9XQa8dVARvv2QQw1J/XOd/q6gtYljjrVJVuovY77um9P5AR4fV28+qFdiv4jIfevT 9Uif2ZXUg2chA0nTKpg/gaXAfVTID37sTssbh6YksILwzqZlF/auQe8d6hBdFPfeo9n9 GNKBf++fbukOa8qCw5Ffgj4FrvpeAPLI52jWdw0DWEBxCNDoHBhiu/9ckM5krM45+aVq IGpA== 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=xc2vdAE4oC1ihXqw+Z+dA1yj3ATlpWNxFhraiKvehbQ=; b=PaOBnIYjU162h/+C63/g+Ex7Lat2xwTw5aZSeaBnYZeGuWRq1ZujqQiE++dBlGPDSn FxfGHGi/K7S3KJaPiankT2wkap1Pf/lQ87490VuiiuK0p8olvwPILszluZ9QTh8DdQqD x6UefQKFaWKMeyKv7TsEOxxUrG7S4P8WJINv5fUPRR8NPikXZcYlcyo9HnWEe1NNnMd4 BAUAXdd0EGi2sLSaP6Ko1JQRxoEd38dfB3P+DCFV/1njXYAhNwwPq/KpNAApvjS652bx ULbWOcg0/gL70UzM/OBNYq6d+8oc2evTFW7BWk1FEi7kruS+DqUSjT7Zoih1woMQDchr BXuw== 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 js15-20020a17090797cf00b007adcc8fb7a0si8511799ejc.399.2022.11.27.09.10.09; Sun, 27 Nov 2022 09:10:10 -0800 (PST) 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 8AA3168BB0D; Sun, 27 Nov 2022 19:06:27 +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 B58CD68B9A3 for ; Sun, 27 Nov 2022 19:06:05 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 821DA2404F8 for ; Sun, 27 Nov 2022 18:06:05 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id yWBwep-TAxC1 for ; Sun, 27 Nov 2022 18:06:04 +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 1DB46240D25 for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 026C83A1E8B for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:26 +0100 Message-Id: <20221127170351.11477-5-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/30] lavc/libx264: reindent after previous commit 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: CePU+VyiCrC7 --- libavcodec/libx264.c | 104 +++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 470e9bc8c7..1e9ca73cdf 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -338,70 +338,70 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, { X264Context *x4 = ctx->priv_data; - if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + } + } else { + if (frame->interlaced_frame == 0) { + int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; + int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; + int qp_range = 51 + 6 * (bit_depth - 8); + int nb_rois; + const AVRegionOfInterest *roi; + uint32_t roi_size; + float *qoffsets; + + roi = (const AVRegionOfInterest*)data; + roi_size = roi->self_size; + if (!roi_size || size % roi_size != 0) { + av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); + return AVERROR(EINVAL); } - } else { - if (frame->interlaced_frame == 0) { - int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; - int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; - int qp_range = 51 + 6 * (bit_depth - 8); - int nb_rois; - const AVRegionOfInterest *roi; - uint32_t roi_size; - float *qoffsets; - - roi = (const AVRegionOfInterest*)data; - roi_size = roi->self_size; - if (!roi_size || size % roi_size != 0) { - av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); - return AVERROR(EINVAL); - } - nb_rois = size / roi_size; + nb_rois = size / roi_size; - qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); - if (!qoffsets) - return AVERROR(ENOMEM); + qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); + if (!qoffsets) + return AVERROR(ENOMEM); - // This list must be iterated in reverse because the first - // region in the list applies when regions overlap. - for (int i = nb_rois - 1; i >= 0; i--) { - int startx, endx, starty, endy; - float qoffset; + // This list must be iterated in reverse because the first + // region in the list applies when regions overlap. + for (int i = nb_rois - 1; i >= 0; i--) { + int startx, endx, starty, endy; + float qoffset; - roi = (const AVRegionOfInterest*)(data + roi_size * i); + roi = (const AVRegionOfInterest*)(data + roi_size * i); - starty = FFMIN(mby, roi->top / MB_SIZE); - endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); - startx = FFMIN(mbx, roi->left / MB_SIZE); - endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); + starty = FFMIN(mby, roi->top / MB_SIZE); + endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); + startx = FFMIN(mbx, roi->left / MB_SIZE); + endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); - if (roi->qoffset.den == 0) { - av_free(qoffsets); - av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); - return AVERROR(EINVAL); - } - qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; - qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); + if (roi->qoffset.den == 0) { + av_free(qoffsets); + av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); + return AVERROR(EINVAL); + } + qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; + qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); - for (int y = starty; y < endy; y++) { - for (int x = startx; x < endx; x++) { - qoffsets[x + y*mbx] = qoffset; - } + for (int y = starty; y < endy; y++) { + for (int x = startx; x < endx; x++) { + qoffsets[x + y*mbx] = qoffset; } } + } - pic->prop.quant_offsets = qoffsets; - pic->prop.quant_offsets_free = av_free; - } else { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); - } + pic->prop.quant_offsets = qoffsets; + pic->prop.quant_offsets_free = av_free; + } else { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); } } + } return 0; } From patchwork Sun Nov 27 17:03:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39495 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959407pzb; Sun, 27 Nov 2022 09:06:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf4abBtlDsPha1/8ccpzS5Y3pnR2QCR0VmAFKD84GxVtHhnmplIFYyumHpGAou1xfd7jgQVS X-Received: by 2002:a17:906:b34a:b0:755:6595:cd34 with SMTP id cd10-20020a170906b34a00b007556595cd34mr27756268ejb.70.1669568793258; Sun, 27 Nov 2022 09:06:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568793; cv=none; d=google.com; s=arc-20160816; b=CgNtVAHkRhm9fPTGrbXUrjD2HdOCDTHrWDNqXlIlSl9LZIhJM1WmmbRjqaz8gIoVGZ PRK1U46Alxj+P37SsYusVUELZRdLEqCR5XvK6KSXEPbWt51hm/3EG/o1GBAF1YYhDIxi tGky7ZrOpwTdDoBEmlGw64C4rEa6I4cacIcp/DUPgM/63zZOgh4MkrkqBAF21SSqym4k 7rcoNyCrv1jW+MRktFSBn4ShZdxfjJE8ZsseTl4oY+OcCebVyFeRs6dqmtqaHYmu4gCp yX1CJJslEz1KPkTYTGbsMvWzKu/EggtjU7eLHW8rfXxDsOcLloKkkJL8aVFNswHJeBki 3deg== 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=WHA30TsD/CEwhePBiBz3iTF4Wcw0ZclH40EHGMFtpxU=; b=SCkFJWd5Psfjo+nXkJtWoaixK3lRi32la4RESdsSKbMwLn24d2JoPHw6yw2eiQnekT TdjKwGTyb4eIQCjxj+fHR2WmfPEHpeKyLXMgNDlULfjty0ZnhYNrQ0g6PCOZCOVeVr8B O5AaK1GH36QUDdK4ZKdb/wwdpjxGjCgMOja7bRzj3OnUxdw0ww6ibVBJJsoEh34OOVFE 8qvr6XSDB0l7B1p6n/PDgPYiCt9PMdkEOyfx9RkSTtcN+y5RbgkawzWc8NCDpRQ2zqtk u8UzEOD/AtaAn6tYC2TNPgYamQhIIUpWGA03uRL+v9eeEGnq7bR/ul43+0rwfnrW6L9o vIEA== 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 qf18-20020a1709077f1200b0078e27f2ef4bsi5897527ejc.956.2022.11.27.09.06.32; Sun, 27 Nov 2022 09:06:33 -0800 (PST) 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 546A068B9E7; Sun, 27 Nov 2022 19:06:02 +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 BA63D68B5E3 for ; Sun, 27 Nov 2022 19:05:53 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 8034D240499 for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id uITYLdx6YtAW for ; Sun, 27 Nov 2022 18:05:53 +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 7FF592405EC for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0DAB33A1EEC for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:27 +0100 Message-Id: <20221127170351.11477-6-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/30] lavc/libx264: unify cleanup in setup_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: 53xwDduHw4oQ --- libavcodec/libx264.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 1e9ca73cdf..f776d65588 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -489,10 +489,8 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); if (sd) { ret = setup_roi(ctx, pic, bit_depth, frame, sd->data, sd->size); - if (ret < 0) { - free_picture(ctx); - return ret; - } + if (ret < 0) + goto fail; } if (x4->udu_sei) { @@ -504,16 +502,16 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, continue; tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload)); if (!tmp) { - free_picture(ctx); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } sei->payloads = tmp; sei->sei_free = av_free; sei_payload = &sei->payloads[sei->num_payloads]; sei_payload->payload = av_memdup(side_data->data, side_data->size); if (!sei_payload->payload) { - free_picture(ctx); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } sei_payload->payload_size = side_data->size; sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED; @@ -523,6 +521,11 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, *ppic = pic; return 0; + +fail: + free_picture(ctx); + *ppic = NULL; + return ret; } static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, From patchwork Sun Nov 27 17:03:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39497 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959638pzb; Sun, 27 Nov 2022 09:06:52 -0800 (PST) X-Google-Smtp-Source: AA0mqf6FmJjMYnbOZ0IQnZssIv/wCiaD3R3OYcxL6E/pM5Tmx1WWRVtEjxqryEIVyf5bAzDcvRD8 X-Received: by 2002:a17:906:6153:b0:7ad:b51d:39d0 with SMTP id p19-20020a170906615300b007adb51d39d0mr39125000ejl.571.1669568811778; Sun, 27 Nov 2022 09:06:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568811; cv=none; d=google.com; s=arc-20160816; b=fTAyQsw+BTAiAzFpAQNsWVGNICQ1fi0OkSq5XefZYCfAIiisfR02OOJ+mSb0VgqHhH jMvuARSJf9zOCl3vv2aRgCmTlvmvW1F8ykhlcXOlv/TOfuFsMrLbrvHnNYhES3OslUQF eCjn9muENCwjyuwOWN7XC1UjOahFp4ENrCaUDbNBUUNao8l8s5G+ZqaxgLMEqiHNCGPM YNLsuBrP53xcdqGlDFUctLbuEGUpJ/ZThoyiqVtDgYYcUOG23Q5JcPu4TQVedY83St2W DudUzfG6j1iYQmMAv39SEZrWgt0hilIBu1C4/CydiRbdlGlYDQ8b3cvPSRKVLS2zOzpE Oshw== 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=bRjPxfsBk/z2WvIKWHB5N4nDlkxzl4EuoReVSofrKLo=; b=zX4FlCsRJ4LZTQVbYIAPfhaaWoOINAtBFF2DR8H+GNA9YGmf+YWqQt5u3QgI+x/peA YPXAC2b7WpsQL9quClO9680So0KYuKPsIYIuQqE2qcQX9dyJtYE3ktLUMXzf3+nZQAwp tgMofdVrP/wG4HAhaDBMg5AbcpgGSa5BocabyFvqyzH68/T/mMmmSJG6WuK6adwQyQI2 actwatce65itLLLUmKQ3BcQFu6cv6Jy6FrAZyqkS+xxf1oxgATghFLe0PNlyGWo9si+p CQszPRvzGvf0CAiSwFyeV8qUAKWwRAkVacHS/Y+LVKT0G6dqAFgEcnKBAyGjen2wEUG+ h6DA== 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 k30-20020a508ade000000b00465f6a9fbb3si7642614edk.155.2022.11.27.09.06.51; Sun, 27 Nov 2022 09:06:51 -0800 (PST) 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 544A068BA05; Sun, 27 Nov 2022 19:06:04 +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 57E4268B6F0 for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id B55222406D0 for ; Sun, 27 Nov 2022 18:05:57 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id rNIWx9Mk0mN0 for ; Sun, 27 Nov 2022 18:05: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 C907D2406CF for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 187223A217F for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:28 +0100 Message-Id: <20221127170351.11477-7-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/30] lavc/libx264: do not ignore memory allocation errors 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: YGY0FAWe5QOy --- libavcodec/libx264.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index f776d65588..8b4b986f12 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -468,21 +468,22 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, size_t sei_size; ret = ff_alloc_a53_sei(frame, 0, &sei_data, &sei_size); - if (ret < 0) { - av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - } else if (sei_data) { + if (ret < 0) + goto fail; + + if (sei_data) { pic->extra_sei.payloads = av_mallocz(sizeof(pic->extra_sei.payloads[0])); if (pic->extra_sei.payloads == NULL) { - av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - av_free(sei_data); - } else { + ret = AVERROR(ENOMEM); + goto fail; + } + pic->extra_sei.sei_free = av_free; pic->extra_sei.payloads[0].payload_size = sei_size; pic->extra_sei.payloads[0].payload = sei_data; pic->extra_sei.num_payloads = 1; pic->extra_sei.payloads[0].payload_type = 4; - } } } From patchwork Sun Nov 27 17:03:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39509 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960737pzb; Sun, 27 Nov 2022 09:08:35 -0800 (PST) X-Google-Smtp-Source: AA0mqf4vrY0i8wtV5lW//9ZLt+QEMzVNN+VoHnzd3Fn+FEs5utZRy53P+4KGTBXIJ4cghzaV0TeU X-Received: by 2002:a17:906:a416:b0:7ad:923a:b849 with SMTP id l22-20020a170906a41600b007ad923ab849mr41639557ejz.677.1669568915572; Sun, 27 Nov 2022 09:08:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568915; cv=none; d=google.com; s=arc-20160816; b=nqA1GX9DTN1nS+oKkBDDRsL0++0NeFPERrnK0nNijP3H0hpFmZPpXI3U7JCRQaFCOW h+WzzVQBFEEMWQyqOlQd8fjk0bQY9F4fP1EKRBMKfSxIEW+9IpgWwNpIVSWmLE3qyiQ6 tuqhXX3zEN8eaCRvq1JHT08IP1+eYUbmrOmhnidSfLGwE/1K5Lt83OZwkPsgIf0STmu3 XKN9ZkDYnxDM/KAclfeABOJBPxLkjxNCIBC6NBYfyBPrBv0Q46szNZPuwnpngaIG5sDV 23n//E3jkbDnNrIrA4zz4oS9MpQTn4FUkXRSpPs/lcYUj0S91lc1Ikd1tZHcA7Z5ogkI o+pg== 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=lHys+eZBUczghU+NoogVNjf6GZcJZYCQqynLWaVbcl4=; b=VBJNnP1r6nC8vHFvbTsjEHTf8QI/U7/Xsu4Y8hXjC9el7iMN2rZ2zH0FLe3bbuqZiT qyi3y0skBDISKsTrw1oP9WZpg3OXijgCJrJht1FOyrG2iHyk0VpLdppnjUF26rTrs1hL h8FHCh92i6O6LiA/7PAqPohJSkHYzRYQY00Elr+yZD/NbBm5SPQN91fOUpAiYglSkndm BFvSrDzYcsaG68y9JjrFRKEgkdfZ/AJMWo97mYY7Lr0ghv/PToP6quVtK87gv1qrhkq3 xGcqdllLw4zNbtQLcrmzm93GQhJn1OZ/MdEy7kOb2MkEbzNCX0Gp+8lX/jh7AcX+dacP 25KA== 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 gn41-20020a1709070d2900b007bee7744ff0si2135787ejc.34.2022.11.27.09.08.35; Sun, 27 Nov 2022 09:08:35 -0800 (PST) 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 2B61A68B081; Sun, 27 Nov 2022 19:06:16 +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 8796D68B8C1 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 02A2B240591 for ; Sun, 27 Nov 2022 18:05:54 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ugOeWtEjTDTy for ; Sun, 27 Nov 2022 18:05:53 +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 7F5D42404F8 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 2328D3A21EA for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:29 +0100 Message-Id: <20221127170351.11477-8-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/30] lavc/libx264: reindent after previous commit 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: eKyMTjagkjQN --- libavcodec/libx264.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 8b4b986f12..f0f8990cf9 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -478,12 +478,12 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, goto fail; } - pic->extra_sei.sei_free = av_free; + pic->extra_sei.sei_free = av_free; - pic->extra_sei.payloads[0].payload_size = sei_size; - pic->extra_sei.payloads[0].payload = sei_data; - pic->extra_sei.num_payloads = 1; - pic->extra_sei.payloads[0].payload_type = 4; + pic->extra_sei.payloads[0].payload_size = sei_size; + pic->extra_sei.payloads[0].payload = sei_data; + pic->extra_sei.num_payloads = 1; + pic->extra_sei.payloads[0].payload_type = 4; } } From patchwork Sun Nov 27 17:03:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39496 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959525pzb; Sun, 27 Nov 2022 09:06:42 -0800 (PST) X-Google-Smtp-Source: AA0mqf4jgHf6//x754Ng2M62osvmrMGoZBbtyAlk5TG9svaaXhkr5XsmlUtQig0teXsQ8h/Ni+22 X-Received: by 2002:a17:907:8c81:b0:7bf:5cc5:67c5 with SMTP id td1-20020a1709078c8100b007bf5cc567c5mr2163533ejc.488.1669568802543; Sun, 27 Nov 2022 09:06:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568802; cv=none; d=google.com; s=arc-20160816; b=YONiHP9wcZ8kUBXpDq3Va6yv+pEyjJhPUoaKNHovCz06pvsrQxWbHdtYIWtOpjF3Cj 6jhPt4YqyyMZBG7/AxqPNu0ONWwa3p1iHHpFbF3yhCQqDTuYvDwIGeR3GXIwQPXoiYd2 /OfMlxAVZNE5l3RUmIClxRbGHB3xohiEqlxgMRviHUPlorN61jJ6SJyvso7PH5165I58 HUSzLHV4XclJ8OLGFkCsnruFBgN8zWD93R3wDM9N7byWRKMIpVSA4wKqVpcNN6mvM/hq hVIhb8xU+bfKe8xnbjbjMDFu7OYaLB5vT8gE/2grvjqXNsYA7na+9s+IDuJTY0pAe4/z c1uQ== 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=bu3XaKhGJmPGZcsZcxW/ghLT34Ez9ZA47R0AUo31hgs=; b=Hhqdm6rR5jjEJXxk8qNPybzMNmsPx/kjnt9PUDuYqPg341WvOhHFUfSiX3Hl3cpuTo wt/BugPZj7eb8ZLGUrOq+/Oq+gdxIkZBQbtqWlz4g1P0g6X30qS2d8SakDBETvr20dYb JvUv9xXzekhYsTXBu3Pf2qGk7ZnM2bt4STTUXR8TpcysVhfz1mJL9Y6qz+55dON2Agxg fUFebEvoaMAWeadKnjLqZytDqbaddLnXtQMxjbs1NHBdOY0KFVrZoOncMMS4h4RkuAaU WpTDPaySEbnbkQbL3LiihHI+3KOaw0VKihUYglNvOcYO/C/zgAdI9C1/p6/8p1/15Yg5 CCaA== 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 cy20-20020a0564021c9400b0046b0fccae83si1898564edb.175.2022.11.27.09.06.42; Sun, 27 Nov 2022 09:06:42 -0800 (PST) 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 5471E68B04D; Sun, 27 Nov 2022 19:06: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 1C57568B6F0 for ; Sun, 27 Nov 2022 19:05:54 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id D3A572405EC for ; Sun, 27 Nov 2022 18:05:53 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ZOJeRLCvLf3C for ; Sun, 27 Nov 2022 18:05:53 +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 7F884240591 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 2DF0F3A2257 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:30 +0100 Message-Id: <20221127170351.11477-9-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/30] lavc/libx264: reorder control flow in setup_roi() to reduce nesting depth 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: h7UzSTvM8pw7 --- libavcodec/libx264.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index f0f8990cf9..342d07a829 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -338,13 +338,6 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, { X264Context *x4 = ctx->priv_data; - if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); - } - } else { - if (frame->interlaced_frame == 0) { int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; int qp_range = 51 + 6 * (bit_depth - 8); @@ -353,6 +346,20 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, uint32_t roi_size; float *qoffsets; + if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); + } + return 0; + } else if (frame->interlaced_frame) { + if (!x4->roi_warned) { + x4->roi_warned = 1; + av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); + } + return 0; + } + roi = (const AVRegionOfInterest*)data; roi_size = roi->self_size; if (!roi_size || size % roi_size != 0) { @@ -395,13 +402,6 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, pic->prop.quant_offsets = qoffsets; pic->prop.quant_offsets_free = av_free; - } else { - if (!x4->roi_warned) { - x4->roi_warned = 1; - av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); - } - } - } return 0; } From patchwork Sun Nov 27 17:03:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39502 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960115pzb; Sun, 27 Nov 2022 09:07:36 -0800 (PST) X-Google-Smtp-Source: AA0mqf65L11Dt5SSVw1flMPcXfeyMmrk+paGubpimEpPTMqa+DNyqR0D0cE+lypwB9dkbk2kApqZ X-Received: by 2002:a17:906:4e4e:b0:7ae:e6ac:2427 with SMTP id g14-20020a1709064e4e00b007aee6ac2427mr40131380ejw.345.1669568856318; Sun, 27 Nov 2022 09:07:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568856; cv=none; d=google.com; s=arc-20160816; b=V8H9Bz71eJxvZgCceBHMjQQQYx6sc0TUUeTdqXnQMPKWyEXylHXSdNIH//wS77zbvH c2M2RB4RgCtBeny4UR1g6G6ziyYoUsMzW7GZFEe/7r9GVOfajhNjRavkLDBTXk76SLOG pL+8GyPW0xIPF3iBgwIu4qVAgEky2bdZ4Cm+FZ+PYgMaOXr9otodw5qf+noiP33hxdES yVLQxC/QMwQszVFpL8oE7f+Aug6KC1Ol4Krvr4BVnuo+pGIrKHkYCnphwON5Cm4wCMC6 yYY7zBVWRmQ1PcV9HCVIBgZTQYxvGcWQS8O+Yed1RBxVMuKx9ZwoPuTcRqzAvQf3t+Lf TusQ== 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=nXMR5gU3PTaF4LljkD0+3Bz2om6vdL3tcNB09/H1ocw=; b=yLkqXY68QND6Fbk2m3ZCbkPJwb/mPfrxKTvCfTfN0v/BJUfxxfyw12BZHkbGePR8ww 3O9yKI8c/n+YMcDkgE7PHew2xAXK4mOMVGaMwoprrrK7Iwl+t7KMMLrakGJ856s7hbcz qP1WKhTzeGLpnLERfuIGPrBMbux+GWZvIj0BK1Z/5tVyUDnKFe92F7MfOPqNh1CmYUsW picKwLs+lcWdSTF3uOyO/IDbefufXfpPtZD9JcpETYlhhUrxh7qPlYgPxBYd8eMG8Ne6 YI105RflbN4K+1cJz/IcEGU95HYmUJgWaPJjPfQrbFJw24iehzZACKnA3aBx7pvg2cay zf4g== 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 l16-20020a170906795000b0077bd074d50bsi9314920ejo.105.2022.11.27.09.07.35; Sun, 27 Nov 2022 09:07:36 -0800 (PST) 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 2687968BB98; Sun, 27 Nov 2022 19:06: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 B75CA68B82B for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 7A15C2405EC for ; Sun, 27 Nov 2022 18:05:59 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id bvxWS6R9JCxk for ; Sun, 27 Nov 2022 18:05: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 C7BAF2406CE for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 38E743A25BE for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:31 +0100 Message-Id: <20221127170351.11477-10-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/30] lavc/libx264: reindent after previous commit 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: EKrkOEVGgwLJ --- libavcodec/libx264.c | 94 ++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 342d07a829..1819809a48 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -338,13 +338,13 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, { X264Context *x4 = ctx->priv_data; - int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; - int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; - int qp_range = 51 + 6 * (bit_depth - 8); - int nb_rois; - const AVRegionOfInterest *roi; - uint32_t roi_size; - float *qoffsets; + int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; + int mby = (frame->height + MB_SIZE - 1) / MB_SIZE; + int qp_range = 51 + 6 * (bit_depth - 8); + int nb_rois; + const AVRegionOfInterest *roi; + uint32_t roi_size; + float *qoffsets; if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { if (!x4->roi_warned) { @@ -360,48 +360,48 @@ static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth, return 0; } - roi = (const AVRegionOfInterest*)data; - roi_size = roi->self_size; - if (!roi_size || size % roi_size != 0) { - av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); - return AVERROR(EINVAL); - } - nb_rois = size / roi_size; - - qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); - if (!qoffsets) - return AVERROR(ENOMEM); - - // This list must be iterated in reverse because the first - // region in the list applies when regions overlap. - for (int i = nb_rois - 1; i >= 0; i--) { - int startx, endx, starty, endy; - float qoffset; - - roi = (const AVRegionOfInterest*)(data + roi_size * i); - - starty = FFMIN(mby, roi->top / MB_SIZE); - endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); - startx = FFMIN(mbx, roi->left / MB_SIZE); - endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); - - if (roi->qoffset.den == 0) { - av_free(qoffsets); - av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); - return AVERROR(EINVAL); - } - qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; - qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); - - for (int y = starty; y < endy; y++) { - for (int x = startx; x < endx; x++) { - qoffsets[x + y*mbx] = qoffset; - } - } + roi = (const AVRegionOfInterest*)data; + roi_size = roi->self_size; + if (!roi_size || size % roi_size != 0) { + av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n"); + return AVERROR(EINVAL); + } + nb_rois = size / roi_size; + + qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets)); + if (!qoffsets) + return AVERROR(ENOMEM); + + // This list must be iterated in reverse because the first + // region in the list applies when regions overlap. + for (int i = nb_rois - 1; i >= 0; i--) { + int startx, endx, starty, endy; + float qoffset; + + roi = (const AVRegionOfInterest*)(data + roi_size * i); + + starty = FFMIN(mby, roi->top / MB_SIZE); + endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE); + startx = FFMIN(mbx, roi->left / MB_SIZE); + endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE); + + if (roi->qoffset.den == 0) { + av_free(qoffsets); + av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n"); + return AVERROR(EINVAL); + } + qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den; + qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range); + + for (int y = starty; y < endy; y++) { + for (int x = startx; x < endx; x++) { + qoffsets[x + y*mbx] = qoffset; } + } + } - pic->prop.quant_offsets = qoffsets; - pic->prop.quant_offsets_free = av_free; + pic->prop.quant_offsets = qoffsets; + pic->prop.quant_offsets_free = av_free; return 0; } From patchwork Sun Nov 27 17:03:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39536 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295610pxb; Sun, 27 Nov 2022 09:09:27 -0800 (PST) X-Google-Smtp-Source: AA0mqf4ghi2PjKTkpeLUweixSXdc++kS+sbWzGJ5TdWkDdvfPEkDBHXkBt5Z0xqbMbQCNln8UBZA X-Received: by 2002:aa7:db91:0:b0:458:bd09:1b20 with SMTP id u17-20020aa7db91000000b00458bd091b20mr44939835edt.176.1669568966881; Sun, 27 Nov 2022 09:09:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568966; cv=none; d=google.com; s=arc-20160816; b=pprdHt2M9FRIGnIf8Y/ffKVdAZz2WqehyZMQ9b2Pc/jKxOKr7eeDlemOjxduSUgIV7 COB5HIWslcrt2+G/iAn9EhJy+pW0bPp8/5I0t/H7urd7SUnV8JHZF8NETRHmDaQQv0u7 AFHQ8Q9oSlk/n9kN3cleUBYnRcQzZYZllW3DQtt1T4EPjCxJObZAFY/nq5IEjKCvW3n6 5TkbNxqbiRPpWGJFKjwjzlbkOZf7xTygc2IqYLuiQ67j18iyKyCCF6WAnENyw6SIcwVs APw0aNbnBlbWZUk3bzuUsVQFKULmSC07mGZIPLTfY7DhOzVx909l4scCaaatsgow29rm ERqQ== 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=FGvGeQeTs/CrkRxE0wjNsI8zNZNHWKm3De5HW1iHFsw=; b=W5m+cnCXsSbw4NpQh8TKpERa01JY79U1JwUqvWc8T3nEvtQ74gaJ875Trmf5eZH/kf xoXrcPHvLCVJzjsMLEKMYgh1K7pzKiSTydEiO8KRKFzh+ueWWa6L+l7rdQzOrhkPHiA5 +Z3uCsmaMkJUsCzAgPAbTtsKFd6ajywHaq+fHSRyTIWCPWC/3S+ZixQOyBbNciflc/NU JHEb+Era9D0QxvCjYhusxLS90TdziWr4qowEhDwawYGe1wJoKXXFuUV6rD/+1KJjqO4s 9uqOXmINHKgA8Ul1s/yUfwxXVqYi8WTbIKPeb93qvNXq1y1jm5CfyTNF6rW9ieLGIlDt vFvA== 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 z10-20020a50eb4a000000b004676b9092e0si7708841edp.408.2022.11.27.09.09.25; Sun, 27 Nov 2022 09:09:26 -0800 (PST) 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 8E8FC68BC64; Sun, 27 Nov 2022 19:06:22 +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 076C468BA30 for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 677D52406CB for ; Sun, 27 Nov 2022 18:05:57 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 3N0M-ctPy0fZ for ; Sun, 27 Nov 2022 18:05: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 CC3E82406D0 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 448DB3A25C2 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:32 +0100 Message-Id: <20221127170351.11477-11-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/30] lavc/libx264: use a local variable to shorten code 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: lvCv61xDOFnF Content-Length: 1643 --- libavcodec/libx264.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 1819809a48..b680e2098e 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -410,6 +410,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, x264_picture_t **ppic) { X264Context *x4 = ctx->priv_data; + X264Opaque *opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; x264_picture_t *pic = &x4->pic; x264_sei_t *sei = &pic->extra_sei; unsigned int sei_data_size = 0; @@ -439,11 +440,13 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, pic->i_pts = frame->pts; - x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque; - x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock; + opaque->reordered_opaque = frame->reordered_opaque; + opaque->wallclock = wallclock; if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) - x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); - pic->opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; + opaque->wallclock = av_gettime(); + + pic->opaque = opaque; + x4->next_reordered_opaque++; x4->next_reordered_opaque %= x4->nb_reordered_opaque; From patchwork Sun Nov 27 17:03:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39537 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295080pxb; Sun, 27 Nov 2022 09:08:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf59vSND9D1IQT1GyeUc+5iNHyKHUsBNfr0VxXKHvZI/AA5eqQxP6qPPS3sRIP4O+N+8TEWl X-Received: by 2002:a05:6402:e04:b0:469:e6ef:9164 with SMTP id h4-20020a0564020e0400b00469e6ef9164mr26350722edh.185.1669568921116; Sun, 27 Nov 2022 09:08:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568921; cv=none; d=google.com; s=arc-20160816; b=qVWShNaizHkousrzTW+cNd/4bvIyj5RTY9jJjxrT8eBzzlMP4e/PyhBtYgsrCNj3YV HAv6rAludMbUBcsu4gxVnCcPuiZW+IBzqoNg4/LEIjFGweXkRvMtDVq25Upp8qxtDZ5q mewp9h7Gb/0P59m6heyhagy23lsPUwnXw989OuP8plwHhHFxFkg96V18oP6E+/kOhR2v ijC/OOTploRIVNiTpub/czK9WyX3p2gRRihN/m/dm9gjQHEWoAkhGT53vxAG90DuWv4v criOofSew02sIxazrexi0VNK+tTHhTfKo1LOK4KdlDZTWMIiYbzPzutAIy83GRA8qgz9 MELA== 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=eAFdHO17ERdLv0Z+ZK8kN1xchq3+GODxLLbRCcKNGPQ=; b=sJvYMiA+Xev/e0lGQ4WsD0K1+jIXZoVtAlJ7P2B8NCzUmSz1iF+04p3Yji1rHZ/Rqd w5R0VtIcWK+RJdFrMPoQTZ+c8dyG8L6GXCODgFZvOZZ6/WS/jaQ2W/W1D+d9ejoLMpHU Ben+txKr+PRHCVyO3f7WdNYNuh7IG9WHsoxOaTzx3CjJVvfaMkpXbTqxUOJllCFlvFaB yc6eExXYcDczUFqX4Ah5t8Qp8vsv8bQFNBSr8pD7DDIAwmOfQRrBy9fNi5G44a2TFMHT 9FT7pcJVv9PlRpLqwFJz5EtBszcG+I4SvRVoPdivpQv2MQEuD9BmHd7XkPfv/iB04jrL Ww8Q== 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 sg40-20020a170907a42800b007825337afeesi7788956ejc.273.2022.11.27.09.08.40; Sun, 27 Nov 2022 09:08:41 -0800 (PST) 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 ECD4868BC14; Sun, 27 Nov 2022 19:06:16 +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 90F2C68BA08 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 024DF2406C7 for ; Sun, 27 Nov 2022 18:05:55 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 47_KJib1RLmI for ; Sun, 27 Nov 2022 18:05:54 +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 982232405F9 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 5056B3A25C3 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:33 +0100 Message-Id: <20221127170351.11477-12-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/30] lavc/libx264: print an error on invalid opaque pointer 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: GpRfQ+Zo38Mn Content-Length: 856 --- libavcodec/libx264.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index b680e2098e..e8ca3d896b 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -596,6 +596,8 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, wallclock = out_opaque->wallclock; } else { // Unexpected opaque pointer on picture output + av_log(ctx, AV_LOG_ERROR, "Unexpected opaque pointer; " + "this is a bug, please report it.\n"); ctx->reordered_opaque = 0; } From patchwork Sun Nov 27 17:03:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39501 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960011pzb; Sun, 27 Nov 2022 09:07:27 -0800 (PST) X-Google-Smtp-Source: AA0mqf7nuUsxONWUAPHcjzk18I35yvXozmbG56tR7WeQUov06Dk1Y7VvBW01zywOlWPZGO4Vsu09 X-Received: by 2002:a17:906:2693:b0:7aa:57c3:3f26 with SMTP id t19-20020a170906269300b007aa57c33f26mr24070981ejc.195.1669568847211; Sun, 27 Nov 2022 09:07:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568847; cv=none; d=google.com; s=arc-20160816; b=TCQCujXm1viwyMPUIZsY6Y6Je2lRSVX/PQVLJIqRLmpyZs1KBljtBnXFLKehtcW/fj TcAztdt2tYiumRgtfJ0UVmgRkybagw9MEPBIBk9mYERLN42MtGwFMJBCq2PLpFRFYnQE S8EShpX/4CXAy0c/yY5XodCs7PRp0rVOyHHxO4jM5tqYRdbJriN9YRrNf4aIup/lz6Z1 80aYxPlT51CUMuKHfX8gXnj7bci+gLtjkELYaXfGGyvGSaZZjbxHKccL4sTcdKyxBnB6 yQiL+65W7sGLroHoYoxVyKl81kyVF3qZjgzw4bFphsNeYjunLhv+iZZMNXErsLI8w43B 7fEQ== 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=MDWZxT4jh5jHHv9J+gJ9YEkdmqG6IfQkcU3woZwNMBE=; b=O6C+j57XglnsoiMk/k+4RqDyuczzpF3+Ccwsgudrdu2+FJFgD/D3jQr+KcqK1knhbz UWMUzod5e6cEh5GNTEBBqSZKOhBMpNvkYY9w3Po3L71TavYjaipeSdH1dPGo0XVIge8u ogaDi1ExIohauvpuxVNjDfyzF2cMNel+2SrCLk6TEJ1l1qQolqmxojuHJq/NzoqrrMnY kb6AvMRurKubUL8ppitQ6xVCG6dusvoy3e72wlXAQ/zX4lEF4c/ChBUeMZsWqBOpe9rD U8evUxlwgN0R2AC6BrSD0FsiuKdgFC2EM5B3zlMGmz/pi18RHDYJXeak35JVHnQdAHJt nCpw== 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 ht17-20020a170907609100b007a9e6f0f82fsi7765202ejc.516.2022.11.27.09.07.26; Sun, 27 Nov 2022 09:07:27 -0800 (PST) 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 3677368B9D0; Sun, 27 Nov 2022 19:06: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 9A1C968B79A for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 5F9382400F5 for ; Sun, 27 Nov 2022 18:05:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 8z2lGjz8GtRq for ; Sun, 27 Nov 2022 18:05: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 D5C4C2406E1 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 5C06A3A25C8 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:34 +0100 Message-Id: <20221127170351.11477-13-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/30] lavc/libx264: zero reordered opaque on alloc 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: 3o6dvFGZJnyz This is safer. --- libavcodec/libx264.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index e8ca3d896b..a1b044d4e9 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1105,8 +1105,8 @@ static av_cold int X264_init(AVCodecContext *avctx) // Overestimate the reordered opaque buffer size, in case a runtime // reconfigure would increase the delay (which it shouldn't). x4->nb_reordered_opaque = x264_encoder_maximum_delayed_frames(x4->enc) + 17; - x4->reordered_opaque = av_malloc_array(x4->nb_reordered_opaque, - sizeof(*x4->reordered_opaque)); + x4->reordered_opaque = av_calloc(x4->nb_reordered_opaque, + sizeof(*x4->reordered_opaque)); if (!x4->reordered_opaque) return AVERROR(ENOMEM); From patchwork Sun Nov 27 17:03:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39508 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960651pzb; Sun, 27 Nov 2022 09:08:27 -0800 (PST) X-Google-Smtp-Source: AA0mqf6ahzjo4B3CafX/tUmJrdIXRZwLG4tFZL7+N/Jw21F/eHe2M04IywhEJGJXit+cOCX3dWGD X-Received: by 2002:a17:906:2b58:b0:7bf:7e50:111f with SMTP id b24-20020a1709062b5800b007bf7e50111fmr1910339ejg.319.1669568907244; Sun, 27 Nov 2022 09:08:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568907; cv=none; d=google.com; s=arc-20160816; b=DYXExbOvrkgZ31A5NFgX+BsdxqG9dZi5idA5n7FylHBnnVWDGP//MnDgcISEINtu1+ DZyNFIqT3ZOd7PpRZ0cYkkmu6xSpEotUV/5VLHyxuocUMmmlqL3ewG11xUDF0Aysx1G0 2nFU4NzZ+0xAkQlfX8R1pCoUBQazBWBbNumovpOoJ3IVqG4zP+Hko5kULrtk9YRej8Vh yoAUuUJ6DyD2XNJ8oYYr9fVvmJzIpb4gEK7uSbAyFOMcPstAGBIAIdo1lwRqqphwYNog ZQPoZZX+Yei1Nbxd6Ny3niFkHVyXXFL52OCdeuRWYORu+G8/ET+kUMyuP7uefVaGK1MM 3pNw== 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=8Wl+CZuAaheEIILNnmdxk5VmoLaIkrW1Z5TTWktq2go=; b=N0lYQv0fKwiCaAeJy1eQqlx1UXLAgt6EVS6mbXUcPivv1Rnc3pxtKS0XBld16GMxEK zeEK1itNd+fYhs4uaJqsPcRUKPqCDoOSF4BtGY1nA6vWf0BEhE4ZuECpSP1Z4z3xAexc 5hcP5z1dM+AoQ1q9mo95NVPqZqQvZrnmHqnKhuUiOMjLsb9dRMgcehx4NsGf0xcbjekS 8zDv9/5s2nDLix9V93PMndDtMmrz91dm6PdDafLmer4u13rm3LoNkMdaBGjyDzTbb2gm XZMbFrKQqaEV+hk9t3Yyo+WMPe6TfoHC6LtR8hwsy/AwCAjq2RyUFFvZn0Yk79vE0ga7 Q9aA== 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 vj23-20020a170907131700b0078db1258ae9si5706698ejb.555.2022.11.27.09.08.26; Sun, 27 Nov 2022 09:08:27 -0800 (PST) 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 3CFDA68BBA5; Sun, 27 Nov 2022 19:06:15 +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 8892568B9D0 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 57C562404F8 for ; Sun, 27 Nov 2022 18:05:54 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id NpXSqALWPUJJ for ; Sun, 27 Nov 2022 18:05:53 +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 9E0562406C7 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 67BAD3A25CF for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:35 +0100 Message-Id: <20221127170351.11477-14-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/30] lavc/libx264: do not leave an invalid array size on alloc error 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: iCUhLweLlw17 --- libavcodec/libx264.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index a1b044d4e9..2bbd9044b6 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1107,8 +1107,10 @@ static av_cold int X264_init(AVCodecContext *avctx) x4->nb_reordered_opaque = x264_encoder_maximum_delayed_frames(x4->enc) + 17; x4->reordered_opaque = av_calloc(x4->nb_reordered_opaque, sizeof(*x4->reordered_opaque)); - if (!x4->reordered_opaque) + if (!x4->reordered_opaque) { + x4->nb_reordered_opaque = 0; return AVERROR(ENOMEM); + } return 0; } From patchwork Sun Nov 27 17:03:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39505 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960391pzb; Sun, 27 Nov 2022 09:08:02 -0800 (PST) X-Google-Smtp-Source: AA0mqf59k2ej7ewPxNMux6Uf+twb5KnCOjg82f+fNLYJF7Rr2OdqsojEUDnS0tenedp1rm4QCnD0 X-Received: by 2002:a05:6402:5305:b0:467:69e3:c25b with SMTP id eo5-20020a056402530500b0046769e3c25bmr43800612edb.3.1669568882228; Sun, 27 Nov 2022 09:08:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568882; cv=none; d=google.com; s=arc-20160816; b=cVAFI75FZnuKl93KiwARbXvy9SkoqldaN0OaqVdrwbdheUUECwUS9Mz+Satzf9/xj5 5Q7PTfkM3w5McbEWSJJBrXrsOQPhqgjfgByrNGg1hwBcDqAl93pURl3Z5Gq6JqjVW8BX LfEoLEyremQ+LP1DUTOA8YzGSH25roGvw9ajtOiH28dQlRABh1JS1hJKzbFgY0O/w1Tl nnRMAKR4QRQOYCZvuSwn+wKpdsgCYe3CP2skphI46+PAf/OA9nJKGmV5IHjpE0fUi9j3 0O11WwBfrQVZuUCOyqp8DGN/QJA5YyAdjGZKgKM41zwbx5GgfsL019KSUlik1VaeGQR1 zJfA== 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=q/wG3FkxZ9huquzE+k8mfISv7OAr8QViFVM8j7cEOew=; b=A2/Zxqf9EujxlMnHM2KtSezUZu+POsKR9ZxSW+L/NMpFyvIGEVXisLy2Whv3bz29/H pj1OQYd2SZpb92Pl/NiPEX4PSIJzudPXM1duY+TEpeFrl3D6euzDND0GnVcgiuGw/xWo GAylcX78So5AcbYa1YrUcLbghEI0B164cVFk0IXI6hYoNyPikASHkxkX+Kjp44aso9A5 y3usvKhNgKIg5UD66lg6d73qcfPM+KXKmtOBoKEFUCF1POdnuMvCJHoRc4KIgCKR+wB3 gNW12r03jUoifknCzZGD00o85Y0YVjSGMMjqBVqTre3NTZNAeQmT2jBeDG986FL+pWsR 6P5g== 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 hc43-20020a17090716ab00b007ae17fd2f2dsi9285342ejc.996.2022.11.27.09.08.01; Sun, 27 Nov 2022 09:08:02 -0800 (PST) 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 31D9968BB22; Sun, 27 Nov 2022 19:06:12 +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 84B1F68B720 for ; Sun, 27 Nov 2022 19:06:00 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id ED3DD240499 for ; Sun, 27 Nov 2022 18:05:59 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 7mRJSo62cKjY for ; Sun, 27 Nov 2022 18:05: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 D84DF240D03 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 7385B3A25D4 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:36 +0100 Message-Id: <20221127170351.11477-15-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/30] lavc/libx265: restructure handling reordered_opaque 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: g7qJ/uFdDJ98 Current code stores a pointer to allocated data in libx265 and frees it when the encoded packet is retrieved. This will leak if the packet is never retrieved, e.g. if the encoder is closed without being flushed. Restructure the code such that only indices to an array stored in our private data are given to libx265. This ensures no allocated memory can be lost. --- libavcodec/libx265.c | 85 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 12 deletions(-) diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index e87dea604d..25de3c669b 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -27,6 +27,7 @@ #include #include +#include "libavutil/avassert.h" #include "libavutil/internal.h" #include "libavutil/common.h" #include "libavutil/opt.h" @@ -39,6 +40,12 @@ #include "atsc_a53.h" #include "sei.h" +typedef struct ReorderedData { + int64_t reordered_opaque; + + int in_use; +} ReorderedData; + typedef struct libx265Context { const AVClass *class; @@ -59,6 +66,9 @@ typedef struct libx265Context { int udu_sei; int a53_cc; + ReorderedData *rd; + int nb_rd; + /** * If the encoder does not support ROI then warn the first time we * encounter a frame with ROI side data. @@ -81,6 +91,40 @@ static int is_keyframe(NalUnitType naltype) } } +static int rd_get(libx265Context *ctx) +{ + const int add = 16; + + ReorderedData *tmp; + int idx; + + for (int i = 0; i < ctx->nb_rd; i++) + if (!ctx->rd[i].in_use) { + ctx->rd[i].in_use = 1; + return i; + } + + tmp = av_realloc_array(ctx->rd, ctx->nb_rd + add, sizeof(*ctx->rd)); + if (!tmp) + return AVERROR(ENOMEM); + memset(tmp + ctx->nb_rd, 0, sizeof(*tmp) * add); + + ctx->rd = tmp; + ctx->nb_rd += add; + + idx = ctx->nb_rd - add; + ctx->rd[idx].in_use = 1; + + return idx; +} + +static void rd_release(libx265Context *ctx, int idx) +{ + av_assert0(idx >= 0 && idx < ctx->nb_rd); + + memset(&ctx->rd[idx], 0, sizeof(ctx->rd[idx])); +} + static av_cold int libx265_encode_close(AVCodecContext *avctx) { libx265Context *ctx = avctx->priv_data; @@ -88,6 +132,8 @@ static av_cold int libx265_encode_close(AVCodecContext *avctx) ctx->api->param_free(ctx->params); av_freep(&ctx->sei_data); + av_freep(&ctx->rd); + if (ctx->encoder) ctx->api->encoder_close(ctx->encoder); @@ -499,12 +545,18 @@ static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *fr return 0; } -static void free_picture(x265_picture *pic) +static void free_picture(libx265Context *ctx, x265_picture *pic) { x265_sei *sei = &pic->userSEI; for (int i = 0; i < sei->numPayloads; i++) av_free(sei->payloads[i].payload); - av_freep(&pic->userData); + + if (pic->userData) { + int idx = (int)(intptr_t)pic->userData - 1; + rd_release(ctx, idx); + pic->userData = NULL; + } + av_freep(&pic->quantOffsets); sei->numPayloads = 0; } @@ -549,13 +601,18 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, return ret; if (pic->reordered_opaque) { - x265pic.userData = av_malloc(sizeof(pic->reordered_opaque)); - if (!x265pic.userData) { - free_picture(&x265pic); - return AVERROR(ENOMEM); + ReorderedData *rd; + int rd_idx = rd_get(ctx); + + if (rd_idx < 0) { + free_picture(ctx, &x265pic); + return rd_idx; } - memcpy(x265pic.userData, &pic->reordered_opaque, sizeof(pic->reordered_opaque)); + x265pic.userData = (void*)(intptr_t)(rd_idx + 1); + + rd = &ctx->rd[rd_idx]; + rd->reordered_opaque = pic->reordered_opaque; } if (ctx->a53_cc) { @@ -574,7 +631,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, (sei->numPayloads + 1) * sizeof(*sei_payload)); if (!tmp) { av_free(sei_data); - free_picture(&x265pic); + free_picture(ctx, &x265pic); return AVERROR(ENOMEM); } ctx->sei_data = tmp; @@ -600,7 +657,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, &ctx->sei_data_size, (sei->numPayloads + 1) * sizeof(*sei_payload)); if (!tmp) { - free_picture(&x265pic); + free_picture(ctx, &x265pic); return AVERROR(ENOMEM); } ctx->sei_data = tmp; @@ -608,7 +665,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, sei_payload = &sei->payloads[sei->numPayloads]; sei_payload->payload = av_memdup(side_data->data, side_data->size); if (!sei_payload->payload) { - free_picture(&x265pic); + free_picture(ctx, &x265pic); return AVERROR(ENOMEM); } sei_payload->payloadSize = side_data->size; @@ -680,8 +737,12 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, ff_side_data_set_encoder_stats(pkt, x265pic_out.frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type); if (x265pic_out.userData) { - memcpy(&avctx->reordered_opaque, x265pic_out.userData, sizeof(avctx->reordered_opaque)); - av_freep(&x265pic_out.userData); + int idx = (int)(intptr_t)x265pic_out.userData - 1; + ReorderedData *rd = &ctx->rd[idx]; + + avctx->reordered_opaque = rd->reordered_opaque; + + rd_release(ctx, idx); } else avctx->reordered_opaque = 0; From patchwork Sun Nov 27 17:03:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39570 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295360pxb; Sun, 27 Nov 2022 09:09:04 -0800 (PST) X-Google-Smtp-Source: AA0mqf6KyyQCSAmV7Y4hf9GIfmdBsQ6TXZXGLgb2bjVVhFXtwRDx/5GpRw3vlZvahZQqVkeKoWkK X-Received: by 2002:a17:907:8d03:b0:7ae:1d34:4da5 with SMTP id tc3-20020a1709078d0300b007ae1d344da5mr36471340ejc.340.1669568944663; Sun, 27 Nov 2022 09:09:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568944; cv=none; d=google.com; s=arc-20160816; b=LQMwCYZMRTjz4FwnebJsPu7r8pBVvdJuJHv4b277DUVP/tZH6z/B8JERMrNNy5bikX cPCK0ijMF7Tzx7ipwbu2ADJN0YQjZuK0pVHXywqpqd4PT1II49dYvv4Jqnn1WZgP5LHq /Vkat0XcHa8eUpU4EKItYwb+r1D3u3AD/0krIlZ7iCd79n5C9X+1UXDc/ml1+yqc1xdB c60s1B7WzqXGcQ4tyB9JH++8ee6B3FbKTle0Foz88wvHn1wJTwU2L7fqjC2KCyky/hc/ 1ISp1J9zxwyXok+dTjzd45ulI3PqUemmVnZB5ZfNTcIu95eyd2mmuz8SJYfyKtAFQ6bC 6wPw== 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=YqS7WSb190pi/6T5pKk61Z7GqWc/gysTBsGfxn6OXA8=; b=c7fzm1O8nYf0FIpb2VIZfk8AdYtwbP5y+QCtHaMOa09yS6kyo2p73uB4sMqzK/PAdk ThwwDKCifOM5eDi1wpwiVcIXo9uK0twOjzUKWV1M8IbgUmVXz8Rn1LPxelb+Z4TDs4Im 1qbj5hfdCE8dDGH5H/6vuTycN8a49+FrQOYUBvs/MAN8DW/mTalccwAprJSteZtS1xnc n8tUZgwX1hrEFDWNUHS5li+uMw36qKx6+Nu4nqcdzQJ29z8ai1qry2LLVI1+SAwaG5XJ oO3SGEfr1Eepgrzv7LUSKxeRPk6GRGIRMuXfnucq/fayMY2JEEBQI0w2Bb8xN1cdGH/4 hZZw== 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 t24-20020a170906065800b0078d4962a32asi6268814ejb.961.2022.11.27.09.08.51; Sun, 27 Nov 2022 09:09:04 -0800 (PST) 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 838C868B964; Sun, 27 Nov 2022 19:06:18 +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 96A5F68BA23 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4AF572405F9 for ; Sun, 27 Nov 2022 18:05:55 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id toR7fscmbl5n for ; Sun, 27 Nov 2022 18:05:54 +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 A14802406CA for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 7F39D3A25E6 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:37 +0100 Message-Id: <20221127170351.11477-16-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/30] lavc: add a codec flag for propagating opaque from frames to packets 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: CGb2AqYy8mjP Content-Length: 9854 This is intended to be a more convenient replacement for reordered_opaque. Add support for it in the two encoders that offer AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE: libx264 and libx265. Other encoders will be supported in future commits. --- doc/APIchanges | 3 +++ libavcodec/avcodec.h | 8 ++++++++ libavcodec/encode.c | 7 +++++++ libavcodec/libx264.c | 31 ++++++++++++++++++++++++++++ libavcodec/libx265.c | 41 ++++++++++++++++++++++++++++---------- libavcodec/options_table.h | 1 + libavcodec/version.h | 2 +- 7 files changed, 81 insertions(+), 12 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index ab7ce15fae..a3c9819e32 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-12-xx - xxxxxxxxxx - lavc 59.55.100 - avcodec.h + Add AV_CODEC_FLAG_COPY_OPAQUE. + 2022-11-xx - xxxxxxxxxx - lavu 57.43.100 - tx.h Add AV_TX_FLOAT_DCT, AV_TX_DOUBLE_DCT and AV_TX_INT32_DCT. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3edd8e2636..79558786ee 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -241,6 +241,14 @@ typedef struct RcOverride{ * AV_CODEC_CAP_ENCODER_RECON_FRAME capability. */ #define AV_CODEC_FLAG_RECON_FRAME (1 << 6) +/** + * Request the encoder to propagate each frame's AVFrame.opaque and + * AVFrame.opaque_ref values to its corresponding output AVPacket. + * + * May only be set on encoders that have the + * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. + */ +#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) /** * Use internal 2pass ratecontrol in first pass mode. */ diff --git a/libavcodec/encode.c b/libavcodec/encode.c index fbe2c97cd6..7e2d54ae9b 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -634,6 +634,13 @@ int ff_encode_preinit(AVCodecContext *avctx) return AVERROR(EINVAL); } + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE && + !(avctx->codec->capabilities & AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE)) { + av_log(avctx, AV_LOG_ERROR, "The copy_opaque flag is set, but the " + "encoder does not support it.\n"); + return AVERROR(EINVAL); + } + switch (avctx->codec_type) { case AVMEDIA_TYPE_VIDEO: ret = encode_preinit_video(avctx); break; case AVMEDIA_TYPE_AUDIO: ret = encode_preinit_audio(avctx); break; diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 2bbd9044b6..8944a7df36 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -21,6 +21,7 @@ #include "config_components.h" +#include "libavutil/buffer.h" #include "libavutil/eval.h" #include "libavutil/internal.h" #include "libavutil/opt.h" @@ -51,6 +52,9 @@ typedef struct X264Opaque { int64_t reordered_opaque; int64_t wallclock; + + void *frame_opaque; + AVBufferRef *frame_opaque_ref; } X264Opaque; typedef struct X264Context { @@ -133,6 +137,11 @@ static void X264_log(void *p, int level, const char *fmt, va_list args) av_vlog(p, level_map[level], fmt, args); } +static void opaque_uninit(X264Opaque *o) +{ + av_buffer_unref(&o->frame_opaque_ref); + memset(o, 0, sizeof(*o)); +} static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, const x264_nal_t *nals, int nnal) @@ -440,6 +449,17 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, pic->i_pts = frame->pts; + opaque_uninit(opaque); + + opaque->frame_opaque = frame->opaque; + if (frame->opaque_ref && ctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + opaque->frame_opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!opaque->frame_opaque_ref) { + ret = AVERROR(ENOMEM); + goto fail; + } + } + opaque->reordered_opaque = frame->reordered_opaque; opaque->wallclock = wallclock; if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) @@ -594,6 +614,14 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) { ctx->reordered_opaque = out_opaque->reordered_opaque; wallclock = out_opaque->wallclock; + + if (ctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = out_opaque->frame_opaque; + pkt->opaque_ref = out_opaque->frame_opaque_ref; + out_opaque->frame_opaque_ref = NULL; + } + + opaque_uninit(out_opaque); } else { // Unexpected opaque pointer on picture output av_log(ctx, AV_LOG_ERROR, "Unexpected opaque pointer; " @@ -634,6 +662,9 @@ static av_cold int X264_close(AVCodecContext *avctx) X264Context *x4 = avctx->priv_data; av_freep(&x4->sei); + + for (int i = 0; i < x4->nb_reordered_opaque; i++) + opaque_uninit(&x4->reordered_opaque[i]); av_freep(&x4->reordered_opaque); #if X264_BUILD >= 161 diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 25de3c669b..7ba547a7e7 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -28,6 +28,7 @@ #include #include "libavutil/avassert.h" +#include "libavutil/buffer.h" #include "libavutil/internal.h" #include "libavutil/common.h" #include "libavutil/opt.h" @@ -43,6 +44,9 @@ typedef struct ReorderedData { int64_t reordered_opaque; + void *frame_opaque; + AVBufferRef *frame_opaque_ref; + int in_use; } ReorderedData; @@ -121,7 +125,7 @@ static int rd_get(libx265Context *ctx) static void rd_release(libx265Context *ctx, int idx) { av_assert0(idx >= 0 && idx < ctx->nb_rd); - + av_buffer_unref(&ctx->rd[idx].frame_opaque_ref); memset(&ctx->rd[idx], 0, sizeof(ctx->rd[idx])); } @@ -132,6 +136,8 @@ static av_cold int libx265_encode_close(AVCodecContext *avctx) ctx->api->param_free(ctx->params); av_freep(&ctx->sei_data); + for (int i = 0; i < ctx->nb_rd; i++) + rd_release(ctx, i); av_freep(&ctx->rd); if (ctx->encoder) @@ -582,6 +588,9 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, sei->numPayloads = 0; if (pic) { + ReorderedData *rd; + int rd_idx; + for (i = 0; i < 3; i++) { x265pic.planes[i] = pic->data[i]; x265pic.stride[i] = pic->linesize[i]; @@ -600,21 +609,25 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, if (ret < 0) return ret; - if (pic->reordered_opaque) { - ReorderedData *rd; - int rd_idx = rd_get(ctx); + rd_idx = rd_get(ctx); + if (rd_idx < 0) { + free_picture(ctx, &x265pic); + return rd_idx; + } + rd = &ctx->rd[rd_idx]; - if (rd_idx < 0) { + rd->reordered_opaque = pic->reordered_opaque; + rd->frame_opaque = pic->opaque; + if (pic->opaque_ref && avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + rd->frame_opaque_ref = av_buffer_ref(pic->opaque_ref); + if (!rd->frame_opaque_ref) { free_picture(ctx, &x265pic); - return rd_idx; + return AVERROR(ENOMEM); } - - x265pic.userData = (void*)(intptr_t)(rd_idx + 1); - - rd = &ctx->rd[rd_idx]; - rd->reordered_opaque = pic->reordered_opaque; } + x265pic.userData = (void*)(intptr_t)(rd_idx + 1); + if (ctx->a53_cc) { void *sei_data; size_t sei_size; @@ -742,6 +755,12 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, avctx->reordered_opaque = rd->reordered_opaque; + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = rd->frame_opaque; + pkt->opaque_ref = rd->frame_opaque_ref; + rd->frame_opaque_ref = NULL; + } + rd_release(ctx, idx); } else avctx->reordered_opaque = 0; diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index cd02f5096f..ad41dc7bed 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -58,6 +58,7 @@ static const AVOption avcodec_options[] = { {"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"}, {"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, {"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"}, +{"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"}, {"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, diff --git a/libavcodec/version.h b/libavcodec/version.h index d149bc6c46..9f42f09f4e 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 54 +#define LIBAVCODEC_VERSION_MINOR 55 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ From patchwork Sun Nov 27 17:03:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39510 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6961493pzb; Sun, 27 Nov 2022 09:09:51 -0800 (PST) X-Google-Smtp-Source: AA0mqf5gtlkr9bCVwFwUR1bMb/KDaehZxI4VOs/r7gVHMjQb6tZc5h6x+kW/99o9XtFMhztipoV0 X-Received: by 2002:a05:6402:5483:b0:468:d5a9:cb4b with SMTP id fg3-20020a056402548300b00468d5a9cb4bmr30292269edb.409.1669568991486; Sun, 27 Nov 2022 09:09:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568991; cv=none; d=google.com; s=arc-20160816; b=O7D6pT7hqgS2TqpI37T0JLNr0OXHzzwExEN9VthMeSV3/uotXkMOu46sriE46SwvUe KyQcR4iYpTZCvq48Pbl901s/uJEOJI4c8oCVmm3BcSM8Rogyl18kmWiq0dxZyK+kl+Wo JkHpdlhR5S5rcJjuvuJPc4vlmBbnrjdCZBJ/1ddOgbpTln3aEJ9iuT2apH3ly+m1yT1M RyzE+sp84YNYilnGMDNn8kLcHWKrGDzLYOjyzDyAWJ6BiAnBNvAo9Z129DNHHtcDu0yY 4plLZaw0uNTvI+Vb8/3P+JLfpQ51Hyj2Zf21tC5TNM5F2p6QV7jYQBon4p3R2l/iOSFm tqBg== 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=krYZFae6YQ34VYJCD2bzaqX7X6T9HzUECbRB4UQeVsc=; b=ztzVsQygWSAZLIoDM4TnP/GvgTd+Pw8V/P4ISxQj6f+Q8b1Q4yMJY8yyudeOzdXpIC +eprkcVMt1U2XbfVyZHvsDmTg9NaVzem5r1R0tvzKTb8gPpmYDp+yaXdKuH1v/IkI9a+ 7e/0Hgf4TG2EUgZn3GXifOfJDbAV5rDOfYW4PXV/Ed7mA2IziBGCjvlAMn8DnIhKt3HF xEPjqN/Mv6Kheb1eSoJRxYfR94KvTDBwxgV8BsyNadhmF4i7KrG4RlhPXOEff+DFepmz y2XVjMJjsTIbABpxcRQqi+OdSmDJnldmfJV/dQ8wsmN1Nx+c7RJqj84Iib+elg72wl2C 23/w== 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 i1-20020aa7dd01000000b00458264c2df2si7833618edv.164.2022.11.27.09.09.50; Sun, 27 Nov 2022 09:09:51 -0800 (PST) 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 8008968BC9D; Sun, 27 Nov 2022 19:06:25 +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 4AC4D68BA61 for ; Sun, 27 Nov 2022 19:06:04 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 06FAE2404F8 for ; Sun, 27 Nov 2022 18:06:04 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id WQwrLXu5cNMk for ; Sun, 27 Nov 2022 18:06:00 +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 DF5B8240D1C for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 8C1843A25E8 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:38 +0100 Message-Id: <20221127170351.11477-17-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 17/30] lavc: support AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE in all no-delay encoders 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: ACNw168hBAW+ --- libavcodec/ac3enc_fixed.c | 2 +- libavcodec/ac3enc_float.c | 2 +- libavcodec/adpcmenc.c | 3 ++- libavcodec/alacenc.c | 3 ++- libavcodec/aliaspixenc.c | 2 +- libavcodec/aptxenc.c | 4 ++-- libavcodec/asvenc.c | 4 ++-- libavcodec/avuienc.c | 3 ++- libavcodec/bitpacked_enc.c | 3 ++- libavcodec/bmpenc.c | 2 +- libavcodec/cfhdenc.c | 3 ++- libavcodec/cinepakenc.c | 2 +- libavcodec/cljrenc.c | 2 +- libavcodec/cngenc.c | 2 +- libavcodec/dcaenc.c | 3 ++- libavcodec/dfpwmenc.c | 3 ++- libavcodec/dnxhdenc.c | 2 +- libavcodec/dvenc.c | 3 ++- libavcodec/eac3enc.c | 2 +- libavcodec/encode.c | 12 ++++++++++++ libavcodec/exrenc.c | 3 ++- libavcodec/fitsenc.c | 2 +- libavcodec/flashsv2enc.c | 2 +- libavcodec/flashsvenc.c | 2 +- libavcodec/flvenc.c | 1 + libavcodec/g722enc.c | 3 ++- libavcodec/g723_1enc.c | 2 +- libavcodec/g726.c | 6 ++++-- libavcodec/gif.c | 2 +- libavcodec/h261enc.c | 1 + libavcodec/hapenc.c | 3 ++- libavcodec/hdrenc.c | 3 ++- libavcodec/huffyuvenc.c | 6 ++++-- libavcodec/ituh263enc.c | 3 ++- libavcodec/j2kenc.c | 2 +- libavcodec/jpeglsenc.c | 3 ++- libavcodec/lclenc.c | 3 ++- libavcodec/libcodec2.c | 3 ++- libavcodec/libgsmenc.c | 4 ++-- libavcodec/libilbc.c | 3 ++- libavcodec/libjxlenc.c | 3 ++- libavcodec/libopenh264enc.c | 3 ++- libavcodec/libopenjpegenc.c | 3 ++- libavcodec/libvo-amrwbenc.c | 3 ++- libavcodec/libwebpenc.c | 2 +- libavcodec/libxvid.c | 2 +- libavcodec/ljpegenc.c | 3 ++- libavcodec/magicyuvenc.c | 3 ++- libavcodec/mjpegenc.c | 4 +++- libavcodec/mpegaudioenc_fixed.c | 2 +- libavcodec/mpegaudioenc_float.c | 2 +- libavcodec/msmpeg4enc.c | 3 +++ libavcodec/msvideo1enc.c | 1 + libavcodec/pamenc.c | 2 +- libavcodec/pcm-blurayenc.c | 2 +- libavcodec/pcm-dvdenc.c | 3 ++- libavcodec/pcm.c | 3 ++- libavcodec/pcxenc.c | 2 +- libavcodec/pngenc.c | 3 ++- libavcodec/pnmenc.c | 12 ++++++------ libavcodec/proresenc_anatoliy.c | 6 ++++-- libavcodec/proresenc_kostya.c | 3 ++- libavcodec/qoienc.c | 3 ++- libavcodec/qtrleenc.c | 2 +- libavcodec/r210enc.c | 6 +++--- libavcodec/rawenc.c | 3 ++- libavcodec/roqvideoenc.c | 2 +- libavcodec/rpzaenc.c | 2 +- libavcodec/rv10enc.c | 1 + libavcodec/rv20enc.c | 1 + libavcodec/s302menc.c | 3 ++- libavcodec/sbcenc.c | 3 ++- libavcodec/sgienc.c | 2 +- libavcodec/smcenc.c | 2 +- libavcodec/snowenc.c | 2 +- libavcodec/sonic.c | 6 ++++-- libavcodec/speedhqenc.c | 1 + libavcodec/sunrastenc.c | 2 +- libavcodec/svq1enc.c | 2 +- libavcodec/targaenc.c | 2 +- libavcodec/tiffenc.c | 3 ++- libavcodec/ttaenc.c | 3 ++- libavcodec/utvideoenc.c | 3 ++- libavcodec/v210enc.c | 3 ++- libavcodec/v308enc.c | 2 +- libavcodec/v408enc.c | 4 ++-- libavcodec/v410enc.c | 2 +- libavcodec/vaapi_encode_mjpeg.c | 3 ++- libavcodec/vbnenc.c | 3 ++- libavcodec/vc2enc.c | 3 ++- libavcodec/wavpackenc.c | 3 ++- libavcodec/wbmpenc.c | 3 ++- libavcodec/wmaenc.c | 4 ++-- libavcodec/wmv2enc.c | 1 + libavcodec/wrapped_avframe.c | 1 + libavcodec/xbmenc.c | 2 +- libavcodec/xfaceenc.c | 2 +- libavcodec/xwdenc.c | 2 +- libavcodec/y41penc.c | 2 +- libavcodec/yuv4enc.c | 2 +- libavcodec/zmbvenc.c | 2 +- 101 files changed, 180 insertions(+), 107 deletions(-) diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 5a5f1cc2e9..88dfd66b91 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -112,7 +112,7 @@ const FFCodec ff_ac3_fixed_encoder = { CODEC_LONG_NAME("ATSC A/52A (AC-3)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AC3, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AC3EncodeContext), .init = ac3_fixed_encode_init, FF_CODEC_ENCODE_CB(ff_ac3_fixed_encode_frame), diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index 4c4d18ce56..ae351a535e 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -116,7 +116,7 @@ const FFCodec ff_ac3_encoder = { CODEC_LONG_NAME("ATSC A/52A (AC-3)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AC3, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AC3EncodeContext), .init = ff_ac3_float_encode_init, FF_CODEC_ENCODE_CB(ff_ac3_float_encode_frame), diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c index 57709b19a1..63afffc58f 100644 --- a/libavcodec/adpcmenc.c +++ b/libavcodec/adpcmenc.c @@ -1003,7 +1003,8 @@ const FFCodec ff_ ## name_ ## _encoder = { \ .p.id = id_, \ .p.sample_fmts = sample_fmts_, \ .p.ch_layouts = ch_layouts, \ - .p.capabilities = capabilities_ | AV_CODEC_CAP_DR1, \ + .p.capabilities = capabilities_ | AV_CODEC_CAP_DR1 | \ + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, \ .p.priv_class = &adpcm_encoder_class, \ .priv_data_size = sizeof(ADPCMEncodeContext), \ .init = adpcm_encode_init, \ diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c index 0f685d71d6..9598e5861e 100644 --- a/libavcodec/alacenc.c +++ b/libavcodec/alacenc.c @@ -653,7 +653,8 @@ const FFCodec ff_alac_encoder = { CODEC_LONG_NAME("ALAC (Apple Lossless Audio Codec)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ALAC, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AlacEncodeContext), .p.priv_class = &alacenc_class, .init = alac_encode_init, diff --git a/libavcodec/aliaspixenc.c b/libavcodec/aliaspixenc.c index 6593d3f047..90d2a63319 100644 --- a/libavcodec/aliaspixenc.c +++ b/libavcodec/aliaspixenc.c @@ -106,7 +106,7 @@ const FFCodec ff_alias_pix_encoder = { CODEC_LONG_NAME("Alias/Wavefront PIX image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ALIAS_PIX, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_BGR24, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE diff --git a/libavcodec/aptxenc.c b/libavcodec/aptxenc.c index 5fc0378f5d..6deebaf2cb 100644 --- a/libavcodec/aptxenc.c +++ b/libavcodec/aptxenc.c @@ -271,7 +271,7 @@ const FFCodec ff_aptx_encoder = { CODEC_LONG_NAME("aptX (Audio Processing Technology for Bluetooth)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_APTX, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AptXEncContext), .init = aptx_encode_init, FF_CODEC_ENCODE_CB(aptx_encode_frame), @@ -290,7 +290,7 @@ const FFCodec ff_aptx_hd_encoder = { CODEC_LONG_NAME("aptX HD (Audio Processing Technology for Bluetooth)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_APTX_HD, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AptXEncContext), .init = aptx_encode_init, FF_CODEC_ENCODE_CB(aptx_encode_frame), diff --git a/libavcodec/asvenc.c b/libavcodec/asvenc.c index 9da7cbb986..4a14bcf8fa 100644 --- a/libavcodec/asvenc.c +++ b/libavcodec/asvenc.c @@ -362,7 +362,7 @@ const FFCodec ff_asv1_encoder = { CODEC_LONG_NAME("ASUS V1"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ASV1, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(ASVEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), @@ -377,7 +377,7 @@ const FFCodec ff_asv2_encoder = { CODEC_LONG_NAME("ASUS V2"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ASV2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(ASVEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/avuienc.c b/libavcodec/avuienc.c index 0b82848cb3..8a093d3d19 100644 --- a/libavcodec/avuienc.c +++ b/libavcodec/avuienc.c @@ -96,7 +96,8 @@ const FFCodec ff_avui_encoder = { CODEC_LONG_NAME("Avid Meridien Uncompressed"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_AVUI, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_UYVY422, AV_PIX_FMT_NONE }, .init = avui_encode_init, FF_CODEC_ENCODE_CB(avui_encode_frame), diff --git a/libavcodec/bitpacked_enc.c b/libavcodec/bitpacked_enc.c index ca4d5c887d..3c4e11293d 100644 --- a/libavcodec/bitpacked_enc.c +++ b/libavcodec/bitpacked_enc.c @@ -110,7 +110,8 @@ const FFCodec ff_bitpacked_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_BITPACKED, .priv_data_size = sizeof(struct BitpackedContext), - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV422P10, diff --git a/libavcodec/bmpenc.c b/libavcodec/bmpenc.c index abf644bd99..3e3ca324ea 100644 --- a/libavcodec/bmpenc.c +++ b/libavcodec/bmpenc.c @@ -161,7 +161,7 @@ const FFCodec ff_bmp_encoder = { CODEC_LONG_NAME("BMP (Windows and OS/2 bitmap)"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_BMP, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = bmp_encode_init, FF_CODEC_ENCODE_CB(bmp_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ diff --git a/libavcodec/cfhdenc.c b/libavcodec/cfhdenc.c index 0fca46ef3a..61053bd8b5 100644 --- a/libavcodec/cfhdenc.c +++ b/libavcodec/cfhdenc.c @@ -851,7 +851,8 @@ const FFCodec ff_cfhd_encoder = { CODEC_LONG_NAME("GoPro CineForm HD"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_CFHD, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(CFHDEncContext), .p.priv_class = &cfhd_class, .init = cfhd_encode_init, diff --git a/libavcodec/cinepakenc.c b/libavcodec/cinepakenc.c index c05449e89c..f15325ad0d 100644 --- a/libavcodec/cinepakenc.c +++ b/libavcodec/cinepakenc.c @@ -1219,7 +1219,7 @@ const FFCodec ff_cinepak_encoder = { CODEC_LONG_NAME("Cinepak"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_CINEPAK, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(CinepakEncContext), .init = cinepak_encode_init, FF_CODEC_ENCODE_CB(cinepak_encode_frame), diff --git a/libavcodec/cljrenc.c b/libavcodec/cljrenc.c index c1f8810a5a..d658931520 100644 --- a/libavcodec/cljrenc.c +++ b/libavcodec/cljrenc.c @@ -113,7 +113,7 @@ const FFCodec ff_cljr_encoder = { CODEC_LONG_NAME("Cirrus Logic AccuPak"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_CLJR, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(CLJRContext), FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV411P, diff --git a/libavcodec/cngenc.c b/libavcodec/cngenc.c index ff40017f0d..596d6f8c2a 100644 --- a/libavcodec/cngenc.c +++ b/libavcodec/cngenc.c @@ -101,7 +101,7 @@ const FFCodec ff_comfortnoise_encoder = { CODEC_LONG_NAME("RFC 3389 comfort noise generator"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_COMFORT_NOISE, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(CNGContext), .init = cng_encode_init, FF_CODEC_ENCODE_CB(cng_encode_frame), diff --git a/libavcodec/dcaenc.c b/libavcodec/dcaenc.c index 4cab54ef1b..c731d79381 100644 --- a/libavcodec/dcaenc.c +++ b/libavcodec/dcaenc.c @@ -1315,7 +1315,8 @@ const FFCodec ff_dca_encoder = { CODEC_LONG_NAME("DCA (DTS Coherent Acoustics)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_DTS, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(DCAEncContext), .init = encode_init, .close = encode_close, diff --git a/libavcodec/dfpwmenc.c b/libavcodec/dfpwmenc.c index 7f465a446e..5318b04a39 100644 --- a/libavcodec/dfpwmenc.c +++ b/libavcodec/dfpwmenc.c @@ -116,5 +116,6 @@ const FFCodec ff_dfpwm_encoder = { .init = dfpwm_enc_init, FF_CODEC_ENCODE_CB(dfpwm_enc_frame), .p.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_NONE}, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_VARIABLE_FRAME_SIZE, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_VARIABLE_FRAME_SIZE | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index b7dc54f86a..176bf972d8 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -1359,7 +1359,7 @@ const FFCodec ff_dnxhd_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_DNXHD, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | - AV_CODEC_CAP_SLICE_THREADS, + AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(DNXHDEncContext), .init = dnxhd_encode_init, FF_CODEC_ENCODE_CB(dnxhd_encode_picture), diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index 4c747ef71f..8f5fa050b0 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -1239,7 +1239,8 @@ const FFCodec ff_dvvideo_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_DVVIDEO, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | - AV_CODEC_CAP_SLICE_THREADS, + AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(DVEncContext), .init = dvvideo_encode_init, FF_CODEC_ENCODE_CB(dvvideo_encode_frame), diff --git a/libavcodec/eac3enc.c b/libavcodec/eac3enc.c index 78d4f1399a..ab9eda261f 100644 --- a/libavcodec/eac3enc.c +++ b/libavcodec/eac3enc.c @@ -254,7 +254,7 @@ const FFCodec ff_eac3_encoder = { CODEC_LONG_NAME("ATSC A/52 E-AC-3"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_EAC3, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(AC3EncodeContext), .init = ff_ac3_float_encode_init, FF_CODEC_ENCODE_CB(ff_ac3_float_encode_frame), diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 7e2d54ae9b..e4270b6c34 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -220,6 +220,18 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples); } + + avctx->reordered_opaque = frame->reordered_opaque; + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + avpkt->opaque = frame->opaque; + if (frame->opaque_ref) { + avpkt->opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!avpkt->opaque_ref) { + ret = AVERROR(ENOMEM); + goto unref; + } + } + } } // dts equals pts unless there is reordering diff --git a/libavcodec/exrenc.c b/libavcodec/exrenc.c index 10ed876888..36327f498c 100644 --- a/libavcodec/exrenc.c +++ b/libavcodec/exrenc.c @@ -547,7 +547,8 @@ const FFCodec ff_exr_encoder = { .p.priv_class = &exr_class, .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_EXR, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), .close = encode_close, diff --git a/libavcodec/fitsenc.c b/libavcodec/fitsenc.c index ac910499e5..12952278ac 100644 --- a/libavcodec/fitsenc.c +++ b/libavcodec/fitsenc.c @@ -114,7 +114,7 @@ const FFCodec ff_fits_encoder = { CODEC_LONG_NAME("Flexible Image Transport System"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_FITS, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(fits_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_GBRAP16BE, AV_PIX_FMT_GBRP16BE, diff --git a/libavcodec/flashsv2enc.c b/libavcodec/flashsv2enc.c index 668ca6a85f..46e24a9c1e 100644 --- a/libavcodec/flashsv2enc.c +++ b/libavcodec/flashsv2enc.c @@ -915,7 +915,7 @@ const FFCodec ff_flashsv2_encoder = { CODEC_LONG_NAME("Flash Screen Video Version 2"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_FLASHSV2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(FlashSV2Context), .init = flashsv2_encode_init, FF_CODEC_ENCODE_CB(flashsv2_encode_frame), diff --git a/libavcodec/flashsvenc.c b/libavcodec/flashsvenc.c index 3a35876d9c..6192bc25db 100644 --- a/libavcodec/flashsvenc.c +++ b/libavcodec/flashsvenc.c @@ -251,7 +251,7 @@ const FFCodec ff_flashsv_encoder = { CODEC_LONG_NAME("Flash Screen Video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_FLASHSV, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(FlashSVContext), .init = flashsv_encode_init, FF_CODEC_ENCODE_CB(flashsv_encode_frame), diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index b49ca2e0d5..1ebe6e8736 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -105,4 +105,5 @@ const FFCodec ff_flv_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .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/g722enc.c b/libavcodec/g722enc.c index bc08211b1d..47811cee4d 100644 --- a/libavcodec/g722enc.c +++ b/libavcodec/g722enc.c @@ -375,7 +375,8 @@ const FFCodec ff_adpcm_g722_encoder = { CODEC_LONG_NAME("G.722 ADPCM"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ADPCM_G722, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(G722Context), .init = g722_encode_init, .close = g722_encode_close, diff --git a/libavcodec/g723_1enc.c b/libavcodec/g723_1enc.c index 8466067185..be80153130 100644 --- a/libavcodec/g723_1enc.c +++ b/libavcodec/g723_1enc.c @@ -1241,7 +1241,7 @@ const FFCodec ff_g723_1_encoder = { CODEC_LONG_NAME("G.723.1"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_G723_1, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(G723_1_Context), .init = g723_1_encode_init, FF_CODEC_ENCODE_CB(g723_1_encode_frame), diff --git a/libavcodec/g726.c b/libavcodec/g726.c index 7bbb7f900c..6c5638760d 100644 --- a/libavcodec/g726.c +++ b/libavcodec/g726.c @@ -405,7 +405,8 @@ const FFCodec ff_adpcm_g726_encoder = { CODEC_LONG_NAME("G.726 ADPCM"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ADPCM_G726, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(G726Context), .init = g726_encode_init, FF_CODEC_ENCODE_CB(g726_encode_frame), @@ -422,7 +423,8 @@ const FFCodec ff_adpcm_g726le_encoder = { CODEC_LONG_NAME("G.726 little endian ADPCM (\"right-justified\")"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ADPCM_G726LE, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(G726Context), .init = g726_encode_init, FF_CODEC_ENCODE_CB(g726_encode_frame), diff --git a/libavcodec/gif.c b/libavcodec/gif.c index 7e717d8220..e17ead0f82 100644 --- a/libavcodec/gif.c +++ b/libavcodec/gif.c @@ -553,7 +553,7 @@ const FFCodec ff_gif_encoder = { CODEC_LONG_NAME("GIF (Graphics Interchange Format)"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_GIF, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(GIFContext), .init = gif_encode_init, FF_CODEC_ENCODE_CB(gif_encode_frame), diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index e8ea357cbb..6c80809bca 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -413,4 +413,5 @@ const FFCodec ff_h261_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .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/hapenc.c b/libavcodec/hapenc.c index a890dc6492..7de7358e3d 100644 --- a/libavcodec/hapenc.c +++ b/libavcodec/hapenc.c @@ -351,7 +351,8 @@ const FFCodec ff_hap_encoder = { CODEC_LONG_NAME("Vidvox Hap"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_HAP, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(HapContext), .p.priv_class = &hapenc_class, .init = hap_init, diff --git a/libavcodec/hdrenc.c b/libavcodec/hdrenc.c index d8c3111c93..40d283ee61 100644 --- a/libavcodec/hdrenc.c +++ b/libavcodec/hdrenc.c @@ -177,7 +177,8 @@ const FFCodec ff_hdr_encoder = { .priv_data_size = sizeof(HDREncContext), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_RADIANCE_HDR, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = hdr_encode_init, FF_CODEC_ENCODE_CB(hdr_encode_frame), .close = hdr_encode_close, diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index db274e37ad..72d6246ebe 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -1082,7 +1082,8 @@ const FFCodec ff_huffyuv_encoder = { CODEC_LONG_NAME("Huffyuv / HuffYUV"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_HUFFYUV, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(HYuvEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), @@ -1101,7 +1102,8 @@ const FFCodec ff_ffvhuff_encoder = { CODEC_LONG_NAME("Huffyuv FFmpeg variant"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_FFVHUFF, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(HYuvEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 22e5a8368d..719effa41d 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -903,6 +903,7 @@ 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, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, @@ -933,7 +934,7 @@ 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, + .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c index e883d5deb7..6406f90ac2 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -1835,7 +1835,7 @@ const FFCodec ff_jpeg2000_encoder = { CODEC_LONG_NAME("JPEG 2000"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_JPEG2000, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(Jpeg2000EncoderContext), .init = j2kenc_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/jpeglsenc.c b/libavcodec/jpeglsenc.c index 5ee39ac2d6..53394102df 100644 --- a/libavcodec/jpeglsenc.c +++ b/libavcodec/jpeglsenc.c @@ -476,7 +476,8 @@ const FFCodec ff_jpegls_encoder = { CODEC_LONG_NAME("JPEG-LS"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_JPEGLS, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(JPEGLSContext), .p.priv_class = &jpegls_class, .init = encode_jpegls_init, diff --git a/libavcodec/lclenc.c b/libavcodec/lclenc.c index 2c9add5215..dd5eed9d63 100644 --- a/libavcodec/lclenc.c +++ b/libavcodec/lclenc.c @@ -156,7 +156,8 @@ const FFCodec ff_zlib_encoder = { CODEC_LONG_NAME("LCL (LossLess Codec Library) ZLIB"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ZLIB, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(LclEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/libcodec2.c b/libavcodec/libcodec2.c index 5728d915c2..83f68e85c7 100644 --- a/libavcodec/libcodec2.c +++ b/libavcodec/libcodec2.c @@ -197,7 +197,8 @@ const FFCodec ff_libcodec2_encoder = { CODEC_LONG_NAME("codec2 encoder using libcodec2"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_CODEC2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.supported_samplerates = (const int[]){ 8000, 0 }, .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .p.ch_layouts = (const AVChannelLayout[]) { AV_CHANNEL_LAYOUT_MONO, { 0 } }, diff --git a/libavcodec/libgsmenc.c b/libavcodec/libgsmenc.c index bd3b1420aa..640954491a 100644 --- a/libavcodec/libgsmenc.c +++ b/libavcodec/libgsmenc.c @@ -122,7 +122,7 @@ const FFCodec ff_libgsm_encoder = { CODEC_LONG_NAME("libgsm GSM"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_GSM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = libgsm_encode_init, FF_CODEC_ENCODE_CB(libgsm_encode_frame), .close = libgsm_encode_close, @@ -141,7 +141,7 @@ const FFCodec ff_libgsm_ms_encoder = { CODEC_LONG_NAME("libgsm GSM Microsoft variant"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_GSM_MS, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = libgsm_encode_init, FF_CODEC_ENCODE_CB(libgsm_encode_frame), .close = libgsm_encode_close, diff --git a/libavcodec/libilbc.c b/libavcodec/libilbc.c index 9ef6e16bc5..0787b5c313 100644 --- a/libavcodec/libilbc.c +++ b/libavcodec/libilbc.c @@ -126,7 +126,8 @@ const FFCodec ff_libilbc_decoder = { .priv_data_size = sizeof(ILBCDecContext), .init = ilbc_decode_init, FF_CODEC_DECODE_CB(ilbc_decode_frame), - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.priv_class = &ilbc_dec_class, }; diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index 0793ed251b..06581b268d 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -467,7 +467,8 @@ const FFCodec ff_libjxl_encoder = { .init = libjxl_encode_init, FF_CODEC_ENCODE_CB(libjxl_encode_frame), .close = libjxl_encode_close, - .p.capabilities = AV_CODEC_CAP_OTHER_THREADS, + .p.capabilities = AV_CODEC_CAP_OTHER_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_ICC_PROFILES, diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index bbd6969568..6934fd481c 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -456,7 +456,8 @@ const FFCodec ff_libopenh264_encoder = { CODEC_LONG_NAME("OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_H264, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_OTHER_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_OTHER_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SVCContext), .init = svc_encode_init, FF_CODEC_ENCODE_CB(svc_encode_frame), diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 6f77780391..009c7a4377 100644 --- a/libavcodec/libopenjpegenc.c +++ b/libavcodec/libopenjpegenc.c @@ -763,7 +763,8 @@ const FFCodec ff_libopenjpeg_encoder = { .priv_data_size = sizeof(LibOpenJPEGContext), .init = libopenjpeg_encode_init, FF_CODEC_ENCODE_CB(libopenjpeg_encode_frame), - .p.capabilities = AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB48, AV_PIX_FMT_RGBA64, AV_PIX_FMT_GBR24P, diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c index 76a6b69994..02b8941a6d 100644 --- a/libavcodec/libvo-amrwbenc.c +++ b/libavcodec/libvo-amrwbenc.c @@ -144,7 +144,8 @@ const FFCodec ff_libvo_amrwbenc_encoder = { CODEC_LONG_NAME("Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AMR_WB, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.priv_class = &amrwb_class, .p.wrapper_name = "libvo_amrwbenc", .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c index ee5795f041..d6edd86603 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -92,7 +92,7 @@ const FFCodec ff_libwebp_encoder = { CODEC_LONG_NAME("libwebp WebP image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_WEBP, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = ff_libwebpenc_pix_fmts, .p.priv_class = &ff_libwebpenc_class, .p.wrapper_name = "libwebp", diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index 4e04b3c098..aba875b6b8 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -902,7 +902,7 @@ const FFCodec ff_libxvid_encoder = { CODEC_LONG_NAME("libxvidcore MPEG-4 part 2"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_MPEG4, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(struct xvid_context), .init = xvid_encode_init, FF_CODEC_ENCODE_CB(xvid_encode_frame), diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index 81c52a7c78..aa62beac71 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -316,7 +316,8 @@ const FFCodec ff_ljpeg_encoder = { CODEC_LONG_NAME("Lossless JPEG"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_LJPEG, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(LJpegEncContext), .p.priv_class = &ljpeg_class, .init = ljpeg_encode_init, diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index 7f9ff72834..9e41c1b0fe 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -569,7 +569,8 @@ const FFCodec ff_magicyuv_encoder = { CODEC_LONG_NAME("MagicYUV video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_MAGICYUV, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(MagicYUVContext), .p.priv_class = &magicyuv_class, .init = magy_encode_init, diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index eafe7130e2..508772987f 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -651,7 +651,8 @@ const FFCodec ff_mjpeg_encoder = { .init = ff_mpv_encode_init, FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = mjpeg_encode_close, - .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .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, @@ -685,5 +686,6 @@ 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, }; #endif diff --git a/libavcodec/mpegaudioenc_fixed.c b/libavcodec/mpegaudioenc_fixed.c index afbffe766b..a523b5d533 100644 --- a/libavcodec/mpegaudioenc_fixed.c +++ b/libavcodec/mpegaudioenc_fixed.c @@ -28,7 +28,7 @@ const FFCodec ff_mp2fixed_encoder = { CODEC_LONG_NAME("MP2 fixed point (MPEG audio layer 2)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_MP2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(MpegAudioContext), .init = MPA_encode_init, FF_CODEC_ENCODE_CB(MPA_encode_frame), diff --git a/libavcodec/mpegaudioenc_float.c b/libavcodec/mpegaudioenc_float.c index 212709c291..6a13d09573 100644 --- a/libavcodec/mpegaudioenc_float.c +++ b/libavcodec/mpegaudioenc_float.c @@ -29,7 +29,7 @@ const FFCodec ff_mp2_encoder = { CODEC_LONG_NAME("MP2 (MPEG audio layer 2)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_MP2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(MpegAudioContext), .init = MPA_encode_init, FF_CODEC_ENCODE_CB(MPA_encode_frame), diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 9b6e5efa0c..737a7f7dce 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -684,6 +684,7 @@ 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, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, @@ -698,6 +699,7 @@ 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, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, @@ -712,6 +714,7 @@ 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, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, diff --git a/libavcodec/msvideo1enc.c b/libavcodec/msvideo1enc.c index a349b42ca0..36cfd39a85 100644 --- a/libavcodec/msvideo1enc.c +++ b/libavcodec/msvideo1enc.c @@ -307,6 +307,7 @@ const FFCodec ff_msvideo1_encoder = { CODEC_LONG_NAME("Microsoft Video-1"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_MSVIDEO1, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(Msvideo1EncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/pamenc.c b/libavcodec/pamenc.c index 7d01e89f74..45ec29ccb3 100644 --- a/libavcodec/pamenc.c +++ b/libavcodec/pamenc.c @@ -133,7 +133,7 @@ const FFCodec ff_pam_encoder = { CODEC_LONG_NAME("PAM (Portable AnyMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PAM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pam_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, diff --git a/libavcodec/pcm-blurayenc.c b/libavcodec/pcm-blurayenc.c index 62e86e722f..bfbfa91d7a 100644 --- a/libavcodec/pcm-blurayenc.c +++ b/libavcodec/pcm-blurayenc.c @@ -304,5 +304,5 @@ const FFCodec ff_pcm_bluray_encoder = { { 0 } }, .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_NONE }, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/pcm-dvdenc.c b/libavcodec/pcm-dvdenc.c index 011d0a2f00..a2e5cbdc2e 100644 --- a/libavcodec/pcm-dvdenc.c +++ b/libavcodec/pcm-dvdenc.c @@ -176,7 +176,8 @@ const FFCodec ff_pcm_dvd_encoder = { CODEC_LONG_NAME("PCM signed 16|20|24-bit big-endian for DVD media"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_PCM_DVD, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(PCMDVDContext), .init = pcm_dvd_encode_init, FF_CODEC_ENCODE_CB(pcm_dvd_encode_frame), diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c index ee36a364c8..23955ba2dd 100644 --- a/libavcodec/pcm.c +++ b/libavcodec/pcm.c @@ -553,7 +553,8 @@ const FFCodec ff_ ## name_ ## _encoder = { \ CODEC_LONG_NAME(long_name_), \ .p.type = AVMEDIA_TYPE_AUDIO, \ .p.id = AV_CODEC_ID_ ## id_, \ - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_VARIABLE_FRAME_SIZE, \ + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_VARIABLE_FRAME_SIZE | \ + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, \ .init = pcm_encode_init, \ FF_CODEC_ENCODE_CB(pcm_encode_frame), \ .p.sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \ diff --git a/libavcodec/pcxenc.c b/libavcodec/pcxenc.c index 509158ba0f..cf9b41b752 100644 --- a/libavcodec/pcxenc.c +++ b/libavcodec/pcxenc.c @@ -197,7 +197,7 @@ const FFCodec ff_pcx_encoder = { CODEC_LONG_NAME("PC Paintbrush PCX image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PCX, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pcx_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_RGB24, diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index ca1a186ca8..d1448bd0cd 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -1196,7 +1196,8 @@ const FFCodec ff_png_encoder = { CODEC_LONG_NAME("PNG (Portable Network Graphics) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PNG, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(PNGEncContext), .init = png_enc_init, .close = png_enc_close, diff --git a/libavcodec/pnmenc.c b/libavcodec/pnmenc.c index c998dd410c..1eca2556da 100644 --- a/libavcodec/pnmenc.c +++ b/libavcodec/pnmenc.c @@ -227,7 +227,7 @@ const FFCodec ff_pgm_encoder = { CODEC_LONG_NAME("PGM (Portable GrayMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PGM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pnm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_NONE @@ -241,7 +241,7 @@ const FFCodec ff_pgmyuv_encoder = { CODEC_LONG_NAME("PGMYUV (Portable GrayMap YUV) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PGMYUV, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pnm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P16BE, AV_PIX_FMT_NONE @@ -255,7 +255,7 @@ const FFCodec ff_ppm_encoder = { CODEC_LONG_NAME("PPM (Portable PixelMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PPM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pnm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB48BE, AV_PIX_FMT_NONE @@ -269,7 +269,7 @@ const FFCodec ff_pbm_encoder = { CODEC_LONG_NAME("PBM (Portable BitMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PBM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pnm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_MONOWHITE, AV_PIX_FMT_NONE }, @@ -282,7 +282,7 @@ const FFCodec ff_pfm_encoder = { CODEC_LONG_NAME("PFM (Portable FloatMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PFM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(pnm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_GBRPF32LE, AV_PIX_FMT_GRAYF32LE, @@ -307,7 +307,7 @@ const FFCodec ff_phm_encoder = { CODEC_LONG_NAME("PHM (Portable HalfFloatMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PHM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(PHMEncContext), .init = phm_enc_init, FF_CODEC_ENCODE_CB(pnm_encode_frame), diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c index bd1b70cc5d..09196c7aa1 100644 --- a/libavcodec/proresenc_anatoliy.c +++ b/libavcodec/proresenc_anatoliy.c @@ -944,7 +944,8 @@ const FFCodec ff_prores_aw_encoder = { CODEC_LONG_NAME("Apple ProRes"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PRORES, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = pix_fmts, .priv_data_size = sizeof(ProresContext), .init = prores_encode_init, @@ -960,7 +961,8 @@ const FFCodec ff_prores_encoder = { CODEC_LONG_NAME("Apple ProRes"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_PRORES, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = pix_fmts, .priv_data_size = sizeof(ProresContext), .init = prores_encode_init, diff --git a/libavcodec/proresenc_kostya.c b/libavcodec/proresenc_kostya.c index 5b38437d0a..1940e0378a 100644 --- a/libavcodec/proresenc_kostya.c +++ b/libavcodec/proresenc_kostya.c @@ -1428,7 +1428,8 @@ const FFCodec ff_prores_ks_encoder = { .init = encode_init, .close = encode_close, FF_CODEC_ENCODE_CB(encode_frame), - .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE diff --git a/libavcodec/qoienc.c b/libavcodec/qoienc.c index 6d574e0da9..b9efdc2fa5 100644 --- a/libavcodec/qoienc.c +++ b/libavcodec/qoienc.c @@ -131,7 +131,8 @@ const FFCodec ff_qoi_encoder = { CODEC_LONG_NAME("QOI (Quite OK Image format) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_QOI, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(qoi_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB24, diff --git a/libavcodec/qtrleenc.c b/libavcodec/qtrleenc.c index 855494d3df..3d51fcf843 100644 --- a/libavcodec/qtrleenc.c +++ b/libavcodec/qtrleenc.c @@ -404,7 +404,7 @@ const FFCodec ff_qtrle_encoder = { CODEC_LONG_NAME("QuickTime Animation (RLE) video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_QTRLE, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(QtrleEncContext), .init = qtrle_encode_init, FF_CODEC_ENCODE_CB(qtrle_encode_frame), diff --git a/libavcodec/r210enc.c b/libavcodec/r210enc.c index d87f42ce4a..91e3452874 100644 --- a/libavcodec/r210enc.c +++ b/libavcodec/r210enc.c @@ -96,7 +96,7 @@ const FFCodec ff_r210_encoder = { CODEC_LONG_NAME("Uncompressed RGB 10-bit"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_R210, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = pix_fmt, @@ -108,7 +108,7 @@ const FFCodec ff_r10k_encoder = { CODEC_LONG_NAME("AJA Kona 10-bit RGB Codec"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_R10K, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = pix_fmt, @@ -120,7 +120,7 @@ const FFCodec ff_avrp_encoder = { CODEC_LONG_NAME("Avid 1:1 10-bit RGB Packer"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_AVRP, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = pix_fmt, diff --git a/libavcodec/rawenc.c b/libavcodec/rawenc.c index c2643e6d80..8c577006d9 100644 --- a/libavcodec/rawenc.c +++ b/libavcodec/rawenc.c @@ -86,7 +86,8 @@ const FFCodec ff_rawvideo_encoder = { CODEC_LONG_NAME("raw video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_RAWVIDEO, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = raw_encode_init, FF_CODEC_ENCODE_CB(raw_encode), }; diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c index 273686a147..c25aa39b73 100644 --- a/libavcodec/roqvideoenc.c +++ b/libavcodec/roqvideoenc.c @@ -1122,7 +1122,7 @@ const FFCodec ff_roq_encoder = { CODEC_LONG_NAME("id RoQ video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ROQ, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(RoqEncContext), .init = roq_encode_init, FF_CODEC_ENCODE_CB(roq_encode_frame), diff --git a/libavcodec/rpzaenc.c b/libavcodec/rpzaenc.c index 1ea579d2d3..da9500e424 100644 --- a/libavcodec/rpzaenc.c +++ b/libavcodec/rpzaenc.c @@ -873,7 +873,7 @@ const FFCodec ff_rpza_encoder = { CODEC_LONG_NAME("QuickTime video (RPZA)"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_RPZA, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(RpzaContext), .p.priv_class = &rpza_class, .init = rpza_encode_init, diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index d0704c5a4b..d19d693e18 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -71,6 +71,7 @@ const FFCodec ff_rv10_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_RV10, .p.priv_class = &ff_mpv_enc_class, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index a6bacacb48..c7149fb267 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -68,6 +68,7 @@ const FFCodec ff_rv20_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_RV20, .p.priv_class = &ff_mpv_enc_class, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(MpegEncContext), .init = ff_mpv_encode_init, FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), diff --git a/libavcodec/s302menc.c b/libavcodec/s302menc.c index 3bd657f945..4b8996f9ac 100644 --- a/libavcodec/s302menc.c +++ b/libavcodec/s302menc.c @@ -176,7 +176,8 @@ const FFCodec ff_s302m_encoder = { .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_S302M, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | - AV_CODEC_CAP_VARIABLE_FRAME_SIZE, + AV_CODEC_CAP_VARIABLE_FRAME_SIZE | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(S302MEncContext), .init = s302m_encode_init, FF_CODEC_ENCODE_CB(s302m_encode2_frame), diff --git a/libavcodec/sbcenc.c b/libavcodec/sbcenc.c index 721c97e1ea..fccb0e3ea3 100644 --- a/libavcodec/sbcenc.c +++ b/libavcodec/sbcenc.c @@ -348,7 +348,8 @@ const FFCodec ff_sbc_encoder = { CODEC_LONG_NAME("SBC (low-complexity subband codec)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_SBC, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SBCEncContext), .init = sbc_encode_init, FF_CODEC_ENCODE_CB(sbc_encode_frame), diff --git a/libavcodec/sgienc.c b/libavcodec/sgienc.c index 901e0a74f9..5bbb72c03a 100644 --- a/libavcodec/sgienc.c +++ b/libavcodec/sgienc.c @@ -275,7 +275,7 @@ const FFCodec ff_sgi_encoder = { CODEC_LONG_NAME("SGI image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SGI, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SgiContext), .p.priv_class = &sgi_class, .init = encode_init, diff --git a/libavcodec/smcenc.c b/libavcodec/smcenc.c index a2d224bd09..159049f254 100644 --- a/libavcodec/smcenc.c +++ b/libavcodec/smcenc.c @@ -573,7 +573,7 @@ const FFCodec ff_smc_encoder = { CODEC_LONG_NAME("QuickTime Graphics (SMC)"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SMC, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SMCContext), .init = smc_encode_init, FF_CODEC_ENCODE_CB(smc_encode_frame), diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 7fad95b69a..749c8067d2 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1935,7 +1935,7 @@ const FFCodec ff_snow_encoder = { CODEC_LONG_NAME("Snow"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SNOW, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SnowContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/sonic.c b/libavcodec/sonic.c index 77bdb418a7..62e6193ac6 100644 --- a/libavcodec/sonic.c +++ b/libavcodec/sonic.c @@ -1096,7 +1096,8 @@ const FFCodec ff_sonic_encoder = { CODEC_LONG_NAME("Sonic"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_SONIC, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SonicContext), .init = sonic_encode_init, FF_CODEC_ENCODE_CB(sonic_encode_frame), @@ -1112,7 +1113,8 @@ const FFCodec ff_sonic_ls_encoder = { CODEC_LONG_NAME("Sonic lossless"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_SONIC_LS, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SonicContext), .init = sonic_encode_init, FF_CODEC_ENCODE_CB(sonic_encode_frame), diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index 7269e345d3..5b4ff4c139 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -288,6 +288,7 @@ const FFCodec ff_speedhq_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SPEEDHQ, .p.priv_class = &ff_mpv_enc_class, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SpeedHQEncContext), .init = ff_mpv_encode_init, FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), diff --git a/libavcodec/sunrastenc.c b/libavcodec/sunrastenc.c index 9b82f9921a..b2d57f7235 100644 --- a/libavcodec/sunrastenc.c +++ b/libavcodec/sunrastenc.c @@ -213,7 +213,7 @@ const FFCodec ff_sunrast_encoder = { CODEC_LONG_NAME("Sun Rasterfile image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SUNRAST, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SUNRASTContext), .init = sunrast_encode_init, FF_CODEC_ENCODE_CB(sunrast_encode_frame), diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 8f09e634a5..e3ea0c1e47 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -752,7 +752,7 @@ const FFCodec ff_svq1_encoder = { CODEC_LONG_NAME("Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_SVQ1, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(SVQ1EncContext), .p.priv_class = &svq1enc_class, .init = svq1_encode_init, diff --git a/libavcodec/targaenc.c b/libavcodec/targaenc.c index bb3cb93187..d9c500b97d 100644 --- a/libavcodec/targaenc.c +++ b/libavcodec/targaenc.c @@ -207,7 +207,7 @@ const FFCodec ff_targa_encoder = { CODEC_LONG_NAME("Truevision Targa image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_TARGA, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(TargaContext), .p.priv_class = &targa_class, .init = targa_encode_init, diff --git a/libavcodec/tiffenc.c b/libavcodec/tiffenc.c index 6dfbdaeb40..06d7dcc99d 100644 --- a/libavcodec/tiffenc.c +++ b/libavcodec/tiffenc.c @@ -574,7 +574,8 @@ const FFCodec ff_tiff_encoder = { CODEC_LONG_NAME("TIFF image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_TIFF, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(TiffEncoderContext), .init = encode_init, .close = encode_close, diff --git a/libavcodec/ttaenc.c b/libavcodec/ttaenc.c index d41d2e6fa5..db79c38b43 100644 --- a/libavcodec/ttaenc.c +++ b/libavcodec/ttaenc.c @@ -204,7 +204,8 @@ const FFCodec ff_tta_encoder = { CODEC_LONG_NAME("TTA (True Audio)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_TTA, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(TTAEncContext), .init = tta_encode_init, .close = tta_encode_close, diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c index d4388da8ba..6e87bbc2b6 100644 --- a/libavcodec/utvideoenc.c +++ b/libavcodec/utvideoenc.c @@ -648,7 +648,8 @@ const FFCodec ff_utvideo_encoder = { CODEC_LONG_NAME("Ut Video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_UTVIDEO, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(UtvideoContext), .p.priv_class = &utvideo_class, .init = utvideo_encode_init, diff --git a/libavcodec/v210enc.c b/libavcodec/v210enc.c index abbbf4ff9d..2a30ed77da 100644 --- a/libavcodec/v210enc.c +++ b/libavcodec/v210enc.c @@ -112,7 +112,8 @@ const FFCodec ff_v210_encoder = { CODEC_LONG_NAME("Uncompressed 4:2:2 10-bit"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_V210, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(V210EncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/v308enc.c b/libavcodec/v308enc.c index 78e33c0a8a..68f9c3310b 100644 --- a/libavcodec/v308enc.c +++ b/libavcodec/v308enc.c @@ -75,7 +75,7 @@ const FFCodec ff_v308_encoder = { CODEC_LONG_NAME("Uncompressed packed 4:4:4"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_V308, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = v308_encode_init, FF_CODEC_ENCODE_CB(v308_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, diff --git a/libavcodec/v408enc.c b/libavcodec/v408enc.c index 514f41be4e..1faac7cc36 100644 --- a/libavcodec/v408enc.c +++ b/libavcodec/v408enc.c @@ -94,7 +94,7 @@ const FFCodec ff_ayuv_encoder = { CODEC_LONG_NAME("Uncompressed packed MS 4:4:4:4"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_AYUV, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = v408_encode_init, FF_CODEC_ENCODE_CB(v408_encode_frame), .p.pix_fmts = pix_fmt, @@ -107,7 +107,7 @@ const FFCodec ff_v408_encoder = { CODEC_LONG_NAME("Uncompressed packed QT 4:4:4:4"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_V408, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = v408_encode_init, FF_CODEC_ENCODE_CB(v408_encode_frame), .p.pix_fmts = pix_fmt, diff --git a/libavcodec/v410enc.c b/libavcodec/v410enc.c index bad13c371a..89ee3a7278 100644 --- a/libavcodec/v410enc.c +++ b/libavcodec/v410enc.c @@ -79,7 +79,7 @@ const FFCodec ff_v410_encoder = { CODEC_LONG_NAME("Uncompressed 4:4:4 10-bit"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_V410, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = v410_encode_init, FF_CODEC_ENCODE_CB(v410_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV444P10, AV_PIX_FMT_NONE }, diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index 5ef93cd102..cb7588b94b 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -574,7 +574,8 @@ const FFCodec ff_mjpeg_vaapi_encoder = { FF_CODEC_RECEIVE_PACKET_CB(&ff_vaapi_encode_receive_packet), .close = &vaapi_encode_mjpeg_close, .p.priv_class = &vaapi_encode_mjpeg_class, - .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_mjpeg_defaults, diff --git a/libavcodec/vbnenc.c b/libavcodec/vbnenc.c index 45101382a3..7ce91863d7 100644 --- a/libavcodec/vbnenc.c +++ b/libavcodec/vbnenc.c @@ -153,7 +153,8 @@ const FFCodec ff_vbn_encoder = { CODEC_LONG_NAME("Vizrt Binary Image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_VBN, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.priv_class = &vbnenc_class, .init = vbn_init, FF_CODEC_ENCODE_CB(vbn_encode), diff --git a/libavcodec/vc2enc.c b/libavcodec/vc2enc.c index 82d11462aa..d978c67a3b 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -1228,7 +1228,8 @@ const FFCodec ff_vc2_encoder = { CODEC_LONG_NAME("SMPTE VC-2"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_DIRAC, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .priv_data_size = sizeof(VC2EncContext), .init = vc2_encode_init, diff --git a/libavcodec/wavpackenc.c b/libavcodec/wavpackenc.c index bdb536382f..3d2d45360d 100644 --- a/libavcodec/wavpackenc.c +++ b/libavcodec/wavpackenc.c @@ -2963,7 +2963,8 @@ const FFCodec ff_wavpack_encoder = { CODEC_LONG_NAME("WavPack"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_WAVPACK, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SMALL_LAST_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(WavPackEncodeContext), .p.priv_class = &wavpack_encoder_class, .init = wavpack_encode_init, diff --git a/libavcodec/wbmpenc.c b/libavcodec/wbmpenc.c index 25fac746fc..abb66b4ca9 100644 --- a/libavcodec/wbmpenc.c +++ b/libavcodec/wbmpenc.c @@ -80,7 +80,8 @@ const FFCodec ff_wbmp_encoder = { CODEC_LONG_NAME("WBMP (Wireless Application Protocol Bitmap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_WBMP, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(wbmp_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_MONOBLACK, diff --git a/libavcodec/wmaenc.c b/libavcodec/wmaenc.c index 2c647af13b..80ff696be6 100644 --- a/libavcodec/wmaenc.c +++ b/libavcodec/wmaenc.c @@ -440,7 +440,7 @@ const FFCodec ff_wmav1_encoder = { CODEC_LONG_NAME("Windows Media Audio 1"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_WMAV1, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(WMACodecContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_superframe), @@ -456,7 +456,7 @@ const FFCodec ff_wmav2_encoder = { CODEC_LONG_NAME("Windows Media Audio 2"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_WMAV2, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(WMACodecContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_superframe), diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 05f993525d..6d991909fb 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -242,6 +242,7 @@ const FFCodec ff_wmv2_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_WMV2, .p.priv_class = &ff_mpv_enc_class, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(WMV2EncContext), .init = wmv2_encode_init, FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), diff --git a/libavcodec/wrapped_avframe.c b/libavcodec/wrapped_avframe.c index c9579848e6..0278ea42ba 100644 --- a/libavcodec/wrapped_avframe.c +++ b/libavcodec/wrapped_avframe.c @@ -109,6 +109,7 @@ const FFCodec ff_wrapped_avframe_encoder = { CODEC_LONG_NAME("AVFrame to AVPacket passthrough"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_WRAPPED_AVFRAME, + .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(wrapped_avframe_encode), }; diff --git a/libavcodec/xbmenc.c b/libavcodec/xbmenc.c index 664c6599bf..cd8b73afa3 100644 --- a/libavcodec/xbmenc.c +++ b/libavcodec/xbmenc.c @@ -82,7 +82,7 @@ const FFCodec ff_xbm_encoder = { CODEC_LONG_NAME("XBM (X BitMap) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_XBM, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(xbm_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MONOWHITE, AV_PIX_FMT_NONE }, diff --git a/libavcodec/xfaceenc.c b/libavcodec/xfaceenc.c index 7125f1f085..4998d42ea5 100644 --- a/libavcodec/xfaceenc.c +++ b/libavcodec/xfaceenc.c @@ -216,7 +216,7 @@ const FFCodec ff_xface_encoder = { CODEC_LONG_NAME("X-face image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_XFACE, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MONOWHITE, AV_PIX_FMT_NONE }, .priv_data_size = sizeof(XFaceContext), FF_CODEC_ENCODE_CB(xface_encode_frame), diff --git a/libavcodec/xwdenc.c b/libavcodec/xwdenc.c index 6c588f3acc..08554d8632 100644 --- a/libavcodec/xwdenc.c +++ b/libavcodec/xwdenc.c @@ -216,7 +216,7 @@ const FFCodec ff_xwd_encoder = { CODEC_LONG_NAME("XWD (X Window Dump) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_XWD, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, FF_CODEC_ENCODE_CB(xwd_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_BGRA, AV_PIX_FMT_RGBA, diff --git a/libavcodec/y41penc.c b/libavcodec/y41penc.c index d3ef88c2ce..e86769da66 100644 --- a/libavcodec/y41penc.c +++ b/libavcodec/y41penc.c @@ -82,7 +82,7 @@ const FFCodec ff_y41p_encoder = { CODEC_LONG_NAME("Uncompressed YUV 4:1:1 12-bit"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_Y41P, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .init = y41p_encode_init, FF_CODEC_ENCODE_CB(y41p_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV411P, diff --git a/libavcodec/yuv4enc.c b/libavcodec/yuv4enc.c index 27e786dd54..8123260d5d 100644 --- a/libavcodec/yuv4enc.c +++ b/libavcodec/yuv4enc.c @@ -64,7 +64,7 @@ const FFCodec ff_yuv4_encoder = { CODEC_LONG_NAME("Uncompressed packed 4:2:0"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_YUV4, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, FF_CODEC_ENCODE_CB(yuv4_encode_frame), }; diff --git a/libavcodec/zmbvenc.c b/libavcodec/zmbvenc.c index c12f783d5a..d20330568d 100644 --- a/libavcodec/zmbvenc.c +++ b/libavcodec/zmbvenc.c @@ -416,7 +416,7 @@ const FFCodec ff_zmbv_encoder = { CODEC_LONG_NAME("Zip Motion Blocks Video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_ZMBV, - .p.capabilities = AV_CODEC_CAP_DR1, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(ZmbvEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), From patchwork Sun Nov 27 17:03:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39542 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295465pxb; Sun, 27 Nov 2022 09:09:14 -0800 (PST) X-Google-Smtp-Source: AA0mqf7J+Vqjc37/6fzFy0e14AR+TYB/j0dhyb5YIDCGhyVhUgdrfOkm+SgdbnmlgZqrhrEYpYJ0 X-Received: by 2002:a05:6402:528d:b0:468:dc9:ec08 with SMTP id en13-20020a056402528d00b004680dc9ec08mr29346199edb.17.1669568954507; Sun, 27 Nov 2022 09:09:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568954; cv=none; d=google.com; s=arc-20160816; b=X6S+C8yfTZJWKebsAH+OCwZP1rP1bRTPbRuLL9qLwIxQriUDVxplLqYcN6IKuP9xAR hInhdf5vHCH09mEV/DWPKi1cYuTOj9plu2lLVEyumXRvlYX2AtGlVKznrp40gcQDtxlo kWyAVd18sRf+jx1hJwzOGVAtWd3CD7LLDF6SRaWNEiOYm1qtVJvUzMMJBEOARjqW2T5J 5hIU9kGOgl0b5SMYugXJsK3Z0tgPfn+j5Xmf6taMOvAp+cqns4zgZfAni5kSG9NaaMm5 N1kqVd0XVBC2beOo2OOKkjhW2Z5R1u7hOmhjHaM1LZ2oG+1SCOIgQpM4duJ9eJ+Forl9 /PJw== 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=Q+v3tASp6NkH6rIMgYEuguc7Q8hTgbZ7j2PqVCExo/s=; b=IHgDPjY6NneqthBGtsibWfD0pTX0kBegNlrRRoyjdHqjJuvadmeJ1bxQAR0aZMCp+P cY4VtU/dsz5nwtXYb57P6N7qmhDh32r5NhGDpMBlVCvcaCstEHM7AqonbnWKfSw1vKYG ek/8+DATSMUGRdpJzaGeQnHjfj4ozFxZFBfbhSgcuQW4C4zsjwA8xxmps6tyEdApJgWs 0hQVSYEuPVlrk6iTrbmeTWBEVdRGaos7iDuKzCygYIIBlYHMSsoHE2u8wqWI5ZLjwyiT JKsSbw712lujcdes/l3JHoN8kjZfhhh7comI+86tN8uBci3IH3pf5iWCYoJlNRbJWgjq X+vQ== 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 g8-20020a056402320800b0046afbd6c84fsi2911605eda.553.2022.11.27.09.09.14; Sun, 27 Nov 2022 09:09:14 -0800 (PST) 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 0CAF268BC47; Sun, 27 Nov 2022 19:06:21 +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 F360968B735 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id DD1682406CD for ; Sun, 27 Nov 2022 18:05:56 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id nAxcrYq6Z51H for ; Sun, 27 Nov 2022 18:05:55 +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 AA5B32406CB for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 999483A25E9 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:39 +0100 Message-Id: <20221127170351.11477-18-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 18/30] lavc/encode: pass through frame durations to encoded packets 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: UrAX2061v3So Content-Length: 4214 The generic code can only handle the no-delay case. Encoders with delay need to be handled individually, which will be done in the following commits. --- doc/APIchanges | 2 +- libavcodec/avcodec.h | 7 +++++++ libavcodec/encode.c | 14 ++++++++++++-- libavcodec/options_table.h | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index a3c9819e32..4ae5571f71 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,7 +15,7 @@ libavutil: 2021-04-27 API changes, most recent first: 2022-12-xx - xxxxxxxxxx - lavc 59.55.100 - avcodec.h - Add AV_CODEC_FLAG_COPY_OPAQUE. + Add AV_CODEC_FLAG_COPY_OPAQUE and AV_CODEC_FLAG_FRAME_DURATION. 2022-11-xx - xxxxxxxxxx - lavu 57.43.100 - tx.h Add AV_TX_FLOAT_DCT, AV_TX_DOUBLE_DCT and AV_TX_INT32_DCT. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 79558786ee..a31d413179 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -249,6 +249,13 @@ typedef struct RcOverride{ * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. */ #define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) +/** + * Signal to the encoder that the values of AVFrame.duration are valid and + * should be used (typically for transferring them to output packets). + * + * If this flag is not set, frame durations are ignored. + */ +#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) /** * Use internal 2pass ratecontrol in first pass mode. */ diff --git a/libavcodec/encode.c b/libavcodec/encode.c index e4270b6c34..00b7a7dde8 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -215,10 +215,13 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, if (avpkt->pts == AV_NOPTS_VALUE) avpkt->pts = frame->pts; - if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { - if (!avpkt->duration) + if (!avpkt->duration) { + if (frame->duration) + avpkt->duration = frame->duration; + else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples); + } } avctx->reordered_opaque = frame->reordered_opaque; @@ -454,6 +457,13 @@ FF_ENABLE_DEPRECATION_WARNINGS return ret; } + // unset frame duration unless AV_CODEC_FLAG_FRAME_DURATION is set, + // since otherwise we cannot be sure that whatever value it has is in the + // right timebase, so we would produce an incorrect value, which is worse + // than none at all + if (!(avctx->flags & AV_CODEC_FLAG_FRAME_DURATION)) + dst->duration = 0; + return 0; } diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index ad41dc7bed..011314db96 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -59,6 +59,7 @@ static const AVOption avcodec_options[] = { {"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, {"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"}, {"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"}, +{"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"}, {"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, From patchwork Sun Nov 27 17:03:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39569 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295657pxb; Sun, 27 Nov 2022 09:09:31 -0800 (PST) X-Google-Smtp-Source: AA0mqf6jF+sWbyX9WjMNm9Yc4Jb9PrBLXK46f0dZmN0Db71Rbs6hqfd3S4ckn3pwl4azR4xTcK9g X-Received: by 2002:aa7:c84d:0:b0:468:354b:280d with SMTP id g13-20020aa7c84d000000b00468354b280dmr45015180edt.178.1669568971362; Sun, 27 Nov 2022 09:09:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568971; cv=none; d=google.com; s=arc-20160816; b=Endaey+keqyPxuwtsWD8SKQ0nchjUOL1aL+CX+qzWMScWd76lkDnewR0iitSDPIRN6 rAdgclMuw1pWPadyGTvGBvurJfqbfHHZPeON3Fjx6gbveAwwdSea2yum7pjxwkWBNryL 1LnsmQ1rPIiRA2l8tl/s9j2EV+0bBdyhCyZPJ7RC1rZ1b6iIP5P0WhMCnIjJ56OxDDoR DVPozNTzwXd5gEiPhFcoiX+0N0SheAEZtBnGl/hyqk4ffDbsUNZNlw7waB7nSBuiRN7P E+iibK4EdLrblNg5WqJPuPEGj7m8JEhkmO6A6KwC2hZjBJmlBd0kW9E++XRNjX7Lh/M9 K+Kg== 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=s8nRzZwZNNv9yy9F5XWci0bTMDWB3dnt8QohaLTl5mM=; b=t6RoDEhYkpvcCcwBpwjq42wX4r6UTuw5kN3qbdq35kL5w9Be6q/qV+C1mx39qaRCHH bzVOLvtpBCs+FqbKQRvjRURLdRlMWYcjzQ6jzHyNyNVGmr7f1oV2AN/Mvlt7lOjOZ/Dl H/tHjKdIzdnJ574qxaie3LnvrPrZkOJu0kVe5vIbjogSezX9n9XeiWAwwyfy5jQilivu HY35esT0FqUbcMY3Og9Bba6u5yAkULHAfsFkUB7ArW/ljl60Woklk1puJbEGbKYoLlsm kFLgixRUv3b3eHf0yMh2HA1YtJdy306O6Wjd8AfvzpM+CwnUgOC+IkDMLY37yIQSK8n7 Wmxw== 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 cr2-20020a170906d54200b007ae1723e8d7si10190629ejc.610.2022.11.27.09.09.31; Sun, 27 Nov 2022 09:09:31 -0800 (PST) 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 0FBED68BC6E; Sun, 27 Nov 2022 19:06:23 +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 3866468BA30 for ; Sun, 27 Nov 2022 19:06:03 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id C705E240499 for ; Sun, 27 Nov 2022 18:06:02 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id VIpjbDwz_acC for ; Sun, 27 Nov 2022 18:06:02 +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 E3C85240D1D for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A56033A25EA for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:40 +0100 Message-Id: <20221127170351.11477-19-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 19/30] lavc/librav1e: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: VPvoicdj0q6k Content-Length: 4646 --- libavcodec/librav1e.c | 61 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index 4f424caf5b..669bfd5428 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -22,6 +22,7 @@ #include +#include "libavutil/buffer.h" #include "libavutil/internal.h" #include "libavutil/avassert.h" #include "libavutil/base64.h" @@ -53,6 +54,15 @@ typedef struct librav1eContext { int tile_cols; } librav1eContext; +typedef struct FrameData { + int64_t pts; + int64_t duration; + int64_t reordered_opaque; + + void *frame_opaque; + AVBufferRef *frame_opaque_ref; +} FrameData; + static inline RaPixelRange range_map(enum AVPixelFormat pix_fmt, enum AVColorRange range) { switch (pix_fmt) { @@ -420,11 +430,23 @@ end: return ret; } +static void frame_data_free(void *data) +{ + FrameData *fd = data; + + if (!fd) + return; + + av_buffer_unref(&fd->frame_opaque_ref); + av_free(data); +} + static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) { librav1eContext *ctx = avctx->priv_data; RaFrame *rframe = ctx->rframe; RaPacket *rpkt = NULL; + FrameData *fd; int ret; if (!rframe) { @@ -437,18 +459,30 @@ static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) if (frame->buf[0]) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); - int64_t *pts = av_malloc(sizeof(int64_t)); - if (!pts) { + fd = av_mallocz(sizeof(*fd)); + if (!fd) { av_log(avctx, AV_LOG_ERROR, "Could not allocate PTS buffer.\n"); return AVERROR(ENOMEM); } - *pts = frame->pts; + fd->pts = frame->pts; + fd->duration = frame->duration; + fd->reordered_opaque = frame->reordered_opaque; + + fd->frame_opaque = frame->opaque; + if (frame->opaque_ref && avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + fd->frame_opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!fd->frame_opaque_ref) { + frame_data_free(fd); + av_frame_unref(frame); + return AVERROR(ENOMEM); + } + } rframe = rav1e_frame_new(ctx->ctx); if (!rframe) { av_log(avctx, AV_LOG_ERROR, "Could not allocate new rav1e frame.\n"); av_frame_unref(frame); - av_freep(&pts); + frame_data_free(fd); return AVERROR(ENOMEM); } @@ -460,7 +494,7 @@ static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) frame->linesize[i], bytes); } av_frame_unref(frame); - rav1e_frame_set_opaque(rframe, pts, av_free); + rav1e_frame_set_opaque(rframe, fd, frame_data_free); } } @@ -536,8 +570,18 @@ retry: if (rpkt->frame_type == RA_FRAME_TYPE_KEY) pkt->flags |= AV_PKT_FLAG_KEY; - pkt->pts = pkt->dts = *((int64_t *) rpkt->opaque); - av_free(rpkt->opaque); + fd = rpkt->opaque; + pkt->pts = pkt->dts = fd->pts; + pkt->duration = fd->duration; + avctx->reordered_opaque = fd->reordered_opaque; + + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = fd->frame_opaque; + pkt->opaque_ref = fd->frame_opaque_ref; + fd->frame_opaque_ref = NULL; + } + + frame_data_free(fd); if (avctx->flags & AV_CODEC_FLAG_RECON_FRAME) { AVCodecInternal *avci = avctx->internal; @@ -627,7 +671,8 @@ const FFCodec ff_librav1e_encoder = { .defaults = librav1e_defaults, .p.pix_fmts = librav1e_pix_fmts, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS | - AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_RECON_FRAME, + AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_RECON_FRAME | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, .p.wrapper_name = "librav1e", From patchwork Sun Nov 27 17:03:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39571 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295285pxb; Sun, 27 Nov 2022 09:08:58 -0800 (PST) X-Google-Smtp-Source: AA0mqf73I4ry7cvR6tKMWRN2h0Q3lUjHO7I5cyq+5ss0kQfiklZeA1+V+faOWAZpTcyH9qa0hEVX X-Received: by 2002:a17:907:d60c:b0:7ae:e592:6d83 with SMTP id wd12-20020a170907d60c00b007aee5926d83mr16825183ejc.699.1669568937982; Sun, 27 Nov 2022 09:08:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568937; cv=none; d=google.com; s=arc-20160816; b=UmNnRUnlYw/0Ywr1cg6hu9xDH069wHPJv9iPzf2dCJT/8luWh3XDQfoyAfQfsftNUQ 2bBnm1YLW7scLHIT+ZlAngJdLbWkc/hhE9mxzZqatr9bON7WAABJOShtOmovQ4QlY6i2 Wp5WCbLWhaE7+ZOtKx3S3qwOlRQeEVK3HD3T1b2KmEEqXn2tgGPq1gpTt+os/bHwJg6r 56oaTbzsrSXSYllfpED+ZxHRtzNrvP5t0jU4SzJn/Wwg5kAcd7tZexNl1BcVvNQKDaw3 3YhyxrY2iQthP7iNXEoqz8jdIX1OAy/86NlnDhdbCzGWa0gtGLRtGR1G+Te3MxJMRR8p tmHA== 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=jawVmwB2UD4vCYePZgp6jnePhwUTz7cFRcQzVsVD3X8=; b=yJ38EoKC+O4ho48wkpPPePz5Z9X1eVQDlKkwU9oADvqKcd0WEI0wOgSnJXhajPTNWl PNrSgDMIl0ML6Yad1ynih49vNIAPdGKV31fsEdtAnhWxOZnsh5lk6RNSLEPV902d4l32 CfoDH5RtXhwG+Ic3i5qFMdzrgtYzWP8QXIwBZqqu6OXTKZM79iGL0OFL7rStMdWSGrvq V+rUd+tWtUEARTBQLY/Je3AMt79KLq+dpBhGCm7egdTILH6IJ8fKoY9vch+wTKUpy+Tk hnQRpYBXN7demgKZRwYhOoXfdk8pwbYznC46CejachEK+NYY8c9dyRI7JrAi8XS6IZmv k9gg== 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 ds12-20020a170907724c00b007bc93454b3fsi7285091ejc.953.2022.11.27.09.08.57; Sun, 27 Nov 2022 09:08:57 -0800 (PST) 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 0D13468BC2A; Sun, 27 Nov 2022 19:06:19 +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 CEA9768B735 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id D9FBB2406CA for ; Sun, 27 Nov 2022 18:05:55 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id X0dMjoxAYmmK for ; Sun, 27 Nov 2022 18:05:55 +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 B9E4B2406CC for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id B115B3A25EC for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:41 +0100 Message-Id: <20221127170351.11477-20-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 20/30] lavc/nvenc: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: XF/xyrlc0OfW Content-Length: 9931 --- libavcodec/nvenc.c | 102 ++++++++++++++++++++++++++++++++-------- libavcodec/nvenc.h | 2 +- libavcodec/nvenc_av1.c | 3 +- libavcodec/nvenc_h264.c | 3 +- libavcodec/nvenc_hevc.c | 3 +- 5 files changed, 89 insertions(+), 24 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 9726c565d3..80f78155f2 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -28,6 +28,7 @@ #include "av1.h" #endif +#include "libavutil/buffer.h" #include "libavutil/hwcontext_cuda.h" #include "libavutil/hwcontext.h" #include "libavutil/cuda_check.h" @@ -162,6 +163,23 @@ static int nvenc_print_error(AVCodecContext *avctx, NVENCSTATUS err, return ret; } +typedef struct FrameData { + int64_t pts; + int64_t duration; + int64_t reordered_opaque; + + void *frame_opaque; + AVBufferRef *frame_opaque_ref; +} FrameData; + +static void reorder_queue_flush(AVFifo *queue) +{ + FrameData fd; + + while (av_fifo_read(queue, &fd, 1) >= 0) + av_buffer_unref(&fd.frame_opaque_ref); +} + typedef struct GUIDTuple { const GUID guid; int flags; @@ -1743,8 +1761,8 @@ static av_cold int nvenc_setup_surfaces(AVCodecContext *avctx) if (!ctx->surfaces) return AVERROR(ENOMEM); - ctx->timestamp_list = av_fifo_alloc2(ctx->nb_surfaces, sizeof(int64_t), 0); - if (!ctx->timestamp_list) + ctx->reorder_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(FrameData), 0); + if (!ctx->reorder_queue) return AVERROR(ENOMEM); ctx->unused_surface_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(NvencSurface*), 0); @@ -1828,7 +1846,8 @@ av_cold int ff_nvenc_encode_close(AVCodecContext *avctx) p_nvenc->nvEncEncodePicture(ctx->nvencoder, ¶ms); } - av_fifo_freep2(&ctx->timestamp_list); + reorder_queue_flush(ctx->reorder_queue); + av_fifo_freep2(&ctx->reorder_queue); av_fifo_freep2(&ctx->output_surface_ready_queue); av_fifo_freep2(&ctx->output_surface_queue); av_fifo_freep2(&ctx->unused_surface_queue); @@ -2172,18 +2191,45 @@ static void nvenc_codec_specific_pic_params(AVCodecContext *avctx, } } -static inline void timestamp_queue_enqueue(AVFifo *queue, int64_t timestamp) +static void reorder_queue_enqueue(AVFifo *queue, const AVCodecContext *avctx, + const AVFrame *frame, AVBufferRef **opaque_ref) { - av_fifo_write(queue, ×tamp, 1); + FrameData fd; + + fd.pts = frame->pts; + fd.duration = frame->duration; + fd.reordered_opaque = frame->reordered_opaque; + fd.frame_opaque = frame->opaque; + fd.frame_opaque_ref = *opaque_ref; + + *opaque_ref = NULL; + + av_fifo_write(queue, &fd, 1); } -static inline int64_t timestamp_queue_dequeue(AVFifo *queue) +static int64_t reorder_queue_dequeue(AVFifo *queue, AVCodecContext *avctx, + AVPacket *pkt) { - int64_t timestamp = AV_NOPTS_VALUE; + FrameData fd; + // The following call might fail if the queue is empty. - av_fifo_read(queue, ×tamp, 1); + if (av_fifo_read(queue, &fd, 1) < 0) + return AV_NOPTS_VALUE; + + if (pkt) { + avctx->reordered_opaque = fd.reordered_opaque; + pkt->duration = fd.duration; + + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = fd.frame_opaque; + pkt->opaque_ref = fd.frame_opaque_ref; + fd.frame_opaque_ref = NULL; + } + } + + av_buffer_unref(&fd.frame_opaque_ref); - return timestamp; + return fd.pts; } static int nvenc_set_timestamp(AVCodecContext *avctx, @@ -2191,12 +2237,14 @@ static int nvenc_set_timestamp(AVCodecContext *avctx, AVPacket *pkt) { NvencContext *ctx = avctx->priv_data; + int64_t dts; pkt->pts = params->outputTimeStamp; + dts = reorder_queue_dequeue(ctx->reorder_queue, avctx, pkt); + if (avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) { - pkt->dts = timestamp_queue_dequeue(ctx->timestamp_list); - pkt->dts -= FFMAX(ctx->encode_config.frameIntervalP - 1, 0) * FFMAX(avctx->ticks_per_frame, 1); + pkt->dts = dts - FFMAX(ctx->encode_config.frameIntervalP - 1, 0) * FFMAX(avctx->ticks_per_frame, 1); } else { pkt->dts = pkt->pts; } @@ -2293,7 +2341,7 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, NvencSur return 0; error: - timestamp_queue_dequeue(ctx->timestamp_list); + reorder_queue_dequeue(ctx->reorder_queue, avctx, NULL); error2: return res; @@ -2523,6 +2571,8 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) int sei_count = 0; int i; + AVBufferRef *opaque_ref = NULL; + NvencContext *ctx = avctx->priv_data; NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs; NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &dl_fn->nvenc_funcs; @@ -2590,9 +2640,17 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) pic_params.encodePicFlags = NV_ENC_PIC_FLAG_EOS; } + // make a reference for enqueing in the reorder queue here, + // so that reorder_queue_enqueue() cannot fail + if (frame && frame->opaque_ref && avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!opaque_ref) + return AVERROR(ENOMEM); + } + res = nvenc_push_context(avctx); if (res < 0) - return res; + goto opaque_ref_fail; nv_status = p_nvenc->nvEncEncodePicture(ctx->nvencoder, &pic_params); @@ -2601,17 +2659,17 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) res = nvenc_pop_context(avctx); if (res < 0) - return res; + goto opaque_ref_fail; if (nv_status != NV_ENC_SUCCESS && - nv_status != NV_ENC_ERR_NEED_MORE_INPUT) - return nvenc_print_error(avctx, nv_status, "EncodePicture failed!"); + nv_status != NV_ENC_ERR_NEED_MORE_INPUT) { + res = nvenc_print_error(avctx, nv_status, "EncodePicture failed!"); + goto opaque_ref_fail; + } if (frame && frame->buf[0]) { av_fifo_write(ctx->output_surface_queue, &in_surf, 1); - - if (avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) - timestamp_queue_enqueue(ctx->timestamp_list, frame->pts); + reorder_queue_enqueue(ctx->reorder_queue, avctx, frame, &opaque_ref); } /* all the pending buffers are now ready for output */ @@ -2621,6 +2679,10 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) } return 0; + +opaque_ref_fail: + av_buffer_unref(&opaque_ref); + return res; } int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt) @@ -2679,5 +2741,5 @@ av_cold void ff_nvenc_encode_flush(AVCodecContext *avctx) NvencContext *ctx = avctx->priv_data; nvenc_send_frame(avctx, NULL); - av_fifo_reset2(ctx->timestamp_list); + reorder_queue_flush(ctx->reorder_queue); } diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 05a7ac48b1..411c83aa94 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -171,7 +171,7 @@ typedef struct NvencContext AVFifo *unused_surface_queue; AVFifo *output_surface_queue; AVFifo *output_surface_ready_queue; - AVFifo *timestamp_list; + AVFifo *reorder_queue; NV_ENC_SEI_PAYLOAD *sei_data; int sei_data_size; diff --git a/libavcodec/nvenc_av1.c b/libavcodec/nvenc_av1.c index 2ed99d948b..2b349c7b61 100644 --- a/libavcodec/nvenc_av1.c +++ b/libavcodec/nvenc_av1.c @@ -181,7 +181,8 @@ const FFCodec ff_av1_nvenc_encoder = { .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | - AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1, + AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "nvenc", diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index a69358b03b..5dc2961c3b 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -232,7 +232,8 @@ const FFCodec ff_h264_nvenc_encoder = { .p.priv_class = &h264_nvenc_class, .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | - AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1, + AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_nvenc_pix_fmts, diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 5ad423444a..1362a927c8 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -214,7 +214,8 @@ const FFCodec ff_hevc_nvenc_encoder = { .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | - AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1, + AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "nvenc", From patchwork Sun Nov 27 17:03:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39506 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960484pzb; Sun, 27 Nov 2022 09:08:11 -0800 (PST) X-Google-Smtp-Source: AA0mqf4CyovXh8UXpFC2Mpx4LLihMIrqiI5XSvs2bVIh/vact49TuJc0KX8tWFOzTmQwcvTIqaVq X-Received: by 2002:aa7:c50b:0:b0:469:d36e:3213 with SMTP id o11-20020aa7c50b000000b00469d36e3213mr27983939edq.206.1669568890839; Sun, 27 Nov 2022 09:08:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568890; cv=none; d=google.com; s=arc-20160816; b=Ye4W4asmkTyeqeT08VSzk8Td96ZA7TYo3u0O0/e9GYVVrng3zkEgIJGL7JmXqX2JEd IylDefN72VXiMeizPfkS+W39vWUU3RmS84z+sRD8kuCGg2wHdLtcyrJn2toE7lnwiwzh 8mKH8VP0d0xW36gIIl9COGjp0yjHc2e4BaMOIy2LWjlgxQ1xdST8JihfpU169PcymDip NHPDhKc4DfNz6XfziEiL31BtLb59HYnqPE/KqFHLdYBrst7DXwbelarHS+ue/VyXDHd8 aQ20QtAqYFYW3W63HRBuOEyk0WSdbLq262GDQh107pA62wXwCQW+xnfJJyyL9vfQfUji gWLw== 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=ZEOaHE0iX35CKMlRZRwessRKPfOdJfKLrdQeA+ZtS1Y=; b=0i8R4F9LnM3hQ0gM/YinR77UfPMNHRHLPXWAAOGkiSpKJiy3RNNKwyOKOCa1IvGS3p ODMP6q0TTBqZpkJoDsVKaX8MBI0U0P1wHsitbuM0gH2Yk5yndIqZzs8/zlsJv2wfNpUs NJv9kht4BwoyA4iWGAXSVilisVkMShNKrrpn8fXEUB+dVdovDooWmFNWyczA5m2Nvlna 5JLAtoVf9knc4HafZ44DFZ3LfFD1oerNTE21kGF6Iy+BbHptsZHdSxpOASKAH0J5hHM+ 21KdfPPmIA4dFMKUfCD6kRsuilk+o7GfDeGhyXGVb4dT7qQzH+h9yNtQ+cwEEPI9rX23 Y1VA== 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 a8-20020a05640213c800b00461d02225a3si7432374edx.448.2022.11.27.09.08.10; Sun, 27 Nov 2022 09:08:10 -0800 (PST) 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 4A29C68BBD1; Sun, 27 Nov 2022 19:06:13 +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 E384E6808AB for ; Sun, 27 Nov 2022 19:06:01 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A12E6240499 for ; Sun, 27 Nov 2022 18:06:01 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id rPzE83YZ8o6y for ; Sun, 27 Nov 2022 18:06:01 +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 EDE13240D1F for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id BCB9E3A25F1 for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:42 +0100 Message-Id: <20221127170351.11477-21-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 21/30] lavc/adxenc: rescale packet duration according to timebase 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: cQqJGRiejmE4 The timebase does not always have to be 1/samplerate. --- libavcodec/adxenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/adxenc.c b/libavcodec/adxenc.c index 153c91b852..e1bf344b01 100644 --- a/libavcodec/adxenc.c +++ b/libavcodec/adxenc.c @@ -184,7 +184,7 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, } avpkt->pts = frame->pts; - avpkt->duration = frame->nb_samples; + avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples); *got_packet_ptr = 1; return 0; } From patchwork Sun Nov 27 17:03:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39573 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295422pxb; Sun, 27 Nov 2022 09:09:09 -0800 (PST) X-Google-Smtp-Source: AA0mqf4Y/swiCsHUzzMdqNjcn/tbq4dbC8tRLZNcy0b4X9h7VuFACHvukCkPOkqLwSe4JIJRLJQp X-Received: by 2002:a17:906:2e82:b0:7ae:44b2:cb7f with SMTP id o2-20020a1709062e8200b007ae44b2cb7fmr25782099eji.437.1669568949189; Sun, 27 Nov 2022 09:09:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568949; cv=none; d=google.com; s=arc-20160816; b=Pd3bH+Z7g1b7x7Fa/pw71g9wUZntrP/vPgkHPcSHSmva5ZYearRCDa2Gxc984sMF// vMeomEtTJ1TsPmjRCGrmNr7iFQUxcOU/p3ZyDWJ87UJID6fHLQW2j65LADB7bLU99FuU a58TCRauEw8aEI+upmb5kEuZWGn0HBMymnDK1b0heDqADBNeUUCRz8BNSnZJPjxMT+7K gSe7pLPBJbv086VE50hGohWxAoi2sFyJybeqmc8j6ZlijK62Wljl8bd8WCSldMPT4Cs4 ISvOK5zTq+U9vSTnpfHHi1t4OuNrDWREeH2NXUlWIFsN0etIDvhUFU8qR6DEVfPucqXF CVDw== 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=yOw3rrQ528upIndFZouPMoGunTmSHdj7bsSj+mqD3r0=; b=m5IFwL9VKvT1gnFLWsj4NDd4jkuykP4+/685prUjenCTKqaEFEysUPhZ6YMmkURK6g bTRVDKH9D/FbijXs0EqTXwJsZkMQQOfJMzN4fZdfIRPYgKHhRw9F5VXqPYQDzorA3XxQ QVrv3AgTqdWtrGCZ6VdFKK/5OWqAZ4wN5rhQDfXFcIdOI+jniIn5pMDFLZPp7W6cdpJb 67lt/v7is3FZYd1OABzYvoMuQMkiS8hjNvmnxhOcPvO0ew0q8hUKuATlmliE35Y2nbDV gmPMPDIpBeHRR+0Iaxmhbs73c8Kr2caM6jrVvvTByWHx9JhS3KK1P5BH5NCsWKZOpsrz FGaw== 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 g10-20020a056402180a00b0045d3e06e4d5si7271182edy.389.2022.11.27.09.09.08; Sun, 27 Nov 2022 09:09:09 -0800 (PST) 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 7CC7168BC3B; Sun, 27 Nov 2022 19:06:20 +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 DBBB468B9E8 for ; Sun, 27 Nov 2022 19:05:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 64A312406CC for ; Sun, 27 Nov 2022 18:05:56 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id NeiKCKn2N1z7 for ; Sun, 27 Nov 2022 18:05:55 +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 C1B952406CD for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C87083A25FB for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:43 +0100 Message-Id: <20221127170351.11477-22-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 22/30] lavc/adxenc: support AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: CdTo9FYL5UQz Content-Length: 1598 --- libavcodec/adxenc.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/libavcodec/adxenc.c b/libavcodec/adxenc.c index e1bf344b01..9e0ceb61eb 100644 --- a/libavcodec/adxenc.c +++ b/libavcodec/adxenc.c @@ -185,6 +185,18 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, avpkt->pts = frame->pts; avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples); + + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + avpkt->opaque = frame->opaque; + if (frame->opaque_ref) { + avpkt->opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!avpkt->opaque_ref) + return AVERROR(ENOMEM); + } + } + + avctx->reordered_opaque = frame->reordered_opaque; + *got_packet_ptr = 1; return 0; } @@ -194,7 +206,8 @@ const FFCodec ff_adpcm_adx_encoder = { CODEC_LONG_NAME("SEGA CRI ADX ADPCM"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ADPCM_ADX, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(ADXContext), .init = adx_encode_init, FF_CODEC_ENCODE_CB(adx_encode_frame), From patchwork Sun Nov 27 17:03:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39572 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a05:6a11:561f:b0:33d:fc04:f431 with SMTP id rr31csp8295778pxb; Sun, 27 Nov 2022 09:09:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf6bjxNM5z8QgRwTqQna8K2TjZs6hfW6bOur1NayIVpWMGdd0Fo6rO/0VSlrRUiZhH6D6lQx X-Received: by 2002:aa7:dbc7:0:b0:45f:b80f:1fe8 with SMTP id v7-20020aa7dbc7000000b0045fb80f1fe8mr42573844edt.118.1669568981600; Sun, 27 Nov 2022 09:09:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568981; cv=none; d=google.com; s=arc-20160816; b=oSddTAEbDjJIaFV50tcXew8WnpQyvZTeQqpXZ2zn+lG5C7cBofouqWYFLPRE8MToNs N+BivGTB2LaSTnZ0MUa5r9+qJhLMwqdm5J0Gi+DTTa6SNTfD7dCMt1FzcifA0U9AyKHp Ck7V4XgoMEzdoH30jHddKHhqfXDAYkRu+UbeiXaPitqJcwp5MJxXLLZkn/Vb0LbPiIQZ QLi+N/fiCHFFx8ENfzRhZlQ+bv8qJbUqyFqHj76xx4n+HRO0Qo2Yw+OUz5ASD2VDyhcE 5mB53h5N8sUY1HDM5qsnZ7nPB4R3eXHSi9+H1zWAaRIlvBQX51l/kxRQD4y6LL7d1lsQ Ww5Q== 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=FEv8wuDwktNjlLLbPTaj7QJdfMMqD5b5gZLKWlcg5F4=; b=O2fKRQ3JsIQBTPUHM2cNWWN77k7U7tnbewcc8jU9PGiITu3Uo60qNvoQLDXOXMHDAR R3uD2j4+jXn3qD42nLr+jpc0fbRdGBILnZ+XEKWT4/8zQEKSX0T18kcLdAri7K56u4Ku SuGd5m3yz+3bIZXbQlWUiyn+7HE48Ij+uBNANsCWIpgi7pnjrfZfYUkwGc1/5rZqRYfR ivnz8Sz6etpaos/E95EyEoUvB1J0vTnRcpZ8YOPa6slJFoidaMUUNLBrfEbXlXm4CeBG GSSqM0mCYUc7vy8ykbKwgkXNf5TW5IjtBiarG+G2H/U4VVIyOH2XoXDqHsqBA71XTqt7 3Shw== 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 g8-20020a056402090800b0046900e66a54si9005493edz.517.2022.11.27.09.09.41; Sun, 27 Nov 2022 09:09:41 -0800 (PST) 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 B912F68BC81; Sun, 27 Nov 2022 19:06:24 +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 387EC68BA53 for ; Sun, 27 Nov 2022 19:06:03 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 5917A2405EC for ; Sun, 27 Nov 2022 18:06:03 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Ck-DIyo_eKR3 for ; Sun, 27 Nov 2022 18:06:02 +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 F0FC9240D20 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D46193A25FC for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:44 +0100 Message-Id: <20221127170351.11477-23-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 23/30] lavc/ffv1enc: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: 2cH7XGD5IhC7 Content-Length: 1647 --- libavcodec/ffv1enc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 0237ac48eb..553abb558f 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1233,7 +1233,20 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, pkt->size = buf_p - pkt->data; pkt->pts = pkt->dts = pict->pts; + pkt->duration = pict->duration; pkt->flags |= AV_PKT_FLAG_KEY * f->key_frame; + + if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = pict->opaque; + if (pict->opaque_ref) { + pkt->opaque_ref = av_buffer_ref(pict->opaque_ref); + if (!pkt->opaque_ref) + return AVERROR(ENOMEM); + } + } + + avctx->reordered_opaque = pict->reordered_opaque; + *got_packet = 1; return 0; @@ -1272,7 +1285,8 @@ const FFCodec ff_ffv1_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_FFV1, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | - AV_CODEC_CAP_SLICE_THREADS, + AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(FFV1Context), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), From patchwork Sun Nov 27 17:03:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39498 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959732pzb; Sun, 27 Nov 2022 09:07:00 -0800 (PST) X-Google-Smtp-Source: AA0mqf5QYu5RpeJFGj1Ln+SW1R5kdFfS6J+6ZXeiwJPE4Y8DkThf+77WgT9IhasR4xYQ2Ku/CCCr X-Received: by 2002:a17:906:7f92:b0:783:7020:53a7 with SMTP id f18-20020a1709067f9200b00783702053a7mr39653631ejr.736.1669568820521; Sun, 27 Nov 2022 09:07:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568820; cv=none; d=google.com; s=arc-20160816; b=Z7Bg/+mEKRMmSn7vtdxtqr4iQOG6VY6gihRnsknaeQGmuFInVQILPOs+NI9007+WFS xrM8EsF5RWOlG6RjqcFhg16ukKW5bdSkwliG1gHa9/Ce3R0ayinKWc5QhCjsgFTYySW0 OtG3wsNKiuZVZPM5AA+/fDYd8Gn1Vo1kg/+fQSi2ieT/jjp+jcDiEk/w7R9LY0h9+2Fl xSq7PcExLyedXnF1VBf3F+cnF54cud1aKAPn/7ZqqKjhQN7/w4pEkjd8GJkSbYNzF/lB RwAOFj0biWmlPhS+7fDd44IddSWSRzLtTxQarFQsOAFlhKq3eU8jtQFGE74+wQgoW5S3 ZcsQ== 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=MJeBthUIKLkIhVObec1+mg29/iqUpilEbnnb2TuBcMw=; b=O3reEh6G0stktjtmD01OvO9P3oDrPK4v+3WNSXvylvE+FshzV8DR9aVnWRRFvBsBx3 CR9GV0KqYpn1FwQFOZ5fCvnm0n4rCS9kjlbTIdKhpH3NKLzgiW6D7qNVgv3+8oiihy37 BbMqO7FwODS3R80hiNjq2nhSWqryh1lzlOP4MZbAcLt7nGVLYvK4xBlUuxbHbD6dtYfN UkIG2y0ODcsCv7EnOsu1eZW1bVuzC2GsVA1vQ9Uu+/kY8HSDY+3dAFZ6H5YGkdPM4sDK JV8uNDgvbv9N6U8nBOzbsaZ6hh9+WKt8amCBEM/ofhJ8Z/VLlpCdqLFhYMavZ/Ij8e8g aUuQ== 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 j9-20020aa7c0c9000000b0046462065e1dsi7570329edp.291.2022.11.27.09.07.00; Sun, 27 Nov 2022 09:07:00 -0800 (PST) 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 44DAE68BA82; Sun, 27 Nov 2022 19:06:05 +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 5B77768B721 for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E908E2406CF for ; Sun, 27 Nov 2022 18:05:57 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id H7HRzMdsOE2n for ; Sun, 27 Nov 2022 18:05: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 CED672406D1 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id E01953A25FD for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:45 +0100 Message-Id: <20221127170351.11477-24-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 24/30] lavc/pngenc: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: RpNmHo16B0YN --- libavcodec/pngenc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index d1448bd0cd..a54cfcdd69 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -977,6 +977,19 @@ static int encode_apng(AVCodecContext *avctx, AVPacket *pkt, memcpy(pkt->data, s->last_frame_packet, s->last_frame_packet_size); pkt->pts = pkt->dts = s->last_frame->pts; + pkt->duration = s->last_frame->duration; + + if (s->last_frame->opaque_ref && + avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = s->last_frame->opaque; + if (s->last_frame->opaque_ref) { + pkt->opaque_ref = av_buffer_ref(s->last_frame->opaque_ref); + if (!pkt->opaque_ref) + return AVERROR(ENOMEM); + } + } + + avctx->reordered_opaque = s->last_frame->reordered_opaque; } if (pict) { @@ -1219,7 +1232,8 @@ const FFCodec ff_apng_encoder = { CODEC_LONG_NAME("APNG (Animated Portable Network Graphics) image"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_APNG, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .priv_data_size = sizeof(PNGEncContext), .init = png_enc_init, .close = png_enc_close, From patchwork Sun Nov 27 17:03:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39507 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960563pzb; Sun, 27 Nov 2022 09:08:19 -0800 (PST) X-Google-Smtp-Source: AA0mqf4PVBKrZVooOgENAQY+DH0EQ4sqR1sroC9+x6wPtCFrmbxkAOpAXDymfNUYnM3Z3pyaLXga X-Received: by 2002:a05:6402:1f14:b0:461:c7ef:b09e with SMTP id b20-20020a0564021f1400b00461c7efb09emr30826868edb.58.1669568899140; Sun, 27 Nov 2022 09:08:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568899; cv=none; d=google.com; s=arc-20160816; b=ed6SlzWBg7j4gFZLcxULkFlKmfbAE++n4R8vJ2ZQHqpEfQBoK4UFr245Q+fBjtrM6a ifZZXkpVmEWn1ZxSGK3CZsCgKp2AVKqrtbzh4A+fNxXqgOGSVV6ROmOEXFuCAFqq9uiz jjxVfEL/lz8q4Dbn6xA83WE+YQprBxnfSVGrXSjdhqBTziiBY+Fk532UzBPims9VLVS5 nBwW9PsF74cyF+atrUunLO8VJADtWnfUD7zvbx4yozPSEOstOnY3TXen7RLsymNNha+c xf+n6fV34WeXFuAPPI6ae44xicD9A4+VuPb9xpK0JVamqud4vKhDePJhD7mSiQcEa6q1 okfA== 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=EYitULfKRTquxtASfNzhQAgmZgYqIULeWb/YesicBGM=; b=mnQvZnS3igsGD4KbsRqg2T3yTH0lGAYEo2Uucxd/ArVMx8yeTotoaLUCeLixEHYuyl tpi2xvKo6IgBC6dTB2Beesvnz3cpNRk5Tt9P0oDe/QdRA54pGeB+KwudjgyW2nWoleOC bYH3HOgtr2PmCjiVLpNs32SLYcBVFAgpCTJdNvCRzg9nXYjLrXL5zNaI9ksb8B6BSSI1 SXcQ7aBxi17VE4Hyaj6sE8W7oCrck06N1e1Vh22gmXjLfVEPCsdKTBMAMn/ZyVgohUWK Hga4hoPA5+JsE3mdsIVRGOcd8O8iJZLhorvVRsMED8n8rZadoxQTqzBOplwK5AiuF3Ty HJ3w== 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 qf18-20020a1709077f1200b0078e27f2ef4bsi5899248ejc.956.2022.11.27.09.08.18; Sun, 27 Nov 2022 09:08:19 -0800 (PST) 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 4303168BBEE; Sun, 27 Nov 2022 19:06:14 +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 8065568B9E8 for ; Sun, 27 Nov 2022 19:06:02 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 23B11240499 for ; Sun, 27 Nov 2022 18:06:02 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id wt0MbzzoGDud for ; Sun, 27 Nov 2022 18:06:01 +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 F27FA240D21 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id EBB993A25FE for ; Sun, 27 Nov 2022 18:05:46 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:46 +0100 Message-Id: <20221127170351.11477-25-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 25/30] lavc/pngenc: stop setting dts unnecessarily for APNG 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: 4ZP2LsMwlscG APNG is not marked as supporting reordering, so dts will be set from pts by the generic code. --- libavcodec/pngenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index a54cfcdd69..009874cef5 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -976,7 +976,7 @@ static int encode_apng(AVCodecContext *avctx, AVPacket *pkt, return ret; memcpy(pkt->data, s->last_frame_packet, s->last_frame_packet_size); - pkt->pts = pkt->dts = s->last_frame->pts; + pkt->pts = s->last_frame->pts; pkt->duration = s->last_frame->duration; if (s->last_frame->opaque_ref && From patchwork Sun Nov 27 17:03:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39499 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959835pzb; Sun, 27 Nov 2022 09:07:09 -0800 (PST) X-Google-Smtp-Source: AA0mqf4TaLEEbt3AQTWT/9bm4BwvX5a4pCQ5svG808x5kYDbqKNPzQEWJkf6rLe5gU6AYEuw9P+i X-Received: by 2002:a05:6402:530c:b0:462:df63:5ec5 with SMTP id eo12-20020a056402530c00b00462df635ec5mr44283527edb.147.1669568829305; Sun, 27 Nov 2022 09:07:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568829; cv=none; d=google.com; s=arc-20160816; b=0yIsRAPWgiccG3SbsF865i5RmbHOI82AHozrSW9AFZk0P1c1m0HxNeuASGdPy2s5Ly jr34tpSB/Y7ElSOMbg1XgaXcZCtB3Tc6BnBRze9G0gakTGGSwzHzXG3HSsVjm5fcyKVX /EoTlq59LseYptPHRxu/7/0uzJAmcx/MspVtB7NbzuyedQs2qKvk9IGXhY2zqFurgKZy uCteMe7lOH8U+2FSA2QYCpd8YclauPezBA8N4byEvCLpoy2JTZt699/JlW/1nV4xYgRz lntDc3a+dKwcUJwB5oEGcx1dDphzBnfSry8Uau/RrgR79bk7gFG2BNEZb52EA9yP03KO 7UJA== 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=QvzDuwJrWZ23vHN/XUiur+iswVCUEp/D4yYUg8e3UK0=; b=yTzcmJ28hgwtQ9Eal8hVBqNjy+XDUa0WnFeHJUDbh1VBKeMp3jD34nWJJsvp7mKTvX YdmXNskIbN+hzax/vrlVIrwVDoL8I5qgGZBj5a6SZxqx1wEGJ7YHDCYWZDkGdkTM7s6b FXcydCXTVLDmLag9cFiPQ5odTpvtv+JNCa6cjPpg/FxZJhcd2o0HtjUInVL8PK8HWvHz G07ZutHMBeeyWTLVTkdZa7La+ym8cZCsByzXsoBgQeL+Ha8fdE9c+gqiKAGLQBnjB2Dt vEzsS6yu3YvwU7Id4OLY1jgbpjizIQcujrPo/5RS+ShVra1WA+n5dqplj+NNfcnr7pPv QyBQ== 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 qa41-20020a17090786a900b007771bc8dbb4si8617930ejc.781.2022.11.27.09.07.08; Sun, 27 Nov 2022 09:07:09 -0800 (PST) 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 2F42C68BABF; Sun, 27 Nov 2022 19:06: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 8F09F68B6F0 for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 3909E2406D1 for ; Sun, 27 Nov 2022 18:05:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id gWkcK0HZMEgw for ; Sun, 27 Nov 2022 18:05: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 D654D240706 for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 036453A25FF for ; Sun, 27 Nov 2022 18:05:47 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:47 +0100 Message-Id: <20221127170351.11477-26-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 26/30] lavc/libtheoraenc: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE 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: Ewx/D3g2ESsJ --- libavcodec/libtheoraenc.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index da16c6372e..9b8404ce31 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -347,6 +347,19 @@ static int encode_frame(AVCodecContext* avc_context, AVPacket *pkt, // HACK: assumes no encoder delay, this is true until libtheora becomes // multithreaded (which will be disabled unless explicitly requested) pkt->pts = pkt->dts = frame->pts; + pkt->duration = frame->duration; + + if (avc_context->flags & AV_CODEC_FLAG_COPY_OPAQUE) { + pkt->opaque = frame->opaque; + if (frame->opaque_ref) { + pkt->opaque_ref = av_buffer_ref(frame->opaque_ref); + if (!pkt->opaque_ref) + return AVERROR(ENOMEM); + } + } + + avc_context->reordered_opaque = frame->reordered_opaque; + if (!(o_packet.granulepos & h->keyframe_mask)) pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1; @@ -373,7 +386,9 @@ const FFCodec ff_libtheora_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_THEORA, .p.capabilities = AV_CODEC_CAP_DR1 | - AV_CODEC_CAP_DELAY /* for statsfile summary */, + /* for statsfile summary */ + AV_CODEC_CAP_DELAY | + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(TheoraContext), .init = encode_init, From patchwork Sun Nov 27 17:03:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39500 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6959920pzb; Sun, 27 Nov 2022 09:07:18 -0800 (PST) X-Google-Smtp-Source: AA0mqf6WzGG6rJcfZlIt0B4zQ6AkUgTrBk9BeZAwmnmAd7WnSKuMcNVv7BR67/YBJCEcaQIZ1yLJ X-Received: by 2002:a05:6402:f01:b0:459:9dd3:2217 with SMTP id i1-20020a0564020f0100b004599dd32217mr35061567eda.163.1669568838226; Sun, 27 Nov 2022 09:07:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568838; cv=none; d=google.com; s=arc-20160816; b=emOibQhK0V5kbj3jqv15uqCWQHTebYXSnkyyNowHCdHsRm3OIdRNVspE0MbK3vsmWW NaXGMKJUIBjGC7KWoFOCIyh85fe1L5FNeimrWbybfho3IYEb1rSsXjCOz4sxrC2/IZgy tsssFlq3jg5Ght7qjpJL30uO91kKl8zJiq5w8geg8858w3KoyYHErMFrmaQTLkF+lWMt az5T9OQQv8O3Wbe4KZ9EIMFVvuESuGWzS6MjG8F3KkPj6rs0jF7CXuwO4PHQOjX5rOjk AFVvF7bWbc5DUvKPQ2l/X2diMivl21D/cfBKBrWv1uXqR8iXPOqr2wxcQvGhHtHz4a5L QtXA== 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=ogQfnV8s9bjpP7ljP+BWZ8vYCMjz7Dj7y6OJYdroB/U=; b=gJ1UHmSzBiQvpbXoNZ39UdLNGjrSN7GC7VQlqI48lnIceB8dqoPa5Xwv+FI8hZPX8b R22bTRMDovbg/sphRvYp/N+VrVY3ktWeS8Ka5Uma14oOJE9LRRfxlEnjtWaaS6rkGeWt GjZmM8A9Mh6CoyCT/0tQeasFY4iN97BJFPfeKhJmqVaZy+CmzqxSwORmow+ENaeZ3m4q +ZsE8ZgaSrOl2VqQBRnFeEchpJXtLi8tdUyNMgoFZ8oL3nZPUYdUHsUykSBIcuXu05tC Tbu1KW8yXwBaYw/HhLAIakOlCgtXUu9wrNceCEkuUKtDeS6HjZrswyd/rH1r1KLNvoir GINg== 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 bk9-20020a170906b0c900b00770872942d8si6449571ejb.958.2022.11.27.09.07.17; Sun, 27 Nov 2022 09:07:18 -0800 (PST) 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 3173A68B7DB; Sun, 27 Nov 2022 19:06: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 92BC568B721 for ; Sun, 27 Nov 2022 19:05:59 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id D5B55240499 for ; Sun, 27 Nov 2022 18:05:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 6xCI7r11BSur for ; Sun, 27 Nov 2022 18:05: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 D92E6240D0E for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0EEB83A2604 for ; Sun, 27 Nov 2022 18:05:47 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:48 +0100 Message-Id: <20221127170351.11477-27-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 27/30] lavc/libtheoraenc: stop setting dts unnecessarily 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: GMSjXSykOUN2 Theora is not marked as supporting reordering, so dts will be set from pts by the generic code. --- libavcodec/libtheoraenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index 9b8404ce31..e36a948511 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -346,7 +346,7 @@ static int encode_frame(AVCodecContext* avc_context, AVPacket *pkt, // HACK: assumes no encoder delay, this is true until libtheora becomes // multithreaded (which will be disabled unless explicitly requested) - pkt->pts = pkt->dts = frame->pts; + pkt->pts = frame->pts; pkt->duration = frame->duration; if (avc_context->flags & AV_CODEC_FLAG_COPY_OPAQUE) { From patchwork Sun Nov 27 17:03:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39511 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6961612pzb; Sun, 27 Nov 2022 09:10:01 -0800 (PST) X-Google-Smtp-Source: AA0mqf7jtO9T6Mz+vy+fIUnqDa0ED190czf8o+yoSCQ8r/bUDO5HIdI4s9oW/h/b5eQvKIQ/L0zm X-Received: by 2002:a17:906:6bd8:b0:78b:a8d:e76a with SMTP id t24-20020a1709066bd800b0078b0a8de76amr41482678ejs.725.1669569001117; Sun, 27 Nov 2022 09:10:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669569001; cv=none; d=google.com; s=arc-20160816; b=Au5eHJO0XIA4ieGGIyuxA1yM7lII6CZAGPB3A9y6PoK3hTwlOw87/LdgWg4tQex3yy FKkKG6tDeX3dUv46HOhLhmoPCk4zZ37S+YMaa6KSwK4msMhxOZcVuqwU+Bkz3rlkRa0l d4yqCiNzz4dV0xyoXRKHM1bsQDGCQIQVd+GgKIxIywGvymxYTjQYzX8I5H8GqRC6Cte/ Cd3jK5Z+68RS7I8+TaZmOlHUE2JJxHIOxp7zcQCLcsw4wkbAAEGjSV9cehj+KA5qp9F2 7GrCnuZbvdTCYONF893MPD201rg3pwb/pIm6guV45dVr/+NOoATwy4if860VvP7xrsnC fFog== 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=UEvhpbLuGF42OVkbNG01JWaqqeXgjPZrasEAtvgL0sw=; b=pPpBO9obDq5eGvXdzJLrvrkh3NpH1eNibSb5x3a5JGf9Prul54PVLNFUG5MJl7tzSH zEM6KXnS+hBFnkFiaYMaIF5H9k6YE6l6+bhMy1Jm/H3RG67gLDDe8eEVIu00MVWQkpqW pNo2Pyyd4cu4ioQAW6ySz0/1iIf+VMMlgi77NgVAjHTm6kVSK8uTWqhGWwwc2S3EXXOC Q8Re+XxdCjQC7dt24PkJ2u4aITfHA6ST1aTvoHHIQ2Uz/uLeiCTBHf1989h5DEJFBmyQ JojZkDRhn4jnj0KEkomDhOj/7gQt/Q6VN/VsMg5aJWzpINb7cVL4VydAhCnsJF8f7CWq rFQw== 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 y17-20020aa7c251000000b0046b1c26d81dsi1415422edo.80.2022.11.27.09.10.00; Sun, 27 Nov 2022 09:10:01 -0800 (PST) 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 8760F68BCA9; Sun, 27 Nov 2022 19:06:26 +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 8DBE468B9A3 for ; Sun, 27 Nov 2022 19:06:05 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id C6FFD240499 for ; Sun, 27 Nov 2022 18:06:04 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 60-IvIoIbIdo for ; Sun, 27 Nov 2022 18:06:03 +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 09606240D22 for ; Sun, 27 Nov 2022 18:05:52 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1ABE73A264F for ; Sun, 27 Nov 2022 18:05:47 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:49 +0100 Message-Id: <20221127170351.11477-28-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 28/30] lavc/libx264: pass through frame durations to encoded packets 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: UR2fhZOpCRi/ --- libavcodec/libx264.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 8944a7df36..b87db78fb4 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -52,6 +52,7 @@ typedef struct X264Opaque { int64_t reordered_opaque; int64_t wallclock; + int64_t duration; void *frame_opaque; AVBufferRef *frame_opaque_ref; @@ -461,6 +462,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, } opaque->reordered_opaque = frame->reordered_opaque; + opaque->duration = frame->duration; opaque->wallclock = wallclock; if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) opaque->wallclock = av_gettime(); @@ -614,6 +616,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) { ctx->reordered_opaque = out_opaque->reordered_opaque; wallclock = out_opaque->wallclock; + pkt->duration = out_opaque->duration; if (ctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { pkt->opaque = out_opaque->frame_opaque; From patchwork Sun Nov 27 17:03:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39503 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960218pzb; Sun, 27 Nov 2022 09:07:44 -0800 (PST) X-Google-Smtp-Source: AA0mqf7G4owPAIVx9/mrsrMImAc67g686UeE+Sj6DH5/4ujLybo5uhU8ckCTzbZS8IDKCQjLE8wx X-Received: by 2002:a17:907:d60b:b0:7bc:dbd8:184b with SMTP id wd11-20020a170907d60b00b007bcdbd8184bmr10056121ejc.110.1669568864303; Sun, 27 Nov 2022 09:07:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568864; cv=none; d=google.com; s=arc-20160816; b=HN6BajM33qe6IQUKSw/5zqPQwGCYRQa0rzfuOYi8XGXfR8bAcP3ckTzA8QVrS3D8DF bbSHdPlJY2BV2Sx4niHh8vmR5bVIvZ3vCXzI0Cqx/CH7E+d8kNzvYlQKelhyq5aQ4exr Vr1J2v4Reu9t/yykQKQPTjKkL7DqsL1QHLUJpt3EwGv/uLpah31Kfzno13Mdgnf0KwFG tkvzl0pYTw2O0O7ZX5SVk11/c5mXZPwz280OQ2RqC2DpPVMHtOkSLRUwO658mI3dasTZ JUR3GHK7EGwGERSbfJjpU3zVDBWueu43sqIsFUqsOOdAD1dRYEcAWsaKEt9YMgssII4i W3Ug== 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=qXDIkCjSh3TkDEavisf4UDf0FCvgL5ebOyA15DWGPu0=; b=kEEfwCBxIqL9mHzVNStJBbQmclVUYzL3cVXOEDzIshHqqitaZOk7sWvcU0bX+bXpMq j2836DF4eXdgJTkc3L6WxIzaFKzjv6+YUr+TZII4LJpx+y+09g1/psACyZ0q1IpWWSau aYiP9AwRnfmmwex3wrQ26nz3TunUrV7CCu2/FwEgUDb87sRfC/P8KgliPWy1B3eSUJH0 SdOiTJQimonL/O6sVCf/HmLge3coZKK5hOhWD9JeopxXy9tQECP3GWYk9ncs7/MwdePu 08F6XplvfpompoDfO32NEzxym18B3T4dZtL3AsrIDibRjwRXJmcszqDCR9qe7QTLG60V wexg== 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 ht10-20020a170907608a00b007ada03062e9si9423614ejc.415.2022.11.27.09.07.43; Sun, 27 Nov 2022 09:07:44 -0800 (PST) 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 26E27680C7B; Sun, 27 Nov 2022 19:06: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 81E0368B90B for ; Sun, 27 Nov 2022 19:06:01 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 2DC802406CE for ; Sun, 27 Nov 2022 18:06:01 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id B6zxAhezNfc7 for ; Sun, 27 Nov 2022 18:05: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 DE625240D1A for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 263C23A2661 for ; Sun, 27 Nov 2022 18:05:47 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:50 +0100 Message-Id: <20221127170351.11477-29-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/30] lavc/libx265: pass through frame durations to encoded packets 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: AumMHXazARU0 --- libavcodec/libx265.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 7ba547a7e7..088ddef3fc 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -43,6 +43,7 @@ typedef struct ReorderedData { int64_t reordered_opaque; + int64_t duration; void *frame_opaque; AVBufferRef *frame_opaque_ref; @@ -616,6 +617,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, } rd = &ctx->rd[rd_idx]; + rd->duration = pic->duration; rd->reordered_opaque = pic->reordered_opaque; rd->frame_opaque = pic->opaque; if (pic->opaque_ref && avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { @@ -754,6 +756,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, ReorderedData *rd = &ctx->rd[idx]; avctx->reordered_opaque = rd->reordered_opaque; + pkt->duration = rd->duration; if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { pkt->opaque = rd->frame_opaque; From patchwork Sun Nov 27 17:03:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39504 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp6960304pzb; Sun, 27 Nov 2022 09:07:53 -0800 (PST) X-Google-Smtp-Source: AA0mqf4zjitfnYUGtpUj5ab5lbdrC+7BSX0C26Ak3k2TUkCdi5owhzykJonqTup2GjfRpG42KTnY X-Received: by 2002:a05:6402:685:b0:46a:890d:b0d1 with SMTP id f5-20020a056402068500b0046a890db0d1mr16781342edy.292.1669568873334; Sun, 27 Nov 2022 09:07:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669568873; cv=none; d=google.com; s=arc-20160816; b=gPsH9PwQq3xb1yqUJcj74ZDnQx1ktfujAXdYZyHnMEf7OArgpXsq8cQe3R7bkGKsuO +Rc1P2CeLePWGqIXx7+JA/r+VvjMaz4zXQKDCmIzGXx2APf4JSjp7qrZSTq1c4cDxJoF 7wnl/sOlKmOanUrcWwJitRsrUmuEezTVnuTxzdSi26kzbfyseCtxhO0sBR52XwHr8uR1 2V7m5o8yW+rgbLCjqwDJHUBi/Rkxl709oswjUe8mQ2bRItfDfbM5zGndxer8zmsSkuky aynFL946woCMrp+jlyLKQ1P2ik50jaxInQdBcmYGxEoyJcg7gYeN9yc6vXXYyMWS+Vse d5hQ== 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=ok2PZX/suwSDwANaPuBJc18JbPf3c50H/RUncMbvD88=; b=nFcKEz9cfJTxHsdqTR9THbk1caqfGDziHyZGOk8X69/kJWtg5bcDuFiUUYI/0jqU4N R6WmAoFEELkSYzX5idrn0C1S6GYMGpeuC/6Afo0wKUZmw1Qw5//fZR8bnicBq0vGQ5N3 KrbhRFpckrerQjTdscJaNOlgL5n3CYGHtAWKerQPf3daIniBWaY1yLGGZi/vuRRem9KL n4gDBI/5m1l5JMadAngCIjr7BmLfmyi+O6HGLkxd9pj88hVaTD0sndaHIziMiMyvazsR Y2sIWuhspkcC8mfCCV82JScE7kTj2T3/d9N+qa1KQElgkrvNyGHtOYGAe/D80YNPxT4/ FKYg== 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 hd34-20020a17090796a200b007833c7cf1dcsi10304057ejc.387.2022.11.27.09.07.52; Sun, 27 Nov 2022 09:07:53 -0800 (PST) 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 1BEE168BBCC; Sun, 27 Nov 2022 19:06:11 +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 81D1A68B862 for ; Sun, 27 Nov 2022 19:06:00 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 7FCD92405EC for ; Sun, 27 Nov 2022 18:06:00 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id uEAb6sNu3iDO for ; Sun, 27 Nov 2022 18:06:00 +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 DEB13240D1B for ; Sun, 27 Nov 2022 18:05:51 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 324603A2668 for ; Sun, 27 Nov 2022 18:05:47 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Nov 2022 18:03:51 +0100 Message-Id: <20221127170351.11477-30-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221127170351.11477-1-anton@khirnov.net> References: <20221127170351.11477-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 30/30] lavc/libaomenc: pass through frame durations to encoded packets 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: oDx59cAExE3T --- libavcodec/libaomenc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index bd576fdd3a..c117ca4ee6 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1094,6 +1094,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame, } memcpy(pkt->data, cx_frame->buf, pkt->size); pkt->pts = pkt->dts = cx_frame->pts; + pkt->duration = cx_frame->duration; if (!!(cx_frame->flags & AOM_FRAME_IS_KEY)) { pkt->flags |= AV_PKT_FLAG_KEY; @@ -1275,6 +1276,7 @@ static int aom_encode(AVCodecContext *avctx, AVPacket *pkt, AOMContext *ctx = avctx->priv_data; struct aom_image *rawimg = NULL; int64_t timestamp = 0; + unsigned long duration = 0; int res, coded_size; aom_enc_frame_flags_t flags = 0; @@ -1287,6 +1289,8 @@ static int aom_encode(AVCodecContext *avctx, AVPacket *pkt, rawimg->stride[AOM_PLANE_U] = frame->linesize[1]; rawimg->stride[AOM_PLANE_V] = frame->linesize[2]; timestamp = frame->pts; + duration = frame->duration ? frame->duration : + avctx->ticks_per_frame; switch (frame->color_range) { case AVCOL_RANGE_MPEG: rawimg->range = AOM_CR_STUDIO_RANGE; @@ -1300,8 +1304,7 @@ static int aom_encode(AVCodecContext *avctx, AVPacket *pkt, flags |= AOM_EFLAG_FORCE_KF; } - res = aom_codec_encode(&ctx->encoder, rawimg, timestamp, - avctx->ticks_per_frame, flags); + res = aom_codec_encode(&ctx->encoder, rawimg, timestamp, duration, flags); if (res != AOM_CODEC_OK) { log_encoder_error(avctx, "Error encoding frame"); return AVERROR_INVALIDDATA;