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 0DB1047909 for ; Wed, 27 Sep 2023 13:13:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CB2BB68CAFF; Wed, 27 Sep 2023 16:13:13 +0300 (EEST) Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F4ED68CAEA for ; Wed, 27 Sep 2023 16:13:07 +0300 (EEST) Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1c1ff5b741cso99411515ad.2 for ; Wed, 27 Sep 2023 06:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820385; x=1696425185; 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=0X/sQK0Ov/eATm+nieVDduBjJGkkWKG/+8xaIsgdemo=; b=ERRelz6upP4ey4aScswaFrxlilertsx+ye+jsQWfh0ELXHb/C6dSYlaRu7TAROxh3X 77EYqb0bg//9oDSWpBylTuH8xgukZnlQ6YG738kRqkhGsQrzSwIQ5clF0yOdg2n+STDw gGFaM4xSg3P9mcNDWUgi8I6kzxhkwpWBinGSwToeA0B6yJUXqJTalWJoRxMcmrH7JuNi 8hJ8Jv382/ORzFs/iBpRBYD/uD7wG8R7Iz6Upnt1qsoCJzNiID9B4S4UUdXoHWQcEll9 3y+szkX0RUXj3xfoqVPUe2nrrJ9J1SEqQSizu4j6AvUnwk19Gd42LPAHzw3AzqxP1LzZ y6hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820385; x=1696425185; 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=0X/sQK0Ov/eATm+nieVDduBjJGkkWKG/+8xaIsgdemo=; b=XEFsFuUF1ERh+Kyedc2Bs6x/a15QeIWbZwZ2aNUoBHjpd3VzELw4I5TPrvfyIlbKmW EgeF5P50457kTYionpeKANuvniZUFw7eoniu9kA666zWmuMUTULc7WJQzE8xNSSq3kB4 cMa9gm814+xT8Y8mj5Ra6ECnxrfiXT6BA0o01TRw/AJPeKn9JRvYr6+dzA9cY5dV0c8k B0x5DzPibJvUKoutWD5aISwpz8nXxL0Ng5ip711KK4P0JPdHOHug9Cwdxy0A+AiDBxmw Yu/0PJrPBTZLyGlrpXiHly9n9l0SwGJ1Toeh18WTnvtna/GjYzYnVTSVs+wZrOmnUg2S G5Yw== X-Gm-Message-State: AOJu0YygkLXxSB3jmFyXDH4pytUQUTZkzpWAA65C9BaQFqWOOKDEmpTM w4bRG5FdJGBksQhdbYEwEgE18UkYTqU= X-Google-Smtp-Source: AGHT+IFbAn0lbglD9vH03ISEyQ6uEGEBj2FV8wwp9Eg9FIrnklttAa2DibNraE9FPaTEqkehfsv5rQ== X-Received: by 2002:a17:902:ab45:b0:1c6:2d13:5b79 with SMTP id ij5-20020a170902ab4500b001c62d135b79mr1517693plb.47.1695820385086; Wed, 27 Sep 2023 06:13:05 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v10-20020a1709029a0a00b001b53953f306sm13050600plp.178.2023.09.27.06.13.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:04 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:33 -0300 Message-ID: <20230927131242.1950-3-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927131242.1950-1-jamrial@gmail.com> References: <20230927131242.1950-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..364569c0e6 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->side_data, &par->nb_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->side_data = NULL; + dst->nb_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->side_data, &dst->nb_side_data, + src->side_data, src->nb_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->side_data, &par->nb_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->side_data, par->nb_side_data); + if (ret < 0) + return ret; + return 0; } diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index add90fdb1e..85017ec76e 100644 --- a/libavcodec/codec_par.h +++ b/libavcodec/codec_par.h @@ -29,6 +29,7 @@ #include "libavutil/pixfmt.h" #include "codec_id.h" +#include "packet.h" /** * @addtogroup lavc_core @@ -223,6 +224,16 @@ typedef struct AVCodecParameters { * when no higher-level timing information is available. */ AVRational framerate; + + /** + * Additional data associated with the entire stream. + */ + AVPacketSideData *side_data; + + /** + * Amount of entries in @ref side_data. + */ + int nb_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".