Browse Source

Add a ff_h264_free_context function and call it from the H.264 parser.

This ensures that the parser will no longer leak memory for all SPS/PPS it encounters.

Originally committed as revision 18406 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.6
Reimar Döffinger 16 years ago
parent
commit
15861962a7
3 changed files with 15 additions and 3 deletions
  1. +9
    -3
      libavcodec/h264.c
  2. +5
    -0
      libavcodec/h264.h
  3. +1
    -0
      libavcodec/h264_parser.c

+ 9
- 3
libavcodec/h264.c View File

@@ -8083,10 +8083,8 @@ int main(void){
#endif /* TEST */


static av_cold int decode_end(AVCodecContext *avctx)
av_cold ff_h264_free_context(H264Context *h)
{
H264Context *h = avctx->priv_data;
MpegEncContext *s = &h->s;
int i;

av_freep(&h->rbsp_buffer[0]);
@@ -8098,6 +8096,14 @@ static av_cold int decode_end(AVCodecContext *avctx)

for(i = 0; i < MAX_PPS_COUNT; i++)
av_freep(h->pps_buffers + i);
}

static av_cold int decode_end(AVCodecContext *avctx)
{
H264Context *h = avctx->priv_data;
MpegEncContext *s = &h->s;

ff_h264_free_context(h);

MPV_common_end(s);



+ 5
- 0
libavcodec/h264.h View File

@@ -569,4 +569,9 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_l
*/
int ff_h264_decode_rbsp_trailing(H264Context *h, const uint8_t *src);

/**
* frees any data that may have been allocated in the H264 context like SPS, PPS etc.
*/
av_cold ff_h264_free_context(H264Context *h);

#endif /* AVCODEC_H264_H */

+ 1
- 0
libavcodec/h264_parser.c View File

@@ -306,6 +306,7 @@ static void close(AVCodecParserContext *s)
ParseContext *pc = &h->s.parse_context;

av_free(pc->buffer);
ff_h264_free_context(h);
}




Loading…
Cancel
Save