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/trunktags/v0.6
@@ -8083,10 +8083,8 @@ int main(void){ | |||||
#endif /* TEST */ | #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; | int i; | ||||
av_freep(&h->rbsp_buffer[0]); | 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++) | for(i = 0; i < MAX_PPS_COUNT; i++) | ||||
av_freep(h->pps_buffers + 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); | MPV_common_end(s); | ||||
@@ -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); | 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 */ | #endif /* AVCODEC_H264_H */ |
@@ -306,6 +306,7 @@ static void close(AVCodecParserContext *s) | |||||
ParseContext *pc = &h->s.parse_context; | ParseContext *pc = &h->s.parse_context; | ||||
av_free(pc->buffer); | av_free(pc->buffer); | ||||
ff_h264_free_context(h); | |||||
} | } | ||||