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); | |||||
| } | } | ||||