rtpdec: Don't free the payload context in the .free function
authorMartin Storsjö <martin@martin.st>
Tue, 24 Feb 2015 11:07:57 +0000 (13:07 +0200)
committerMartin Storsjö <martin@martin.st>
Tue, 24 Feb 2015 21:07:35 +0000 (23:07 +0200)
This makes it more consistent with depacketizers that don't have any
.free function at all, where the payload context is freed by the
surrounding framework. Always free the context in the surrounding
framework, having the individual depacketizers only free any data
they've specifically allocated themselves.

This is similar to how this works for demuxer/muxers/codecs - a
component shouldn't free the priv_data that the framework has
allocated for it.

Signed-off-by: Martin Storsjö <martin@martin.st>
17 files changed:
libavformat/rdt.c
libavformat/rtpdec.h
libavformat/rtpdec_ac3.c
libavformat/rtpdec_dv.c
libavformat/rtpdec_h261.c
libavformat/rtpdec_h263_rfc2190.c
libavformat/rtpdec_h264.c
libavformat/rtpdec_jpeg.c
libavformat/rtpdec_latm.c
libavformat/rtpdec_mpa_robust.c
libavformat/rtpdec_mpeg4.c
libavformat/rtpdec_mpegts.c
libavformat/rtpdec_qt.c
libavformat/rtpdec_svq3.c
libavformat/rtpdec_vp8.c
libavformat/rtpdec_xiph.c
libavformat/rtsp.c

index a6baf46..2574496 100644 (file)
@@ -543,7 +543,6 @@ rdt_free_context (PayloadContext *rdt)
         avformat_close_input(&rdt->rmctx);
     av_freep(&rdt->mlti_data);
     av_freep(&rdt->rmst);
-    av_free(rdt);
 }
 
 #define RDT_HANDLER(n, s, t) \
index 9b7c36c..8992c38 100644 (file)
@@ -127,7 +127,9 @@ struct RTPDynamicProtocolHandler {
     /** Parse the a= line from the sdp field */
     int (*parse_sdp_a_line)(AVFormatContext *s, int st_index,
                             PayloadContext *priv_data, const char *line);
-    /** Free any data needed by the rtp parsing for this dynamic data. */
+    /** Free any data needed by the rtp parsing for this dynamic data.
+      * Don't free the protocol_data pointer itself, that is freed by the
+      * caller. */
     void (*free)(PayloadContext *protocol_data);
     /** Parse handler for this dynamic packet */
     DynamicPayloadPacketHandlerProc parse_packet;
index 4a793d4..480fdd0 100644 (file)
@@ -44,7 +44,6 @@ static void free_fragment(PayloadContext *data)
 static void ac3_free_context(PayloadContext *data)
 {
     free_fragment(data);
-    av_free(data);
 }
 
 static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data,
index ce2d22d..c428322 100644 (file)
@@ -42,7 +42,6 @@ static void dv_free_dyn_buffer(AVIOContext **dyn_buf)
 static av_cold void dv_free_context(PayloadContext *data)
 {
     dv_free_dyn_buffer(&data->buf);
-    av_free(data);
 }
 
 static av_cold int dv_sdp_parse_fmtp_config(AVFormatContext *s,
index dac76c8..b2d2a53 100644 (file)
@@ -50,9 +50,6 @@ static av_cold void h261_free_context(PayloadContext *pl_ctx)
     if (pl_ctx->buf) {
         h261_free_dyn_buffer(&pl_ctx->buf);
     }
-
-    /* free context */
-    av_free(pl_ctx);
 }
 
 static int h261_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_h261_ctx,
index ae6e38e..e457781 100644 (file)
@@ -46,7 +46,6 @@ static void h263_free_context(PayloadContext *data)
         avio_close_dyn_buf(data->buf, &p);
         av_free(p);
     }
-    av_free(data);
 }
 
 static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data,
index a74be1f..99365d6 100644 (file)
@@ -382,8 +382,6 @@ static void h264_free_context(PayloadContext *data)
                    data->packet_types_received[ii], ii);
     }
 #endif
-
-    av_free(data);
 }
 
 static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
index b49185a..0bc9eea 100644 (file)
@@ -72,7 +72,6 @@ static void free_frame(PayloadContext *jpeg)
 static void jpeg_free_context(PayloadContext *jpeg)
 {
     free_frame(jpeg);
-    av_free(jpeg);
 }
 
 static int jpeg_create_huffman_table(PutByteContext *p, int table_class,
index 6d5b46a..3ee552e 100644 (file)
@@ -39,7 +39,6 @@ static void latm_free_context(PayloadContext *data)
         av_free(p);
     }
     av_free(data->buf);
-    av_free(data);
 }
 
 static int latm_parse_packet(AVFormatContext *ctx, PayloadContext *data,
index d7a0104..46e9f36 100644 (file)
@@ -47,7 +47,6 @@ static void mpa_robust_free_context(PayloadContext *data)
 {
     free_fragment(data);
     av_free(data->split_buf);
-    av_free(data);
 }
 
 static int mpa_robust_parse_rtp_header(AVFormatContext *ctx,
index 3fb8937..b5dc2eb 100644 (file)
@@ -95,7 +95,6 @@ static void free_context(PayloadContext *data)
 {
     av_free(data->au_headers);
     av_free(data->mode);
-    av_free(data);
 }
 
 static int parse_fmtp_config(AVCodecContext *codec, const char *value)
index 5ef17cb..72e11a8 100644 (file)
@@ -36,7 +36,6 @@ static void mpegts_free_context(PayloadContext *data)
         return;
     if (data->ts)
         ff_mpegts_parse_close(data->ts);
-    av_free(data);
 }
 
 static av_cold int mpegts_init(AVFormatContext *ctx, int st_index,
index 7c14bad..3836a95 100644 (file)
@@ -238,7 +238,6 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt,
 static void qt_rtp_free(PayloadContext *qt)
 {
     av_freep(&qt->pkt.data);
-    av_free(qt);
 }
 
 #define RTP_QT_HANDLER(m, n, s, t) \
index d2c0a0b..4667c75 100644 (file)
@@ -116,7 +116,6 @@ static void svq3_extradata_free(PayloadContext *sv)
         avio_close_dyn_buf(sv->pktbuf, &buf);
         av_free(buf);
     }
-    av_free(sv);
 }
 
 RTPDynamicProtocolHandler ff_svq3_dynamic_handler = {
index 4701316..9fa5afa 100644 (file)
@@ -278,7 +278,6 @@ static av_cold int vp8_init(AVFormatContext *s, int st_index, PayloadContext *vp
 static void vp8_free_context(PayloadContext *vp8)
 {
     vp8_free_buffer(vp8);
-    av_free(vp8);
 }
 
 static int vp8_need_keyframe(PayloadContext *vp8)
index a9d3fbb..5d0dc69 100644 (file)
@@ -63,7 +63,6 @@ static void xiph_free_context(PayloadContext * data)
 {
     free_fragment(data);
     av_free(data->split_buf);
-    av_free(data);
 }
 
 
index 3180d5b..50cefb0 100644 (file)
@@ -725,8 +725,7 @@ void ff_rtsp_close_streams(AVFormatContext *s)
                 if (rtsp_st->dynamic_handler->free)
                     rtsp_st->dynamic_handler->free(
                         rtsp_st->dynamic_protocol_context);
-                else
-                    av_free(rtsp_st->dynamic_protocol_context);
+                av_free(rtsp_st->dynamic_protocol_context);
             }
             for (j = 0; j < rtsp_st->nb_include_source_addrs; j++)
                 av_free(rtsp_st->include_source_addrs[j]);