Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Pierre-Anthony Lemieux <pal@sandflow.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v13 1/2] avformat/imf: Demuxer
Date: Tue, 21 Dec 2021 11:03:43 -0800
Message-ID: <CAF_7JxBGKMApjOL8DWvU=V1M_hZoA36X89RzM0vvjdNpX429pQ@mail.gmail.com> (raw)
In-Reply-To: <MrOX58k--3-2@lynne.ee>

On Mon, Dec 20, 2021 at 12:29 PM Lynne <dev@lynne.ee> wrote:
>
> 20 Dec 2021, 20:48 by pal@sandflow.com:
>
> > On Mon, Dec 20, 2021 at 11:19 AM Lynne <dev@lynne.ee> wrote:
> >
> >>
> >> 20 Dec 2021, 19:57 by pal@sandflow.com:
> >>
> >> > From: Pierre-Anthony Lemieux <pal@palemieux.com>
> >> >
> >> > Signed-off-by: Pierre-Anthony Lemieux <pal@palemieux.com>
> >> > ---
> >> >
> >> > Notes:
> >> >  The IMF demuxer accepts as input an IMF CPL. The assets referenced by the CPL can be
> >> >  contained in multiple deliveries, each defined by an ASSETMAP file:
> >> >
> >> >  ffmpeg -assetmaps <path of ASSETMAP1>,<path of ASSETMAP>,... -i <path of CPL>
> >> >
> >> >  If -assetmaps is not specified, FFMPEG looks for a file called ASSETMAP.xml in the same directory as the CPL.
> >> >
> >> >  EXAMPLE:
> >> >  ffmpeg -i http://ffmpeg-imf-samples-public.s3-website-us-west-1.amazonaws.com/countdown/CPL_f5095caa-f204-4e1c-8a84-7af48c7ae16b.xml out.mp4
> >> >
> >> >  The Interoperable Master Format (IMF) is a file-based media format for the
> >> >  delivery and storage of professional audio-visual masters.
> >> >  An IMF Composition consists of an XML playlist (the Composition Playlist)
> >> >  and a collection of MXF files (the Track Files). The Composition Playlist (CPL)
> >> >  assembles the Track Files onto a timeline, which consists of multiple tracks.
> >> >  The location of the Track Files referenced by the Composition Playlist is stored
> >> >  in one or more XML documents called Asset Maps. More details at https://www.imfug.com/explainer.
> >> >  The IMF standard was first introduced in 2013 and is managed by the SMPTE.
> >> >
> >> >  CHANGE NOTES:
> >> >
> >> >  - added libavformat/tests/imf to FATE
> >> >
> >> >  MAINTAINERS              |   1 +
> >> >  configure                |   3 +-
> >> >  doc/demuxers.texi        |   6 +
> >> >  libavformat/Makefile     |   1 +
> >> >  libavformat/allformats.c |   1 +
> >> >  libavformat/imf.h        | 207 +++++++++
> >> >  libavformat/imf_cpl.c    | 800 +++++++++++++++++++++++++++++++++++
> >> >  libavformat/imfdec.c     | 891 +++++++++++++++++++++++++++++++++++++++
> >> >  8 files changed, 1909 insertions(+), 1 deletion(-)
> >> >  create mode 100644 libavformat/imf.h
> >> >  create mode 100644 libavformat/imf_cpl.c
> >> >  create mode 100644 libavformat/imfdec.c
> >> >
> >>
> >> You've once again gone back and completely ignored all coding style
> >> issues I pointed out.
> >>
> >
> > This was definitely not the intent, and I do not believe that *ignored
> > all coding style* is accurate. For example, most of the suggestions
> > you made at [1] on December 5 have been integrated, including: using
> > ff_<name> for internal functions, using FF<name> for structs, reducing
> > line length, etc.
> >
> > It might be that some of the changes you suggested conflicted with
> > changes that others suggested.
> >
>
> No, I think the issue here is you didn't even bother reading the coding
> style given how out of place your first patch looked. Now you're making
> me waste time pointing out every single thing I can spot you've done wrong.
> Please take it more seriously.

I appreciate your time and understand the investment involved in
onboarding new contributors.

IMHO one approach to reducing the time needed to onboard contributors
and making the process less-error prone is to automate code style
enforcement -- perhaps building on the VIM config at [1]? FWIW, I have
developed the clang-format config file at [2].

[1] https://www.ffmpeg.org/developer.html
[2] https://github.com/sandflow/ffmpeg-imf/blob/e2f3520d8ed947c287b90b59ec691ec58bb1edb4/.clang-format

Happy to collaborate on that going forward.

>
> > +static int parse_imf_asset_map_from_xml_dom(AVFormatContext *s,
> > +    xmlDocPtr doc,
> > +    IMFAssetLocatorMap *asset_map,
> > +    const char *base_url)
>
> We align function arguments to the start of the bracket.

Addressed at v14.

>
> > +    for (uint32_t i = 0; i < cpl->main_audio_track_count; i++)
> > +        if (memcmp(cpl->main_audio_tracks[i].base.id_uuid, uuid, sizeof(uuid)) == 0) {
> > +            vt = &cpl->main_audio_tracks[i];
> > +            break;
> > +        }
>
> We wrap multi-line statements in blocks. We do not wrap single-line
> statements in blocks.

Addressed at v14.

>
> > +    av_log(s,
> > +        AV_LOG_DEBUG,
> > +        "parsed IMF CPL: " FF_IMF_UUID_FORMAT "\n",
> > +        UID_ARG(c->cpl->id_uuid));
>
> In case a function call is too long, we do not put each individual
> argument separately on a new line, we break them up into what
> makes sense.

I suggest keeping them as-is since "what makes sense" is in the eye of
the beholder.

>
> > +        if (!asset->absolute_uri) {
> > +            return AVERROR(ENOMEM);
> > +        }
>
> Wrapped single-line statement.

Addressed at v14.

>
> > +void ff_imf_cpl_free(FFIMFCPL *cpl)
> > +{
> > +    if (!cpl)
> > +        return;
> > +    xmlFree(cpl->content_title_utf8);
> > +    imf_marker_virtual_track_free(cpl->main_markers_track);
> > +    if (cpl->main_markers_track)
> > +        av_freep(&cpl->main_markers_track);
> > +    imf_trackfile_virtual_track_free(cpl->main_image_2d_track);
> > +    if (cpl->main_image_2d_track)
> > +        av_freep(&cpl->main_image_2d_track);
> > +    for (uint32_t i = 0; i < cpl->main_audio_track_count; i++)
> > +        imf_trackfile_virtual_track_free(&cpl->main_audio_tracks[i]);
> > +    if (cpl->main_audio_tracks)
> > +        av_freep(&cpl->main_audio_tracks);
> > +    av_freep(&cpl);
> > +}
>
> Ever heard of newlines? I've seen them in other parts of your code,
> but not here.

Addressed at v14. I have gone through the patch and added line breaks
to reduce code density.

>
> > +static const AVOption imf_options[] = {
> > +    {
> > +        .name        = "assetmaps",
> > +        .help        = "Comma-separated paths to ASSETMAP files."
> >+                       "If not specified, the `ASSETMAP.xml` file in the same directory as the CPL is used.",
> > +        .offset      = offsetof(IMFContext, asset_map_paths),
> > +        .type        = AV_OPT_TYPE_STRING,
> > +        .default_val = {.str = NULL},
> > +        .flags       = AV_OPT_FLAG_DECODING_PARAM,
> > +    },
> > +    {NULL},
> > +};
>
> Take a look at how other code does options.

The use of initializers was suggested by another reviewer [3].

[3] http://ffmpeg.org/pipermail/ffmpeg-devel/2021-December/289025.html

>
> > +        if (av_cmp_q(av_add_q(track->current_timestamp, edit_unit_duration),
> > +                track->duration)
> > +            > 0)
> > +            return AVERROR_EOF;
>
> That's a very weird indentation.

Addressed at v14.

I have confirmed that the alignment matches the VIM config at [4].

[4] https://www.ffmpeg.org/developer.html

> _______________________________________________
> 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".

      reply	other threads:[~2021-12-21 19:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-20 18:57 pal
2021-12-20 18:57 ` [FFmpeg-devel] [PATCH v13 2/2] avformat/imf: Tests pal
2021-12-20 19:19 ` [FFmpeg-devel] [PATCH v13 1/2] avformat/imf: Demuxer Lynne
2021-12-20 19:48   ` Pierre-Anthony Lemieux
2021-12-20 20:28     ` Lynne
2021-12-21 19:03       ` Pierre-Anthony Lemieux [this message]

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='CAF_7JxBGKMApjOL8DWvU=V1M_hZoA36X89RzM0vvjdNpX429pQ@mail.gmail.com' \
    --to=pal@sandflow.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