From patchwork Wed Sep 6 17:44:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43595 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp86760pzh; Wed, 6 Sep 2023 10:45:06 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEQ5KDT6OiUjCKc7/BdHFfF0zy6IpeWmWG34TirZsfnWo+PVACpzsPzVLAUXIRWC9kGrN2j X-Received: by 2002:a17:906:210a:b0:9a1:ddb9:6546 with SMTP id 10-20020a170906210a00b009a1ddb96546mr3353945ejt.61.1694022306095; Wed, 06 Sep 2023 10:45:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022306; cv=none; d=google.com; s=arc-20160816; b=UFLK/8bkvXqtFwTUsF3yN+klmb11NELWf2VwMfsF6/SmcBQvcGyfm4PGndZzN0Pzgp dZxZl+VCxtPDhpL/46klQasOFiB2tmbDsCUzaNldCJpYo2KvtnjG1t8tly4Yvp04SozH 7kdnUFbwu405y0yfcO6tBC1ah0M5Tlz3BtMi1Bukev+aDlPk7wKAIqZ34G2Zre5LBV7W sySbNtkxbX4haWioYBm6R3HCxj1Cj3QorXlsqhm7OMbLDKpo1h7fTZQvSbVVXYKK99Fg 2pjl8jjAohIKKjLEhABfnR2mghYEHWmyn7kIfKGVCNcKf48rMbIrUX6xarLDTSxYlpcw LuMw== 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=reZVwz6v2taP26AK1hDbnGu/lQSjztQmy/IyDuNDZ/o=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=k74B6eusYzGklhdJOoNXMvR3HwqENyln++atyzZ4RiwP/1At1wOO3J2hQ0DOuOroKk FSyQm3GzmwcnW3Z8aTICkXfaM/bMtV2OqJJDjnTrcnULHuhGrfIMEiscRRBm9tdZ7V8Q BFqXa1FO2K9/i6swPjpaUdO7FvqWGgPUbceHYIGk0qQd6pUvkmww067+tNwkNOE5D+yq iBqZffIsSbFLfslkKdiaTCUVirksnLrduv/Uxd9frKkl+QSNU/7eOfLAUA0EVe/TyKvM kDcbbUCfm1572AggAsdWd6J3a9sQCaPNPgRcOZUwvQKT99LNwYwvH++1/VHlQvWkgwRY vwww== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=A+WeB65I; 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 qx14-20020a170906fcce00b0099cc36c4680si9569334ejb.134.2023.09.06.10.45.05; Wed, 06 Sep 2023 10:45:06 -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=20221208 header.b=A+WeB65I; 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 D578368C7CF; Wed, 6 Sep 2023 20:44:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 40A6668C6E0 for ; Wed, 6 Sep 2023 20:44:46 +0300 (EEST) Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-6bf04263dc8so99686a34.3 for ; Wed, 06 Sep 2023 10:44:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022284; x=1694627084; 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=B8kI+4Bk1svpbZgoUhHD88FXRaCaGjtjxh7ADIx3OBY=; b=A+WeB65Ihk7SUyvZzdn2hLAxLM9+ks64xf1Nt2qfbIM0JPuD315kO/yFyxsZyltBjW NfvibnIGg8mnK8Se5oBb8A8wPA5q8YQleC1hfZuDPEJTQ5p8LTWlHI0f7dtWq5O4etKP QJvJZWWuKKPQ2qq/1yTtUnUCyGQtasoyI7gXJpu3OyBZGnTkINwuHbNwZxAiutsmISYI +d7PKkFDUcXfeQ/UhIZzwOjUt4XFrYkRgXDPFW0PS+AD5aXGagkp26g2rHPaMOcUysQ8 Eht3ZJLg3Dm/G03+wluF0dYaLOwMErEjp4usUaVWAoIpvzxVQH8t3TtwFge/3bsiHWVj AqIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022284; x=1694627084; 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=B8kI+4Bk1svpbZgoUhHD88FXRaCaGjtjxh7ADIx3OBY=; b=TYaWjmx6m2eON/AxGnpIh47oBfxviefUeripeByc1so6TJbNNgVbtQbc59bvh2J5BZ zz3agtLseXscfVYE5yHaX+FvuxYZt36rFD+7mnLDQsRiB79mjzU3JYmQzVmwHgjaQ9vs NnWY6pf0CSjwE5ZaqzRE2lEbkqh1Osr5DVLw/xhBz2FxU/N8dwjjtlVQnxnw1VI0CYyH 7TE1hKvpOU6ayelMKVyAvGp9xfVGSpUZ5FFhuKP0fmf1BtoWe9+a+IIz0Z10suS2n8Tq igSJkFhfe8bdUIel67C7dPAr89I4Yn3XdGIiOYtpKYgViPH/PjkpfnZn2s9juj0t7Xc7 ++pQ== X-Gm-Message-State: AOJu0Yx/k9efejlMaNDH4KJBGKvLy0yJbwTw/Ju+AWWMSvPB1qCFdvM8 fzpgvcA4nkibJ3gEy8IkSUlfqMaiqXs= X-Received: by 2002:a05:6870:239f:b0:1c7:ebf5:b6cb with SMTP id e31-20020a056870239f00b001c7ebf5b6cbmr19408656oap.25.1694022284324; Wed, 06 Sep 2023 10:44:44 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:43 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:21 -0300 Message-ID: <20230906174431.45558-2-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/10] avcodec/packet: add side data set struct and 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: aaHo3ET8x5Iq This will be useful in the following commits. Signed-off-by: James Almer --- libavcodec/avpacket.c | 99 +++++++++++++++++++++++++++++++++++++++++++ libavcodec/packet.h | 74 ++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 5fef65e97a..5b133c5d8a 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -645,3 +645,102 @@ int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp) return 0; } + +AVPacketSideData *av_packet_side_data_set_get(const AVPacketSideDataSet *set, + enum AVPacketSideDataType type) +{ + for (int i = 0; i < set->nb_sd; i++) + if (set->sd[i]->type == type) + return set->sd[i]; + + return NULL; +} + +static AVPacketSideData *add_side_data_to_set(AVPacketSideDataSet *set, + enum AVPacketSideDataType type, + uint8_t *data, size_t size) +{ + AVPacketSideData *sd, **tmp; + + for (int i = 0; i < set->nb_sd; i++) { + sd = set->sd[i]; + if (sd->type != type) + continue; + + av_freep(&sd->data); + sd->data = data; + sd->size = size; + return sd; + } + + if (set->nb_sd + 1U > INT_MAX) + return NULL; + + tmp = av_realloc_array(set->sd, set->nb_sd + 1, sizeof(*tmp)); + if (!tmp) + return NULL; + + set->sd = tmp; + + sd = av_mallocz(sizeof(*sd)); + if (!sd) + return NULL; + + sd->type = type; + sd->data = data; + sd->size = size; + + set->sd[set->nb_sd++] = sd; + + return sd; +} + +AVPacketSideData *av_packet_side_data_set_add(AVPacketSideDataSet *set, + enum AVPacketSideDataType type, + uint8_t *data, size_t size, + int flags) +{ + return add_side_data_to_set(set, type, data, size); +} + +AVPacketSideData *av_packet_side_data_set_new(AVPacketSideDataSet *set, + enum AVPacketSideDataType type, + size_t size, int flags) +{ + AVPacketSideData *sd = NULL; + uint8_t *data = av_malloc(size); + + if (!data) + return NULL; + + sd = add_side_data_to_set(set, type, data, size); + if (!sd) + av_freep(&data); + + return sd; +} + +void av_packet_side_data_set_remove(AVPacketSideDataSet *set, + enum AVPacketSideDataType type) +{ + for (int i = set->nb_sd - 1; i >= 0; i--) { + AVPacketSideData *sd = set->sd[i]; + if (sd->type != type) + continue; + av_free(set->sd[i]->data); + av_free(set->sd[i]); + set->sd[i] = set->sd[--set->nb_sd]; + break; + } +} + +void av_packet_side_data_set_free(AVPacketSideDataSet *set) +{ + for (int i = 0; i < set->nb_sd; i++) { + av_free(set->sd[i]->data); + av_free(set->sd[i]); + } + set->nb_sd = 0; + + av_freep(&set->sd); +} diff --git a/libavcodec/packet.h b/libavcodec/packet.h index f28e7e7011..87720ab909 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -318,6 +318,20 @@ typedef struct AVPacketSideData { enum AVPacketSideDataType type; } AVPacketSideData; +/** + * Structure to hold a set of AVPacketSideData + * + * @see av_packet_side_data_set_new + * @see av_packet_side_data_set_add + * @see av_packet_side_data_set_get + * @see av_packet_side_data_set_remove + * @see av_packet_side_data_set_free + */ +typedef struct AVPacketSideDataSet { + AVPacketSideData **sd; + int nb_sd; +} AVPacketSideDataSet; + /** * 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 @@ -724,6 +738,66 @@ int av_packet_make_writable(AVPacket *pkt); */ void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); +/** + * Allocate a new side data entry into to a set. + * + * @param set a set to which the side data should be added + * @param type side data type + * @param size side data size + * @param flags currently unused + * @return pointer to freshly allocated side data entry on success, or NULL + * otherwise. + */ +AVPacketSideData *av_packet_side_data_set_new(AVPacketSideDataSet *set, + enum AVPacketSideDataType type, + size_t size, int flags); + +/** + * Wrap an existing array as a packet side data into a set. + * + * @param set a set to which the side data should be added + * @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 + * set on success + * @param size size of the data array + * @param flags currently unused + * @return pointer to freshly allocated side data entry on success, or NULL + * otherwise. On failure, the set is unchanged and the data remains + * owned by the caller. + */ +AVPacketSideData *av_packet_side_data_set_add(AVPacketSideDataSet *set, + enum AVPacketSideDataType type, + uint8_t *data, size_t size, + int flags); + +/** + * Remove side data of the given type from a set. + * + * @param set a set from which the side data should be removed + * @param type side information type + */ +void av_packet_side_data_set_remove(AVPacketSideDataSet *set, + enum AVPacketSideDataType type); + +/** + * Get side information from set. + * + * @param set a set from which the side data should be fetched + * @param type desired side information type + * + * @return pointer to side data if present or NULL otherwise + */ +AVPacketSideData *av_packet_side_data_set_get(const AVPacketSideDataSet *set, + enum AVPacketSideDataType type); + +/** + * Convenience function to free all the side data stored in a set. + * + * @param set the set to free + */ +void av_packet_side_data_set_free(AVPacketSideDataSet *set); + /** * @} */ From patchwork Wed Sep 6 17:44:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43596 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp86840pzh; Wed, 6 Sep 2023 10:45:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFz486cBtfa9GmmDa7O5diqcSXTEGH5QpUGpEVE+svimpr0gZh2QU3Ikc5+sygyAdudBiB3 X-Received: by 2002:adf:eecc:0:b0:317:4cf8:35f9 with SMTP id a12-20020adfeecc000000b003174cf835f9mr2753799wrp.16.1694022315046; Wed, 06 Sep 2023 10:45:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022315; cv=none; d=google.com; s=arc-20160816; b=jDOtIgn2NLutKfOZ65GLKncKlAzE4opVeyrhVqZhBqKAGXY2/s1xwAfW/HCfGyp5Dt MknX2i9vRN8sreDKMox65+eaGlWDIMIKUtz8R0k1aHX/6qfa8O4RNDpa9RendrDHe9vQ H2gJhrzaIiyJ8rKmreGfgcuVQGsth2BENF5bJRxdDhmzNVZDoPqs3xExEWH8uzyNLx4W x6Si0BXqEDTH7XOb0+hrH2A0WxEdzfLYKQLWRRmiZiJgcqzVOL5YA7SqL3cuPhoj2Qpm oJqE8INfYbYbsTdWXCvSS1QsPptQzefwsnGP4aGhzSekNtPGU6ObIGYLpZPppJhJY5/G nUSA== 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=a8Diu7LKKQ0AbzlO8RswIyJYp7nZF00Mb7VT/gDMv/8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=VGwXIwb1/Hl8lvrMwxB+jk7rZ5BLBejJNkUfkyxVRwzIaXZFVyyKSm/iGcgCjL4qM8 VUd2va74sAYyUqANgAB8x8h/E1uFYYoFi8565XE8l9FGpkw8pMY+haaowkuJAkNG8sga uHsVXPgSug5qMirVkP5EJg1WYbrGbbb3bAY7WWgfXWr+mu5Mv3tukgQ4EippfNeNcjrA CLKkvy/QKKTlifbGkQI1nly8Ya9vygeXrplNp1KVejSjJVGmModnd2Zcwk9CY2D1gNjU vmKkibvB9Dszwf1LutN2e1f4I0HTNailH7GATb3Aq8tAa9pluNLORPtXo8gmmx8n2fnF tj9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=nfSc0tIz; 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 e21-20020a056402149500b0052a121af5a7si9540497edv.452.2023.09.06.10.45.14; Wed, 06 Sep 2023 10:45:15 -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=20221208 header.b=nfSc0tIz; 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 E7EEF68C801; Wed, 6 Sep 2023 20:44:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 81AD168C7CF for ; Wed, 6 Sep 2023 20:44:47 +0300 (EEST) Received: by mail-ot1-f54.google.com with SMTP id 46e09a7af769-6bf0decd032so113769a34.0 for ; Wed, 06 Sep 2023 10:44:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022286; x=1694627086; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=UekujQqKiUYGwN7b42OsyVoOxKD1IbP3I2aOJwCUb7I=; b=nfSc0tIzc12sLEu6jMiAKVxPOeYUWnx9UINYMaRDADLR2BZhvrNuJ0gealAmiwD2Uy 3hDieM6Nu8CcWQpYWKlR0gMsm/eVu6XPnrf4Z3gOMb5T8rfYct84ZYGaMrmQEho1LZnh coHWfIWZX6LcfwUwm8Oce8+A1xPnlaN/22QtEiKYojw7VEj1Ra8f58/jiNP4z6Ja3I1d uX4Lw1vua9+lqk054XeNi0uPsNkEVNH3XAi1Y2O9NNkZwuCgz2Aldb2zrcg66uPH5zqB 3MKO/Sn4OoHARxPhV+yFpq0a++RGHDZ3yGl73x9qdI6OdLi8TGiQNg9RM55mifZA4ees 8m7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022286; x=1694627086; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UekujQqKiUYGwN7b42OsyVoOxKD1IbP3I2aOJwCUb7I=; b=FjDSqoT5UjL9z1UBBhiQzHEM4FPM4CYZqrU17jWtvdezbnOGmuPSvO7Z3Yo7Q0NcvY KN+KQqttgNZV2RmgzWpJZO5DAQtofDEQnzwe/eNbJhFXuQXoRRQZgmgrgQxFgYn/uISU 43Jr0yGp3QvUTmuyBT4B/fxv8qoNimQJ+4Fvu8uRkh4Yesa8gb+D5zJ98iUTxbtZwZP3 8lJF5i6IkS1o2tgM4cfKpgrZBFhmJ1MSiyj7Ddo6MxVbJDjJhSuwYnPGHZHg1ByFFD9d SM9H18AZ8eCwEoSJSFmdYZTtvMEzQQ4mP6quKpuMCH69qti/NE466SXzYgLNs6kd+kz6 Mkgg== X-Gm-Message-State: AOJu0YxDB1WMEzv5tTK1VodbMJpSrkhybZH7F2FtSbAmzPBrCbKKgfJY +G4bMKUriwh48psleaNEnBvw0XT0zi8= X-Received: by 2002:a9d:6181:0:b0:6bc:fdc8:d600 with SMTP id g1-20020a9d6181000000b006bcfdc8d600mr17621561otk.25.1694022285703; Wed, 06 Sep 2023 10:44:45 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:45 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:22 -0300 Message-ID: <20230906174431.45558-3-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/10] avcodec/codec_par: add side data to AVCodecParameters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: c36MYBZ/zMM8 This will simplify the propagation of side data to decoders and from encoders. Global side data will now reside in the AVCodecContext, thus be available during init(), removing the need to propagate it inside packets. Global and frame specific side data will therefore be distinct. Signed-off-by: James Almer --- libavcodec/codec_par.c | 81 ++++++++++++++++++++++++++++++++++++++++++ libavcodec/codec_par.h | 6 ++++ 2 files changed, 87 insertions(+) diff --git a/libavcodec/codec_par.c b/libavcodec/codec_par.c index a38a475dc7..c0c941c2b6 100644 --- a/libavcodec/codec_par.c +++ b/libavcodec/codec_par.c @@ -27,11 +27,13 @@ #include "libavutil/mem.h" #include "avcodec.h" #include "codec_par.h" +#include "packet.h" static void codec_parameters_reset(AVCodecParameters *par) { av_freep(&par->extradata); av_channel_layout_uninit(&par->ch_layout); + av_packet_side_data_set_free(&par->side_data); memset(par, 0, sizeof(*par)); @@ -82,6 +84,8 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src dst->ch_layout = (AVChannelLayout){0}; dst->extradata = NULL; dst->extradata_size = 0; + dst->side_data.sd = NULL; + dst->side_data.nb_sd = 0; if (src->extradata) { dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!dst->extradata) @@ -89,6 +93,32 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src memcpy(dst->extradata, src->extradata, src->extradata_size); dst->extradata_size = src->extradata_size; } + if (src->side_data.nb_sd) { + const AVPacketSideDataSet *src_set = &src->side_data; + AVPacketSideDataSet *dst_set = &dst->side_data; + + dst_set->sd = av_calloc(src_set->nb_sd, sizeof(*dst_set->sd)); + if (!dst_set->sd) + return AVERROR(ENOMEM); + + for (int i = 0; i < src_set->nb_sd; i++) { + const AVPacketSideData *src_sd = src_set->sd[i]; + AVPacketSideData *dst_sd = av_mallocz(sizeof(*dst_sd)); + + if (!dst_sd) + return AVERROR(ENOMEM); + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) { + return AVERROR(ENOMEM); + av_free(dst_sd); + } + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + dst_set->sd[dst_set->nb_sd++] = dst_sd; + } + } ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); if (ret < 0) @@ -178,6 +208,32 @@ FF_ENABLE_DEPRECATION_WARNINGS par->extradata_size = codec->extradata_size; } + if (codec->nb_coded_side_data) { + AVPacketSideDataSet *dst_set = &par->side_data; + + dst_set->sd = av_calloc(codec->nb_coded_side_data, sizeof(*dst_set->sd)); + if (!dst_set->sd) + return AVERROR(ENOMEM); + + for (int i = 0; i < codec->nb_coded_side_data; i++) { + const AVPacketSideData *src_sd = &codec->coded_side_data[i]; + AVPacketSideData *dst_sd = av_mallocz(sizeof(*dst_sd)); + + if (!dst_sd) + return AVERROR(ENOMEM); + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) { + return AVERROR(ENOMEM); + av_free(dst_sd); + } + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + dst_set->sd[dst_set->nb_sd++] = dst_sd; + } + } + return 0; } @@ -262,5 +318,30 @@ FF_ENABLE_DEPRECATION_WARNINGS codec->extradata_size = par->extradata_size; } + for (int i = 0; i < codec->nb_coded_side_data; i++) + av_free(codec->coded_side_data[i].data); + av_freep(&codec->coded_side_data); + codec->nb_coded_side_data = 0; + if (par->side_data.nb_sd) { + const AVPacketSideDataSet *src_set = &par->side_data; + + codec->coded_side_data = av_calloc(src_set->nb_sd, sizeof(*codec->coded_side_data)); + if (!codec->coded_side_data) + return AVERROR(ENOMEM); + + for (int i = 0; i < src_set->nb_sd; i++) { + const AVPacketSideData *src_sd = src_set->sd[i]; + AVPacketSideData *dst_sd = &codec->coded_side_data[i]; + + dst_sd->data = av_memdup(src_sd->data, src_sd->size); + if (!dst_sd->data) + return AVERROR(ENOMEM); + + dst_sd->type = src_sd->type; + dst_sd->size = src_sd->size; + codec->nb_coded_side_data++; + } + } + return 0; } diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index add90fdb1e..169e595b7c 100644 --- a/libavcodec/codec_par.h +++ b/libavcodec/codec_par.h @@ -29,6 +29,7 @@ #include "libavutil/pixfmt.h" #include "codec_id.h" +#include "packet.h" /** * @addtogroup lavc_core @@ -223,6 +224,11 @@ typedef struct AVCodecParameters { * when no higher-level timing information is available. */ AVRational framerate; + + /** + * Additional data associated with the entire stream. + */ + AVPacketSideDataSet side_data; } AVCodecParameters; /** From patchwork Wed Sep 6 17:44:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43597 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp86946pzh; Wed, 6 Sep 2023 10:45:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHSReResvpp5IopzZD+aXTy0zGhRIt9hLtoDAAWXaLAoPABaDTfKav0E+OaG8hT0i5DkLEP X-Received: by 2002:a05:6402:4305:b0:52e:33ad:1c45 with SMTP id m5-20020a056402430500b0052e33ad1c45mr464906edc.11.1694022325239; Wed, 06 Sep 2023 10:45:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022325; cv=none; d=google.com; s=arc-20160816; b=dQVTkgAOHKJ5KdmKymtfQ4JsrAZBUmd+/d9MaqP+vHeuE1zVkVApymG5nM6l/WSjL9 H1fR6bFMs5RzEfujNmCZ5AOQJDOEVcWK0FNt0kVsEcmtd2zAMUcVJlDu5u4wpGNfBWRc 66GkUb7jtRBeq/ytx+UZmgAvm2K7FjAJ6MJbRLspnSKqUJu0a1V0pVismfzzd5/l3cwW ssImXm16PqGM9slBzc7o996/lHLClmkZL5kvJOUXIFng8gl2qGqlZXy8btHcQEw8aEpa 7SnvdlPe3Y0jfGmpOEZF+u2WuO1KXFr1K0aiOIo8jh8MghHLXijlLMREgbuHYRxvJE8w wXNQ== 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=boS4yBhGY9qUzAKfvkS00+NO4TuExmRopa/J3UPsSHo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=x1wHBgQCHWODHnllJkUI9/3PIj+A6xIMxawNg0DaeW2Dh/ZDHaztD9Z5s/Znltl0l0 7Tk0RM2EEAqn6XRaxO4fe3joWj3WdRoyA5w7DkMx7TOfY1a7KZsxVvIlmuZ2Veq8kJ6Q jUhLegq2I2+lU34agParF1J/dS86OTlluoe6DtbYfF8rblNQ4QRZG22s9ewdy9kK+7QK xKa7Co1u4lR7M+/91RY/g0OaXf5ED89BSNOE5LFXE5crJKKB54uD2VEsk2MMlPAvEeez PY9vXF1jMMSLKW8bOe+XSz27crDQVpVaxfilnA0zqn4DYWjCy+G340J1iRAe+JnC77tf Zj6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b="mCw4/44X"; 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 dn7-20020a05640222e700b0052c8467e2c4si6748429edb.231.2023.09.06.10.45.24; Wed, 06 Sep 2023 10:45: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=20221208 header.b="mCw4/44X"; 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 1E74168C806; Wed, 6 Sep 2023 20:44:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B8C4668C7F2 for ; Wed, 6 Sep 2023 20:44:49 +0300 (EEST) Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-6bcac140aaaso99216a34.2 for ; Wed, 06 Sep 2023 10:44:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022288; x=1694627088; 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=WGmjcGCBFvTPP9XLJ4zEueSdAYqdpiTcFpikD/1RuYI=; b=mCw4/44XT+QIhpAIykaJnXysqayMFxALQM/uzVl+KkSqyGFF+5jxFWvgbsl+Y7TeB0 tT/ynrp/uws/KhyDiV5R/9G17GqdJraOctWrw4nCYkW/JqUBaIvi9kkfwPgOCi2tzh/U cveHzdgK8sGHXM9Lw08aRERz9FJdPrM43sODs6ElZstHGgZzBzDxAPQbVgXubZDQdiKz ++34v0iNXzcHUkpFVaatDSLwi0v4PmIKmEqtHXMaeaiaf4wxdNvWTswXq/V336yw+mMe x2qRvbwRIXP12a2I1Wg9Z90K1P59kUT7XgZSoN72hINkINmRv7TbdnZJUdKDJFj9j9ht 0TsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022288; x=1694627088; 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=WGmjcGCBFvTPP9XLJ4zEueSdAYqdpiTcFpikD/1RuYI=; b=WoqsUXE8Ij1BAeHBw13wv8MJt0l84uIeVIpLDqcAa95IpzSew2oNr75+mlb1U34C5N eNmkj1BrILx1NzGsNFAUU9L2Z/aQIUcNrk/8AahYWPYaCvN6B6QioD16Qu90buHeRXcD 4Us9O5F/ZR6vyQFn+AhYs/XxdSTftjSoBdEHnkdZEz6yb3CDV3AS2n8TFxOK0ydqvWvE N7LSjctzW50nE6vzjrCNwbBaUEuu+Tj1czLECBpyoWaEufsC8z6E4ccL6ysBfi5FqoKq XIA0huIezlXixPJU+y66TZyXIm/3dk/wIieN90iL953H5UH5+CPUGM13KzaTCG//w/ce eCwg== X-Gm-Message-State: AOJu0YxX7xcgvaiDRTRHLkjYnwY4qrDSiWBGdO1q+txGn3q/BzTsOmdb 5LmP43afYXNBFL0jmzCHsye/jFeDkB4= X-Received: by 2002:a9d:4e8e:0:b0:6b8:f730:7ab4 with SMTP id v14-20020a9d4e8e000000b006b8f7307ab4mr18887027otk.0.1694022287182; Wed, 06 Sep 2023 10:44:47 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:46 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:23 -0300 Message-ID: <20230906174431.45558-4-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/10] 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: da54r06mNu24 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 | 9 ++-- libavformat/avformat.c | 42 ++++--------------- libavformat/avformat.h | 40 +++++++++++++++++- libavformat/concatdec.c | 1 - libavformat/dashdec.c | 11 ----- libavformat/demux.c | 54 +++++++++++++++--------- 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 | 45 ++++++++++---------- libavformat/matroskaenc.c | 48 ++++++++++++--------- libavformat/mov.c | 81 ++++++++++++++++++------------------ libavformat/movenc.c | 73 +++++++++++++++----------------- libavformat/mp3enc.c | 8 ++-- libavformat/mpegenc.c | 18 +++++--- libavformat/mpegts.c | 8 ++-- libavformat/mux.c | 19 +++++++++ libavformat/mxfdec.c | 22 +++++----- libavformat/mxfenc.c | 8 ++-- libavformat/options.c | 2 + libavformat/replaygain.c | 9 ++-- libavformat/seek.c | 2 + libavformat/version_major.h | 1 + 26 files changed, 294 insertions(+), 251 deletions(-) diff --git a/libavdevice/android_camera.c b/libavdevice/android_camera.c index 1934999c18..012b40aa37 100644 --- a/libavdevice/android_camera.c +++ b/libavdevice/android_camera.c @@ -638,7 +638,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); @@ -647,14 +647,15 @@ 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_set_new(&st->codecpar->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 356b4de931..3afc5afd7f 100644 --- a/libavformat/avformat.c +++ b/libavformat/avformat.c @@ -46,9 +46,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); @@ -138,6 +142,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) { @@ -205,36 +211,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 @@ -270,10 +248,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 1916aa2dc5..f78a027f64 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -164,6 +164,13 @@ * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the * caller wishes to decode the data. * + * There may be no overlap between the stream's @ref AVCodecParameters.side_data + * "side data" and @ref AVPacket.side_data "side data" in packets. I.e. a given + * side data is either exported by the demuxer in AVCodecParameters, then it never + * appears in the packets, or the side data is exported through the packets (always + * in the first packet where the value becomes known or changes), then it does not + * appear in AVCodecParameters. + * * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for * pts/dts, 0 for duration) if the stream does not provide them. The timing @@ -209,6 +216,11 @@ * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during * remuxing: there is no guarantee that the codec context values remain valid * for both input and output format contexts. + * - There may be no overlap between AVCodecParameters.side_data and side data in + * packets. I.e. a given side data is either set by the caller in + * AVCodecParameters, then it never appears in the packets, or the side data is + * sent through the packets (always in the first packet where the value becomes + * known or changes), then it does not appear in AVCodecParameters. * - The caller may fill in additional information, such as @ref * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" * metadata, @ref AVFormatContext.chapters "chapters", @ref @@ -937,6 +949,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). @@ -953,13 +966,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 @@ -1715,11 +1735,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_set_get() */ +attribute_deprecated void av_format_inject_global_side_data(AVFormatContext *s); +#endif /** * Returns the method used to set ctx->duration. @@ -1844,6 +1871,7 @@ const AVClass *av_stream_get_class(void); */ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); +#if FF_API_AVSTREAM_SIDE_DATA /** * Wrap an existing array as stream side data. * @@ -1856,7 +1884,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const 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_set_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); @@ -1868,7 +1899,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_set_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); /** @@ -1880,9 +1914,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_set_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 29d4680c68..2441087606 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -1952,17 +1952,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 fcd5daf699..76d4558ad2 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->side_data.nb_sd; i++) { + const AVPacketSideData *const src_sd = st->codecpar->side_data.sd[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,42 @@ 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_set_add(&st->codecpar->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->side_data.nb_sd > 0) { + const AVPacketSideDataSet *set = &st->codecpar->side_data; + + av_assert0(!st->side_data && !st->nb_side_data); + st->side_data = av_calloc(set->nb_sd, sizeof(*st->side_data)); + if (!st->side_data) { + ret = AVERROR(ENOMEM); + goto find_stream_info_err; + } + + for (int j = 0; j < set->nb_sd; j++) { + uint8_t *data = av_memdup(set->sd[j]->data, + set->sd[j]->size); + if (!data) { + ret = AVERROR(ENOMEM); + goto find_stream_info_err; + } + st->side_data[j].type = set->sd[j]->type; + st->side_data[j].size = set->sd[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..8d03d0e632 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_set_add(&st->codecpar->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..d6f32f0c68 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->side_data.nb_sd) 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->side_data.nb_sd; i++) { + const AVPacketSideData *sd = st->codecpar->side_data.sd[i]; av_log(ctx, AV_LOG_INFO, "%s ", indent); switch (sd->type) { diff --git a/libavformat/hls.c b/libavformat/hls.c index c625e30291..8f80cf64f4 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1851,17 +1851,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 27d97f5f72..fcc875e236 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -1351,16 +1351,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 + AVPacketSideData *sd = av_packet_side_data_set_get( + &stream->codecpar->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 53e70ccb53..399ec16ded 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; @@ -354,10 +356,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 fda77b0b89..20eb75bb6d 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2175,7 +2175,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) @@ -2184,11 +2183,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_set_add(&st->codecpar->side_data, AV_PKT_DATA_STEREO3D, + (uint8_t *)stereo, sizeof(*stereo), 0)) { av_freep(&stereo); - return ret; + return AVERROR(ENOMEM); } return 0; @@ -2235,28 +2233,26 @@ 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_set_add(&st->codecpar->side_data, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, + (uint8_t *)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_set_new(&st->codecpar->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); @@ -2282,6 +2278,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; @@ -2298,10 +2295,12 @@ 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_set_new(&st->codecpar->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 @@ -2326,7 +2325,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"); @@ -2402,11 +2400,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_set_add(&st->codecpar->side_data, AV_PKT_DATA_SPHERICAL, + (uint8_t *)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 bf2ca7106b..b188b74e82 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,18 @@ 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_set_get(&st->codecpar->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_set_get(&st->codecpar->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 +1408,15 @@ 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_set_get(&st->codecpar->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 +1463,13 @@ 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); + AVPacketSideData *sd = av_packet_side_data_set_get(&st->codecpar->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 +1629,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, format = stereo_mode; } } else { + AVPacketSideData *sd; const AVStereo3D *stereo; /* The following macro presumes all MATROSKA_VIDEO_STEREOMODE_TYPE_* * values to be in the range 0..254. */ @@ -1639,11 +1641,12 @@ 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_set_get(&st->codecpar->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 +1684,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 +1701,13 @@ 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_set_get(&st->codecpar->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 be9975f297..a08b6c77ee 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,13 @@ 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_set_new(&st->codecpar->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 +836,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 +845,14 @@ 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_set_new(&st->codecpar->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 +1754,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 +1774,12 @@ 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_set_new(&st->codecpar->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 { @@ -6838,8 +6846,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; + 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; @@ -6917,9 +6926,9 @@ 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_set_get(&st->codecpar->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) { @@ -6941,9 +6950,8 @@ 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_set_add(&st->codecpar->side_data, AV_PKT_DATA_ENCRYPTION_INIT_INFO, + side_data, side_data_size, 0)) av_free(side_data); finish: @@ -8720,46 +8728,37 @@ 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_set_add(&st->codecpar->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_set_add(&st->codecpar->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_set_add(&st->codecpar->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_set_add(&st->codecpar->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_set_add(&st->codecpar->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 696ae5a6c9..66efed0363 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -672,11 +672,11 @@ 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) : + AVPacketSideData *sd = track->st ? + av_packet_side_data_set_get(&track->st->codecpar->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 +2129,16 @@ 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_set_get(&track->st->codecpar->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 +2171,14 @@ 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_set_get(&track->st->codecpar->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 +2196,12 @@ 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_set_get(&track->st->codecpar->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 +2420,7 @@ 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_set_get(&track->st->codecpar->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 +2434,16 @@ 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); + AVPacketSideData *stereo_3d = av_packet_side_data_set_get(&track->st->codecpar->side_data, AV_PKT_DATA_STEREO3D); + AVPacketSideData *spherical_mapping = av_packet_side_data_set_get(&track->st->codecpar->side_data, AV_PKT_DATA_SPHERICAL); + AVPacketSideData *dovi = av_packet_side_data_set_get(&track->st->codecpar->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 +3390,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 +3399,15 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov, duration *= mov->avif_loop_count; if (st) { + 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_set_get(&st->codecpar->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 +4605,10 @@ 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)) { + AVPacketSideData *sd = av_packet_side_data_set_get(&track->st->codecpar->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 +5441,7 @@ 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_set_get(&st->codecpar->side_data, AV_PKT_DATA_DOVI_CONF)) has_dolby = 1; } diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 5e81f72a59..9fc1c4fea4 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; + 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,11 @@ 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_set_get(&s->streams[0]->codecpar->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..3f3b94112d 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,17 @@ 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: { + 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_set_get(&st->codecpar->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 +455,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 +473,15 @@ 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; + 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_set_get(&st->codecpar->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 0b3edda817..3ba723d060 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2190,7 +2190,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 @@ -2221,11 +2220,10 @@ 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_set_add(&st->codecpar->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 415bd3948f..ae07c8839e 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -277,6 +277,25 @@ 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_set_new(&st->codecpar->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 34230ece98..2438b7c7bf 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2577,10 +2577,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_set_new(&st->codecpar->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; } @@ -2980,19 +2982,19 @@ 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_set_add(&st->codecpar->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_set_add(&st->codecpar->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 d8252ed68f..33922400e6 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -556,7 +556,7 @@ 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_set_get(&s->streams[i]->codecpar->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 +1158,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; + 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 +1344,9 @@ 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_set_get(&st->codecpar->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 e4a3aceed0..ef0b593d36 100644 --- a/libavformat/options.c +++ b/libavformat/options.c @@ -309,7 +309,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..ab3e39318b 100644 --- a/libavformat/replaygain.c +++ b/libavformat/replaygain.c @@ -69,16 +69,19 @@ 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_set_new(&st->codecpar->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 293fbd3397..c348e3eb37 100644 --- a/libavformat/version_major.h +++ b/libavformat/version_major.h @@ -45,6 +45,7 @@ #define FF_API_GET_END_PTS (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_AVIODIRCONTEXT (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_AVFORMAT_IO_CLOSE (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 6 17:44:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43598 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87081pzh; Wed, 6 Sep 2023 10:45:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGzgnrCi2Q+KjMpFW7U3A+XJZT9kPQbgWP8UvC088pOOZU3GLtCbKfw1wwwe+2x9wY4bGt/ X-Received: by 2002:aa7:c990:0:b0:523:2847:fb5a with SMTP id c16-20020aa7c990000000b005232847fb5amr2428740edt.40.1694022339747; Wed, 06 Sep 2023 10:45:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022339; cv=none; d=google.com; s=arc-20160816; b=LmvA3fLIqtYPzvxB4ZeFdjRQWHwyKN6Rg5tRw+QTrhc3HlHFzbPrOaWczO/QabWif2 EvlyKzvgDAdGBE6unr5jdRSNSfhCMrWOzGnUYojE1WYsZbHMpc8dAzapDZ4259o4MW28 vgHab/WdKTNCuDAHdWfSqADJNhhG7F5bHq4/H9G9qg8qBpcC66B5ChFrhAUQWPUnsJ9z fF6lwhIr3owFyAdLa4ioR4O+iL21hbGbGlI4AgOxhHPCibCSqf6LDlupTBpxo+vuRRbo dnlZToYhy+hbS5k3YemmIrNnBNkVDf7+McIXuvX0N3yvs7YlURHaI0v9Ksw+gY0gbbHO 92ng== 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=M6jjMlkzUUadgNevXPCxZ77J0C8/jysaqCF/eig7buE=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZpR+9BHwZwXuoVh5bVC8G5qpPLFb5B7sFPbl3mAhMKlA0wyv4vgey8cOJcLrkJD4IF JQd2NOe/JlYgSixKPFntha0jtbu1h27dLtJDdAYdgqVeD6ORPUOjoz2uGe30RTKAGJN+ 7/9U0gksdoEVgQ/rw197eipSBJYc7WIJxsOkfWT1DQFacPAEFDVUmeWQBeMPXHm8vFMB Evv+2YJsjzt320N/d8yL2/ExuYkkDqqdN+JSGRt51+q7MA4joywhFZIs6yYWwcVBXc2n eYN+zqYkAW41q9EzVXOue18kS6BgqBKJXaZ/DKF4tgZX0F3Ia9pqd/nE4WmWzedmoTwY 4k7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=McYhXOA3; 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 o26-20020aa7c51a000000b00522d742bc4dsi9448841edq.334.2023.09.06.10.45.33; Wed, 06 Sep 2023 10:45:39 -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=20221208 header.b=McYhXOA3; 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 4043668C7F5; Wed, 6 Sep 2023 20:44:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A606468C7F5 for ; Wed, 6 Sep 2023 20:44:50 +0300 (EEST) Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-6bd8639e7e5so106384a34.1 for ; Wed, 06 Sep 2023 10:44:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022289; x=1694627089; 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=nekLWYudG8/I1mlHhc1fc/xXxapcrLL/+McCYcUjOu4=; b=McYhXOA3DtUHw/mUBYIFvln0HXXTxRVoRI9Nke2IOsNxkoM84D1X73H34yL/bNyL4N pxQnIG5REjTfiZ08SbwGcemjwguC98C731eCX/JRYSzagJU65uoHaEFIbpTeymgncFP3 FHCDJ3mYSl2jYHGNkAWFf97Brn+mNW7Mb1g1/bMOHOPwN/xbjwlCoRgbIRz/FxlIvn2r PSBsNN4OkCLWqiDpbovGvMnE2tuBmKzMPMnvSMpKLhK/aZ/GMjQJZRRsC4jSkN26a1mg 3ytteJOlVFRQWqGATqE1sIZQ38pXLkKqARhfitHxeRYtStzAWxn1Un8i30wfRSRJ6oux TnlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022289; x=1694627089; 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=nekLWYudG8/I1mlHhc1fc/xXxapcrLL/+McCYcUjOu4=; b=AKQN1DniAyAvx3EWhLqxtXe8e4bebh5HB33ci6VGYnTVafU2TpqMdbH+8cQh1CzaC7 Fz5gZH6NVsRr2SKuwOqwxLcQ7JoYNkf5jaeO9Dg7MumPOsnPtCPZY0ecZW0hCbxKm/q3 MMmjP2ahm573Qc6rM6gulM44doyfgzBEA+LADBf/ZHh+diuVyFARuAk+XfIYyuT7w11L dcuTzcOk60SJtpQzgLlUM4SEkDLPaJ5Ml9XWJTHMx2HjK10SvVzcDU0eHNu7lYefhnSr ZU2QcwE0jjlu1En+ZfYuEeJFv+vEdbm6sJvnRWaOF90BG4PW4/vNHgJ9af7XyH56TwCO /WIg== X-Gm-Message-State: AOJu0YwPnpRBe+844m2cSpN2MI+MdJb18tMAizhwTwz4xLuX0VImKmym LmzpEVl0synImZh7eC4cihl4whSajOY= X-Received: by 2002:a05:6830:4799:b0:6b9:72be:671f with SMTP id df25-20020a056830479900b006b972be671fmr17081377otb.16.1694022288837; Wed, 06 Sep 2023 10:44:48 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:48 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:24 -0300 Message-ID: <20230906174431.45558-5-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/10] 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: +WBL27ISKusY Signed-off-by: James Almer --- fftools/ffmpeg_demux.c | 11 +++++++---- fftools/ffmpeg_enc.c | 31 +++++++++---------------------- fftools/ffmpeg_filter.c | 5 ++++- fftools/ffmpeg_mux_init.c | 19 ++++++++++--------- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 48edbd7f6b..6cf6d2e971 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->side_data.nb_sd; i++) { + AVPacketSideData *src_sd = ist->st->codecpar->side_data.sd[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,14 @@ 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_set_new(&st->codecpar->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 f28884e50c..503a2c033b 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -460,20 +460,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 @@ -483,15 +469,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->side_data.nb_sd; i++) { + AVPacketSideData *sd_src = ist->st->codecpar->side_data.sd[i]; + if (sd_src->type != AV_PKT_DATA_CPB_PROPERTIES) { + AVPacketSideData *sd_dst = av_packet_side_data_set_new(&ost->par_in->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..4be415c4f8 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -1383,11 +1383,14 @@ 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)) { + 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_set_get(&ist->st->codecpar->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 cf4cd2d5b7..46bc90b1c2 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1041,24 +1041,25 @@ 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->side_data.nb_sd; i++) { + const AVPacketSideData *sd_src = ist->st->codecpar->side_data.sd[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_set_new(&ost->st->codecpar->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_set_new(&ost->st->codecpar->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 6 17:44:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43600 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87186pzh; Wed, 6 Sep 2023 10:45:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFRp8FYbNh7xwySnfgv7Y455x1S2gyWzz+G5PxzGUPDyx8bO7Cj+5VnRgpoXZZNv0h6z1nC X-Received: by 2002:a05:6512:3e0f:b0:4ff:8aad:8c7b with SMTP id i15-20020a0565123e0f00b004ff8aad8c7bmr3648104lfv.68.1694022351332; Wed, 06 Sep 2023 10:45:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022351; cv=none; d=google.com; s=arc-20160816; b=oivpCw2reMZJgr809nWn0BNaCZ77M7y7XYnSE2bmV4ARrYd+SEUYXUQWbU+6afsuu9 qEqwRj8O+s3+BsahTgSrSByuPRJLCMlf93JmNVLGuXnmu0Rkz1AKW9GlYTvohnb2JEpb Xo8TIzpWFqMLteXbWtMOEWQGq7fjyn7dGNnK7v0IZIinuTlolVZpEts9KgM89l6jr6Jn tnS0hC1EgTNVL+ZakHykO9G1Ds7AudHuCcJQkpw4NsIT2vJXCnY7v7GzKBgwvp29mlAd 7m5BAkyOePGFdQZo53PIY5RirwpLnsQ0E47P64kO1f78YQBwTttJL/QOoCXc4micYK7w z8Qw== 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=zbtiqhXh/5vPIELztGeqdBk0xgx5KByoP1UNyRiAxQ4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=kmRXl0bL0VlaDh8mD3/xILKry2Yq60n1MiCPo5A0Pb81f52lnOGYgHt5oaVF8tf27B 1sdsBnmzRtUUPxlHI9LJyZq3tGYt8zCWQ8WnMzW0ntj+rkF0T/dcxLHOltPN0CAv6iX9 G7F5upTF/Qs59BKTjD8YqXW4VIDXtw1bm215uIRgZqzXGQ9+HMEw6qlC1ZpBuhcbeOHs 0WMshjeeciiGVWP1pwsBRZ0uUng1vjO16Nwm9BXki6b5v8Rwrsmzw0hKG8HquLeUuBom Jc1k4DCMbCLsuSSVEe12176LnTQtoYcl0sYw0aWc71JH97EE8S970ywfVBTPcIUZy0VQ bcJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=oER0xwBG; 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 p20-20020a17090635d400b009a63cbd4b06si5875534ejb.939.2023.09.06.10.45.51; Wed, 06 Sep 2023 10:45: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=20221208 header.b=oER0xwBG; 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 6C03468C87C; Wed, 6 Sep 2023 20:44:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f43.google.com (mail-oa1-f43.google.com [209.85.160.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E5BFB68C807 for ; Wed, 6 Sep 2023 20:44:51 +0300 (EEST) Received: by mail-oa1-f43.google.com with SMTP id 586e51a60fabf-1d1b55882a4so80902fac.1 for ; Wed, 06 Sep 2023 10:44:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022290; x=1694627090; 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=1Co2ekAUOZwmHn4/GWeOCS1jzKEMGDR9TeKn8hBo4FI=; b=oER0xwBGRIfPH6n5le6USz2D2G/2vdB7l6rxM3P8Fz/CWtEk4hLECw10sVbIKUJ3Sv R5S4FAmLt1yoJ2f5ai5vAPQs8Jy+/BH9RL4/yFzJAD41WB43DRcG3ntGE+dC9OEW4eza PkBGp9Ri9PMQM4iR7mJyu9E4sb5ztquaSakTNB1WtZaxHzuGeQEuIWRLVGpX3Kp1yq0g GdoozhBvhSRz9IX6vRKogc2P6AaEVnNSA9u1O8gloXaTdp/hWzfocj18zDgJji1QxfR+ Gk5nlGmMrxErPrByssvFMv/FQI2/623Ra4LWksbNrD6BvudOcwPMvNNU+7EQzsycEmb3 XQag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022290; x=1694627090; 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=1Co2ekAUOZwmHn4/GWeOCS1jzKEMGDR9TeKn8hBo4FI=; b=V0kcg+BEClBV+nSab3kc5D2tlY9P6NgrJPOYch6Booa8OU/ZFGdi98Cw2g0uoe2Gf9 xyOzMc/5hRU9z//GFBSEuQTM7O8A6z6EIbdsMBDx2aGrU30FlNMQBeko0Vc3x7Fu50od /0GAzga4fOcdGyvin6CWsU3TJJgF6l7i2PBHCC/HD5SOzbWKWS6LPoP1HiHFnWeqPQL9 2gHP8j1jnb8iR+WbbMN7+ECb/OOeydtIfPpAmLA9O1Evk48xdeoG75wWjfudqjOXn+B5 BLww48W4uW8TRKwkUfkdBPfd2L3AulNFazGo92Ho7plKFpJdTTskcUmMYrRkR++Yllo1 +iMw== X-Gm-Message-State: AOJu0YyDwOPl92UiVGcmDd6k/Nl8a7GVMogtmi9sPq8JPHoj86jIhk5m MoVi15O1TxkSONxdWI36FB9oO5gHgGQ= X-Received: by 2002:a05:6870:311f:b0:1bf:df47:7b5e with SMTP id v31-20020a056870311f00b001bfdf477b5emr22143898oaa.16.1694022290232; Wed, 06 Sep 2023 10:44:50 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:25 -0300 Message-ID: <20230906174431.45558-6-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/10] 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: h8UuYtzEpAMT Signed-off-by: James Almer --- fftools/ffplay.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 006da7ab57..a0d5811c94 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -1916,8 +1916,12 @@ 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) { + AVPacketSideData *sd = av_packet_side_data_set_get(&is->video_st->codecpar->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 6 17:44:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43603 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87434pzh; Wed, 6 Sep 2023 10:46:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE7NdLqZLOhi/jJhgvVFPQtbRxCq9duJR3sV+EXmrI3thSov/clE1ZMTwPw3fcLh6UkG7st X-Received: by 2002:ac2:5e6b:0:b0:4fa:ad2d:6c58 with SMTP id a11-20020ac25e6b000000b004faad2d6c58mr2557259lfr.61.1694022383475; Wed, 06 Sep 2023 10:46:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022383; cv=none; d=google.com; s=arc-20160816; b=Xu9NJWFdVZPLW/4bJRawayN4+H570uIwyYF4nF7n0nwmWwQB7nBhxba4e2w/8WakfO KDPE9aEUAQOxe3kPnETn/ZBBe4MMyYyLIk1BjE6K/bRvz6CS5o6ztzj1Bmn17Y0VhwG4 3QLih/Gipq2SoZWQjozQCrefCXSoMRnVi5zlZjsNKIq63Z8XMfhe55xA87xa4t0JgQ5U Mbf+MPb3mtmXKvk6laCeSxauKykhVKFbKmFx2P8W1ZVmQ4j60pPtxL8SEty0AtO3Z0kW 1aLWwqks94BjGybGGNu/J4+q+o6V97mT+IPN1glDCirSb6NoGWI888qcMh5sBqf1Yc++ QWcQ== 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=HT9aLzQEmgmkQWgQnYu+r65NUl82r9jkFjIhCOaw3o4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=xW3L2nzoOHHwt94ocOgv9w9fgDgWU3xOTWF+kdwGIX4nKO2QjcAd3+10NwqCpPbmHF Exagj5lX3PjNyOa1woH61qSQumwUdSs6jY7l4neNywOHWgqWUzhggejLrrgWZjSB49iV WOAD3JM5ApDtN0bEp1d6Y71inBICrXxkhskHw7b/ksKBb8VEhC3hKE3JcUJEzlR3mGmp KwI3WidvIWf8E3z7ucG2wCirWnNehsxZT+2wRbwdwSCy8fFv8lIai6KQWW8tp/iA6pC+ rVi6PQRnkWDKp/6jHOsqFcTHbrxYgAumB5++SlyYwD7wg+mc/En0V4EbmZvj4uBRSoiI da7Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=dcEAwUN4; 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 i16-20020a1709064ed000b009930253bc69si9654522ejv.1011.2023.09.06.10.46.09; Wed, 06 Sep 2023 10:46:23 -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=20221208 header.b=dcEAwUN4; 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 8DA2068C888; Wed, 6 Sep 2023 20:45:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5708A68C873 for ; Wed, 6 Sep 2023 20:44:53 +0300 (EEST) Received: by mail-ot1-f54.google.com with SMTP id 46e09a7af769-6bee392fe9dso99044a34.1 for ; Wed, 06 Sep 2023 10:44:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022291; x=1694627091; 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=6XApgb7W1zkV4M384GlsA/cgw/2zWxqizldmPcjBp7M=; b=dcEAwUN4c6QtPvDsW/WuZzXARFqRkgSG3/iF8G3y0MCz+pYGRU0uBfi111L2TJvksZ BkYwuCcHD98VwyZWbeB/+H36PgctBQeB9gnj61rf0PPXbrCpTDtgbBfgJrb1BMJ/luUg Masb+FFjXEIS8bwDz2vbZHvHv96rgqBE1zVjxvb4xpkvRkDizdcPm8N6VkHdxZF3h4Kc pN+27BkGhlHxC7j0BH/O9+9YW553Qh+WCE1lDf/kZGXi9g6KEJd2Y4hti+YyVwXoyswg v0e38CgkkQIyKFfQR8aLT6V560HrroP5TKYpBGuRtfrbXcIZQ/Z0xmbRKyNxBHD+CafQ +DrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022291; x=1694627091; 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=6XApgb7W1zkV4M384GlsA/cgw/2zWxqizldmPcjBp7M=; b=Z97FeHyV+OSa2Hq8BePT23VrSD4f1OGRHlooVUs5r8BhHPDZpD6fLMY44fudAebo7B jNELY7QgtaQNx0oHlJ/O7Nyqr6vbVHox60ls2UaYsVYCAMZeWjPlcUn9G4uztK4z4RWH Bpego6ZR/n19MUpHZkqEFLOLNFnkdP7KF4N1jIw4txMYD+xlbD3uvOhMkU9lzhUwzMG9 ZfLt0L/rRb350Ha04MqlDAZtHTWR4f4paZvmevDOR8duA7UbwOPitC/xXEj2/yj0zpnY kFl5b6RRi4JlSCSIQKQ6pEICaZAZrlP7Qz5YPl8PcgATyuIABPmz/WvBzEXfZDhCEE6y 9Fmw== X-Gm-Message-State: AOJu0YxyKmufscAhRzNFiS/t6BnM3nnti4X64PeGU6R1tF/vde881Ym4 bhtS4i7XaRPqijZpcXO5+S1fDxb1hUc= X-Received: by 2002:a05:6830:20c8:b0:6bd:d1fc:2f2f with SMTP id z8-20020a05683020c800b006bdd1fc2f2fmr19558460otq.21.1694022291674; Wed, 06 Sep 2023 10:44:51 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:51 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:26 -0300 Message-ID: <20230906174431.45558-7-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/10] 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: BPqXlRLh+U2x 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 4fcfe1164b..28ccb45b26 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->side_data.nb_sd) { + writer_print_section_header(w, SECTION_ID_STREAM_SIDE_DATA_LIST); + for (int i = 0; i < stream->codecpar->side_data.nb_sd; i++) { + print_pkt_side_data(w, stream->codecpar, stream->codecpar->side_data.sd[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 6 17:44:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43604 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87529pzh; Wed, 6 Sep 2023 10:46:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGt+sfRxHvCKapq8ejTcxjStkzWaylnH1W6v8qpz9I9mNitWzTK+VKnQ/uRK3CS9gIb4Zbr X-Received: by 2002:a05:6402:5172:b0:523:2e30:aaee with SMTP id d18-20020a056402517200b005232e30aaeemr2837231ede.32.1694022392906; Wed, 06 Sep 2023 10:46:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022392; cv=none; d=google.com; s=arc-20160816; b=aErPMTgHopaQf8AcgJc66v4Wq3hInll7p3gS7un1lv+vh6AAE8AqhqWn3is0qCAMOh SV4n5dXqASY2ZJby70vzgM2BFvsenJ09umthsG0SlJ1mwcTY+HkWth0PdTF1mSLzTyYg T05gUsE1IGcDVeWDFebtKoHiWmnKcJdi00LUX6CrbY6hP1rbvNwGu8+TMfTbLd3UDRdT 5XArYsA7OJUJCAcRkyh9q/+tcs1GEVkNGSiPSbX6YMEdZg1x6+VTt993BSiXflugCIHZ tl8CRop11LQ2UOuP3vGfeI8YJwrIJ2eBY2ZgOH0CoqKFIb0id1F3OMnWWG1SGthTWAWy eewQ== 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=0k5fYLy+qhGuplQmOqmiJBjfdAbbAmaxvRhUtWYIzHk=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=0R6AD1EtEu1KxvHwYze76HobMhUBVcT94k3XCqGatALC3nYp9X7lQmkrzVdTqyKOSV LtuI3/4D99/Ee8b2ch+INtIJle9RTJMuSxS/8AehJad9zBhhuu6K772dOjsWXr0/lSAR 62Oq2OPtUKiTKgaYJJ4jx+H7IFUfa92ri85UjRQVJgXomNqRzg6gkls0Ho7RtCFYSkvx r6QOfoZfDp/DCC4YCO2wC14a4wb5HZyy2IbNwi2BDynoeAarxmLaCnhj20v4BU2SzHOt 82wyoGl/x65DzWhLDe8TprPculZZxDN1s3ewj3SyArMQtAokELF2jLBUEmakF+Z4EMPe SR/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=hwqQUJaB; 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 s26-20020aa7c55a000000b0052336331f58si9610718edr.518.2023.09.06.10.46.25; Wed, 06 Sep 2023 10:46:32 -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=20221208 header.b=hwqQUJaB; 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 8230D68C895; Wed, 6 Sep 2023 20:45:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8DC968C80C for ; Wed, 6 Sep 2023 20:44:54 +0300 (EEST) Received: by mail-ot1-f46.google.com with SMTP id 46e09a7af769-6bd0425ad4fso103795a34.2 for ; Wed, 06 Sep 2023 10:44:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022293; x=1694627093; 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=VBS98L0pF3UQS+Tj97YCVwdR1ZFwYJZKZMr8TZCW5j0=; b=hwqQUJaB1LSB+oMzxz3h24kBnuDRfFi1E5HmNQ/OC/jZHE8w7MjP0k9sbHmMDVG7cn LFfxxuCrie1PWIOVY7NMaxdZY6RsRm45R81X9yIcZ1ip7v2RafWCWxXyTCDxcolQTl+K fwgZhot3XtIGrxriX0rNcL06NahyqrgYbWFbSYoFBJjOyb5ccDlknPB8G2rLtKEDWwIi Uc4UrzeiSbqyVXHPzcStQQlgzeJDWWyYMRK+3mFmbKqv14eE+t+dvCXDrq6kTL3XcPBC pa/sAZtQshHam+Q+EDrf2EAKb6G91uY9DHwZLo9rWeq0S6oIhVKu6pmNAJVdoOMirWOB ZeTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022293; x=1694627093; 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=VBS98L0pF3UQS+Tj97YCVwdR1ZFwYJZKZMr8TZCW5j0=; b=BwZj6iRg5OqxrDo4Sf4FxO7pJ80E2qs0bm8+Jl2d4lI+WnN34Tc1uoUKD+8gq/lwG9 FrPQ0gjghiXGx6GOp6evr/xUY5sKHv+nfISg/BmTFOlo98HA7c5p77rlgn962ImrBxZh w7i9yYSMYCBJgoxykoi4QSUAf5pjfllrcFwT8r0k5oJCYEpX8q3ZUn6XL0nuT7Sw3Db7 dLvYCjjnDcLSMSdGUxIq29wR0edmn+P/qLrVBwA7d7KvOmnemH1sMvN6KaT3SLBg5Eh4 HE3mc1cdswZ40Tq/o91zsvy6XbDMcJjnge/hbB6WoyFIlS/Zksq1rAvVzDy6xlXPy4/2 7f7w== X-Gm-Message-State: AOJu0Yw8ijgPvQmDVFgOjN13KZuZFFnOHF2pyk5xeMXdF4r/50noUYVf Xc3Z9raM2s/2jh94V5X9zgydyXyTjA4= X-Received: by 2002:a9d:74c6:0:b0:6be:e1cd:7326 with SMTP id a6-20020a9d74c6000000b006bee1cd7326mr18014101otl.4.1694022293095; Wed, 06 Sep 2023 10:44:53 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:27 -0300 Message-ID: <20230906174431.45558-8-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/10] 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: rxgUxtlnyKld Signed-off-by: James Almer --- libavcodec/avcodec.h | 2 +- libavcodec/hevcdec.c | 15 ++++++++++++++- libavcodec/internal.h | 3 +++ libavcodec/utils.c | 10 ++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 1f477209b0..b875076ba5 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1893,7 +1893,7 @@ typedef struct AVCodecContext { /** * Additional data associated with the entire coded stream. * - * - decoding: unused + * - decoding: set by user * - encoding: may be set by libavcodec after avcodec_open2(). */ AVPacketSideData *coded_side_data; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index df40c91ba6..162b832800 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -3337,8 +3337,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); @@ -3641,12 +3648,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; diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 83e0bc3fb2..517d96fb97 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -202,4 +202,7 @@ int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_l */ int64_t ff_guess_coded_bitrate(AVCodecContext *avctx); +AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx, + enum AVPacketSideDataType type); + #endif /* AVCODEC_INTERNAL_H */ diff --git a/libavcodec/utils.c b/libavcodec/utils.c index d54e050848..4fbd591bf1 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1111,3 +1111,13 @@ int64_t ff_guess_coded_bitrate(AVCodecContext *avctx) return bitrate; } + +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; +} From patchwork Wed Sep 6 17:44:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43599 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87113pzh; Wed, 6 Sep 2023 10:45:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHiZtZxGKukRFtTujcmCnRCKfAJRdISgp/cJMRTUXK7PerYP9eFtjHZ6n9PJQFzkCpAqDrM X-Received: by 2002:a17:907:77c8:b0:9a1:9cc5:ea5f with SMTP id kz8-20020a17090777c800b009a19cc5ea5fmr3151594ejc.7.1694022342600; Wed, 06 Sep 2023 10:45:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022342; cv=none; d=google.com; s=arc-20160816; b=M5+aRsNPpcY20xwNOkxDaCvTE8pS5UlBsqhg9BhW5pRQSexqX2qnQRJgCEts7rJ6Cc ubgdkaxTMDafHYVMpJbJjc2loHQIUyeII9flLcbo5d14nZ93FROZyQ3e8KNiGNJrtb7x Oy62f3VUbz8MfRAZEG3kNT7Pii+crFQz9he5VGeghFNcJ3yXjPC98q89E+9Mk0OCWVGo BSwiBxG/pCHzmRYCiWTIO4e6xO67TtIhq/AmU2us/5bkX3I1nBXJi84bDMqAYvM/xBN4 BwFnimG6t3k9aXdA8iefURGDSalMR2HwGT4Y8KDdFF7BYCgsF7BB0W35L0b9uL1z8lmL 5b8A== 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=m6POPPBYSuNGLS5LCEmqyvQL1i0oZ5wuPZw73jA8CBg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=jZN56zt/TJvF1M4pAXNlQGYgPPFQpRM7TXu44MGV2zwY35WwMgwGe7UjFFjBkBm2dg YXuqOUfgkpY5BV5QHMpZ+j2YDAkVCj+6GMv4ENZadEfDapXsCvOXG/lYtaT1szN5QRZS GWhUUbk5iCDfSSre9b6mr+X8RBbSErhJW/grK9mWie3ZFKzQfxBB+X8KWwKQSdIhvlCY xLYAYquZ/XsJ3LUq9SeWz1GTjObmSB0x9JyK9eVZF0OZOJf51dsysNJ/IXywPfWuAp+A z+tpHJF5hN6VvyFyN89mvCe6FGKhuWvCzYqYJl1t6a5Ykw6QQ+lLkenSmjrnsmPh6wyc rixw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=SKljAoJu; 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 k2-20020a17090646c200b0098d5b116e6fsi2713730ejs.856.2023.09.06.10.45.42; Wed, 06 Sep 2023 10:45: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=20221208 header.b=SKljAoJu; 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 54C6C68C824; Wed, 6 Sep 2023 20:44:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9BCFC68C80B for ; Wed, 6 Sep 2023 20:44:56 +0300 (EEST) Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-6c09f1f4610so119514a34.0 for ; Wed, 06 Sep 2023 10:44:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022294; x=1694627094; 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=IgQSFak5DBDQMmO/35YRWaRIOnLx/LPlhGuUFo1YfaQ=; b=SKljAoJu6qThLgRHzTPqPhVS4bX6hCtH9FQBsXKwKZCB4tG/CVyoeygQnK/thXYBq3 3jvdG4J15itisJnz3d10rzBVznP6RJffwRjKs2gfOSPvgWdtlvjM2VWpGbfD6nPcNfdc ZVc4JfZmyyuqTNniWPmecscfnF5MciQ7e0JarugkpZSgcwhdkHm8fhytEmu7Ts9qaqGJ cPmARX3i/lXS6imzlDb7ZKY1KwTUj/npcyQ1zmdZj0ee3Bza2Eiqtzuy1JAWuZbvxIEc IUKmJfdrVuqq487DLTJGJPAAS2ih90OB5zrakGadglastn+r8kn2iGjlj8X9qg4btfZe hyhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022294; x=1694627094; 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=IgQSFak5DBDQMmO/35YRWaRIOnLx/LPlhGuUFo1YfaQ=; b=ZqCn0cxr2LaZI9udd+xyO3m2ZLXoI3JpwTQztl+1Ln937gl+UuSufYqOGCguJH5/Kr UIZGccK4JDHIOaPyLPh5u00ZhhT4Lfw+/ifezGz6fxuv+BBTWsWv9/wR3S/qUWsGcvca aEF1fUKZHFWLQi/+8N/QVlATTxUVhs0QBLlzRwgYAAsBuuT4E4JlSWbm8oYbWyJvUJen Msm9IvYt+F3tiVr5hPaik9PFFkM4faygIQXT+LUH4kqP8rwYX735RmY7wI8sF8BG8ZVT gLd9FGhX89GC1VHXyQROD1e56yPRBUUXMRqGdnGPvrLOIBjXj71CMKQgTVBs7lF3LB1u Pejg== X-Gm-Message-State: AOJu0YwftcL+QEuP6kxuVd/mgImisht9ssuOpIOsk3ZxepHQwP/lxCsb KJaUGiLLU3lMxFYAOdthLmzcpb83GJA= X-Received: by 2002:a05:6830:12c4:b0:6be:fb88:8352 with SMTP id a4-20020a05683012c400b006befb888352mr15544090otq.8.1694022294569; Wed, 06 Sep 2023 10:44:54 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:54 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:28 -0300 Message-ID: <20230906174431.45558-9-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/10] 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: e2xpH3gv4iOJ Signed-off-by: James Almer --- libavcodec/decode.c | 55 +++++++++++++++++++++++++++++++++++++-------- libavcodec/decode.h | 2 +- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 169ee79acd..1a431ba7d7 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1409,25 +1409,31 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) return av_packet_unpack_dictionary(side_metadata, size, frame_md); } -int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, +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(AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt) { static const struct { 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 }, }; @@ -1440,6 +1446,23 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif + for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) { + size_t size; + uint8_t *packet_sd = av_packet_get_side_data(pkt, sd_global_map[i].packet, &size); + if (packet_sd) { + AVFrameSideData *frame_sd; + + av_log(avctx, AV_LOG_DEBUG, + "Overwriting global side data of type \"%s\" in output frame with side data " + "from input packet.\n", av_packet_side_data_name(sd_global_map[i].packet)); + + av_frame_remove_side_data(frame, sd_global_map[i].frame); + 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); @@ -1476,6 +1499,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) diff --git a/libavcodec/decode.h b/libavcodec/decode.h index a52152e4a7..52e5aafc34 100644 --- a/libavcodec/decode.h +++ b/libavcodec/decode.h @@ -67,7 +67,7 @@ int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt); /** * Set various frame properties from the provided packet. */ -int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, +int ff_decode_frame_props_from_pkt(AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt); /** From patchwork Wed Sep 6 17:44:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43601 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87252pzh; Wed, 6 Sep 2023 10:46:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFPW7zzGiAvx0CzUMWfrzcXQP/gODrf6OvRL+NfblNY0tdnL7oFwkRI+5rivCH+aLTOgCw1 X-Received: by 2002:a17:906:c143:b0:9a5:b247:3ab with SMTP id dp3-20020a170906c14300b009a5b24703abmr388489ejc.19.1694022360764; Wed, 06 Sep 2023 10:46:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022360; cv=none; d=google.com; s=arc-20160816; b=DtxD/uZepAM01rsmObAceVGlJfrTQCLO3k6xUJy896BIw9eVtklT9PHBtY3GZB3QE9 LxlKMkCtpIOI7hzNSfK8QFmuhgSP3khC+KawThMvDg2Kr4bqX+fWGq2KiHONMo/JivlG KXtp/A+EugRxFC8BinIcpRyOz6WIkW0xSnSaa+To0Uzp+aCTccoXqLhh/WJdiUNngXJN ecfEM2QsE/fDTT8MG3FR51SP9pjLn7MMYwZd2tXLFij3x9cIifbuXY2GEXTXYXXyBf30 oEXn1VzHPio9KXXaMpmKYV03QAiOh7xxePiFnKud06YCRYZ874E8i06+fv7SKsotpbzk PzSw== 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=famQ6F1Id7ncSRxZkYGqV7H+kkPeH5vYnpXrpL3zCqw=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Mf7lqOOgvsa2xacfYhEOjz5rm94/N8QGlpzrd133nSsikh+9tcHKcPbV1hdfjCNSPp E7oXCNl6OmAaBZ1bTzP7WTbxZKAgOKIcjED/ZjgjsWxwof5orKk5Hz9DOBG71v1mIyq3 qHLdewqZX7AE2Gk9fNSDnQUlD+Z90oKjJyqbsd66yX07glWqSXJhtvOYeFUcnrfZu/mh n0oROYb0SvhPrgEt3IZScZ/2F1o5VDFWdMJB8ow/Kk0psvV4hpL2s86hawr6SoZPksQs 8R+wlmIJF6CCWIttj4lFipxremJbmGwS0ZpTWObuuyVFWBAzrbeNgub57Jb92idXAkPJ z1Tw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=s2MUFOcA; 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 q22-20020a1709060e5600b0099d6d4c11d4si9088551eji.782.2023.09.06.10.46.00; Wed, 06 Sep 2023 10:46:00 -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=20221208 header.b=s2MUFOcA; 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 8436668C872; Wed, 6 Sep 2023 20:45:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 058C568C824 for ; Wed, 6 Sep 2023 20:44:57 +0300 (EEST) Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-6bcb5df95c5so106278a34.1 for ; Wed, 06 Sep 2023 10:44:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022296; x=1694627096; 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=p+V863WpymnN/7mp+XFBYluoCWioLaYK4IatqdGKoHw=; b=s2MUFOcArR+6Cd2urQywMY3XBhYGo56rDDhZuU4CEHyd9/SxkYmEy8LFP9rT1tehgC uxBZJJS8CQvJlgxTLwC+1GdR4NpFDfoq1k0mmYv1J/3CZsqFd+6YrXmUs70W9mHL+7rD ijTIoak7OKXRa9k1l9kpEK2FRP4GKeynAQTOpkYu15vZb+mSE8tfdxiyo3nZUMsX+qYm 2fa4fehd51nEZa0bJudxYLqb/04XNQ3reLvoeu1CpMc7gguJ2utdYyN+HtAnk6DEptzH oiC8FvOfIq0huEaTZknno/wCZ0omGbdf2XCMZLP73b/Z55//Rq8c+nLjPd6Yr3f+kaEQ gpPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022296; x=1694627096; 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=p+V863WpymnN/7mp+XFBYluoCWioLaYK4IatqdGKoHw=; b=dSFUM8Ay+3EZ3HZ8y7YXhNoHOlvTgnTqJ4js0778tI2C9G7GkGqCsrgQbaDoj8uhFp pGHRp0N7Tg2wK3fhTrLKHr1Cd0+j58rKawEGf4zQ7CmoSzUtVt0lolmoPJ4cHQp/ntmV HxIUO7rNkp6CovyeNBdz4ODi4NfjbgPROpJ0luImqgpjYorcKLRypfuEPQqv0Thqpbnt tiXq9wpNyEC7eHnTqXrfY7P6YXNuiyR4aImJwt/irIIJ72+9xvuIGruJUkh589+EFq8V GSkgcLH8QThLCQn7ZGy+LkW1X+coZ9KiAtkcS0qgf7xSwDXkqYJcaP+AHvUl7OVIyHkz LWgQ== X-Gm-Message-State: AOJu0YxCRdPD/ajuGucd6C8nsg2Zyac+LAtuDoBLJKBcpyZufPyFEcaK U5Sz+nWEt4buDlBMdXZYaI5yZZbnUE0= X-Received: by 2002:a9d:7f85:0:b0:6aa:ecb5:f186 with SMTP id t5-20020a9d7f85000000b006aaecb5f186mr19877907otp.7.1694022296080; Wed, 06 Sep 2023 10:44:56 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:55 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:29 -0300 Message-ID: <20230906174431.45558-10-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/10] 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: Z7cx4TjYEjGd 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 6cf6d2e971..450438eaab 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->side_data.nb_sd; i++) { - AVPacketSideData *src_sd = ist->st->codecpar->side_data.sd[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 6 17:44:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 43602 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b17:b0:149:dfde:5c0a with SMTP id l23csp87379pzh; Wed, 6 Sep 2023 10:46:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF1V5jKdC0NRZrzCZuUWu7hDoVz7rAe8yHTJEy5G4ClL6wVA3N3zdgfz2mWWB9noDBPgjmT X-Received: by 2002:a17:906:768d:b0:9a5:7f99:be4c with SMTP id o13-20020a170906768d00b009a57f99be4cmr3274344ejm.33.1694022377755; Wed, 06 Sep 2023 10:46:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694022377; cv=none; d=google.com; s=arc-20160816; b=q5rFaczBdgKxTLj3Se4LZkXKhJSrAv57eV4KJXhyM2t3O3VMMf2eV/fv/umVAi+ieR 9TKZNTH+RoZvXZjzP/CF0JVMZwpOU7kEOc2fkPsgl9RxU9KLR5QUjEHHJbmX6sloLJxJ Wh8SkTKqwHlWbYKqxJFlnYpD/+PY/fFZMVcCZrQ7cXu0OSW0OQyVvaRTfwSAjVt7Prey YGgPZaaeHG7LQHEjQKpQQiUKx2+IqMZMaIbgLTDP4kS0YinrI3IROk67vl+kNmI8Mk+v tk19m4AmYA2IVU/lDtFAVsIKyWjc6ZU8ST+5NXIjoG/5LnUuOQigq+f/ZVCTBtdDLu2M pJ0Q== 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=INN4T3N/Tv36FSlsBmjr+Q6VajSxuuWS1/enqf5mJdA=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Jdw+nTjWeZGL6t4xoGKwWUR7UkIr6c/XurUZlPga4pE5M89DBTCxegypxGUhHeLueF Af7Xn3ovlcNQV3FcY99S1s1E4FExPZVgjCcfEVsp8Cf1N2kXOx7m+bmawvjI+3Kwaz6P WTF5Skyl+8/3XFyAMH8yjN38bd+LQzWLiJ+Q/E2z3e/2hoc7i2gOCDHPsUhu2wct0Sb3 ol7PzewbLlzJuhEpkBGwerZgtSZQJoQgOFBnUWWwF+uQTB6W0B5bwEz67ah3EQhpzAwr Swgjxw0TVY2RIqgBIkGI2trIthaSyCYf+k6onNcGWgnM0s2BP/NAjJaNW1vb14twVTwo OZNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=PLh6cUNS; 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 dk20-20020a170906f0d400b00992bbdebdbesi9318978ejb.785.2023.09.06.10.46.17; Wed, 06 Sep 2023 10:46:17 -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=20221208 header.b=PLh6cUNS; 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 9C55A68C890; Wed, 6 Sep 2023 20:45:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 95B6868C80C for ; Wed, 6 Sep 2023 20:44:59 +0300 (EEST) Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-6bd0a0a6766so98197a34.2 for ; Wed, 06 Sep 2023 10:44:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694022297; x=1694627097; 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=Bp7wnTwKuQsxQnTpVcj3tng9WnnlYybGlOgUWnPDCeI=; b=PLh6cUNSh1JLPAn6XqygkOiIWNqCWTkzFPi79/d32HWd7zUKiPU+XQh2us2LbzJSuf YpbOQTqUBvGGI85pfgJlh+uf1OHiVYq760xAlc7Z7P7+xDBfi3wCngJvvv52yOc9+KPT QtoOgRdex7lj9n4q9PgetArdaIM1nMkFjPlasa0dOM0S/yVJy9zwiyXHbq6dwzbNqUAs s5lrJvnEkCsdNxA15/n/SUSv0hh023gqUhDSiyECNJLxVWftoomLtNqfHHZeKN/FxI7L /LUwa70BlFQ5473cSuntv0Me4+1juGdqzOVbV0apcX7BxpnUF/BDH3i+hTKbYpAnDPTY RAZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694022297; x=1694627097; 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=Bp7wnTwKuQsxQnTpVcj3tng9WnnlYybGlOgUWnPDCeI=; b=VEZXMYPlgKTrR/IyGgGGjFFsB2sqXJE4DLb7HqgQt2XJs2rMeM0DPCBFAoTrrOvDYP SlMKv5fZcv7p4hxytdUk8BVvAnBvFYXKJ6rqv+j6HMzSWXUgYUd0KEHZFXPT0S6Mjb0V jdpF7Rt2f7DLfO5+CPh4DbGNa4fDCukEpyWoKtkSOReUQHGJa8aMTQZU5Wk3wi1oQj08 4r5JM2ucCBRAal45fy2kLbryUBcN5f08RzXemNyQIOoyCtn0PJOZymk0JWBx/EGKP9ZF oy3zh/PgtPd73ykrsvg/2VmTHGUFNv5uyymOKH1C02MxhFiHUO/xHAPShehNezNWRvsI rCJw== X-Gm-Message-State: AOJu0YxmiYv7/hVPKpxiOqiJMidrTrR3sR+ZZP7pMOBKWWhWsZxPn/OB pMx1amH36sKSSOscOkt6rKjnS9S7X1E= X-Received: by 2002:a05:6830:1350:b0:6b9:14bf:7097 with SMTP id r16-20020a056830135000b006b914bf7097mr18680863otq.9.1694022297584; Wed, 06 Sep 2023 10:44:57 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id v5-20020a0568301bc500b006b99f66444bsm6561309ota.71.2023.09.06.10.44.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 10:44:57 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Sep 2023 14:44:30 -0300 Message-ID: <20230906174431.45558-11-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230906174431.45558-1-jamrial@gmail.com> References: <20230906174431.45558-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/10] 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: UqbyAoYUiv9I 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 a0d5811c94..b489e6264a 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -2793,8 +2793,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;