[FFmpeg-devel] [PATCH 04/20] avformat/matroskaenc: Reuse random seed

Steve Lhomme robux4 at ycbcr.xyz
Sun Apr 19 10:03:29 EEST 2020


Wouldn't it be better to set the AVLFG in the MatroskaMuxContext in mkv_init and keep using it when needed ?

Then you can still update UIDs in the location you really need to create them.

> On April 5, 2020 5:59 PM Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
> 
>  
> This commit reuses the random seed generated in mkv_init() (to determine
> the TrackUIDs) for the SegmentUID in order to avoid a potentially
> expensive call to av_get_random_seed().
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavformat/matroskaenc.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
> index d2046193ee..b93c50cb01 100644
> --- a/libavformat/matroskaenc.c
> +++ b/libavformat/matroskaenc.c
> @@ -161,6 +161,8 @@ typedef struct MatroskaMuxContext {
>      int wrote_chapters;
>  
>      int allow_raw_vfw;
> +
> +    uint32_t segment_uid[4];
>  } MatroskaMuxContext;
>  
>  /** 2 bytes * 7 for EBML IDs, 7 1-byte EBML lengths, 6 1-byte uint,
> @@ -1821,15 +1823,7 @@ static int mkv_write_header(AVFormatContext *s)
>              put_ebml_string(pb, MATROSKA_ID_WRITINGAPP, LIBAVFORMAT_IDENT);
>  
>          if (mkv->mode != MODE_WEBM) {
> -            uint32_t segment_uid[4];
> -            AVLFG lfg;
> -
> -            av_lfg_init(&lfg, av_get_random_seed());
> -
> -            for (i = 0; i < 4; i++)
> -                segment_uid[i] = av_lfg_get(&lfg);
> -
> -            put_ebml_binary(pb, MATROSKA_ID_SEGMENTUID, segment_uid, 16);
> +            put_ebml_binary(pb, MATROSKA_ID_SEGMENTUID, mkv->segment_uid, 16);
>          }
>      } else {
>          const char *ident = "Lavf";
> @@ -2661,9 +2655,14 @@ static int mkv_init(struct AVFormatContext *s)
>          return AVERROR(ENOMEM);
>      }
>  
> -    if (!(s->flags & AVFMT_FLAG_BITEXACT))
> +    if (!(s->flags & AVFMT_FLAG_BITEXACT)) {
>          av_lfg_init(&c, av_get_random_seed());
>  
> +        // Calculate the SegmentUID now in order not to waste our random seed.
> +        for (i = 0; i < 4; i++)
> +            mkv->segment_uid[i] = av_lfg_get(&c);
> +    }
> +
>      for (i = 0; i < s->nb_streams; i++) {
>          mkv_track *track = &mkv->tracks[i];
>  
> -- 
> 2.20.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list