Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH 16/24] ffmpeg: access output file chapters through a wrapper
Date: Fri, 17 Dec 2021 00:08:07 +0100
Message-ID: <AM7PR03MB6660F92ADD851381AB29377B8F779@AM7PR03MB6660.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <20211213152042.5900-16-anton@khirnov.net>

Anton Khirnov:
> Avoid accessing the muxer context directly, as this will become
> forbidden in future commits.
> ---
>  fftools/ffmpeg.c     | 15 +++++++++------
>  fftools/ffmpeg.h     |  2 ++
>  fftools/ffmpeg_mux.c |  7 +++++++
>  3 files changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
> index 902f190191..d69e4119ef 100644
> --- a/fftools/ffmpeg.c
> +++ b/fftools/ffmpeg.c
> @@ -2909,12 +2909,15 @@ static void parse_forced_key_frames(char *kf, OutputStream *ost,
>              *next++ = 0;
>  
>          if (!memcmp(p, "chapters", 8)) {
> -
> -            AVFormatContext *avf = output_files[ost->file_index]->ctx;
> +            OutputFile *of = output_files[ost->file_index];
> +            AVChapter * const *ch;
> +            unsigned int    nb_ch;
>              int j;
>  
> -            if (avf->nb_chapters > INT_MAX - size ||
> -                !(pts = av_realloc_f(pts, size += avf->nb_chapters - 1,
> +            ch = of_get_chapters(of, &nb_ch);
> +
> +            if (nb_ch > INT_MAX - size ||
> +                !(pts = av_realloc_f(pts, size += nb_ch - 1,
>                                       sizeof(*pts)))) {
>                  av_log(NULL, AV_LOG_FATAL,
>                         "Could not allocate forced key frames array.\n");
> @@ -2923,8 +2926,8 @@ static void parse_forced_key_frames(char *kf, OutputStream *ost,
>              t = p[8] ? parse_time_or_die("force_key_frames", p + 8, 1) : 0;
>              t = av_rescale_q(t, AV_TIME_BASE_Q, avctx->time_base);
>  
> -            for (j = 0; j < avf->nb_chapters; j++) {
> -                AVChapter *c = avf->chapters[j];
> +            for (j = 0; j < nb_ch; j++) {
> +                const AVChapter *c = ch[j];
>                  av_assert1(index < size);
>                  pts[index++] = av_rescale_q(c->start, c->time_base,
>                                              avctx->time_base) + t;
> diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
> index 78c2295c8e..8119282aed 100644
> --- a/fftools/ffmpeg.h
> +++ b/fftools/ffmpeg.h
> @@ -697,5 +697,7 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
>                       int unqueue);
>  int of_finished(OutputFile *of);
>  int64_t of_bytes_written(OutputFile *of);
> +AVChapter * const *
> +of_get_chapters(OutputFile *of, unsigned int *nb_chapters);
>  
>  #endif /* FFTOOLS_FFMPEG_H */
> diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
> index 3ee0fc0667..6c9f10db9c 100644
> --- a/fftools/ffmpeg_mux.c
> +++ b/fftools/ffmpeg_mux.c
> @@ -390,3 +390,10 @@ int64_t of_bytes_written(OutputFile *of)
>      return of->mux->final_filesize ? of->mux->final_filesize :
>              pb ? pb->bytes_written : -1;
>  }
> +
> +AVChapter * const *
> +of_get_chapters(OutputFile *of, unsigned int *nb_chapters)
> +{
> +    *nb_chapters = of->ctx->nb_chapters;
> +    return of->ctx->chapters;
> +}
> 

I don't see any benefit of factoring muxing out of OutputFile at all; to
the contrary, it adds another layer of indirection, of allocations for
your opaque structs, of prohibitions and of unnatural getters like this
one here. If your patchset were already applied and someone posted the
reverse of patch #15, I'd LGTM it, because it makes checking for the
bitexact flag local to the place where it is used and thereby avoids
storing these variables in a context for only one usage.
I also think it is more natural to store each OutputStream's queue in
the OutputStream instead of adding a new array to your struct Muxer.

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

  parent reply	other threads:[~2021-12-16 23:08 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20211213152042.5900-1-anton@khirnov.net>
     [not found] ` <20211213152042.5900-23-anton@khirnov.net>
     [not found]   ` <20211214211343.GP2829255@pb2>
2021-12-15 19:36     ` [FFmpeg-devel] [PATCH 23/24] ffmpeg: simplify the use of OutputStream.frame_number Anton Khirnov
2021-12-16 19:43       ` Michael Niedermayer
     [not found] ` <20211213152042.5900-2-anton@khirnov.net>
2021-12-16 11:54   ` [FFmpeg-devel] [PATCH 02/24] ffmpeg: simplify getting output file size Andreas Rheinhardt
     [not found] ` <20211213152042.5900-3-anton@khirnov.net>
2021-12-16 12:38   ` [FFmpeg-devel] [PATCH 03/24] ffmpeg: remove a redundant assignment of interrupt_callback Andreas Rheinhardt
     [not found] ` <20211213152042.5900-17-anton@khirnov.net>
2021-12-16 19:48   ` [FFmpeg-devel] [PATCH 17/24] ffmpeg: do not log to the muxer context Michael Niedermayer
     [not found] ` <20211213152042.5900-6-anton@khirnov.net>
2021-12-16 21:11   ` [FFmpeg-devel] [PATCH 06/24] ffmpeg: move writing the trailer to ffmpeg_mux.c Andreas Rheinhardt
     [not found] ` <20211213152042.5900-9-anton@khirnov.net>
2021-12-16 21:24   ` [FFmpeg-devel] [PATCH 09/24] ffmpeg_mux: add private muxer context Andreas Rheinhardt
     [not found] ` <20211213152042.5900-11-anton@khirnov.net>
2021-12-16 21:40   ` [FFmpeg-devel] [PATCH 11/24] ffmpeg: set want_sdp when initializing the muxer Andreas Rheinhardt
2021-12-17  9:44   ` Anton Khirnov
     [not found] ` <20211213152042.5900-16-anton@khirnov.net>
2021-12-16 23:08   ` Andreas Rheinhardt [this message]
2021-12-17 10:29   ` [FFmpeg-devel] [PATCH 16/24] ffmpeg: access output file chapters through a wrapper Anton Khirnov
     [not found] ` <20211213152042.5900-19-anton@khirnov.net>
2021-12-16 23:08   ` [FFmpeg-devel] [PATCH 19/24] ffmpeg: fix initial muxing queue size Andreas Rheinhardt
     [not found] ` <20211213152042.5900-5-anton@khirnov.net>
2021-12-16 21:20   ` [FFmpeg-devel] [PATCH 05/24] ffmpeg: move some muxing-related code into a separate file Andreas Rheinhardt
2021-12-17  1:55   ` Andreas Rheinhardt
2021-12-17  9:33   ` Anton Khirnov
2021-12-17 11:43     ` Andreas Rheinhardt
     [not found] ` <20211213152042.5900-21-anton@khirnov.net>
2021-12-16 23:42   ` [FFmpeg-devel] [PATCH 21/24] ffmpeg_mux: split of_write_packet() Andreas Rheinhardt
2021-12-17 10:54   ` Anton Khirnov
2021-12-17 11:50     ` Andreas Rheinhardt

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=AM7PR03MB6660F92ADD851381AB29377B8F779@AM7PR03MB6660.eurprd03.prod.outlook.com \
    --to=andreas.rheinhardt@outlook.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