Mercurial > libavcodec.hg
comparison h264.c @ 9380:54e650136c87 libavcodec
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.
author | reimar |
---|---|
date | Fri, 10 Apr 2009 07:01:55 +0000 |
parents | 54bc8a2727b0 |
children | 828d15d322ed |
comparison
equal
deleted
inserted
replaced
9379:d31c367da415 | 9380:54e650136c87 |
---|---|
8081 return 0; | 8081 return 0; |
8082 } | 8082 } |
8083 #endif /* TEST */ | 8083 #endif /* TEST */ |
8084 | 8084 |
8085 | 8085 |
8086 av_cold ff_h264_free_context(H264Context *h) | |
8087 { | |
8088 int i; | |
8089 | |
8090 av_freep(&h->rbsp_buffer[0]); | |
8091 av_freep(&h->rbsp_buffer[1]); | |
8092 free_tables(h); //FIXME cleanup init stuff perhaps | |
8093 | |
8094 for(i = 0; i < MAX_SPS_COUNT; i++) | |
8095 av_freep(h->sps_buffers + i); | |
8096 | |
8097 for(i = 0; i < MAX_PPS_COUNT; i++) | |
8098 av_freep(h->pps_buffers + i); | |
8099 } | |
8100 | |
8086 static av_cold int decode_end(AVCodecContext *avctx) | 8101 static av_cold int decode_end(AVCodecContext *avctx) |
8087 { | 8102 { |
8088 H264Context *h = avctx->priv_data; | 8103 H264Context *h = avctx->priv_data; |
8089 MpegEncContext *s = &h->s; | 8104 MpegEncContext *s = &h->s; |
8090 int i; | 8105 |
8091 | 8106 ff_h264_free_context(h); |
8092 av_freep(&h->rbsp_buffer[0]); | |
8093 av_freep(&h->rbsp_buffer[1]); | |
8094 free_tables(h); //FIXME cleanup init stuff perhaps | |
8095 | |
8096 for(i = 0; i < MAX_SPS_COUNT; i++) | |
8097 av_freep(h->sps_buffers + i); | |
8098 | |
8099 for(i = 0; i < MAX_PPS_COUNT; i++) | |
8100 av_freep(h->pps_buffers + i); | |
8101 | 8107 |
8102 MPV_common_end(s); | 8108 MPV_common_end(s); |
8103 | 8109 |
8104 // memset(h, 0, sizeof(H264Context)); | 8110 // memset(h, 0, sizeof(H264Context)); |
8105 | 8111 |