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 C0B45475A0 for ; Tue, 12 Sep 2023 16:34:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7009C68C9A5; Tue, 12 Sep 2023 19:34:56 +0300 (EEST) Received: from mail-oo1-f42.google.com (mail-oo1-f42.google.com [209.85.161.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0B9BD68C652 for ; Tue, 12 Sep 2023 19:34:50 +0300 (EEST) Received: by mail-oo1-f42.google.com with SMTP id 006d021491bc7-575f45e255dso3540449eaf.2 for ; Tue, 12 Sep 2023 09:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694536487; x=1695141287; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=uyNAZvUsecjCJRN02YBpd10sufi65Fnp5p9bktgajb4=; b=ZLeFOR1/eNyoSH3cyWU++pU8hwDae/BAz5R1nnmzKv3NgHcLEpuq7mPbTB9jcNDInK SwPDT3H0VBwFfWCzJOUQY/I4SLSg0agAkoGYaDKW54xETIdC2/uXB2KA+Zcbxea7BNMZ Zw9SmYpM+Dbrn0gzfim1/13e61g2X47ycRIdzDHraianiQqOWris5EefBwKMXLI6U40m nX8n5t32+Y68m85R8kfoPzMXC0E3lts+2GA0+QRly0Ch1S60ZKP39jM967dn5fMq/wKP rQdU40Xam4qnZNYZI75NxD7mIXI5tkp5M8zjRPFF5qMp+E8zPb8FuqbZv8xvq0JGLmZ9 Ln+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694536487; x=1695141287; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uyNAZvUsecjCJRN02YBpd10sufi65Fnp5p9bktgajb4=; b=mgHeKETLw9x25vnh7qjbR5/chkq2rBIvdA5izVFllJfaRnLzUa7VRKypJhqr6oYQLJ yB/zXOVyv2ZP79hAjZsZPv+X4mQpg0SZ6onaYnPFLDg5i2E3sIEuSyM5lpxYuCpJsR2Q 9XDfWJGTE1+rC0h6dj5P1QgyNsomJVxYiIipS4lU0trAnPGFcrI5rutlMnCORRSwDVc0 vOXCDIoEY2w7VcDQv0tNcRLC0kAWeTgvvxP+rSBLZE0FnoY4UVLPA+GiOlcP+4ECCRTv zYgP4JmD3WsODTLqZEK96gSFSJm1Wt6yZWomdVSKo9kHsnlkj87pNclU0qDE9HGI0UUo m4Sw== X-Gm-Message-State: AOJu0Yw0scTe3Ok+9W7KAEfTIF+iFQvbPdNv4flBme2lGyn8AAmppCbB CvxKrJI+32Obs8QZn0CVjXu6nPbe3o4= X-Google-Smtp-Source: AGHT+IERiO5pE3aJqK6v7uhXBDWG/dHIkjr95kB5bdVBeDOS6dZlYsZ6yrVyNi3GWm747eCbmFP3Cg== X-Received: by 2002:a4a:350c:0:b0:571:1a1d:f230 with SMTP id l12-20020a4a350c000000b005711a1df230mr110602ooa.9.1694536487459; Tue, 12 Sep 2023 09:34:47 -0700 (PDT) Received: from [192.168.0.10] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id g63-20020a4a5b42000000b005760ec1708esm4547137oob.38.2023.09.12.09.34.46 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 Sep 2023 09:34:47 -0700 (PDT) Message-ID: <096b4cf0-1999-541d-5e37-7b850384f85c@gmail.com> Date: Tue, 12 Sep 2023 13:34:44 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230906174431.45558-1-jamrial@gmail.com> <20230906174431.45558-3-jamrial@gmail.com> From: James Almer In-Reply-To: Subject: Re: [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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 9/11/2023 2:45 PM, Andreas Rheinhardt wrote: > James Almer: >> 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); > > No compiler warning for this? Good catch. And no, i don't get one with GCC 13. > >> + } >> + >> + 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; >> >> /** > > _______________________________________________ > 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". _______________________________________________ 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".