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) ...@@ -543,7 +543,6 @@ rdt_free_context (PayloadContext *rdt)
avformat_close_input(&rdt->rmctx); avformat_close_input(&rdt->rmctx);
av_freep(&rdt->mlti_data); av_freep(&rdt->mlti_data);
av_freep(&rdt->rmst); av_freep(&rdt->rmst);
av_free(rdt);
} }
#define RDT_HANDLER(n, s, t) \ #define RDT_HANDLER(n, s, t) \
......
...@@ -127,7 +127,9 @@ struct RTPDynamicProtocolHandler { ...@@ -127,7 +127,9 @@ struct RTPDynamicProtocolHandler {
/** Parse the a= line from the sdp field */ /** Parse the a= line from the sdp field */
int (*parse_sdp_a_line)(AVFormatContext *s, int st_index, int (*parse_sdp_a_line)(AVFormatContext *s, int st_index,
PayloadContext *priv_data, const char *line); 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); void (*free)(PayloadContext *protocol_data);
/** Parse handler for this dynamic packet */ /** Parse handler for this dynamic packet */
DynamicPayloadPacketHandlerProc parse_packet; DynamicPayloadPacketHandlerProc parse_packet;
......
...@@ -44,7 +44,6 @@ static void free_fragment(PayloadContext *data) ...@@ -44,7 +44,6 @@ static void free_fragment(PayloadContext *data)
static void ac3_free_context(PayloadContext *data) static void ac3_free_context(PayloadContext *data)
{ {
free_fragment(data); free_fragment(data);
av_free(data);
} }
static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data, static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data,
......
...@@ -42,7 +42,6 @@ static void dv_free_dyn_buffer(AVIOContext **dyn_buf) ...@@ -42,7 +42,6 @@ static void dv_free_dyn_buffer(AVIOContext **dyn_buf)
static av_cold void dv_free_context(PayloadContext *data) static av_cold void dv_free_context(PayloadContext *data)
{ {
dv_free_dyn_buffer(&data->buf); dv_free_dyn_buffer(&data->buf);
av_free(data);
} }
static av_cold int dv_sdp_parse_fmtp_config(AVFormatContext *s, 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) ...@@ -50,9 +50,6 @@ static av_cold void h261_free_context(PayloadContext *pl_ctx)
if (pl_ctx->buf) { if (pl_ctx->buf) {
h261_free_dyn_buffer(&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, static int h261_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_h261_ctx,
......
...@@ -46,7 +46,6 @@ static void h263_free_context(PayloadContext *data) ...@@ -46,7 +46,6 @@ static void h263_free_context(PayloadContext *data)
avio_close_dyn_buf(data->buf, &p); avio_close_dyn_buf(data->buf, &p);
av_free(p); av_free(p);
} }
av_free(data);
} }
static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data, static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data,
......
...@@ -382,8 +382,6 @@ static void h264_free_context(PayloadContext *data) ...@@ -382,8 +382,6 @@ static void h264_free_context(PayloadContext *data)
data->packet_types_received[ii], ii); data->packet_types_received[ii], ii);
} }
#endif #endif
av_free(data);
} }
static int parse_h264_sdp_line(AVFormatContext *s, int st_index, static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
......
...@@ -72,7 +72,6 @@ static void free_frame(PayloadContext *jpeg) ...@@ -72,7 +72,6 @@ static void free_frame(PayloadContext *jpeg)
static void jpeg_free_context(PayloadContext *jpeg) static void jpeg_free_context(PayloadContext *jpeg)
{ {
free_frame(jpeg); free_frame(jpeg);
av_free(jpeg);
} }
static int jpeg_create_huffman_table(PutByteContext *p, int table_class, static int jpeg_create_huffman_table(PutByteContext *p, int table_class,
......
...@@ -39,7 +39,6 @@ static void latm_free_context(PayloadContext *data) ...@@ -39,7 +39,6 @@ static void latm_free_context(PayloadContext *data)
av_free(p); av_free(p);
} }
av_free(data->buf); av_free(data->buf);
av_free(data);
} }
static int latm_parse_packet(AVFormatContext *ctx, PayloadContext *data, static int latm_parse_packet(AVFormatContext *ctx, PayloadContext *data,
......
...@@ -47,7 +47,6 @@ static void mpa_robust_free_context(PayloadContext *data) ...@@ -47,7 +47,6 @@ static void mpa_robust_free_context(PayloadContext *data)
{ {
free_fragment(data); free_fragment(data);
av_free(data->split_buf); av_free(data->split_buf);
av_free(data);
} }
static int mpa_robust_parse_rtp_header(AVFormatContext *ctx, static int mpa_robust_parse_rtp_header(AVFormatContext *ctx,
......
...@@ -95,7 +95,6 @@ static void free_context(PayloadContext *data) ...@@ -95,7 +95,6 @@ static void free_context(PayloadContext *data)
{ {
av_free(data->au_headers); av_free(data->au_headers);
av_free(data->mode); av_free(data->mode);
av_free(data);
} }
static int parse_fmtp_config(AVCodecContext *codec, const char *value) static int parse_fmtp_config(AVCodecContext *codec, const char *value)
......
...@@ -36,7 +36,6 @@ static void mpegts_free_context(PayloadContext *data) ...@@ -36,7 +36,6 @@ static void mpegts_free_context(PayloadContext *data)
return; return;
if (data->ts) if (data->ts)
ff_mpegts_parse_close(data->ts); ff_mpegts_parse_close(data->ts);
av_free(data);
} }
static av_cold int mpegts_init(AVFormatContext *ctx, int st_index, 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, ...@@ -238,7 +238,6 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt,
static void qt_rtp_free(PayloadContext *qt) static void qt_rtp_free(PayloadContext *qt)
{ {
av_freep(&qt->pkt.data); av_freep(&qt->pkt.data);
av_free(qt);
} }
#define RTP_QT_HANDLER(m, n, s, t) \ #define RTP_QT_HANDLER(m, n, s, t) \
......
...@@ -116,7 +116,6 @@ static void svq3_extradata_free(PayloadContext *sv) ...@@ -116,7 +116,6 @@ static void svq3_extradata_free(PayloadContext *sv)
avio_close_dyn_buf(sv->pktbuf, &buf); avio_close_dyn_buf(sv->pktbuf, &buf);
av_free(buf); av_free(buf);
} }
av_free(sv);
} }
RTPDynamicProtocolHandler ff_svq3_dynamic_handler = { RTPDynamicProtocolHandler ff_svq3_dynamic_handler = {
......
...@@ -278,7 +278,6 @@ static av_cold int vp8_init(AVFormatContext *s, int st_index, PayloadContext *vp ...@@ -278,7 +278,6 @@ static av_cold int vp8_init(AVFormatContext *s, int st_index, PayloadContext *vp
static void vp8_free_context(PayloadContext *vp8) static void vp8_free_context(PayloadContext *vp8)
{ {
vp8_free_buffer(vp8); vp8_free_buffer(vp8);
av_free(vp8);
} }
static int vp8_need_keyframe(PayloadContext *vp8) static int vp8_need_keyframe(PayloadContext *vp8)
......
...@@ -63,7 +63,6 @@ static void xiph_free_context(PayloadContext * data) ...@@ -63,7 +63,6 @@ static void xiph_free_context(PayloadContext * data)
{ {
free_fragment(data); free_fragment(data);
av_free(data->split_buf); av_free(data->split_buf);
av_free(data);
} }
......
...@@ -725,8 +725,7 @@ void ff_rtsp_close_streams(AVFormatContext *s) ...@@ -725,8 +725,7 @@ void ff_rtsp_close_streams(AVFormatContext *s)
if (rtsp_st->dynamic_handler->free) if (rtsp_st->dynamic_handler->free)
rtsp_st->dynamic_handler->free( rtsp_st->dynamic_handler->free(
rtsp_st->dynamic_protocol_context); 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++) for (j = 0; j < rtsp_st->nb_include_source_addrs; j++)
av_free(rtsp_st->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