summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2015-02-24 13:07:57 +0200
committerMartin Storsjö <martin@martin.st>2015-02-24 23:07:35 +0200
commitbb4a310bb85f43e62240145a656b1e5285b14239 (patch)
tree9f1b1e66cfa5c36737c5f203c74becd8ccb84404
parentf4b59334bd898c47c9ac30999a346176548630a8 (diff)
rtpdec: Don't free the payload context in the .free function
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>
-rw-r--r--libavformat/rdt.c1
-rw-r--r--libavformat/rtpdec.h4
-rw-r--r--libavformat/rtpdec_ac3.c1
-rw-r--r--libavformat/rtpdec_dv.c1
-rw-r--r--libavformat/rtpdec_h261.c3
-rw-r--r--libavformat/rtpdec_h263_rfc2190.c1
-rw-r--r--libavformat/rtpdec_h264.c2
-rw-r--r--libavformat/rtpdec_jpeg.c1
-rw-r--r--libavformat/rtpdec_latm.c1
-rw-r--r--libavformat/rtpdec_mpa_robust.c1
-rw-r--r--libavformat/rtpdec_mpeg4.c1
-rw-r--r--libavformat/rtpdec_mpegts.c1
-rw-r--r--libavformat/rtpdec_qt.c1
-rw-r--r--libavformat/rtpdec_svq3.c1
-rw-r--r--libavformat/rtpdec_vp8.c1
-rw-r--r--libavformat/rtpdec_xiph.c1
-rw-r--r--libavformat/rtsp.c3
17 files changed, 4 insertions, 21 deletions
diff --git a/libavformat/rdt.c b/libavformat/rdt.c
index a6baf4616b..2574496d2f 100644
--- a/libavformat/rdt.c
+++ b/libavformat/rdt.c
@@ -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) \
diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h
index 9b7c36c649..8992c38d3b 100644
--- a/libavformat/rtpdec.h
+++ b/libavformat/rtpdec.h
@@ -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;
diff --git a/libavformat/rtpdec_ac3.c b/libavformat/rtpdec_ac3.c
index 4a793d48d3..480fdd0cd5 100644
--- a/libavformat/rtpdec_ac3.c
+++ b/libavformat/rtpdec_ac3.c
@@ -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,
diff --git a/libavformat/rtpdec_dv.c b/libavformat/rtpdec_dv.c
index ce2d22de12..c428322097 100644
--- a/libavformat/rtpdec_dv.c
+++ b/libavformat/rtpdec_dv.c
@@ -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,
diff --git a/libavformat/rtpdec_h261.c b/libavformat/rtpdec_h261.c
index dac76c8ad7..b2d2a53f1c 100644
--- a/libavformat/rtpdec_h261.c
+++ b/libavformat/rtpdec_h261.c
@@ -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,
diff --git a/libavformat/rtpdec_h263_rfc2190.c b/libavformat/rtpdec_h263_rfc2190.c
index ae6e38ecfe..e45778108b 100644
--- a/libavformat/rtpdec_h263_rfc2190.c
+++ b/libavformat/rtpdec_h263_rfc2190.c
@@ -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,
diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c
index a74be1fc05..99365d6745 100644
--- a/libavformat/rtpdec_h264.c
+++ b/libavformat/rtpdec_h264.c
@@ -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,
diff --git a/libavformat/rtpdec_jpeg.c b/libavformat/rtpdec_jpeg.c
index b49185a751..0bc9eea13c 100644
--- a/libavformat/rtpdec_jpeg.c
+++ b/libavformat/rtpdec_jpeg.c
@@ -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,
diff --git a/libavformat/rtpdec_latm.c b/libavformat/rtpdec_latm.c
index 6d5b46a726..3ee552e414 100644
--- a/libavformat/rtpdec_latm.c
+++ b/libavformat/rtpdec_latm.c
@@ -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,
diff --git a/libavformat/rtpdec_mpa_robust.c b/libavformat/rtpdec_mpa_robust.c
index d7a01049b0..46e9f36e8d 100644
--- a/libavformat/rtpdec_mpa_robust.c
+++ b/libavformat/rtpdec_mpa_robust.c
@@ -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,
diff --git a/libavformat/rtpdec_mpeg4.c b/libavformat/rtpdec_mpeg4.c
index 3fb89372ae..b5dc2eb157 100644
--- a/libavformat/rtpdec_mpeg4.c
+++ b/libavformat/rtpdec_mpeg4.c
@@ -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)
diff --git a/libavformat/rtpdec_mpegts.c b/libavformat/rtpdec_mpegts.c
index 5ef17cbdf1..72e11a8af2 100644
--- a/libavformat/rtpdec_mpegts.c
+++ b/libavformat/rtpdec_mpegts.c
@@ -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,
diff --git a/libavformat/rtpdec_qt.c b/libavformat/rtpdec_qt.c
index 7c14bada56..3836a955e7 100644
--- a/libavformat/rtpdec_qt.c
+++ b/libavformat/rtpdec_qt.c
@@ -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) \
diff --git a/libavformat/rtpdec_svq3.c b/libavformat/rtpdec_svq3.c
index d2c0a0b2b2..4667c75cb8 100644
--- a/libavformat/rtpdec_svq3.c
+++ b/libavformat/rtpdec_svq3.c
@@ -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 = {
diff --git a/libavformat/rtpdec_vp8.c b/libavformat/rtpdec_vp8.c
index 4701316b2f..9fa5afa629 100644
--- a/libavformat/rtpdec_vp8.c
+++ b/libavformat/rtpdec_vp8.c
@@ -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)
diff --git a/libavformat/rtpdec_xiph.c b/libavformat/rtpdec_xiph.c
index a9d3fbbe00..5d0dc69dc2 100644
--- a/libavformat/rtpdec_xiph.c
+++ b/libavformat/rtpdec_xiph.c
@@ -63,7 +63,6 @@ static void xiph_free_context(PayloadContext * data)
{
free_fragment(data);
av_free(data->split_buf);
- av_free(data);
}
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 3180d5bb94..50cefb09bc 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -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]);