diff --git a/libavformat/adxdec.c b/libavformat/adxdec.c
index fd096702c9a0b660efb79dca7c2540e74507e9f4..4f83348afd0b1a317234024f92bc720469c9b83c 100644
--- a/libavformat/adxdec.c
+++ b/libavformat/adxdec.c
@@ -94,7 +94,7 @@ static int adx_read_header(AVFormatContext *s)
     c->header_size = avio_rb16(s->pb) + 4;
     avio_seek(s->pb, -4, SEEK_CUR);
 
-    if (ff_get_extradata(par, s->pb, c->header_size) < 0)
+    if (ff_get_extradata(s, par, s->pb, c->header_size) < 0)
         return AVERROR(ENOMEM);
 
     if (par->extradata_size < 12) {
diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c
index bb5299c06fdd31aee3a641c94e4f686af593f390..d191bc4c047d3686e1d7cd15f786ca21f9742370 100644
--- a/libavformat/aiffdec.c
+++ b/libavformat/aiffdec.c
@@ -299,7 +299,7 @@ static int aiff_read_header(AVFormatContext *s)
         case MKTAG('w', 'a', 'v', 'e'):
             if ((uint64_t)size > (1<<30))
                 return -1;
-            if (ff_get_extradata(st->codecpar, pb, size) < 0)
+            if (ff_get_extradata(s, st->codecpar, pb, size) < 0)
                 return AVERROR(ENOMEM);
             if (st->codecpar->codec_id == AV_CODEC_ID_QDM2 && size>=12*4 && !st->codecpar->block_align) {
                 st->codecpar->block_align = AV_RB32(st->codecpar->extradata+11*4);
diff --git a/libavformat/aixdec.c b/libavformat/aixdec.c
index 5f40d6bdcfc5f081495051b16075f241d91ef729..cad8a1e116e6a142308f2d8e04962e2706665db6 100644
--- a/libavformat/aixdec.c
+++ b/libavformat/aixdec.c
@@ -77,7 +77,7 @@ static int aix_read_header(AVFormatContext *s)
         if (size <= 8)
             return AVERROR_INVALIDDATA;
         avio_skip(s->pb, 8);
-        ff_get_extradata(s->streams[i]->codecpar, s->pb, size - 8);
+        ff_get_extradata(s, s->streams[i]->codecpar, s->pb, size - 8);
     }
 
     return 0;
diff --git a/libavformat/apc.c b/libavformat/apc.c
index 64c1c6db3eeda9702ecb010c685017260289eca3..a4dcf660e56e15db5628b67fba246ed86749cf69 100644
--- a/libavformat/apc.c
+++ b/libavformat/apc.c
@@ -53,7 +53,7 @@ static int apc_read_header(AVFormatContext *s)
     st->codecpar->sample_rate = avio_rl32(pb);
 
     /* initial predictor values for adpcm decoder */
-    if (ff_get_extradata(st->codecpar, pb, 2 * 4) < 0)
+    if (ff_get_extradata(s, st->codecpar, pb, 2 * 4) < 0)
         return AVERROR(ENOMEM);
 
     if (avio_rl32(pb)) {
diff --git a/libavformat/apetag.c b/libavformat/apetag.c
index 53e076fb8bcf727d119e3412074df3ebc5937612..08e80f4aa38a15903e31f11cba3b3356931c1dd4 100644
--- a/libavformat/apetag.c
+++ b/libavformat/apetag.c
@@ -96,7 +96,7 @@ static int ape_tag_read_field(AVFormatContext *s)
             st->attached_pic.stream_index = st->index;
             st->attached_pic.flags       |= AV_PKT_FLAG_KEY;
         } else {
-            if (ff_get_extradata(st->codecpar, s->pb, size) < 0)
+            if (ff_get_extradata(s, st->codecpar, s->pb, size) < 0)
                 return AVERROR(ENOMEM);
             st->codecpar->codec_type = AVMEDIA_TYPE_ATTACHMENT;
         }
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 87c9bd4951cfd9550c5eb2aaad01385fab9fe6df..b114a744bf719bd42b1c5bac23d9468504aa8dfe 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -762,7 +762,7 @@ static int avi_read_header(AVFormatContext *s)
                             st->codecpar->extradata_size = esize - 10 * 4;
                         } else
                             st->codecpar->extradata_size =  size - 10 * 4;
-                        if (ff_get_extradata(st->codecpar, pb, st->codecpar->extradata_size) < 0)
+                        if (ff_get_extradata(s, st->codecpar, pb, st->codecpar->extradata_size) < 0)
                             return AVERROR(ENOMEM);
                     }
 
@@ -917,7 +917,7 @@ static int avi_read_header(AVFormatContext *s)
                 st = s->streams[stream_index];
 
                 if (size<(1<<30)) {
-                    if (ff_get_extradata(st->codecpar, pb, size) < 0)
+                    if (ff_get_extradata(s, st->codecpar, pb, size) < 0)
                         return AVERROR(ENOMEM);
                 }
 
diff --git a/libavformat/bink.c b/libavformat/bink.c
index 56dbf9e1c15d0a200be33c1ba8b0a69b9b1093da..b95c83d97ded8585a654dded59b2429fe49e0d8b 100644
--- a/libavformat/bink.c
+++ b/libavformat/bink.c
@@ -129,7 +129,7 @@ static int read_header(AVFormatContext *s)
         vst->codecpar->codec_id = AV_CODEC_ID_NONE;
     }
 
-    if (ff_get_extradata(vst->codecpar, pb, 4) < 0)
+    if (ff_get_extradata(s, vst->codecpar, pb, 4) < 0)
         return AVERROR(ENOMEM);
 
     bink->num_audio_tracks = avio_rl32(pb);
diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
index 91b50c81995bdc558092f1b0542f02c1bd1f381a..1c4ca401c2cb16fb71d654ed7ca9413dace52119 100644
--- a/libavformat/cafdec.c
+++ b/libavformat/cafdec.c
@@ -168,7 +168,7 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size)
         }
     } else {
         av_freep(&st->codecpar->extradata);
-        if (ff_get_extradata(st->codecpar, pb, size) < 0)
+        if (ff_get_extradata(s, st->codecpar, pb, size) < 0)
             return AVERROR(ENOMEM);
     }
 
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 04f20db1a54b1b3dab18a5ab74f1a764c20b36b5..51c4cd6cec5cd1d91a2b9d332c7392047fbfcf70 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -659,7 +659,7 @@ static int flv_read_close(AVFormatContext *s)
 static int flv_get_extradata(AVFormatContext *s, AVStream *st, int size)
 {
     av_freep(&st->codecpar->extradata);
-    if (ff_get_extradata(st->codecpar, s->pb, size) < 0)
+    if (ff_get_extradata(s, st->codecpar, s->pb, size) < 0)
         return AVERROR(ENOMEM);
     return 0;
 }
diff --git a/libavformat/idcin.c b/libavformat/idcin.c
index bfc2051d9dd784eee4fdba236d4a910274116a92..3900e9eddb7bd663a6460f32ba42e1f601acd165 100644
--- a/libavformat/idcin.c
+++ b/libavformat/idcin.c
@@ -205,7 +205,7 @@ static int idcin_read_header(AVFormatContext *s)
     st->codecpar->height = height;
 
     /* load up the Huffman tables into extradata */
-    if ((ret = ff_get_extradata(st->codecpar, pb, HUFFMAN_TABLE_SIZE)) < 0)
+    if ((ret = ff_get_extradata(s, st->codecpar, pb, HUFFMAN_TABLE_SIZE)) < 0)
         return ret;
 
     if (idcin->audio_present) {
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 1719deb219ce46e7dff58c64fb8415bd6a529657..40ba0899b5b552d4776f4c0f130a532be4bee386 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -522,7 +522,7 @@ int ff_alloc_extradata(AVCodecParameters *par, int size);
  * @param size size of extradata
  * @return >= 0 if OK, AVERROR_xxx on error
  */
-int ff_get_extradata(AVCodecParameters *par, AVIOContext *pb, int size);
+int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size);
 
 /**
  * add frame for rfps calculation.
diff --git a/libavformat/isom.c b/libavformat/isom.c
index d8a330c0b2fb3b21e98be4e28494c7ccff0cb3f2..e1ce310b1dd894bb2163d6710ead7c264ff9f380 100644
--- a/libavformat/isom.c
+++ b/libavformat/isom.c
@@ -482,7 +482,7 @@ int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext
         if (!len || (uint64_t)len > (1<<30))
             return -1;
         av_free(st->codecpar->extradata);
-        if ((ret = ff_get_extradata(st->codecpar, pb, len)) < 0)
+        if ((ret = ff_get_extradata(fc, st->codecpar, pb, len)) < 0)
             return ret;
         if (st->codecpar->codec_id == AV_CODEC_ID_AAC) {
             MPEG4AudioConfig cfg = {0};
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 42f88347717a050865beea99d3579e7805ef6f53..47af98cead7113642d4b66f87129ab8d62857b23 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1568,7 +1568,7 @@ static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         st->codecpar->codec_id == AV_CODEC_ID_SPEEX) {
         // pass all frma atom to codec, needed at least for QDMC and QDM2
         av_freep(&st->codecpar->extradata);
-        ret = ff_get_extradata(st->codecpar, pb, atom.size);
+        ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size);
         if (ret < 0)
             return ret;
     } else if (atom.size > 8) { /* to read frma, esds atoms */
@@ -1635,7 +1635,7 @@ static int mov_read_glbl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return 0;
     }
     av_freep(&st->codecpar->extradata);
-    ret = ff_get_extradata(st->codecpar, pb, atom.size);
+    ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size);
     if (ret < 0)
         return ret;
 
@@ -1661,7 +1661,7 @@ static int mov_read_dvc1(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 
     avio_seek(pb, 6, SEEK_CUR);
     av_freep(&st->codecpar->extradata);
-    ret = ff_get_extradata(st->codecpar, pb, atom.size - 7);
+    ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size - 7);
     if (ret < 0)
         return ret;
 
@@ -1689,7 +1689,7 @@ static int mov_read_strf(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 
     avio_skip(pb, 40);
     av_freep(&st->codecpar->extradata);
-    ret = ff_get_extradata(st->codecpar, pb, atom.size - 40);
+    ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size - 40);
     if (ret < 0)
         return ret;
 
@@ -2028,7 +2028,7 @@ static int mov_parse_stsd_data(MOVContext *c, AVIOContext *pb,
         if ((int)size != size)
             return AVERROR(ENOMEM);
 
-        ret = ff_get_extradata(st->codecpar, pb, size);
+        ret = ff_get_extradata(c->fc, st->codecpar, pb, size);
         if (ret < 0)
             return ret;
         if (size > 16) {
diff --git a/libavformat/mpc.c b/libavformat/mpc.c
index ffd1c56c1c24cbfc7e4b70c8d7cc8d11af3f3ca6..f32d65fa552f79a42b88231c10fbb5a890ac58a0 100644
--- a/libavformat/mpc.c
+++ b/libavformat/mpc.c
@@ -95,7 +95,7 @@ static int mpc_read_header(AVFormatContext *s)
     st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO;
     st->codecpar->bits_per_coded_sample = 16;
 
-    if (ff_get_extradata(st->codecpar, s->pb, 16) < 0)
+    if (ff_get_extradata(s, st->codecpar, s->pb, 16) < 0)
         return AVERROR(ENOMEM);
     st->codecpar->sample_rate = mpc_rate[st->codecpar->extradata[2] & 3];
     avpriv_set_pts_info(st, 32, MPC_FRAMESIZE, st->codecpar->sample_rate);
diff --git a/libavformat/mpc8.c b/libavformat/mpc8.c
index 288caa0639ab453d5bab71de645380d4bff4dc1f..05d0c1ae868fcf763d9a41b2e2047300e931544f 100644
--- a/libavformat/mpc8.c
+++ b/libavformat/mpc8.c
@@ -252,7 +252,7 @@ static int mpc8_read_header(AVFormatContext *s)
     st->codecpar->codec_id = AV_CODEC_ID_MUSEPACK8;
     st->codecpar->bits_per_coded_sample = 16;
 
-    if (ff_get_extradata(st->codecpar, pb, 2) < 0)
+    if (ff_get_extradata(s, st->codecpar, pb, 2) < 0)
         return AVERROR(ENOMEM);
 
     st->codecpar->channels = (st->codecpar->extradata[1] >> 4) + 1;
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 7286a26e179ac619749582b083f0e49eec0ffbb0..2e309bcad7fd2ff8445418f3e2367153c65b3704 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -463,7 +463,7 @@ static int decode_stream_header(NUTContext *nut)
 
     GET_V(st->codecpar->extradata_size, tmp < (1 << 30));
     if (st->codecpar->extradata_size) {
-        if (ff_get_extradata(st->codecpar, bc, st->codecpar->extradata_size) < 0)
+        if (ff_get_extradata(s, st->codecpar, bc, st->codecpar->extradata_size) < 0)
             return AVERROR(ENOMEM);
     }
 
diff --git a/libavformat/nuv.c b/libavformat/nuv.c
index 57eea9e60447ce389f769e61a35b6e0a2900aa81..cd8268d2a5398cf693fe965eb4fcddd1752770f4 100644
--- a/libavformat/nuv.c
+++ b/libavformat/nuv.c
@@ -87,7 +87,7 @@ static int get_codec_data(AVIOContext *pb, AVStream *vst,
                     av_freep(&vst->codecpar->extradata);
                     vst->codecpar->extradata_size = 0;
                 }
-                if (ff_get_extradata(vst->codecpar, pb, size) < 0)
+                if (ff_get_extradata(NULL, vst->codecpar, pb, size) < 0)
                     return AVERROR(ENOMEM);
                 size = 0;
                 if (!myth)
diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
index 0b1083264f6881504d1da75e00b638619b86f93d..1602c31169bdaccd8867ef0055c4824f2276959a 100644
--- a/libavformat/riffdec.c
+++ b/libavformat/riffdec.c
@@ -143,7 +143,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
         }
         if (cbSize > 0) {
             av_freep(&par->extradata);
-            if (ff_get_extradata(par, pb, cbSize) < 0)
+            if (ff_get_extradata(s, par, pb, cbSize) < 0)
                 return AVERROR(ENOMEM);
             size -= cbSize;
         }
@@ -156,7 +156,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
 
         size -= 4;
         av_freep(&par->extradata);
-        if (ff_get_extradata(par, pb, size) < 0)
+        if (ff_get_extradata(s, par, pb, size) < 0)
             return AVERROR(ENOMEM);
         nb_streams         = AV_RL16(par->extradata + 4);
         par->sample_rate   = AV_RL32(par->extradata + 12);
diff --git a/libavformat/rl2.c b/libavformat/rl2.c
index 077da4cb0ed1183bb2a5fa89016d1cc0cad9490e..69e8be2e578c584d63a4811ca1fcb9cbfc4bcb23 100644
--- a/libavformat/rl2.c
+++ b/libavformat/rl2.c
@@ -127,7 +127,7 @@ static av_cold int rl2_read_header(AVFormatContext *s)
     if(signature == RLV3_TAG && back_size > 0)
         st->codecpar->extradata_size += back_size;
 
-    if(ff_get_extradata(st->codecpar, pb, st->codecpar->extradata_size) < 0)
+    if(ff_get_extradata(s, st->codecpar, pb, st->codecpar->extradata_size) < 0)
         return AVERROR(ENOMEM);
 
     /** setup audio stream if present */
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index 2500852767f3502cdefa5e916d1660c81fd6dfaf..cb0481ed4d9f471a8952a3eda0923fe6e9849e22 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -93,7 +93,7 @@ static int rm_read_extradata(AVFormatContext *s, AVIOContext *pb, AVCodecParamet
         av_log(s, AV_LOG_ERROR, "extradata size %u too large\n", size);
         return -1;
     }
-    if (ff_get_extradata(par, pb, size) < 0)
+    if (ff_get_extradata(s, par, pb, size) < 0)
         return AVERROR(ENOMEM);
     return 0;
 }
diff --git a/libavformat/rsd.c b/libavformat/rsd.c
index e02d767a012baf6d4c80179562452001f688e146..ee6fdfbeb142a5908685ec6af9e9efc675bd9e17 100644
--- a/libavformat/rsd.c
+++ b/libavformat/rsd.c
@@ -127,7 +127,7 @@ static int rsd_read_header(AVFormatContext *s)
 
         start = avio_rl32(pb);
 
-        if ((ret = ff_get_extradata(par, s->pb, 32)) < 0)
+        if ((ret = ff_get_extradata(s, par, s->pb, 32)) < 0)
             return ret;
         if (pb->seekable)
             st->duration = av_get_audio_frame_duration2(par, avio_size(pb) - start);
diff --git a/libavformat/utils.c b/libavformat/utils.c
index d6aba5a237b16e85d5d1d67f92f7a3c0b6222496..b43cfb1eee6e63e72005cdda5def10a411082ad2 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -3117,7 +3117,7 @@ int ff_alloc_extradata(AVCodecParameters *par, int size)
     return ret;
 }
 
-int ff_get_extradata(AVCodecParameters *par, AVIOContext *pb, int size)
+int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
 {
     int ret = ff_alloc_extradata(par, size);
     if (ret < 0)
@@ -3126,7 +3126,7 @@ int ff_get_extradata(AVCodecParameters *par, AVIOContext *pb, int size)
     if (ret != size) {
         av_freep(&par->extradata);
         par->extradata_size = 0;
-        av_log(par, AV_LOG_ERROR, "Failed to read extradata of size %d\n", size);
+        av_log(s, AV_LOG_ERROR, "Failed to read extradata of size %d\n", size);
         return ret < 0 ? ret : AVERROR_INVALIDDATA;
     }
 
diff --git a/libavformat/vc1test.c b/libavformat/vc1test.c
index 1414426d02b1f6ca6bcc9247c2d3e04ccbc19252..a801f4bd22e41cabe4bb08b4b13c04d0bf9a76b9 100644
--- a/libavformat/vc1test.c
+++ b/libavformat/vc1test.c
@@ -61,7 +61,7 @@ static int vc1t_read_header(AVFormatContext *s)
     st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
     st->codecpar->codec_id = AV_CODEC_ID_WMV3;
 
-    if (ff_get_extradata(st->codecpar, pb, VC1_EXTRADATA_SIZE) < 0)
+    if (ff_get_extradata(s, st->codecpar, pb, VC1_EXTRADATA_SIZE) < 0)
         return AVERROR(ENOMEM);
     st->codecpar->height = avio_rl32(pb);
     st->codecpar->width = avio_rl32(pb);
diff --git a/libavformat/westwood_vqa.c b/libavformat/westwood_vqa.c
index 44388d6413331bf2f18793f8debbd4a96276b621..88bd7cd6028245cb3825d3dedf490f867a5dd0b7 100644
--- a/libavformat/westwood_vqa.c
+++ b/libavformat/westwood_vqa.c
@@ -101,7 +101,7 @@ static int wsvqa_read_header(AVFormatContext *s)
     avio_seek(pb, 20, SEEK_SET);
 
     /* the VQA header needs to go to the decoder */
-    if (ff_get_extradata(st->codecpar, pb, VQA_HEADER_SIZE) < 0)
+    if (ff_get_extradata(s, st->codecpar, pb, VQA_HEADER_SIZE) < 0)
         return AVERROR(ENOMEM);
     header = st->codecpar->extradata;
     st->codecpar->width = AV_RL16(&header[6]);