---- a/media/filters/ffmpeg_glue.h
-+++ b/media/filters/ffmpeg_glue.h
-@@ -28,9 +28,9 @@
- #include "base/basictypes.h"
- #include "base/memory/scoped_ptr.h"
- #include "media/base/media_export.h"
-+#include "media/ffmpeg/ffmpeg_common.h"
-
- struct AVFormatContext;
--struct AVIOContext;
-
- namespace media {
-
---- a/media/ffmpeg/ffmpeg_common.cc.orig 2013-01-17 00:07:51.635057013 +0000
-+++ b/media/ffmpeg/ffmpeg_common.cc 2013-01-17 00:15:50.867406811 +0000
-@@ -85,8 +85,10 @@
- return kCodecGSM_MS;
- case AV_CODEC_ID_PCM_MULAW:
- return kCodecPCM_MULAW;
-+#ifndef CHROMIUM_OMIT_AV_CODEC_ID_OPUS
- case AV_CODEC_ID_OPUS:
- return kCodecOpus;
-+#endif
- default:
- DVLOG(1) << "Unknown audio CodecID: " << codec_id;
- }
-@@ -130,8 +132,10 @@
- return AV_CODEC_ID_GSM_MS;
- case kCodecPCM_MULAW:
- return AV_CODEC_ID_PCM_MULAW;
-+#ifndef CHROMIUM_OMIT_AV_CODEC_ID_OPUS
- case kCodecOpus:
- return AV_CODEC_ID_OPUS;
-+#endif
- default:
- DVLOG(1) << "Unknown AudioCodec: " << audio_codec;
- }
-@@ -149,8 +153,10 @@
- return kCodecMPEG4;
- case AV_CODEC_ID_VP8:
- return kCodecVP8;
-+#ifndef CHROMIUM_OMIT_AV_CODEC_ID_VP9
- case AV_CODEC_ID_VP9:
- return kCodecVP9;
-+#endif
- default:
- DVLOG(1) << "Unknown video CodecID: " << codec_id;
- }
-@@ -167,8 +173,10 @@
- return AV_CODEC_ID_MPEG4;
- case kCodecVP8:
- return AV_CODEC_ID_VP8;
-+#ifndef CHROMIUM_OMIT_AV_CODEC_ID_VP9
- case kCodecVP9:
- return AV_CODEC_ID_VP9;
-+#endif
- default:
- DVLOG(1) << "Unknown VideoCodec: " << video_codec;
- }
---- a/media/filters/ffmpeg_demuxer.cc.orig 2013-05-09 18:04:25.089276403 +0000
-+++ b/media/filters/ffmpeg_demuxer.cc 2013-05-09 18:05:16.289599070 +0000
-@@ -111,12 +111,15 @@
- // Get side data if any. For now, the only type of side_data is VP8 Alpha. We
- // keep this generic so that other side_data types in the future can be
- // handled the same way as well.
-- av_packet_split_side_data(packet.get());
- int side_data_size = 0;
-- uint8* side_data = av_packet_get_side_data(
-+ uint8* side_data = NULL;
-+#ifndef CHROMIUM_OMIT_AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
-+ av_packet_split_side_data(packet.get());
-+ side_data = av_packet_get_side_data(
- packet.get(),
- AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
- &side_data_size);
-+#endif
-
- // If a packet is returned by FFmpeg's av_parser_parse2() the packet will
- // reference inner memory of FFmpeg. As such we should transfer the packet
---- a/media/base/media_posix.cc.orig 2013-05-24 20:59:12.963046035 +0000
-+++ b/media/base/media_posix.cc 2013-05-24 20:59:50.593275882 +0000
-@@ -11,12 +11,15 @@
- #include "base/path_service.h"
- #include "base/strings/stringize_macros.h"
- #include "media/ffmpeg/ffmpeg_common.h"
-+
-+#if !defined(USE_SYSTEM_FFMPEG)
- #include "third_party/ffmpeg/ffmpeg_stubs.h"
-
- using third_party_ffmpeg::kNumStubModules;
- using third_party_ffmpeg::kModuleFfmpegsumo;
- using third_party_ffmpeg::InitializeStubs;
- using third_party_ffmpeg::StubPathMap;
-+#endif
-
- namespace media {
- namespace internal {
-@@ -46,6 +49,9 @@
- #endif
-
- bool InitializeMediaLibraryInternal(const base::FilePath& module_dir) {
-+#if defined(USE_SYSTEM_FFMPEG)
-+ return true;
-+#else
- StubPathMap paths;
-
- // First try to initialize with Chrome's sumo library.
-@@ -61,6 +67,7 @@
- FILE_PATH_LITERAL(DSO_NAME("avformat", AVFORMAT_VERSION))).value());
-
- return InitializeStubs(paths);
-+#endif
- }
-
- } // namespace internal
+--- a/media/ffmpeg/ffmpeg_common.h 2015-11-27 12:01:56.155462264 +0000
++++ b/media/ffmpeg/ffmpeg_common.h 2015-11-27 12:03:03.348846300 +0000
+@@ -19,10 +19,6 @@
+
+ // Include FFmpeg header files.
+ extern "C" {
+-// Disable deprecated features which result in spammy compile warnings. This
+-// list of defines must mirror those in the 'defines' section of BUILD.gn file &
+-// ffmpeg.gyp file or the headers below will generate different structures!
+-#define FF_API_CONVERGENCE_DURATION 0
+ // Upstream libavcodec/utils.c still uses the deprecated
+ // av_dup_packet(), causing deprecation warnings.
+ // The normal fix for such things is to disable the feature as below,
+@@ -36,7 +32,6 @@
+ MSVC_PUSH_DISABLE_WARNING(4244);
+ #include <libavcodec/avcodec.h>
+ #include <libavformat/avformat.h>
+-#include <libavformat/internal.h>
+ #include <libavformat/avio.h>
+ #include <libavutil/avutil.h>
+ #include <libavutil/imgutils.h>
+diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
+index 155e980..7ba327a 100644
+--- a/media/filters/ffmpeg_demuxer.cc
++++ b/media/filters/ffmpeg_demuxer.cc
+@@ -1034,24 +1034,6 @@
+ // If no estimate is found, the stream entry will be kInfiniteDuration().
+ std::vector<base::TimeDelta> start_time_estimates(format_context->nb_streams,
+ kInfiniteDuration());
+- const AVFormatInternal* internal = format_context->internal;
+- if (internal && internal->packet_buffer &&
+- format_context->start_time != static_cast<int64_t>(AV_NOPTS_VALUE)) {
+- struct AVPacketList* packet_buffer = internal->packet_buffer;
+- while (packet_buffer != internal->packet_buffer_end) {
+- DCHECK_LT(static_cast<size_t>(packet_buffer->pkt.stream_index),
+- start_time_estimates.size());
+- const AVStream* stream =
+- format_context->streams[packet_buffer->pkt.stream_index];
+- if (packet_buffer->pkt.pts != static_cast<int64_t>(AV_NOPTS_VALUE)) {
+- const base::TimeDelta packet_pts =
+- ConvertFromTimeBase(stream->time_base, packet_buffer->pkt.pts);
+- if (packet_pts < start_time_estimates[stream->index])
+- start_time_estimates[stream->index] = packet_pts;
+- }
+- packet_buffer = packet_buffer->next;
+- }
+- }
+
+ AVStream* audio_stream = NULL;
+ AudioDecoderConfig audio_config;