diff --git a/libavdevice/libcdio.c b/libavdevice/libcdio.c
index 4417523c57..28c339564f 100644
--- a/libavdevice/libcdio.c
+++ b/libavdevice/libcdio.c
@@ -37,6 +37,7 @@
 #include "libavutil/opt.h"
 
 #include "libavformat/avformat.h"
+#include "libavformat/demux.h"
 #include "libavformat/internal.h"
 
 typedef struct CDIOContext {
diff --git a/libavformat/aadec.c b/libavformat/aadec.c
index 19aa26e099..e7b048b1f9 100644
--- a/libavformat/aadec.c
+++ b/libavformat/aadec.c
@@ -24,6 +24,7 @@
  */
 
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 #include "libavutil/avstring.h"
 #include "libavutil/dict.h"
diff --git a/libavformat/asfdec_f.c b/libavformat/asfdec_f.c
index a8f36ed286..fb8b48ed11 100644
--- a/libavformat/asfdec_f.c
+++ b/libavformat/asfdec_f.c
@@ -33,6 +33,7 @@
 #include "avformat.h"
 #include "avio_internal.h"
 #include "avlanguage.h"
+#include "demux.h"
 #include "internal.h"
 #include "riff.h"
 #include "asf.h"
diff --git a/libavformat/asfdec_o.c b/libavformat/asfdec_o.c
index fb614d42de..907be6de04 100644
--- a/libavformat/asfdec_o.c
+++ b/libavformat/asfdec_o.c
@@ -27,8 +27,8 @@
 #include "libavutil/time_internal.h"
 
 #include "avformat.h"
-#include "avio_internal.h"
 #include "avlanguage.h"
+#include "demux.h"
 #include "internal.h"
 #include "riff.h"
 #include "asf.h"
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 21fc2b87ff..937d9e6ffb 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -32,6 +32,7 @@
 #include "libavutil/mathematics.h"
 #include "avformat.h"
 #include "avi.h"
+#include "demux.h"
 #include "dv.h"
 #include "internal.h"
 #include "isom.h"
diff --git a/libavformat/brstm.c b/libavformat/brstm.c
index 4fb7920d7c..628c556e66 100644
--- a/libavformat/brstm.c
+++ b/libavformat/brstm.c
@@ -22,6 +22,7 @@
 #include "libavutil/intreadwrite.h"
 #include "libavcodec/bytestream.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 
 typedef struct BRSTMCoeffOffset {
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index cfe1329105..e57da59e04 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -28,6 +28,7 @@
 #include "libavcodec/bsf.h"
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 #include "url.h"
 
diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
index 211d77fd02..6888132801 100644
--- a/libavformat/dashdec.c
+++ b/libavformat/dashdec.c
@@ -28,6 +28,7 @@
 #include "internal.h"
 #include "avio_internal.h"
 #include "dash.h"
+#include "demux.h"
 
 #define INITIAL_BUFFER_SIZE 32768
 
diff --git a/libavformat/demux.c b/libavformat/demux.c
index ad7b5dbf83..5d83d81665 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -21,7 +21,6 @@
 
 #include <stdint.h>
 
-#include "config.h"
 #include "config_components.h"
 
 #include "libavutil/avassert.h"
@@ -42,6 +41,7 @@
 
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "id3v2.h"
 #include "internal.h"
 #include "url.h"
diff --git a/libavformat/demux.h b/libavformat/demux.h
new file mode 100644
index 0000000000..f003d81f52
--- /dev/null
+++ b/libavformat/demux.h
@@ -0,0 +1,145 @@
+/*
+ * copyright (c) 2001 Fabrice Bellard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVFORMAT_DEMUX_H
+#define AVFORMAT_DEMUX_H
+
+#include <stdint.h>
+#include "libavutil/rational.h"
+#include "libavcodec/packet.h"
+#include "avformat.h"
+
+#define RELATIVE_TS_BASE (INT64_MAX - (1LL << 48))
+
+static av_always_inline int is_relative(int64_t ts)
+{
+    return ts > (RELATIVE_TS_BASE - (1LL << 48));
+}
+
+/**
+ * Wrap a given time stamp, if there is an indication for an overflow
+ *
+ * @param st stream
+ * @param timestamp the time stamp to wrap
+ * @return resulting time stamp
+ */
+int64_t ff_wrap_timestamp(const AVStream *st, int64_t timestamp);
+
+/**
+ * Read a transport packet from a media file.
+ *
+ * @param s media file handle
+ * @param pkt is filled
+ * @return 0 if OK, AVERROR_xxx on error
+ */
+int ff_read_packet(AVFormatContext *s, AVPacket *pkt);
+
+void ff_read_frame_flush(AVFormatContext *s);
+
+/**
+ * Perform a binary search using av_index_search_timestamp() and
+ * AVInputFormat.read_timestamp().
+ *
+ * @param target_ts target timestamp in the time base of the given stream
+ * @param stream_index stream number
+ */
+int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
+                         int64_t target_ts, int flags);
+
+/**
+ * Update cur_dts of all streams based on the given timestamp and AVStream.
+ *
+ * Stream ref_st unchanged, others set cur_dts in their native time base.
+ * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
+ * @param timestamp new dts expressed in time_base of param ref_st
+ * @param ref_st reference stream giving time_base of param timestamp
+ */
+void avpriv_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
+
+int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
+                    int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
+
+/**
+ * Perform a binary search using read_timestamp().
+ *
+ * @param target_ts target timestamp in the time base of the given stream
+ * @param stream_index stream number
+ */
+int64_t ff_gen_search(AVFormatContext *s, int stream_index,
+                      int64_t target_ts, int64_t pos_min,
+                      int64_t pos_max, int64_t pos_limit,
+                      int64_t ts_min, int64_t ts_max,
+                      int flags, int64_t *ts_ret,
+                      int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
+
+/**
+ * Internal version of av_index_search_timestamp
+ */
+int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
+                              int64_t wanted_timestamp, int flags);
+
+/**
+ * Internal version of av_add_index_entry
+ */
+int ff_add_index_entry(AVIndexEntry **index_entries,
+                       int *nb_index_entries,
+                       unsigned int *index_entries_allocated_size,
+                       int64_t pos, int64_t timestamp, int size, int distance, int flags);
+
+void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
+
+/**
+ * Ensure the index uses less memory than the maximum specified in
+ * AVFormatContext.max_index_size by discarding entries if it grows
+ * too large.
+ */
+void ff_reduce_index(AVFormatContext *s, int stream_index);
+
+/**
+ * add frame for rfps calculation.
+ *
+ * @param dts timestamp of the i-th frame
+ * @return 0 if OK, AVERROR_xxx on error
+ */
+int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts);
+
+void ff_rfps_calculate(AVFormatContext *ic);
+
+/**
+ * Rescales a timestamp and the endpoints of an interval to which the temstamp
+ * belongs, from a timebase `tb_in` to a timebase `tb_out`.
+ *
+ * The upper (lower) bound of the output interval is rounded up (down) such that
+ * the output interval always falls within the intput interval. The timestamp is
+ * rounded to the nearest integer and halfway cases away from zero, and can
+ * therefore fall outside of the output interval.
+ *
+ * Useful to simplify the rescaling of the arguments of AVInputFormat::read_seek2()
+ *
+ * @param[in] tb_in      Timebase of the input `min_ts`, `ts` and `max_ts`
+ * @param[in] tb_out     Timebase of the ouput `min_ts`, `ts` and `max_ts`
+ * @param[in,out] min_ts Lower bound of the interval
+ * @param[in,out] ts     Timestamp
+ * @param[in,out] max_ts Upper bound of the interval
+ */
+void ff_rescale_interval(AVRational tb_in, AVRational tb_out,
+                         int64_t *min_ts, int64_t *ts, int64_t *max_ts);
+
+#endif /* AVFORMAT_DEMUX_H */
diff --git a/libavformat/hls.c b/libavformat/hls.c
index 83ff4cc607..38eb346405 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -39,6 +39,7 @@
 #include "libavutil/dict.h"
 #include "libavutil/time.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 #include "avio_internal.h"
 #include "id3v2.h"
diff --git a/libavformat/idcin.c b/libavformat/idcin.c
index c92ed2c237..1560d58e39 100644
--- a/libavformat/idcin.c
+++ b/libavformat/idcin.c
@@ -72,6 +72,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 
 #define HUFFMAN_TABLE_SIZE (64 * 1024)
diff --git a/libavformat/imfdec.c b/libavformat/imfdec.c
index 2fe79dfbad..73baa9739c 100644
--- a/libavformat/imfdec.c
+++ b/libavformat/imfdec.c
@@ -63,6 +63,7 @@
  */
 
 #include "avio_internal.h"
+#include "demux.h"
 #include "imf.h"
 #include "internal.h"
 #include "libavcodec/packet.h"
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 16f84374f7..c123c8d1ae 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -460,21 +460,6 @@ do {\
 } while(0)
 #endif
 
-#define RELATIVE_TS_BASE (INT64_MAX - (1LL << 48))
-
-static av_always_inline int is_relative(int64_t ts)
-{
-    return ts > (RELATIVE_TS_BASE - (1LL << 48));
-}
-
-/**
- * Wrap a given time stamp, if there is an indication for an overflow
- *
- * @param st stream
- * @param timestamp the time stamp to wrap
- * @return resulting time stamp
- */
-int64_t ff_wrap_timestamp(const AVStream *st, int64_t timestamp);
 
 void ff_flush_packet_queue(AVFormatContext *s);
 
@@ -509,8 +494,6 @@ char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
  */
 int ff_hex_to_data(uint8_t *data, const char *p);
 
-void ff_read_frame_flush(AVFormatContext *s);
-
 #define NTP_OFFSET 2208988800ULL
 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL)
 
@@ -611,22 +594,6 @@ void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
  */
 int ff_find_stream_index(const AVFormatContext *s, int id);
 
-/**
- * Internal version of av_index_search_timestamp
- */
-int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
-                              int64_t wanted_timestamp, int flags);
-
-/**
- * Internal version of av_add_index_entry
- */
-int ff_add_index_entry(AVIndexEntry **index_entries,
-                       int *nb_index_entries,
-                       unsigned int *index_entries_allocated_size,
-                       int64_t pos, int64_t timestamp, int size, int distance, int flags);
-
-void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
-
 /**
  * Add a new chapter.
  *
@@ -641,52 +608,10 @@ void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
 AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base,
                               int64_t start, int64_t end, const char *title);
 
-/**
- * Ensure the index uses less memory than the maximum specified in
- * AVFormatContext.max_index_size by discarding entries if it grows
- * too large.
- */
-void ff_reduce_index(AVFormatContext *s, int stream_index);
-
 enum AVCodecID ff_guess_image2_codec(const char *filename);
 
 const AVCodec *ff_find_decoder(AVFormatContext *s, const AVStream *st,
                                enum AVCodecID codec_id);
-/**
- * Perform a binary search using av_index_search_timestamp() and
- * AVInputFormat.read_timestamp().
- *
- * @param target_ts target timestamp in the time base of the given stream
- * @param stream_index stream number
- */
-int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
-                         int64_t target_ts, int flags);
-
-/**
- * Update cur_dts of all streams based on the given timestamp and AVStream.
- *
- * Stream ref_st unchanged, others set cur_dts in their native time base.
- * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
- * @param timestamp new dts expressed in time_base of param ref_st
- * @param ref_st reference stream giving time_base of param timestamp
- */
-void avpriv_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
-
-int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
-                    int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
-
-/**
- * Perform a binary search using read_timestamp().
- *
- * @param target_ts target timestamp in the time base of the given stream
- * @param stream_index stream number
- */
-int64_t ff_gen_search(AVFormatContext *s, int stream_index,
-                      int64_t target_ts, int64_t pos_min,
-                      int64_t pos_max, int64_t pos_limit,
-                      int64_t ts_min, int64_t ts_max,
-                      int flags, int64_t *ts_ret,
-                      int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
 
 /**
  * Set the time base and wrapping info for a given stream. This will be used
@@ -717,15 +642,6 @@ int ff_add_param_change(AVPacket *pkt, int32_t channels,
  */
 int ff_framehash_write_header(AVFormatContext *s);
 
-/**
- * Read a transport packet from a media file.
- *
- * @param s media file handle
- * @param pkt is filled
- * @return 0 if OK, AVERROR_xxx on error
- */
-int ff_read_packet(AVFormatContext *s, AVPacket *pkt);
-
 /**
  * Add an attached pic to an AVStream.
  *
@@ -819,16 +735,6 @@ int ff_alloc_extradata(AVCodecParameters *par, int size);
  */
 int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size);
 
-/**
- * add frame for rfps calculation.
- *
- * @param dts timestamp of the i-th frame
- * @return 0 if OK, AVERROR_xxx on error
- */
-int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts);
-
-void ff_rfps_calculate(AVFormatContext *ic);
-
 /**
  * Copies the whilelists from one context to the other
  */
@@ -880,24 +786,4 @@ void ff_format_set_url(AVFormatContext *s, char *url);
 
 void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]);
 
-/**
- * Rescales a timestamp and the endpoints of an interval to which the temstamp
- * belongs, from a timebase `tb_in` to a timebase `tb_out`.
- *
- * The upper (lower) bound of the output interval is rounded up (down) such that
- * the output interval always falls within the intput interval. The timestamp is
- * rounded to the nearest integer and halfway cases away from zero, and can
- * therefore fall outside of the output interval.
- *
- * Useful to simplify the rescaling of the arguments of AVInputFormat::read_seek2()
- *
- * @param[in] tb_in      Timebase of the input `min_ts`, `ts` and `max_ts`
- * @param[in] tb_out     Timebase of the ouput `min_ts`, `ts` and `max_ts`
- * @param[in,out] min_ts Lower bound of the interval
- * @param[in,out] ts     Timestamp
- * @param[in,out] max_ts Upper bound of the interval
- */
-void ff_rescale_interval(AVRational tb_in, AVRational tb_out,
-                         int64_t *min_ts, int64_t *ts, int64_t *max_ts);
-
 #endif /* AVFORMAT_INTERNAL_H */
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index d97fc33d44..4715f1b7d4 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -55,6 +55,7 @@
 
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "dovi_isom.h"
 #include "internal.h"
 #include "isom.h"
diff --git a/libavformat/mca.c b/libavformat/mca.c
index d8278ebe72..74654c3b39 100644
--- a/libavformat/mca.c
+++ b/libavformat/mca.c
@@ -22,6 +22,7 @@
 #include "libavutil/intreadwrite.h"
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 
 typedef struct MCADemuxContext {
diff --git a/libavformat/mlvdec.c b/libavformat/mlvdec.c
index a02b190620..db3b77bb9b 100644
--- a/libavformat/mlvdec.c
+++ b/libavformat/mlvdec.c
@@ -24,12 +24,11 @@
  * Magic Lantern Video (MLV) demuxer
  */
 
-#include "libavutil/eval.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/rational.h"
 #include "avformat.h"
-#include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 #include "riff.h"
 
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 24cce47884..c59a474b7c 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -36,11 +36,9 @@
 #include "libavutil/intreadwrite.h"
 #include "libavutil/intfloat.h"
 #include "libavutil/mathematics.h"
-#include "libavutil/time_internal.h"
 #include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
 #include "libavutil/dict.h"
-#include "libavutil/display.h"
 #include "libavutil/opt.h"
 #include "libavutil/aes.h"
 #include "libavutil/aes_ctr.h"
@@ -49,7 +47,6 @@
 #include "libavutil/spherical.h"
 #include "libavutil/stereo3d.h"
 #include "libavutil/timecode.h"
-#include "libavutil/dovi_meta.h"
 #include "libavcodec/ac3tab.h"
 #include "libavcodec/flac.h"
 #include "libavcodec/hevc.h"
@@ -58,6 +55,7 @@
 #include "avformat.h"
 #include "internal.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "dovi_isom.h"
 #include "riff.h"
 #include "isom.h"
diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index f617348b2e..458d6dbd03 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -20,14 +20,13 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/avstring.h"
 #include "libavutil/intreadwrite.h"
-#include "libavutil/crc.h"
 #include "libavutil/dict.h"
 #include "libavutil/mathematics.h"
 #include "avformat.h"
 #include "internal.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "id3v2.h"
 #include "id3v1.h"
 #include "replaygain.h"
diff --git a/libavformat/mpc8.c b/libavformat/mpc8.c
index 03c67907b9..2822a08b55 100644
--- a/libavformat/mpc8.c
+++ b/libavformat/mpc8.c
@@ -23,6 +23,7 @@
 #include "libavcodec/unary.h"
 #include "apetag.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 #include "avio_internal.h"
 
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index d696183a73..864b08d8f8 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -24,6 +24,7 @@
 #include "libavutil/channel_layout.h"
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 #include "mpeg.h"
 
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 49f7735123..6e761c07f1 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -39,6 +39,7 @@
 #include "mpegts.h"
 #include "internal.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "mpeg.h"
 #include "isom.h"
 #if CONFIG_ICONV
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 30dd40749c..6a22c33995 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -59,6 +59,7 @@
 #include "libavutil/opt.h"
 #include "avformat.h"
 #include "avlanguage.h"
+#include "demux.h"
 #include "internal.h"
 #include "mxf.h"
 
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 6611fbc1d7..0db3d03f6c 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -29,6 +29,7 @@
 #include "libavutil/tree.h"
 #include "libavcodec/bytestream.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "isom.h"
 #include "nut.h"
 #include "riff.h"
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 87f178bb7b..3b19e0bd89 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -32,10 +32,10 @@
 #include "libavutil/avassert.h"
 #include "libavutil/intreadwrite.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "oggdec.h"
 #include "avformat.h"
 #include "internal.h"
-#include "vorbiscomment.h"
 
 #define MAX_PAGE_SIZE 65307
 #define DECODER_BUFFER_SIZE MAX_PAGE_SIZE
diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index 1d28e50aa8..43df23f4cb 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -26,7 +26,6 @@
 #define AVFORMAT_OGGDEC_H
 
 #include "avformat.h"
-#include "metadata.h"
 
 struct ogg_codec {
     const int8_t *magic;
diff --git a/libavformat/options.c b/libavformat/options.c
index 14ae55e3fd..d306c86c63 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -19,6 +19,7 @@
  */
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 
 #include "libavcodec/avcodec.h"
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index cb0ca31f40..881d7002ad 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -22,13 +22,13 @@
 #include <inttypes.h>
 
 #include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/dict.h"
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 #include "rmsipr.h"
 #include "rm.h"
diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c
index eb19e85351..72ead6975a 100644
--- a/libavformat/rtpdec_asf.c
+++ b/libavformat/rtpdec_asf.c
@@ -28,11 +28,11 @@
 #include "libavutil/base64.h"
 #include "libavutil/avstring.h"
 #include "libavutil/intreadwrite.h"
-#include "rtp.h"
 #include "rtpdec_formats.h"
 #include "rtsp.h"
 #include "asf.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 
 /**
diff --git a/libavformat/seek.c b/libavformat/seek.c
index 890aea7f8a..3b1c75f1b1 100644
--- a/libavformat/seek.c
+++ b/libavformat/seek.c
@@ -27,6 +27,7 @@
 
 #include "avformat.h"
 #include "avio_internal.h"
+#include "demux.h"
 #include "internal.h"
 
 void avpriv_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
diff --git a/libavformat/tests/seek_utils.c b/libavformat/tests/seek_utils.c
index cc679dca05..4cb94ad685 100644
--- a/libavformat/tests/seek_utils.c
+++ b/libavformat/tests/seek_utils.c
@@ -18,7 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavformat/internal.h"
+#include "libavformat/demux.h"
 
 int main(void)
 {
diff --git a/libavformat/vpk.c b/libavformat/vpk.c
index 10c4cf0ebe..bfd49c6307 100644
--- a/libavformat/vpk.c
+++ b/libavformat/vpk.c
@@ -21,6 +21,7 @@
 
 #include "libavutil/intreadwrite.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 
 typedef struct VPKDemuxContext {
diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c
index 087b44273e..98128b7201 100644
--- a/libavformat/wtvdec.c
+++ b/libavformat/wtvdec.c
@@ -32,6 +32,7 @@
 #include "libavutil/intfloat.h"
 #include "libavutil/time_internal.h"
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 #include "wtv.h"
 #include "mpegts.h"
