From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id BB9624E230 for ; Sat, 7 Jun 2025 21:36:33 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 3759668BF01; Sun, 8 Jun 2025 00:35:37 +0300 (EEST) Received: from btbn.de (btbn.de [144.76.60.213]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 98C0D68BE1C for ; Sun, 8 Jun 2025 00:35:26 +0300 (EEST) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id 0C66F28190F3A; Sat, 07 Jun 2025 23:35:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1749332122; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sZaZ/3ShxP7Ugsnd2fr8E706SeDR+GzCBqPQCwn5I60=; b=jGNEBnbRPPsOnvGRidyIL2uJBdgYvxhEJeQOoZyhvRBy3LcHvGyppMSOxEFLs2UpDpWODS 1enhGNPOyKJzNlCId+bMVARedCOUkm/Bf6DPU1lv6Iv+x5X96Y6bOAxYNDUzsrGKmAnfp7 zS8r1gL26Y/ldA+bIZCBJyJgThTRpITc4RSC+vGutFQZCkgS0yzuHg2fO68eXxYbxnCRla XnQ9DzdmVIJIxuNjQct6JcWFFbY1lp1uL4++EqzLH7mop3E7JyHilP0vtqYeZ5QdTZn68d PzlUc+DscFbxBEV3zPK2bE7/WusAj+3/svXsJGQriXWS+dVecOOrwyFSUeZrKA== From: Timo Rothenpieler To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Jun 2025 23:34:57 +0200 Message-ID: <20250607213509.16424-6-timo@rothenpieler.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250607213509.16424-1-timo@rothenpieler.org> References: <20250607213509.16424-1-timo@rothenpieler.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avcodec/hevc/hevcdec: export 3D Reference Displays 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 Cc: James Almer Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: James Almer Signed-off-by: James Almer --- libavcodec/hevc/hevcdec.c | 52 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c index 636df5a4e9..797c9c76c9 100644 --- a/libavcodec/hevc/hevcdec.c +++ b/libavcodec/hevc/hevcdec.c @@ -36,6 +36,7 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/stereo3d.h" +#include "libavutil/tdrdi.h" #include "libavutil/timecode.h" #include "aom_film_grain.h" @@ -4099,6 +4100,55 @@ static int hevc_update_thread_context(AVCodecContext *dst, } #endif +static int hevc_sei_to_context(AVCodecContext *avctx, HEVCSEI *sei) +{ + int ret; + + if (sei->tdrdi.num_ref_displays) { + AVBufferRef *buf; + size_t size; + AV3DReferenceDisplaysInfo *tdrdi = av_tdrdi_alloc(sei->tdrdi.num_ref_displays, &size); + + if (!tdrdi) + return AVERROR(ENOMEM); + + buf = av_buffer_create((uint8_t *)tdrdi, size, NULL, NULL, 0); + if (!buf) { + av_free(tdrdi); + return AVERROR(ENOMEM); + } + + tdrdi->prec_ref_display_width = sei->tdrdi.prec_ref_display_width; + tdrdi->ref_viewing_distance_flag = sei->tdrdi.ref_viewing_distance_flag; + tdrdi->prec_ref_viewing_dist = sei->tdrdi.prec_ref_viewing_dist; + tdrdi->num_ref_displays = sei->tdrdi.num_ref_displays; + for (int i = 0; i < sei->tdrdi.num_ref_displays; i++) { + AV3DReferenceDisplay *display = av_tdrdi_get_display(tdrdi, i); + + display->left_view_id = sei->tdrdi.left_view_id[i]; + display->right_view_id = sei->tdrdi.right_view_id[i]; + display->exponent_ref_display_width = sei->tdrdi.exponent_ref_display_width[i]; + display->mantissa_ref_display_width = sei->tdrdi.mantissa_ref_display_width[i]; + display->exponent_ref_viewing_distance = sei->tdrdi.exponent_ref_viewing_distance[i]; + display->mantissa_ref_viewing_distance = sei->tdrdi.mantissa_ref_viewing_distance[i]; + display->additional_shift_present_flag = sei->tdrdi.additional_shift_present_flag[i]; + display->num_sample_shift = sei->tdrdi.num_sample_shift[i]; + } + ret = ff_frame_new_side_data_from_buf_ext(avctx, &avctx->decoded_side_data, &avctx->nb_decoded_side_data, + AV_FRAME_DATA_3D_REFERENCE_DISPLAYS, &buf); + if (ret < 0) { + av_buffer_unref(&buf); + return ret; + } + } + + ret = ff_h2645_sei_to_context(avctx, &sei->common); + if (ret < 0) + return ret; + + return 0; +} + static av_cold int hevc_decode_init(AVCodecContext *avctx) { HEVCContext *s = avctx->priv_data; @@ -4122,7 +4172,7 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx) return ret; } - ret = ff_h2645_sei_to_context(avctx, &s->sei.common); + ret = hevc_sei_to_context(avctx, &s->sei); if (ret < 0) return ret; } -- 2.49.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".