Commit bb4a310b authored by Martin Storsjö's avatar Martin Storsjö

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: 's avatarMartin Storsjö <martin@martin.st>
parent f4b59334
......@@ -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) \
......
......@@ -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;
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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)
......
......@@ -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,
......
......@@ -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) \
......
......@@ -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 = {
......
......@@ -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)
......
......@@ -63,7 +63,6 @@ static void xiph_free_context(PayloadContext * data)
{
free_fragment(data);
av_free(data->split_buf);
av_free(data);
}
......
......@@ -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]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment