]> git.sesse.net Git - ffmpeg/commitdiff
avformat: Don't free old extradata before ff_alloc/get_extradata
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Wed, 11 Dec 2019 11:21:07 +0000 (12:21 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Thu, 12 Dec 2019 18:25:33 +0000 (19:25 +0100)
These functions already free it themselves before they allocate the new
extradata.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
18 files changed:
libavformat/avidec.c
libavformat/cafdec.c
libavformat/concatdec.c
libavformat/flic.c
libavformat/flvdec.c
libavformat/matroskaenc.c
libavformat/mov.c
libavformat/nuv.c
libavformat/oggparseogm.c
libavformat/oggparseopus.c
libavformat/riffdec.c
libavformat/rtpdec_latm.c
libavformat/rtpdec_mpeg4.c
libavformat/rtpdec_qdm2.c
libavformat/rtpdec_svq3.c
libavformat/utils.c
libavformat/wavdec.c
libavformat/xmv.c

index 21871feb8d6ef99e3322b2236f3236e0475d98cf..ae0c227bb9fca3f037aef40e6b8a1449efda7e90 100644 (file)
@@ -770,7 +770,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
                             st->codecpar->extradata_size =  size - 10 * 4;
                         if (st->codecpar->extradata) {
                             av_log(s, AV_LOG_WARNING, "New extradata in strf chunk, freeing previous one.\n");
-                            av_freep(&st->codecpar->extradata);
                         }
                         ret = ff_get_extradata(s, st->codecpar, pb,
                                                st->codecpar->extradata_size);
@@ -932,7 +931,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
                 if (size<(1<<30)) {
                     if (st->codecpar->extradata) {
                         av_log(s, AV_LOG_WARNING, "New extradata in strd chunk, freeing previous one.\n");
-                        av_freep(&st->codecpar->extradata);
                     }
                     if ((ret = ff_get_extradata(s, st->codecpar, pb, size)) < 0)
                         return ret;
index 85356ec439824a58b430de4fc5d4966c888610a3..d0f942f3e46604417c651ac81f621fa7e1e415a2 100644 (file)
@@ -135,7 +135,6 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size)
             return AVERROR_INVALIDDATA;
         }
 
-        av_freep(&st->codecpar->extradata);
         if ((ret = ff_alloc_extradata(st->codecpar, ALAC_HEADER)) < 0)
             return ret;
 
@@ -175,10 +174,8 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size)
             return AVERROR_PATCHWELCOME;
         }
         avio_skip(pb, size);
-    } else {
-        av_freep(&st->codecpar->extradata);
-        if ((ret = ff_get_extradata(s, st->codecpar, pb, size)) < 0)
-            return ret;
+    } else if ((ret = ff_get_extradata(s, st->codecpar, pb, size)) < 0) {
+        return ret;
     }
 
     return 0;
index b80294efbf427308d6fe6502549943ac9d940129..e826821241670c9c80295137a604176d166353ec 100644 (file)
@@ -171,10 +171,6 @@ static int copy_stream_props(AVStream *st, AVStream *source_st)
 
     if (st->codecpar->codec_id || !source_st->codecpar->codec_id) {
         if (st->codecpar->extradata_size < source_st->codecpar->extradata_size) {
-            if (st->codecpar->extradata) {
-                av_freep(&st->codecpar->extradata);
-                st->codecpar->extradata_size = 0;
-            }
             ret = ff_alloc_extradata(st->codecpar,
                                      source_st->codecpar->extradata_size);
             if (ret < 0)
index 4ba72fb037fe06df6a5137e1eefe20e1faf65dd8..615d6b25c56bf394c45c2d781a61e0dd5bbcee2f 100644 (file)
@@ -175,7 +175,6 @@ static int flic_read_header(AVFormatContext *s)
         avio_seek(pb, 12, SEEK_SET);
 
         /* send over abbreviated FLIC header chunk */
-        av_freep(&st->codecpar->extradata);
         if ((ret = ff_alloc_extradata(st->codecpar, 12)) < 0)
             return ret;
         memcpy(st->codecpar->extradata, header, 12);
index 03b0c22f9d16122579f8b112ddb2be75211095e6..7c3e5b06c6feb7087689744faa3320863c74119a 100644 (file)
@@ -799,7 +799,6 @@ static int flv_get_extradata(AVFormatContext *s, AVStream *st, int size)
     if (!size)
         return 0;
 
-    av_freep(&st->codecpar->extradata);
     if ((ret = ff_get_extradata(s, st->codecpar, s->pb, size)) < 0)
         return ret;
     st->internal->need_context_update = 1;
index 570f36135157044e2a3636aa22aaa872a6950b09..469b604de66648ee81427d3276f386785a1bf7f2 100644 (file)
@@ -2264,7 +2264,6 @@ static int mkv_check_new_extra_data(AVFormatContext *s, AVPacket *pkt)
                 return ret;
             if (!output_sample_rate)
                 output_sample_rate = track->sample_rate; // Space is already reserved, so it's this or a void element.
-            av_freep(&par->extradata);
             ret = ff_alloc_extradata(par, side_data_size);
             if (ret < 0)
                 return ret;
index dd903f71a020ea26cef243a2f43774578fa8a148..890c6e85b8aae6b5eea3d94bf7c5a628682e963b 100644 (file)
@@ -1838,7 +1838,6 @@ static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         st->codecpar->codec_id == AV_CODEC_ID_QDMC ||
         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(c->fc, st->codecpar, pb, atom.size);
         if (ret < 0)
             return ret;
@@ -1905,7 +1904,6 @@ static int mov_read_glbl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         av_log(c->fc, AV_LOG_WARNING, "ignoring multiple glbl\n");
         return 0;
     }
-    av_freep(&st->codecpar->extradata);
     ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size);
     if (ret < 0)
         return ret;
@@ -1938,7 +1936,6 @@ static int mov_read_dvc1(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return 0;
 
     avio_seek(pb, 6, SEEK_CUR);
-    av_freep(&st->codecpar->extradata);
     ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size - 7);
     if (ret < 0)
         return ret;
@@ -1966,7 +1963,6 @@ static int mov_read_strf(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return AVERROR_INVALIDDATA;
 
     avio_skip(pb, 40);
-    av_freep(&st->codecpar->extradata);
     ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size - 40);
     if (ret < 0)
         return ret;
index 612f845b4bd9eb150a62916da15ae609610b0939..bef0ae4860c95671f1784e3689b72bd8ce0b601b 100644 (file)
@@ -83,10 +83,6 @@ static int get_codec_data(AVFormatContext *s, AVIOContext *pb, AVStream *vst,
             avio_skip(pb, 6);
             size = PKTSIZE(avio_rl32(pb));
             if (vst && subtype == 'R') {
-                if (vst->codecpar->extradata) {
-                    av_freep(&vst->codecpar->extradata);
-                    vst->codecpar->extradata_size = 0;
-                }
                 if ((ret = ff_get_extradata(NULL, vst->codecpar, pb, size)) < 0)
                     return ret;
                 size = 0;
index f25efb8c2a24221f4f5c8a6be2b6e05208a9008d..469b22999536c150c7a25f2faae4ec8203328bc4 100644 (file)
@@ -109,7 +109,6 @@ ogm_header(AVFormatContext *s, int idx)
                 size -= 52;
                 if (bytestream2_get_bytes_left(&p) < size)
                     return AVERROR_INVALIDDATA;
-                av_freep(&st->codecpar->extradata);
                 if ((ret = ff_alloc_extradata(st->codecpar, size)) < 0)
                     return ret;
                 bytestream2_get_buffer(&p, st->codecpar->extradata, st->codecpar->extradata_size);
index 38908dc2dd70eadec78a908716991ee6f620c315..56b53e74e8d03a7c591f57aa70f3194552a0e37f 100644 (file)
@@ -63,7 +63,6 @@ static int opus_header(AVFormatContext *avf, int idx)
         /*gain                = AV_RL16(packet + 16);*/
         /*channel_map         = AV_RL8 (packet + 18);*/
 
-        av_freep(&st->codecpar->extradata);
         if ((ret = ff_alloc_extradata(st->codecpar, os->psize)) < 0)
             return ret;
 
index 5523b31adce1831106b0e9b618764e82c60c3ee0..070c42eee3499eb2906658fddcc08e071edd55e7 100644 (file)
@@ -145,7 +145,6 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
             size   -= 22;
         }
         if (cbSize > 0) {
-            av_freep(&par->extradata);
             if (ff_get_extradata(s, par, pb, cbSize) < 0)
                 return AVERROR(ENOMEM);
             size -= cbSize;
@@ -158,7 +157,6 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
         int nb_streams, i;
 
         size -= 4;
-        av_freep(&par->extradata);
         if (ff_get_extradata(s, par, pb, size) < 0)
             return AVERROR(ENOMEM);
         nb_streams         = AV_RL16(par->extradata + 4);
index de18e81ea9677e098ebbca3ca4bdad81ba41a952..104a00af18927774d809cc0e90e2c40ffaa63d09 100644 (file)
@@ -115,7 +115,6 @@ static int parse_fmtp_config(AVStream *st, const char *value)
         ret = AVERROR_PATCHWELCOME;
         goto end;
     }
-    av_freep(&st->codecpar->extradata);
     ret = ff_alloc_extradata(st->codecpar, (get_bits_left(&gb) + 7)/8);
     if (ret < 0) {
         goto end;
index 45569c18d18a3c62afd991f9c65dff2fbaa4c8b5..34c7950bcc501ac87b019aefd9dea902e2d36202 100644 (file)
@@ -113,7 +113,7 @@ static int parse_fmtp_config(AVCodecParameters *par, const char *value)
 {
     /* decode the hexa encoded parameter */
     int len = ff_hex_to_data(NULL, value), ret;
-    av_freep(&par->extradata);
+
     if ((ret = ff_alloc_extradata(par, len)) < 0)
         return ret;
     ff_hex_to_data(par->extradata, value);
index a6a746becb48cb00728331377f98cc45968feab0..1eec2da5b4cc8102f67918c587ad17e3e8d4388a 100644 (file)
@@ -105,7 +105,7 @@ static int qdm2_parse_config(PayloadContext *qdm, AVStream *st,
             case 4: /* stream with extradata */
                 if (item_len < 30)
                     return AVERROR_INVALIDDATA;
-                av_freep(&st->codecpar->extradata);
+
                 ret = ff_alloc_extradata(st->codecpar, 26 + item_len);
                 if (ret < 0) {
                     return ret;
index 77164dd6f917efc71a76e81a7afda17e9f8f56ca..ffe21ac4c4a944cc859f12425a7a7e9495724e97 100644 (file)
@@ -58,10 +58,6 @@ static int svq3_parse_packet (AVFormatContext *s, PayloadContext *sv,
     len -= 2;
 
     if (config_packet) {
-
-        av_freep(&st->codecpar->extradata);
-        st->codecpar->extradata_size = 0;
-
         if (len < 2 || ff_alloc_extradata(st->codecpar, len + 8))
             return AVERROR_INVALIDDATA;
 
index 2d772b25a8f69657c4921a1a97a8a0bf94f034c1..b472762dd12921baa3ce35a7252cb64889b524f1 100644 (file)
@@ -5480,7 +5480,6 @@ int ff_generate_avci_extradata(AVStream *st)
     if (!size)
         return 0;
 
-    av_freep(&st->codecpar->extradata);
     if ((ret = ff_alloc_extradata(st->codecpar, size)) < 0)
         return ret;
     memcpy(st->codecpar->extradata, data, size);
index cfaf3d61fe45ae66a748b9d5f728f1ee6ff38ad4..575c6674521257c98b98fce4bbfa34b5f5ba2bfc 100644 (file)
@@ -220,7 +220,6 @@ static int wav_parse_xma2_tag(AVFormatContext *s, int64_t size, AVStream **st)
     avpriv_set_pts_info(*st, 64, 1, (*st)->codecpar->sample_rate);
 
     avio_seek(pb, -size, SEEK_CUR);
-    av_freep(&(*st)->codecpar->extradata);
     if ((ret = ff_get_extradata(s, (*st)->codecpar, pb, size)) < 0)
         return ret;
 
index 7f12956458c71386bb2836522a919f9401667e36..0c69d267de20367a974677f6e5e5433333272128 100644 (file)
@@ -397,8 +397,6 @@ static int xmv_process_packet_header(AVFormatContext *s)
                 av_assert0(xmv->video.stream_index < s->nb_streams);
 
                 if (vst->codecpar->extradata_size < 4) {
-                    av_freep(&vst->codecpar->extradata);
-
                     if ((ret = ff_alloc_extradata(vst->codecpar, 4)) < 0)
                         return ret;
                 }