From: Marton Balint <cus@passwd.hu> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v3 7/9] avformat/pcm: factorize and improve determining the default packet size Date: Sat, 16 Mar 2024 09:45:07 +0100 (CET) Message-ID: <3293dd9c-7f87-04ba-8ebf-63909bdda49b@passwd.hu> (raw) In-Reply-To: <20240314231850.8225-1-cus@passwd.hu> On Fri, 15 Mar 2024, Marton Balint wrote: > - Remove the 1024 cap on the number of samples, for high sample rate audio it > was suboptimal, calculate the low neighbour power of two for the number of > samples (audio blocks) instead. > - Make the function work correctly also for non-pcm codecs by using the stream > bitrate to estimate the target packet size. A previous version of this patch > used av_get_audio_frame_duration2() the estimate the desired packet size, but > for some codecs that returns the duration of a single audio frame regardless > of frame_bytes. > - Fallback to 4096/block_align*block_align if bitrate is not available. Will apply the this and the rest of the series. Regards, Marton > > Signed-off-by: Marton Balint <cus@passwd.hu> > --- > libavformat/pcm.c | 41 ++++++++++++++++++++++++++----------- > libavformat/pcm.h | 1 + > tests/ref/seek/lavf-al | 46 +++++++++++++++++++++--------------------- > tests/ref/seek/lavf-ul | 46 +++++++++++++++++++++--------------------- > 4 files changed, 76 insertions(+), 58 deletions(-) > > diff --git a/libavformat/pcm.c b/libavformat/pcm.c > index 9741f73667..9676da3251 100644 > --- a/libavformat/pcm.c > +++ b/libavformat/pcm.c > @@ -24,27 +24,44 @@ > #include "internal.h" > #include "pcm.h" > > -#define RAW_SAMPLES 1024 > +#define PCM_DEMUX_TARGET_FPS 25 > > -int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt) > +int ff_pcm_default_packet_size(AVCodecParameters *par) > { > - AVCodecParameters *par = s->streams[0]->codecpar; > - int ret, size; > + int nb_samples, max_samples, bits_per_sample; > + int64_t bitrate; > > if (par->block_align <= 0) > return AVERROR(EINVAL); > > - /* > - * Compute read size to complete a read every 62ms. > - * Clamp to RAW_SAMPLES if larger. > - */ > - size = FFMAX(par->sample_rate/25, 1); > - if (par->block_align <= INT_MAX / RAW_SAMPLES) { > - size = FFMIN(size, RAW_SAMPLES) * par->block_align; > + max_samples = INT_MAX / par->block_align; > + bits_per_sample = av_get_bits_per_sample(par->codec_id); > + bitrate = par->bit_rate; > + > + /* Don't trust the codecpar bitrate if we can calculate it ourselves */ > + if (bits_per_sample > 0 && par->sample_rate > 0 && par->ch_layout.nb_channels > 0) > + if ((int64_t)par->sample_rate * par->ch_layout.nb_channels < INT64_MAX / bits_per_sample) > + bitrate = bits_per_sample * par->sample_rate * par->ch_layout.nb_channels; > + > + if (bitrate > 0) { > + nb_samples = av_clip64(bitrate / 8 / PCM_DEMUX_TARGET_FPS / par->block_align, 1, max_samples); > + nb_samples = 1 << av_log2(nb_samples); > } else { > - size = par->block_align; > + /* Fallback to a size based method for a non-pcm codec with unknown bitrate */ > + nb_samples = av_clip(4096 / par->block_align, 1, max_samples); > } > > + return par->block_align * nb_samples; > +} > + > +int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt) > +{ > + int ret, size; > + > + size = ff_pcm_default_packet_size(s->streams[0]->codecpar); > + if (size < 0) > + return size; > + > ret = av_get_packet(s->pb, pkt, size); > > pkt->flags &= ~AV_PKT_FLAG_CORRUPT; > diff --git a/libavformat/pcm.h b/libavformat/pcm.h > index 9af36d5a2e..1928497eed 100644 > --- a/libavformat/pcm.h > +++ b/libavformat/pcm.h > @@ -24,6 +24,7 @@ > > #include "avformat.h" > > +int ff_pcm_default_packet_size(AVCodecParameters *par); > int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt); > int ff_pcm_read_seek(AVFormatContext *s, > int stream_index, int64_t timestamp, int flags); > diff --git a/tests/ref/seek/lavf-al b/tests/ref/seek/lavf-al > index 5a4085af4e..ebf7993425 100644 > --- a/tests/ref/seek/lavf-al > +++ b/tests/ref/seek/lavf-al > @@ -1,50 +1,50 @@ > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:0 ts:-1.000000 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:1 ts: 1.894167 > -ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 512 > ret: 0 st: 0 flags:0 ts: 0.788345 > -ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 512 > ret: 0 st: 0 flags:1 ts:-0.317506 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.576668 > ret: 0 st:-1 flags:1 ts: 1.470835 > -ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 512 > ret: 0 st: 0 flags:0 ts: 0.364989 > -ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 512 > ret: 0 st: 0 flags:1 ts:-0.740816 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.153336 > ret: 0 st:-1 flags:1 ts: 1.047503 > -ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 512 > ret: 0 st: 0 flags:0 ts:-0.058322 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.835828 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.730004 > -ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 512 > ret: 0 st:-1 flags:1 ts: 0.624171 > -ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 512 > ret: 0 st: 0 flags:0 ts:-0.481678 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.412517 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.306672 > -ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 512 > ret: 0 st:-1 flags:1 ts: 0.200839 > -ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 512 > ret: 0 st: 0 flags:0 ts:-0.904989 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 1.989161 > ret: 0 st: 0 flags:1 dts: 1.989161 pts: 1.989161 pos: 43861 size: 239 > ret: 0 st:-1 flags:0 ts: 0.883340 > -ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 512 > ret: 0 st:-1 flags:1 ts:-0.222493 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st: 0 flags:0 ts: 2.671655 > ret: 0 st: 0 flags:1 ts: 1.565850 > -ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 512 > ret: 0 st:-1 flags:0 ts: 0.460008 > -ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 512 > ret: 0 st:-1 flags:1 ts:-0.645825 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > diff --git a/tests/ref/seek/lavf-ul b/tests/ref/seek/lavf-ul > index 5a4085af4e..ebf7993425 100644 > --- a/tests/ref/seek/lavf-ul > +++ b/tests/ref/seek/lavf-ul > @@ -1,50 +1,50 @@ > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:0 ts:-1.000000 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:1 ts: 1.894167 > -ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 512 > ret: 0 st: 0 flags:0 ts: 0.788345 > -ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 512 > ret: 0 st: 0 flags:1 ts:-0.317506 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.576668 > ret: 0 st:-1 flags:1 ts: 1.470835 > -ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 512 > ret: 0 st: 0 flags:0 ts: 0.364989 > -ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 512 > ret: 0 st: 0 flags:1 ts:-0.740816 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.153336 > ret: 0 st:-1 flags:1 ts: 1.047503 > -ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 512 > ret: 0 st: 0 flags:0 ts:-0.058322 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.835828 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.730004 > -ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 512 > ret: 0 st:-1 flags:1 ts: 0.624171 > -ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 512 > ret: 0 st: 0 flags:0 ts:-0.481678 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.412517 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.306672 > -ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 512 > ret: 0 st:-1 flags:1 ts: 0.200839 > -ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 512 > ret: 0 st: 0 flags:0 ts:-0.904989 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 1.989161 > ret: 0 st: 0 flags:1 dts: 1.989161 pts: 1.989161 pos: 43861 size: 239 > ret: 0 st:-1 flags:0 ts: 0.883340 > -ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 512 > ret: 0 st:-1 flags:1 ts:-0.222493 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st: 0 flags:0 ts: 2.671655 > ret: 0 st: 0 flags:1 ts: 1.565850 > -ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 512 > ret: 0 st:-1 flags:0 ts: 0.460008 > -ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 512 > ret: 0 st:-1 flags:1 ts:-0.645825 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > -- > 2.35.3 > > _______________________________________________ > 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".
next prev parent reply other threads:[~2024-03-16 8:45 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-03-05 22:51 [FFmpeg-devel] [PATCH 1/9] avcodec/bsf/pcm_rechunk: reorder supported codec list Marton Balint 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 2/9] avcodec/bsf/pcm_rechunk: add some more supported PCM formats Marton Balint 2024-03-06 14:18 ` Stefano Sabatini 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 3/9] avformat/daudenc: force 2000 sample packet size with a bsf Marton Balint 2024-03-06 14:24 ` Stefano Sabatini 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 4/9] fate: make filter-channelsplit test use a fixed frame size Marton Balint 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 5/9] fate: use a fixed wav demux packet size for amix tests Marton Balint 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 6/9] fate: use atrim filter instead of -frames:a 20 for fate-filter-tremolo Marton Balint 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 7/9] avformat/pcm: use a common default packet size function for both wav and pcm Marton Balint 2024-03-06 20:37 ` Michael Niedermayer 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 8/9] avformat/pcm: remove max samples cap when calculating the default packet size Marton Balint 2024-03-05 22:51 ` [FFmpeg-devel] [PATCH 9/9] avformat/pcm: decrease target audio frame per sec to 10 Marton Balint 2024-03-06 13:47 ` [FFmpeg-devel] [PATCH 1/9] avcodec/bsf/pcm_rechunk: reorder supported codec list Stefano Sabatini 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 " Marton Balint 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 2/9] avcodec/bsf/pcm_rechunk: add some more supported PCM formats Marton Balint 2024-03-09 16:21 ` Stefano Sabatini 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 3/9] avformat/daudenc: force 2000 sample packet size with a bsf Marton Balint 2024-03-09 16:23 ` Stefano Sabatini 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 4/9] fate: make filter-channelsplit test use a fixed frame size Marton Balint 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 5/9] fate: use a fixed wav demux packet size for amix tests Marton Balint 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 6/9] fate: use atrim filter instead of -frames:a 20 for fate-filter-tremolo Marton Balint 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 7/9] avformat/pcm: factorize and improve determining the default packet size Marton Balint 2024-03-12 21:31 ` Marton Balint 2024-03-14 23:18 ` [FFmpeg-devel] [PATCH v3 " Marton Balint 2024-03-16 8:45 ` Marton Balint [this message] 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 8/9] avformat/wavdec: use ff_pcm_default_packet_size for " Marton Balint 2024-03-08 0:53 ` [FFmpeg-devel] [PATCH v2 9/9] avformat/pcm: decrease target audio frame per sec to 10 Marton Balint 2024-03-14 8:10 ` Tobias Rapp 2024-03-14 11:12 ` Paul B Mahol 2024-03-14 22:30 ` Marton Balint 2024-03-17 12:44 ` Paul B Mahol 2024-03-14 22:04 ` Marton Balint 2024-03-15 7:54 ` Tobias Rapp 2024-03-09 16:20 ` [FFmpeg-devel] [PATCH v2 1/9] avcodec/bsf/pcm_rechunk: reorder supported codec list Stefano Sabatini
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=3293dd9c-7f87-04ba-8ebf-63909bdda49b@passwd.hu \ --to=cus@passwd.hu \ --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