From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 308C446B37 for ; Wed, 4 Oct 2023 12:29:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3739C68CBF6; Wed, 4 Oct 2023 15:29:02 +0300 (EEST) Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5D46168C919 for ; Wed, 4 Oct 2023 15:28:55 +0300 (EEST) Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1c364fb8a4cso17277085ad.1 for ; Wed, 04 Oct 2023 05:28:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696422533; x=1697027333; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=M4D7iw0gct+04Le8SSzqS8RMyjGWGEMMakC93LrgiSc=; b=aTkYoQyFRGYEp3fJ4HnW9J0nWDZ70xZOMj0YIgP4/TLmN6whRHmpta7+hgMxglOznx 7xFAwK6NjNWyeU+FIhHlGBjEKfxfYPix5t5rpUOTIcNuRiwYmZXT3wcx+NLPFmd4YLtJ 8xszmf6vp3Xuk1uP65GCyiZJqMe/rvj5qjFZAdqZqH2+brtcY5MSFgNRfVuQwFZPum4R uXYCEB0vLeCr1h7j8cH8YyTVnE2OZnsTnEvhkIxErqg6wPN0MB/4DnMaipcWU2zqfOjh AkhefT5RJF/AL2TP1HKogb06DkYJDnsuuaqkRAVcZP5NqgWnwAajZAGyoMJTmntjY1xI Q5GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696422533; x=1697027333; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M4D7iw0gct+04Le8SSzqS8RMyjGWGEMMakC93LrgiSc=; b=kY7tk1HW2h9F1vCHeHN3CbSLTlGRWmA36JuoEiC/dx26MhswWmsS8TJaItCJSxuSrp oocA9IwGimdNw13jZ44gq2kUokSNTLHn10DzwHsRLaCtmrlEtHE22lKRDnyue8tkVlnj mUjApt8CvD3Z+6JteyrRA1lvBlymYdrhJurZtAthryFyebgRZIXAATVwy+VVNa0sWTS0 KMSiR4zcPd1O2cq88EQNfmdgUwVoQdMJyrU2qsCV17ICfW6FgGIUTmhP/fOQITYbSFUS cKjVVyZKsz3XZNHve7HlRg6l02Fccs8/MdAVxqCc6J3djywj8AZt7kKamuv6YPZ3PmGp /IsA== X-Gm-Message-State: AOJu0Yw5HQT7yr5VRZBqLxxu0EgEln7HUuQDulM9MI+oN70isxHO/nKn 4akoD6/XdExM3Zl+yYzO4GyUJDdokb4= X-Google-Smtp-Source: AGHT+IHQ8ofajiXM5XbymEFBDrcjPwh88cFVrM7Fb6pmN1WFVpFIf1mxix4UcmTwh5/h/LDd218JSQ== X-Received: by 2002:a17:902:ce84:b0:1b6:6f12:502e with SMTP id f4-20020a170902ce8400b001b66f12502emr2627555plg.49.1696422533258; Wed, 04 Oct 2023 05:28:53 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id h11-20020a170902748b00b001c57aac6e5esm3551831pll.23.2023.10.04.05.28.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Oct 2023 05:28:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Oct 2023 09:28:40 -0300 Message-ID: <20231004122849.56604-3-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231004122849.56604-1-jamrial@gmail.com> References: <20231004122849.56604-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This will simplify the propagation of side data to decoders and from encoders. Global side data will now reside in the AVCodecContext, thus be available during init(), removing the need to propagate it inside packets. Global and frame specific side data will therefore be distinct. Signed-off-by: James Almer --- libavcodec/codec_par.c | 48 ++++++++++++++++++++++++++++++++++++++++++ libavcodec/codec_par.h | 11 ++++++++++ 2 files changed, 59 insertions(+) diff --git a/libavcodec/codec_par.c b/libavcodec/codec_par.c index e4e4cd48d3..abaac63841 100644 --- a/libavcodec/codec_par.c +++ b/libavcodec/codec_par.c @@ -27,11 +27,13 @@ #include "libavutil/mem.h" #include "avcodec.h" #include "codec_par.h" +#include "packet.h" static void codec_parameters_reset(AVCodecParameters *par) { av_freep(&par->extradata); av_channel_layout_uninit(&par->ch_layout); + av_packet_side_data_free(&par->coded_side_data, &par->nb_coded_side_data); memset(par, 0, sizeof(*par)); @@ -72,6 +74,35 @@ void avcodec_parameters_free(AVCodecParameters **ppar) av_freep(ppar); } +static int codec_parameters_copy_side_data(AVPacketSideData **pdst, int *pnb_dst, + const AVPacketSideData *src, int nb_src) +{ + AVPacketSideData *dst; + int nb_dst = *pnb_dst; + + if (!src) + return 0; + + *pdst = dst = av_calloc(nb_src, sizeof(*dst)); + if (!dst) + return AVERROR(ENOMEM); + + for (int i = 0; i < nb_src; i++) { + const AVPacketSideData *src_sd = &src[i]; + AVPacketSideData *dst_sd = &dst[i]; + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) + return AVERROR(ENOMEM); + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + *pnb_dst = ++nb_dst; + } + + return 0; +} + int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src) { int ret; @@ -82,6 +113,8 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src dst->ch_layout = (AVChannelLayout){0}; dst->extradata = NULL; dst->extradata_size = 0; + dst->coded_side_data = NULL; + dst->nb_coded_side_data = 0; if (src->extradata) { dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!dst->extradata) @@ -89,6 +122,10 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src memcpy(dst->extradata, src->extradata, src->extradata_size); dst->extradata_size = src->extradata_size; } + ret = codec_parameters_copy_side_data(&dst->coded_side_data, &dst->nb_coded_side_data, + src->coded_side_data, src->nb_coded_side_data); + if (ret < 0) + return ret; ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); if (ret < 0) @@ -178,6 +215,11 @@ FF_ENABLE_DEPRECATION_WARNINGS par->extradata_size = codec->extradata_size; } + ret = codec_parameters_copy_side_data(&par->coded_side_data, &par->nb_coded_side_data, + codec->coded_side_data, codec->nb_coded_side_data); + if (ret < 0) + return ret; + return 0; } @@ -262,5 +304,11 @@ FF_ENABLE_DEPRECATION_WARNINGS codec->extradata_size = par->extradata_size; } + av_packet_side_data_free(&codec->coded_side_data, &codec->nb_coded_side_data); + ret = codec_parameters_copy_side_data(&codec->coded_side_data, &codec->nb_coded_side_data, + par->coded_side_data, par->nb_coded_side_data); + if (ret < 0) + return ret; + return 0; } diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index c1679ea042..64882a9726 100644 --- a/libavcodec/codec_par.h +++ b/libavcodec/codec_par.h @@ -30,6 +30,7 @@ #include "codec_id.h" #include "defs.h" +#include "packet.h" /** * @addtogroup lavc_core @@ -215,6 +216,16 @@ typedef struct AVCodecParameters { * when no higher-level timing information is available. */ AVRational framerate; + + /** + * Additional data associated with the entire stream. + */ + AVPacketSideData *coded_side_data; + + /** + * Amount of entries in @ref coded_side_data. + */ + int nb_coded_side_data; } AVCodecParameters; /** -- 2.42.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".