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