From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 560AF47562 for ; Mon, 11 Sep 2023 18:41:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 711D468C960; Mon, 11 Sep 2023 21:41:36 +0300 (EEST) 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 8D69168C94E for ; Mon, 11 Sep 2023 21:41:29 +0300 (EEST) Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-6bf04263dc8so3546431a34.3 for ; Mon, 11 Sep 2023 11:41:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694457687; x=1695062487; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=7PeY7Yk3ihrmBTYl+rBUByvwunGetRtxLYqOa3+2yXw=; b=XDURU3rQsKi7gfyT1pwWFiD9HxhYVxz0y37bKhxfL8xwHccSvKzG3ealsLAZCNarDU +3paNvV0R3AweQ6taI8y1eo7EZRnxkX4X9n0lrsIg9snPy/lNSoN8sWSwcG5m1+gNq3x zK9dxeH0NVVm5AWvgFbwNFnmgjkyOGDkJ2C2yAiq/UnVqJoO12Mg3qSAJdO+pb2enW6a CULJgWhe4hChyFD2DE7eI3USHVd88atz0DJ87WTt8SMI4TkyZQkMl+rVlI6WkabdSUkE ixtyL8sozzLUpeTcoGVqArmR88+2xpFhAvGMCrwQEH2mJnMvM89ujmvzKgaizVksXl5i 6fcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694457687; x=1695062487; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7PeY7Yk3ihrmBTYl+rBUByvwunGetRtxLYqOa3+2yXw=; b=DBOr4OoSXGoQV1aa8IxA0V5aq2rFHDoNRr7A5xMsL4GlpBX8RvtFNXsKeuG5vbJ3B6 ppTEmX4ayNUiz8ukb5FnUpVKIalKWK0Wyc6aq/7SqOBFmw54vjVTMekheCMuvLHMSYby Z+bnITp/Ll+Odhl/W4ddXyOOI2vrTSyx1XbN2g8rf390cxoSCysNbjDcU2a64A4zlKys XCihlv+MUF2CazFeyfBGSsZb8JXTdDCQM8NORgUT4rnamOOrfTQ5HXJ/QoObhRZQCRvO kcjHWlgYA19A0C3uxT+XHxuHP5b7+Y0UeJUVfz4Ymz6os84f9YubUC2gidhSZQFVXfzH VF9w== X-Gm-Message-State: AOJu0YzQC8ODqTuZG1GLFjK3n/n/a4W3tAIvY4cLNDxVZxjKzkwsDp6H O27iT8H8DaWtxENICZBw+0hadt2cw18= X-Google-Smtp-Source: AGHT+IFYOy2Me7Ed5jNqMfaPa8nMnP4eomQhVCIQDS3u9EzAjFaClv4wfSqT0OFb9LGf6VXtINNpZQ== X-Received: by 2002:a9d:6b02:0:b0:6bb:1629:ab44 with SMTP id g2-20020a9d6b02000000b006bb1629ab44mr11431410otp.7.1694457687197; Mon, 11 Sep 2023 11:41:27 -0700 (PDT) Received: from [192.168.0.10] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id j14-20020a9d7d8e000000b006b881a6518esm3349961otn.10.2023.09.11.11.41.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Sep 2023 11:41:26 -0700 (PDT) Message-ID: Date: Mon, 11 Sep 2023 15:41:36 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230906174431.45558-1-jamrial@gmail.com> <20230906174431.45558-9-jamrial@gmail.com> From: James Almer In-Reply-To: Subject: Re: [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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 9/11/2023 3:35 PM, Andreas Rheinhardt wrote: > James Almer: >> 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)); > > Overwriting? Is it guaranteed that the frame has the side data at all? > And if it had, why would you overwrite it at all? After all, if the > decoder added something, isn't this to be preferred to stuff from > AVPacket side data? I guess you're right, it probably shouldn't. I'll remove the av_frame_remove_side_data() call bellow as well as the debug log, so the behavior will remain the same in such scenarios as it's right now (Packet side data will be added to the frame as a second entry for the same type, which is normally never used as the _get() helper wont reach it). > Apart from that: packet_sd should be const. Ok. > >> + >> + 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); >> >> /** > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".