From patchwork Wed Sep 27 13:12:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43978 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2594673pzh; Wed, 27 Sep 2023 06:13:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGVFn+D8rz842zL0N7vLMwoses01Bv0jvC4tNDhNUvT9A4qBS6kE29E85/q91/KMnAqs41F X-Received: by 2002:a17:906:73db:b0:9b2:b763:8d6b with SMTP id n27-20020a17090673db00b009b2b7638d6bmr943709ejl.50.1695820405540; Wed, 27 Sep 2023 06:13:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820405; cv=none; d=google.com; s=arc-20160816; b=fX8YJYKhdB+vIn3XjCf874lio404p2+Tql6TY86wuWNXXi75OWwKOJEV/+zpF8vK4D DmeEpfNmgq57UtVD/OhJj1fW5C2xlhxulYxCgEbLfSKEQ43oUA/qWSCJPYZwKC59bcHV iPIbL0QrijT1e29MON6T0AYuJBqHa8yZb+7qgr6SBVMx6qMb/jiGIKtBhq/OkMGp9Vp2 W1TTIR+uQ/XiDHJV3F0Od7tJ3kPvCcP+KmsaqmaWP9qC0NXPiqjnPSiryIBkl7PdC5aO u+TjUDO5eiF0nVdA9Lrq+tL6NshEfzkDBqoULQ7FwEvHEWTu9zwK9ujFH7/YwRdJ32Q2 fxiA== 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:dkim-signature:delivered-to; bh=cKTnGtFiYnOHSZ8avxVFQNqrbyJgSuMg2MAfthKZLeI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=tiTIT0tI45ANkAR8zFWxOQ9vlj06ZHXOEPFqkY1pDm6lAPARpVM5OinV5yIwCY5U5b wgHM3u0IeCCdT6rG9yvdpAAe7JwSlhl9vJceyZ9F9DpKoHkoFB0S5rBI0BtuLJrSLNcK rKlf1iZfjveuhzrf1pbySjvALBuzLyW9d6j/N1oGjWep+2iPPzhJlzPgjL+kqPxiMYRo 3PxC1RJHSmA2aMS6YU/ksl3+1iZ7idDz6ZHcIJ2hbwxJ7SAwTC55Y0AfPPr6elvPXcOs tdvgaLHd2FgZinmmQuffWKwGhReTjWdSdpFd105NZU01bnuOyCkkmP0DlSf2Us8OYE6Y bD9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=XdCMlqvD; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u17-20020a170906125100b0099bd1a1d025si13267419eja.199.2023.09.27.06.13.24; Wed, 27 Sep 2023 06:13:25 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=XdCMlqvD; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 16C8F68CAF9; Wed, 27 Sep 2023 16:13:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 10C5C68CAD5 for ; Wed, 27 Sep 2023 16:13:06 +0300 (EEST) Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1c46b30a1ceso99130085ad.3 for ; Wed, 27 Sep 2023 06:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820384; x=1696425184; 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=b7MvLH/0e7ChTn+mobmn8ffE4xgtw8uKGetdxWmCeCA=; b=XdCMlqvD/54MGdrBpU5tvlp1wJpFAA1Jhixw9maJusl5Ooa1dF+CYexB1VvJRYOXxO UOjlm2h2OQop8hsYuGjwvHm4yeY140mXeTbbj1BBdRGlxlQec2Qb0BfDr/qz4L+M0tUw 2oVuZCGOJWd1M77pyCslHFP+yUwTx7inrwwQaKTpccy0mPhvCUyeZltGb3p+zW0kZs9z 1sBHBeBI9zobvs1ZSkT4/vIMzdG+CiB5InYqLmqCobuLmbPQ8/X1Rx02kTKbjn1u8SOf olKUrUct+ZshvRm3dTeAv4CRlShrH83bHubm4Npa2XyaYD05dtiJVAYt/XP6JSqJLsI6 V2ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820384; x=1696425184; 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=b7MvLH/0e7ChTn+mobmn8ffE4xgtw8uKGetdxWmCeCA=; b=sE0zbojhMMMeCnctXuTi1D186WfQR2N+rlmu57lNDddA63wXbFeAw1XsEDnnmm5ALj b68NwUjBFW/SRaamlea98kIv/Q5zNpu8Xm5qdzUBTBoR4Cm7TVWLDx0zV5LToxHG/Kt9 JCNCOxG/SvXBPyonjc5KXe2jKdg+OpYfL2l3kfhvj5VBpvtaFA7X7/PgWSGVLx3d/Dn5 qysD0wH6CaN1ddLiaXLzBlRHMmueaJ25BE0tyYunYohIt8YQUjprMG0cBSZUvIETaqeC 3trbJOGQu6BbxUXaRItqXVlJZMZHbuRcCk02XY7zv5cs+Z0fhIdZpbESfhbhe/D7tFDo kvRA== X-Gm-Message-State: AOJu0YyFnVNPEzcjSA7Jg4GGXmsfNeAiE9ZRwMdAJUsuncu6ojbYtXh3 tCa8/f59izbFvYAt2P7kYHkCEGODooc= X-Received: by 2002:a17:903:244d:b0:1c2:1068:1f4f with SMTP id l13-20020a170903244d00b001c210681f4fmr2065606pls.17.1695820383776; Wed, 27 Sep 2023 06:13:03 -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.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:03 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:32 -0300 Message-ID: <20230927131242.1950-2-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 01/11] avcodec/packet: add generic side data helpers 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: JVLqbetdPjqC Handling AVPacketSideData directly, which can used on structs other than AVPacket. This will be useful in the following commits. Signed-off-by: James Almer --- libavcodec/avpacket.c | 99 +++++++++++++++++++++++++++++++++++++++++++ libavcodec/packet.h | 96 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 191 insertions(+), 4 deletions(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 9ec1feb068..750a17de48 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -646,3 +646,102 @@ int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp) return 0; } + +const AVPacketSideData *av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd, + enum AVPacketSideDataType type) +{ + for (int i = 0; i < nb_sd; i++) + if (sd[i].type == type) + return &sd[i]; + + return NULL; +} + +static AVPacketSideData *packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, + enum AVPacketSideDataType type, + void *data, size_t size) +{ + AVPacketSideData *sd = *psd, *tmp; + int nb_sd = *pnb_sd; + + for (int i = 0; i < nb_sd; i++) { + if (sd[i].type != type) + continue; + + av_free(sd[i].data); + sd[i].data = data; + sd[i].size = size; + return &sd[i]; + } + + if (nb_sd + 1U > INT_MAX) + return NULL; + + tmp = av_realloc_array(sd, nb_sd + 1, sizeof(*tmp)); + if (!tmp) + return NULL; + + *psd = sd = tmp; + sd[nb_sd].type = type; + sd[nb_sd].data = data; + sd[nb_sd].size = size; + *pnb_sd = nb_sd + 1; + + return &sd[nb_sd]; +} + +AVPacketSideData *av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, + enum AVPacketSideDataType type, + void *data, size_t size, int flags) +{ + return packet_side_data_add(psd, pnb_sd, type, data, size); +} + +AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, + enum AVPacketSideDataType type, + size_t size, int flags) +{ + AVPacketSideData *sd = NULL; + void *data; + + if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) + return NULL; + + data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!data) + return NULL; + + sd = packet_side_data_add(psd, pnb_sd, type, data, size); + if (!sd) + av_freep(&data); + + return sd; +} + +void av_packet_side_data_remove(AVPacketSideData *sd, int *pnb_sd, + enum AVPacketSideDataType type) +{ + int nb_sd = *pnb_sd; + + for (int i = nb_sd - 1; i >= 0; i--) { + if (sd[i].type != type) + continue; + av_free(sd[i].data); + sd[i] = sd[--nb_sd]; + break; + } + + *pnb_sd = nb_sd; +} + +void av_packet_side_data_free(AVPacketSideData **psd, int *pnb_sd) +{ + AVPacketSideData *sd = *psd; + int nb_sd = *pnb_sd; + + for (int i = 0; i < nb_sd; i++) + av_free(sd[i].data); + + av_freep(psd); + *pnb_sd = 0; +} diff --git a/libavcodec/packet.h b/libavcodec/packet.h index f28e7e7011..96fc0084d6 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -33,9 +33,9 @@ #include "libavcodec/version_major.h" /** - * @defgroup lavc_packet AVPacket + * @defgroup lavc_packet_side_data AVPacketSideData * - * Types and functions for working with AVPacket. + * Types and functions for working with AVPacketSideData. * @{ */ enum AVPacketSideDataType { @@ -318,6 +318,96 @@ typedef struct AVPacketSideData { enum AVPacketSideDataType type; } AVPacketSideData; +/** + * Allocate a new packet side data. + * + * @param sd pointer to an array of side data to which the side data should + * be added. *sd may be NULL, in which case the array will be + * initialized. + * @param nb_sd pointer to an integer containing the number of entries in + * the array. The integer value will be increased by 1 on success. + * @param type side data type + * @param size desired side data size + * @param flags currently unused. Must be zero + * + * @return pointer to freshly allocated side data on success, or NULL otherwise. + */ +AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, + enum AVPacketSideDataType type, + size_t size, int flags); + +/** + * Wrap existing data as packet side data. + * + * @param sd pointer to an array of side data to which the side data should + * be added. *sd may be NULL, in which case the array will be + * initialized + * @param nb_sd pointer to an integer containing the number of entries in + * the array. The integer value will be increased by 1 on success. + * @param type side data type + * @param data a data array. It must be allocated with the av_malloc() family + * of functions. The ownership of the data is transferred to the + * side data array on success + * @param size size of the data array + * @param flags currently unused. Must be zero + * + * @return pointer to freshly allocated side data on success, or NULL otherwise + * On failure, the side data array is unchanged and the data remains + * owned by the caller. + */ +AVPacketSideData *av_packet_side_data_add(AVPacketSideData **sd, int *nb_sd, + enum AVPacketSideDataType type, + void *data, size_t size, int flags); + +/** + * Get side information from a side data array. + * + * @param sd the array from which the side data should be fetched + * @param nb_sd value containing the number of entries in the array. + * @param type desired side information type + * + * @return pointer to side data if present or NULL otherwise + */ +const AVPacketSideData *av_packet_side_data_get(const AVPacketSideData *sd, + int nb_sd, + enum AVPacketSideDataType type); + +/** + * Remove side data of the given type from a side data array. + * + * @param sd the array from which the side data should be removed + * @param nb_sd pointer to an integer containing the number of entries in + * the array. Will be reduced by the amount of entries removed + * upon return + * @param type side information type + */ +void av_packet_side_data_remove(AVPacketSideData *sd, int *nb_sd, + enum AVPacketSideDataType type); + +/** + * Convenience function to free all the side data stored in an array, and + * the array itself. + * + * @param sd pointer to array of side data to free. Will be set to NULL + * upon return. + * @param nb_sd pointer to an integer containing the number of entries in + * the array. Will be set to 0 upon return. + */ +void av_packet_side_data_free(AVPacketSideData **sd, int *nb_sd); + +const char *av_packet_side_data_name(enum AVPacketSideDataType type); + +/** + * @} + */ + +/** + * @defgroup lavc_packet AVPacket + * + * Types and functions for working with AVPacket. + * @{ + */ + /** * This structure stores compressed data. It is typically exported by demuxers * and then passed as input to decoders, or received as output from encoders and @@ -603,8 +693,6 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size); -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - /** * Pack a dictionary for use in side_data. * From patchwork Wed Sep 27 13:12:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43979 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2594771pzh; Wed, 27 Sep 2023 06:13:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG3h5mluKR79YMj0l3H+SrVji4jEJ3ARjYrXzS7jJdxBYn9OXH6urYkUMZ4MBrzWGG5qnIh X-Received: by 2002:a17:907:3d92:b0:9ad:e62c:4517 with SMTP id he18-20020a1709073d9200b009ade62c4517mr8567759ejc.34.1695820414803; Wed, 27 Sep 2023 06:13:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820414; cv=none; d=google.com; s=arc-20160816; b=YISWkIsseD6ylvCPChH3pZIG8QbGgHMsEZ1VeuTrCjQNa4qQVyufqU6sAh7/N/tgzv Db7/AZdPInwQoQRCijv6qFrlsmry+32iWm3HXfcGtPS4w6Q/srXsPH0OxX8HCiw1Lnir 0QFF4Zr5ySEzi3osotC9N4STW6YbK9VgBMHrElmrj5lqElovgqcctcHksrD54ms106tr kEz/n6Sts55pYI1m8S8AwyBId/on7J05mtore+a4EGAgYgP9nCcKsIsfEJ0hzsloKnto cvLh4sMH+aSN9su/7K4RP7FGnDnw6CRdzI2XRPj1iLFVDQ4OxMcMe5GI/yXx5Fwfzr8K iakA== 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:dkim-signature:delivered-to; bh=bytWwRJBkFWBNykCUqq7OucqO5MVS/jHecHx3Ot6kmU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=yPwS5EZ5RuXlQDnPjckx/UXh7gJhxCb72K+necnO2Uybz4QrTNhxMjR5EPkAe89Ph6 ARZehaBCGJUnu66BLELFDYVxo2ib738ZUCVC4yk7exOe61cZ8+l0wvCnEGlX9LgHtNlW jW6rowCu3BQNCNitz6e+ZD6Ce6Zwp5hIHomw/NaK5GomnjacGiWhOQ+pMxA2qxttT0Ro 1oOYsAyI1KH3aBX5IoeitjJ2HU3yC6WlEQvG18R+1hLzQnmKIeSAOLIUDDu/BDkQKK6n pZpj4Uq/slkP0RQs03g/cX82TQVQbLqG9yQ01W+0gaGk8G0BKWqD/vxR2WAgBfbsDOKa Ihvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=ERRelz6u; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i8-20020a170906a28800b009adad3f9011si14053464ejz.298.2023.09.27.06.13.34; Wed, 27 Sep 2023 06:13:34 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=ERRelz6u; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0966F68CB00; Wed, 27 Sep 2023 16:13:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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-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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 7HWla5ukiueu 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; /** From patchwork Wed Sep 27 13:12:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43980 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2594899pzh; Wed, 27 Sep 2023 06:13:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHWW7B81IIJUJ/lu2m14x+cG6k4RQxedzKhwjUT39x1gvKms3uoZPmKo/9vIYndpOEgVbwd X-Received: by 2002:a05:6512:3497:b0:500:bff5:54ec with SMTP id v23-20020a056512349700b00500bff554ecmr1429667lfr.3.1695820426752; Wed, 27 Sep 2023 06:13:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820426; cv=none; d=google.com; s=arc-20160816; b=m9fNyZanW0OQ8vZpajXQEg7f3TX9DWiVod3hZ3PmGkdVPcyqKtco4pRPyUEvMyPmQY hUAF2sSUQdWQcIGQSesWLPyozpfeUtyaG/kKYd6ay4sfLEZGjHWL2nCt/aWjy/WDktvk 7mTfsNURgJ8agjv92+fRzXzlU1q7/BWDsExB3tBOg/W+Xo1H0DChj8iHyARgSViht9PA s+DZAGzKDdSpvHT/eQjAGo6KB1cpnGXM8XABw64DSlKWxdUzYhrfQLoqoMZG5OqHhIta H5DWOoIryQpW2to/xZOorBv1vDnRLkcjW+I0dZzmSHWMz9Q7Zda46fLSMbW+G2VlqRnn mj3w== 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:dkim-signature:delivered-to; bh=7SkY5v6V/rhdXMdP9KvY7UfXJtQgOPvy6sOGfDg5spQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=sg8cDGy21zDgo8ZvVd7uqfym1r0vDrbnfiONXkixhZKNi+HDryXn0YsbzaDieGcv/E yKBW0rqgZ8En39pZge02pe/xw6nOC936Mtba2A0Wd5NyKejUDyzIK0BKR0ZVJXrGxFPR 0u6N3atbU1LFWKJjxLgd80psGw5LbnxdUdYWl/iDzgUi/LS3hhwrR923r5pllv11ZbO2 N/LR9Pbt71DYEL7I6E9jXoMRP0+btOWd0uaQlvOnesyUkcLXlfyOp/UVpdW1Pik/HBtu pDVJ7L6DtNcTbHDyBvY485v+DrWUR+4DY7iPN2gGWGd7LLzYi/N21cNXnqSnDrSgnM1+ rS+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=E2ZbdCWN; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gt21-20020a170906f21500b009888b517932si13524128ejb.333.2023.09.27.06.13.44; Wed, 27 Sep 2023 06:13:46 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=E2ZbdCWN; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0AA1868CB09; Wed, 27 Sep 2023 16:13:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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 9786C68CB03 for ; Wed, 27 Sep 2023 16:13:09 +0300 (EEST) Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1c453379020so81407825ad.1 for ; Wed, 27 Sep 2023 06:13:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820387; x=1696425187; 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=y4MqVb44DENMYvABQyT2VmJbnxdIwV48iS+f2ktiJ6c=; b=E2ZbdCWNf2fw6gNrbYI2R0ZttOxxSG32DEL/g4mn7+hWNg/gBWfGL1PqndMKv6eF5K lR2Nt1p9KZFhQaaUDR6hj94sPd9ocQ62YwboX2+ncM6g4CcFgyI2Vc9CqjFIdZuwpQGa 27E3DENBoS15HMNMIl/tKEmEKJyhBo4vXiBMzIpHRsvxOzTmDD18A/39+VumLdjT/nNp OqW6yyBBAQzrFAgscZp4iCmnwmYESfUYrLP+W1uyEMG91ZwZb/8lTCygGmyA8KwOxCqa zsLbnX4BDAEP3qMDy84La3aJf/08U6IUV8ctnuGiANF3rEcsOrS3Vm3gQjg4wpkNNZ6l YJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820387; x=1696425187; 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=y4MqVb44DENMYvABQyT2VmJbnxdIwV48iS+f2ktiJ6c=; b=BtMhZPBqATTJw2q36QnacHHNZyMX5v2RaJSt+0/vpdVahKifxIZULtQl+y+ZbWRqYG 0YuDX0FAF5ODeDhQg+R00JySWutPB7eIKKEqmo6D5BKVXL/lpxqgaeJZw25MHs9n5oCb g4yO3KaWfW0DONZScTGiqG0fCXnDEfkjUWjqTmnN6ceKn6BH9+GdAvfEpaAk7NmgXKk1 4roGAHGtlG0+VEUhICqGFDSMRng1RjGOLfIF9jjPRnZ2YVPoJWloTyL+2x7ZeqlqEM6C eHVCJc38wBFgu+xvLTZ3tU6uj1FHYX2oOl1mfRDPQtmHi89B3UXWbaPDYgie/8jCVg7q xjIA== X-Gm-Message-State: AOJu0YzWF+VixMAXDCine+ytnZnG7loz2HE648/0M7lgalh/PEHbzlFB uzVBf7RmflIjx23s2/upP75S3/06Uj0= X-Received: by 2002:a17:902:ef96:b0:1c6:19da:b29d with SMTP id iz22-20020a170902ef9600b001c619dab29dmr1495313plb.44.1695820386560; Wed, 27 Sep 2023 06:13:06 -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.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:06 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:34 -0300 Message-ID: <20230927131242.1950-4-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 03/11] avformat/avformat: use the side data from AVStream.codecpar 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: sKeoBJHD7uw+ Deprecate AVStream.side_data and its helpers in favor of the AVStream's codecpar.side_data. This will considerably simplify the propagation of global side data to decoders and from encoders. Instead of having to do it inside packets, it will be available during init(). Global and frame specific side data will therefore be distinct. Signed-off-by: James Almer --- libavdevice/android_camera.c | 10 ++-- libavformat/avformat.c | 42 ++++------------- libavformat/avformat.h | 28 ++++++++++- libavformat/concatdec.c | 1 - libavformat/dashdec.c | 11 ----- libavformat/demux.c | 53 +++++++++++++-------- libavformat/demux_utils.c | 4 ++ libavformat/dovi_isom.c | 8 ++-- libavformat/dump.c | 6 +-- libavformat/hls.c | 11 ----- libavformat/hlsenc.c | 11 +++-- libavformat/internal.h | 4 ++ libavformat/matroskadec.c | 47 +++++++++---------- libavformat/matroskaenc.c | 55 ++++++++++++++-------- libavformat/mov.c | 91 ++++++++++++++++++++---------------- libavformat/movenc.c | 84 +++++++++++++++++---------------- libavformat/mp3enc.c | 10 ++-- libavformat/mpegenc.c | 20 +++++--- libavformat/mpegts.c | 9 ++-- libavformat/mux.c | 20 ++++++++ libavformat/mxfdec.c | 24 ++++++---- libavformat/mxfenc.c | 10 ++-- libavformat/options.c | 2 + libavformat/replaygain.c | 10 ++-- libavformat/seek.c | 2 + libavformat/version_major.h | 1 + 26 files changed, 323 insertions(+), 251 deletions(-) diff --git a/libavdevice/android_camera.c b/libavdevice/android_camera.c index 0425b27518..602b59047d 100644 --- a/libavdevice/android_camera.c +++ b/libavdevice/android_camera.c @@ -639,7 +639,7 @@ static int wait_for_image_format(AVFormatContext *avctx) static int add_display_matrix(AVFormatContext *avctx, AVStream *st) { AndroidCameraCtx *ctx = avctx->priv_data; - uint8_t *side_data; + AVPacketSideData *side_data; int32_t display_matrix[9]; av_display_rotation_set(display_matrix, ctx->sensor_orientation); @@ -648,14 +648,16 @@ static int add_display_matrix(AVFormatContext *avctx, AVStream *st) av_display_matrix_flip(display_matrix, 1, 0); } - side_data = av_stream_new_side_data(st, - AV_PKT_DATA_DISPLAYMATRIX, sizeof(display_matrix)); + side_data = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX, + sizeof(display_matrix), 0); if (!side_data) { return AVERROR(ENOMEM); } - memcpy(side_data, display_matrix, sizeof(display_matrix)); + memcpy(side_data->data, display_matrix, sizeof(display_matrix)); return 0; } diff --git a/libavformat/avformat.c b/libavformat/avformat.c index 7ff0cf3429..5b8bb7879e 100644 --- a/libavformat/avformat.c +++ b/libavformat/avformat.c @@ -48,9 +48,13 @@ void ff_free_stream(AVStream **pst) if (!st) return; +#if FF_API_AVSTREAM_SIDE_DATA +FF_DISABLE_DEPRECATION_WARNINGS for (int i = 0; i < st->nb_side_data; i++) av_freep(&st->side_data[i].data); av_freep(&st->side_data); +FF_ENABLE_DEPRECATION_WARNINGS +#endif if (st->attached_pic.data) av_packet_unref(&st->attached_pic); @@ -140,6 +144,8 @@ void avformat_free_context(AVFormatContext *s) av_free(s); } +#if FF_API_AVSTREAM_SIDE_DATA +FF_DISABLE_DEPRECATION_WARNINGS uint8_t *av_stream_get_side_data(const AVStream *st, enum AVPacketSideDataType type, size_t *size) { @@ -207,36 +213,8 @@ uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, return data; } - -int ff_stream_side_data_copy(AVStream *dst, const AVStream *src) -{ - /* Free existing side data*/ - for (int i = 0; i < dst->nb_side_data; i++) - av_free(dst->side_data[i].data); - av_freep(&dst->side_data); - dst->nb_side_data = 0; - - /* Copy side data if present */ - if (src->nb_side_data) { - dst->side_data = av_calloc(src->nb_side_data, - sizeof(*dst->side_data)); - if (!dst->side_data) - return AVERROR(ENOMEM); - dst->nb_side_data = src->nb_side_data; - - for (int i = 0; i < src->nb_side_data; i++) { - uint8_t *data = av_memdup(src->side_data[i].data, - src->side_data[i].size); - if (!data) - return AVERROR(ENOMEM); - dst->side_data[i].type = src->side_data[i].type; - dst->side_data[i].size = src->side_data[i].size; - dst->side_data[i].data = data; - } - } - - return 0; -} +FF_ENABLE_DEPRECATION_WARNINGS +#endif /** * Copy all stream parameters from source to destination stream, with the @@ -272,10 +250,6 @@ static int stream_params_copy(AVStream *dst, const AVStream *src) if (ret < 0) return ret; - ret = ff_stream_side_data_copy(dst, src); - if (ret < 0) - return ret; - av_packet_unref(&dst->attached_pic); if (src->attached_pic.data) { ret = av_packet_ref(&dst->attached_pic, &src->attached_pic); diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 43175ba332..9100d310b9 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -938,6 +938,7 @@ typedef struct AVStream { */ AVPacket attached_pic; +#if FF_API_AVSTREAM_SIDE_DATA /** * An array of side data that applies to the whole stream (i.e. the * container does not allow it to change between packets). @@ -954,13 +955,20 @@ typedef struct AVStream { * * Freed by libavformat in avformat_free_context(). * - * @see av_format_inject_global_side_data() + * @deprecated use AVStream's @ref AVCodecParameters.side_data + * "codecpar side data". */ + attribute_deprecated AVPacketSideData *side_data; /** * The number of elements in the AVStream.side_data array. + * + * @deprecated use AVStream's @ref AVCodecParameters.side_data + * "codecpar side data". */ + attribute_deprecated int nb_side_data; +#endif /** * Flags indicating events happening on the stream, a combination of @@ -1718,11 +1726,18 @@ typedef struct AVFormatContext { int (*io_close2)(struct AVFormatContext *s, AVIOContext *pb); } AVFormatContext; +#if FF_API_AVSTREAM_SIDE_DATA /** * This function will cause global side data to be injected in the next packet * of each stream as well as after any subsequent seek. + * + * @deprecated global side data is always available in every AVStream's + * @ref AVCodecParameters.side_data "codecpar side data" array. + * @see av_packet_side_data_get() */ +attribute_deprecated void av_format_inject_global_side_data(AVFormatContext *s); +#endif /** * Returns the method used to set ctx->duration. @@ -1847,6 +1862,7 @@ const AVClass *av_stream_get_class(void); */ AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c); +#if FF_API_AVSTREAM_SIDE_DATA /** * Wrap an existing array as stream side data. * @@ -1859,7 +1875,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c); * * @return zero on success, a negative AVERROR code on failure. On failure, * the stream is unchanged and the data remains owned by the caller. + * @deprecated use av_packet_side_data_add() with the stream's + * @ref AVCodecParameters.side_data "codecpar side data" */ +attribute_deprecated int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, uint8_t *data, size_t size); @@ -1871,7 +1890,10 @@ int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, * @param size side information size * * @return pointer to fresh allocated data or NULL otherwise + * @deprecated use av_packet_side_data_new() with the stream's + * @ref AVCodecParameters.side_data "codecpar side data" */ +attribute_deprecated uint8_t *av_stream_new_side_data(AVStream *stream, enum AVPacketSideDataType type, size_t size); /** @@ -1883,9 +1905,13 @@ uint8_t *av_stream_new_side_data(AVStream *stream, * or to zero if the desired side data is not present. * * @return pointer to data if present or NULL otherwise + * @deprecated use av_packet_side_data_get() with the stream's + * @ref AVCodecParameters.side_data "codecpar side data" */ +attribute_deprecated uint8_t *av_stream_get_side_data(const AVStream *stream, enum AVPacketSideDataType type, size_t *size); +#endif AVProgram *av_new_program(AVFormatContext *s, int id); diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index 5d4f67d0ac..2aeb4f1dfd 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -194,7 +194,6 @@ static int copy_stream_props(AVStream *st, AVStream *source_st) avpriv_set_pts_info(st, 64, source_st->time_base.num, source_st->time_base.den); av_dict_copy(&st->metadata, source_st->metadata, 0); - ff_stream_side_data_copy(st, source_st); return 0; } diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index cbe34f4f50..1215407f3c 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -1954,17 +1954,6 @@ static int open_demux_for_component(AVFormatContext *s, struct representation *p // copy disposition st->disposition = ist->disposition; - - // copy side data - for (int i = 0; i < ist->nb_side_data; i++) { - const AVPacketSideData *sd_src = &ist->side_data[i]; - uint8_t *dst_data; - - dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size); - if (!dst_data) - return AVERROR(ENOMEM); - memcpy(dst_data, sd_src->data, sd_src->size); - } } return 0; diff --git a/libavformat/demux.c b/libavformat/demux.c index 6decb08698..e8767e9212 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -1409,9 +1409,10 @@ FF_ENABLE_DEPRECATION_WARNINGS sti->skip_samples = 0; } +#if FF_API_AVSTREAM_SIDE_DATA if (sti->inject_global_side_data) { - for (int i = 0; i < st->nb_side_data; i++) { - const AVPacketSideData *const src_sd = &st->side_data[i]; + for (int i = 0; i < st->codecpar->nb_side_data; i++) { + const AVPacketSideData *const src_sd = &st->codecpar->side_data[i]; uint8_t *dst_data; if (av_packet_get_side_data(pkt, src_sd->type, NULL)) @@ -1427,6 +1428,7 @@ FF_ENABLE_DEPRECATION_WARNINGS } sti->inject_global_side_data = 0; } +#endif } if (!si->metafree) { @@ -2431,19 +2433,6 @@ static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket * return 0; } -static int add_coded_side_data(AVStream *st, AVCodecContext *avctx) -{ - for (int i = 0; i < avctx->nb_coded_side_data; i++) { - const AVPacketSideData *const sd_src = &avctx->coded_side_data[i]; - uint8_t *dst_data; - dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size); - if (!dst_data) - return AVERROR(ENOMEM); - memcpy(dst_data, sd_src->data, sd_src->size); - } - return 0; -} - int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) { FFFormatContext *const si = ffformatcontext(ic); @@ -2969,9 +2958,6 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) if (sti->avctx_inited) { ret = avcodec_parameters_from_context(st->codecpar, sti->avctx); - if (ret < 0) - goto find_stream_info_err; - ret = add_coded_side_data(st, sti->avctx); if (ret < 0) goto find_stream_info_err; @@ -2986,14 +2972,41 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) props->min_bitrate = sti->avctx->rc_min_rate; if (sti->avctx->rc_max_rate > 0) props->max_bitrate = sti->avctx->rc_max_rate; - if (av_stream_add_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, - (uint8_t *)props, cpb_size)) + if (!av_packet_side_data_add(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_CPB_PROPERTIES, + (uint8_t *)props, cpb_size, 0)) av_free(props); } } } sti->avctx_inited = 0; +#if FF_API_AVSTREAM_SIDE_DATA +FF_DISABLE_DEPRECATION_WARNINGS + if (st->codecpar->nb_side_data > 0) { + av_assert0(!st->side_data && !st->nb_side_data); + st->side_data = av_calloc(st->codecpar->nb_side_data, sizeof(*st->side_data)); + if (!st->side_data) { + ret = AVERROR(ENOMEM); + goto find_stream_info_err; + } + + for (int j = 0; j < st->codecpar->nb_side_data; j++) { + uint8_t *data = av_memdup(st->codecpar->side_data[j].data, + st->codecpar->side_data[j].size); + if (!data) { + ret = AVERROR(ENOMEM); + goto find_stream_info_err; + } + st->side_data[j].type = st->codecpar->side_data[j].type; + st->side_data[j].size = st->codecpar->side_data[j].size; + st->side_data[j].data = data; + st->nb_side_data++; + } + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif } find_stream_info_err: diff --git a/libavformat/demux_utils.c b/libavformat/demux_utils.c index 56cc6e15d8..2946e82295 100644 --- a/libavformat/demux_utils.c +++ b/libavformat/demux_utils.c @@ -80,6 +80,8 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba return chapter; } +#if FF_API_AVSTREAM_SIDE_DATA +FF_DISABLE_DEPRECATION_WARNINGS void av_format_inject_global_side_data(AVFormatContext *s) { FFFormatContext *const si = ffformatcontext(s); @@ -89,6 +91,8 @@ void av_format_inject_global_side_data(AVFormatContext *s) ffstream(st)->inject_global_side_data = 1; } } +FF_ENABLE_DEPRECATION_WARNINGS +#endif int avformat_queue_attached_pictures(AVFormatContext *s) { diff --git a/libavformat/dovi_isom.c b/libavformat/dovi_isom.c index c8fdf566e4..53c43649b4 100644 --- a/libavformat/dovi_isom.c +++ b/libavformat/dovi_isom.c @@ -34,7 +34,6 @@ int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st, uint32_t buf; AVDOVIDecoderConfigurationRecord *dovi; size_t dovi_size; - int ret; if (size > (1 << 30) || size < 4) return AVERROR_INVALIDDATA; @@ -64,11 +63,10 @@ int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st, dovi->dv_bl_signal_compatibility_id = 0; } - ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, - (uint8_t *)dovi, dovi_size); - if (ret < 0) { + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_DOVI_CONF, (uint8_t *)dovi, dovi_size, 0)) { av_free(dovi); - return ret; + return AVERROR(ENOMEM); } av_log(logctx, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC box, version: %d.%d, profile: %d, level: %d, " diff --git a/libavformat/dump.c b/libavformat/dump.c index d31e4c2ec6..22fc07a655 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -431,11 +431,11 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent) { int i; - if (st->nb_side_data) + if (st->codecpar->nb_side_data) av_log(ctx, AV_LOG_INFO, "%sSide data:\n", indent); - for (i = 0; i < st->nb_side_data; i++) { - const AVPacketSideData *sd = &st->side_data[i]; + for (i = 0; i < st->codecpar->nb_side_data; i++) { + const AVPacketSideData *sd = &st->codecpar->side_data[i]; av_log(ctx, AV_LOG_INFO, "%s ", indent); switch (sd->type) { diff --git a/libavformat/hls.c b/libavformat/hls.c index 332a5a15bb..f5f549b24d 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1852,17 +1852,6 @@ static int set_stream_info_from_input_stream(AVStream *st, struct playlist *pls, av_dict_copy(&st->metadata, ist->metadata, 0); - // copy side data - for (int i = 0; i < ist->nb_side_data; i++) { - const AVPacketSideData *sd_src = &ist->side_data[i]; - uint8_t *dst_data; - - dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size); - if (!dst_data) - return AVERROR(ENOMEM); - memcpy(dst_data, sd_src->data, sd_src->size); - } - ffstream(st)->need_context_update = 1; return 0; diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 08f3746ce7..038d08d207 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -1353,16 +1353,17 @@ static const char* get_relative_url(const char *master_url, const char *media_ur static int64_t get_stream_bit_rate(AVStream *stream) { - AVCPBProperties *props = (AVCPBProperties*)av_stream_get_side_data( - stream, - AV_PKT_DATA_CPB_PROPERTIES, - NULL + const AVPacketSideData *sd = av_packet_side_data_get( + stream->codecpar->side_data, stream->codecpar->nb_side_data, + AV_PKT_DATA_CPB_PROPERTIES ); if (stream->codecpar->bit_rate) return stream->codecpar->bit_rate; - else if (props) + else if (sd) { + AVCPBProperties *props = (AVCPBProperties*)sd->data; return props->max_bitrate; + } return 0; } diff --git a/libavformat/internal.h b/libavformat/internal.h index 901a8b51c6..7702986c9c 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -147,7 +147,9 @@ typedef struct FFFormatContext { int missing_ts_warning; #endif +#if FF_API_AVSTREAM_SIDE_DATA int inject_global_side_data; +#endif int avoid_negative_ts_use_pts; @@ -356,10 +358,12 @@ typedef struct FFStream { uint8_t dts_ordered; uint8_t dts_misordered; +#if FF_API_AVSTREAM_SIDE_DATA /** * Internal data to inject global side data */ int inject_global_side_data; +#endif /** * display aspect ratio (0 if unknown) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 941c0bcdc9..e1ae71e758 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2249,7 +2249,6 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo STEREOMODE_STEREO3D_MAPPING(STEREO_MODE_CONV, NOTHING) }; AVStereo3D *stereo; - int ret; stereo = av_stereo3d_alloc(); if (!stereo) @@ -2258,11 +2257,10 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo stereo->type = stereo_mode_conv[stereo_mode].type; stereo->flags = stereo_mode_conv[stereo_mode].flags; - ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo, - sizeof(*stereo)); - if (ret < 0) { + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_STEREO3D, stereo, sizeof(*stereo), 0)) { av_freep(&stereo); - return ret; + return AVERROR(ENOMEM); } return 0; @@ -2309,28 +2307,27 @@ static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) { } if (color->max_cll && color->max_fall) { size_t size = 0; - int ret; AVContentLightMetadata *metadata = av_content_light_metadata_alloc(&size); if (!metadata) return AVERROR(ENOMEM); - ret = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - (uint8_t *)metadata, size); - if (ret < 0) { + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_CONTENT_LIGHT_LEVEL, metadata, size, 0)) { av_freep(&metadata); - return ret; + return AVERROR(ENOMEM); } metadata->MaxCLL = color->max_cll; metadata->MaxFALL = color->max_fall; } if (has_mastering_primaries || has_mastering_luminance) { - AVMasteringDisplayMetadata *metadata = - (AVMasteringDisplayMetadata*) av_stream_new_side_data( - st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - sizeof(AVMasteringDisplayMetadata)); - if (!metadata) { + AVMasteringDisplayMetadata *metadata; + AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, + sizeof(AVMasteringDisplayMetadata), 0); + if (!sd) return AVERROR(ENOMEM); - } + metadata = (AVMasteringDisplayMetadata*)sd->data; memset(metadata, 0, sizeof(AVMasteringDisplayMetadata)); if (has_mastering_primaries) { metadata->display_primaries[0][0] = av_d2q(mastering_meta->r_x, INT_MAX); @@ -2356,6 +2353,7 @@ static int mkv_create_display_matrix(AVStream *st, const MatroskaTrackVideoProjection *proj, void *logctx) { + AVPacketSideData *sd; double pitch = proj->pitch, yaw = proj->yaw, roll = proj->roll; int32_t *matrix; int hflip; @@ -2372,10 +2370,13 @@ static int mkv_create_display_matrix(AVStream *st, st->index, yaw, pitch, roll); return 0; } - matrix = (int32_t*)av_stream_new_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, - 9 * sizeof(*matrix)); - if (!matrix) + sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX, + 9 * sizeof(*matrix), 0); + if (!sd) return AVERROR(ENOMEM); + matrix = (int32_t*)sd->data; hflip = yaw != 0.0; /* ProjectionPoseRoll is in the counter-clockwise direction @@ -2400,7 +2401,6 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, size_t spherical_size; uint32_t l = 0, t = 0, r = 0, b = 0; uint32_t padding = 0; - int ret; if (mkv_projection->private.size && priv_data[0] != 0) { av_log(logctx, AV_LOG_WARNING, "Unknown spherical metadata\n"); @@ -2476,11 +2476,10 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, spherical->bound_right = r; spherical->bound_bottom = b; - ret = av_stream_add_side_data(st, AV_PKT_DATA_SPHERICAL, (uint8_t *)spherical, - spherical_size); - if (ret < 0) { + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_SPHERICAL, spherical, spherical_size, 0)) { av_freep(&spherical); - return ret; + return AVERROR(ENOMEM); } return 0; diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index ba54f5f98e..82fbd38f79 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1327,7 +1327,7 @@ fail: static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st, const AVCodecParameters *par) { - const void *side_data; + const AVPacketSideData *side_data; ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLOR); @@ -1361,20 +1361,20 @@ static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st, (ypos >> 7) + 1); } - side_data = av_stream_get_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - NULL); + side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_CONTENT_LIGHT_LEVEL); if (side_data) { - const AVContentLightMetadata *metadata = side_data; + const AVContentLightMetadata *metadata = (AVContentLightMetadata *)side_data->data; ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXCLL, metadata->MaxCLL); ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXFALL, metadata->MaxFALL); } - side_data = av_stream_get_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - NULL); + side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA); if (side_data) { - const AVMasteringDisplayMetadata *metadata = side_data; + const AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)side_data->data; ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLORMASTERINGMETA); if (metadata->has_primaries) { ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_RX, @@ -1410,12 +1410,16 @@ static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st, static void mkv_handle_rotation(void *logctx, const AVStream *st, double *yaw, double *roll) { - const int32_t *matrix = - (const int32_t*)av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL); + const int32_t *matrix; + const AVPacketSideData *side_data = + av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX); - if (!matrix) + if (!side_data) return; + matrix = (int32_t *)side_data->data; + /* Check whether this is an affine transformation */ if (matrix[2] || matrix[5]) goto ignore; @@ -1462,13 +1466,15 @@ static int mkv_handle_spherical(void *logctx, EbmlWriter *writer, const AVStream *st, uint8_t private[], double *yaw, double *pitch, double *roll) { - const AVSphericalMapping *spherical = - (const AVSphericalMapping *)av_stream_get_side_data(st, AV_PKT_DATA_SPHERICAL, - NULL); + const AVPacketSideData *sd = av_packet_side_data_get(st->codecpar->side_data, + st->codecpar->nb_side_data, + AV_PKT_DATA_SPHERICAL); + const AVSphericalMapping *spherical; - if (!spherical) + if (!sd) return 0; + spherical = (const AVSphericalMapping *)sd->data; if (spherical->projection != AV_SPHERICAL_EQUIRECTANGULAR && spherical->projection != AV_SPHERICAL_EQUIRECTANGULAR_TILE && spherical->projection != AV_SPHERICAL_CUBEMAP) { @@ -1628,6 +1634,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, format = stereo_mode; } } else { + const AVPacketSideData *sd; const AVStereo3D *stereo; /* The following macro presumes all MATROSKA_VIDEO_STEREOMODE_TYPE_* * values to be in the range 0..254. */ @@ -1639,11 +1646,13 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, }; int fmt; - stereo = (const AVStereo3D*)av_stream_get_side_data(st, AV_PKT_DATA_STEREO3D, - NULL); - if (!stereo) + sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_STEREO3D); + if (!sd) return 0; + stereo = (const AVStereo3D*)sd->data; + /* A garbage AVStereo3D or something with no Matroska analogon. */ if ((unsigned)stereo->type >= FF_ARRAY_ELEMS(conversion_table)) return 0; @@ -1681,6 +1690,7 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, const MatroskaMux { #if CONFIG_MATROSKA_MUXER const AVDOVIDecoderConfigurationRecord *dovi; + const AVPacketSideData *sd; if (IS_SEEKABLE(s->pb, mkv)) { track->blockadditionmapping_offset = avio_tell(pb); @@ -1697,9 +1707,14 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, const MatroskaMux } } - dovi = (const AVDOVIDecoderConfigurationRecord *) - av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); - if (dovi && dovi->dv_profile <= 10) { + sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_DOVI_CONF); + + if (!sd) + return; + + dovi = (const AVDOVIDecoderConfigurationRecord *)sd->data; + if (dovi->dv_profile <= 10) { ebml_master mapping; uint8_t buf[ISOM_DVCC_DVVC_SIZE]; uint32_t type; diff --git a/libavformat/mov.c b/libavformat/mov.c index 1996e0028c..db528d9907 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -799,6 +799,7 @@ static int mov_read_esds(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; + AVPacketSideData *sd; enum AVAudioServiceType *ast; int ac3info, acmod, lfeon, bsmod; uint64_t mask; @@ -807,11 +808,14 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; st = c->fc->streams[c->fc->nb_streams-1]; - ast = (enum AVAudioServiceType*)av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE, - sizeof(*ast)); - if (!ast) + sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_AUDIO_SERVICE_TYPE, + sizeof(*ast), 0); + if (!sd) return AVERROR(ENOMEM); + ast = (enum AVAudioServiceType*)sd->data; ac3info = avio_rb24(pb); bsmod = (ac3info >> 14) & 0x7; acmod = (ac3info >> 11) & 0x7; @@ -833,6 +837,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; + AVPacketSideData *sd; enum AVAudioServiceType *ast; int eac3info, acmod, lfeon, bsmod; uint64_t mask; @@ -841,11 +846,15 @@ static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; st = c->fc->streams[c->fc->nb_streams-1]; - ast = (enum AVAudioServiceType*)av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE, - sizeof(*ast)); - if (!ast) + sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_AUDIO_SERVICE_TYPE, + sizeof(*ast), 0); + if (!sd) return AVERROR(ENOMEM); + ast = (enum AVAudioServiceType*)sd->data; + /* No need to parse fields for additional independent substreams and its * associated dependent substreams since libavcodec's E-AC-3 decoder * does not support them yet. */ @@ -1747,7 +1756,6 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; - uint8_t *icc_profile; char color_parameter_type[5] = { 0 }; uint16_t color_primaries, color_trc, color_matrix; int ret; @@ -1768,10 +1776,13 @@ static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom) } if (!strncmp(color_parameter_type, "prof", 4)) { - icc_profile = av_stream_new_side_data(st, AV_PKT_DATA_ICC_PROFILE, atom.size - 4); - if (!icc_profile) + AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_ICC_PROFILE, + atom.size - 4, 0); + if (!sd) return AVERROR(ENOMEM); - ret = ffio_read_size(pb, icc_profile, atom.size - 4); + ret = ffio_read_size(pb, sd->data, atom.size - 4); if (ret < 0) return ret; } else { @@ -6841,8 +6852,9 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom) AVEncryptionInitInfo *info, *old_init_info; uint8_t **key_ids; AVStream *st; - uint8_t *side_data, *extra_data, *old_side_data; - size_t side_data_size, old_side_data_size; + const AVPacketSideData *old_side_data; + uint8_t *side_data, *extra_data; + size_t side_data_size; int ret = 0; unsigned int version, kid_count, extra_data_size, alloc_size = 0; @@ -6920,9 +6932,10 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom) info->data_size = extra_data_size; // If there is existing initialization data, append to the list. - old_side_data = av_stream_get_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_INFO, &old_side_data_size); + old_side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_ENCRYPTION_INIT_INFO); if (old_side_data) { - old_init_info = av_encryption_init_info_get_side_data(old_side_data, old_side_data_size); + old_init_info = av_encryption_init_info_get_side_data(old_side_data->data, old_side_data->size); if (old_init_info) { // Append to the end of the list. for (AVEncryptionInitInfo *cur = old_init_info;; cur = cur->next) { @@ -6944,9 +6957,9 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom) ret = AVERROR(ENOMEM); goto finish; } - ret = av_stream_add_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_INFO, - side_data, side_data_size); - if (ret < 0) + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_ENCRYPTION_INIT_INFO, + side_data, side_data_size, 0)) av_free(side_data); finish: @@ -8725,46 +8738,42 @@ static int mov_read_header(AVFormatContext *s) break; case AVMEDIA_TYPE_VIDEO: if (sc->display_matrix) { - err = av_stream_add_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, (uint8_t*)sc->display_matrix, - sizeof(int32_t) * 9); - if (err < 0) - return err; + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX, + (uint8_t*)sc->display_matrix, sizeof(int32_t) * 9, 0)) + return AVERROR(ENOMEM); sc->display_matrix = NULL; } if (sc->stereo3d) { - err = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, - (uint8_t *)sc->stereo3d, - sizeof(*sc->stereo3d)); - if (err < 0) - return err; + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_STEREO3D, + (uint8_t *)sc->stereo3d, sizeof(*sc->stereo3d), 0)) + return AVERROR(ENOMEM); sc->stereo3d = NULL; } if (sc->spherical) { - err = av_stream_add_side_data(st, AV_PKT_DATA_SPHERICAL, - (uint8_t *)sc->spherical, - sc->spherical_size); - if (err < 0) - return err; + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_SPHERICAL, + (uint8_t *)sc->spherical, sc->spherical_size, 0)) + return AVERROR(ENOMEM); sc->spherical = NULL; } if (sc->mastering) { - err = av_stream_add_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - (uint8_t *)sc->mastering, - sizeof(*sc->mastering)); - if (err < 0) - return err; + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, + (uint8_t *)sc->mastering, sizeof(*sc->mastering), 0)) + return AVERROR(ENOMEM); sc->mastering = NULL; } if (sc->coll) { - err = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - (uint8_t *)sc->coll, - sc->coll_size); - if (err < 0) - return err; + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_CONTENT_LIGHT_LEVEL, + (uint8_t *)sc->coll, sc->coll_size, 0)) + return AVERROR(ENOMEM); sc->coll = NULL; } diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 7e96e7435f..7100ae3b59 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -672,11 +672,12 @@ struct mpeg4_bit_rate_values { static struct mpeg4_bit_rate_values calculate_mpeg4_bit_rates(MOVTrack *track) { - AVCPBProperties *props = track->st ? - (AVCPBProperties*)av_stream_get_side_data(track->st, - AV_PKT_DATA_CPB_PROPERTIES, - NULL) : + const AVPacketSideData *sd = track->st ? + av_packet_side_data_get(track->st->codecpar->side_data, + track->st->codecpar->nb_side_data, + AV_PKT_DATA_CPB_PROPERTIES) : NULL; + AVCPBProperties *props = sd ? (AVCPBProperties *)sd->data : NULL; struct mpeg4_bit_rate_values bit_rates = { 0 }; bit_rates.avg_bit_rate = compute_avg_bitrate(track); @@ -2129,18 +2130,17 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc) // Ref (MOV): https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9 // Ref (MP4): ISO/IEC 14496-12:2012 - const uint8_t *icc_profile; - size_t icc_profile_size; - if (prefer_icc) { - icc_profile = av_stream_get_side_data(track->st, AV_PKT_DATA_ICC_PROFILE, &icc_profile_size); + AVPacketSideData *sd = av_packet_side_data_get(track->st->codecpar->side_data, + track->st->codecpar->nb_side_data, + AV_PKT_DATA_ICC_PROFILE); - if (icc_profile) { - avio_wb32(pb, 12 + icc_profile_size); + if (sd) { + avio_wb32(pb, 12 + sd->size); ffio_wfourcc(pb, "colr"); ffio_wfourcc(pb, "prof"); - avio_write(pb, icc_profile, icc_profile_size); - return 12 + icc_profile_size; + avio_write(pb, sd->data, sd->size); + return 12 + sd->size; } else { av_log(NULL, AV_LOG_INFO, "no ICC profile found, will write nclx/nclc colour info instead\n"); @@ -2173,14 +2173,15 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc) static int mov_write_clli_tag(AVIOContext *pb, MOVTrack *track) { - const uint8_t *side_data; + const AVPacketSideData *side_data; const AVContentLightMetadata *content_light_metadata; - side_data = av_stream_get_side_data(track->st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, NULL); + side_data = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_CONTENT_LIGHT_LEVEL); if (!side_data) { return 0; } - content_light_metadata = (const AVContentLightMetadata*)side_data; + content_light_metadata = (const AVContentLightMetadata*)side_data->data; avio_wb32(pb, 12); // size ffio_wfourcc(pb, "clli"); @@ -2198,11 +2199,13 @@ static int mov_write_mdcv_tag(AVIOContext *pb, MOVTrack *track) { const int chroma_den = 50000; const int luma_den = 10000; - const uint8_t *side_data; - const AVMasteringDisplayMetadata *metadata; + const AVPacketSideData *side_data; + const AVMasteringDisplayMetadata *metadata = NULL; - side_data = av_stream_get_side_data(track->st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL); - metadata = (const AVMasteringDisplayMetadata*)side_data; + side_data = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA); + if (side_data) + metadata = (const AVMasteringDisplayMetadata*)side_data->data; if (!metadata || !metadata->has_primaries || !metadata->has_luminance) { return 0; } @@ -2421,7 +2424,8 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex track->par->color_trc != AVCOL_TRC_UNSPECIFIED && track->par->color_space != AVCOL_SPC_UNSPECIFIED; if (has_color_info || mov->flags & FF_MOV_FLAG_WRITE_COLR || - av_stream_get_side_data(track->st, AV_PKT_DATA_ICC_PROFILE, NULL)) { + av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_ICC_PROFILE)) { int prefer_icc = mov->flags & FF_MOV_FLAG_PREFER_ICC || !has_color_info; mov_write_colr_tag(pb, track, prefer_icc); } @@ -2435,17 +2439,19 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex } if (track->mode == MODE_MP4 && mov->fc->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) { - AVStereo3D* stereo_3d = (AVStereo3D*) av_stream_get_side_data(track->st, AV_PKT_DATA_STEREO3D, NULL); - AVSphericalMapping* spherical_mapping = (AVSphericalMapping*)av_stream_get_side_data(track->st, AV_PKT_DATA_SPHERICAL, NULL); - AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) - av_stream_get_side_data(track->st, AV_PKT_DATA_DOVI_CONF, NULL); + const AVPacketSideData *stereo_3d = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_STEREO3D); + const AVPacketSideData *spherical_mapping = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_SPHERICAL); + const AVPacketSideData *dovi = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data, + AV_PKT_DATA_DOVI_CONF); if (stereo_3d) - mov_write_st3d_tag(s, pb, stereo_3d); + mov_write_st3d_tag(s, pb, (AVStereo3D*)stereo_3d->data); if (spherical_mapping) - mov_write_sv3d_tag(mov->fc, pb, spherical_mapping); + mov_write_sv3d_tag(mov->fc, pb, (AVSphericalMapping*)spherical_mapping->data); if (dovi) - mov_write_dvcc_dvvc_tag(s, pb, dovi); + mov_write_dvcc_dvvc_tag(s, pb, (AVDOVIDecoderConfigurationRecord *)dovi->data); } if (track->par->sample_aspect_ratio.den && track->par->sample_aspect_ratio.num) { @@ -3392,7 +3398,6 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov, int group = 0; uint32_t *display_matrix = NULL; - size_t display_matrix_size; int i; if (mov->mode == MODE_AVIF) @@ -3402,15 +3407,16 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov, duration *= mov->avif_loop_count; if (st) { + const AVPacketSideData *sd; if (mov->per_stream_grouping) group = st->index; else group = st->codecpar->codec_type; - display_matrix = (uint32_t*)av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, - &display_matrix_size); - if (display_matrix && display_matrix_size < 9 * sizeof(*display_matrix)) - display_matrix = NULL; + sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX); + if (sd && sd->size == 9 * sizeof(*display_matrix)) + display_matrix = (uint32_t *)sd->data; } if (track->flags & MOV_TRACK_ENABLED) @@ -4608,12 +4614,11 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov, track->tref_tag = MKTAG('h','i','n','t'); track->tref_id = mov->tracks[track->src_track].track_id; } else if (track->par->codec_type == AVMEDIA_TYPE_AUDIO) { - size_t size; - int *fallback; - fallback = (int*)av_stream_get_side_data(track->st, - AV_PKT_DATA_FALLBACK_TRACK, - &size); - if (fallback != NULL && size == sizeof(int)) { + const AVPacketSideData *sd = av_packet_side_data_get(track->st->codecpar->side_data, + track->st->codecpar->nb_side_data, + AV_PKT_DATA_FALLBACK_TRACK ); + if (sd && sd->size == sizeof(int)) { + int *fallback = (int *)sd->data; if (*fallback >= 0 && *fallback < mov->nb_streams) { track->tref_tag = MKTAG('f','a','l','l'); track->tref_id = mov->tracks[*fallback].track_id; @@ -5446,7 +5451,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s) if (st->codecpar->codec_id == AV_CODEC_ID_AC3 || st->codecpar->codec_id == AV_CODEC_ID_EAC3 || st->codecpar->codec_id == AV_CODEC_ID_TRUEHD || - av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL)) + av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_DOVI_CONF)) has_dolby = 1; } diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 5e81f72a59..ece431e67d 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -400,10 +400,10 @@ static int mp3_queue_flush(AVFormatContext *s) static void mp3_update_xing(AVFormatContext *s) { MP3Context *mp3 = s->priv_data; + const AVPacketSideData *sd; AVReplayGain *rg; uint16_t tag_crc; uint8_t *toc; - size_t rg_size; int i; int64_t old_pos = avio_tell(s->pb); @@ -423,11 +423,13 @@ static void mp3_update_xing(AVFormatContext *s) } /* write replaygain */ - rg = (AVReplayGain*)av_stream_get_side_data(s->streams[0], AV_PKT_DATA_REPLAYGAIN, - &rg_size); - if (rg && rg_size >= sizeof(*rg)) { + sd = av_packet_side_data_get(s->streams[0]->codecpar->side_data, + s->streams[0]->codecpar->nb_side_data, + AV_PKT_DATA_REPLAYGAIN); + if (sd && sd->size >= sizeof(*rg)) { uint16_t val; + rg = (AVReplayGain *)sd->data; AV_WB32(mp3->xing_frame + mp3->xing_offset + 131, av_rescale(rg->track_peak, 1 << 23, 100000)); diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index c06e308296..b6f5f1026d 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -342,8 +342,6 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) lpcm_id = LPCM_ID; for (i = 0; i < ctx->nb_streams; i++) { - AVCPBProperties *props; - st = ctx->streams[i]; stream = av_mallocz(sizeof(StreamInfo)); if (!stream) @@ -430,13 +428,18 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) stream->max_buffer_size = 4 * 1024; s->audio_bound++; break; - case AVMEDIA_TYPE_VIDEO: + case AVMEDIA_TYPE_VIDEO: { + const AVPacketSideData *sd; + AVCPBProperties *props = NULL; if (st->codecpar->codec_id == AV_CODEC_ID_H264) stream->id = h264_id++; else stream->id = mpv_id++; - props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL); + sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_CPB_PROPERTIES); + if (sd) + props = (AVCPBProperties*)sd->data; if (props && props->buffer_size) stream->max_buffer_size = 6 * 1024 + props->buffer_size / 8; else { @@ -453,6 +456,7 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) } s->video_bound++; break; + } case AVMEDIA_TYPE_SUBTITLE: stream->id = mps_id++; stream->max_buffer_size = 16 * 1024; @@ -470,12 +474,16 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) audio_bitrate = 0; video_bitrate = 0; for (i = 0; i < ctx->nb_streams; i++) { - AVCPBProperties *props; + const AVPacketSideData *sd; + AVCPBProperties *props = NULL; int codec_rate; st = ctx->streams[i]; stream = (StreamInfo *)st->priv_data; - props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL); + sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_CPB_PROPERTIES); + if (sd) + props = (AVCPBProperties*)sd->data; if (props) codec_rate = props->max_bitrate; else diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index d825bf0b5d..3460a3b312 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2187,7 +2187,6 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type uint32_t buf; AVDOVIDecoderConfigurationRecord *dovi; size_t dovi_size; - int ret; int dependency_pid; if (desc_end - *pp < 4) // (8 + 8 + 7 + 6 + 1 + 1 + 1) / 8 @@ -2218,11 +2217,11 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type dovi->dv_bl_signal_compatibility_id = 0; } - ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, - (uint8_t *)dovi, dovi_size); - if (ret < 0) { + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_DOVI_CONF, + (uint8_t *)dovi, dovi_size, 0)) { av_free(dovi); - return ret; + return AVERROR(ENOMEM); } av_log(fc, AV_LOG_TRACE, "DOVI, version: %d.%d, profile: %d, level: %d, " diff --git a/libavformat/mux.c b/libavformat/mux.c index d3779202f0..43bade97ec 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -279,6 +279,26 @@ FF_ENABLE_DEPRECATION_WARNINGS break; } +#if FF_API_AVSTREAM_SIDE_DATA +FF_DISABLE_DEPRECATION_WARNINGS + /* if the caller is using the deprecated AVStream side_data API, + * copy its contents to AVStream.codecpar, giving it priority + over existing side data in the latter */ + for (int i = 0; i < st->nb_side_data; i++) { + const AVPacketSideData *sd_src = &st->side_data[i]; + AVPacketSideData *sd_dst; + + sd_dst = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data, + sd_src->type, sd_src->size, 0); + if (!sd_dst) { + ret = AVERROR(ENOMEM); + goto fail; + } + memcpy(sd_dst->data, sd_src->data, sd_src->size); + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + desc = avcodec_descriptor_get(par->codec_id); if (desc && desc->props & AV_CODEC_PROP_REORDER) sti->reorder = 1; diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 4846c5d206..ce41a98536 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2579,10 +2579,12 @@ static int parse_mca_labels(MXFContext *mxf, MXFTrack *source_track, MXFDescript if (service_type != AV_AUDIO_SERVICE_TYPE_NB && service_type != AV_AUDIO_SERVICE_TYPE_MAIN && !ambigous_service_type) { enum AVAudioServiceType *ast; - uint8_t* side_data = av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE, sizeof(*ast)); + AVPacketSideData *side_data = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_AUDIO_SERVICE_TYPE, + sizeof(*ast), 0); if (!side_data) return AVERROR(ENOMEM); - ast = (enum AVAudioServiceType*)side_data; + ast = (enum AVAudioServiceType*)side_data->data; *ast = service_type; } @@ -2982,19 +2984,21 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) st->codecpar->color_trc = mxf_get_codec_ul(ff_mxf_color_trc_uls, &descriptor->color_trc_ul)->id; st->codecpar->color_space = mxf_get_codec_ul(ff_mxf_color_space_uls, &descriptor->color_space_ul)->id; if (descriptor->mastering) { - ret = av_stream_add_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - (uint8_t *)descriptor->mastering, - sizeof(*descriptor->mastering)); - if (ret < 0) + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, + (uint8_t *)descriptor->mastering, sizeof(*descriptor->mastering), 0)) { + ret = AVERROR(ENOMEM); goto fail_and_free; + } descriptor->mastering = NULL; } if (descriptor->coll) { - ret = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - (uint8_t *)descriptor->coll, - descriptor->coll_size); - if (ret < 0) + if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_CONTENT_LIGHT_LEVEL, + (uint8_t *)descriptor->coll, descriptor->coll_size, 0)) { + ret = AVERROR(ENOMEM); goto fail_and_free; + } descriptor->coll = NULL; } } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index cb299412e2..7d5d4c180d 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -556,7 +556,8 @@ static void mxf_write_primer_pack(AVFormatContext *s) if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_H264 && !sc->avc_intra) { will_have_avc_tags = 1; } - if (av_stream_get_side_data(s->streams[i], AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL)) { + if (av_packet_side_data_get(s->streams[i]->codecpar->side_data, s->streams[i]->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA)) { will_have_mastering_tags = 1; } if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_FFV1) { @@ -1158,7 +1159,7 @@ static int64_t mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID const MXFCodecUL *color_trc_ul; const MXFCodecUL *color_space_ul; int64_t pos = mxf_write_generic_desc(s, st, key); - uint8_t *side_data; + const AVPacketSideData *side_data; color_primaries_ul = mxf_get_codec_ul_by_id(ff_mxf_color_primaries_uls, st->codecpar->color_primaries); color_trc_ul = mxf_get_codec_ul_by_id(ff_mxf_color_trc_uls, st->codecpar->color_trc); @@ -1344,9 +1345,10 @@ static int64_t mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID avio_write(pb, *sc->codec_ul, 16); // Mastering Display metadata - side_data = av_stream_get_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL); + side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA); if (side_data) { - const AVMasteringDisplayMetadata *metadata = (const AVMasteringDisplayMetadata*)side_data; + const AVMasteringDisplayMetadata *metadata = (const AVMasteringDisplayMetadata*)side_data->data; if (metadata->has_primaries) { mxf_write_local_tag(s, 12, 0x8301); avio_wb16(pb, rescale_mastering_chroma(metadata->display_primaries[0][0])); diff --git a/libavformat/options.c b/libavformat/options.c index 194042820e..0f79fe0fa4 100644 --- a/libavformat/options.c +++ b/libavformat/options.c @@ -311,7 +311,9 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st->sample_aspect_ratio = (AVRational) { 0, 1 }; +#if FF_API_AVSTREAM_SIDE_DATA sti->inject_global_side_data = si->inject_global_side_data; +#endif sti->need_context_update = 1; diff --git a/libavformat/replaygain.c b/libavformat/replaygain.c index 915bcb2382..ab62090ffe 100644 --- a/libavformat/replaygain.c +++ b/libavformat/replaygain.c @@ -69,16 +69,20 @@ static int32_t parse_value(const char *value, int32_t min) int ff_replaygain_export_raw(AVStream *st, int32_t tg, uint32_t tp, int32_t ag, uint32_t ap) { + AVPacketSideData *sd; AVReplayGain *replaygain; if (tg == INT32_MIN && ag == INT32_MIN) return 0; - replaygain = (AVReplayGain*)av_stream_new_side_data(st, AV_PKT_DATA_REPLAYGAIN, - sizeof(*replaygain)); - if (!replaygain) + sd = av_packet_side_data_new(&st->codecpar->side_data, + &st->codecpar->nb_side_data, + AV_PKT_DATA_REPLAYGAIN, + sizeof(*replaygain), 0); + if (!sd) return AVERROR(ENOMEM); + replaygain = (AVReplayGain*)sd->data; replaygain->track_gain = tg; replaygain->track_peak = tp; replaygain->album_gain = ag; diff --git a/libavformat/seek.c b/libavformat/seek.c index 386312cd3a..0180188595 100644 --- a/libavformat/seek.c +++ b/libavformat/seek.c @@ -745,8 +745,10 @@ void ff_read_frame_flush(AVFormatContext *s) for (int j = 0; j < MAX_REORDER_DELAY + 1; j++) sti->pts_buffer[j] = AV_NOPTS_VALUE; +#if FF_API_AVSTREAM_SIDE_DATA if (si->inject_global_side_data) sti->inject_global_side_data = 1; +#endif sti->skip_samples = 0; } diff --git a/libavformat/version_major.h b/libavformat/version_major.h index d1d6f95b15..3c04b38871 100644 --- a/libavformat/version_major.h +++ b/libavformat/version_major.h @@ -47,6 +47,7 @@ #define FF_API_AVFORMAT_IO_CLOSE (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_AVIO_WRITE_NONCONST (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_LAVF_SHORTEST (LIBAVFORMAT_VERSION_MAJOR < 61) +#define FF_API_AVSTREAM_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_R_FRAME_RATE 1 From patchwork Wed Sep 27 13:12:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43981 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595002pzh; Wed, 27 Sep 2023 06:13:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFDP7BP0t9/ub4g/dud1kx73/ThVktX6HXSkhN6rNaNsYqLhnwyccnRdosSVNf+UwgGnzCw X-Received: by 2002:a05:6512:3e1c:b0:503:446:c7b1 with SMTP id i28-20020a0565123e1c00b005030446c7b1mr1852908lfv.40.1695820435471; Wed, 27 Sep 2023 06:13:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820435; cv=none; d=google.com; s=arc-20160816; b=ss9vKqYEa0hDm95kTDVcgGQK4hpORxBK0vwPB2orRxQ2lQa9P9wYoZVa52sUKKLfqB ptxOyGTWpkf4BWAyn/qZhEmk+ktme+Vsn6tNY00qshX4aZI9SLueqLjEWo9gLg/vGmUg xUrmI5vN+aQWzj+SdS5kXm071UZMl+HlEuro7sZ+EBhNl6C4J6lEsWpOyGfNsKfQAhD0 MU4QEbLx0bj4g/x1w4kWmqeRBL+8KA7D8dUhMqR7JBxkP5uKPsHY104f6DHvfe6XEiQy BdFHA+3LavDTNXkn3jpeEbzKitN9PhRUMFEt2uYCyu4wHui2FJtGJWJpBHtkAiyBREVU LRsA== 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:dkim-signature:delivered-to; bh=ORXHlqieDswRb/lPeOaMIeS/oBppjM8X47LTgLrl7Tk=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=efcPRfviJDYT7S1H5UqImjhqnJfKgWlIZlVKmqB0WIVAbDZ0pQFQMmp4KDunCgDvOF MT6W7GUpCEiY6yO8hBRmTTkXvwBJyFxBvfH+UzyGBEuzXgkZr87iXzco1IHoBIHoMdKq joeObXcmkEOISPs46mPXYZ7r0RzuJaaByuYQrDepzqVTdo2O/L3x6aAESoiMVZCXy+du Oa6vo8TYhLNOQnEwTC4HZDcdI/hsOQORPmaYOg0md9c+Uv03GUoZ53j0zFQHjbg8Xk0u /XKiysDNbUgZMB4tNJCV9fp0CHVYcjsiWAp2FbzKLmqJTBjvw91B22LCYj003xACxL4b euFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=B39mn6Cw; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l21-20020aa7c315000000b00533f9dc9145si7139447edq.684.2023.09.27.06.13.55; Wed, 27 Sep 2023 06:13:55 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=B39mn6Cw; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2B41168CB13; Wed, 27 Sep 2023 16:13:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2429168CAFB for ; Wed, 27 Sep 2023 16:13:10 +0300 (EEST) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1c3d8fb23d9so80544535ad.0 for ; Wed, 27 Sep 2023 06:13:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820388; x=1696425188; 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=6ncFxisiQbRrms/BF57rvkX1p96HApfXGDNtuFi+5LE=; b=B39mn6Cwe3l+8vg0lyz5dUc/Ztb+7lwC2vakejVUqN7TYj7nqdgHEM0jkkpwhyxYM9 7hKOOMuTKWLZGWrDRBKud5la6/9XEhLGtrtkGRi1KXJv0GKUvmv+5Kgh0d/VshFvFvu+ 312InTfsoVe4bXUxZu2JZqgoRPZHtn6EGLRXgeTlBnd7oO2w6Lx/jTrS1yp52JOazcyw ix42uWzBtXrZT2cVIYpnjgKS7aMnLt/D2JTZMaFI9pYjDXrSlexWaQyryiCT1H036rVJ Gvhk6+MOxkMlvvMPHB7HZsqaTCG69Ro1E8clF6eTr2iP9+dfzVnLzQYqsfQy7Om8EtlL LmFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820388; x=1696425188; 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=6ncFxisiQbRrms/BF57rvkX1p96HApfXGDNtuFi+5LE=; b=iderNmbL4slOTBOsE7URWJErll417qf0NsK40E76CX5IsR8p3uBcSmLhqnHoXMS26P 9oeUXR8a+fQQ7GyZCC9U8eki17pQA2XTmLUfoLKDCcb4wWmvXHYMmifzwmvvwTAYqbwQ Rdw0hFDl1dEMQ5g1+Xm9bISJTLy/boCV3NhwCW/zMVRG8GKbLHUSBGinKiGtR+0ksuV/ +nGNGfzwhzEA/Y6COSWwNfuz6aTamP7ukYTdF6QNVhIykkqQLhaONi7b1iFO3sqk94fe dswkkNEZgSXY3UcD5YjMWz26HTJINTTkyAduKFKp85ACp9DocnU/7HyzEj3oOQjTEKOA J9aw== X-Gm-Message-State: AOJu0YyjSmTYpMcR1pGJCIh2PewsZLE90qZJhyf/YbT345AcEBDqwlzQ X83WRZZXgx5XEzRpdi7bicFUKLAH8Bs= X-Received: by 2002:a17:902:e887:b0:1c6:de7:addd with SMTP id w7-20020a170902e88700b001c60de7adddmr1801720plg.48.1695820388010; Wed, 27 Sep 2023 06:13:08 -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.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:07 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:35 -0300 Message-ID: <20230927131242.1950-5-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 04/11] avcodec/packet: add some documentation for AVPacketSideData 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: qfjRilA7X2Jp Explaining what or who may use it, and in what scenarios. Signed-off-by: James Almer --- libavcodec/packet.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavcodec/packet.h b/libavcodec/packet.h index 96fc0084d6..f88dad2b3c 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -312,6 +312,21 @@ enum AVPacketSideDataType { #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED +/** + * This structure stores auxiliary data. It is typically exported by demuxers + * within @ref AVStream.codecpar.side_data "AVStream's codec parameters" or an + * @ref AVPacket.side_data "AVPacket" and then passed as input to decoders + * through the @ref AVCodecContext.coded_side_data "decoder context's side data" + * for initialization or through @ref AVPacket.side_data "AVPacket", or received + * as output from encoders within the @ref AVCodecContext.coded_side_data + * "encoder context's side data" or @ref AVPacket.side_data "AVPacket" and then + * passed to muxers through @ref AVStream.codecpar.side_data "AVStream's codec + * parameters" for initialization or through @ref AVPacket.side_data "AVPacket". + * + * Different modules may export or be provided different types of side data + * depending on media type and codec. Refer to @ref AVPacketSideDataType for a + * list of defined types and where they may be found or used. + */ typedef struct AVPacketSideData { uint8_t *data; size_t size; From patchwork Wed Sep 27 13:12:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43982 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595107pzh; Wed, 27 Sep 2023 06:14:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFCEYFW0PGbLJi1KKqsLfhMB1RB0NXk4vPYryuiTKPr6vKq8/geF5EUTBerI/OSoE0lb4+t X-Received: by 2002:a05:6512:3ea:b0:500:b8bc:bd9a with SMTP id n10-20020a05651203ea00b00500b8bcbd9amr1557626lfq.49.1695820445199; Wed, 27 Sep 2023 06:14:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820445; cv=none; d=google.com; s=arc-20160816; b=zFBYu/7bEk9KLrtW053uWPXKD8SlRXfu5I5w8f12a6Jco8aXH/6/KK9A01G472iH16 POYIwls7L+DtnHjKCFG3KujVQyYzKrUjvxEeoNkpi4nCcB6UDrCRQVY0b1ogUw1v9ZkK J2TmOHswbR4KFlXvbKOWnmcMwVKzP/Np9wGWU6M6dy3q97qnIT6VydHnupviOg5+u78J jJjjSli4900Qv3VxQZvltE/wXZ309tUwto/WJi4eMLv33saVdKLz/PM0MiFg4xDOagnW c6ou17o9RyI768f/WhHryoPEJoqxYGvvIPvuC3RFL4dwM0JhS21AYelzLO9Oh9P84rPM h3+w== 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:dkim-signature:delivered-to; bh=dmnb434FawgFodU051o6Gpo0CMNA/8X07zPJyZsxsoU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=cEBnjAhMQRhOaMQsfebW4Bd7D3NYI7sEVec3IBvOtX1D1X+HvfLq+2TUtwmroZc8lI 3FptMlJeWwE0hGGC/9UTDqrGcNUS1S4sm0m6ptOTSUc7SEW3Jna44vEKPTbyQGHf3MCM w36tnUy3hc1ygy3hjnSO/73OQyJV+VrTdqSzmru7xAxJwLWVB+u6aPt47H98lfkqXw4H dkIRfpNMSbm/OPUiCOcctRjkExkWlVfXe47W1tgS9CCsryzsFBMzLM4ZDxOB/64AAwxb 6Yp66YxOtko/l2NrKZKaTTeagM8qi8aBn+iIMb/Yyy7nwp4EBg9KEu4RTaxwPY4FULwK rpJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=kwzme8z3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o5-20020aa7d3c5000000b00534f0f5f71fsi863899edr.272.2023.09.27.06.14.04; Wed, 27 Sep 2023 06:14:05 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=kwzme8z3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 217E168CB15; Wed, 27 Sep 2023 16:13:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 862D868CB0C for ; Wed, 27 Sep 2023 16:13:11 +0300 (EEST) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1c44c0f9138so81279005ad.2 for ; Wed, 27 Sep 2023 06:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820389; x=1696425189; 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=IBFNJz8/loI0/6cfvAz3uVX+2JUDotdYqHgK07J4Yxw=; b=kwzme8z3jA/WhMvA5q+2yXR8YTehwdI0SRmztUkWoiiXMxkukftmz8QvHzgnTl9Vzx OE4Sqonl1JxBl7gGjNlMS0IPWgsgE+agvCrYGQOv4asrFq4LDIPs/C3w7kqAtBzCSIdl sr9iK95AgNu27/aar5N94E+uo41UQ26btPSyEM6PjqVYmqYqYXpo87Qvx2kv0bTTSbg8 1DbeuAEmduqCVMBOkgH4Ge6pXdz1+j4Pmajd6Tt718axC/bI28ZuvCFkthrHargyvd/W h/uVGEn2UxrbvsOzUG3IzxHCrPpuo+O/FRAWJZ0W3YVbC65qXX+IPPlShaLtqxElq9D4 ZIrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820389; x=1696425189; 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=IBFNJz8/loI0/6cfvAz3uVX+2JUDotdYqHgK07J4Yxw=; b=Wrgl3QU9N5OBob+XLoOQ3EgPNXek6bUMjD62BFEoazezquzaULm+96/ax+5llFb96M PsvyhUNkz2KcS4yAXaTcwogPG/Ze2swllo5Dtj0H6OJVMXRQvnCaPeAGxQKbodhU5BDl CfCtnGEWgAYEYCfE/zO9Ox01WrpGPGsM3hl/JYVU01R5R2TgmsCJHO07lP42Jba8/7fJ QfLLp6u0PLaA/QF5YS1az4FZfXPDhLkWIudSCKjbTXFsvjj/bPB+X0O5vIhZsi0JW3YB oy/TnO8kRZXvweNyvGNgC1CWmyqVf9byyIEUiM31VhEO0q+jpFiVBQgFiNmfz30jd1TC 5EJQ== X-Gm-Message-State: AOJu0Yyj7DeuVhQBA7tMxxRZB6I34yrZNnrPMMY1ljp86W095uZhCCof Vue51drxH6c38WUn8CBc4HsvKETKZ18= X-Received: by 2002:a17:903:32c5:b0:1c6:1d3d:b412 with SMTP id i5-20020a17090332c500b001c61d3db412mr1855420plr.30.1695820389331; Wed, 27 Sep 2023 06:13:09 -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.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:08 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:36 -0300 Message-ID: <20230927131242.1950-6-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 05/11] fftools/ffmpeg: stop using AVStream.side_data 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: dtIlqDF330Ib Signed-off-by: James Almer --- fftools/ffmpeg_demux.c | 12 ++++++++---- fftools/ffmpeg_enc.c | 31 +++++++++---------------------- fftools/ffmpeg_filter.c | 6 +++++- fftools/ffmpeg_mux_init.c | 21 ++++++++++++--------- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index c01852d4cf..b312ff4922 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -482,8 +482,8 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) /* add the stream-global side data to the first packet */ if (ds->nb_packets == 1) { - for (int i = 0; i < ist->st->nb_side_data; i++) { - AVPacketSideData *src_sd = &ist->st->side_data[i]; + for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) { + AVPacketSideData *src_sd = &ist->st->codecpar->side_data[i]; uint8_t *dst_data; if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX) @@ -979,6 +979,7 @@ static int add_display_matrix_to_stream(const OptionsContext *o, AVFormatContext *ctx, InputStream *ist) { AVStream *st = ist->st; + AVPacketSideData *sd; double rotation = DBL_MAX; int hflip = -1, vflip = -1; int hflip_set = 0, vflip_set = 0, rotation_set = 0; @@ -995,12 +996,15 @@ static int add_display_matrix_to_stream(const OptionsContext *o, if (!rotation_set && !hflip_set && !vflip_set) return 0; - buf = (int32_t *)av_stream_new_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9); - if (!buf) { + sd = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX, + sizeof(int32_t) * 9, 0); + if (!sd) { av_log(ist, AV_LOG_FATAL, "Failed to generate a display matrix!\n"); return AVERROR(ENOMEM); } + buf = (int32_t *)sd->data; av_display_rotation_set(buf, rotation_set ? -(rotation) : -0.0f); diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index b40a6211a9..a106399279 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -457,20 +457,6 @@ int enc_open(OutputStream *ost, AVFrame *frame) return ret; } - if (ost->enc_ctx->nb_coded_side_data) { - int i; - - for (i = 0; i < ost->enc_ctx->nb_coded_side_data; i++) { - const AVPacketSideData *sd_src = &ost->enc_ctx->coded_side_data[i]; - uint8_t *dst_data; - - dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size); - if (!dst_data) - return AVERROR(ENOMEM); - memcpy(dst_data, sd_src->data, sd_src->size); - } - } - /* * Add global input side data. For now this is naive, and copies it * from the input stream's global side data. All side data should @@ -480,15 +466,16 @@ int enc_open(OutputStream *ost, AVFrame *frame) */ if (ist) { int i; - for (i = 0; i < ist->st->nb_side_data; i++) { - AVPacketSideData *sd = &ist->st->side_data[i]; - if (sd->type != AV_PKT_DATA_CPB_PROPERTIES) { - uint8_t *dst = av_stream_new_side_data(ost->st, sd->type, sd->size); - if (!dst) + for (i = 0; i < ist->st->codecpar->nb_side_data; i++) { + AVPacketSideData *sd_src = &ist->st->codecpar->side_data[i]; + if (sd_src->type != AV_PKT_DATA_CPB_PROPERTIES) { + AVPacketSideData *sd_dst = av_packet_side_data_new(&ost->par_in->side_data, &ost->par_in->nb_side_data, + sd_src->type, sd_src->size, 0); + if (!sd_dst) return AVERROR(ENOMEM); - memcpy(dst, sd->data, sd->size); - if (ist->autorotate && sd->type == AV_PKT_DATA_DISPLAYMATRIX) - av_display_rotation_set((int32_t *)dst, 0); + memcpy(sd_dst->data, sd_src->data, sd_src->size); + if (ist->autorotate && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX) + av_display_rotation_set((int32_t *)sd_dst->data, 0); } } } diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 9bf870b615..4c8e4c2d99 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -1383,11 +1383,15 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, // TODO: insert hwaccel enabled filters like transpose_vaapi into the graph if (ist->autorotate && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { + const AVPacketSideData *sd = NULL; int32_t *displaymatrix = ifp->displaymatrix; double theta; if (!ifp->displaymatrix_present) - displaymatrix = (int32_t *)av_stream_get_side_data(ist->st, AV_PKT_DATA_DISPLAYMATRIX, NULL); + sd = av_packet_side_data_get(ist->st->codecpar->side_data, ist->st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX); + if (sd) + displaymatrix = (int32_t *)sd->data; theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 9d6f442068..201f09e3e2 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1045,24 +1045,27 @@ static int streamcopy_init(const Muxer *mux, OutputStream *ost) } } - for (int i = 0; i < ist->st->nb_side_data; i++) { - const AVPacketSideData *sd_src = &ist->st->side_data[i]; - uint8_t *dst_data; + for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) { + const AVPacketSideData *sd_src = &ist->st->codecpar->side_data[i]; + AVPacketSideData *sd_dst; - dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size); - if (!dst_data) { + sd_dst = av_packet_side_data_new(&ost->st->codecpar->side_data, &ost->st->codecpar->nb_side_data, + sd_src->type, sd_src->size, 0); + if (!sd_dst) { ret = AVERROR(ENOMEM); goto fail; } - memcpy(dst_data, sd_src->data, sd_src->size); + memcpy(sd_dst->data, sd_src->data, sd_src->size); } #if FFMPEG_ROTATION_METADATA if (ost->rotate_overridden) { - uint8_t *sd = av_stream_new_side_data(ost->st, AV_PKT_DATA_DISPLAYMATRIX, - sizeof(int32_t) * 9); + AVPacketSideData *sd = av_packet_side_data_new(&ost->st->codecpar->side_data, + &ost->st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX, + sizeof(int32_t) * 9, 0); if (sd) - av_display_rotation_set((int32_t *)sd, -ost->rotate_override_value); + av_display_rotation_set((int32_t *)sd->data, -ost->rotate_override_value); } #endif From patchwork Wed Sep 27 13:12:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43984 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595346pzh; Wed, 27 Sep 2023 06:14:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFfFpG3vCryKyYz+gj7MGjabF+MeiHUGtPRu9Nfs/6zDj6QJcHfhlXZaF22zRMs0r4HHl/2 X-Received: by 2002:a17:906:51d0:b0:9b2:b2f8:85dc with SMTP id v16-20020a17090651d000b009b2b2f885dcmr1278499ejk.34.1695820464157; Wed, 27 Sep 2023 06:14:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820464; cv=none; d=google.com; s=arc-20160816; b=HLGQGYfR/uC2C948o74gt1oLD2XTB9SNTj5/i/UcKv2f4OMbW6Nr9QH38dU+oMH7um 6eWwSRfCShWejAvtz8sfTlLRfe5YXgbficD3fFLwuFVAQQGfTI/QrgvV2EpwmJHenYrP knpVojZW1VoRAb+aJ98QhuyYLqJrL1g9xicEE+PbN7+dT7aDAEc0Bt1+ZuZx/OXYKjgP uVwFGpxFiMmuoiVjhcZUikiFalBC18LrRtiFTwFBd8rSHVC9GE1EUxVwQk8B5Eo6VFSd Cf108M4COweAob/rZUqgms743g1fvP4ycib4z2GSO9V9mWQM9X8R2/Yii5328HbovOZg rI+Q== 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:dkim-signature:delivered-to; bh=7kAtsfQHXK/IdFDlcKg3+qLqlrIjrna1wan5ypwM1dw=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=pdX+i8gt13OsEt/fJhUikL7YNLsFUZlVMZqAIEvurLC/f7zFelY8FGwI2lPMI7bHii Y2k0JGl5WhVAtGFy5rnXGnufDW5bfizc5OXjDHgPiX2JIwqqBwMXFDrRoMSJpuVuY0oD o/bA7FLL8Twn/Mx1diy9fVrqJZ8oVHCnPhvAkJx2RP8/pvthaaRnnpNADpdERupTV5VA rjIHPnQ5SSABccwIt4lCxf7RRQQLXtMadpN6e69nkRn9wAGt5hsxUPQWK8VjnDrLJ24X Ho052gjLk51lsRTRRpcPc4aFx8UGtpESGHuIU1UCBO4C42t5pQ6P9rcULozCkY2zABYQ j85A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=ik5E6gx1; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i15-20020a1709063c4f00b009adb02a14ecsi13244165ejg.201.2023.09.27.06.14.23; Wed, 27 Sep 2023 06:14:24 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=ik5E6gx1; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 29C2768CB33; Wed, 27 Sep 2023 16:13:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2D0C68CB15 for ; Wed, 27 Sep 2023 16:13:12 +0300 (EEST) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1c0ecb9a075so80338805ad.2 for ; Wed, 27 Sep 2023 06:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820390; x=1696425190; 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=80yAJmLgD0VDMaC+qhrKKEuhySFN2/WJAIaLAa2BiBM=; b=ik5E6gx1+I+Ygm6CssqYigF0txTsZGbVHGlCIQTwaZe0z+i2oUWG6OYIndPNyBIQeK BNZk9RqxmkFtNd2NGjviktVNnA0hOw72ETiz+jC85UDbas7xh5pjh3RoVdu+jvvjobQc IqhbQ2yWFcfWVe+95huGBH/ite6gnH/vPo5LxNH3gpV5AgSoCuBEirkg75pK2qHeLcx5 PAMrWpl4oJd7Tz7clKCsQzT0D8vhiL7M6GFk9ZbEBiJ3XkuzXh5oqXyA85MscmCac9om Y2JxSOyup+T+YTcfSJC2l+H5ssgHoVwrxlnDOYiv0ue+uYJoh4URFgNEogS7Gx66tUs3 QQhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820390; x=1696425190; 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=80yAJmLgD0VDMaC+qhrKKEuhySFN2/WJAIaLAa2BiBM=; b=ep+4DoQ7MdAJoqhIbTbbEbz4LhPEYh6JdctqpFT0jIeGlNiTw0dxQduSxnCCyCdGBQ 1gs0f9s/zm2n9scMYGHb1VyjPvApExl4v5Reb2ijYr44zWLyA0RP0PfgXpGK2cDW1Bbq JW7Uy1RGbresDlGJuJ+TkCbeGcwrWLriTYSScJlhcjPOi1iMCwTKtt+j6Z0Y4IYXIkjP lhTkH8JUO6396hhi1oIDf+iDyKU6AcCFb/Bq/KNjOuTFMXpn/mS1+nHYoa7yyY3he6yJ T8r4SKnUeqw4qyfimmRKFJO0Fb6sXifj58AKCGqLgJ6TWWTNQGnFvXNLiq/BjB300vdb i6PQ== X-Gm-Message-State: AOJu0Yw9cJJ4AxHRnrmKesJGI7bqs0rDTGOIxGfhr9c2tLbLowKSDOY0 stEUeRngFZ7g9XQ+aeYapA9UDS//JyQ= X-Received: by 2002:a17:902:e887:b0:1c6:de7:addd with SMTP id w7-20020a170902e88700b001c60de7adddmr1801833plg.48.1695820390648; Wed, 27 Sep 2023 06:13:10 -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.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:10 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:37 -0300 Message-ID: <20230927131242.1950-7-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 06/11] fftools/ffplay: stop using AVStream.side_data 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: yXoXHXoiW9h9 Signed-off-by: James Almer --- fftools/ffplay.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 006da7ab57..e29b0ad0f9 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -1916,8 +1916,13 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX); if (sd) displaymatrix = (int32_t *)sd->data; - if (!displaymatrix) - displaymatrix = (int32_t *)av_stream_get_side_data(is->video_st, AV_PKT_DATA_DISPLAYMATRIX, NULL); + if (!displaymatrix) { + const AVPacketSideData *sd = av_packet_side_data_get(is->video_st->codecpar->side_data, + is->video_st->codecpar->nb_side_data, + AV_PKT_DATA_DISPLAYMATRIX); + if (sd) + displaymatrix = (int32_t *)sd->data; + } theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { From patchwork Wed Sep 27 13:12:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43977 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595566pzh; Wed, 27 Sep 2023 06:14:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFHy1tngLK0khqFcZlK8WVVp8T835+9Y7YkZedYyWgBAidbMc+vMwjVaq++JstaW0YxvxH5 X-Received: by 2002:a05:6402:128a:b0:530:a186:f8a8 with SMTP id w10-20020a056402128a00b00530a186f8a8mr2105437edv.37.1695820482432; Wed, 27 Sep 2023 06:14:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820482; cv=none; d=google.com; s=arc-20160816; b=EMAx1qWyp0jUfOJWBjzHeWXDbdTulFsWEfU9bEF0HpShb5JG458QAB4E9CMOWV8Aup dxsh5ZoeZ/h85HCIJ5z2sj1k1zJuchKYMUKHT8l7YQx0xk4sZY0yiFvkBCKIw1F0gD9+ IluVA3VkX6Zcl2Usbeq9dexoGQPG4mrHP6nf/THIpVM7Tnjk0NW5VcB8EuCUGLI4s/+5 jVgu1HUeZhqdk8pp7PrGCIOuNuPLCcGpEu4kN5Ci3nw4HzWlVlj8tb2zV4F51Nm5hP48 Wi7vrUfcHA4v0safNNu4BxCc0KCTJ+wRutIqLH4LBO2kL6HDoJPftrIhejPniKae6z1V s3mg== 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:dkim-signature:delivered-to; bh=158JOYFQhCV+aUmNXPGD1QB2nFN5/uIFTv0g6kCQ0cI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=RYm6f7pLlyCg2iK/W/hOWl9AEEMNCdfxuHr2McSrYNYhRKjeu6s/2gamlYt20gwke8 1klPzsnUGzja4PYS0JgxXxfdYFn+Ppobag7vOvdCVKo5goKJryjlfnsazIXsBFK+yVRM PcYz7EO61LMi43j+86i/SCmsrH7954oKyNVg0DQEJVuXTyiU1stbF2NTEXyJNMx/dwHb Aclq5hlFvx6hRoxZEFJZCZQVm3khYaWGMMm29YdvtRZbMgA9JWbUE3zgUGkY+y6T2V0W HqtZK0MJGB24SV/FzySAMi+LDxo68z4awzoToQIxAQSleGXgZzApnbTdZ9xwIL4M2ml7 DoOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="Si1l/lzq"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c24-20020aa7d618000000b00533348691a3si12938200edr.103.2023.09.27.06.14.42; Wed, 27 Sep 2023 06:14:42 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="Si1l/lzq"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1A98B68AEB3; Wed, 27 Sep 2023 16:13:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A61668CB24 for ; Wed, 27 Sep 2023 16:13:14 +0300 (EEST) Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-690d2e13074so8707242b3a.1 for ; Wed, 27 Sep 2023 06:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820392; x=1696425192; 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=jXlKwpo+7SDG7P78vtuKpoqsqHN4oDNexQOX8085AcE=; b=Si1l/lzqPRbWd4ld9t2G8zdi8QEH2ojlQ6I5doe0inF4EP/G5v8i8WXwiO09D5GxUn h+xJeCmLWw3veHoqN7u/RDwHxwdOuVGY5LrD2gI/5L3WsurakwAKtkQ2PepAkIK+C0HY Y0VXkHDxv09P0RJHMFXNFclAiZk+G4lAzGn4TLAIYWYyMJhKo3krT1iUfP2JgnPvbQdu ir0bTeXbFggtrjXYF8apilqX4XkKGXJFLEJJuy5wh8ZlVYBks+8R/4zZK0FeBlP8eZUx q7d8zM3QI/iklrn7/0OBtfEBgCAX8uubhLEBJhw+PbyTNMVfXmjphpA8CJR1K55z+ZT6 h/CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820392; x=1696425192; 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=jXlKwpo+7SDG7P78vtuKpoqsqHN4oDNexQOX8085AcE=; b=hZFNsWnfy9i490+wHEvF4BeZprPILpfTHbGY/Qj9xgVz5imJqs34UnhWxq9VWlMclP 0c/om3n36G2LWB4OXtEIcqCg+9laZc5adE5SzsqT4hRnkiGnbcWH3IImM3NJXMqt99Q4 T4kpbFeJa1PWupmMZHdGciq4e7AOCUAKS/BfL8+TZLSn1xdH03qagMz4lz4YW7M32rjT TflZj0kHb8T8cQcILCdch2096n2iyaKUkfe+/wMvuo6JJnIA8jo9uo4m82YNNOfLYvyQ J1FOdtZemlCTPHjUD93BM96YIA5M9NH+AhunXFa0v9mKIuG9rmwfpxqvVP9Cm2FNE/+E 3viA== X-Gm-Message-State: AOJu0YybW4tx2jIObPAkNQVclngiAHd4JN/tlqB4fso5XtzjIsA2Rdak R0BDIWfsVxkp1EudwgHjLZeKchWxYm0= X-Received: by 2002:a05:6a21:3d8a:b0:12e:98a3:77b7 with SMTP id bj10-20020a056a213d8a00b0012e98a377b7mr1758814pzc.59.1695820391939; Wed, 27 Sep 2023 06:13:11 -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.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:11 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:38 -0300 Message-ID: <20230927131242.1950-8-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 07/11] fftools/ffprobe: stop using AVStream.side_data 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: b56tb+53MbWY Signed-off-by: James Almer --- fftools/ffprobe.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index c20f464623..d5415be61a 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2279,16 +2279,9 @@ static void print_ambient_viewing_environment(WriterContext *w, static void print_pkt_side_data(WriterContext *w, AVCodecParameters *par, - const AVPacketSideData *side_data, - int nb_side_data, - SectionID id_data_list, + const AVPacketSideData *sd, SectionID id_data) { - int i; - - writer_print_section_header(w, id_data_list); - for (i = 0; i < nb_side_data; i++) { - const AVPacketSideData *sd = &side_data[i]; const char *name = av_packet_side_data_name(sd->type); writer_print_section_header(w, id_data); @@ -2382,9 +2375,6 @@ static void print_pkt_side_data(WriterContext *w, } else if (sd->type == AV_PKT_DATA_AFD && sd->size > 0) { print_int("active_format", *sd->data); } - writer_print_section_footer(w); - } - writer_print_section_footer(w); } static void print_private_data(WriterContext *w, void *priv_data) @@ -2544,9 +2534,13 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p av_dict_free(&dict); } - print_pkt_side_data(w, st->codecpar, pkt->side_data, pkt->side_data_elems, - SECTION_ID_PACKET_SIDE_DATA_LIST, + writer_print_section_header(w, SECTION_ID_PACKET_SIDE_DATA_LIST); + for (int i = 0; i < pkt->side_data_elems; i++) { + print_pkt_side_data(w, st->codecpar, &pkt->side_data[i], SECTION_ID_PACKET_SIDE_DATA); + writer_print_section_footer(w); + } + writer_print_section_footer(w); } writer_print_section_footer(w); @@ -3188,10 +3182,14 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id if (do_show_stream_tags) ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS); - if (stream->nb_side_data) { - print_pkt_side_data(w, stream->codecpar, stream->side_data, stream->nb_side_data, - SECTION_ID_STREAM_SIDE_DATA_LIST, + if (stream->codecpar->nb_side_data) { + writer_print_section_header(w, SECTION_ID_STREAM_SIDE_DATA_LIST); + for (int i = 0; i < stream->codecpar->nb_side_data; i++) { + print_pkt_side_data(w, stream->codecpar, &stream->codecpar->side_data[i], SECTION_ID_STREAM_SIDE_DATA); + writer_print_section_footer(w); + } + writer_print_section_footer(w); } writer_print_section_footer(w); From patchwork Wed Sep 27 13:12:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43987 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595820pzh; Wed, 27 Sep 2023 06:15:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGKs1PM9MfwJF+o8IeWoZoC/Gp9dPQ+p14WyTWZjniK1Uu2RS7GqCsxKQRiE4qLh8w7B2rB X-Received: by 2002:aa7:c684:0:b0:533:f22:17b9 with SMTP id n4-20020aa7c684000000b005330f2217b9mr2227369edq.19.1695820501671; Wed, 27 Sep 2023 06:15:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820501; cv=none; d=google.com; s=arc-20160816; b=EwyBzPFVpR3TKHqGPxpLzC0eLqYkR42PJfg3hHBbHjWFEcwMS6HRAiBWuS2Vcy+f+7 uy39YVeQQhpNHV2WiuOZiGtCQAx8bWvH/NZ7TJ8+h7gK4lILgV6ydfarrL2ncypkWpV7 ZcASGamy7FDmpPW1zNCj65OaHzQTymWd5r2xsi5VnAOntIYvX7GRXxIis+D/JKxp1wqM Anw1cu1zNHdmmFoue3n4RPCQ9B+WrEoDEf2VtGvLr3b32yzFzijvsByr618TZyy6U+3k kTTE1Ce8q8eo0ut5vPtJvukyirUhGB156OUaihndmJrti+6s0whipeD/GyiMXJhXI7pD DjTQ== 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:dkim-signature:delivered-to; bh=bOjZ3KDnmc7NJZWuz4SCEl5lNp+ypmT0x7hDVAEvR6U=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=TtFZEMwzoRhbyb6350NvSpEdmrRj5IaR/LA005AxCHwmjDTyB6LwZZz4Gu/y9SKiok K5mgbKqkNx8JElUwbkcSdL2yylMoeraFGw8ZlW9x1gm5rHE4HioKGSkGjp6SMTYTnjrU joNiuEedPIXg5UvCpl4BjAh2KHWFwRDwLYfacK0u0ADoAgWiJklN6mHE8mZoRaSmApyD Zub/SOdu39bHeboNrhcUZoMbp7DT50ScPLaPI0phmJDub0HHEcjVddkUff7gXixxhOX+ XoK8zYsqhKf4fQIgKdtuGKbVqwdYKJs5gw3+dpfj2by6PXzuApJhvOSWwvV4B43spXiv RiBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=S5wIrKcD; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ca3-20020aa7cd63000000b00533eeb9f41dsi7513219edb.269.2023.09.27.06.15.00; Wed, 27 Sep 2023 06:15:01 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=S5wIrKcD; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D4E9968CAEE; Wed, 27 Sep 2023 16:13:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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 45C7668CB10 for ; Wed, 27 Sep 2023 16:13:15 +0300 (EEST) Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1c451541f23so87161745ad.2 for ; Wed, 27 Sep 2023 06:13:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820393; x=1696425193; 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=j/EBfSCJqKmF7At9rAbUsBZuOATZTi1q4llPTL8wsr4=; b=S5wIrKcDOjRC4M0u8/jFQXReK6YLYFMK01gCOgvdtB4O8GzLKvcuByBoufu5Fq3Snt zyea+MX4sm5Ork6d+qSgVRB/ncjJtHEDKEtoB5yRXukPKFs5t0K4heaY4P62z64W3C4s 3WpLIBA7udbMIQHgFfbZpzjs268VvvrzTCwM7Z6ptJPimahOBvvLHUuWznOoPMhjfStK +oJX9urYPuP5bEaQro0ABDL65ba5Hx6U3BbLsCAiRKZTSzvQ+b2aTq6VKuFUEon2WiTj Ulq5ZsqTqXHYOSkMh/5YuBTc6i2Wn812DkdEkD2w3haWx6hLWzB2ey9KIbWgdM27JAXm 0yhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820393; x=1696425193; 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=j/EBfSCJqKmF7At9rAbUsBZuOATZTi1q4llPTL8wsr4=; b=m8HV90xpaHF1JhtvvD+wMi1jxzhpcO+5wtN7dHM3AF6ZmgjoZxveJsLl4GCyhDhw7H s1o5OnwdY6x8eCxTGuFbH8BCVkLf0gZ6rdQ6AHlWrM2+Yd4zbOkitUF2cv+4pZ5EoozN XbLNPlfSiy2ckpNygp2q0Cif6iPErH57W+XJTeClxRI9ykjnbE/bCZkblJzW2vwxGN2P e+MMXT5C1P9op5Y26yTJS58R2XJPJhzFrRkE+t1TpJEjGu5NUHA3HhOZc9mLEkV5QnHC SmoZXcI5Ax83wbROl7rYMMTgsOEvlgpLdZDeelHzu3ULF4c0ekzg3o9/e5ode45R930O i6xA== X-Gm-Message-State: AOJu0Yy+3QybUFApyS6ShinbSniwoMe0CQk960xCk0MLp21sNrhYqR1a 6pOqJQpHSXQrE5XxTaGz2ubDvNK5HDs= X-Received: by 2002:a17:902:7888:b0:1bd:d15f:bdfa with SMTP id q8-20020a170902788800b001bdd15fbdfamr1442505pll.68.1695820393229; Wed, 27 Sep 2023 06:13:13 -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.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:12 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:39 -0300 Message-ID: <20230927131242.1950-9-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 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data 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: fFcqmuNpH6Ka Signed-off-by: James Almer --- libavcodec/avcodec.h | 2 +- libavcodec/decode.c | 10 ++++++++++ libavcodec/decode.h | 3 +++ libavcodec/hevcdec.c | 15 ++++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index da3c5234a0..48a4b73fd3 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1903,7 +1903,7 @@ typedef struct AVCodecContext { /** * Additional data associated with the entire coded stream. * - * - decoding: unused + * - decoding: set by user before calling avcodec_open2(). * - encoding: may be set by libavcodec after avcodec_open2(). */ AVPacketSideData *coded_side_data; diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 466c393c1e..a7196b5740 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1400,6 +1400,16 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) return ret; } +const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx, + enum AVPacketSideDataType type) +{ + for (int i = 0; i < avctx->nb_coded_side_data; i++) + if (avctx->coded_side_data[i].type == type) + return &avctx->coded_side_data[i]; + + return NULL; +} + static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) { size_t size; diff --git a/libavcodec/decode.h b/libavcodec/decode.h index a52152e4a7..8a7dec4e2e 100644 --- a/libavcodec/decode.h +++ b/libavcodec/decode.h @@ -153,4 +153,7 @@ int ff_side_data_update_matrix_encoding(AVFrame *frame, int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private, AVBufferRef **hwaccel_priv_buf); +const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx, + enum AVPacketSideDataType type); + #endif /* AVCODEC_DECODE_H */ diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 81b9c5e089..59d59bbef4 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -3340,8 +3340,15 @@ static int hevc_decode_frame(AVCodecContext *avctx, AVFrame *rframe, } sd = av_packet_get_side_data(avpkt, AV_PKT_DATA_DOVI_CONF, &sd_size); - if (sd && sd_size > 0) + if (sd && sd_size > 0) { + int old = s->dovi_ctx.dv_profile; + ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd); + if (old) + av_log(avctx, AV_LOG_DEBUG, + "New DOVI configuration record from input packet (profile %d -> %u).\n", + old, s->dovi_ctx.dv_profile); + } s->ref = NULL; ret = decode_nal_units(s, avpkt->data, avpkt->size); @@ -3644,12 +3651,18 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx) atomic_init(&s->wpp_err, 0); if (!avctx->internal->is_copy) { + const AVPacketSideData *sd; + if (avctx->extradata_size > 0 && avctx->extradata) { ret = hevc_decode_extradata(s, avctx->extradata, avctx->extradata_size, 1); if (ret < 0) { return ret; } } + + sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF); + if (sd && sd->size > 0) + ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd->data); } return 0; From patchwork Wed Sep 27 13:12:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43983 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595216pzh; Wed, 27 Sep 2023 06:14:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHX/FCvCwa2JyTzelVBu+Fg/imuKx7tXVqI7Txpo33KtjroLo49/dNc+qh/vknzUuhPPHxO X-Received: by 2002:aa7:c38d:0:b0:522:1f09:dde3 with SMTP id k13-20020aa7c38d000000b005221f09dde3mr2229946edq.3.1695820454375; Wed, 27 Sep 2023 06:14:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820454; cv=none; d=google.com; s=arc-20160816; b=RBuA2JQ6pDyTzgVrz2SW/MuJeigF5Ad3Nb7tgSlEwo28GSR8kkbaYWV1uYvMMLt3XN tLKhyK1mEQ+xTRntnfqimYT9H2NUwU3QUcz+tXfc1tG9tJcjN+QNmqIg+quSziiC74v2 PzK8pQGlhzC21+2qO2CbrTwgCaIq2PHusmvLC2YThNeZ+JkwYEldO7dmsclsu+3H8uMK cifkA11xUbld2i9JOQf98ikfqA5RLIUPNj0vMvID9o+9C7vIGi0u27ySCyzwzSrWQPen /3iLEz426mgJyqhNYlap4AGu4p7xQMxWWY5xCS/vO5F0aJIL/kqUo5C6F6t0TLBYPZNL TxMA== 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:dkim-signature:delivered-to; bh=ErcojbLaBFg8v5VI9nA2Ndfsslf+OtvKHE9d7HCN9Ek=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=R8QNdQsdhyhAWeiQU32Xo7993zqzyB4so8s3bWvtJ1YoRsKtHqwi4eRUrOU9+FPABe lfaIzhS+ECYz9SYm0e8MbUnW4sQcS7TokBWTt5M3oU/0PQthSBpfxF4acBs5Q9K4TYXc fkid9OoCzoocJKej0OX8Dns+rNOva6wfEeAYJRqLhrfp3F+nWARostcGd0FKbqBsOSBq FhN0v0vFYWucM9yLAZBOnqpAxVNlQYzBPxCpA/EgLdNv8GJhKveM8MPjLznegE6PMTrA yX6FKM1zxHorAcbWROTstQWKah2RS1i7sZbnNme55rPPxb94G1PTs8I6BSPpDIbg33Y5 HsRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Wv9Sp2e6; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m15-20020aa7c48f000000b00530e3412dc3si5081068edq.383.2023.09.27.06.14.13; Wed, 27 Sep 2023 06:14:14 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Wv9Sp2e6; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3323868CB17; Wed, 27 Sep 2023 16:13:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1972E68CB11 for ; Wed, 27 Sep 2023 16:13:16 +0300 (EEST) Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-1c62d61dc96so31261205ad.0 for ; Wed, 27 Sep 2023 06:13:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820395; x=1696425195; 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=gMwcidQUc6uEFrCkleyqaA4QymCle2cMCmtP8TFs+nQ=; b=Wv9Sp2e6HO2g7Ve6feetwH0C/fI69T48orNM1wMUyexxjD7JZ4fRXbpipFq5bkUr7A N8Jth3wn7UW4f3Dm/CK5klASJSdnfX1pvMPlwmnymAjQynNBE8Gh30I3WY2wrRPmdmEu cDAi7ZFUHEce468YPu6jP2JO+WXs2OqRym0alY1Ez4jRyOuQWJL9D3joqbZXZ/Uzdd63 496r6gRQxro/jRNnbNFKk/aIYF0JlFsImU3sHZMBLVv020XNi9XaRM49zTkwA1GnJG8i 7fUYX1qP8Tl+lcK+WMngrz78XwAz68wgafkp52JNmEA5qhnqgT6CFOJAGNxo3K0WQ/nK KQ7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820395; x=1696425195; 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=gMwcidQUc6uEFrCkleyqaA4QymCle2cMCmtP8TFs+nQ=; b=cPFxaUKvKO2WdGCzSJle1Zm5a7t6+C3MmYs/fLDiO8tdEJg91mNjlsWFKh+wbR2S7/ sM2U9EcVy5mdc6F9We8TJQXOPsKvVUNjGMVAnVUJXDTNy+59yqauYZ+zZT1tqUMnYViT kWbMVjMb9XCl8ulGDMvqOfS9ouazm2phmw6lU5fkdYmB4+SAVZbKZpdX5FppRpfiwuM4 l9D88OHp/VrrKBi3oGyjxaSuoKWb+gEGHgv2pl3fGe08agV8lEiItDwUIOCNq2cSdQm1 3y4uuK7Tus0SKWz8P5yz2jloEbd7hQ0T8A0h941RBt8SShjVTQtWagOnfF6XDFyOxzYG DNnA== X-Gm-Message-State: AOJu0Yxij/xocPVfeO9Jjw0+Hxa5LaLQE1yGOisuJsNi78K9W1vJwwa+ 3Uwnxzgx5XnUigmF9C8lH2uvqb2al0Q= X-Received: by 2002:a17:902:f685:b0:1c7:2763:9ef4 with SMTP id l5-20020a170902f68500b001c727639ef4mr1163884plg.66.1695820394586; Wed, 27 Sep 2023 06:13:14 -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.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:14 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:40 -0300 Message-ID: <20230927131242.1950-10-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 09/11] avcodec/decode: check for global side data in AVCodecContext side data 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: YcNdzX/Hxv0U Signed-off-by: James Almer --- libavcodec/decode.c | 48 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index a7196b5740..3b4bb70689 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1422,6 +1422,20 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) return av_packet_unpack_dictionary(side_metadata, size, frame_md); } +static const struct { + enum AVPacketSideDataType packet; + enum AVFrameSideDataType frame; +} sd_global_map[] = { + { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, + { AV_PKT_DATA_SPHERICAL, AV_FRAME_DATA_SPHERICAL }, + { AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D }, + { AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE }, + { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA }, + { AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL }, + { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, + { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, +}; + int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt) { @@ -1429,18 +1443,10 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, enum AVPacketSideDataType packet; enum AVFrameSideDataType frame; } sd[] = { - { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX }, - { AV_PKT_DATA_SPHERICAL, AV_FRAME_DATA_SPHERICAL }, - { AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D }, - { AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE }, - { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA }, - { AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL }, { AV_PKT_DATA_A53_CC, AV_FRAME_DATA_A53_CC }, { AV_PKT_DATA_AFD, AV_FRAME_DATA_AFD }, - { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, { AV_PKT_DATA_S12M_TIMECODE, AV_FRAME_DATA_S12M_TIMECODE }, - { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, { AV_PKT_DATA_SKIP_SAMPLES, AV_FRAME_DATA_SKIP_SAMPLES }, }; @@ -1453,6 +1459,18 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif + for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) { + size_t size; + const uint8_t *packet_sd = av_packet_get_side_data(pkt, sd_global_map[i].packet, &size); + if (packet_sd) { + AVFrameSideData *frame_sd; + + frame_sd = av_frame_new_side_data(frame, sd_global_map[i].frame, size); + if (!frame_sd) + return AVERROR(ENOMEM); + memcpy(frame_sd->data, packet_sd, size); + } + } for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { size_t size; uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); @@ -1489,6 +1507,20 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) const AVPacket *pkt = avctx->internal->last_pkt_props; int ret; + for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) { + const AVPacketSideData *packet_sd = ff_get_coded_side_data(avctx, + sd_global_map[i].packet); + if (packet_sd) { + AVFrameSideData *frame_sd = av_frame_new_side_data(frame, + sd_global_map[i].frame, + packet_sd->size); + if (!frame_sd) + return AVERROR(ENOMEM); + + memcpy(frame_sd->data, packet_sd->data, packet_sd->size); + } + } + if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt); if (ret < 0) From patchwork Wed Sep 27 13:12:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43985 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595466pzh; Wed, 27 Sep 2023 06:14:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFo6VFTagM+fc6bD6f3P95smDrCjF9uvhEO2fwcPThOs4JiDOrQdKyFceJsju5S4NZJJuSG X-Received: by 2002:a2e:87ca:0:b0:2bc:fc2e:7671 with SMTP id v10-20020a2e87ca000000b002bcfc2e7671mr1938196ljj.13.1695820474223; Wed, 27 Sep 2023 06:14:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820474; cv=none; d=google.com; s=arc-20160816; b=mlGxUb0HgzvBfO6vI1yAm0hoVwn0D7fDU7pywiXbBiUIfjRJ4ovjduzAixZolVk+CU mYFzTJgmTsjbgSDOC/kVYpoXB1r+mtrMNy1CgQnQq05vgOxYgzTrZk22ABiVBEjgF21S 9JPTIryhrAKRp4oW6UNPnJgdJsj5UjDmCeG12xmkcKuRdMt42zolOrXjPtUj5cuniEY5 HXDNfeQEL4gqY9ZNEHvwFkBuLNHJVAh9lWscl06pixwP6zkoZbdxHvszmxIMe+pcDF6C s4FpoRPhXzhKfhNLD8KdUUsAWgbpTWNbQm5uOP1it8Mn/Gbj/No9jUvHdeJqCKxwiMKv JXDA== 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:dkim-signature:delivered-to; bh=VrBXxCD3ifuSd2rXLPJ8x4D6TAmDJN/H4XOSVdAL0ls=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=op+rileb4Y8jT0EkCNepbbFEYkajoyaHF3mCmPdu5Trr1K9wdDjF18NFXIp77djmzd MBQrwf7ysz+bbJUAfsHVV7Y10sqCHXYhL41iOxDWJmTU8A+h/i6TrU2xw3/FXkD+qr64 3tg2JbxmfOWJUXa+VlhnOy9mJud2iEaLVb1lxWyv5E6/yOD/4a6dXxQcWA828JZX9nfh T7at/NrQIwLZyyRlx6s9p4dW4g6FdlLlG0Un9mKy3M9WUlRsiPxUb7NQL479hhA0FvJz o6z+XJ3O7+Btwuv50qDPyv2fGqJJx1QrheEFUaTJbxFZ+c78bKYn1YHvZlq37Eqn/iZ8 jmHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=nAZ53VTv; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d8-20020a170906344800b0099d97da6b19si12841861ejb.790.2023.09.27.06.14.33; Wed, 27 Sep 2023 06:14:34 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=nAZ53VTv; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 215F468CB1A; Wed, 27 Sep 2023 16:13:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3261B68CB1C for ; Wed, 27 Sep 2023 16:13:18 +0300 (EEST) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1c434c33ec0so84022575ad.3 for ; Wed, 27 Sep 2023 06:13:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820396; x=1696425196; 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=8d4grbJC3IUjzAzTu0SnEDdEjZPiTqDhXMFWIGVPbjg=; b=nAZ53VTvTD99AasFKMdc3Bg6awhxrqBIIk9nUW3ejlaG/b+TDskErONTuuEuUIJx+j IdivkaEse8myGDHi+XLJVjmW2sA2Ctq9btIKRQToE5roU7tC/nqlY61bx9lEAwkHYhx+ 39AGXMOt1YWJI1ih7ObAPiNfKJQmstuMAOrUf6rsGj7f/RzfjYALFfkx33W7gpcHybnV 346fHKMKzOhM2GPprngoiOCFA2tb5Bcgt7WANcaZ7EQIgVyxBej8rDeown6Zr2feiSFx amGHV4X14Q6+0gzHPd3vxS7S6Sh8Tew/PHE0cudbEX0WmtPQ5Mq6QqR1mje8uYPEogrl v9Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820396; x=1696425196; 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=8d4grbJC3IUjzAzTu0SnEDdEjZPiTqDhXMFWIGVPbjg=; b=Sbk1jzMM/AVsjd8Jfb2RnvUBbflXD4/Oh3pGXLFksDwykWF1mgR8vsAVnnDSqWw64+ 9lTPS57JsuynYK0xjIZwkC26NntyfYkitZO6dXi2g9iyMhDEP2da1fE2NHBgtoCC8mA0 aKeIbz8rg8zUxyopwhXr5COxvrJiqFKCM9XgQLcCs3DvK5dgz3bdgh/GLf47uXU27O9y EMmBbZvIaBmq0iBOcWTGJ//P9NQXMhwqo08M6v77aS5m/7xf4NpPe9ETC/swlKmx0+d/ xyMk/OylTy+c0MRNxYBYwzr+h50SJV2GD66uDHoKcm0Ff9fZXZykXSUOPqMyGyELFEVu umAQ== X-Gm-Message-State: AOJu0YzcAumLQdaq2Zb8SAoEV4WybPv7ed8MuZIMxiyEgi8tHHABIVon MAu9xLQhQes55tJkVKgSE7a7PNZcrHU= X-Received: by 2002:a17:902:db06:b0:1c3:5f05:922a with SMTP id m6-20020a170902db0600b001c35f05922amr1951951plx.60.1695820395879; Wed, 27 Sep 2023 06:13:15 -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.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:15 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:41 -0300 Message-ID: <20230927131242.1950-11-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 10/11] fftools/ffmpeg: stop injecting stream side data in 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: M0seluhqag2r This is no longer needed as the side data is available for decoders in the AVCodecContext. The tests affected reflect the removal of useless CPB and Stereo 3D side data in packets. Signed-off-by: James Almer --- fftools/ffmpeg_demux.c | 22 ------------------- tests/ref/fate/autorotate | 4 ++-- tests/ref/fate/copy-trac3074 | 2 +- tests/ref/fate/matroska-avoid-negative-ts | 2 +- tests/ref/fate/matroska-dovi-write-config7 | 2 +- tests/ref/fate/matroska-dovi-write-config8 | 2 +- tests/ref/fate/matroska-encoding-delay | 2 +- .../fate/matroska-mastering-display-metadata | 4 ++-- tests/ref/fate/matroska-spherical-mono-remux | 4 ++-- tests/ref/fate/matroska-stereo_mode | 8 +++---- tests/ref/fate/matroska-vp8-alpha-remux | 2 +- .../ref/fate/mov-mp4-disposition-mpegts-remux | 4 ++-- tests/ref/fate/mxf-d10-user-comments | 2 +- tests/ref/fate/mxf-remux-applehdr10 | 2 +- tests/ref/fate/vp9-superframe-bsf | 2 +- 15 files changed, 21 insertions(+), 43 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index b312ff4922..aad5215d94 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -480,28 +480,6 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) ds->data_size += pkt->size; ds->nb_packets++; - /* add the stream-global side data to the first packet */ - if (ds->nb_packets == 1) { - for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) { - AVPacketSideData *src_sd = &ist->st->codecpar->side_data[i]; - uint8_t *dst_data; - - if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX) - continue; - - if (av_packet_get_side_data(pkt, src_sd->type, NULL)) - continue; - - dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size); - if (!dst_data) { - ret = AVERROR(ENOMEM); - goto fail; - } - - memcpy(dst_data, src_sd->data, src_sd->size); - } - } - if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", f->index, pkt->stream_index, diff --git a/tests/ref/fate/autorotate b/tests/ref/fate/autorotate index dff628bbff..2aa29fafa7 100644 --- a/tests/ref/fate/autorotate +++ b/tests/ref/fate/autorotate @@ -11,8 +11,8 @@ #codec_id 1: ac3 #sample_rate 1: 44100 #channel_layout_name 1: mono -0, -512, 0, 512, 6997, 0x55c700f6, S=1, 40 -1, -256, -256, 1536, 416, 0x92ddc529, S=2, 10, 4 +0, -512, 0, 512, 6997, 0x55c700f6 +1, -256, -256, 1536, 416, 0x92ddc529, S=1, 10 0, 0, 512, 512, 4847, 0xe74f522e, F=0x0 1, 1280, 1280, 1536, 418, 0x0a7fcd2d 0, 512, 1024, 512, 5281, 0xbd4a5dac, F=0x0 diff --git a/tests/ref/fate/copy-trac3074 b/tests/ref/fate/copy-trac3074 index b6d23f8c1c..53ba27e920 100644 --- a/tests/ref/fate/copy-trac3074 +++ b/tests/ref/fate/copy-trac3074 @@ -5,7 +5,7 @@ #codec_id 0: eac3 #sample_rate 0: 48000 #channel_layout_name 0: stereo -0, 0, 0, 1536, 512, 0x2beaf79f, S=1, 4 +0, 0, 0, 1536, 512, 0x2beaf79f 0, 1536, 1536, 1536, 512, 0x29ddf9d6 0, 3072, 3072, 1536, 512, 0xba0afa79 0, 4608, 4608, 1536, 512, 0xe019f394 diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 05821cbf09..3ba289c6e6 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -11,7 +11,7 @@ dede1d72a28c7eb0a849acf230b08247 *tests/data/fate/matroska-avoid-negative-ts.mat #codec_id 1: mp3 #sample_rate 1: 44100 #channel_layout_name 1: mono -0, -37, 43, 40, 9156, 0xe5bd034a, S=1, 40 +0, -37, 43, 40, 9156, 0xe5bd034a 1, 0, 0, 26, 417, 0x7198c15e 0, 3, 3, 40, 1740, 0x29ac4480, F=0x0 1, 26, 26, 26, 417, 0x3c67c32d diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7 index aaeeb34751..dc5b73a44e 100644 --- a/tests/ref/fate/matroska-dovi-write-config7 +++ b/tests/ref/fate/matroska-dovi-write-config7 @@ -13,7 +13,7 @@ #dimensions 1: 1920x1080 #sar 1: 0/1 0, -83, 0, 41, 699, 0x728548f1 -1, -83, 0, 41, 1085, 0xfb2dba82, S=1, 8 +1, -83, 0, 41, 1085, 0xfb2dba82 0, -42, 167, 41, 95, 0xc0312044, F=0x0 1, -42, 167, 41, 481, 0xf23f91d5, F=0x0 0, 0, 83, 41, 99, 0x5e0a2221, F=0x0 diff --git a/tests/ref/fate/matroska-dovi-write-config8 b/tests/ref/fate/matroska-dovi-write-config8 index 55fe191047..472cbed708 100644 --- a/tests/ref/fate/matroska-dovi-write-config8 +++ b/tests/ref/fate/matroska-dovi-write-config8 @@ -12,7 +12,7 @@ #codec_id 1: aac #sample_rate 1: 44100 #channel_layout_name 1: stereo -0, -67, 0, 33, 63375, 0xc76606ab, S=1, 8 +0, -67, 0, 33, 63375, 0xc76606ab 0, -34, 133, 33, 46706, 0x0e08a7e5, F=0x0 0, 0, 67, 33, 29766, 0x753c031a, F=0x0 1, 0, 0, 23, 6, 0x031e0108 diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay index d2ff2d07be..ee1989cbcb 100644 --- a/tests/ref/fate/matroska-encoding-delay +++ b/tests/ref/fate/matroska-encoding-delay @@ -12,7 +12,7 @@ #sample_rate 1: 48000 #channel_layout_name 1: stereo 1, -10, -10, 24, 1152, 0x724077b8 -0, 0, 0, 40, 237628, 0xeff25579, S=1, 40 +0, 0, 0, 40, 237628, 0xeff25579 1, 14, 14, 24, 1152, 0x80625572 1, 38, 38, 24, 1152, 0x7d7f4dce 0, 40, 40, 40, 238066, 0xb2265f41 diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 3726469213..53f84c1793 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -22,9 +22,9 @@ #codec_id 3: ffv1 #dimensions 3: 1280x720 #sar 3: 1/1 -0, 0, 0, 16, 57008, 0x43416399, S=2, 8, 88 +0, 0, 0, 16, 57008, 0x43416399 1, 0, 0, 16, 2403, 0xaa818522 -3, 0, 0, 16, 274117, 0xc439610f, S=2, 8, 88 +3, 0, 0, 16, 274117, 0xc439610f 0, 17, 17, 16, 57248, 0xa06cd7b5 1, 17, 17, 16, 2403, 0xe1a991e5 2, 17, 17, 16, 1602, 0x5d868171 diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index e9904b2c92..6fcda14822 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -12,8 +12,8 @@ fddfea5f05a7a9a0d187df9a72900055 *tests/data/fate/matroska-spherical-mono-remux. #codec_id 1: h264 #dimensions 1: 1920x1080 #sar 1: 0/1 -0, -80, 0, 40, 69118, 0x73cb52f0, S=2, 12, 36 -1, -80, 0, 40, 69118, 0x73cb52f0, S=2, 12, 36 +0, -80, 0, 40, 69118, 0x73cb52f0 +1, -80, 0, 40, 69118, 0x73cb52f0 0, -40, 160, 40, 1103, 0x082a059f, F=0x0 1, -40, 160, 40, 1103, 0x082a059f, F=0x0 [STREAM] diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode index 5c36a6d666..739b789fea 100644 --- a/tests/ref/fate/matroska-stereo_mode +++ b/tests/ref/fate/matroska-stereo_mode @@ -43,10 +43,10 @@ a7a220a77001e81685ec807ce5ac3bc6 *tests/data/fate/matroska-stereo_mode.matroska #dimensions 6: 512x512 #sar 6: 2/1 0, 0, 0, 1000, 206173, 0x95af7455 -1, 0, 0, 1000, 206173, 0x95af7455, S=1, 12 -2, 0, 0, 1000, 206173, 0x95af7455, S=1, 12 -3, 0, 0, 1000, 206173, 0x95af7455, S=1, 12 -4, 0, 0, 1000, 206173, 0x95af7455, S=1, 12 +1, 0, 0, 1000, 206173, 0x95af7455 +2, 0, 0, 1000, 206173, 0x95af7455 +3, 0, 0, 1000, 206173, 0x95af7455 +4, 0, 0, 1000, 206173, 0x95af7455 5, 0, 0, 1000, 206173, 0x95af7455 6, 0, 0, 1000, 206173, 0x95af7455 0, 1000, 1000, 1000, 36, 0x34891010, F=0x0 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index eba3ffb77a..8117325433 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -5,7 +5,7 @@ #codec_id 0: vp8 #dimensions 0: 320x213 #sar 0: 1/1 -0, 0, 0, 33, 2108, 0x59b92a34, S=2, 1900, 12 +0, 0, 0, 33, 2108, 0x59b92a34, S=1, 1900 0, 32, 32, 33, 142, 0x2f2a3fed, F=0x0, S=1, 160 0, 65, 65, 33, 157, 0x17804767, F=0x0, S=1, 209 0, 99, 99, 33, 206, 0x537262ca, F=0x0, S=1, 317 diff --git a/tests/ref/fate/mov-mp4-disposition-mpegts-remux b/tests/ref/fate/mov-mp4-disposition-mpegts-remux index efef043074..ba419843dc 100644 --- a/tests/ref/fate/mov-mp4-disposition-mpegts-remux +++ b/tests/ref/fate/mov-mp4-disposition-mpegts-remux @@ -10,9 +10,9 @@ adb3b95c07a5f3e0c86641dd62f01dae *tests/data/fate/mov-mp4-disposition-mpegts-rem #codec_id 1: ac3 #sample_rate 1: 48000 #channel_layout_name 1: stereo -1, 0, 0, 1536, 768, 0xa63778d4, S=1, 4 +1, 0, 0, 1536, 768, 0xa63778d4 1, 1536, 1536, 1536, 768, 0x7d577f3f -0, 3072, 3072, 1536, 768, 0xc2867884, S=1, 4 +0, 3072, 3072, 1536, 768, 0xc2867884 1, 3072, 3072, 1536, 768, 0xd86b7c8f 0, 4608, 4608, 1536, 690, 0xa2714bf3 1, 4608, 4608, 1536, 626, 0x09f4382f diff --git a/tests/ref/fate/mxf-d10-user-comments b/tests/ref/fate/mxf-d10-user-comments index 1b59beec7c..ccfdc83f11 100644 --- a/tests/ref/fate/mxf-d10-user-comments +++ b/tests/ref/fate/mxf-d10-user-comments @@ -6,7 +6,7 @@ #codec_id 0: mpeg2video #dimensions 0: 1280x720 #sar 0: 3/4 -0, -1, 0, 1, 150000, 0x0547870d, S=1, 40 +0, -1, 0, 1, 150000, 0x0547870d 0, 0, 1, 1, 150000, 0xe80a1612, F=0x0 0, 1, 2, 1, 150000, 0xc5c50e2f, F=0x0 0, 2, 3, 1, 150000, 0x51e28a04, F=0x0 diff --git a/tests/ref/fate/mxf-remux-applehdr10 b/tests/ref/fate/mxf-remux-applehdr10 index 29e0e03a72..9fbf8b60c7 100644 --- a/tests/ref/fate/mxf-remux-applehdr10 +++ b/tests/ref/fate/mxf-remux-applehdr10 @@ -10,7 +10,7 @@ #codec_id 1: pcm_s24le #sample_rate 1: 48000 #channel_layout_name 1: mono -0, 0, 0, 1, 57008, 0x43416399, S=1, 88 +0, 0, 0, 1, 57008, 0x43416399 1, 0, 0, 801, 2403, 0x00000000 0, 1, 1, 1, 57248, 0xa06cd7b5 1, 801, 801, 801, 2403, 0x00000000 diff --git a/tests/ref/fate/vp9-superframe-bsf b/tests/ref/fate/vp9-superframe-bsf index d7985c6973..485644dfb2 100644 --- a/tests/ref/fate/vp9-superframe-bsf +++ b/tests/ref/fate/vp9-superframe-bsf @@ -3,7 +3,7 @@ #codec_id 0: vp9 #dimensions 0: 352x288 #sar 0: 1/1 -0, 0, 0, 33, 6958, 0x38e58ee6, S=1, 12 +0, 0, 0, 33, 6958, 0x38e58ee6 0, 33, 33, 33, 852, 0x3edf9ed0, F=0x0 0, 66, 66, 33, 27, 0x62d007e5, F=0x0 0, 100, 100, 33, 25, 0x51980749, F=0x0 From patchwork Wed Sep 27 13:12:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43986 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2595674pzh; Wed, 27 Sep 2023 06:14:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGgsF2ErxU+lR/kkjnTApEbY7md6S1uLYUlMt9NvnvtWmPKX6uVvYoNzv4rnfd0WHLzpyyx X-Received: by 2002:a17:906:31d2:b0:9b2:baa1:5910 with SMTP id f18-20020a17090631d200b009b2baa15910mr154499ejf.1.1695820491359; Wed, 27 Sep 2023 06:14:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695820491; cv=none; d=google.com; s=arc-20160816; b=qQn4muzol/hW649KyzRjQgCjKA5y25E94/dy6j8JgvXDZx6xu5I+iLt7E1GnMyu+4b sNzMXWwPrHClGrBAnrIT3EaELSr48S6Szl0H/m0U8suBF4FxeJTfml47D9SnQxAtzyTC r1n8wNbtwHatlQQM/hSHn7+QYk4cn+0b0VnG7mlhblKs8yn3OrcMYJJd9mxxdHO9uYkV enhbhvHJqpTvtwNVAR85V8fnR72XUzPSyrgRXFNlIhUNKUmA5EA220hAwDqTTxEhVI6m CGqVftw/A7YntOOIFSoIXD4OASlhe/cC/h4X7MYeuCOAlk1mcDW0dblEC+wltGSQajfX ulFg== 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:dkim-signature:delivered-to; bh=a1lL6Cq1WkYW5zKdw/mO2XSs+k/buIP79m8ZsGf2Kj4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=rHPXuLDbQdS/AmRR8olfJTvVmpzDKy3bv1SjXUIVViX44q0ynatYPPr+rtp8tqK2Be 1gsjQHLrzy6Miy+tpgRJ6gFpcENn6KYGkBD7VyU9fg547x7S8r2CAUUL5yqWIPQzSBJU TA5qbO47KwHbhF2aW4pglF1cEADw7OeIUPfbtjMvB1m+uGlVEIWd50L1ecvEKXQ5kItG V2lWahRDr3KES3DSx7xJNSoKtK9Do1u056hf9BWiR1Bhm9WxdB3GY/qKs72/Fucr1aWa xVkeKBPfLOCQxtVId87s4+ntstU5OKkQEHh4K4A646XOekwlYdpADP1rlPUO0x2kl2JG nNSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=b5FxO5CN; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e11-20020a170906374b00b0099396547000si12994948ejc.767.2023.09.27.06.14.51; Wed, 27 Sep 2023 06:14:51 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=b5FxO5CN; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E6AD468CB18; Wed, 27 Sep 2023 16:13:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A339168CB24 for ; Wed, 27 Sep 2023 16:13:19 +0300 (EEST) Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-1bf6ea270b2so84355775ad.0 for ; Wed, 27 Sep 2023 06:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695820397; x=1696425197; 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=2HA//p4EYIQ7ls1mGM7MsNLp5mapkmcavm+KaNvR/Ks=; b=b5FxO5CNIfOqEqjGeQUQ4361ZbFgNgUKW98yLC0nB6cBUBYSK3E78e8Ja4APrZ97+K gG5kikHJV3KxNfQWRg2YJsFNLr0HlegkMkCWOGLXR7duD42dxBvMlYyxP+AKP1THj6TB gSVBtFWLAp9OafghA3Wiv26M1HBtx3b+sU36pa0COvTkCSTJ7vIjZWUqxMRupkTH+iCX AJKKbDIkrHivM34L23WKTr7T2kzt8y9Nj7GgGjY2u7liE8suwoQD2YtASGicPvWssIIV hpV9cq49hO0E+/tpxekH+K2nXCcb7hOZj/zY5nG/12gvRy78k7Yk+9OfdWshexclbzdZ qEqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695820397; x=1696425197; 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=2HA//p4EYIQ7ls1mGM7MsNLp5mapkmcavm+KaNvR/Ks=; b=tjc9iDVoi4Il55DHuLjxIKtXlrspYVyTcv+kAPKuFQefp/UR/aprrLM6S6IPjlFMGD NxlgFvQV0Ok4tehtb6ovAMG8A5X3Agl+hiv84Pl0Bsnxoq0J4JaAPYBptSjoN//IaMoX UcVdtMOERRh4mAuC9F6EgRC3IOdgT44OQx6ZJxXLVMC8t8jCJjRC/noPuQcx+c2uyqT8 Qq0Xrves8qcaT/2PxQ2QpEzav9iJ3qZEzUQm48i9Z/Sx0Dmyv14uqn/YLmO+lm0C/Wrp n13fTdvV8bvn22GPNVSPIuvXdjY4cYuGiGsCWrvCZ4uVEldYOgOQObQcbaLye4KnJMHn THdA== X-Gm-Message-State: AOJu0YxCA6OAwAAShYrQFKbJiDLpOwU7VU2GAJrK4bBABbCUyXzJIA0n 3mhi9J1rmj+hw/ee2xzqHWEWOKQSAbc= X-Received: by 2002:a17:902:e846:b0:1b6:bced:1dc2 with SMTP id t6-20020a170902e84600b001b6bced1dc2mr2081103plg.0.1695820397240; Wed, 27 Sep 2023 06:13:17 -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.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:13:16 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 10:12:42 -0300 Message-ID: <20230927131242.1950-12-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 11/11] fftools/ffplay: stop injecting stream side data in 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: erhYsU1jwNum This is no longer needed as the side data is available for decoders in the AVCodecContext. Signed-off-by: James Almer --- fftools/ffplay.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index e29b0ad0f9..87e04226c9 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -2794,8 +2794,6 @@ static int read_thread(void *arg) if (genpts) ic->flags |= AVFMT_FLAG_GENPTS; - av_format_inject_global_side_data(ic); - if (find_stream_info) { AVDictionary **opts; int orig_nb_streams = ic->nb_streams;