From patchwork Fri Sep 27 18:38:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51910 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d8ca:0:b0:48e:c0f8:d0de with SMTP id dy10csp950913vqb; Sat, 28 Sep 2024 05:16:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUediOJ81qPpE+I8LemUt+H8zMQFYsFeeq6z3USMlSx/ILa+NbVMmJfxc0zHCMMUkhStCMcxCKgbjIy7vKksbjP@gmail.com X-Google-Smtp-Source: AGHT+IF4mYByBaV9Biq0Vs2dks/R7zbm+0VLZAUqdEwvWNPa1xJzb/jXfhzxG7RRpWg4LdFchlsC X-Received: by 2002:a17:906:c113:b0:a8d:67d5:5e16 with SMTP id a640c23a62f3a-a93c4c25303mr646550466b.57.1727525774594; Sat, 28 Sep 2024 05:16:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727525774; cv=none; d=google.com; s=arc-20240605; b=Fkg+urC2Nm4O8cUMa7GOygatQIDkUpCvxJ+evHE3fzx7XZPWB8g2S/n24SIgMuURRC yqeR8WWMC8+koQ8YC/m+gQCInNJhfAvQlAity1Yi979sH2kHWFbPEkoAjnJhSG1NONH2 MH58mTuemJfQfNntg699Irq3MT31wSv7TZJD6GiF7UlwxHi2yB3uEcJeuVRQD7Wp4dzg kZGZst9gzY2Z3N40PD0k7kMyxnSAsBsM3uSGvO9M5V8ixfZSBCilc7KFrVNLyt7rsyZx wZt1ErNvPJEtwtGuVsOWTtHoBwxUx9ESYMPb1qibqbU/HblUd9XWJ3eHJs0o6hHEL9m5 5QvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:message-id:date:to:from :dkim-signature:delivered-to; bh=tNj37udP3GMbv/vQAi/pOqX1ruf20drF2UZtLsbjwUs=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=OB8ltzceP9ndD3e8QK3FV2jV/PbgCfdiB0mKaoZXbQS52evu6LBST1Rw5KZNu5gq64 2BYmXnsuSFGtHd2DtyfUH2vYP8co9ickQu5RrXpdjSx5HAW2Fzp0QjM6R8l3WD+c4/tL OjnQt0VDtluIeA/mJgs2WNyey+4zpf1i8cvmxCeLYHd8BN5ZOhsLThBtE73uq6voWzro a99zhCHiWFPDYzQiGMbpWn/VcvXaE4mg4bS59aULB6v698pPDEiMTeKZOqkxwBueusyp qCJyk4iR0z0WP/YCFsWh8eYCXNA6wR64pg7Xph8nBSg0lVoHyl7BUhpzLsQjIPtvUUFH tLgw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=HHs+XOG1; 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; dara=fail header.i=@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 4fb4d7f45d1cf-5c882467292si3010941a12.166.2024.09.28.05.16.14; Sat, 28 Sep 2024 05:16:14 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=HHs+XOG1; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B4BBC68DDF7; Fri, 27 Sep 2024 21:37:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2289868DDEE for ; Fri, 27 Sep 2024 21:37:41 +0300 (EEST) Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-7db238d07b3so1990508a12.2 for ; Fri, 27 Sep 2024 11:37:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727462258; x=1728067058; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=HuN9Qm1pdBa5H0o8+bLSCG2gCWbtppSjdKRLiPJPGf8=; b=HHs+XOG1zwnwBTgG5G/Umu8AZr3DncaQtRAh4FlfFJocPuC5bJ5vekI0a20F1TYSpL D/R/qWz9r9Y5AvkHRx9KDyut6PH9ohW7dKn7LogE2PyVLMAd/IedHb2laGkD+II9/ZnM x8B3C7p+PWDsvojFGguOMiqOCfjjeRuJbwY83iarSBpj0Wk5j3Zw61mI/5mrpMxVhtEY 9sM3pJ5tXREH0PoOubVlywpCLOyKY793i/4Q+kZJtEGroKYCIrPq6QIwsKNfRUo4qrRf wMjNOeEwpG6DcMMXf6NrybBPOngGLiNPVS2+GxvGPPkpLBij6+JWWr4gnDM2uRp1WN3h WegA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727462258; x=1728067058; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HuN9Qm1pdBa5H0o8+bLSCG2gCWbtppSjdKRLiPJPGf8=; b=odZWu8ERLMpeoWOekYIT3ijc9klpGma1rJ+tE6KoyI5saWqKMTO6ZnAzWNULrlJA6v RWq2o7VStOfHhzrrZzxaOIf0ADIYWCGPL6sI9Yxsf0dWkal5IwQ4fM1YERYKukVniLXL 2vk83ibnl/jFrI56yp0obIOTmlt58V+rDgluBpZdkhmQDa1NpXos59MLflzyijm6wkCn GWHv+p7swxFS+pnRWWxXdhPXn7bmxJwLGY8PzZq8K6wIPKNQHT+OL/H62QvnBsvYZfLQ iTDTqfAmX3FarJ7lDBb6GK6BiGorBeOTT5Ci6B64zIIGxJVn3Z7JeF8i6XAwQo901JEo COOw== X-Gm-Message-State: AOJu0YzNBY7LMAphje+V0rLEkODpsxd7afOPyKS9Ajr01mWYo06fQcda NjaWTPgQLh4m90Y9jO7F3MFHcPcMqu7SsVP8qgtBnQKyrcPoFj9uLObiyA== X-Received: by 2002:a05:6a20:d80d:b0:1cf:337e:9920 with SMTP id adf61e73a8af0-1d4fa7b55d8mr6725978637.47.1727462258327; Fri, 27 Sep 2024 11:37:38 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71b264b7dd6sm1925639b3a.46.2024.09.27.11.37.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Sep 2024 11:37:37 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Sep 2024 15:38:08 -0300 Message-ID: <20240927183809.4150-1-jamrial@gmail.com> X-Mailer: git-send-email 2.46.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/avformat: add side data to AVStreamGroupTileGrid 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: ugvTqmE11eO0 Will be used to export certain information present in HEIF samples, like rotation metadata, ICC profiles, and potentially others. Signed-off-by: James Almer --- libavformat/avformat.h | 13 +++++++++++++ libavformat/dump.c | 30 ++++++++++++++++++------------ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 56c1c80289..2e5f2dc795 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1082,6 +1082,19 @@ typedef struct AVStreamGroupTileGrid { * final image before presentation. */ int height; + + /** + * Additional data associated with the grid. + * + * Should be allocated with av_packet_side_data_new() or + * av_packet_side_data_add(), and will be freed by avformat_free_context(). + */ + AVPacketSideData *coded_side_data; + + /** + * Amount of entries in @ref coded_side_data. + */ + int nb_coded_side_data; } AVStreamGroupTileGrid; /** diff --git a/libavformat/dump.c b/libavformat/dump.c index 0440a7a405..18d8276231 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -377,7 +377,7 @@ static void dump_ambient_viewing_environment_metadata(void *ctx, const AVPacketS av_q2d(ambient->ambient_light_y)); } -static void dump_spherical(void *ctx, const AVCodecParameters *par, +static void dump_spherical(void *ctx, int w, int h, const AVPacketSideData *sd, int log_level) { const AVSphericalMapping *spherical = (const AVSphericalMapping *)sd->data; @@ -399,7 +399,7 @@ static void dump_spherical(void *ctx, const AVCodecParameters *par, if (spherical->projection == AV_SPHERICAL_EQUIRECTANGULAR_TILE) { size_t l, t, r, b; - av_spherical_tile_bounds(spherical, par->width, par->height, + av_spherical_tile_bounds(spherical, w, h, &l, &t, &r, &b); av_log(ctx, log_level, "[%"SIZE_SPECIFIER", %"SIZE_SPECIFIER", %"SIZE_SPECIFIER", %"SIZE_SPECIFIER"] ", @@ -427,7 +427,7 @@ static void dump_dovi_conf(void *ctx, const AVPacketSideData *sd, dovi->dv_md_compression); } -static void dump_s12m_timecode(void *ctx, const AVStream *st, const AVPacketSideData *sd, +static void dump_s12m_timecode(void *ctx, AVRational avg_frame_rate, const AVPacketSideData *sd, int log_level) { const uint32_t *tc = (const uint32_t *)sd->data; @@ -439,7 +439,7 @@ static void dump_s12m_timecode(void *ctx, const AVStream *st, const AVPacketSide for (int j = 1; j <= tc[0]; j++) { char tcbuf[AV_TIMECODE_STR_SIZE]; - av_timecode_make_smpte_tc_string2(tcbuf, st->avg_frame_rate, tc[j], 0, 0); + av_timecode_make_smpte_tc_string2(tcbuf, avg_frame_rate, tc[j], 0, 0); av_log(ctx, log_level, "timecode - %s%s", tcbuf, j != tc[0] ? ", " : ""); } } @@ -461,16 +461,17 @@ static void dump_cropping(void *ctx, const AVPacketSideData *sd) av_log(ctx, AV_LOG_INFO, "%d/%d/%d/%d", left, right, top, bottom); } -static void dump_sidedata(void *ctx, const AVStream *st, const char *indent, - int log_level) +static void dump_sidedata(void *ctx, const AVPacketSideData *side_data, int nb_side_data, + int w, int h, AVRational avg_frame_rate, + const char *indent, int log_level) { int i; - if (st->codecpar->nb_coded_side_data) + if (nb_side_data) av_log(ctx, log_level, "%sSide data:\n", indent); - for (i = 0; i < st->codecpar->nb_coded_side_data; i++) { - const AVPacketSideData *sd = &st->codecpar->coded_side_data[i]; + for (i = 0; i < nb_side_data; i++) { + const AVPacketSideData *sd = &side_data[i]; av_log(ctx, log_level, "%s ", indent); switch (sd->type) { @@ -516,7 +517,7 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent, break; case AV_PKT_DATA_SPHERICAL: av_log(ctx, log_level, "spherical: "); - dump_spherical(ctx, st->codecpar, sd, log_level); + dump_spherical(ctx, w, h, sd, log_level); break; case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: dump_content_light_metadata(ctx, sd, log_level); @@ -530,7 +531,7 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent, break; case AV_PKT_DATA_S12M_TIMECODE: av_log(ctx, log_level, "SMPTE ST 12-1:2014: "); - dump_s12m_timecode(ctx, st, sd, log_level); + dump_s12m_timecode(ctx, avg_frame_rate, sd, log_level); break; case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT: dump_ambient_viewing_environment_metadata(ctx, sd); @@ -678,7 +679,9 @@ static void dump_stream_format(const AVFormatContext *ic, int i, dump_metadata(NULL, st->metadata, extra_indent, log_level); - dump_sidedata(NULL, st, extra_indent, log_level); + dump_sidedata(NULL, st->codecpar->coded_side_data, st->codecpar->nb_coded_side_data, + st->codecpar->width, st->codecpar->height, st->avg_frame_rate, + extra_indent, log_level); } static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed, @@ -782,6 +785,9 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed, dump_disposition(stg->disposition, AV_LOG_INFO); av_log(NULL, AV_LOG_INFO, "\n"); dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO); + dump_sidedata(NULL, tile_grid->coded_side_data, tile_grid->nb_coded_side_data, + tile_grid->width, tile_grid->height, (AVRational) {0,1}, + " ", AV_LOG_INFO); for (int i = 0; i < tile_grid->nb_tiles; i++) { const AVStream *st = stg->streams[tile_grid->offsets[i].idx]; dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);