Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH 4/6 v2] avutil/mastering_display_metadata: add a new allocator function that returns a size
Date: Mon, 25 Mar 2024 18:13:25 -0300
Message-ID: <b11368a2-9476-46fc-9774-a847b86b8246@gmail.com> (raw)
In-Reply-To: <GV1P250MB07371526EE42E2C2BD633A088F362@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM>

On 3/25/2024 6:02 PM, Andreas Rheinhardt wrote:
> James Almer:
>> On 3/25/2024 5:40 PM, Andreas Rheinhardt wrote:
>>> James Almer:
>>>> av_mastering_display_metadata_alloc() is not useful in scenarios
>>>> where you need to
>>>> know the runtime size of AVMasteringDisplayMetadata.
>>>>
>>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>>> ---
>>>>    libavutil/mastering_display_metadata.c | 13 +++++++++++++
>>>>    libavutil/mastering_display_metadata.h |  9 +++++++++
>>>>    2 files changed, 22 insertions(+)
>>>>
>>>> diff --git a/libavutil/mastering_display_metadata.c
>>>> b/libavutil/mastering_display_metadata.c
>>>> index 6069347617..ea41f13f9d 100644
>>>> --- a/libavutil/mastering_display_metadata.c
>>>> +++ b/libavutil/mastering_display_metadata.c
>>>> @@ -18,6 +18,7 @@
>>>>     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>>>> 02110-1301 USA
>>>>     */
>>>>    +#include <stddef.h>
>>>>    #include <stdint.h>
>>>>    #include <string.h>
>>>>    @@ -29,6 +30,18 @@ AVMasteringDisplayMetadata
>>>> *av_mastering_display_metadata_alloc(void)
>>>>        return av_mallocz(sizeof(AVMasteringDisplayMetadata));
>>>>    }
>>>>    +AVMasteringDisplayMetadata
>>>> *av_mastering_display_metadata_alloc_size(size_t *size)
>>>> +{
>>>> +    AVMasteringDisplayMetadata *mastering =
>>>> av_mallocz(sizeof(AVMasteringDisplayMetadata));
>>>> +    if (!mastering)
>>>> +        return NULL;
>>>> +
>>>> +    if (size)
>>>> +        *size = sizeof(*mastering);
>>>> +
>>>> +    return mastering;
>>>> +}
>>>> +
>>>>    AVMasteringDisplayMetadata
>>>> *av_mastering_display_metadata_create_side_data(AVFrame *frame)
>>>>    {
>>>>        AVFrameSideData *side_data = av_frame_new_side_data(frame,
>>>> diff --git a/libavutil/mastering_display_metadata.h
>>>> b/libavutil/mastering_display_metadata.h
>>>> index c23b07c3cd..52fcef9e37 100644
>>>> --- a/libavutil/mastering_display_metadata.h
>>>> +++ b/libavutil/mastering_display_metadata.h
>>>> @@ -77,6 +77,15 @@ typedef struct AVMasteringDisplayMetadata {
>>>>     */
>>>>    AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void);
>>>>    +/**
>>>> + * Allocate an AVMasteringDisplayMetadata structure and set its
>>>> fields to
>>>> + * default values. The resulting struct can be freed using av_freep().
>>>> + *
>>>> + * @return An AVMasteringDisplayMetadata filled with default values
>>>> or NULL
>>>> + *         on failure.
>>>> + */
>>>> +AVMasteringDisplayMetadata
>>>> *av_mastering_display_metadata_alloc_size(size_t *size);
>>>> +
>>>>    /**
>>>>     * Allocate a complete AVMasteringDisplayMetadata and add it to the
>>>> frame.
>>>>     *
>>>
>>> Instead of this we should have a generic allocator like
>>> void *av_frame_side_data_allocate(enum AVFrameSideDataType, size_t
>>> *size, size_t elem_count), with the latter being used for the allocators
>>> that allocate arrays (like AVRegionOfInterest); it has to be set to zero
>>> for the others. This will also avoid creating new
>>> av_*_create_side_data() functions.
>>
>> I don't mind a function like that being added to simplify future
>> additions, but this API is orthogonal to the frame side data one. It's
>> also used in packets, for example, and right now lavf is using
>> sizeof(AVMasteringDisplayMetadata) because
>> av_mastering_display_metadata_alloc() is not useful.
>>
> 
> The API proposed by me is supposed to make API like
> av_mastering_display_metadata_alloc_size() redundant and therefore these
> two additions are not orthogonal.

Just because there's a frame side data type for MDM does not make the 
new alloc function redundant. The frame side data API is one API 
wrapping others. You don't see code using the AVHash API when they only 
care about AVMD5. MDM is and should be standalone.
av_mastering_display_metadata_alloc() should be deprecated and removed 
after this, too. That will ensure we still have a single symbol for this.

Regarding the av_*_create_side_data() functions, they were never needed. 
They are a convenient wrapper/shortcut, and your 
av_frame_side_data_allocate() would not really replace them as you'd 
still need to use av_frame_add_side_data() afterwards.
_______________________________________________
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".

  reply	other threads:[~2024-03-25 21:13 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-25 20:05 [FFmpeg-devel] [PATCH 1/6 v2] avutil/frame: add a flag to not create duplicate entries in a side data array James Almer
2024-03-25 20:05 ` [FFmpeg-devel] [PATCH 2/6 v2] avutil/frame: add helper for adding side data w/ AVBufferRef to array James Almer
2024-03-27 19:16   ` [FFmpeg-devel] [PATCH 02/10] " James Almer
2024-03-27 19:22   ` [FFmpeg-devel] [PATCH 2/6 v3] " James Almer
2024-03-25 20:05 ` [FFmpeg-devel] [PATCH 3/6 v2] avutil/frame: add helper to remove side data of a given type from an array James Almer
2024-03-25 20:06 ` [FFmpeg-devel] [PATCH 4/6 v2] avutil/mastering_display_metadata: add a new allocator function that returns a size James Almer
2024-03-25 20:40   ` Andreas Rheinhardt
2024-03-25 21:00     ` James Almer
2024-03-25 21:02       ` Andreas Rheinhardt
2024-03-25 21:13         ` James Almer [this message]
2024-03-27  7:41           ` Anton Khirnov
2024-03-27 12:35             ` James Almer
2024-03-27 12:40               ` Anton Khirnov
2024-03-27 12:45                 ` James Almer
2024-03-25 20:06 ` [FFmpeg-devel] [PATCH 5/6 v2] avcodec/decode: make the AVFrameSideData helper wrappers not depend on frames James Almer
2024-03-25 20:06 ` [FFmpeg-devel] [PATCH 6/6 v2] avcodec/hevcdec: export global side data in AVCodecContext James Almer
2024-03-27  8:05 ` [FFmpeg-devel] [PATCH 1/6 v2] avutil/frame: add a flag to not create duplicate entries in a side data array Anton Khirnov
2024-03-27 11:49   ` James Almer
2024-03-27 11:55     ` James Almer
2024-03-27 12:25     ` Anton Khirnov
2024-03-27 19:10   ` [FFmpeg-devel] [PATCH 1/6 v3] avutil/frame: add a flag to allow overwritting existing entries James Almer
2024-03-28  3:25     ` Michael Niedermayer
2024-03-28  3:27       ` James Almer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b11368a2-9476-46fc-9774-a847b86b8246@gmail.com \
    --to=jamrial@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git