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
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH 09/21] avcodec/mpeg12enc: Reindent after the previous commit
Date: Tue, 25 Jan 2022 18:41:36 +0100
Message-ID: <AM7PR03MB6660553FC6D3689BF041C3388F5F9@AM7PR03MB6660.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <20220125174148.994967-1-andreas.rheinhardt@outlook.com>

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/mpeg12enc.c | 255 ++++++++++++++++++++---------------------
 1 file changed, 127 insertions(+), 128 deletions(-)

diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c
index e30e41027c..bec522d8e7 100644
--- a/libavcodec/mpeg12enc.c
+++ b/libavcodec/mpeg12enc.c
@@ -263,7 +263,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
 {
     MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)s;
     unsigned int vbv_buffer_size, fps, v;
-    int i, constraint_parameter_flag;
+    int constraint_parameter_flag;
     AVRational framerate = ff_mpeg12_frame_rate_tab[s->frame_rate_index];
     uint64_t time_code;
     int64_t best_aspect_error = INT64_MAX;
@@ -276,146 +276,145 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
     if (aspect_ratio.num == 0 || aspect_ratio.den == 0)
         aspect_ratio = (AVRational){1,1};             // pixel aspect 1.1 (VGA)
 
+    /* MPEG-1 header repeated every GOP */
+    put_header(s, SEQ_START_CODE);
 
-        /* MPEG-1 header repeated every GOP */
-        put_header(s, SEQ_START_CODE);
+    put_sbits(&s->pb, 12, s->width  & 0xFFF);
+    put_sbits(&s->pb, 12, s->height & 0xFFF);
 
-        put_sbits(&s->pb, 12, s->width  & 0xFFF);
-        put_sbits(&s->pb, 12, s->height & 0xFFF);
-
-        for (i = 1; i < 15; i++) {
-            int64_t error = aspect_ratio.num * (1LL<<32) / aspect_ratio.den;
-            if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO || i <= 1)
-                error -= (1LL<<32) / ff_mpeg1_aspect[i];
-            else
-                error -= (1LL<<32)*ff_mpeg2_aspect[i].num * s->height / s->width / ff_mpeg2_aspect[i].den;
+    for (int i = 1; i < 15; i++) {
+        int64_t error = aspect_ratio.num * (1LL<<32) / aspect_ratio.den;
+        if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO || i <= 1)
+            error -= (1LL<<32) / ff_mpeg1_aspect[i];
+        else
+            error -= (1LL<<32)*ff_mpeg2_aspect[i].num * s->height / s->width / ff_mpeg2_aspect[i].den;
 
-            error = FFABS(error);
+        error = FFABS(error);
 
-            if (error - 2 <= best_aspect_error) {
-                best_aspect_error    = error;
-                aspect_ratio_info = i;
-            }
+        if (error - 2 <= best_aspect_error) {
+            best_aspect_error = error;
+            aspect_ratio_info = i;
         }
+    }
 
-        put_bits(&s->pb, 4, aspect_ratio_info);
-        put_bits(&s->pb, 4, s->frame_rate_index);
+    put_bits(&s->pb, 4, aspect_ratio_info);
+    put_bits(&s->pb, 4, s->frame_rate_index);
 
-        if (s->avctx->rc_max_rate) {
-            v = (s->avctx->rc_max_rate + 399) / 400;
-            if (v > 0x3ffff && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)
-                v = 0x3ffff;
-        } else {
-            v = 0x3FFFF;
-        }
+    if (s->avctx->rc_max_rate) {
+        v = (s->avctx->rc_max_rate + 399) / 400;
+        if (v > 0x3ffff && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)
+            v = 0x3ffff;
+    } else {
+        v = 0x3FFFF;
+    }
 
-        if (s->avctx->rc_buffer_size)
-            vbv_buffer_size = s->avctx->rc_buffer_size;
-        else
-            /* VBV calculation: Scaled so that a VCD has the proper
-             * VBV size of 40 kilobytes */
-            vbv_buffer_size = ((20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
-        vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
-
-        put_sbits(&s->pb, 18, v);
-        put_bits(&s->pb, 1, 1);         // marker
-        put_sbits(&s->pb, 10, vbv_buffer_size);
-
-        constraint_parameter_flag =
-            s->width  <= 768                                    &&
-            s->height <= 576                                    &&
-            s->mb_width * s->mb_height                 <= 396   &&
-            s->mb_width * s->mb_height * framerate.num <= 396 * 25 * framerate.den &&
-            framerate.num <= framerate.den * 30                 &&
-            s->avctx->me_range                                  &&
-            s->avctx->me_range < 128                            &&
-            vbv_buffer_size <= 20                               &&
-            v <= 1856000 / 400                                  &&
-            s->codec_id == AV_CODEC_ID_MPEG1VIDEO;
-
-        put_bits(&s->pb, 1, constraint_parameter_flag);
-
-        ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
-        ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
-
-        if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
-            AVFrameSideData *side_data;
-            int width = s->width;
-            int height = s->height;
-            int use_seq_disp_ext;
+    if (s->avctx->rc_buffer_size)
+        vbv_buffer_size = s->avctx->rc_buffer_size;
+    else
+        /* VBV calculation: Scaled so that a VCD has the proper
+         * VBV size of 40 kilobytes */
+        vbv_buffer_size = ((20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
+    vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
+
+    put_sbits(&s->pb, 18, v);
+    put_bits(&s->pb, 1, 1);         // marker
+    put_sbits(&s->pb, 10, vbv_buffer_size);
+
+    constraint_parameter_flag =
+        s->width  <= 768                                    &&
+        s->height <= 576                                    &&
+        s->mb_width * s->mb_height                 <= 396   &&
+        s->mb_width * s->mb_height * framerate.num <= 396 * 25 * framerate.den &&
+        framerate.num <= framerate.den * 30                 &&
+        s->avctx->me_range                                  &&
+        s->avctx->me_range < 128                            &&
+        vbv_buffer_size <= 20                               &&
+        v <= 1856000 / 400                                  &&
+        s->codec_id == AV_CODEC_ID_MPEG1VIDEO;
+
+    put_bits(&s->pb, 1, constraint_parameter_flag);
+
+    ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
+    ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
 
-            put_header(s, EXT_START_CODE);
-            put_bits(&s->pb, 4, 1);                 // seq ext
-
-            put_bits(&s->pb, 1, s->avctx->profile == FF_PROFILE_MPEG2_422); // escx 1 for 4:2:2 profile
-
-            put_bits(&s->pb, 3, s->avctx->profile); // profile
-            put_bits(&s->pb, 4, s->avctx->level);   // level
-
-            put_bits(&s->pb, 1, s->progressive_sequence);
-            put_bits(&s->pb, 2, s->chroma_format);
-            put_bits(&s->pb, 2, s->width  >> 12);
-            put_bits(&s->pb, 2, s->height >> 12);
-            put_bits(&s->pb, 12, v >> 18);          // bitrate ext
-            put_bits(&s->pb, 1, 1);                 // marker
-            put_bits(&s->pb, 8, vbv_buffer_size >> 10); // vbv buffer ext
-            put_bits(&s->pb, 1, s->low_delay);
-            put_bits(&s->pb, 2, mpeg12->frame_rate_ext.num-1); // frame_rate_ext_n
-            put_bits(&s->pb, 5, mpeg12->frame_rate_ext.den-1); // frame_rate_ext_d
-
-            side_data = av_frame_get_side_data(s->current_picture_ptr->f, AV_FRAME_DATA_PANSCAN);
-            if (side_data) {
-                AVPanScan *pan_scan = (AVPanScan *)side_data->data;
-                if (pan_scan->width && pan_scan->height) {
-                    width = pan_scan->width >> 4;
-                    height = pan_scan->height >> 4;
-                }
-            }
+    if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
+        const AVFrameSideData *side_data;
+        int width = s->width;
+        int height = s->height;
+        int use_seq_disp_ext;
 
-            use_seq_disp_ext = (width != s->width ||
-                                height != s->height ||
-                                s->avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
-                                s->avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
-                                s->avctx->colorspace != AVCOL_SPC_UNSPECIFIED ||
-                                mpeg12->video_format != VIDEO_FORMAT_UNSPECIFIED);
-
-            if (mpeg12->seq_disp_ext == 1 ||
-                (mpeg12->seq_disp_ext == -1 && use_seq_disp_ext)) {
-                put_header(s, EXT_START_CODE);
-                put_bits(&s->pb, 4, 2);                         // sequence display extension
-                put_bits(&s->pb, 3, mpeg12->video_format);      // video_format
-                put_bits(&s->pb, 1, 1);                         // colour_description
-                put_bits(&s->pb, 8, s->avctx->color_primaries); // colour_primaries
-                put_bits(&s->pb, 8, s->avctx->color_trc);       // transfer_characteristics
-                put_bits(&s->pb, 8, s->avctx->colorspace);      // matrix_coefficients
-                put_bits(&s->pb, 14, width);                    // display_horizontal_size
-                put_bits(&s->pb, 1, 1);                         // marker_bit
-                put_bits(&s->pb, 14, height);                   // display_vertical_size
-                put_bits(&s->pb, 3, 0);                         // remaining 3 bits are zero padding
+        put_header(s, EXT_START_CODE);
+        put_bits(&s->pb, 4, 1);                 // seq ext
+
+        put_bits(&s->pb, 1, s->avctx->profile == FF_PROFILE_MPEG2_422); // escx 1 for 4:2:2 profile
+
+        put_bits(&s->pb, 3, s->avctx->profile); // profile
+        put_bits(&s->pb, 4, s->avctx->level);   // level
+
+        put_bits(&s->pb, 1, s->progressive_sequence);
+        put_bits(&s->pb, 2, s->chroma_format);
+        put_bits(&s->pb, 2, s->width  >> 12);
+        put_bits(&s->pb, 2, s->height >> 12);
+        put_bits(&s->pb, 12, v >> 18);          // bitrate ext
+        put_bits(&s->pb, 1, 1);                 // marker
+        put_bits(&s->pb, 8, vbv_buffer_size >> 10); // vbv buffer ext
+        put_bits(&s->pb, 1, s->low_delay);
+        put_bits(&s->pb, 2, mpeg12->frame_rate_ext.num-1); // frame_rate_ext_n
+        put_bits(&s->pb, 5, mpeg12->frame_rate_ext.den-1); // frame_rate_ext_d
+
+        side_data = av_frame_get_side_data(s->current_picture_ptr->f, AV_FRAME_DATA_PANSCAN);
+        if (side_data) {
+            const AVPanScan *pan_scan = (AVPanScan *)side_data->data;
+            if (pan_scan->width && pan_scan->height) {
+                width  = pan_scan->width  >> 4;
+                height = pan_scan->height >> 4;
             }
         }
 
-        put_header(s, GOP_START_CODE);
-        put_bits(&s->pb, 1, mpeg12->drop_frame_timecode);    // drop frame flag
-        /* time code: we must convert from the real frame rate to a
-         * fake MPEG frame rate in case of low frame rate */
-        fps       = (framerate.num + framerate.den / 2) / framerate.den;
-        time_code = s->current_picture_ptr->f->coded_picture_number +
-                    mpeg12->timecode_frame_start;
-
-        s->gop_picture_number = s->current_picture_ptr->f->coded_picture_number;
-
-        av_assert0(mpeg12->drop_frame_timecode == !!(mpeg12->tc.flags & AV_TIMECODE_FLAG_DROPFRAME));
-        if (mpeg12->drop_frame_timecode)
-            time_code = av_timecode_adjust_ntsc_framenum2(time_code, fps);
-
-        put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24));
-        put_bits(&s->pb, 6, (uint32_t)((time_code / (fps *   60)) % 60));
-        put_bits(&s->pb, 1, 1);
-        put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60));
-        put_bits(&s->pb, 6, (uint32_t)((time_code % fps)));
-        put_bits(&s->pb, 1, !!(s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) || s->intra_only || !s->gop_picture_number);
-        put_bits(&s->pb, 1, 0);                     // broken link
+        use_seq_disp_ext = (width != s->width ||
+                            height != s->height ||
+                            s->avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
+                            s->avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
+                            s->avctx->colorspace != AVCOL_SPC_UNSPECIFIED ||
+                            mpeg12->video_format != VIDEO_FORMAT_UNSPECIFIED);
+
+        if (mpeg12->seq_disp_ext == 1 ||
+            (mpeg12->seq_disp_ext == -1 && use_seq_disp_ext)) {
+            put_header(s, EXT_START_CODE);
+            put_bits(&s->pb, 4, 2);                         // sequence display extension
+            put_bits(&s->pb, 3, mpeg12->video_format);      // video_format
+            put_bits(&s->pb, 1, 1);                         // colour_description
+            put_bits(&s->pb, 8, s->avctx->color_primaries); // colour_primaries
+            put_bits(&s->pb, 8, s->avctx->color_trc);       // transfer_characteristics
+            put_bits(&s->pb, 8, s->avctx->colorspace);      // matrix_coefficients
+            put_bits(&s->pb, 14, width);                    // display_horizontal_size
+            put_bits(&s->pb, 1, 1);                         // marker_bit
+            put_bits(&s->pb, 14, height);                   // display_vertical_size
+            put_bits(&s->pb, 3, 0);                         // remaining 3 bits are zero padding
+        }
+    }
+
+    put_header(s, GOP_START_CODE);
+    put_bits(&s->pb, 1, mpeg12->drop_frame_timecode);    // drop frame flag
+    /* time code: we must convert from the real frame rate to a
+     * fake MPEG frame rate in case of low frame rate */
+    fps       = (framerate.num + framerate.den / 2) / framerate.den;
+    time_code = s->current_picture_ptr->f->coded_picture_number +
+                mpeg12->timecode_frame_start;
+
+    s->gop_picture_number = s->current_picture_ptr->f->coded_picture_number;
+
+    av_assert0(mpeg12->drop_frame_timecode == !!(mpeg12->tc.flags & AV_TIMECODE_FLAG_DROPFRAME));
+    if (mpeg12->drop_frame_timecode)
+        time_code = av_timecode_adjust_ntsc_framenum2(time_code, fps);
+
+    put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24));
+    put_bits(&s->pb, 6, (uint32_t)((time_code / (fps *   60)) % 60));
+    put_bits(&s->pb, 1, 1);
+    put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60));
+    put_bits(&s->pb, 6, (uint32_t)((time_code % fps)));
+    put_bits(&s->pb, 1, !!(s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) || s->intra_only || !s->gop_picture_number);
+    put_bits(&s->pb, 1, 0);                     // broken link
 }
 
 static inline void encode_mb_skip_run(MpegEncContext *s, int run)
-- 
2.32.0

_______________________________________________
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:[~2022-01-25 17:43 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-25 17:36 [FFmpeg-devel] [PATCH 01/21] avcodec/h263: Remove declaration for inexistent function Andreas Rheinhardt
2022-01-25 17:41 ` [FFmpeg-devel] [PATCH 02/21] avcodec/h263: Move decoding-only stuff to a new header h263dec.h Andreas Rheinhardt
     [not found] ` <20220125174148.994967-1-andreas.rheinhardt@outlook.com>
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 03/21] avcodec/mpeg4videoenc: Use stack variable for vo_type Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 04/21] avcodec/mpeg4videodec: Keep vo_type in sync between threads Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 05/21] avcodec/mpeg4?video: Move vo_type to Mpeg4DecContext Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 06/21] avcodec/ituh263enc: Use stack variable for custom_pcf Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 07/21] avcodec/mpeg12enc: Use stack variable for aspect_ratio_info Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 08/21] avcodec/mpeg12enc: Return early if no Sequence Header is written Andreas Rheinhardt
2022-01-25 17:41   ` Andreas Rheinhardt [this message]
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 10/21] avcodec/mpeg4videoenc: Use stack variable for aspect_ratio_info Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 11/21] avcodec/ituh263enc: " Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 12/21] avcodec/ituh263dec: " Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 13/21] avcodec/mpeg4videodec: " Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 14/21] avcodec/mpegvideo: Move aspect_ratio_info to Mpeg1Context Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 15/21] avcodec/mpegvideo: Move timecode_frame_start " Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 16/21] avcodec/mpegvideo_enc: Don't sync gop_picture_number among slice threads Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 17/21] avcodec/mpegvideo: Move gop_picture_number to MPEG12EncContext Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 18/21] avcodec/mpegvideo_enc: Move msmpeg4/wmv1 encoders to msmpeg4enc.c Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 19/21] avcodec/mpegvideo_enc: Move H.263p? encoders to ituh263enc.c Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 20/21] avcodec/speedhqenc: Add SpeedHQEncContext and move slice_start to it Andreas Rheinhardt
2022-01-25 17:41   ` [FFmpeg-devel] [PATCH 21/21] avcodec/mpegvideo: Move frame_rate_index to (Mpeg1|MPEG12Enc)Context Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 22/33] avcodec/mpegvideo_enc: Localize check for invalid number of b-frames Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 23/33] avcodec/mpegvideo_enc: Don't hardcode list of codecs supporting bframes Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 24/33] avcodec/mpegvideo: Fix off-by-one error when decoding >8 bit MPEG-4 Andreas Rheinhardt
2022-01-27 10:13   ` Kieran Kunhya
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 25/33] avcodec/mpegvideo: Fix crash when using lowres with 10bit MPEG-4 Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 26/33] fate/mpeg4: Add test for MPEG-4 Simple Studio Profile Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 27/33] avcodec/mpegvideo: Move handling Simple Studio Profile to mpeg4videodec Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 28/33] avcodec/mpegvideo: Move MPEG-4 Simple Studio Profile fields to mpeg4video Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 29/33] avcodec/mpegpicture: Let ff_mpeg_unref_picture() free picture tables Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 30/33] avcodec/mpegpicture: Add function to completely free MPEG-Picture Andreas Rheinhardt
2022-01-27 14:21   ` James Almer
2022-01-27 14:35     ` Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 31/33] avcodec/h264data: Add missing rational.h inclusion Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 32/33] avcodec/mpegvideo: Use offset instead of pointer for vbv_delay Andreas Rheinhardt
2022-01-26 21:34 ` [FFmpeg-devel] [PATCH 33/33] avcodec/mpeg4videodec: Move use_intra_dc_vlc to stack, fix data race Andreas Rheinhardt
2022-01-28 11:36 ` [FFmpeg-devel] [PATCH 01/21] avcodec/h263: Remove declaration for inexistent function 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=AM7PR03MB6660553FC6D3689BF041C3388F5F9@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