Upstream cherry-picks, most recent cherry-picks at end of list:
  831274fba4b14c542458ce5a3d0135b49499299a - lavc/flacdsp.c : Avoid undefined operations in non debug builds

Autorename:
  autorename_* files are renamed copies of various files that would cause
    base name collisions from mac libtool. These files are generated
    by generate_gn.py. https://chromium-review.googlesource.com/#/c/274543/

Current patches:
  Changes to libavformat/flacdec.c crbug.com/686387
    95bde49982a82bc10470c0adab5969ffe635d064  Check avio_read result when reading
                                              flac block header. (upstreamed)

  Changes to libavcodec/flac_parser.c crbug.com/665305
    Started decrementing buffered header count during flac parsing, to prevent
    a clusterfuzz hang.

  .gitignore has a "Chromium stuff" section.

  Changes to configure
    Commented out a section that creates symlink for source_path. Using symlink
    causes windows builds to fail (cl.exe cant find the files).
    Commented out some pkg-config checks for libopus since we use Chromium's
    copy.

    Pinned older mipsel minimum ISA detection logic, including removal of
    add_cflags "-mips64", which conflicts with --extra-cflags=-mips64r6 for
    mips64el. In M56 roll, returned to previous logic here to prevent population
    of CFLAGS etc with various -mips32r* which broke builds.

    Turned off check for stdatomic.h, since it is banned in chromium.

  Changes/additions to compat/atomics/win32/stdatomic.h
    Commented out atomic_compare_exchange_strong, since it doesn't compile and
    isn't used.

  Changes/additions to compat/msvcrt/{snprintf.c,snprintf.h}
  Changes/additions to compat/{strtod.c,strtod.h}
    Commit b5269bfb48c71fe17c02eee00c71b1e9762497db changes these files and
    relevant build rules to fix inconsistent linkage when building with MSVC.
    The rules/files expose overriden symbols as externs and force inject these
    headers when building with the component build.
    strtod.h was added, so it may not appear in diffs that ignore additions.
    f3299330654ac1b40c50b3cbcae619f42eb7d838 added an include to snprintf.c.
    4fe9bb85b83fffe4c3640493ef6655b0992a822c re-adds an "undef strod" and
    new strtod decl to fix Windows compilation issues to strtod.c .

  !!!SECURITY SENSITIVE ISSUE PLEASE VERIFY AFTER EACH FFMPEG ROLL!!!
  Remove UNCHECKED_BITSTREAM_READER defines in libavcodec/
    Remove "#define UNCHECKED_BITSTREAM_READER 1" from all codecs.
    In Chromium, all codecs should use the safe bitstream reader.

  In libavcodec/libopusdec.c libopus_decode_init(), protect against OOB access
    of ff_vorbis_channel_layouts[] with index < 0. TODO: push upstream.

  Changes to libavcodec/utils.c
    Disable deprecation warnings related to FF_API_AVPACKET_OLD_API.
    We cannot just disable FF_API_AVPACKET_OLD_API because upstream does not yet
    compile with it disabled. Therefore, suppress the warnings locally.

    Locally disable deprecation warnings related to
    avcodec_encode_{audio,video}2 until upstream introduces an appropriate
    FF_API_AVsomething_OLD_API gate that we can use in our BUILD.gn, or upstream
    stops using the deprecated methods.

  Revert 'sidx' processing for .mov containers. (libavformat/isom.h and mov.c)
    8b946dec reverts commit 4ab56667594842283dc5ae07f0daba2a2cb4d3af.
    'sidx' box processing is broken for MOV containers. http://crbug.com/568336.
    Reported: http://ffmpeg.org/pipermail/ffmpeg-devel/2015-December/185040.html

    Upstream ffplay as of 134233972e7961d9a41c67d27da505e459d5edfa still
    reproduces this problem.

    That revert removed a local |ret| needed by later dd34e89f, so M56 merge
    commit e4decbe7 includes a downstream declaration of |ret| in
    mov_seek_stream in mov.c.

  Changes to libavformat/matroskadec.c
    Add CONFIG_LZO and CONFIG_SIPR_DECODER (and other CONFIG_*) checks to remove
    code that may be a security risk. Discuss with cevans@ before removing.

    Remove extra const from static EbmlSyntax arrays. This fixes windows
    compile error C4114, since EbmlSyntax struct is already defined with const.
    TODO: push upstream.

    Revert upstream 7a9db61da39fbfaa910c10c0719be595a7d06f3d to fix seeking with
    text tracks.  crbug.com/681886 .

  Changes to libavformat/id2v2.c
    Change to 'return' in read_chapter to 'goto end' to fix a minor memory leak.
    crbug.com/689339

  Changes to libavformat/mp3dec.c
    Other changes: TODO(chcunningham/dalecurtis): https://crbug.com/504623 -
    Determine whether these changes are still necessary and either remove or
    document them.

  In libavformat/wavdec.c, exclude code blocks using #if to remove references
    to symbols not in our builds which some toolchains don't elide, for each of
    CONFIG_SPDIF_DEMUXER and CONFIG_W64_DEMUXER.

  Changes to libavformat/utils.c
    Locally disable deprecation warnings related to AVStream.codec access until
    upstream stops using deprecated fields.

    Protect against out-of-bounds access when searching for the next
    non-discarded packet in ff_index_search_timestamp(). TODO: push upstream

  Changes to libavutil/arm/intmath.h
    Remove static av_always_inline av_const unsigned av_clip_uintp2_arm() and
    av_clip_intp2_arm() due to compilation failure.

  Changes to libavutil/cpu.c
    Switch to compat/atomics/win32/stdatomic.h for win32, since it doesn't
    provide stdatomic.h .

  Changes to libavutil/mem.c
    Enable av_max_alloc(0) to remove alloc size bound.

  Changes to libavutil/timer.h
    C++11 compatability for string concatenation (http://crbug.com/454590).
    Add spaces between string literals and tokens.

  Changes/additions to libavutil/x86/x86inc.asm
    https://chromium-review.googlesource.com/#/c/272274/
    Fixes the conditionals on Linux so that these symbols are hidden and
    adds the Chromium-specific private_extern extension for hiding these
    symbols on OSX.
