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 7490B473E8 for ; Wed, 6 Sep 2023 17:45:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B0BF268C7FE; Wed, 6 Sep 2023 20:44:53 +0300 (EEST) Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 81AD168C7CF for ; Wed, 6 Sep 2023 20:44:47 +0300 (EEST) Received: by mail-ot1-f54.google.com with SMTP id 46e09a7af769-6bf0decd032so113769a34.0 for ; Wed, 06 Sep 2023 10:44:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022286; x=1694627086; 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=UekujQqKiUYGwN7b42OsyVoOxKD1IbP3I2aOJwCUb7I=; b=nfSc0tIzc12sLEu6jMiAKVxPOeYUWnx9UINYMaRDADLR2BZhvrNuJ0gealAmiwD2Uy 3hDieM6Nu8CcWQpYWKlR0gMsm/eVu6XPnrf4Z3gOMb5T8rfYct84ZYGaMrmQEho1LZnh coHWfIWZX6LcfwUwm8Oce8+A1xPnlaN/22QtEiKYojw7VEj1Ra8f58/jiNP4z6Ja3I1d uX4Lw1vua9+lqk054XeNi0uPsNkEVNH3XAi1Y2O9NNkZwuCgz2Aldb2zrcg66uPH5zqB 3MKO/Sn4OoHARxPhV+yFpq0a++RGHDZ3yGl73x9qdI6OdLi8TGiQNg9RM55mifZA4ees 8m7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022286; x=1694627086; 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=UekujQqKiUYGwN7b42OsyVoOxKD1IbP3I2aOJwCUb7I=; b=FjDSqoT5UjL9z1UBBhiQzHEM4FPM4CYZqrU17jWtvdezbnOGmuPSvO7Z3Yo7Q0NcvY KN+KQqttgNZV2RmgzWpJZO5DAQtofDEQnzwe/eNbJhFXuQXoRRQZgmgrgQxFgYn/uISU 43Jr0yGp3QvUTmuyBT4B/fxv8qoNimQJ+4Fvu8uRkh4Yesa8gb+D5zJ98iUTxbtZwZP3 8lJF5i6IkS1o2tgM4cfKpgrZBFhmJ1MSiyj7Ddo6MxVbJDjJhSuwYnPGHZHg1ByFFD9d SM9H18AZ8eCwEoSJSFmdYZTtvMEzQQ4mP6quKpuMCH69qti/NE466SXzYgLNs6kd+kz6 Mkgg== X-Gm-Message-State: AOJu0YxDB1WMEzv5tTK1VodbMJpSrkhybZH7F2FtSbAmzPBrCbKKgfJY +G4bMKUriwh48psleaNEnBvw0XT0zi8= X-Google-Smtp-Source: AGHT+IHyJXX0jsIbH28gAf6E8CkunGAGvMZ2NNpL65ETMNAreBEa8o3wIORkpYbC1F/3R4pTCg62hg== X-Received: by 2002:a9d:6181:0:b0:6bc:fdc8:d600 with SMTP id g1-20020a9d6181000000b006bcfdc8d600mr17621561otk.25.1694022285703; Wed, 06 Sep 2023 10:44:45 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:45 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:22 -0300 Message-ID: <20230906174431.45558-3-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/10] 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 | 81 ++++++++++++++++++++++++++++++++++++++++++ libavcodec/codec_par.h | 6 ++++ 2 files changed, 87 insertions(+) diff --git a/libavcodec/codec_par.c b/libavcodec/codec_par.c index a38a475dc7..c0c941c2b6 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_set_free(&par->side_data); memset(par, 0, sizeof(*par)); @@ -82,6 +84,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.sd = NULL; + dst->side_data.nb_sd = 0; if (src->extradata) { dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!dst->extradata) @@ -89,6 +93,32 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src memcpy(dst->extradata, src->extradata, src->extradata_size); dst->extradata_size = src->extradata_size; } + if (src->side_data.nb_sd) { + const AVPacketSideDataSet *src_set = &src->side_data; + AVPacketSideDataSet *dst_set = &dst->side_data; + + dst_set->sd = av_calloc(src_set->nb_sd, sizeof(*dst_set->sd)); + if (!dst_set->sd) + return AVERROR(ENOMEM); + + for (int i = 0; i < src_set->nb_sd; i++) { + const AVPacketSideData *src_sd = src_set->sd[i]; + AVPacketSideData *dst_sd = av_mallocz(sizeof(*dst_sd)); + + if (!dst_sd) + return AVERROR(ENOMEM); + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) { + return AVERROR(ENOMEM); + av_free(dst_sd); + } + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + dst_set->sd[dst_set->nb_sd++] = dst_sd; + } + } ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); if (ret < 0) @@ -178,6 +208,32 @@ FF_ENABLE_DEPRECATION_WARNINGS par->extradata_size = codec->extradata_size; } + if (codec->nb_coded_side_data) { + AVPacketSideDataSet *dst_set = &par->side_data; + + dst_set->sd = av_calloc(codec->nb_coded_side_data, sizeof(*dst_set->sd)); + if (!dst_set->sd) + return AVERROR(ENOMEM); + + for (int i = 0; i < codec->nb_coded_side_data; i++) { + const AVPacketSideData *src_sd = &codec->coded_side_data[i]; + AVPacketSideData *dst_sd = av_mallocz(sizeof(*dst_sd)); + + if (!dst_sd) + return AVERROR(ENOMEM); + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) { + return AVERROR(ENOMEM); + av_free(dst_sd); + } + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + dst_set->sd[dst_set->nb_sd++] = dst_sd; + } + } + return 0; } @@ -262,5 +318,30 @@ FF_ENABLE_DEPRECATION_WARNINGS codec->extradata_size = par->extradata_size; } + for (int i = 0; i < codec->nb_coded_side_data; i++) + av_free(codec->coded_side_data[i].data); + av_freep(&codec->coded_side_data); + codec->nb_coded_side_data = 0; + if (par->side_data.nb_sd) { + const AVPacketSideDataSet *src_set = &par->side_data; + + codec->coded_side_data = av_calloc(src_set->nb_sd, sizeof(*codec->coded_side_data)); + if (!codec->coded_side_data) + return AVERROR(ENOMEM); + + for (int i = 0; i < src_set->nb_sd; i++) { + const AVPacketSideData *src_sd = src_set->sd[i]; + AVPacketSideData *dst_sd = &codec->coded_side_data[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; + codec->nb_coded_side_data++; + } + } + return 0; } diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index add90fdb1e..169e595b7c 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,11 @@ typedef struct AVCodecParameters { * when no higher-level timing information is available. */ AVRational framerate; + + /** + * Additional data associated with the entire stream. + */ + AVPacketSideDataSet 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".